blob: cb7343853d3bdb32ead10222793be5317dada097 [file] [log] [blame]
// Copyright 2018 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 "ash/constants/ash_features.h"
#include "ash/constants/ash_switches.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/system/sys_info.h"
#include "build/build_config.h"
namespace ash {
namespace features {
namespace {
// Controls whether Instant Tethering supports hosts which use the background
// advertisement model.
const base::Feature kInstantTetheringBackgroundAdvertisementSupport{
"InstantTetheringBackgroundAdvertisementSupport",
base::FEATURE_ENABLED_BY_DEFAULT};
} // namespace
// Enables redesign of account management flows.
// https://crbug.com/1132472
const base::Feature kAccountManagementFlowsV2{"AccountManagementFlowsV2",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the UI to support Ambient EQ if the device supports it.
// See https://crbug.com/1021193 for more details.
const base::Feature kAllowAmbientEQ{"AllowAmbientEQ",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether devices are updated before reboot after the first update.
const base::Feature kAllowRepeatedUpdates{"AllowRepeatedUpdates",
base::FEATURE_ENABLED_BY_DEFAULT};
// Shows settings for adjusting scroll acceleration/sensitivity for
// mouse/touchpad.
const base::Feature kAllowScrollSettings{"AllowScrollSettings",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable Ambient mode feature.
const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode",
base::FEATURE_ENABLED_BY_DEFAULT};
constexpr base::FeatureParam<bool> kAmbientModeCapturedOnPixelAlbumEnabled{
&kAmbientModeFeature, "CapturedOnPixelAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeCapturedOnPixelPhotosEnabled{
&kAmbientModeFeature, "CapturedOnPixelPhotosEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeCulturalInstitutePhotosEnabled{
&kAmbientModeFeature, "CulturalInstitutePhotosEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeDefaultFeedEnabled{
&kAmbientModeFeature, "DefaultFeedEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeEarthAndSpaceAlbumEnabled{
&kAmbientModeFeature, "EarthAndSpaceAlbumEnabled", true};
constexpr base::FeatureParam<bool> kAmbientModeFeaturedPhotoAlbumEnabled{
&kAmbientModeFeature, "FeaturedPhotoAlbumEnabled", true};
constexpr base::FeatureParam<bool> kAmbientModeFeaturedPhotosEnabled{
&kAmbientModeFeature, "FeaturedPhotosEnabled", true};
constexpr base::FeatureParam<bool> kAmbientModeFineArtAlbumEnabled{
&kAmbientModeFeature, "FineArtAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeGeoPhotosEnabled{
&kAmbientModeFeature, "GeoPhotosEnabled", true};
constexpr base::FeatureParam<bool> kAmbientModePersonalPhotosEnabled{
&kAmbientModeFeature, "PersonalPhotosEnabled", true};
constexpr base::FeatureParam<bool> kAmbientModeRssPhotosEnabled{
&kAmbientModeFeature, "RssPhotosEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeStreetArtAlbumEnabled{
&kAmbientModeFeature, "StreetArtAlbumEnabled", false};
// Controls whether to allow Dev channel to use Prod server feature.
const base::Feature kAmbientModeDevUseProdFeature{
"ChromeOSAmbientModeDevChannelUseProdServer",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable Ambient mode album selection with photo previews.
const base::Feature kAmbientModePhotoPreviewFeature{
"ChromeOSAmbientModePhotoPreview", base::FEATURE_ENABLED_BY_DEFAULT};
// See https://crbug.com/1204551
const base::Feature kAppListBubble{"AppListBubble",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable ARC ADB sideloading support.
const base::Feature kArcAdbSideloadingFeature{
"ArcAdbSideloading", base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable support for ARC ADB sideloading for managed
// accounts and/or devices.
const base::Feature kArcManagedAdbSideloadingSupport{
"ArcManagedAdbSideloadingSupport", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables resize lock for ARC++ and puts restrictions on window resizing.
// TODO(takise): Remove this after the feature is fully launched.
const base::Feature kArcResizeLock{"ArcResizeLock",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable assistive autocorrect.
const base::Feature kAssistAutoCorrect{"AssistAutoCorrect",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable enhanced assistive emoji suggestions.
const base::Feature kAssistEmojiEnhanced{"AssistEmojiEnhanced",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable assistive multi word suggestions.
const base::Feature kAssistMultiWord{"AssistMultiWord",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable assistive multi word suggestions on an expanded
// list of surfaces.
const base::Feature kAssistMultiWordExpanded{"AssistMultiWordExpanded",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable assistive personal information.
const base::Feature kAssistPersonalInfo{"AssistPersonalInfo",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to suggest addresses in assistive personal information. This
// is only effective when AssistPersonalInfo flag is enabled.
const base::Feature kAssistPersonalInfoAddress{
"AssistPersonalInfoAddress", base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to suggest emails in assistive personal information. This is
// only effective when AssistPersonalInfo flag is enabled.
const base::Feature kAssistPersonalInfoEmail{"AssistPersonalInfoEmail",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to suggest names in assistive personal information. This is
// only effective when AssistPersonalInfo flag is enabled.
const base::Feature kAssistPersonalInfoName{"AssistPersonalInfoName",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to suggest phone numbers in assistive personal information.
// This is only effective when AssistPersonalInfo flag is enabled.
const base::Feature kAssistPersonalInfoPhoneNumber{
"AssistPersonalInfoPhoneNumber", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Auto Night Light feature which sets the default schedule type to
// sunset-to-sunrise until the user changes it to something else. This feature
// is not exposed to the end user, and is enabled only via cros_config for
// certain devices.
const base::Feature kAutoNightLight{"AutoNightLight",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables auto screen-brightness adjustment when ambient light
// changes.
const base::Feature kAutoScreenBrightness{"AutoScreenBrightness",
base::FEATURE_ENABLED_BY_DEFAULT};
// Displays the avatar toolbar button and the profile menu.
// https://crbug.com/1041472
extern const base::Feature kAvatarToolbarButton{
"AvatarToolbarButton", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the persistent desks bar at the top of the screen in clamshell mode
// when there are more than one desk.
const base::Feature kBentoBar{"BentoBar", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the ability to use advertisement monitoring.
// Advertisement monitoring allows applications to register low energy scanners
// that filter low energy advertisements in a power-efficient manner.
const base::Feature kBluetoothAdvertisementMonitoring{
"BluetoothAdvertisementMonitoring", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables more aggressive filtering out of Bluetooth devices with
// "appearances" that are less likely to be pairable or useful.
const base::Feature kBluetoothAggressiveAppearanceFilter{
"BluetoothAggressiveAppearanceFilter", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables the usage of fixed Bluetooth A2DP packet size to improve
// audio performance in noisy environment.
const base::Feature kBluetoothFixA2dpPacketSize{
"BluetoothFixA2dpPacketSize", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables more filtering out of phones from the Bluetooth UI.
const base::Feature kBluetoothPhoneFilter{"BluetoothPhoneFilter",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables the Chrome OS Bluetooth Revamp, which updates Bluetooth
// system UI and related infrastructure. See https://crbug.com/1010321.
const base::Feature kBluetoothRevamp{"BluetoothRevamp",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables Bluetooth WBS microphone be selected as default
// audio input option.
const base::Feature kBluetoothWbsDogfood{"BluetoothWbsDogfood",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable experimental disk management changes for Borealis.
const base::Feature kBorealisDiskManagement{"BorealisDiskManagement",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable TermsOfServiceURL policy for managed users.
// https://crbug.com/1221342
const base::Feature kManagedTermsOfService{"ManagedTermsOfService",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable display of button on Arc provisioning failure dialog for network
// tests.
const base::Feature kButtonARCNetworkDiagnostics{
"ButtonARCNetworkDiagnostics", base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether the camera privacy switch toasts and notification should be
// displayed.
const base::Feature kCameraPrivacySwitchNotifications{
"CameraPrivacySwitchNotifications", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Capture Mode feature which is an enhanced screenshot and screen
// capture user experience.
const base::Feature kCaptureMode{"CaptureMode",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, will use the CDM in the Chrome OS daemon rather than loading the
// CDM using the library CDM interface.
const base::Feature kCdmFactoryDaemon{"CdmFactoryDaemon",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, allow per-network roaming configuration when cellular roaming is
// not disabled for the device through enterprise policy.
const base::Feature kCellularAllowPerNetworkRoaming{
"CellularAllowPerNetworkRoaming", base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, the value of |kCellularUseAttachApn| should have no effect and
// and the LTE attach APN configuration will not be sent to the modem. This
// flag exists because the |kCellularUseAttachApn| flag can be enabled
// by command-line arguments via board overlays which takes precedence over
// server-side field trial config, which may be needed to turn off the Attach
// APN feature.
const base::Feature kCellularForbidAttachApn{"CellularForbidAttachApn",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, send the LTE attach APN configuration to the modem.
const base::Feature kCellularUseAttachApn{"CellularUseAttachApn",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, use external euicc in Cellular Setup and Settings.
const base::Feature kCellularUseExternalEuicc{
"CellularUseExternalEuicc", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables pasting a few recently copied items in a menu when pressing search +
// v.
const base::Feature kClipboardHistory{"ClipboardHistory",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, a blue new nudge will show on the context menu option for
// clipboard history.
const base::Feature kClipboardHistoryContextMenuNudge{
"ClipboardHistoryContextMenuNudge", base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, the clipboard nudge shown prefs will be reset at the start of
// each new user session.
const base::Feature kClipboardHistoryNudgeSessionReset{
"ClipboardHistoryNudgeSessionReset", base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, the clipboard history shortcut will appear in screenshot
// notifications.
const base::Feature kClipboardHistoryScreenshotNudge{
"ClipboardHistoryScreenshotNudge", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables compositing-based throttling to throttle appropriate frame sinks that
// do not need to be refreshed at high fps.
const base::Feature kCompositingBasedThrottling{
"CompositingBasedThrottling", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables contextual nudges for gesture education.
const base::Feature kContextualNudges{"ContextualNudges",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables Crosh System Web App. When enabled, crosh (Chrome OS
// Shell) will run as a tabbed System Web App rather than a normal browser tab.
const base::Feature kCroshSWA{"CroshSWA", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables Crostini Disk Resizing.
const base::Feature kCrostiniDiskResizing{"CrostiniDiskResizing",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables Crostini GPU support.
const base::Feature kCrostiniGpuSupport{"CrostiniGpuSupport",
base::FEATURE_DISABLED_BY_DEFAULT};
// Force enable recreating the LXD DB at LXD launch.
const base::Feature kCrostiniResetLxdDb{"CrostiniResetLxdDb",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables Crostini using Buster container images.
const base::Feature kCrostiniUseBusterImage{"CrostiniUseBusterImage",
base::FEATURE_ENABLED_BY_DEFAULT};
// Use DLC instead of component updater for managing the Termina image if set
// (and component updater instead of DLC if not).
const base::Feature kCrostiniUseDlc{"CrostiniUseDlc",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables using Cryptauth's GetDevicesActivityStatus API.
const base::Feature kCryptAuthV2DeviceActivityStatus{
"CryptAuthV2DeviceActivityStatus", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables use of the connectivity status from Cryptauth's
// GetDevicesActivityStatus API to sort devices.
const base::Feature kCryptAuthV2DeviceActivityStatusUseConnectivity{
"CryptAuthV2DeviceActivityStatusUseConnectivity",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the CryptAuth v2 DeviceSync flow. Regardless of this
// flag, v1 DeviceSync will continue to operate until it is disabled via the
// feature flag kDisableCryptAuthV1DeviceSync.
const base::Feature kCryptAuthV2DeviceSync{"CryptAuthV2DeviceSync",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables the CryptAuth v2 Enrollment flow.
const base::Feature kCryptAuthV2Enrollment{"CryptAuthV2Enrollment",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables dark/light mode feature.
const base::Feature kDarkLightMode{"DarkLightMode",
base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kDemoModeSWA{"DemoModeSWA",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the Diagnostics app.
const base::Feature kDiagnosticsApp{"DiagnosticsApp",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, the navigation panel will be shown in the diagnostics app.
const base::Feature kDiagnosticsAppNavigation{
"DiagnosticsAppNavigation", base::FEATURE_DISABLED_BY_DEFAULT};
// Disables the CryptAuth v1 DeviceSync flow. Note: During the first phase
// of the v2 DeviceSync rollout, v1 and v2 DeviceSync run in parallel. This flag
// is needed to disable the v1 service during the second phase of the rollout.
// kCryptAuthV2DeviceSync should be enabled before this flag is flipped.
const base::Feature kDisableCryptAuthV1DeviceSync{
"DisableCryptAuthV1DeviceSync", base::FEATURE_ENABLED_BY_DEFAULT};
// Disable idle sockets closing on memory pressure for NetworkContexts that
// belong to Profiles. It only applies to Profiles because the goal is to
// improve perceived performance of web browsing within the Chrome OS user
// session by avoiding re-estabshing TLS connections that require client
// certificates.
const base::Feature kDisableIdleSocketsCloseOnMemoryPressure{
"disable_idle_sockets_close_on_memory_pressure",
base::FEATURE_DISABLED_BY_DEFAULT};
// Disables "Office Editing for Docs, Sheets & Slides" component app so handlers
// won't be registered, making it possible to install another version for
// testing.
const base::Feature kDisableOfficeEditingComponentApp{
"DisableOfficeEditingComponentApp", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables indicators to hint where displays are connected.
const base::Feature kDisplayAlignAssist{"DisplayAlignAssist",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables identification overlays on each display.
const base::Feature kDisplayIdentification{"DisplayIdentification",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the docked (a.k.a. picture-in-picture) magnifier.
// TODO(afakhry): Remove this after the feature is fully launched.
// https://crbug.com/709824.
const base::Feature kDockedMagnifier{"DockedMagnifier",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables dragging an unpinned open app to pinned app side to pin.
const base::Feature kDragUnpinnedAppToPin{"DragUnpinnedAppToPin",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, DriveFS will be used for Drive sync.
const base::Feature kDriveFs{"DriveFS", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables duplex native messaging between DriveFS and extensions.
const base::Feature kDriveFsBidirectionalNativeMessaging{
"DriveFsBidirectionalNativeMessaging", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables DriveFS' experimental local files mirroring functionality.
const base::Feature kDriveFsMirroring{"DriveFsMirroring",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the System Web App (SWA) version of Eche.
const base::Feature kEcheSWA{"EcheSWA", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the naive resize for the Eche window.
const base::Feature kEcheSWAResizing{"EcheSWAResizing",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, emoji suggestion will be shown when user type "space".
const base::Feature kEmojiSuggestAddition{"EmojiSuggestAddition",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables background blur for the app list, shelf, unified system tray,
// autoclick menu, etc. Also enables the AppsGridView mask layer, slower devices
// may have choppier app list animations while in this mode. crbug.com/765292.
const base::Feature kEnableBackgroundBlur{"EnableBackgroundBlur",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the DNS proxy service providing support split and secure DNS
// for Chrome OS.
const base::Feature kEnableDnsProxy{"EnableDnsProxy",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables setting the device hostname.
const base::Feature kEnableHostnameSetting{"EnableHostnameSetting",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, the input device cards will be shown in the diagnostics app.
const base::Feature kEnableInputInDiagnosticsApp{
"EnableInputInDiagnosticsApp", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables noise cancellation UI toggle.
const base::Feature kEnableInputNoiseCancellationUi{
"EnableInputNoiseCancellationUi", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables LocalSearchService to be initialized.
const base::Feature kEnableLocalSearchService{"EnableLocalSearchService",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, the networking cards will be shown in the diagnostics app.
const base::Feature kEnableNetworkingInDiagnosticsApp{
"EnableNetworkingInDiagnosticsApp", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables OAuth support when printing via the IPP protocol.
const base::Feature kEnableOAuthIpp{"EnableOAuthIpp",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the OOBE ChromeVox hint dialog and announcement feature.
const base::Feature kEnableOobeChromeVoxHint{"EnableOobeChromeVoxHint",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables toggling Pciguard settings through Settings UI.
const base::Feature kEnablePciguardUi{"EnablePciguardUi",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables showing notification after the password change for SAML users.
const base::Feature kEnableSamlNotificationOnPasswordChangeSuccess{
"EnableSamlNotificationOnPasswordChangeSuccess",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables SAML re-authentication on the lock screen once the sign-in time
// limit expires.
const base::Feature kEnableSamlReauthenticationOnLockscreen{
"EnableSamlReauthenticationOnLockScreen", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables Device End Of Lifetime warning notifications.
const base::Feature kEolWarningNotifications{"EolWarningNotifications",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable bubble showing when an application gains any UI lock.
const base::Feature kExoLockNotification{"ExoLockNotification",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable use of ordinal (unaccelerated) motion by Exo clients.
const base::Feature kExoOrdinalMotion{"ExoOrdinalMotion",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable pointer lock for Crostini windows.
const base::Feature kExoPointerLock{"ExoPointerLock",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables policy that controls feature to allow Family Link accounts on school
// owned devices.
const base::Feature kFamilyLinkOnSchoolDevice{"FamilyLinkOnSchoolDevice",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Fast Pair feature.
const base::Feature kFastPair{"FastPair", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables mounting various archive formats in Files App.
// https://crbug.com/1216245
const base::Feature kFilesArchivemount{"FilesArchivemount",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable the updated banner framework.
// https://crbug.com/1228128
const base::Feature kFilesBannerFramework{"FilesBannerFramework",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the System Web App (SWA) version of file manager.
const base::Feature kFilesSWA{"FilesSWA", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables partitioning of removable disks in file manager.
const base::Feature kFilesSinglePartitionFormat{
"FilesSinglePartitionFormat", base::FEATURE_DISABLED_BY_DEFAULT};
// Enable files app trash.
const base::Feature kFilesTrash{"FilesTrash",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables new ZIP archive handling in Files App.
// https://crbug.com/912236
const base::Feature kFilesZipMount{"FilesZipMount",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables new ZIP creation system in Files App.
// https://crbug.com/1200187
const base::Feature kFilesZipPack{"FilesZipPack",
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kFilesZipUnpack{"FilesZipUnpack",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables filters in Files app Recents view.
const base::Feature kFiltersInRecents{"FiltersInRecents",
base::FEATURE_DISABLED_BY_DEFAULT};
// When enabled, there will be an alert bubble showing up when the device
// returns from low brightness (e.g., sleep, closed cover) without a lock screen
// and the active window is in fullscreen.
// TODO(https://crbug.com/1107185): Remove this after the feature is launched.
const base::Feature kFullscreenAlertBubble{"EnableFullscreenBubble",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables handle of `closeView` message from Gaia. The message is
// supposed to end the flow.
const base::Feature kGaiaCloseViewMessage{"GaiaCloseViewMessage",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Gaia reauth endpoint with deleted user customization page.
const base::Feature kGaiaReauthEndpoint{"GaiaReauthEndpoint",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls gamepad vibration in Exo.
const base::Feature kGamepadVibration{"ExoGamepadVibration",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable a D-Bus service for accessing gesture properties.
const base::Feature kGesturePropertiesDBusService{
"GesturePropertiesDBusService", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables editing with handwriting gestures within the virtual keyboard.
const base::Feature kHandwritingGestureEditing{
"HandwritingGestureEditing", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the Background Page in the help app.
const base::Feature kHelpAppBackgroundPage{"HelpAppBackgroundPage",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Discover Tab in the help app.
const base::Feature kHelpAppDiscoverTab{"HelpAppDiscoverTab",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables the Help App Discover tab notifications on non-stable
// Chrome OS channels. Used for testing.
const base::Feature kHelpAppDiscoverTabNotificationAllChannels{
"HelpAppDiscoverTabNotificationAllChannels",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable showing search results from the help app in the launcher.
const base::Feature kHelpAppLauncherSearch{"HelpAppLauncherSearch",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable the search service integration in the Help app.
const base::Feature kHelpAppSearchServiceIntegration{
"HelpAppSearchServiceIntegration", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables a warning about connecting to hidden WiFi networks.
// https://crbug.com/903908
const base::Feature kHiddenNetworkWarning{"HiddenNetworkWarning",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables hiding of ARC media notifications. If this is enabled, all ARC
// notifications that are of the media type will not be shown. This
// is because they will be replaced by native media session notifications.
// TODO(beccahughes): Remove after launch. (https://crbug.com/897836)
const base::Feature kHideArcMediaNotifications{
"HideArcMediaNotifications", base::FEATURE_ENABLED_BY_DEFAULT};
// When enabled, shelf navigation controls and the overview tray item will be
// removed from the shelf in tablet mode (unless otherwise specified by user
// preferences, or policy).
const base::Feature kHideShelfControlsInTabletMode{
"HideShelfControlsInTabletMode", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables ARC integration with the productivity feature that aims to reduce
// context switching by enabling users to collect content and transfer or access
// it later.
const base::Feature kHoldingSpaceArcIntegration{
"HoldingSpaceArcIntegration", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables in-progress downloads integration with the productivity feature that
// aims to reduce context switching by enabling users to collect content and
// transfer or access it later.
const base::Feature kHoldingSpaceInProgressDownloadsIntegration{
"HoldingSpaceInProgressDownloadsIntegration",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable IME decoder via Mojo connection on Chrome OS.
const base::Feature kImeMojoDecoder{"ImeMojoDecoder",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable MOZC IME to use protobuf as interactive message format.
const base::Feature kImeMozcProto{"ImeMozcProto",
base::FEATURE_ENABLED_BY_DEFAULT};
// If enabled, options page for each input method will be opened in ChromeOS
// settings. Otherwise it will be opened in a new web page in Chrome browser.
const base::Feature kImeOptionsInSettings{"ImeOptionsInSettings",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable system emoji picker.
const base::Feature kImeSystemEmojiPicker{"SystemEmojiPicker",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable system emoji picker falling back to clipboard.
const base::Feature kImeSystemEmojiPickerClipboard{
"SystemEmojiPickerClipboard", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables Instant Tethering on Chrome OS.
const base::Feature kInstantTethering{"InstantTethering",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables using arrow keys for display arrangement in display settings page.
const base::Feature kKeyboardBasedDisplayArrangementInSettings{
"KeyboardBasedDisplayArrangementInSettings",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables to use lacros-chrome as a primary web browser on Chrome OS.
// This works only when LacrosSupport below is enabled.
// NOTE: Use crosapi::browser_util::IsLacrosPrimary() instead of checking
// the feature directly. Similar to LacrosSupport, this may not be allowed
// depending on user types and/or policies.
const base::Feature kLacrosPrimary{"LacrosPrimary",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables "Linux and Chrome OS" support. Allows a Linux version of Chrome
// ("lacros-chrome") to run as a Wayland client with this instance of Chrome
// ("ash-chrome") acting as the Wayland server and window manager.
// NOTE: Use crosapi::browser_util::IsLacrosEnabled() instead of checking the
// feature directly. Lacros is not allowed for certain user types and can be
// disabled by policy. These restrictions will be lifted when Lacros development
// is complete.
const base::Feature kLacrosSupport{"LacrosSupport",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the second language settings update.
const base::Feature kLanguageSettingsUpdate2{"LanguageSettingsUpdate2",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables sorting app icons shown on the launcher.
const base::Feature kLauncherAppSort{"LauncherAppSort",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables new flow for license packaged devices with enterprise license.
const base::Feature kLicensePackagedOobeFlow{"LicensePackagedOobeFlow",
base::FEATURE_DISABLED_BY_DEFAULT};
// Limits the windows listed in Alt-Tab to the ones in the currently active
// desk.
const base::Feature kLimitAltTabToActiveDesk{"LimitAltTabToActiveDesk",
base::FEATURE_DISABLED_BY_DEFAULT};
// Supports the feature to hide sensitive content in notifications on the lock
// screen. This option is effective when |kLockScreenNotification| is enabled.
const base::Feature kLockScreenHideSensitiveNotificationsSupport{
"LockScreenHideSensitiveNotificationsSupport",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables inline reply on notifications on the lock screen.
// This option is effective when |kLockScreenNotification| is enabled.
const base::Feature kLockScreenInlineReply{"LockScreenInlineReply",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables notifications on the lock screen.
const base::Feature kLockScreenNotifications{"LockScreenNotifications",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables lock screen media controls UI and use of media keys on the lock
// screen.
const base::Feature kLockScreenMediaControls{"LockScreenMediaControls",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the redesigned managed device info UI in the system tray.
const base::Feature kManagedDeviceUIRedesign{"ManagedDeviceUIRedesign",
base::FEATURE_ENABLED_BY_DEFAULT};
// Whether image annotation is enabled in the ChromeOS media app.
const base::Feature kMediaAppAnnotation{"MediaAppAnnotation",
base::FEATURE_ENABLED_BY_DEFAULT};
// Whether EXIF metadata is displayed in the ChromeOS media app.
const base::Feature kMediaAppDisplayExif{"MediaAppDisplayExif",
base::FEATURE_ENABLED_BY_DEFAULT};
// Whether PDF files are opened by default in the ChromeOS media app.
const base::Feature kMediaAppHandlesPdf{"MediaAppHandlesPdf",
base::FEATURE_DISABLED_BY_DEFAULT};
// Whether to show the new Video controls UI in the ChromeOS media app.
const base::Feature kMediaAppVideoControls{"MediaAppVideoControls",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables notification of when a microphone-using app is launched while the
// microphone is muted.
const base::Feature kMicMuteNotifications{"MicMuteNotifications",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable the requirement of a minimum chrome version on the
// device through the policy DeviceMinimumVersion. If the requirement is
// not met and the warning time in the policy has expired, the user is
// restricted from using the session.
const base::Feature kMinimumChromeVersion{"MinimumChromeVersion",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables support for AADC regulation requirement and avoid nudging users in
// minor mode(e.g. under the age of 18) to provide unnecessary consents to share
// personal data.
const base::Feature kMinorModeRestriction{"MinorModeRestriction",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the use of Mojo by Chrome-process code to communicate with Power
// Manager. In order to use mojo, this feature must be turned on and a callsite
// must use PowerManagerMojoClient::Get().
const base::Feature kMojoDBusRelay{"MojoDBusRelay",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables support for multilingual assistive typing on Chrome OS.
const base::Feature kMultilingualTyping{"MultilingualTyping",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables Nearby Connections to specificy KeepAlive interval and timeout while
// also making the Nearby Connections WebRTC defaults longer.
const base::Feature kNearbyKeepAliveFix{"NearbyKeepAliveFix",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether new Lockscreen reauth layout is shown or not.
const base::Feature kNewLockScreenReauthLayout{
"NewLockScreenReauthLayout", base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether new OOBE layout is shown or not.
const base::Feature kNewOobeLayout{"NewOobeLayout",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Night Light feature.
const base::Feature kNightLight{"NightLight", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables support for specific enabled web apps to be treated as note-taking
// apps on Chrome OS.
const base::Feature kNoteTakingForEnabledWebApps{
"NoteTakingForEnabledWebApps", base::FEATURE_ENABLED_BY_DEFAULT};
// Enabled notification expansion animation.
const base::Feature kNotificationExpansionAnimation{
"NotificationExpansionAnimation", base::FEATURE_DISABLED_BY_DEFAULT};
// Shorten notification timeouts to 6 seconds.
const base::Feature kNotificationExperimentalShortTimeouts{
"NotificationExperimentalShortTimeouts", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables notification scroll bar in UnifiedSystemTray.
const base::Feature kNotificationScrollBar{"NotificationScrollBar",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables notifications to be shown within context menus.
const base::Feature kNotificationsInContextMenu{
"NotificationsInContextMenu", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables new notifications UI and grouped notifications.
const base::Feature kNotificationsRefresh{"NotificationsRefresh",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable on-device grammar check service.
const base::Feature kOnDeviceGrammarCheck{"OnDeviceGrammarCheck",
base::FEATURE_DISABLED_BY_DEFAULT};
// Whether the device supports on-device speech recognition.
const base::Feature kOnDeviceSpeechRecognition{
"OnDeviceSpeechRecognition", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the feedback tool new UX on Chrome OS.
// This tool under development will be rolled out via Finch.
// Enabling this flag will use the new feedback tool instead of the current
// tool on CrOS.
const base::Feature kOsFeedback{"OsFeedback",
base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, a new App Notifications subpage will appear in CrOS Apps section.
const base::Feature kOsSettingsAppNotificationsPage{
"OsSettingsAppNotificationsPage", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables a unique URL for each path in CrOS settings.
// This allows deep linking to individual settings, i.e. in settings search.
const base::Feature kOsSettingsDeepLinking{"OsSettingsDeepLinking",
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kOverviewButton{"OverviewButton",
base::FEATURE_DISABLED_BY_DEFAULT};
// Limits the items on the shelf to the ones associated with windows the
// currently active desk.
const base::Feature kPerDeskShelf{"PerDeskShelf",
base::FEATURE_DISABLED_BY_DEFAULT};
// Allows tablet mode split screen to resize by moving windows instead of
// resizing. This reduces jank on low end devices.
const base::Feature kPerformantSplitViewResizing{
"PerformantSplitViewResizing", base::FEATURE_DISABLED_BY_DEFAULT};
// Provides a UI for users to view information about their Android phone
// and perform phone-side actions within Chrome OS.
const base::Feature kPhoneHub{"PhoneHub", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Camera Roll feature in Phone Hub, which allows users to access
// recent photos and videos taken on a connected Android device
const base::Feature kPhoneHubCameraRoll{"PhoneHubCameraRoll",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the Recent Apps feature in Phone Hub, which allows users to relaunch
// the streamed app.
const base::Feature kPhoneHubRecentApps{"PhoneHubRecentApps",
base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kPinSetupForManagedUsers{"PinSetupForManagedUsers",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables rounded corners for the Picture-in-picture window.
const base::Feature kPipRoundedCorners{"PipRoundedCorners",
base::FEATURE_ENABLED_BY_DEFAULT};
// Hides shelf in immersive mode and allows esc hold to exit.
const base::Feature kPluginVmFullscreen{"PluginVmFullscreen",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables the preference of using constant frame rate for camera
// when streaming.
const base::Feature kPreferConstantFrameRate{"PreferConstantFrameRate",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable projector.
const base::Feature kProjector{"Projector", base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable projector in status tray.
const base::Feature kProjectorFeaturePod{"ProjectorFeaturePod",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable quick answers.
const base::Feature kQuickAnswers{"QuickAnswers",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether dogfood version of quick answers.
const base::Feature kQuickAnswersDogfood{"QuickAnswersDogfood",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to trigger quick answers on editable text selection.
const base::Feature kQuickAnswersOnEditableText{
"QuickAnswersOnEditableText", base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable quick answers text annotator.
const base::Feature kQuickAnswersTextAnnotator{
"QuickAnswersTextAnnotator", base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable quick answers translation.
const base::Feature kQuickAnswersTranslation{"QuickAnswersTranslation",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable quick answers translation using Cloud API.
const base::Feature kQuickAnswersTranslationCloudAPI{
"QuickAnswersTranslationCloudAPI", base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable quick answers V2 features.
const base::Feature kQuickAnswersV2{"QuickAnswersV2",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables fingerprint quick unlock.
const base::Feature kQuickUnlockFingerprint{"QuickUnlockFingerprint",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether the PIN auto submit feature is enabled.
const base::Feature kQuickUnlockPinAutosubmit{"QuickUnlockPinAutosubmit",
base::FEATURE_ENABLED_BY_DEFAULT};
// TODO(crbug.com/1104164) - Remove this once most
// users have their preferences backfilled.
// Controls whether the PIN auto submit backfill operation should be performed.
const base::Feature kQuickUnlockPinAutosubmitBackfill{
"QuickUnlockPinAutosubmitBackfill", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables suppression of Displays notifications other than resolution change.
const base::Feature kReduceDisplayNotifications{
"ReduceDisplayNotifications", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables Release Notes notifications on Chrome OS.
const base::Feature kReleaseNotesNotification{"ReleaseNotesNotification",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables Release Notes notifications on non-stable Chrome OS
// channels. Used for testing.
const base::Feature kReleaseNotesNotificationAllChannels{
"ReleaseNotesNotificationAllChannels", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables Release Notes suggestion chip on Chrome OS.
const base::Feature kReleaseNotesSuggestionChip{
"ReleaseNotesSuggestionChip", base::FEATURE_ENABLED_BY_DEFAULT};
// When enabled, the overivew and desk reverse scrolling behaviors are changed
// and if the user performs the old gestures, a notification or toast will show
// up.
// TODO(https://crbug.com/1107183): Remove this after the feature is launched.
const base::Feature kReverseScrollGestures{"EnableReverseScrollGestures",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the system tray to show more information in larger screen.
const base::Feature kScalableStatusArea{"ScalableStatusArea",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables showing a link to the Media app in the Scan app.
const base::Feature kScanAppMediaLink{"ScanAppMediaLink",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables flatbed multi-page scanning.
const base::Feature kScanAppMultiPageScan{"ScanAppMultiPageScan",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables use of Searchable PDF file type in the Scan app.
const base::Feature kScanAppSearchablePdf{"ScanAppSearchablePdf",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables sticky settings in the Scan app.
const base::Feature kScanAppStickySettings{"ScanAppStickySettings",
base::FEATURE_ENABLED_BY_DEFAULT};
// Overrides semantic colors in Chrome OS for easier debugging.
const base::Feature kSemanticColorsDebugOverride{
"SemanticColorDebugOverride", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables displaying separate network icons for different networks types.
// https://crbug.com/902409
const base::Feature kSeparateNetworkIcons{"SeparateNetworkIcons",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables long kill timeout for session manager daemon. When
// enabled, session manager daemon waits for a longer time (e.g. 12s) for chrome
// to exit before sending SIGABRT. Otherwise, it uses the default time out
// (currently 3s).
const base::Feature kSessionManagerLongKillTimeout{
"SessionManagerLongKillTimeout", base::FEATURE_DISABLED_BY_DEFAULT};
// If enabled, the session manager daemon will abort the browser if its
// liveness checker detects a hang, i.e. the browser fails to acknowledge and
// respond sufficiently to periodic pings. IMPORTANT NOTE: the feature name
// here must match exactly the name of the feature in the open-source ChromeOS
// file session_manager_service.cc.
const base::Feature kSessionManagerLivenessCheck{
"SessionManagerLivenessCheck", base::FEATURE_ENABLED_BY_DEFAULT};
// Removes notifier settings from quick settings view.
const base::Feature kSettingsAppNotificationSettings{
"SettingsAppNotificationSettings", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables the new shimless rma flow.
const base::Feature kShimlessRMAFlow{"ShimlessRMAFlow",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables a toggle to enable Bluetooth debug logs.
const base::Feature kShowBluetoothDebugLogToggle{
"ShowBluetoothDebugLogToggle", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the system tray to show date in sufficiently large screen.
const base::Feature kShowDateInTrayButton{"ShowDateInTrayButton",
base::FEATURE_DISABLED_BY_DEFAULT};
// Shows the Play Store icon in Demo Mode.
const base::Feature kShowPlayInDemoMode{"ShowPlayInDemoMode",
base::FEATURE_ENABLED_BY_DEFAULT};
// Uses experimental component version for smart dim.
const base::Feature kSmartDimExperimentalComponent{
"SmartDimExperimentalComponent", base::FEATURE_DISABLED_BY_DEFAULT};
// Replaces Smart Lock UI in lock screen password box with new UI similar to
// fingerprint auth. Adds Smart Lock to "Lock screen and sign-in" section of
// settings.
const base::Feature kSmartLockUIRevamp{"SmartLockUIRevamp",
base::FEATURE_DISABLED_BY_DEFAULT};
// Deprecated. Use kSyncSettingsCategorization and kSyncConsentOptional instead.
// TODO(https://crbug.com/1227417): Remove this after completing the migration.
const base::Feature kSplitSettingsSync{"SplitSettingsSync",
base::FEATURE_DISABLED_BY_DEFAULT};
// This feature:
// - Creates a new "Sync your settings" section in Chrome OS settings
// - Moves app, wallpaper and Wi-Fi sync to OS settings
// - Provides a separate toggle for OS preferences, distinct from browser
// preferences
// - Makes the OS ModelTypes run in sync transport mode, controlled by a single
// pref for the entire OS sync feature
const base::Feature kSyncSettingsCategorization{
"SyncSettingsCategorization", base::FEATURE_DISABLED_BY_DEFAULT};
// Updates the OOBE sync consent screen
//
// NOTE: The feature will be rolled out via a client-side Finch trial, so the
// actual state will vary. TODO(https://crbug.com/1227417): Migrate config in
// chrome/browser/ash/sync/split_settings_sync_field_trial.cc
const base::Feature kSyncConsentOptional{"SyncConsentOptional",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables battery indicator for styluses in the palette tray
const base::Feature kStylusBatteryStatus{"StylusBatteryStatus",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables or disables using the system input engine for physical typing in
// languages based on latin script.
const base::Feature kSystemLatinPhysicalTyping{
"SystemLatinPhysicalTyping", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables the Chrome OS system-proxy daemon, only for system services. This
// means that system services like tlsdate, update engine etc. can opt to be
// authenticated to a remote HTTP web proxy via system-proxy.
const base::Feature kSystemProxyForSystemServices{
"SystemProxyForSystemServices", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the UI to show tab cluster info.
const base::Feature kTabClusterUI{"TabClusterUI",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables Chrome OS Telemetry Extension.
const base::Feature kTelemetryExtension{"TelemetryExtension",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables trilinear filtering.
const base::Feature kTrilinearFiltering{"TrilinearFiltering",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the updated cellular activation UI; see go/cros-cellular-design.
const base::Feature kUpdatedCellularActivationUi{
"UpdatedCellularActivationUi", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables using the BluetoothSystem Mojo interface for Bluetooth operations.
const base::Feature kUseBluetoothSystemInAsh{"UseBluetoothSystemInAsh",
base::FEATURE_DISABLED_BY_DEFAULT};
// Uses the same browser sync consent dialog as Windows/Mac/Linux. Allows the
// user to fully opt-out of browser sync, including marking the IdentityManager
// primary account as unconsented. Requires SplitSettingsSync.
// NOTE: Call UseBrowserSyncConsent() to test the flag, see implementation.
const base::Feature kUseBrowserSyncConsent{"UseBrowserSyncConsent",
base::FEATURE_DISABLED_BY_DEFAULT};
// Use the staging URL as part of the "Messages" feature under "Connected
// Devices" settings.
const base::Feature kUseMessagesStagingUrl{"UseMessagesStagingUrl",
base::FEATURE_DISABLED_BY_DEFAULT};
// Remap search+click to right click instead of the legacy alt+click on
// Chrome OS.
const base::Feature kUseSearchClickForRightClick{
"UseSearchClickForRightClick", base::FEATURE_DISABLED_BY_DEFAULT};
// Use the Stork Production SM-DS address to fetch pending ESim profiles
const base::Feature kUseStorkSmdsServerAddress{
"UseStorkSmdsServerAddress", base::FEATURE_DISABLED_BY_DEFAULT};
// Use the staging server as part of the Wallpaper App to verify
// additions/removals of wallpapers.
const base::Feature kUseWallpaperStagingUrl{"UseWallpaperStagingUrl",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables or disables user activity prediction for power management on
// Chrome OS.
// Defined here rather than in //chrome alongside other related features so that
// PowerPolicyController can check it.
const base::Feature kUserActivityPrediction{"UserActivityPrediction",
base::FEATURE_ENABLED_BY_DEFAULT};
// Enables vertical split screen for clamshell mode. This allows users to snap
// top and bottom when the screen is in portrait orientation, while snap left
// and right when the screen is in landscape orientation.
const base::Feature kVerticalSplitScreen{"VerticalSplitScreen",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable using the floating virtual keyboard as the default option
// on Chrome OS.
const base::Feature kVirtualKeyboardFloatingDefault{
"VirtualKeyboardFloatingDefault", base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable bordered key for virtual keyboard on Chrome OS.
const base::Feature kVirtualKeyboardBorderedKey{
"VirtualKeyboardBorderedKey", base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable multipaste feature for virtual keyboard on Chrome OS.
const base::Feature kVirtualKeyboardMultipaste{
"VirtualKeyboardMultipaste", base::FEATURE_ENABLED_BY_DEFAULT};
// Enable or disable showing multipaste suggestions in virtual keyboard on
// Chrome OS.
const base::Feature kVirtualKeyboardMultipasteSuggestion{
"VirtualKeyboardMultipasteSuggestion", base::FEATURE_DISABLED_BY_DEFAULT};
// Enable or disable the chrome://vm page
const base::Feature kVmStatusPage{"VmStatusPage",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to allow enabling wake on WiFi features in shill.
const base::Feature kWakeOnWifiAllowed{"WakeOnWifiAllowed",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enable new wallpaper experience in WebUI inside system settings.
const base::Feature kWallpaperWebUI{"WallpaperWebUI",
base::FEATURE_DISABLED_BY_DEFAULT};
// Generates WebAPKs representing installed PWAs and installs them inside ARC.
const base::Feature kWebApkGenerator{"WebApkGenerator",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables special handling of Chrome tab drags from a WebUI tab strip.
// These will be treated similarly to a window drag, showing split view
// indicators in tablet mode, etc. The functionality is behind a flag right now
// since it is under development.
const base::Feature kWebUITabStripTabDragIntegration{
"WebUITabStripTabDragIntegration", base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether to enable the syncing of deletes of Wi-Fi configurations.
// This only controls sending delete events to the Chrome Sync server.
const base::Feature kWifiSyncAllowDeletes{"WifiSyncAllowDeletes",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to enable syncing of Wi-Fi configurations between
// ChromeOS and a connected Android phone.
const base::Feature kWifiSyncAndroid{"WifiSyncAndroid",
base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether to apply incoming Wi-Fi configuration delete events from
// the Chrome Sync server.
const base::Feature kWifiSyncApplyDeletes{"WifiSyncApplyDeletes",
base::FEATURE_DISABLED_BY_DEFAULT};
// Change window creation to be based on cursor position when there are multiple
// displays.
const base::Feature kWindowsFollowCursor{"WindowsFollowCursor",
base::FEATURE_DISABLED_BY_DEFAULT};
////////////////////////////////////////////////////////////////////////////////
bool AreContextualNudgesEnabled() {
if (!IsHideShelfControlsInTabletModeEnabled())
return false;
return base::FeatureList::IsEnabled(kContextualNudges);
}
bool DoWindowsFollowCursor() {
return base::FeatureList::IsEnabled(kWindowsFollowCursor);
}
bool IsAccountManagementFlowsV2Enabled() {
return base::FeatureList::IsEnabled(kAccountManagementFlowsV2);
}
bool IsAllowAmbientEQEnabled() {
return base::FeatureList::IsEnabled(kAllowAmbientEQ);
}
bool IsAltTabLimitedToActiveDesk() {
return base::FeatureList::IsEnabled(kLimitAltTabToActiveDesk);
}
bool IsAmbientModeDevUseProdEnabled() {
return base::FeatureList::IsEnabled(kAmbientModeDevUseProdFeature);
}
bool IsAmbientModeEnabled() {
return base::FeatureList::IsEnabled(kAmbientModeFeature);
}
bool IsAmbientModePhotoPreviewEnabled() {
return base::FeatureList::IsEnabled(kAmbientModePhotoPreviewFeature);
}
bool IsAppListBubbleEnabled() {
return base::FeatureList::IsEnabled(kAppListBubble);
}
bool IsAppNotificationsPageEnabled() {
return base::FeatureList::IsEnabled(kOsSettingsAppNotificationsPage);
}
bool IsArcResizeLockEnabled() {
return base::FeatureList::IsEnabled(kArcResizeLock);
}
bool IsAssistiveMultiWordEnabled() {
return base::FeatureList::IsEnabled(kImeMojoDecoder) &&
base::FeatureList::IsEnabled(kSystemLatinPhysicalTyping) &&
base::FeatureList::IsEnabled(kAssistMultiWord);
}
bool IsAutoNightLightEnabled() {
return base::FeatureList::IsEnabled(kAutoNightLight);
}
bool IsBackgroundBlurEnabled() {
bool enabled_by_feature_flag =
base::FeatureList::IsEnabled(kEnableBackgroundBlur);
#if defined(ARCH_CPU_ARM_FAMILY)
// Enable background blur on Mali when GPU rasterization is enabled.
// See crbug.com/996858 for the condition.
return enabled_by_feature_flag &&
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableTabletMode);
#else
return enabled_by_feature_flag;
#endif
}
bool IsBentoBarEnabled() {
return base::FeatureList::IsEnabled(kBentoBar);
}
bool IsBluetoothAdvertisementMonitoringEnabled() {
return base::FeatureList::IsEnabled(kBluetoothAdvertisementMonitoring);
}
bool IsBluetoothRevampEnabled() {
return base::FeatureList::IsEnabled(kBluetoothRevamp);
}
bool IsCaptureModeEnabled() {
return base::FeatureList::IsEnabled(kCaptureMode);
}
bool IsCellularActivationUiEnabled() {
return base::FeatureList::IsEnabled(kUpdatedCellularActivationUi);
}
bool IsClipboardHistoryContextMenuNudgeEnabled() {
return base::FeatureList::IsEnabled(kClipboardHistoryContextMenuNudge);
}
bool IsClipboardHistoryEnabled() {
return base::FeatureList::IsEnabled(kClipboardHistory);
}
bool IsClipboardHistoryNudgeSessionResetEnabled() {
return base::FeatureList::IsEnabled(kClipboardHistoryNudgeSessionReset);
}
bool IsClipboardHistoryScreenshotNudgeEnabled() {
return base::FeatureList::IsEnabled(kClipboardHistoryScreenshotNudge);
}
bool IsCompositingBasedThrottlingEnabled() {
return base::FeatureList::IsEnabled(kCompositingBasedThrottling);
}
bool IsDarkLightModeEnabled() {
return base::FeatureList::IsEnabled(kDarkLightMode);
}
bool IsDeepLinkingEnabled() {
return base::FeatureList::IsEnabled(kOsSettingsDeepLinking);
}
bool IsDemoModeSWAEnabled() {
return base::FeatureList::IsEnabled(kDemoModeSWA);
}
bool IsDiagnosticsAppEnabled() {
return base::FeatureList::IsEnabled(kDiagnosticsApp);
}
bool IsDisplayAlignmentAssistanceEnabled() {
return base::FeatureList::IsEnabled(kDisplayAlignAssist);
}
bool IsDisplayIdentificationEnabled() {
return base::FeatureList::IsEnabled(kDisplayIdentification);
}
bool IsDragUnpinnedAppToPinEnabled() {
return base::FeatureList::IsEnabled(kDragUnpinnedAppToPin);
}
bool IsEcheSWAEnabled() {
return base::FeatureList::IsEnabled(kEcheSWA);
}
bool IsEcheSWAResizingEnabled() {
return base::FeatureList::IsEnabled(kEcheSWAResizing);
}
bool IsFamilyLinkOnSchoolDeviceEnabled() {
return base::FeatureList::IsEnabled(kFamilyLinkOnSchoolDevice);
}
bool IsFastPairEnabled() {
return base::FeatureList::IsEnabled(kFastPair);
}
bool IsFileManagerSwaEnabled() {
return base::FeatureList::IsEnabled(kFilesSWA);
}
bool IsFullscreenAlertBubbleEnabled() {
return base::FeatureList::IsEnabled(kFullscreenAlertBubble);
}
bool IsGaiaCloseViewMessageEnabled() {
return base::FeatureList::IsEnabled(kGaiaCloseViewMessage);
}
bool IsGaiaReauthEndpointEnabled() {
return base::FeatureList::IsEnabled(kGaiaReauthEndpoint);
}
bool IsHideArcMediaNotificationsEnabled() {
return base::FeatureList::IsEnabled(kHideArcMediaNotifications);
}
bool IsHideShelfControlsInTabletModeEnabled() {
return base::FeatureList::IsEnabled(kHideShelfControlsInTabletMode);
}
bool IsHoldingSpaceArcIntegrationEnabled() {
return base::FeatureList::IsEnabled(kHoldingSpaceArcIntegration);
}
bool IsHoldingSpaceInProgressDownloadsIntegrationEnabled() {
return base::FeatureList::IsEnabled(
kHoldingSpaceInProgressDownloadsIntegration);
}
bool IsHostnameSettingEnabled() {
return base::FeatureList::IsEnabled(kEnableHostnameSetting);
}
bool IsInputInDiagnosticsAppEnabled() {
return base::FeatureList::IsEnabled(kEnableInputInDiagnosticsApp);
}
bool IsInputNoiseCancellationUiEnabled() {
return base::FeatureList::IsEnabled(kEnableInputNoiseCancellationUi);
}
bool IsInstantTetheringBackgroundAdvertisingSupported() {
return base::FeatureList::IsEnabled(
kInstantTetheringBackgroundAdvertisementSupport);
}
bool IsKeyboardBasedDisplayArrangementInSettingsEnabled() {
return base::FeatureList::IsEnabled(
kKeyboardBasedDisplayArrangementInSettings);
}
bool IsLauncherAppSortEnabled() {
return base::FeatureList::IsEnabled(kLauncherAppSort);
}
bool IsLicensePackagedOobeFlowEnabled() {
return base::FeatureList::IsEnabled(kLicensePackagedOobeFlow);
}
bool IsLockScreenHideSensitiveNotificationsSupported() {
return base::FeatureList::IsEnabled(
kLockScreenHideSensitiveNotificationsSupport);
}
bool IsLockScreenInlineReplyEnabled() {
return base::FeatureList::IsEnabled(kLockScreenInlineReply);
}
bool IsLockScreenNotificationsEnabled() {
return base::FeatureList::IsEnabled(kLockScreenNotifications);
}
bool IsManagedDeviceUIRedesignEnabled() {
return base::FeatureList::IsEnabled(kManagedDeviceUIRedesign);
}
bool IsManagedTermsOfServiceEnabled() {
return base::FeatureList::IsEnabled(kManagedTermsOfService);
}
bool IsMicMuteNotificationsEnabled() {
return base::FeatureList::IsEnabled(kMicMuteNotifications);
}
bool IsMinimumChromeVersionEnabled() {
return base::FeatureList::IsEnabled(kMinimumChromeVersion);
}
bool IsMinorModeRestrictionEnabled() {
return base::FeatureList::IsEnabled(kMinorModeRestriction);
}
bool IsNearbyKeepAliveFixEnabled() {
return base::FeatureList::IsEnabled(kNearbyKeepAliveFix);
}
bool IsNetworkingInDiagnosticsAppEnabled() {
return base::FeatureList::IsEnabled(kEnableNetworkingInDiagnosticsApp) &&
base::FeatureList::IsEnabled(kDiagnosticsAppNavigation);
}
bool IsOAuthIppEnabled() {
return base::FeatureList::IsEnabled(kEnableOAuthIpp);
}
bool IsNewLockScreenReauthLayoutEnabled() {
return base::FeatureList::IsEnabled(kNewLockScreenReauthLayout);
}
bool IsNewOobeLayoutEnabled() {
return base::FeatureList::IsEnabled(kNewOobeLayout);
}
bool IsNotificationExpansionAnimationEnabled() {
return base::FeatureList::IsEnabled(kNotificationExpansionAnimation);
}
bool IsNotificationExperimentalShortTimeoutsEnabled() {
return base::FeatureList::IsEnabled(kNotificationExperimentalShortTimeouts);
}
bool IsNotificationScrollBarEnabled() {
return base::FeatureList::IsEnabled(kNotificationScrollBar);
}
bool IsNotificationsInContextMenuEnabled() {
return base::FeatureList::IsEnabled(kNotificationsInContextMenu);
}
bool IsNotificationsRefreshEnabled() {
return base::FeatureList::IsEnabled(kNotificationsRefresh);
}
bool IsOobeChromeVoxHintEnabled() {
return base::FeatureList::IsEnabled(kEnableOobeChromeVoxHint);
}
bool IsPciguardUiEnabled() {
return base::FeatureList::IsEnabled(kEnablePciguardUi);
}
bool IsPerDeskShelfEnabled() {
return base::FeatureList::IsEnabled(kPerDeskShelf);
}
bool IsPhoneHubCameraRollEnabled() {
return base::FeatureList::IsEnabled(kPhoneHubCameraRoll);
}
bool IsPerformantSplitViewResizingEnabled() {
return base::FeatureList::IsEnabled(kPerformantSplitViewResizing);
}
bool IsPhoneHubEnabled() {
return base::FeatureList::IsEnabled(kPhoneHub);
}
bool IsPhoneHubRecentAppsEnabled() {
return base::FeatureList::IsEnabled(kPhoneHubRecentApps);
}
bool IsPinAutosubmitBackfillFeatureEnabled() {
return base::FeatureList::IsEnabled(kQuickUnlockPinAutosubmitBackfill);
}
bool IsPinAutosubmitFeatureEnabled() {
return base::FeatureList::IsEnabled(kQuickUnlockPinAutosubmit);
}
bool IsPinSetupForManagedUsersEnabled() {
return base::FeatureList::IsEnabled(kPinSetupForManagedUsers);
}
bool IsPipRoundedCornersEnabled() {
return base::FeatureList::IsEnabled(kPipRoundedCorners);
}
bool IsProjectorEnabled() {
return base::FeatureList::IsEnabled(kProjector);
}
bool IsProjectorFeaturePodEnabled() {
return IsProjectorEnabled() &&
base::FeatureList::IsEnabled(kProjectorFeaturePod);
}
bool IsQuickAnswersDogfood() {
return base::FeatureList::IsEnabled(kQuickAnswersDogfood);
}
bool IsQuickAnswersEnabled() {
return base::FeatureList::IsEnabled(kQuickAnswers);
}
bool IsQuickAnswersOnEditableTextEnabled() {
return base::FeatureList::IsEnabled(kQuickAnswersOnEditableText);
}
bool IsQuickAnswersTranslationCloudAPIEnabled() {
return base::FeatureList::IsEnabled(kQuickAnswersTranslationCloudAPI);
}
bool IsQuickAnswersTranslationEnabled() {
return base::FeatureList::IsEnabled(kQuickAnswersTranslation);
}
bool IsQuickAnswersV2Enabled() {
return base::FeatureList::IsEnabled(kQuickAnswersV2);
}
bool IsReduceDisplayNotificationsEnabled() {
return base::FeatureList::IsEnabled(kReduceDisplayNotifications);
}
bool IsReverseScrollGesturesEnabled() {
return base::FeatureList::IsEnabled(kReverseScrollGestures);
}
bool IsSamlNotificationOnPasswordChangeSuccessEnabled() {
return base::FeatureList::IsEnabled(
kEnableSamlNotificationOnPasswordChangeSuccess);
}
bool IsSamlReauthenticationOnLockscreenEnabled() {
return base::FeatureList::IsEnabled(kEnableSamlReauthenticationOnLockscreen);
}
bool IsScalableStatusAreaEnabled() {
return base::FeatureList::IsEnabled(kScalableStatusArea);
}
bool IsSeparateNetworkIconsEnabled() {
return base::FeatureList::IsEnabled(kSeparateNetworkIcons);
}
bool IsSettingsAppNotificationSettingsEnabled() {
return base::FeatureList::IsEnabled(kSettingsAppNotificationSettings);
}
bool IsShimlessRMAFlowEnabled() {
return base::FeatureList::IsEnabled(kShimlessRMAFlow);
}
bool IsShowDateInTrayButtonEnabled() {
return IsScalableStatusAreaEnabled() &&
base::FeatureList::IsEnabled(kShowDateInTrayButton);
}
bool IsSplitSettingsSyncEnabled() {
return base::FeatureList::IsEnabled(kSplitSettingsSync);
}
bool IsSyncSettingsCategorizationEnabled() {
return base::FeatureList::IsEnabled(kSyncSettingsCategorization);
}
bool IsSyncConsentOptionalEnabled() {
return base::FeatureList::IsEnabled(kSyncConsentOptional);
}
bool IsStylusBatteryStatusEnabled() {
return base::FeatureList::IsEnabled(kStylusBatteryStatus);
}
bool IsSystemLatinPhysicalTypingEnabled() {
return base::FeatureList::IsEnabled(kImeMojoDecoder) &&
base::FeatureList::IsEnabled(kSystemLatinPhysicalTyping);
}
bool IsTabClusterUIEnabled() {
return base::FeatureList::IsEnabled(kTabClusterUI);
}
bool IsTrilinearFilteringEnabled() {
static bool use_trilinear_filtering =
base::FeatureList::IsEnabled(kTrilinearFiltering);
return use_trilinear_filtering;
}
bool IsUseStorkSmdsServerAddressEnabled() {
return base::FeatureList::IsEnabled(kUseStorkSmdsServerAddress);
}
bool IsVerticalSplitScreenEnabled() {
return base::FeatureList::IsEnabled(kVerticalSplitScreen);
}
bool IsWallpaperWebUIEnabled() {
return base::FeatureList::IsEnabled(kWallpaperWebUI);
}
bool IsWebUITabStripTabDragIntegrationEnabled() {
return base::FeatureList::IsEnabled(kWebUITabStripTabDragIntegration);
}
bool IsWifiSyncAndroidEnabled() {
return base::FeatureList::IsEnabled(kWifiSyncAndroid);
}
bool ShouldShowPlayStoreInDemoMode() {
return base::FeatureList::IsEnabled(kShowPlayInDemoMode);
}
bool ShouldUseAttachApn() {
// See comment on |kCellularForbidAttachApn| for details.
return !base::FeatureList::IsEnabled(kCellularForbidAttachApn) &&
base::FeatureList::IsEnabled(kCellularUseAttachApn);
}
bool ShouldUseBrowserSyncConsent() {
// UseBrowserSyncConsent requires SplitSettingsSync.
return base::FeatureList::IsEnabled(kSplitSettingsSync) &&
base::FeatureList::IsEnabled(kUseBrowserSyncConsent);
}
bool ShouldUseQuickAnswersTextAnnotator() {
// The text classifier is only available on ChromeOS.
return base::FeatureList::IsEnabled(kQuickAnswersTextAnnotator) &&
base::SysInfo::IsRunningOnChromeOS();
}
bool ShouldUseV1DeviceSync() {
return !ShouldUseV2DeviceSync() ||
!base::FeatureList::IsEnabled(kDisableCryptAuthV1DeviceSync);
}
bool ShouldUseV2DeviceSync() {
return base::FeatureList::IsEnabled(kCryptAuthV2Enrollment) &&
base::FeatureList::IsEnabled(kCryptAuthV2DeviceSync);
}
namespace {
// The boolean flag indicating if "WebUITabStrip" feature is enabled in Chrome.
bool g_webui_tab_strip_enabled = false;
} // namespace
void SetWebUITabStripEnabled(bool enabled) {
g_webui_tab_strip_enabled = enabled;
}
bool IsWebUITabStripEnabled() {
return g_webui_tab_strip_enabled;
}
} // namespace features
} // namespace ash