#include "base/command_line.h"
#include "base/memory/singleton.h"
+#include "base/metrics/sparse_histogram.h"
+#include "base/numerics/safe_conversions.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "cc/base/switches.h"
#include "chrome/common/chrome_switches.h"
#include "components/autofill/core/common/autofill_switches.h"
#include "components/cloud_devices/common/cloud_devices_switches.h"
+#include "components/metrics/metrics_hashes.h"
#include "components/nacl/common/nacl_switches.h"
+#include "components/search/search_switches.h"
#include "content/public/browser/user_metrics.h"
#include "extensions/common/switches.h"
#include "grit/chromium_strings.h"
#if defined(OS_ANDROID)
#include "chrome/common/chrome_version_info.h"
#include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h"
+#include "components/omnibox/omnibox_switches.h"
#endif
#if defined(USE_ASH)
namespace about_flags {
+const uint32_t kBadSwitchFormatHistogramId = 0;
+
// Macros to simplify specifying the type.
#define SINGLE_VALUE_TYPE_AND_VALUE(command_line_switch, switch_value) \
Experiment::SINGLE_VALUE, \
"2" }
};
#endif
+#if defined(OS_CHROMEOS) || defined(OS_WIN) || defined(OS_LINUX)
+const Experiment::Choice kDeviceScaleFactorChoices[] = {
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", ""},
+ { IDS_DEVICE_SCALE_FACTOR_1_1, switches::kForceDeviceScaleFactor, "1.1"},
+ { IDS_DEVICE_SCALE_FACTOR_1_2, switches::kForceDeviceScaleFactor, "1.2"},
+ { IDS_DEVICE_SCALE_FACTOR_1_25, switches::kForceDeviceScaleFactor, "1.25"},
+ { IDS_DEVICE_SCALE_FACTOR_1_3, switches::kForceDeviceScaleFactor, "1.3"},
+ { IDS_DEVICE_SCALE_FACTOR_1_4, switches::kForceDeviceScaleFactor, "1.4"},
+ { IDS_DEVICE_SCALE_FACTOR_2, switches::kForceDeviceScaleFactor, "2"},
+};
+#endif
#if !defined(DISABLE_NACL)
const Experiment::Choice kNaClDebugMaskChoices[] = {
const Experiment::Choice kExtensionContentVerificationChoices[] = {
{ IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
{ IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_BOOTSTRAP,
- extensions::switches::kExtensionContentVerification,
- extensions::switches::kExtensionContentVerificationBootstrap },
+ switches::kExtensionContentVerification,
+ switches::kExtensionContentVerificationBootstrap },
{ IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_ENFORCE,
- extensions::switches::kExtensionContentVerification,
- extensions::switches::kExtensionContentVerificationEnforce },
+ switches::kExtensionContentVerification,
+ switches::kExtensionContentVerificationEnforce },
{ IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_ENFORCE_STRICT,
- extensions::switches::kExtensionContentVerification,
- extensions::switches::kExtensionContentVerificationEnforceStrict },
+ switches::kExtensionContentVerification,
+ switches::kExtensionContentVerificationEnforceStrict },
};
#if defined(OS_ANDROID)
};
#endif
-// Using independent flags (instead of flag=value flags) to be able to
-// associate the version with a FieldTrial. FieldTrials don't currently support
-// flag=value flags.
-const Experiment::Choice kSSLInterstitialVersions[] = {
- { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
- { IDS_FLAGS_SSL_INTERSTITIAL_VERSION_V1,
- switches::kSSLInterstitialVersionV1, "" },
- { IDS_FLAGS_SSL_INTERSTITIAL_VERSION_V2_GRAY,
- switches::kSSLInterstitialVersionV2Gray, "" },
- { IDS_FLAGS_SSL_INTERSTITIAL_VERSION_V2_COLORFUL,
- switches::kSSLInterstitialVersionV2Colorful, "" },
-};
-
-// Using independent flags (instead of flag=value flags) to be able to
-// associate the version with a FieldTrial. FieldTrials don't currently support
-// flag=value flags.
-const Experiment::Choice kMalwareInterstitialVersions[] = {
- { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V2,
- switches::kMalwareInterstitialV2, "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V3,
- switches::kMalwareInterstitialV3, "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V3_ADVICE,
- switches::kMalwareInterstitialV3Advice, "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V3_SOCIAL,
- switches::kMalwareInterstitialV3Social, "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V3_NOTRECOMMEND,
- switches::kMalwareInterstitialV3NotRecommend, "" },
- { IDS_FLAGS_MALWARE_INTERSTITIAL_VERSION_V3_HISTORY,
- switches::kMalwareInterstitialV3History, "" },
-};
-
#if defined(OS_CHROMEOS)
const Experiment::Choice kEnableFileManagerMTPChoices[] = {
{ IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
::switches::kDisableSettingsWindow, "" },
};
+// Note that the value is specified in seconds (where 0 is equivalent to
+// disabled).
+const Experiment::Choice kRememberCertificateErrorDecisionsChoices[] = {
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED,
+ switches::kRememberCertErrorDecisions,
+ "-1" },
+ { IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_DAY,
+ switches::kRememberCertErrorDecisions,
+ "86400" },
+ { IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_THREE_DAYS,
+ switches::kRememberCertErrorDecisions,
+ "259200" },
+ { IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_WEEK,
+ switches::kRememberCertErrorDecisions,
+ "604800" },
+ { IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_MONTH,
+ switches::kRememberCertErrorDecisions,
+ "2592000" },
+ { IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_THREE_MONTHS,
+ switches::kRememberCertErrorDecisions,
+ "7776000" },
+};
+
+const Experiment::Choice kEnableDropSyncCredentialChoices[] = {
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", ""},
+ { IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED,
+ password_manager::switches::kEnableDropSyncCredential, "" },
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED,
+ password_manager::switches::kDisableDropSyncCredential, "" },
+};
+
+#if defined(OS_MACOSX)
+const Experiment::Choice kEnableAVFoundationChoices[] = {
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
+ { IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED, switches::kEnableAVFoundation, ""},
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED, switches::kForceQTKit, ""}
+};
+#endif
+
+const Experiment::Choice kAutofillSyncCredentialChoices[] = {
+ { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", ""},
+ { IDS_ALLOW_AUTOFILL_SYNC_CREDENTIAL,
+ password_manager::switches::kAllowAutofillSyncCredential, ""},
+ { IDS_DISALLOW_AUTOFILL_SYNC_CREDENTIAL_FOR_REAUTH,
+ password_manager::switches::kDisallowAutofillSyncCredentialForReauth, ""},
+ { IDS_DISALLOW_AUTOFILL_SYNC_CREDENTIAL,
+ password_manager::switches::kDisallowAutofillSyncCredential, ""},
+};
+
// RECORDING USER METRICS FOR FLAGS:
// -----------------------------------------------------------------------------
// The first line of the experiment is the internal name. If you'd like to
// array of choices.
// See the documentation of Experiment for details on the fields.
//
+// Command-line switches must have entries in enum "LoginCustomFlags" in
+// histograms.xml. See note in histograms.xml and don't forget to run
+// AboutFlagsHistogramTest unit test to calculate and verify checksum.
+//
// When adding a new choice, add it to the end of the list.
const Experiment kExperiments[] = {
{
SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)
},
{
- "threaded-compositing-mode",
- IDS_FLAGS_THREADED_COMPOSITING_MODE_NAME,
- IDS_FLAGS_THREADED_COMPOSITING_MODE_DESCRIPTION,
-#if !defined(USE_AURA)
- kOsLinux,
-#else
- 0,
-#endif
- ENABLE_DISABLE_VALUE_TYPE(switches::kEnableThreadedCompositing,
- switches::kDisableThreadedCompositing)
- },
- {
"force-accelerated-composited-scrolling",
IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME,
IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION,
SINGLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)
},
{
+ "enable-display-list-2d-canvas",
+ IDS_FLAGS_ENABLE_DISPLAY_LIST_2D_CANVAS_NAME,
+ IDS_FLAGS_ENABLE_DISPLAY_LIST_2D_CANVAS_DESCRIPTION,
+ kOsAll,
+ SINGLE_VALUE_TYPE(switches::kEnableDisplayList2dCanvas)
+ },
+ {
"composited-layer-borders",
IDS_FLAGS_COMPOSITED_LAYER_BORDERS,
IDS_FLAGS_COMPOSITED_LAYER_BORDERS_DESCRIPTION,
},
#if defined(ENABLE_WEBRTC)
{
- "disable-device-enumeration",
- IDS_FLAGS_DISABLE_DEVICE_ENUMERATION_NAME,
- IDS_FLAGS_DISABLE_DEVICE_ENUMERATION_DESCRIPTION,
- kOsAll,
- SINGLE_VALUE_TYPE(switches::kDisableDeviceEnumeration)
- },
- {
"disable-webrtc-hw-decoding",
IDS_FLAGS_DISABLE_WEBRTC_HW_DECODING_NAME,
IDS_FLAGS_DISABLE_WEBRTC_HW_DECODING_DESCRIPTION,
SINGLE_VALUE_TYPE(switches::kEnableNaClDebug)
},
{
- "disable-pnacl", // FLAGS:RECORD_UMA
- IDS_FLAGS_DISABLE_PNACL_NAME,
- IDS_FLAGS_DISABLE_PNACL_DESCRIPTION,
- kOsDesktop,
- SINGLE_VALUE_TYPE(switches::kDisablePnacl)
- },
- {
"nacl-debug-mask", // FLAGS:RECORD_UMA
IDS_FLAGS_NACL_DEBUG_MASK_NAME,
IDS_FLAGS_NACL_DEBUG_MASK_DESCRIPTION,
},
#if defined(OS_ANDROID)
{
- "enable-new-ntp",
- IDS_FLAGS_ENABLE_NEW_NTP,
- IDS_FLAGS_ENABLE_NEW_NTP_DESCRIPTION,
- kOsAndroid,
- ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNewNTP,
- switches::kDisableNewNTP)
- },
- {
"contextual-search",
IDS_FLAGS_ENABLE_CONTEXTUAL_SEARCH,
IDS_FLAGS_ENABLE_CONTEXTUAL_SEARCH_DESCRIPTION,
SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillTypePredictions)
},
{
- "enable-gesture-tap-highlight",
- IDS_FLAGS_ENABLE_GESTURE_TAP_HIGHLIGHTING_NAME,
- IDS_FLAGS_ENABLE_GESTURE_TAP_HIGHLIGHTING_DESCRIPTION,
- kOsLinux | kOsCrOS | kOsWin | kOsAndroid,
- ENABLE_DISABLE_VALUE_TYPE(switches::kEnableGestureTapHighlight,
- switches::kDisableGestureTapHighlight)
- },
- {
"enable-smooth-scrolling", // FLAGS:RECORD_UMA
IDS_FLAGS_ENABLE_SMOOTH_SCROLLING_NAME,
IDS_FLAGS_ENABLE_SMOOTH_SCROLLING_DESCRIPTION,
switches::kDisableQuic)
},
{
- "enable-quic-https",
- IDS_FLAGS_ENABLE_QUIC_HTTPS_NAME,
- IDS_FLAGS_ENABLE_QUIC_HTTPS_DESCRIPTION,
- kOsAll,
- ENABLE_DISABLE_VALUE_TYPE(switches::kEnableQuicHttps,
- switches::kDisableQuicHttps)
- },
- {
"enable-spdy4",
IDS_FLAGS_ENABLE_SPDY4_NAME,
IDS_FLAGS_ENABLE_SPDY4_DESCRIPTION,
SINGLE_VALUE_TYPE(switches::kDisableNTPOtherSessionsMenu)
},
{
+ "enable-material-design-ntp",
+ IDS_FLAGS_ENABLE_MATERIAL_DESIGN_NTP_NAME,
+ IDS_FLAGS_ENABLE_MATERIAL_DESIGN_NTP_DESCRIPTION,
+ kOsDesktop,
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableMaterialDesignNTP,
+ switches::kDisableMaterialDesignNTP)
+ },
+ {
"enable-devtools-experiments",
IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_NAME,
IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_DESCRIPTION,
kOsDesktop,
SINGLE_VALUE_TYPE(switches::kEnableDownloadResumption)
},
- // Native client is compiled out when DISABLE_NACL is defined.
-#if !defined(DISABLE_NACL)
+#if defined(ENABLE_PLUGINS)
{
"allow-nacl-socket-api",
IDS_FLAGS_ALLOW_NACL_SOCKET_API_NAME,
SINGLE_VALUE_TYPE_AND_VALUE(switches::kAllowNaClSocketAPI, "*")
},
#endif
+#if defined(OS_CHROMEOS) || defined(OS_WIN) || defined(OS_LINUX)
{
"force-device-scale-factor",
- IDS_FLAGS_FORCE_HIGH_DPI_NAME,
- IDS_FLAGS_FORCE_HIGH_DPI_DESCRIPTION,
- kOsCrOS,
- SINGLE_VALUE_TYPE_AND_VALUE(switches::kForceDeviceScaleFactor, "2")
+ IDS_FLAGS_FORCE_DEVICE_SCALE_FACTOR_NAME,
+ IDS_FLAGS_FORCE_DEVICE_SCALE_FACTOR_DESCRIPTION,
+ kOsLinux | kOsWin | kOsCrOS,
+ MULTI_VALUE_TYPE(kDeviceScaleFactorChoices)
},
+#endif
#if defined(OS_CHROMEOS)
{
"allow-touchpad-three-finger-click",
SINGLE_VALUE_TYPE(chromeos::switches::kDisableBootAnimation),
},
{
- "enable-new-audio-player",
- IDS_FLAGS_FILE_MANAGER_ENABLE_NEW_AUDIO_PLAYER_NAME,
- IDS_FLAGS_FILE_MANAGER_ENABLE_NEW_AUDIO_PLAYER_DESCRIPTION,
- kOsCrOS,
- SINGLE_VALUE_TYPE(chromeos::switches::kFileManagerEnableNewAudioPlayer)
- },
- {
"enable-new-gallery",
IDS_FLAGS_FILE_MANAGER_ENABLE_NEW_GALLERY_NAME,
IDS_FLAGS_FILE_MANAGER_ENABLE_NEW_GALLERY_DESCRIPTION,
MULTI_VALUE_TYPE(kEnableFileManagerNewGalleryChoices)
},
{
- "disable-quickoffice-component-app",
- IDS_FLAGS_DISABLE_QUICKOFFICE_COMPONENT_APP_NAME,
- IDS_FLAGS_DISABLE_QUICKOFFICE_COMPONENT_APP_DESCRIPTION,
+ "enable-video-player-chromecast-support",
+ IDS_FLAGS_ENABLE_VIDEO_PLAYER_CHROMECAST_SUPPORT_NAME,
+ IDS_FLAGS_ENABLE_VIDEO_PLAYER_CHROMECAST_SUPPORT_DESCRIPTION,
kOsCrOS,
- SINGLE_VALUE_TYPE(chromeos::switches::kDisableQuickofficeComponentApp),
+ SINGLE_VALUE_TYPE(chromeos::switches::kEnableVideoPlayerChromecastSupport)
},
{
- "disable-saml-signin",
- IDS_FLAGS_DISABLE_SAML_SIGNIN_NAME,
- IDS_FLAGS_DISABLE_SAML_SIGNIN_DESCRIPTION,
+ "disable-office-editing-component-app",
+ IDS_FLAGS_DISABLE_OFFICE_EDITING_COMPONENT_APP_NAME,
+ IDS_FLAGS_DISABLE_OFFICE_EDITING_COMPONENT_APP_DESCRIPTION,
kOsCrOS,
- SINGLE_VALUE_TYPE(chromeos::switches::kDisableSamlSignin),
+ SINGLE_VALUE_TYPE(chromeos::switches::kDisableOfficeEditingComponentApp),
},
{
"disable-display-color-calibration",
kOsCrOS,
SINGLE_VALUE_TYPE(ash::switches::kAshEnableTouchViewTesting),
},
+ { "ash-disable-text-filtering-in-overview-mode",
+ IDS_FLAGS_ASH_DISABLE_TEXT_FILTERING_IN_OVERVIEW_MODE_NAME,
+ IDS_FLAGS_ASH_DISABLE_TEXT_FILTERING_IN_OVERVIEW_MODE_DESCRIPTION,
+ kOsCrOS,
+ SINGLE_VALUE_TYPE(ash::switches::kAshDisableTextFilteringInOverviewMode),
+ },
#endif
#if defined(OS_CHROMEOS)
{
"enable-password-generation",
IDS_FLAGS_ENABLE_PASSWORD_GENERATION_NAME,
IDS_FLAGS_ENABLE_PASSWORD_GENERATION_DESCRIPTION,
- kOsDesktop,
+ kOsWin | kOsLinux | kOsCrOS,
ENABLE_DISABLE_VALUE_TYPE(autofill::switches::kEnablePasswordGeneration,
autofill::switches::kDisablePasswordGeneration)
},
SINGLE_VALUE_TYPE(switches::kDisablePasswordManagerReauthentication)
},
{
+ "enable-android-password-link",
+ IDS_FLAGS_PASSWORD_MANAGER_ANDROID_LINK_NAME,
+ IDS_FLAGS_PASSWORD_MANAGER_ANDROID_LINK_DESCRIPTION,
+ kOsAndroid,
+ ENABLE_DISABLE_VALUE_TYPE(
+ password_manager::switches::kEnableAndroidPasswordLink,
+ password_manager::switches::kDisableAndroidPasswordLink)
+ },
+ {
"enable-deferred-image-decoding",
IDS_FLAGS_ENABLE_DEFERRED_IMAGE_DECODING_NAME,
IDS_FLAGS_ENABLE_DEFERRED_IMAGE_DECODING_DESCRIPTION,
switches::kScrollEndEffect, "0")
},
{
+ "enable-renderer-mojo-channel",
+ IDS_FLAGS_ENABLE_RENDERER_MOJO_CHANNEL_NAME,
+ IDS_FLAGS_ENABLE_RENDERER_MOJO_CHANNEL_DESCRIPTION,
+ kOsAll,
+ SINGLE_VALUE_TYPE(switches::kEnableRendererMojoChannel)
+ },
+ {
"enable-touch-drag-drop",
IDS_FLAGS_ENABLE_TOUCH_DRAG_DROP_NAME,
IDS_FLAGS_ENABLE_TOUCH_DRAG_DROP_DESCRIPTION,
IDS_FLAGS_ENABLE_AVFOUNDATION_NAME,
IDS_FLAGS_ENABLE_AVFOUNDATION_DESCRIPTION,
kOsMac,
- SINGLE_VALUE_TYPE(switches::kEnableAVFoundation)
+ MULTI_VALUE_TYPE(kEnableAVFoundationChoices)
},
#endif
{
kOsLinux | kOsCrOS | kOsAndroid,
SINGLE_VALUE_TYPE(switches::kEnableTcpFastOpen)
},
- {
- "enable-syncfs-directory-operation",
- IDS_FLAGS_ENABLE_SYNC_DIRECTORY_OPERATION_NAME,
- IDS_FLAGS_ENABLE_SYNC_DIRECTORY_OPERATION_DESCRIPTION,
- kOsAll,
- SINGLE_VALUE_TYPE(switches::kSyncfsEnableDirectoryOperation),
- },
#if defined(ENABLE_SERVICE_DISCOVERY)
{
- "disable-device-discovery",
- IDS_FLAGS_DISABLE_DEVICE_DISCOVERY_NAME,
- IDS_FLAGS_DISABLE_DEVICE_DISCOVERY_DESCRIPTION,
- kOsDesktop,
- SINGLE_VALUE_TYPE(switches::kDisableDeviceDiscovery)
- },
- {
"device-discovery-notifications",
IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_NAME,
IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_DESCRIPTION,
IDS_FLAGS_ENABLE_NEW_AVATAR_MENU_NAME,
IDS_FLAGS_ENABLE_NEW_AVATAR_MENU_DESCRIPTION,
kOsMac | kOsWin | kOsLinux,
- SINGLE_VALUE_TYPE(switches::kNewAvatarMenu)
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNewAvatarMenu,
+ switches::kDisableNewAvatarMenu)
},
{
"enable-web-based-signin",
},
#endif
{
+ "enable-app-view",
+ IDS_FLAGS_ENABLE_APP_VIEW_NAME,
+ IDS_FLAGS_ENABLE_APP_VIEW_DESCRIPTION,
+ kOsAll,
+ SINGLE_VALUE_TYPE(switches::kEnableAppView)
+ },
+ {
"disable-app-list-app-info",
IDS_FLAGS_DISABLE_APP_INFO_IN_APP_LIST,
IDS_FLAGS_DISABLE_APP_INFO_IN_APP_LIST_DESCRIPTION,
SINGLE_VALUE_TYPE(app_list::switches::kDisableAppInfo)
},
{
- "disable-app-list-voice-search",
- IDS_FLAGS_DISABLE_APP_LIST_VOICE_SEARCH,
- IDS_FLAGS_DISABLE_APP_LIST_VOICE_SEARCH_DESCRIPTION,
- kOsCrOS,
- SINGLE_VALUE_TYPE(app_list::switches::kDisableVoiceSearch)
- },
- {
"enable-drive-apps-in-app-list",
IDS_FLAGS_ENABLE_DRIVE_APPS_IN_APP_LIST_NAME,
IDS_FLAGS_ENABLE_DRIVE_APPS_IN_APP_LIST_DESCRIPTION,
},
#endif
{
- "disable-compositor-touch-hit-testing",
- IDS_FLAGS_DISABLE_COMPOSITOR_TOUCH_HIT_TESTING_NAME,
- IDS_FLAGS_DISABLE_COMPOSITOR_TOUCH_HIT_TESTING_DESCRIPTION,
- kOsAll,
- SINGLE_VALUE_TYPE(cc::switches::kDisableCompositorTouchHitTesting),
- },
- {
"enable-streamlined-hosted-apps",
IDS_FLAGS_ENABLE_STREAMLINED_HOSTED_APPS_NAME,
IDS_FLAGS_ENABLE_STREAMLINED_HOSTED_APPS_DESCRIPTION,
SINGLE_VALUE_TYPE(switches::kEnableLinkableEphemeralApps)
},
{
- "enable-service-worker",
- IDS_FLAGS_ENABLE_SERVICE_WORKER_NAME,
- IDS_FLAGS_ENABLE_SERVICE_WORKER_DESCRIPTION,
- kOsAll,
- SINGLE_VALUE_TYPE(switches::kEnableServiceWorker)
- },
- {
"enable-service-worker-sync",
IDS_FLAGS_ENABLE_SERVICE_WORKER_SYNC_NAME,
IDS_FLAGS_ENABLE_SERVICE_WORKER_SYNC_DESCRIPTION,
"disable-views-rect-based-targeting", // FLAGS:RECORD_UMA
IDS_FLAGS_DISABLE_VIEWS_RECT_BASED_TARGETING_NAME,
IDS_FLAGS_DISABLE_VIEWS_RECT_BASED_TARGETING_DESCRIPTION,
- kOsCrOS | kOsWin,
+ kOsCrOS | kOsWin | kOsLinux,
SINGLE_VALUE_TYPE(views::switches::kDisableViewsRectBasedTargeting)
},
#endif
"enable-permissions-bubbles",
IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_NAME,
IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_DESCRIPTION,
- kOsAll,
+ kOsCrOS | kOsMac | kOsWin | kOsLinux,
ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePermissionsBubbles,
switches::kDisablePermissionsBubbles)
},
},
#if defined(OS_ANDROID)
{
- "enable-fast-text-autosizing",
- IDS_FLAGS_ENABLE_FAST_TEXT_AUTOSIZING_NAME,
- IDS_FLAGS_ENABLE_FAST_TEXT_AUTOSIZING_DESCRIPTION,
- kOsAndroid,
- ENABLE_DISABLE_VALUE_TYPE(switches::kEnableFastTextAutosizing,
- switches::kDisableFastTextAutosizing)
- },
- {
"disable-cast",
IDS_FLAGS_DISABLE_CAST_NAME,
IDS_FLAGS_DISABLE_CAST_DESCRIPTION,
ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSavePasswordBubble,
switches::kDisableSavePasswordBubble)
},
-#if defined(GOOGLE_CHROME_BUILD)
- {
- "enable-easy-unlock",
- IDS_FLAGS_ENABLE_EASY_UNLOCK_NAME,
- IDS_FLAGS_ENABLE_EASY_UNLOCK_DESCRIPTION,
- kOsCrOS,
- SINGLE_VALUE_TYPE(switches::kEnableEasyUnlock)
- },
-#endif
- {
- "disable-embedded-shared-worker",
- IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_NAME,
- IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_DESCRIPTION,
- kOsDesktop,
- SINGLE_VALUE_TYPE(switches::kDisableEmbeddedSharedWorker)
- },
#if defined(OS_CHROMEOS)
{
"enable-filemanager-mtp",
kOsAll,
SINGLE_VALUE_TYPE(switches::kAllowInsecureWebSocketFromHttpsOrigin)
},
-#if defined(OS_MACOSX)
- {
- "apps-keep-chrome-alive",
- IDS_FLAGS_APPS_KEEP_CHROME_ALIVE_NAME,
- IDS_FLAGS_APPS_KEEP_CHROME_ALIVE_DESCRIPTION,
- kOsMac,
- SINGLE_VALUE_TYPE(switches::kAppsKeepChromeAlive)
- },
-#endif
{
"enable-apps-file-associations",
IDS_FLAGS_ENABLE_APPS_FILE_ASSOCIATIONS_NAME,
SINGLE_VALUE_TYPE(extensions::switches::kEnableScriptsRequireAction)
},
{
- "enable-harfbuzz-rendertext",
- IDS_FLAGS_ENABLE_HARFBUZZ_RENDERTEXT_NAME,
- IDS_FLAGS_ENABLE_HARFBUZZ_RENDERTEXT_DESCRIPTION,
+ "harfbuzz-rendertext",
+ IDS_FLAGS_HARFBUZZ_RENDERTEXT_NAME,
+ IDS_FLAGS_HARFBUZZ_RENDERTEXT_DESCRIPTION,
kOsDesktop,
- SINGLE_VALUE_TYPE(switches::kEnableHarfBuzzRenderText)
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableHarfBuzzRenderText,
+ switches::kDisableHarfBuzzRenderText)
},
#if defined(OS_ANDROID)
{
MULTI_VALUE_TYPE(kAnswersInSuggestChoices)
},
#endif
- {
- "ssl-interstitial-version",
- IDS_FLAGS_SSL_INTERSTITIAL_TRIAL_NAME,
- IDS_FLAGS_SSL_INTERSTITIAL_TRIAL_DESCRIPTION,
- kOsAll,
- MULTI_VALUE_TYPE(kSSLInterstitialVersions)
- },
- {
- "malware-interstitial-version",
- IDS_FLAGS_MALWARE_INTERSTITIAL_TRIAL_NAME,
- IDS_FLAGS_MALWARE_INTERSTITIAL_TRIAL_DESCRIPTION,
- kOsAll,
- MULTI_VALUE_TYPE(kMalwareInterstitialVersions)
- },
#if defined(OS_ANDROID)
{
"enable-data-reduction-proxy-dev",
data_reduction_proxy::switches::kDisableDataReductionProxyDev)
},
#endif
+ {
+ "enable-experimental-hotwording",
+ IDS_FLAGS_ENABLE_EXPERIMENTAL_HOTWORDING_NAME,
+ IDS_FLAGS_ENABLE_EXPERIMENTAL_HOTWORDING_DESCRIPTION,
+ kOsDesktop,
+ SINGLE_VALUE_TYPE(switches::kEnableExperimentalHotwording)
+ },
+ {
+ "enable-embedded-extension-options",
+ IDS_FLAGS_ENABLE_EMBEDDED_EXTENSION_OPTIONS_NAME,
+ IDS_FLAGS_ENABLE_EMBEDDED_EXTENSION_OPTIONS_DESCRIPTION,
+ kOsDesktop,
+ SINGLE_VALUE_TYPE(extensions::switches::kEnableEmbeddedExtensionOptions)
+ },
+ {
+ "enable-website-settings-manager",
+ IDS_FLAGS_ENABLE_WEBSITE_SETTINGS_NAME,
+ IDS_FLAGS_ENABLE_WEBSITE_SETTINGS_DESCRIPTION,
+ kOsDesktop,
+ SINGLE_VALUE_TYPE(switches::kEnableWebsiteSettingsManager)
+ },
+ {
+ "remember-cert-error-decisions",
+ IDS_FLAGS_REMEMBER_CERTIFICATE_ERROR_DECISIONS_NAME,
+ IDS_FLAGS_REMEMBER_CERTIFICATE_ERROR_DECISIONS_DESCRIPTION,
+ kOsAll,
+ MULTI_VALUE_TYPE(kRememberCertificateErrorDecisionsChoices)
+ },
+ {
+ "enable-drop-sync-credential",
+ IDS_FLAGS_ENABLE_DROP_SYNC_CREDENTIAL_NAME,
+ IDS_FLAGS_ENABLE_DROP_SYNC_CREDENTIAL_DESCRIPTION,
+ kOsAll,
+ MULTI_VALUE_TYPE(kEnableDropSyncCredentialChoices)
+ },
+ {
+ "enable-extension-action-redesign",
+ IDS_FLAGS_ENABLE_EXTENSION_ACTION_REDESIGN_NAME,
+ IDS_FLAGS_ENABLE_EXTENSION_ACTION_REDESIGN_DESCRIPTION,
+ kOsWin | kOsLinux | kOsCrOS,
+ SINGLE_VALUE_TYPE(extensions::switches::kEnableExtensionActionRedesign)
+ },
+ {
+ "autofill-sync-credential",
+ IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_NAME,
+ IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_DESCRIPTION,
+ kOsAll,
+ MULTI_VALUE_TYPE(kAutofillSyncCredentialChoices)
+ },
+ // NOTE: Adding new command-line switches requires adding corresponding
+ // entries to enum "LoginCustomFlags" in histograms.xml. See note in
+ // histograms.xml and don't forget to run AboutFlagsHistogramTest unit test.
};
const Experiment* experiments = kExperiments;
}
bool AreSwitchesIdenticalToCurrentCommandLine(
- const CommandLine& new_cmdline, const CommandLine& active_cmdline) {
+ const CommandLine& new_cmdline,
+ const CommandLine& active_cmdline,
+ std::set<CommandLine::StringType>* out_difference) {
std::set<CommandLine::StringType> new_flags =
ExtractFlagsFromCommandLine(new_cmdline);
std::set<CommandLine::StringType> active_flags =
ExtractFlagsFromCommandLine(active_cmdline);
+ bool result = false;
// Needed because std::equal doesn't check if the 2nd set is empty.
- if (new_flags.size() != active_flags.size())
- return false;
+ if (new_flags.size() == active_flags.size()) {
+ result =
+ std::equal(new_flags.begin(), new_flags.end(), active_flags.begin());
+ }
- return std::equal(new_flags.begin(), new_flags.end(), active_flags.begin());
+ if (out_difference && !result) {
+ std::set_symmetric_difference(
+ new_flags.begin(),
+ new_flags.end(),
+ active_flags.begin(),
+ active_flags.end(),
+ std::inserter(*out_difference, out_difference->begin()));
+ }
+
+ return result;
}
void GetFlagsExperimentsData(FlagsStorage* flags_storage,
content::RecordAction(UserMetricsAction("StartupTick"));
}
+uint32_t GetSwitchUMAId(const std::string& switch_name) {
+ return static_cast<uint32_t>(metrics::HashMetricName(switch_name));
+}
+
+void ReportCustomFlags(const std::string& uma_histogram_hame,
+ const std::set<std::string>& command_line_difference) {
+ for (std::set<std::string>::const_iterator it =
+ command_line_difference.begin();
+ it != command_line_difference.end();
+ ++it) {
+ int uma_id = about_flags::kBadSwitchFormatHistogramId;
+ if (StartsWithASCII(*it, "--", true /* case_sensitive */)) {
+ // Skip '--' before switch name.
+ std::string switch_name(it->substr(2));
+
+ // Kill value, if any.
+ const size_t value_pos = switch_name.find('=');
+ if (value_pos != std::string::npos)
+ switch_name.resize(value_pos);
+
+ uma_id = GetSwitchUMAId(switch_name);
+ } else {
+ NOTREACHED() << "ReportCustomFlags(): flag '" << *it
+ << "' has incorrect format.";
+ }
+ DVLOG(1) << "ReportCustomFlags(): histogram='" << uma_histogram_hame
+ << "' '" << *it << "', uma_id=" << uma_id;
+
+ // Sparse histogram macro does not cache the histogram, so it's safe
+ // to use macro with non-static histogram name here.
+ UMA_HISTOGRAM_SPARSE_SLOWLY(uma_histogram_hame, uma_id);
+ }
+}
+
//////////////////////////////////////////////////////////////////////////////
// FlagsState implementation.