| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/common/chrome_features.h" |
| |
| #include "base/command_line.h" |
| #include "base/feature_list.h" |
| #include "base/strings/string_split.h" |
| #include "build/build_config.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "extensions/buildflags/buildflags.h" |
| #include "ppapi/buildflags/buildflags.h" |
| |
| namespace features { |
| |
| // All features in alphabetical order. |
| |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| // Sets whether dismissing the new-tab-page override bubble counts as |
| // acknowledgement. |
| const base::Feature kAcknowledgeNtpOverrideOnDeactivate{ |
| "AcknowledgeNtpOverrideOnDeactivate", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables logging for adaptive screen brightness on Chrome OS. |
| const base::Feature kAdaptiveScreenBrightnessLogging{ |
| "AdaptiveScreenBrightnessLogging", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| const base::Feature kAddToHomescreenMessaging{ |
| "AddToHomescreenMessaging", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Shows a setting that allows disabling mouse acceleration. |
| const base::Feature kAllowDisableMouseAcceleration{ |
| "AllowDisableMouseAcceleration", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Always reinstall system web apps, instead of only doing so after version |
| // upgrade or locale changes. |
| const base::Feature kAlwaysReinstallSystemWebApps{ |
| "ReinstallSystemWebApps", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_ANDROID) |
| const base::Feature kAndroidDarkSearch{"AndroidDarkSearch", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_ANDROID) |
| |
| #if defined(OS_CHROMEOS) |
| // Controls whether web apps can be installed via APKs on Chrome OS. |
| const base::Feature kApkWebAppInstalls{"ApkWebAppInstalls", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| #if defined(OS_CHROMEOS) |
| // Enables app activity reporting for child user. |
| // Requires |kPerAppTimeLimits| to be enabled. |
| const base::Feature kAppActivityReporting{"AppActivityReporting", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // App Service related flags. See components/services/app_service/README.md. |
| const base::Feature kAppServiceAdaptiveIcon{"AppServiceAdaptiveIcon", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::Feature kAppServiceExternalProtocol{ |
| "AppServiceExternalProtocol", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::Feature kAppServiceIntentHandling{"AppServiceIntentHandling", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // !defined(OS_ANDROID) |
| |
| #if defined(OS_MAC) |
| // Can be used to disable RemoteCocoa (hosting NSWindows for apps in the app |
| // process). For debugging purposes only. |
| const base::Feature kAppShimRemoteCocoa{"AppShimRemoteCocoa", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // This is used to control the new app close behavior on macOS wherein closing |
| // all windows for an app leaves the app running. |
| // https://crbug.com/1080729 |
| const base::Feature kAppShimNewCloseBehavior{"AppShimNewCloseBehavior", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_MAC) |
| |
| // Enables the built-in DNS resolver. |
| const base::Feature kAsyncDns { |
| "AsyncDns", |
| #if defined(OS_CHROMEOS) || defined(OS_MAC) || defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) |
| // Enables the Restart background mode optimization. When all Chrome UI is |
| // closed and it goes in the background, allows to restart the browser to |
| // discard memory. |
| const base::Feature kBackgroundModeAllowRestart{ |
| "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) |
| |
| #if defined(OS_CHROMEOS) |
| // Enable Borealis on Chrome OS. |
| const base::Feature kBorealis{"Borealis", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if BUILDFLAG(TRIAL_COMPARISON_CERT_VERIFIER_SUPPORTED) |
| // Enables the dual certificate verification trial feature. |
| // https://crbug.com/649026 |
| const base::Feature kCertDualVerificationTrialFeature{ |
| "CertDualVerificationTrial", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables change picture video mode. |
| const base::Feature kChangePictureVideoMode{"ChangePictureVideoMode", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_WIN) |
| const base::Feature kChromeCleanupScanCompletedNotification{ |
| "ChromeCleanupScanCompletedNotification", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| // Enables clearing of browsing data which is older than given time period. |
| const base::Feature kClearOldBrowsingData{"ClearOldBrowsingData", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| const base::Feature kClickToOpenPDFPlaceholder{ |
| "ClickToOpenPDFPlaceholder", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kClientStorageAccessContextAuditing{ |
| "ClientStorageAccessContextAuditing", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kContentSettingsRedesign{"ContentSettingsRedesign", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_ANDROID) |
| // Restricts all of Chrome's threads to use only LITTLE cores on big.LITTLE |
| // architectures. |
| const base::Feature kCpuAffinityRestrictToLittleCores{ |
| "CpuAffinityRestrictToLittleCores", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables "usm" service in the list of user services returned by |
| // userInfo Gaia message. |
| const base::Feature kCrOSEnableUSMUserService{"CrOSEnableUSMUserService", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables flash component updates on Chrome OS. |
| const base::Feature kCrosCompUpdates{"CrosCompUpdates", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable project Crostini, Linux VMs on Chrome OS. |
| const base::Feature kCrostini{"Crostini", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable additional Crostini session status reporting for |
| // managed devices only, i.e. reports of installed apps and kernel version. |
| const base::Feature kCrostiniAdditionalEnterpriseReporting{ |
| "CrostiniAdditionalEnterpriseReporting", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable advanced access controls for Crostini-related features |
| // (e.g. restricting VM CLI tools access, restricting Crostini root access). |
| const base::Feature kCrostiniAdvancedAccessControls{ |
| "CrostiniAdvancedAccessControls", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables infrastructure for applying Ansible playbook to default Crostini |
| // container. |
| const base::Feature kCrostiniAnsibleInfrastructure{ |
| "CrostiniAnsibleInfrastructure", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables infrastructure for generating Ansible playbooks for the default |
| // Crostini container from software configurations in JSON schema. |
| const base::Feature kCrostiniAnsibleSoftwareManagement{ |
| "CrostiniAnsibleSoftwareManagement", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables support for sideloading android apps into Arc via crostini. |
| const base::Feature kCrostiniArcSideload{"CrostiniArcSideload", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables custom UI for forcibly closing unresponsive windows. |
| const base::Feature kCrostiniForceClose{"CrostiniForceClose", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables distributed model for TPM1.2, i.e., using tpm_managerd and |
| // attestationd. |
| const base::Feature kCryptohomeDistributedModel{ |
| "CryptohomeDistributedModel", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables cryptohome UserDataAuth interface, a new dbus interface that is |
| // fully protobuf and uses libbrillo for dbus instead of the deprecated |
| // glib-dbus. |
| const base::Feature kCryptohomeUserDataAuth{"CryptohomeUserDataAuth", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Kill switch for cryptohome UserDataAuth interface. UserDataAuth is a new |
| // dbus interface that is fully protobuf and uses libbrillo for dbus instead |
| // instead of the deprecated glib-dbus. |
| const base::Feature kCryptohomeUserDataAuthKillswitch{ |
| "CryptohomeUserDataAuthKillswitch", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables parsing and enforcing Data Leak Prevention policy rules that |
| // restricts usage of some system features, e.g.clipboard, screenshot, etc. |
| // for confidential content. |
| const base::Feature kDataLeakPreventionPolicy{ |
| "DataLeakPreventionPolicy", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables passing additional user authentication in requests to DMServer |
| // (policy fetch, status report upload). |
| const base::Feature kDMServerOAuthForChildUser{ |
| "DMServerOAuthForChildUser", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // Whether to allow installed-by-default web apps to be installed or not. |
| const base::Feature kDefaultWebAppInstallation{ |
| "DefaultWebAppInstallation", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enable using tab sharing infobars for desktop capture. |
| const base::Feature kDesktopCaptureTabSharingInfobar{ |
| "DesktopCaptureTabSharingInfobar", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables Desktop PWA installs to have a menu of shortcuts associated with |
| // the app icon in the taskbar on Windows, or the dock on macOS or Linux. |
| const base::Feature kDesktopPWAsAppIconShortcutsMenu{ |
| "DesktopPWAsAppIconShortcutsMenu", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When installing default installed PWAs, we wait for service workers |
| // to cache resources. |
| const base::Feature kDesktopPWAsCacheDuringDefaultInstall{ |
| "DesktopPWAsCacheDuringDefaultInstall", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables local PWA installs to update their app manifest data if the site |
| // changes its manifest. |
| const base::Feature kDesktopPWAsLocalUpdating{"DesktopPWAsLocalUpdating", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables the WebAppMigrationUserDisplayModeCleanUp code for |
| // cleaning up the fallout of https://crbug.com/1125020. |
| const base::Feature kDesktopPWAsMigrationUserDisplayModeCleanUp{ |
| "DesktopPWAsMigrationUserDisplayModeCleanUp", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables Desktop PWAs to be auto-started on OS login. |
| const base::Feature kDesktopPWAsRunOnOsLogin{"DesktopPWAsRunOnOsLogin", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables usage of shared LevelDB instance (ModelTypeStoreService). |
| // If this flag is disabled, the new Web Apps system uses its own isolated |
| // LevelDB instance for manual testing purposes. Requires |
| // kDesktopPWAsWithoutExtensions to be enabled. |
| // TODO(crbug.com/877898): Delete this feature flag before |
| // kDesktopPWAsWithoutExtensions launch. |
| const base::Feature kDesktopPWAsSharedStoreService{ |
| "DesktopPWAsSharedStoreService", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Adds a tab strip to PWA windows, used for UI experimentation. |
| // TODO(crbug.com/897314): Enable this feature. |
| const base::Feature kDesktopPWAsTabStrip{"DesktopPWAsTabStrip", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Makes user navigations via links within web app scopes get captured tab |
| // tabbed app windows. |
| // TODO(crbug.com/897314): Enable this feature. |
| const base::Feature kDesktopPWAsTabStripLinkCapturing{ |
| "DesktopPWAsTabStripLinkCapturing", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables new Desktop PWAs implementation that does not use |
| // extensions. |
| const base::Feature kDesktopPWAsWithoutExtensions{ |
| "DesktopPWAsWithoutExtensions", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable DNS over HTTPS (DoH). |
| const base::Feature kDnsOverHttps { |
| "DnsOverHttps", |
| #if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MAC) || \ |
| defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Provides a mechanism to remove providers from the dropdown list in the |
| // settings UI. Separate multiple provider ids with commas. See the |
| // mapping in net/dns/dns_util.cc for provider ids. |
| const base::FeatureParam<std::string> kDnsOverHttpsDisabledProvidersParam{ |
| &kDnsOverHttps, "DisabledProviders", ""}; |
| |
| // Set whether fallback to insecure DNS is allowed by default. This setting may |
| // be overridden for individual transactions. |
| const base::FeatureParam<bool> kDnsOverHttpsFallbackParam{&kDnsOverHttps, |
| "Fallback", true}; |
| |
| // Sets whether the DoH setting is displayed in the settings UI. |
| const base::FeatureParam<bool> kDnsOverHttpsShowUiParam { |
| &kDnsOverHttps, "ShowUi", |
| #if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MAC) || \ |
| defined(OS_ANDROID) |
| true |
| #else |
| false |
| #endif |
| }; |
| |
| // Supply one or more space-separated DoH server URI templates to use when this |
| // feature is enabled. If no templates are specified, then a hardcoded mapping |
| // will be used to construct a list of DoH templates associated with the IP |
| // addresses of insecure resolvers in the discovered configuration. |
| const base::FeatureParam<std::string> kDnsOverHttpsTemplatesParam{ |
| &kDnsOverHttps, "Templates", ""}; |
| |
| #if defined(OS_ANDROID) |
| // Enable changing default downloads storage location on Android. |
| const base::Feature kDownloadsLocationChange{"DownloadsLocationChange", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables all registered system web apps, regardless of their respective |
| // feature flags. |
| const base::Feature kEnableAllSystemWebApps{"EnableAllSystemWebApps", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || \ |
| defined(OS_MAC) |
| COMPONENT_EXPORT(CHROME_FEATURES) |
| // Enables ephemeral Guest profiles on desktop. |
| extern const base::Feature kEnableEphemeralGuestProfilesOnDesktop{ |
| "EnableEphemeralGuestProfilesOnDesktop", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || |
| // defined(OS_MAC) |
| |
| #if defined(OS_WIN) |
| // Enables users to create a desktop shortcut for incognito mode. |
| const base::Feature kEnableIncognitoShortcutOnDesktop{ |
| "EnableIncognitoShortcutOnDesktop", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_MAC) |
| const base::Feature kEnterpriseReportingApiKeychainRecreation{ |
| "EnterpriseReportingApiKeychainRecreation", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Upload enterprise cloud reporting from Chrome OS. |
| const base::Feature kEnterpriseReportingInChromeOS{ |
| "EnterpriseReportingInChromeOS", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables event-based status reporting for child accounts in Chrome OS. |
| const base::Feature kEventBasedStatusReporting{ |
| "EventBasedStatusReporting", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // Enables real-time reporting for extension request |
| const base::Feature kEnterpriseRealtimeExtensionRequest{ |
| "EnterpriseRealtimeExtensionRequest", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // If enabled, this feature's |kExternalInstallDefaultButtonKey| field trial |
| // parameter value controls which |ExternalInstallBubbleAlert| button is the |
| // default. |
| const base::Feature kExternalExtensionDefaultButtonControl{ |
| "ExternalExtensionDefaultButtonControl", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if BUILDFLAG(ENABLE_PLUGINS) |
| // Show Flash deprecation warning to users who have manually enabled Flash. |
| // https://crbug.com/918428 |
| const base::Feature kFlashDeprecationWarning{"FlashDeprecationWarning", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables or disables the FlocIdComputed event logging, which happens when a |
| // floc id is first computed for a browsing session or is refreshed due to a |
| // long period of time has passed since the last computation. |
| const base::Feature kFlocIdComputedEventLogging{ |
| "FlocIdComputedEventLogging", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // If enabled, the sim-hash floc computed from history will be further encoded |
| // based on the sorting-lsh. |
| const base::Feature kFlocIdSortingLshBasedComputation{ |
| "FlocIdSortingLshBasedComputation", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables Focus Mode which brings up a PWA-like window look. |
| const base::Feature kFocusMode{"FocusMode", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_WIN) |
| // Enables using GDI to print text as simply text. |
| const base::Feature kGdiTextPrinting{"GdiTextPrinting", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Controls whether the GeoLanguage system is enabled. GeoLanguage uses IP-based |
| // coarse geolocation to provide an estimate (for use by other Chrome features |
| // such as Translate) of the local/regional language(s) corresponding to the |
| // device's location. If this feature is disabled, the GeoLanguage provider is |
| // not initialized at startup, and clients calling it will receive an empty list |
| // of languages. |
| const base::Feature kGeoLanguage{"GeoLanguage", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if !defined(OS_ANDROID) |
| // Enables or disables the Happiness Tracking System for Desktop Chrome. |
| const base::Feature kHappinessTrackingSurveysForDesktop{ |
| "HappinessTrackingSurveysForDesktop", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables the Happiness Tracking System demo mode for Desktop |
| // Chrome. |
| const base::Feature kHappinessTrackingSurveysForDesktopDemo{ |
| "HappinessTrackingSurveysForDesktopDemo", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the migration of Happiness Tracking Surveys on Desktop (to the latest |
| // version). |
| const base::Feature kHappinessTrackingSurveysForDesktopMigration{ |
| "HappinessTrackingSurveysForDesktopMigration", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables the Happiness Tracking System for Desktop Chrome |
| // Settings. |
| const base::Feature kHappinessTrackingSurveysForDesktopSettings{ |
| "HappinessTrackingSurveysForDesktopSettings", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables the Happiness Tracking System for Desktop Chrome |
| // Privacy Settings. |
| const base::Feature kHappinessTrackingSurveysForDesktopSettingsPrivacy{ |
| "HappinessTrackingSurveysForDesktopSettingsPrivacy", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // !defined(OS_ANDROID) |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables the Happiness Tracking System for the device. |
| const base::Feature kHappinessTrackingSystem{"HappinessTrackingSystem", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables or disables the intervention that unloads ad iframes with intensive |
| // resource usage. |
| const base::Feature kHeavyAdIntervention{"HeavyAdIntervention", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables reporting on the intervention that unloads ad iframes |
| // with intensive resource usage. |
| const base::Feature kHeavyAdInterventionWarning{ |
| "HeavyAdInterventionWarning", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables the privacy mitigations for the heavy ad intervention. |
| // This throttles the amount of interventions that can occur on a given host in |
| // a time period. It also adds noise to the thresholds used. This is separate |
| // from the intervention feature so it does not interfere with field trial |
| // activation, as this blocklist is created for every user, and noise is decided |
| // prior to seeing a heavy ad. |
| const base::Feature kHeavyAdPrivacyMitigations{ |
| "HeavyAdPrivacyMitigations", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_MAC) |
| const base::Feature kImmersiveFullscreen{"ImmersiveFullscreen", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables scraping of password-expiry information during SAML login flow, which |
| // can lead to an in-session flow for changing SAML password if it has expired. |
| // This is safe to enable by default since it does not cause the password-expiry |
| // information to be stored, or any user-visible change - in order for anything |
| // to happen, the domain administrator has to intentionally send this extra |
| // info in the SAML response, and enable the InSessionPasswordChange policy. |
| // So, this feature is just for disabling the scraping code if it causes |
| // any unforeseen issues. |
| const base::Feature kInSessionPasswordChange{"InSessionPasswordChange", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| #if defined(OS_WIN) |
| // A feature that controls whether Chrome warns about incompatible applications. |
| // This feature requires Windows 10 or higher to work because it depends on |
| // the "Apps & Features" system settings. |
| const base::Feature kIncompatibleApplicationsWarning{ |
| "IncompatibleApplicationsWarning", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| // Enables or disables the installable ambient badge infobar. |
| const base::Feature kInstallableAmbientBadgeInfoBar{ |
| "InstallableAmbientBadgeInfoBar", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // Support sharing in Chrome OS intent handling. |
| const base::Feature kIntentHandlingSharing{"IntentHandlingSharing", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| // Allow user to have preference for PWA in the intent picker. |
| const base::Feature kIntentPickerPWAPersistence{ |
| "IntentPickerPWAPersistence", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // !defined(OS_ANDROID) |
| |
| // If enabled, CloudPolicyInvalidator and RemoteCommandInvalidator instances |
| // will have unique owner name. |
| const base::Feature kInvalidatorUniqueOwnerName{ |
| "InvalidatorUniqueOwnerName", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| const base::Feature kKernelnextVMs{"KernelnextVMs", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables LiteVideos, a data-saving optimization that throttles media requests |
| // to reduce the bitrate of adaptive media streams. Only for Lite mode users |
| // (formerly DataSaver). |
| const base::Feature kLiteVideo{"LiteVideo", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_MAC) |
| // Uses NSFullSizeContentViewWindowMask where available instead of adding our |
| // own views to the window frame. This is a temporary kill switch, it can be |
| // removed once we feel okay about leaving it on. |
| const base::Feature kMacFullSizeContentView{"MacFullSizeContentView", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #endif |
| |
| #if defined(OS_MAC) |
| // Enables the Material Design download shelf on Mac. |
| const base::Feature kMacMaterialDesignDownloadShelf{ |
| "MacMDDownloadShelf", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_MAC) |
| // In case a website is trying to use the camera/microphone, but Chrome itself |
| // is blocked on the system level to access these, show an icon in the Omnibox, |
| // which, when clicked, displays a bubble with information on how to toggle |
| // Chrome's system-level media permissions. |
| const base::Feature kMacSystemMediaPermissionsInfoUi{ |
| "MacSystemMediaPermissionsInfoUI", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable screen capture system permission check on Mac 10.15+. |
| const base::Feature kMacSystemScreenCapturePermissionCheck{ |
| "MacSystemScreenCapturePermissionCheck", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Whether to show the Metered toggle in Settings, allowing users to toggle |
| // whether to treat a WiFi or Cellular network as 'metered'. |
| const base::Feature kMeteredShowToggle{"MeteredShowToggle", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| // Enables the new design of metrics settings. |
| const base::Feature kMetricsSettingsAndroid{"MetricsSettingsAndroid", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables the use of native notification centers instead of using the Message |
| // Center for displaying the toasts. The feature is hardcoded to enabled for |
| // Chrome OS. |
| #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS) |
| const base::Feature kNativeNotifications{"NativeNotifications", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) |
| |
| // When kNoReferrers is enabled, most HTTP requests will provide empty |
| // referrers instead of their ordinary behavior. |
| const base::Feature kNoReferrers{"NoReferrers", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_WIN) |
| // Changes behavior of requireInteraction for notifications. Instead of staying |
| // on-screen until dismissed, they are instead shown for a very long time. |
| const base::Feature kNotificationDurationLongForRequireInteraction{ |
| "NotificationDurationLongForRequireInteraction", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // OS_WIN |
| |
| #if defined(OS_POSIX) |
| // Enables NTLMv2, which implicitly disables NTLMv1. |
| const base::Feature kNtlmV2Enabled{"NtlmV2Enabled", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| const base::Feature kOnConnectNative{"OnConnectNative", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables/disables marketing emails for other countries other than US,CA,UK. |
| const base::Feature kOobeMarketingAdditionalCountriesSupported{ |
| "kOobeMarketingAdditionalCountriesSupported", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables/disables marketing emails for double opt-in countries. |
| const base::Feature kOobeMarketingDoubleOptInCountriesSupported{ |
| "kOobeMarketingDoubleOptInCountriesSupported", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables the marketing opt-in screen in OOBE |
| const base::Feature kOobeMarketingScreen{"OobeMarketingScreen", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_ANDROID) |
| // Enables or disabled the OOM intervention. |
| const base::Feature kOomIntervention{"OomIntervention", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables usage of Parent Access Code in the login flow for reauth and add |
| // user. Requires |kParentAccessCode| to be enabled. |
| const base::Feature kParentAccessCodeForOnlineLogin{ |
| "ParentAccessCodeForOnlineLogin", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables enforcement of per-app time limits for child user. |
| const base::Feature kPerAppTimeLimits{"PerAppTimeLimits", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enable support for "Plugin VMs" on Chrome OS. |
| const base::Feature kPluginVm{"PluginVm", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Allows prediction operations (e.g., prefetching) on all connection types. |
| const base::Feature kPredictivePrefetchingAllowedOnAllConnectionTypes{ |
| "PredictivePrefetchingAllowedOnAllConnectionTypes", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allows Chrome to do preconnect when prerender fails. |
| const base::Feature kPrerenderFallbackToPreconnect{ |
| "PrerenderFallbackToPreconnect", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables additional contextual entry points to privacy settings. |
| const base::Feature kPrivacyAdvisor{"PrivacyAdvisor", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_ANDROID) |
| const base::Feature kPrivacyReorderedAndroid{"PrivacyReorderedAndroid", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Whether to display redesign of the chrome privacy settings page |
| // to the user. |
| const base::Feature kPrivacySettingsRedesign{"PrivacySettingsRedesign", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables or disables push subscriptions keeping Chrome running in the |
| // background when closed. |
| const base::Feature kPushMessagingBackgroundMode{ |
| "PushMessagingBackgroundMode", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables fingerprint quick unlock. |
| const base::Feature kQuickUnlockFingerprint{"QuickUnlockFingerprint", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables using quiet prompts for notification permission requests. |
| const base::Feature kQuietNotificationPrompts{"QuietNotificationPrompts", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables notification permission revocation for abusive origins. |
| const base::Feature kAbusiveNotificationPermissionRevocation{ |
| "AbusiveOriginNotificationPermissionRevocation", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| // Enables permanent removal of Legacy Supervised Users on startup. |
| const base::Feature kRemoveSupervisedUsersOnStartup{ |
| "RemoveSupervisedUsersOnStartup", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| const base::Feature kSafetyCheckAndroid{"SafetyCheckAndroid", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_WIN) |
| const base::Feature kSafetyCheckChromeCleanerChild{ |
| "SafetyCheckChromeCleanerChild", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enable support for multiple scheduler configurations. |
| const base::Feature kSchedulerConfiguration{"SchedulerConfiguration", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| // Controls whether SCT audit reports are queued and the rate at which they |
| // should be sampled. |
| const base::Feature kSCTAuditing{"SCTAuditing", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| constexpr base::FeatureParam<double> kSCTAuditingSamplingRate{ |
| &kSCTAuditing, "sampling_rate", 0.0}; |
| |
| // Controls whether the user is prompted when sites request attestation. |
| const base::Feature kSecurityKeyAttestationPrompt{ |
| "SecurityKeyAttestationPrompt", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| const base::Feature kSharesheet{"Sharesheet", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_MAC) |
| // Enables the "this OS is obsolete" infobar on Mac 10.10. |
| // TODO(ellyjones): Remove this after the last 10.10 release. |
| const base::Feature kShow10_10ObsoleteInfobar{ |
| "Show1010ObsoleteInfobar", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_MAC) |
| |
| #if defined(OS_ANDROID) |
| const base::Feature kShowTrustedPublisherURL{"ShowTrustedPublisherURL", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Alternative to switches::kSitePerProcess, for turning on full site isolation. |
| // Launch bug: https://crbug.com/810843. This is a //chrome-layer feature to |
| // avoid turning on site-per-process by default for *all* //content embedders |
| // (e.g. this approach lets ChromeCast avoid site-per-process mode). |
| // |
| // TODO(alexmos): Move this and the other site isolation features below to |
| // browser_features, as they are only used on the browser side. |
| const base::Feature kSitePerProcess { |
| "site-per-process", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables SmartDim on Chrome OS. |
| const base::Feature kSmartDim{"SmartDim", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables or disables using smbfs for accessing SMB file shares. |
| const base::Feature kSmbFs{"SmbFs", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| // Enables or disables the ability to use the sound content setting to mute a |
| // website. |
| const base::Feature kSoundContentSetting{"SoundContentSetting", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables chrome://sys-internals. |
| const base::Feature kSysInternals{"SysInternals", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables TPM firmware update capability on Chrome OS. |
| const base::Feature kTPMFirmwareUpdate{"TPMFirmwareUpdate", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // Enables logging UKMs for background tab activity by TabActivityWatcher. |
| const base::Feature kTabMetricsLogging{"TabMetricsLogging", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables the teamfood flags. |
| const base::Feature kTeamfoodFlags{"TeamfoodFlags", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_WIN) |
| // Enables the blocking of third-party modules. This feature requires Windows 8 |
| // or higher because it depends on the ProcessExtensionPointDisablePolicy |
| // mitigation, which was not available on Windows 7. |
| // Note: Due to a limitation in the implementation of this feature, it is |
| // required to start the browser two times to fully enable or disable it. |
| const base::Feature kThirdPartyModulesBlocking{ |
| "ThirdPartyModulesBlocking", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Disable downloads of unsafe file types over insecure transports if initiated |
| // from a secure page |
| const base::Feature kTreatUnsafeDownloadsAsActive{ |
| "TreatUnsafeDownloadsAsActive", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| // Enable uploading of a zip archive of system logs instead of individual files. |
| const base::Feature kUploadZippedSystemLogs{"UploadZippedSystemLogs", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable USB Bouncer for managing a device whitelist for USBGuard on Chrome OS. |
| const base::Feature kUsbbouncer{"USBBouncer", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable USBGuard at the lockscreen on Chrome OS. |
| // TODO(crbug.com/874630): Remove this kill-switch |
| const base::Feature kUsbguard{"USBGuard", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_CHROMEOS) |
| // Enables or disables user activity event logging for power management on |
| // Chrome OS. |
| const base::Feature kUserActivityEventLogging{"UserActivityEventLogging", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if !defined(OS_ANDROID) |
| // Allow capturing of WebRTC event logs, and uploading of those logs to Crash. |
| // Please note that a Chrome policy must also be set, for this to have effect. |
| // Effectively, this is a kill-switch for the feature. |
| // TODO(crbug.com/775415): Remove this kill-switch. |
| const base::Feature kWebRtcRemoteEventLog{"WebRtcRemoteEventLog", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| // Compress remote-bound WebRTC event logs (if used; see kWebRtcRemoteEventLog). |
| const base::Feature kWebRtcRemoteEventLogGzipped{ |
| "WebRtcRemoteEventLogGzipped", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_WIN) || defined(OS_CHROMEOS) |
| // Enables Web Share (navigator.share) |
| const base::Feature kWebShare{"WebShare", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Enables setting time limit for Chrome and PWA's on child user device. |
| // Requires |kPerAppTimeLimits| to be enabled. |
| #if defined(OS_CHROMEOS) |
| const base::Feature kWebTimeLimits{"WebTimeLimits", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| // Whether to enable "dark mode" enhancements in Mac Mojave or Windows 10 for |
| // UIs implemented with web technologies. |
| const base::Feature kWebUIDarkMode { |
| "WebUIDarkMode", |
| #if defined(OS_MAC) || defined(OS_WIN) || defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif // defined(OS_MAC) || defined(OS_WIN) || defined(OS_ANDROID) |
| }; |
| |
| #if defined(OS_CHROMEOS) |
| // Populates storage dimensions in UMA log if enabled. Requires diagnostics |
| // package in the image. |
| const base::Feature kUmaStorageDimensions{"UmaStorageDimensions", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| // Allow a Wilco DTC (diagnostics and telemetry controller) on Chrome OS. |
| // More info about the project may be found here: |
| // https://docs.google.com/document/d/18Ijj8YlC8Q3EWRzLspIi2dGxg4vIBVe5sJgMPt9SWYo |
| const base::Feature kWilcoDtc{"WilcoDtc", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_WIN) |
| // Enables the accelerated default browser flow for Windows 10. |
| const base::Feature kWin10AcceleratedDefaultBrowserFlow{ |
| "Win10AcceleratedDefaultBrowserFlow", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // defined(OS_WIN) |
| |
| const base::Feature kWindowNaming{"WindowNaming", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables writing basic system profile to the persistent histograms files |
| // earlier. |
| const base::Feature kWriteBasicSystemProfileToPersistentHistogramsFile{ |
| "WriteBasicSystemProfileToPersistentHistogramsFile", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if defined(OS_CHROMEOS) |
| bool IsParentAccessCodeForOnlineLoginEnabled() { |
| return base::FeatureList::IsEnabled(kParentAccessCodeForOnlineLogin); |
| } |
| #endif // defined(OS_CHROMEOS) |
| |
| } // namespace features |