// Copyright 2014 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <string>

#include "starboard/configuration.h"

#ifndef COBALT_BROWSER_SWITCHES_H_
#define COBALT_BROWSER_SWITCHES_H_

namespace cobalt {
namespace browser {
namespace switches {

#if defined(ENABLE_DEBUG_COMMAND_LINE_SWITCHES)
extern const char kAudioDecoderStub[];
extern const char kAudioDecoderStubHelp[];
extern const char kDebugConsoleMode[];
extern const char kDebugConsoleModeHelp[];

#if defined(ENABLE_REMOTE_DEBUGGING)
extern const char kWaitForWebDebugger[];
extern const char kWaitForWebDebuggerHelp[];
#endif  // ENABLE_REMOTE_DEBUGGING

extern const char kDisableImageAnimations[];
extern const char kDisableImageAnimationsHelp[];
extern const char kForceDeterministicRendering[];
extern const char kDisableRasterizerCaching[];
extern const char kDisableSignIn[];
extern const char kDisableSignInHelp[];
extern const char kDisableSplashScreenOnReloads[];
extern const char kDisableSplashScreenOnReloadsHelp[];
extern const char kDisableWebDriver[];
extern const char kDisableWebDriverHelp[];
extern const char kDisableWebmVp9[];
extern const char kDisableWebmVp9Help[];
extern const char kExtraWebFileDir[];
extern const char kExtraWebFileDirHelp[];
extern const char kFakeMicrophone[];
extern const char kFakeMicrophoneHelp[];
extern const char kIgnoreCertificateErrors[];
extern const char kIgnoreCertificateErrorsHelp[];
extern const char kInputFuzzer[];
extern const char kInputFuzzerHelp[];
extern const char kMemoryTracker[];
extern const char kMemoryTrackerHelp[];
extern const char kMinCompatibilityVersion[];
extern const char kMinCompatibilityVersionHelp[];
extern const char kMinLogLevel[];
extern const char kMinLogLevelHelp[];
extern const char kNullAudioStreamer[];
extern const char kNullAudioStreamerHelp[];
extern const char kNullSavegame[];
extern const char kNullSavegameHelp[];
extern const char kDisablePartialLayout[];
extern const char kDisablePartialLayoutHelp[];
extern const char kProd[];
extern const char kProdHelp[];
extern const char kProxy[];
extern const char kProxyHelp[];
extern const char kRemoteDebuggingPort[];
extern const char kRemoteDebuggingPortHelp[];
extern const char kRequireCSP[];
extern const char kRequireCSPHelp[];
extern const char kRequireHTTPSLocation[];
extern const char kRequireHTTPSLocationHelp[];
extern const char kShutdownAfter[];
extern const char kShutdownAfterHelp[];
extern const char kStubImageDecoder[];
extern const char kStubImageDecoderHelp[];
extern const char kSuspendFuzzer[];
extern const char kSuspendFuzzerHelp[];
extern const char kTimedTrace[];
extern const char kTimedTraceHelp[];
extern const char kUserAgentOsNameVersion[];
extern const char kUserAgentOsNameVersionHelp[];
extern const char kUseTTS[];
extern const char kUseTTSHelp[];
extern const char kVideoDecoderStub[];
extern const char kVideoDecoderStubHelp[];
extern const char kWebDriverListenIp[];
extern const char kWebDriverListenIpHelp[];
extern const char kWebDriverPort[];
extern const char kWebDriverPortHelp[];

#if SB_HAS(ON_SCREEN_KEYBOARD)
extern const char kDisableOnScreenKeyboard[];
extern const char kDisableOnScreenKeyboardHelp[];
#endif  // SB_HAS(ON_SCREEN_KEYBOARD)
#endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES

extern const char kDisableJavaScriptJit[];
extern const char kDisableJavaScriptJitHelp[];
extern const char kDisableTimerResolutionLimit[];
extern const char kDisableTimerResolutionLimitHelp[];
extern const char kEnableMapToMeshRectanglar[];
extern const char kForceMigrationForStoragePartitioning[];
extern const char kFPSPrint[];
extern const char kFPSPrintHelp[];
extern const char kFPSOverlay[];
extern const char kFPSOverlayHelp[];
extern const char kHelp[];
extern const char kHelpHelp[];
extern const char kImageCacheSizeInBytes[];
extern const char kImageCacheSizeInBytesHelp[];
extern const char kInitialURL[];
extern const char kInitialURLHelp[];
extern const char kJavaScriptGcThresholdInBytes[];
extern const char kJavaScriptGcThresholdInBytesHelp[];
extern const char kLocalStoragePartitionUrl[];
extern const char kLocalStoragePartitionUrlHelp[];
extern const char kMaxCobaltCpuUsage[];
extern const char kMaxCobaltCpuUsageHelp[];
extern const char kMaxCobaltGpuUsage[];
extern const char kMaxCobaltGpuUsageHelp[];
extern const char kOffscreenTargetCacheSizeInBytes[];
extern const char kOffscreenTargetCacheSizeInBytesHelp[];
extern const char kQrCodeOverlay[];
extern const char kQrCodeOverlayHelp[];
extern const char kReduceCpuMemoryBy[];
extern const char kReduceCpuMemoryByHelp[];
extern const char kReduceGpuMemoryBy[];
extern const char kReduceGpuMemoryByHelp[];
extern const char kRemoteTypefaceCacheSizeInBytes[];
extern const char kRemoteTypefaceCacheSizeInBytesHelp[];
extern const char kRetainRemoteTypefaceCacheDuringSuspend[];
extern const char kRetainRemoteTypefaceCacheDuringSuspendHelp[];
extern const char kScratchSurfaceCacheSizeInBytes[];
extern const char kScratchSurfaceCacheSizeInBytesHelp[];
extern const char kSkiaCacheSizeInBytes[];
extern const char kSkiaCacheSizeInBytesHelp[];
extern const char kSkiaTextureAtlasDimensions[];
extern const char kSkiaTextureAtlasDimensionsHelp[];
extern const char kSoftwareSurfaceCacheSizeInBytes[];
extern const char kSoftwareSurfaceCacheSizeInBytesHelp[];
extern const char kFallbackSplashScreenURL[];
extern const char kFallbackSplashScreenURLHelp[];
extern const char kVersion[];
extern const char kVersionHelp[];
extern const char kViewport[];
extern const char kViewportHelp[];
extern const char kVideoPlaybackRateMultiplier[];
extern const char kVideoPlaybackRateMultiplierHelp[];

std::string HelpMessage();

}  // namespace switches
}  // namespace browser
}  // namespace cobalt

#endif  // COBALT_BROWSER_SWITCHES_H_
