blob: e515228d1b49feb38c3d9c24309effb6e7adcce4 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// 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 "build/chromeos_buildflags.h"
#include "chrome/common/chrome_switches.h"
#include "ppapi/buildflags/buildflags.h"
namespace features {
// All features in alphabetical order.
#if BUILDFLAG(IS_CHROMEOS_ASH)
// If enabled device status collector will add the type of session (Affiliated
// User, Kiosks, Managed Guest Sessions) to the device status report.
BASE_FEATURE(kActivityReportingSessionType,
"ActivityReportingSessionType",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables logging for adaptive screen brightness on Chrome OS.
BASE_FEATURE(kAdaptiveScreenBrightnessLogging,
"AdaptiveScreenBrightnessLogging",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kAppManagementAppDetails,
"AppManagementAppDetails",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kAppDeduplicationService,
"AppDeduplicationService",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kAppDeduplicationServiceFondue,
"AppDeduplicationServiceFondue",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kAppPreloadService,
"AppPreloadService",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_MAC)
// Can be used to disable RemoteCocoa (hosting NSWindows for apps in the app
// process). For debugging purposes only.
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
BASE_FEATURE(kAppShimNewCloseBehavior,
"AppShimNewCloseBehavior",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_MAC)
// Enables the built-in DNS resolver.
BASE_FEATURE(kAsyncDns,
"AsyncDns",
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) || \
BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FUCHSIA)
// Enables or disables the Autofill survey triggered by opening a prompt to
// save address info.
BASE_FEATURE(kAutofillAddressSurvey,
"AutofillAddressSurvey",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Autofill survey triggered by opening a prompt to
// save credit card info.
BASE_FEATURE(kAutofillCardSurvey,
"AutofillCardSurvey",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Autofill survey triggered by opening a prompt to
// save password info.
BASE_FEATURE(kAutofillPasswordSurvey,
"AutofillPasswordSurvey",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_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.
BASE_FEATURE(kBackgroundModeAllowRestart,
"BackgroundModeAllowRestart",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enable Borealis on Chrome OS.
BASE_FEATURE(kBorealis, "Borealis", base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Enables change picture video mode.
BASE_FEATURE(kChangePictureVideoMode,
"ChangePictureVideoMode",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kClientStorageAccessContextAuditing,
"ClientStorageAccessContextAuditing",
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables "usm" service in the list of user services returned by
// userInfo Gaia message.
BASE_FEATURE(kCrOSEnableUSMUserService,
"CrOSEnableUSMUserService",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables or disables flash component updates on Chrome OS.
BASE_FEATURE(kCrosCompUpdates,
"CrosCompUpdates",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable project Crostini, Linux VMs on Chrome OS.
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.
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).
BASE_FEATURE(kCrostiniAdvancedAccessControls,
"CrostiniAdvancedAccessControls",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables infrastructure for applying Ansible playbook to default Crostini
// container.
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.
BASE_FEATURE(kCrostiniAnsibleSoftwareManagement,
"CrostiniAnsibleSoftwareManagement",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables support for sideloading android apps into Arc via crostini.
BASE_FEATURE(kCrostiniArcSideload,
"CrostiniArcSideload",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables distributed model for TPM1.2, i.e., using tpm_managerd and
// attestationd.
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.
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.
BASE_FEATURE(kCryptohomeUserDataAuthKillswitch,
"CryptohomeUserDataAuthKillswitch",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_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.
BASE_FEATURE(kDataLeakPreventionPolicy,
"DataLeakPreventionPolicy",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables starting of Data Leak Prevention Files Daemon by sending the
// DLP policy there. The daemon might restrict access to some protected files.
BASE_FEATURE(kDataLeakPreventionFilesRestriction,
"DataLeakPreventionFilesRestriction",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// When enabled, newly installed ARC apps will not capture links clicked in the
// browser by default. Users can still enable link capturing for apps through
// the intent picker or settings.
BASE_FEATURE(kDefaultLinkCapturingInBrowser,
"DefaultLinkCapturingInBrowser",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables passing additional user authentication in requests to DMServer
// (policy fetch, status report upload).
BASE_FEATURE(kDMServerOAuthForChildUser,
"DMServerOAuthForChildUser",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
// Whether to allow installed-by-default web apps to be installed or not.
BASE_FEATURE(kPreinstalledWebAppInstallation,
"DefaultWebAppInstallation",
base::FEATURE_ENABLED_BY_DEFAULT);
// Whether to run the PreinstalledWebAppDuplicationFixer code during start up.
BASE_FEATURE(kPreinstalledWebAppDuplicationFixer,
"PreinstalledWebAppDuplicationFixer",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables OS Integration sub managers to execute the
// registration/unregistration functionality and write the new OS states to the
// DB.
BASE_FEATURE(kOsIntegrationSubManagers,
"OsIntegrationSubManagers",
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<OsIntegrationSubManagersStage>::Option
sub_manager_stages[] = {
{OsIntegrationSubManagersStage::kWriteConfig, "write_config"},
{OsIntegrationSubManagersStage::kExecuteAndWriteConfig,
"execute_and_write_config"}};
const base::FeatureParam<OsIntegrationSubManagersStage>
kOsIntegrationSubManagersStageParam{
&kOsIntegrationSubManagers, "stage",
OsIntegrationSubManagersStage::kWriteConfig, &sub_manager_stages};
#endif
// Generates customised default offline page that is shown when web app is
// offline if no custom page is provided by developer.
BASE_FEATURE(kPWAsDefaultOfflinePage,
"PWAsDefaultOfflinePage",
base::FEATURE_ENABLED_BY_DEFAULT);
// API that allows PWAs manually minimizing, maximizing and restoring windows.
BASE_FEATURE(kDesktopPWAsAdditionalWindowingControls,
"DesktopPWAsAdditionalWindowingControls",
base::FEATURE_DISABLED_BY_DEFAULT);
// When installing default installed PWAs, we wait for service workers
// to cache resources.
BASE_FEATURE(kDesktopPWAsCacheDuringDefaultInstall,
"DesktopPWAsCacheDuringDefaultInstall",
base::FEATURE_ENABLED_BY_DEFAULT);
// Moves the Extensions "puzzle piece" icon from the title bar into the app menu
// for web app windows.
BASE_FEATURE(kDesktopPWAsElidedExtensionsMenu,
"DesktopPWAsElidedExtensionsMenu",
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Whether to parse and enforce the WebAppSettings policy.
BASE_FEATURE(kDesktopPWAsEnforceWebAppSettingsPolicy,
"DesktopPWAsEnforceWebAppSettingsPolicy",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables or disables Desktop PWAs to be auto-started on OS login.
BASE_FEATURE(kDesktopPWAsRunOnOsLogin,
"DesktopPWAsRunOnOsLogin",
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Runs diagnostics during start up to measure how broken web app icons are to
// feed into metrics.
BASE_FEATURE(kDesktopPWAsIconHealthChecks,
"DesktopPWAsIconHealthChecks",
base::FEATURE_ENABLED_BY_DEFAULT);
// Adds a user settings that allows PWAs to be opened with a tab strip.
BASE_FEATURE(kDesktopPWAsTabStripSettings,
"DesktopPWAsTabStripSettings",
base::FEATURE_DISABLED_BY_DEFAULT);
// Adds support for web bundles, making web apps able to be launched offline.
BASE_FEATURE(kDesktopPWAsWebBundles,
"DesktopPWAsWebBundles",
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_FUCHSIA)
// Controls whether Chrome Apps are supported. See https://crbug.com/1221251.
// If the feature is disabled, Chrome Apps continue to work. If enabled, Chrome
// Apps will not launch and will be marked in the UI as deprecated.
BASE_FEATURE(kChromeAppsDeprecation,
"ChromeAppsDeprecation",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether force installed and preinstalled apps should be exempt from
// deprecation.
BASE_FEATURE(kKeepForceInstalledPreinstalledApps,
"KeepForceInstalledPreinstalledApps",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls if the 'launch anyways' button is shown.
const base::FeatureParam<bool> kChromeAppsDeprecationHideLaunchAnyways{
&kChromeAppsDeprecation, "HideLaunchAnyways", false};
#endif
// Enables notification permission revocation for origins that may send
// disruptive notifications.
BASE_FEATURE(kDisruptiveNotificationPermissionRevocation,
"DisruptiveNotificationPermissionRevocation",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable DNS over HTTPS (DoH).
BASE_FEATURE(kDnsOverHttps,
"DnsOverHttps",
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \
BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// 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 BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \
BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
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 BUILDFLAG(IS_CHROMEOS_ASH)
// Enables the DNS-Over-HTTPS in the DNS proxy.
BASE_FEATURE(kDnsProxyEnableDOH,
"DnsProxyEnableDOH",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
// Enable loading native libraries earlier in startup on Android.
BASE_FEATURE(kEarlyLibraryLoad,
"EarlyLibraryLoad",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// Enable the restricted web APIs for high-trusted apps.
BASE_FEATURE(kEnableRestrictedWebApis,
"EnableRestrictedWebApis",
base::FEATURE_ENABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
// Enable WebHID on extension service workers.
BASE_FEATURE(kEnableWebHidOnExtensionServiceWorker,
"EnableWebHidOnExtensionServiceWorker",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Enable WebUSB on extension service workers.
BASE_FEATURE(kEnableWebUsbOnExtensionServiceWorker,
"EnableWebUsbOnExtensionServiceWorker",
base::FEATURE_DISABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
// Lazy initialize IndividualSettings for extensions from enterprise policy
// that are not installed.
BASE_FEATURE(kExtensionDeferredIndividualSettings,
"ExtensionDeferredIndividualSettings",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// If enabled, this feature's |kExternalInstallDefaultButtonKey| field trial
// parameter value controls which |ExternalInstallBubbleAlert| button is the
// default.
BASE_FEATURE(kExternalExtensionDefaultButtonControl,
"ExternalExtensionDefaultButtonControl",
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kFileTransferEnterpriseConnector,
"FileTransferEnterpriseConnector",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(ENABLE_PLUGINS)
// Show Flash deprecation warning to users who have manually enabled Flash.
// https://crbug.com/918428
BASE_FEATURE(kFlashDeprecationWarning,
"FlashDeprecationWarning",
base::FEATURE_ENABLED_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.
BASE_FEATURE(kGeoLanguage, "GeoLanguage", base::FEATURE_DISABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
// Enables or disables the Happiness Tracking System demo mode for Desktop
// Chrome.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopDemo,
"HappinessTrackingSurveysForDesktopDemo",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for COEP issues in Chrome
// DevTools on Desktop.
BASE_FEATURE(kHaTSDesktopDevToolsIssuesCOEP,
"HaTSDesktopDevToolsIssuesCOEP",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Mixed Content issues in
// Chrome DevTools on Desktop.
BASE_FEATURE(kHaTSDesktopDevToolsIssuesMixedContent,
"HaTSDesktopDevToolsIssuesMixedContent",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for same-site cookies
// issues in Chrome DevTools on Desktop.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopDevToolsIssuesCookiesSameSite,
"HappinessTrackingSurveysForDesktopDevToolsIssuesCookiesSameSite",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Heavy Ad issues in
// Chrome DevTools on Desktop.
BASE_FEATURE(kHaTSDesktopDevToolsIssuesHeavyAd,
"HaTSDesktopDevToolsIssuesHeavyAd",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for CSP issues in Chrome
// DevTools on Desktop.
BASE_FEATURE(kHaTSDesktopDevToolsIssuesCSP,
"HaTSDesktopDevToolsIssuesCSP",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Desktop Privacy Guide.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopPrivacyGuide,
"HappinessTrackingSurveysForDesktopPrivacyGuide",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopPrivacyGuideTime{
&kHappinessTrackingSurveysForDesktopPrivacyGuide, "settings-time",
base::Seconds(20)};
// Enables or disables the Happiness Tracking System for Desktop Privacy
// Sandbox.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopPrivacySandbox,
"HappinessTrackingSurveysForDesktopPrivacySandbox",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopPrivacySandboxTime{
&kHappinessTrackingSurveysForDesktopPrivacySandbox, "settings-time",
base::Seconds(20)};
// Enables or disables the Happiness Tracking System for Desktop Chrome
// Settings.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopSettings,
"HappinessTrackingSurveysForDesktopSettings",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Desktop Chrome
// Privacy Settings.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopSettingsPrivacy,
"HappinessTrackingSurveysForDesktopSettingsPrivacy",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<bool>
kHappinessTrackingSurveysForDesktopSettingsPrivacyNoSandbox{
&kHappinessTrackingSurveysForDesktopSettingsPrivacy, "no-sandbox",
false};
const base::FeatureParam<bool>
kHappinessTrackingSurveysForDesktopSettingsPrivacyNoGuide{
&kHappinessTrackingSurveysForDesktopSettingsPrivacy, "no-guide", false};
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopSettingsPrivacyTime{
&kHappinessTrackingSurveysForDesktopSettingsPrivacy, "settings-time",
base::Seconds(20)};
// Enables or disables the Happiness Tracking System for Desktop Chrome
// NTP Modules.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopNtpModules,
"HappinessTrackingSurveysForDesktopNtpModules",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForNtpPhotosOptOut,
"HappinessTrackingSurveysForrNtpPhotosOptOut",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Chrome What's New.
BASE_FEATURE(kHappinessTrackingSurveysForDesktopWhatsNew,
"HappinessTrackingSurveysForDesktopWhatsNew",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopWhatsNewTime{
&kHappinessTrackingSurveysForDesktopWhatsNew, "whats-new-time",
base::Seconds(20)};
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables the Happiness Tracking System for the General survey.
BASE_FEATURE(kHappinessTrackingSystem,
"HappinessTrackingSystem",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Bluetooth revamp
// survey.
BASE_FEATURE(kHappinessTrackingSystemBluetoothRevamp,
"HappinessTrackingSystemBluetoothRevamp",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for the Ent survey.
BASE_FEATURE(kHappinessTrackingSystemEnt,
"HappinessTrackingSystemEnt",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for the Stability survey.
BASE_FEATURE(kHappinessTrackingSystemStability,
"HappinessTrackingSystemStability",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for the Performance survey.
BASE_FEATURE(kHappinessTrackingSystemPerformance,
"HappinessTrackingSystemPerformance",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Onboarding Experience.
BASE_FEATURE(kHappinessTrackingSystemOnboarding,
"HappinessTrackingOnboardingExperience",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Unlock.
BASE_FEATURE(kHappinessTrackingSystemUnlock,
"HappinessTrackingUnlock",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Smart Lock.
BASE_FEATURE(kHappinessTrackingSystemSmartLock,
"HappinessTrackingSmartLock",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for ARC Games survey.
BASE_FEATURE(kHappinessTrackingSystemArcGames,
"HappinessTrackingArcGames",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Audio survey.
BASE_FEATURE(kHappinessTrackingSystemAudio,
"HappinessTrackingAudio",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for Personalization Avatar survey.
BASE_FEATURE(kHappinessTrackingPersonalizationAvatar,
"HappinessTrackingPersonalizationAvatar",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for Personalization Screensaver survey.
BASE_FEATURE(kHappinessTrackingPersonalizationScreensaver,
"HappinessTrackingPersonalizationScreensaver",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for Personalization Wallpaper survey.
BASE_FEATURE(kHappinessTrackingPersonalizationWallpaper,
"HappinessTrackingPersonalizationWallpaper",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for Media App PDF survey.
BASE_FEATURE(kHappinessTrackingMediaAppPdf,
"HappinessTrackingMediaAppPdf",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables the Happiness Tracking System for Camera App survey.
BASE_FEATURE(kHappinessTrackingSystemCameraApp,
"HappinessTrackingCameraApp",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for Photos Experience survey.
BASE_FEATURE(kHappinessTrackingPhotosExperience,
"HappinessTrackingPhotosExperience",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Happiness Tracking System for General Camera survey.
BASE_FEATURE(kHappinessTrackingGeneralCamera,
"HappinessTrackingGeneralCamera",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Hides the origin text from showing up briefly in WebApp windows.
BASE_FEATURE(kHideWebAppOriginText,
"HideWebAppOriginText",
base::FEATURE_DISABLED_BY_DEFAULT);
// Sets whether the HTTPS-Only Mode setting is displayed in the settings UI.
BASE_FEATURE(kHttpsOnlyMode, "HttpsOnlyMode", base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the new implementation of HTTPS-First Mode.
BASE_FEATURE(kHttpsFirstModeV2,
"HttpsFirstModeV2",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables automatically upgrading main frame navigations to HTTPS.
BASE_FEATURE(kHttpsUpgrades,
"HttpsUpgrades",
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kImmersiveFullscreen,
"ImmersiveFullscreen",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables immerisve fullscreen mode for PWA windows. The above feature only
// affects non-PWA windows.
BASE_FEATURE(kImmersiveFullscreenPWAs,
"ImmersiveFullscreenPWAs",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// 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.
BASE_FEATURE(kInSessionPasswordChange,
"InSessionPasswordChange",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_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.
BASE_FEATURE(kIncompatibleApplicationsWarning,
"IncompatibleApplicationsWarning",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
// When enabled, users will see a warning when downloading from Incognito.
BASE_FEATURE(kIncognitoDownloadsWarning,
"IncognitoDownloadsWarning",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// When enabled, users will see updated UI in Incognito NTP
BASE_FEATURE(kIncognitoNtpRevamp,
"IncognitoNtpRevamp",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables Isolated Web App Developer Mode, which allows developers to
// install untrusted Isolated Web Apps.
BASE_FEATURE(kIsolatedWebAppDevMode,
"IsolatedWebAppDevMode",
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kKioskEnableAppService,
"KioskEnableAppService",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS)
// When enabled, allows other features to use the k-Anonymity Service.
BASE_FEATURE(kKAnonymityService,
"KAnonymityService",
base::FEATURE_DISABLED_BY_DEFAULT);
// Origin to use for requests to the k-Anonymity Auth server to get trust
// tokens.
constexpr base::FeatureParam<std::string> kKAnonymityServiceAuthServer{
&kKAnonymityService, "KAnonymityServiceAuthServer",
"https://chromekanonymityauth-pa.googleapis.com/"};
// Origin to use as a relay for OHTTP requests to the k-Anonymity Join server.
constexpr base::FeatureParam<std::string> kKAnonymityServiceJoinRelayServer{
&kKAnonymityService, "KAnonymityServiceJoinRelayServer", ""};
// Origin to use to notify the k-Anonymity Join server of group membership.
constexpr base::FeatureParam<std::string> kKAnonymityServiceJoinServer{
&kKAnonymityService, "KAnonymityServiceJoinServer",
"https://chromekanonymity-pa.googleapis.com/"};
// Minimum amount of time allowed between notifying the Join server of
// membership in a distinct group.
constexpr base::FeatureParam<base::TimeDelta> kKAnonymityServiceJoinInterval{
&kKAnonymityService, "KAnonymityServiceJoinInterval", base::Days(1)};
// Origin to use as a relay for OHTTP requests to the k-Anonymity Query server.
constexpr base::FeatureParam<std::string> kKAnonymityServiceQueryRelayServer{
&kKAnonymityService, "KAnonymityServiceQueryRelayServer", ""};
// Origin to use to request k-anonymity status from the k-Anonymity Query
// server.
constexpr base::FeatureParam<std::string> kKAnonymityServiceQueryServer{
&kKAnonymityService, "KAnonymityServiceQueryServer",
"https://chromekanonymityquery-pa.googleapis.com/"};
// Minimum amount of time allowed between requesting k-anonymity status from the
// Query server for a distinct group.
constexpr base::FeatureParam<base::TimeDelta> kKAnonymityServiceQueryInterval{
&kKAnonymityService, "KAnonymityServiceJoinInterval", base::Days(1)};
// When enabled, the k-Anonymity Service will send requests to the Join and
// Query k-anonymity servers.
BASE_FEATURE(kKAnonymityServiceOHTTPRequests,
"KAnonymityServiceOHTTPRequests",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, removes any entry points to the history UI from Incognito mode.
BASE_FEATURE(kUpdateHistoryEntryPointsInIncognito,
"UpdateHistoryEntryPointsInIncognito",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kLinuxLowMemoryMonitor,
"LinuxLowMemoryMonitor",
base::FEATURE_DISABLED_BY_DEFAULT);
// Values taken from the low-memory-monitor documentation and also apply to the
// portal API:
// https://hadess.pages.freedesktop.org/low-memory-monitor/gdbus-org.freedesktop.LowMemoryMonitor.html
constexpr base::FeatureParam<int> kLinuxLowMemoryMonitorModerateLevel{
&kLinuxLowMemoryMonitor, "moderate_level", 50};
constexpr base::FeatureParam<int> kLinuxLowMemoryMonitorCriticalLevel{
&kLinuxLowMemoryMonitor, "critical_level", 255};
#endif // BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
BASE_FEATURE(kListWebAppsSwitch,
"ListWebAppsSwitch",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_MAC)
// Enable screen capture system permission check on Mac 10.15+.
BASE_FEATURE(kMacSystemScreenCapturePermissionCheck,
"MacSystemScreenCapturePermissionCheck",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Whether to show the Metered toggle in Settings, allowing users to toggle
// whether to treat a WiFi or Cellular network as 'metered'.
BASE_FEATURE(kMeteredShowToggle,
"MeteredShowToggle",
base::FEATURE_DISABLED_BY_DEFAULT);
// Whether to show the Hidden toggle in Settings, allowing users to toggle
// whether to treat a WiFi network as having a hidden ssid.
BASE_FEATURE(kShowHiddenNetworkToggle,
"ShowHiddenNetworkToggle",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
// Enables the new design of metrics settings.
BASE_FEATURE(kMetricsSettingsAndroid,
"MetricsSettingsAndroid",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kMicrosoftOfficeWebAppExperiment,
"MicrosoftOfficeWebAppExperiment",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kMigrateExternalPrefsToWebAppDB,
"MigrateExternalPrefsToWebAppDB",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kMoveWebApp,
"MoveWebApp",
base::FeatureState::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kMoveWebAppUninstallStartUrlPrefix(
&kMoveWebApp,
"uninstallStartUrlPrefix",
"");
const base::FeatureParam<std::string> kMoveWebAppUninstallStartUrlPattern(
&kMoveWebApp,
"uninstallStartUrlPattern",
"");
const base::FeatureParam<std::string>
kMoveWebAppInstallStartUrl(&kMoveWebApp, "installStartUrl", "");
// Enables the use of system notification centers instead of using the Message
// Center for displaying the toasts. The feature is hardcoded to enabled for
// Chrome OS.
#if BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS) && !BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kNativeNotifications,
"NativeNotifications",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSystemNotifications,
"SystemNotifications",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS)
#if BUILDFLAG(IS_MAC)
// Enables the usage of Apple's new Notification API on macOS 10.14+
BASE_FEATURE(kNewMacNotificationAPI,
"NewMacNotificationAPI",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_MAC)
// When kNoReferrers is enabled, most HTTP requests will provide empty
// referrers instead of their ordinary behavior.
BASE_FEATURE(kNoReferrers, "NoReferrers", base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN)
// Changes behavior of requireInteraction for notifications. Instead of staying
// on-screen until dismissed, they are instead shown for a very long time.
BASE_FEATURE(kNotificationDurationLongForRequireInteraction,
"NotificationDurationLongForRequireInteraction",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_WIN)
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kOnConnectNative,
"OnConnectNative",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Enables/disables marketing emails for other countries other than US,CA,UK.
BASE_FEATURE(kOobeMarketingAdditionalCountriesSupported,
"kOobeMarketingAdditionalCountriesSupported",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables/disables marketing emails for double opt-in countries.
BASE_FEATURE(kOobeMarketingDoubleOptInCountriesSupported,
"kOobeMarketingDoubleOptInCountriesSupported",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ANDROID)
// Enables or disabled the OOM intervention.
BASE_FEATURE(kOomIntervention,
"OomIntervention",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables usage of Parent Access Code in the login flow for reauth and add
// user. Requires |kParentAccessCode| to be enabled.
BASE_FEATURE(kParentAccessCodeForOnlineLogin,
"ParentAccessCodeForOnlineLogin",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// Keep a client-side log of when websites access permission-gated capabilities
// to allow the user to audit usage.
BASE_FEATURE(kPermissionAuditing,
"PermissionAuditing",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables using the prediction service for permission prompts. We will keep
// this feature in order to allow us to update the holdback chance via finch.
BASE_FEATURE(kPermissionPredictions,
"PermissionPredictions",
base::FEATURE_ENABLED_BY_DEFAULT);
// The holdback chance is 30% but it can also be configured/updated
// through finch if needed.
const base::FeatureParam<double> kPermissionPredictionsHoldbackChance(
&kPermissionPredictions,
"holdback_chance",
0.3);
// Enables using the prediction service for geolocation permission prompts.
BASE_FEATURE(kPermissionGeolocationPredictions,
"PermissionGeolocationPredictions",
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<double>
kPermissionGeolocationPredictionsHoldbackChance(
&kPermissionGeolocationPredictions,
"holdback_chance",
0.3);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enable support for "Plugin VMs" on Chrome OS.
BASE_FEATURE(kPluginVm, "PluginVm", base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Allows Chrome to do preconnect when prerender fails.
BASE_FEATURE(kPrerenderFallbackToPreconnect,
"PrerenderFallbackToPreconnect",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPrivacyGuideAndroid,
"PrivacyGuideAndroid",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables push subscriptions keeping Chrome running in the
// background when closed.
BASE_FEATURE(kPushMessagingBackgroundMode,
"PushMessagingBackgroundMode",
base::FEATURE_DISABLED_BY_DEFAULT);
// Shows a confirmation dialog when updates to a PWAs icon has been detected.
BASE_FEATURE(kPwaUpdateDialogForIcon,
"PwaUpdateDialogForIcon",
base::FEATURE_DISABLED_BY_DEFAULT);
// Shows a confirmation dialog when updates to a PWAs name has been detected.
BASE_FEATURE(kPwaUpdateDialogForName,
"PwaUpdateDialogForName",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables using quiet prompts for notification permission requests.
BASE_FEATURE(kQuietNotificationPrompts,
"QuietNotificationPrompts",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables recording additional web app related debugging data to be displayed
// in: chrome://web-app-internals
BASE_FEATURE(kRecordWebAppDebugInfo,
"RecordWebAppDebugInfo",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables notification permission revocation for abusive origins.
BASE_FEATURE(kAbusiveNotificationPermissionRevocation,
"AbusiveOriginNotificationPermissionRevocation",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables permanent removal of Legacy Supervised Users on startup.
BASE_FEATURE(kRemoveSupervisedUsersOnStartup,
"RemoveSupervisedUsersOnStartup",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
// Enables notification permission module in Safety Check.
BASE_FEATURE(kSafetyCheckNotificationPermissions,
"SafetyCheckNotificationPermissions",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<int>
kSafetyCheckNotificationPermissionsMinEnagementLimit{
&kSafetyCheckNotificationPermissions,
"min-engagement-notification-count", 0};
const base::FeatureParam<int>
kSafetyCheckNotificationPermissionsLowEnagementLimit{
&kSafetyCheckNotificationPermissions,
"low-engagement-notification-count", 4};
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enable support for multiple scheduler configurations.
BASE_FEATURE(kSchedulerConfiguration,
"SchedulerConfiguration",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
// Controls whether SCT audit reports are queued and the rate at which they
// should be sampled. Default sampling rate is 1/10,000 certificates.
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_DISABLED_BY_DEFAULT);
#else
BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_ENABLED_BY_DEFAULT);
#endif
constexpr base::FeatureParam<double> kSCTAuditingSamplingRate{
&kSCTAuditing, "sampling_rate", 0.0001};
// SCT auditing hashdance allows Chrome clients who are not opted-in to Enhanced
// Safe Browsing Reporting to perform a k-anonymous query to see if Google knows
// about an SCT seen in the wild. If it hasn't been seen, then it is considered
// a security incident and uploaded to Google.
BASE_FEATURE(kSCTAuditingHashdance,
"SCTAuditingHashdance",
base::FEATURE_ENABLED_BY_DEFAULT);
// An estimated high bound for the time it takes Google to ingest updates to an
// SCT log. Chrome will wait for at least this time plus the Log's Maximum Merge
// Delay after an SCT's timestamp before performing a hashdance lookup query.
const base::FeatureParam<base::TimeDelta> kSCTLogExpectedIngestionDelay{
&kSCTAuditingHashdance,
"sct_log_expected_ingestion_delay",
base::Hours(1),
};
// A random delay will be added to the expected log ingestion delay between zero
// and this maximum. This prevents a burst of queries once a new SCT is issued.
const base::FeatureParam<base::TimeDelta> kSCTLogMaxIngestionRandomDelay{
&kSCTAuditingHashdance,
"sct_log_max_ingestion_random_delay",
base::Hours(1),
};
// Controls whether the user is prompted when sites request attestation.
BASE_FEATURE(kSecurityKeyAttestationPrompt,
"SecurityKeyAttestationPrompt",
base::FEATURE_ENABLED_BY_DEFAULT);
// 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.
BASE_FEATURE(kSitePerProcess,
"SitePerProcess",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables SmartDim on Chrome OS.
BASE_FEATURE(kSmartDim, "SmartDim", base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables the ability to use the sound content setting to mute a
// website.
BASE_FEATURE(kSoundContentSetting,
"SoundContentSetting",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables chrome://sys-internals.
BASE_FEATURE(kSysInternals, "SysInternals", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables or disables TPM firmware update capability on Chrome OS.
BASE_FEATURE(kTPMFirmwareUpdate,
"TPMFirmwareUpdate",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if !BUILDFLAG(IS_ANDROID)
// Enables the demo version of the Support Tool. The tool will be available in
// chrome://support-tool. See go/support-tool-v1-design for more details.
BASE_FEATURE(kSupportTool, "SupportTool", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Support Tool to include a screenshot in the exported support tool
// packet.
BASE_FEATURE(kSupportToolScreenshot,
"SupportToolScreenshot",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_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.
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. As of M89, mixed downloads are blocked on all platforms.
BASE_FEATURE(kTreatUnsafeDownloadsAsActive,
"TreatUnsafeDownloadsAsActive",
base::FEATURE_ENABLED_BY_DEFAULT);
// Block downloads delivered over insecure transports (i.e. not over HTTPS).
BASE_FEATURE(kBlockInsecureDownloads,
"BlockInsecureDownloads",
base::FEATURE_DISABLED_BY_DEFAULT);
// TrustSafetySentimentSurvey
#if !BUILDFLAG(IS_ANDROID)
// Enables surveying of users of Trust & Safety features with HaTS.
BASE_FEATURE(kTrustSafetySentimentSurvey,
"TrustSafetySentimentSurvey",
base::FEATURE_DISABLED_BY_DEFAULT);
// The minimum and maximum time after a user has interacted with a Trust and
// Safety they are eligible to be surveyed.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyMinTimeToPrompt{
&kTrustSafetySentimentSurvey, "min-time-to-prompt", base::Minutes(2)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyMaxTimeToPrompt{
&kTrustSafetySentimentSurvey, "max-time-to-prompt", base::Minutes(60)};
// The maximum and minimum range for the random number of NTPs that the user
// must at least visit after interacting with a Trust and Safety feature to be
// eligible for a survey.
const base::FeatureParam<int> kTrustSafetySentimentSurveyNtpVisitsMinRange{
&kTrustSafetySentimentSurvey, "ntp-visits-min-range", 2};
const base::FeatureParam<int> kTrustSafetySentimentSurveyNtpVisitsMaxRange{
&kTrustSafetySentimentSurvey, "ntp-visits-max-range", 4};
// The feature area probabilities for each feature area considered as part of
// the Trust & Safety sentiment survey.
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySettingsProbability{
&kTrustSafetySentimentSurvey, "privacy-settings-probability", 0.6};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyTrustedSurfaceProbability{
&kTrustSafetySentimentSurvey, "trusted-surface-probability", 0.4};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyTransactionsProbability{
&kTrustSafetySentimentSurvey, "transactions-probability", 0.05};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3ConsentAcceptProbability{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-consent-accept-probability", 0.1};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3ConsentDeclineProbability{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-consent-decline-probability", 0.5};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeDismissProbability{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-dismiss-probability", 0.5};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeOkProbability{
&kTrustSafetySentimentSurvey, "privacy-sandbox-3-notice-ok-probability",
0.05};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeSettingsProbability{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-settings-probability", 0.8};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeLearnMoreProbability{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-learn-more-probability", 0.2};
// The HaTS trigger IDs, which determine which survey is delivered from the HaTS
// backend.
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySettingsTriggerId{
&kTrustSafetySentimentSurvey, "privacy-settings-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyTrustedSurfaceTriggerId{
&kTrustSafetySentimentSurvey, "trusted-surface-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyTransactionsTriggerId{
&kTrustSafetySentimentSurvey, "transactions-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3ConsentAcceptTriggerId{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-consent-accept-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3ConsentDeclineTriggerId{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-consent-decline-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeDismissTriggerId{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-dismiss-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeOkTriggerId{
&kTrustSafetySentimentSurvey, "privacy-sandbox-3-notice-ok-trigger-id",
""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeSettingsTriggerId{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-settings-trigger-id", ""};
extern const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySandbox3NoticeLearnMoreTriggerId{
&kTrustSafetySentimentSurvey,
"privacy-sandbox-3-notice-learn-more-trigger-id", ""};
// The time the user must remain on settings after interacting with a privacy
// setting to be considered.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyPrivacySettingsTime{&kTrustSafetySentimentSurvey,
"privacy-settings-time",
base::Seconds(20)};
// The time the user must have the Trusted Surface bubble open to be considered.
// Alternatively the user can interact with the bubble, in which case this time
// is irrelevant.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyTrustedSurfaceTime{
&kTrustSafetySentimentSurvey, "trusted-surface-time", base::Seconds(5)};
// The time the user must remain on settings after visiting the password
// manager page.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyTransactionsPasswordManagerTime{
&kTrustSafetySentimentSurvey, "transactions-password-manager-time",
base::Seconds(20)};
#endif
// TrustSafetySentimentSurveyV2
#if !BUILDFLAG(IS_ANDROID)
// Enables the second version of the sentiment survey for users of Trust &
// Safety features, using HaTS.
BASE_FEATURE(kTrustSafetySentimentSurveyV2,
"TrustSafetySentimentSurveyV2",
base::FEATURE_DISABLED_BY_DEFAULT);
// The minimum and maximum time after a user has interacted with a Trust and
// Safety feature that they are eligible to be surveyed.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MinTimeToPrompt{
&kTrustSafetySentimentSurveyV2, "min-time-to-prompt", base::Minutes(2)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MaxTimeToPrompt{&kTrustSafetySentimentSurveyV2,
"max-time-to-prompt",
base::Minutes(60)};
// The maximum and minimum range for the random number of NTPs that the user
// must at least visit after interacting with a Trust and Safety feature to be
// eligible for a survey.
const base::FeatureParam<int> kTrustSafetySentimentSurveyV2NtpVisitsMinRange{
&kTrustSafetySentimentSurveyV2, "ntp-visits-min-range", 2};
const base::FeatureParam<int> kTrustSafetySentimentSurveyV2NtpVisitsMaxRange{
&kTrustSafetySentimentSurveyV2, "ntp-visits-max-range", 4};
// The minimum time that has to pass in the current session before a user can be
// eligible to be considered for the baseline control group.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MinSessionTime{
&kTrustSafetySentimentSurveyV2, "min-session-time", base::Seconds(30)};
// The feature area probabilities for each feature area considered as part of
// the Trust & Safety sentiment survey.
// TODO(crbug.com/1382134): Calculate initial probabilities and remove 0.0
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2BrowsingDataProbability{
&kTrustSafetySentimentSurveyV2, "browsing-data-probability", 0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2ControlGroupProbability{
&kTrustSafetySentimentSurveyV2, "control-group-probability", 0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2PasswordCheckProbability{
&kTrustSafetySentimentSurveyV2, "password-check-probability", 0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2SafetyCheckProbability{
&kTrustSafetySentimentSurveyV2, "safety-check-probability", 0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2TrustedSurfaceProbability{
&kTrustSafetySentimentSurveyV2, "trusted-surface-probability", 0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2PrivacyGuideProbability{
&kTrustSafetySentimentSurveyV2, "privacy-guide-probability", 0.0};
// The HaTS trigger IDs, which determine which survey is delivered from the HaTS
// backend.
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2BrowsingDataTriggerId{
&kTrustSafetySentimentSurveyV2, "browsing-data-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2ControlGroupTriggerId{
&kTrustSafetySentimentSurveyV2, "control-group-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2PasswordCheckTriggerId{
&kTrustSafetySentimentSurveyV2, "password-check-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2SafetyCheckTriggerId{
&kTrustSafetySentimentSurveyV2, "safety-check-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2TrustedSurfaceTriggerId{
&kTrustSafetySentimentSurveyV2, "trusted-surface-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2PrivacyGuideTriggerId{
&kTrustSafetySentimentSurveyV2, "privacy-guide-trigger-id", ""};
// The time the user must have the Trusted Surface bubble open to be considered.
// Alternatively the user can interact with the bubble, in which case this time
// is irrelevant.
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2TrustedSurfaceTime{
&kTrustSafetySentimentSurveyV2, "trusted-surface-time",
base::Seconds(5)};
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enable uploading of a zip archive of system logs instead of individual files.
BASE_FEATURE(kUploadZippedSystemLogs,
"UploadZippedSystemLogs",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kUseChromiumUpdater,
"UseChromiumUpdater",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Enables or disables user activity event logging for power management on
// Chrome OS.
BASE_FEATURE(kUserActivityEventLogging,
"UserActivityEventLogging",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kWebAppManifestIconUpdating,
"WebAppManifestIconUpdating",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kWebAppManifestPolicyAppIdentityUpdate,
"WebAppManifestPolicyAppIdentityUpdate",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// When this feature flag is enabled together with the LacrosAvailability
// policy, the Chrome app Kiosk session uses Lacros-chrome as the web browser to
// launch Chrome apps. When disabled, the Ash-chrome will be used instead.
BASE_FEATURE(kChromeKioskEnableLacros,
"ChromeKioskEnableLacros",
base::FEATURE_ENABLED_BY_DEFAULT);
// When this feature flag is enabled together with the LacrosAvailability
// policy, the web (PWA) Kiosk session uses Lacros-chrome as the web browser to
// launch web (PWA) applications. When disabled, the Ash-chrome will be used
// instead.
BASE_FEATURE(kWebKioskEnableLacros,
"WebKioskEnableLacros",
base::FEATURE_ENABLED_BY_DEFAULT);
// When enabled, the Ash browser only manages system web apps, and non-system
// web apps are managed by the Lacros browser. When disabled, the Ash browser
// manages all web apps.
BASE_FEATURE(kWebAppsCrosapi,
"WebAppsCrosapi",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if !BUILDFLAG(IS_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.
BASE_FEATURE(kWebRtcRemoteEventLog,
"WebRtcRemoteEventLog",
base::FEATURE_ENABLED_BY_DEFAULT);
// Compress remote-bound WebRTC event logs (if used; see kWebRtcRemoteEventLog).
BASE_FEATURE(kWebRtcRemoteEventLogGzipped,
"WebRtcRemoteEventLogGzipped",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS)
// Enables Web Share (navigator.share)
BASE_FEATURE(kWebShare, "WebShare", base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_MAC)
// Enables Web Share (navigator.share) for macOS
BASE_FEATURE(kWebShare, "WebShare", base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Whether to enable "dark mode" enhancements in Mac Mojave or Windows 10 for
// UIs implemented with web technologies.
BASE_FEATURE(kWebUIDarkMode,
"WebUIDarkMode",
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \
BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) ||
// BUILDFLAG(IS_CHROMEOS)
);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Populates storage dimensions in UMA log if enabled. Requires diagnostics
// package in the image.
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
BASE_FEATURE(kWilcoDtc, "WilcoDtc", base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Populates the user type on device type metrics in UMA log if enabled.
BASE_FEATURE(kUserTypeByDeviceTypeMetricsProvider,
"UserTypeByDeviceTypeMetricsProvider",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN)
// Enables the accelerated default browser flow for Windows 10.
BASE_FEATURE(kWin10AcceleratedDefaultBrowserFlow,
"Win10AcceleratedDefaultBrowserFlow",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_WIN)
// Enables writing basic system profile to the persistent histograms files
// earlier.
BASE_FEATURE(kWriteBasicSystemProfileToPersistentHistogramsFile,
"WriteBasicSystemProfileToPersistentHistogramsFile",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
bool IsParentAccessCodeForOnlineLoginEnabled() {
return base::FeatureList::IsEnabled(kParentAccessCodeForOnlineLogin);
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
// Enables omnibox trigger prerendering.
BASE_FEATURE(kOmniboxTriggerForPrerender2,
"OmniboxTriggerForPrerender2",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT);
#else
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kSupportSearchSuggestionForPrerender2,
"SupportSearchSuggestionForPrerender2",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<SearchSuggestionPrerenderImplementationType>::Option
search_suggestion_implementation_types[] = {
{SearchSuggestionPrerenderImplementationType::kUsePrefetch,
"use_prefetch"},
{SearchSuggestionPrerenderImplementationType::kIgnorePrefetch,
"ignore_prefetch"}};
const base::FeatureParam<SearchSuggestionPrerenderImplementationType>
kSearchSuggestionPrerenderImplementationTypeParam{
&kSupportSearchSuggestionForPrerender2, "implementation_type",
SearchSuggestionPrerenderImplementationType::kIgnorePrefetch,
&search_suggestion_implementation_types};
// Enables omnibox trigger no state prefetch. Only one of
// kOmniboxTriggerForPrerender2 or kOmniboxTriggerForNoStatePrefetch can be
// enabled in the experiment.
// TODO(crbug.com/1267731): Remove this flag once the experiments are completed.
BASE_FEATURE(kOmniboxTriggerForNoStatePrefetch,
"OmniboxTriggerForNoStatePrefetch",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// A feature to indicate whether setting wake time >24hours away is supported by
// the platform's RTC.
// TODO(b/187516317): Remove when the issue is resolved in FW.
BASE_FEATURE(kSupportsRtcWakeOver24Hours,
"SupportsRtcWakeOver24Hours",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
BASE_FEATURE(kUseWebAppDBInsteadOfExternalPrefs,
"UseWebAppDBInsteadOfExternalPrefs",
base::FEATURE_ENABLED_BY_DEFAULT);
} // namespace features