| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/public/common/content_features.h" |
| |
| #include <string> |
| |
| #include "base/feature_list.h" |
| #include "base/time/time.h" |
| #include "build/android_buildflags.h" |
| #include "build/build_config.h" |
| #include "build/config/chromebox_for_meetings/buildflags.h" |
| #include "content/common/buildflags.h" |
| #include "content/public/common/btm_utils.h" |
| #include "content/public/common/buildflags.h" |
| |
| namespace features { |
| |
| // All features in alphabetical order. |
| |
| // Kill switch to guard additional security checks performed by the browser |
| // process on opaque origins, such as when verifying source origins for |
| // postMessage. See https://crbug.com/40109437. |
| BASE_FEATURE(kAdditionalOpaqueOriginEnforcements, |
| "AdditionalOpaqueOriginEnforcements", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Fallback to next named service slot if launching a privileged service process |
| // hangs. In practice, this means if GPU launch hanges, then retry it once. |
| BASE_FEATURE(kAndroidFallbackToNextSlot, |
| "AndroidFallbackToNextSlot", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Warm up a spare renderer after each navigation on Android. |
| BASE_FEATURE(kAndroidWarmUpSpareRendererWithTimeout, |
| "AndroidWarmUpSpareRendererWithTimeout", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Create the spare renderer in DidStopLoading rather than in |
| // SpareRenderProcessHostManager::PrepareForFutureRequests. |
| const base::FeatureParam<std::string> kAndroidSpareRendererCreationTiming{ |
| &kAndroidWarmUpSpareRendererWithTimeout, "spare_renderer_creation_timing", |
| kAndroidSpareRendererCreationAfterLoading}; |
| |
| // The delay for creating the Android spare renderer in |
| // SpareRenderProcessHostManager::PrepareForFutureRequests. |
| // The parameter will not be effective if |
| // `spare_renderer_creation_after_stop_loading` is enabled. |
| // Since the function is called during loading, a delay is introduced to avoid |
| // interfering with critical loading procedures. |
| const base::FeatureParam<int> kAndroidSpareRendererCreationDelayMs{ |
| &kAndroidWarmUpSpareRendererWithTimeout, "spare_renderer_creation_delay_ms", |
| 2000}; |
| |
| // The timeout for the created spare renderer after each navigation on Android. |
| // The created renderer will be destroyed after the timeout. |
| // A negative value indicates that no timeout will be set for the spare |
| // renderer. |
| const base::FeatureParam<int> kAndroidSpareRendererTimeoutSeconds{ |
| &kAndroidWarmUpSpareRendererWithTimeout, "spare_renderer_timeout_seconds", |
| 60}; |
| |
| // The lower memory limit to create a spare renderer after each navigation on |
| // Android. |
| const base::FeatureParam<int> kAndroidSpareRendererMemoryThreshold{ |
| &kAndroidWarmUpSpareRendererWithTimeout, "spare_renderer_memory_threshold", |
| 1077}; |
| |
| // Kill the spare renderer when the browser goes to the background to free |
| // resources. |
| const base::FeatureParam<bool> kAndroidSpareRendererKillWhenBackgrounded{ |
| &kAndroidWarmUpSpareRendererWithTimeout, "kill_when_backgrounded", false}; |
| |
| // Launches the audio service on the browser startup. |
| BASE_FEATURE(kAudioServiceLaunchOnStartup, |
| "AudioServiceLaunchOnStartup", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Runs the audio service in a separate process. |
| BASE_FEATURE(kAudioServiceOutOfProcess, |
| "AudioServiceOutOfProcess", |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Enables the audio-service sandbox. This feature has an effect only when the |
| // kAudioServiceOutOfProcess feature is enabled. |
| BASE_FEATURE(kAudioServiceSandbox, |
| "AudioServiceSandbox", |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_FUCHSIA) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Kill switch for Background Fetch. |
| BASE_FEATURE(kBackgroundFetch, |
| "BackgroundFetch", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable using the BackForwardCache. |
| BASE_FEATURE(kBackForwardCache, |
| "BackForwardCache", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Set a time limit for the page to enter the cache. Disabling this prevents |
| // flakes during testing. |
| BASE_FEATURE(kBackForwardCacheEntryTimeout, |
| "BackForwardCacheEntryTimeout", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // BackForwardCache is disabled on low memory devices. The threshold is defined |
| // via a field trial param: "memory_threshold_for_back_forward_cache_in_mb" |
| // It is compared against base::SysInfo::AmountOfPhysicalMemoryMB(). |
| |
| // "BackForwardCacheMemoryControls" is checked before "BackForwardCache". It |
| // means the low memory devices will activate neither the control group nor the |
| // experimental group of the BackForwardCache field trial. |
| |
| // BackForwardCacheMemoryControls is enabled only on Android to disable |
| // BackForwardCache for lower memory devices due to memory limitations. |
| BASE_FEATURE(kBackForwardCacheMemoryControls, |
| "BackForwardCacheMemoryControls", |
| |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // If enabled, makes battery saver request heavy align wake ups. |
| BASE_FEATURE(kBatterySaverModeAlignWakeUps, |
| "BatterySaverModeAlignWakeUps", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When this feature is enabled, private network requests initiated from |
| // non-secure contexts in the `public` address space are blocked. |
| // |
| // See also: |
| // - https://wicg.github.io/private-network-access/#integration-fetch |
| // - kBlockInsecurePrivateNetworkRequestsFromPrivate |
| // - kBlockInsecurePrivateNetworkRequestsFromUnknown |
| BASE_FEATURE(kBlockInsecurePrivateNetworkRequests, |
| "BlockInsecurePrivateNetworkRequests", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When this feature is enabled, requests to localhost initiated from non-secure |
| // contexts in the `private` IP address space are blocked. |
| // |
| // See also: |
| // - https://wicg.github.io/private-network-access/#integration-fetch |
| // - kBlockInsecurePrivateNetworkRequests |
| BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate, |
| "BlockInsecurePrivateNetworkRequestsFromPrivate", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables use of the PrivateNetworkAccessNonSecureContextsAllowed deprecation |
| // trial. This is a necessary yet insufficient condition: documents that wish to |
| // make use of the trial must additionally serve a valid origin trial token. |
| BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsDeprecationTrial, |
| "BlockInsecurePrivateNetworkRequestsDeprecationTrial", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Broker file operations on disk cache in the Network Service. |
| // This is no-op if the network service is hosted in the browser process. |
| BASE_FEATURE(kBrokerFileOperationsOnDiskCacheInNetworkService, |
| "BrokerFileOperationsOnDiskCacheInNetworkService", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Allows pages with cache-control:no-store to enter the back/forward cache. |
| // Feature params can specify whether pages with cache-control:no-store can be |
| // restored if cookies change / if HTTPOnly cookies change. |
| // TODO(crbug.com/40189625): Remove this feature and clean up. |
| BASE_FEATURE(kCacheControlNoStoreEnterBackForwardCache, |
| "CacheControlNoStoreEnterBackForwardCache", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // This killswitch is distinct from the OT. |
| // It allows us to remotely disable the feature, and get it to stop working even |
| // on sites that are in possession of a valid token. When that happens, all API |
| // calls gated by the killswitch will fail graceully. |
| BASE_FEATURE(kCapturedSurfaceControlKillswitch, |
| "CapturedSurfaceControlKillswitch", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Clear the window.name property for the top-level cross-site navigations that |
| // swap BrowsingContextGroups(BrowsingInstances). |
| BASE_FEATURE(kClearCrossSiteCrossBrowsingContextGroupWindowName, |
| "ClearCrossSiteCrossBrowsingContextGroupWindowName", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| BASE_FEATURE(kCompositeBGColorAnimation, |
| "CompositeBGColorAnimation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Gate access to cookie deprecation API which allows developers to opt in |
| // server side testing without cookies. |
| // (See https://developer.chrome.com/en/docs/privacy-sandbox/chrome-testing) |
| BASE_FEATURE(kCookieDeprecationFacilitatedTesting, |
| "CookieDeprecationFacilitatedTesting", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Set whether to enable cookie deprecation API for off-the-record profiles. |
| const base::FeatureParam<bool> |
| kCookieDeprecationFacilitatedTestingEnableOTRProfiles{ |
| &kCookieDeprecationFacilitatedTesting, "enable_otr_profiles", false}; |
| |
| // The experiment label for the cookie deprecation (Mode A/B) study. |
| const base::FeatureParam<std::string> kCookieDeprecationLabel{ |
| &kCookieDeprecationFacilitatedTesting, kCookieDeprecationLabelName, ""}; |
| // Set whether Ads APIs should be disabled for third-party cookie deprecation. |
| const base::FeatureParam<bool> kCookieDeprecationTestingDisableAdsAPIs{ |
| &features::kCookieDeprecationFacilitatedTesting, |
| /*name=*/kCookieDeprecationTestingDisableAdsAPIsName, |
| /*default_value=*/false}; |
| |
| const char kCookieDeprecationLabelName[] = "label"; |
| |
| const char kCookieDeprecationTestingDisableAdsAPIsName[] = "disable_ads_apis"; |
| |
| // Adiitional FeatureParams for CookieDeprecationFacilitatedTesting are defined |
| // in chrome/browser/tpcd/experiment/tpcd_experiment_features.cc. |
| |
| // Enables deferring the creation of the speculative RFH when the navigation |
| // starts. The creation of a speculative RFH consumes about 2ms and is blocking |
| // the network request. With this feature the creation will be deferred until |
| // the browser initializes the network request. The speculative RFH will be |
| // created while the network service is sending the request in parallel. |
| BASE_FEATURE(kDeferSpeculativeRFHCreation, |
| "DeferSpeculativeRFHCreation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| // When enabled, the browser will create the render process if necessary even |
| // if the speculative render frame host creation is deferred by feature |
| // DeferSpeculativeRFHCreation. |
| const base::FeatureParam<bool> kWarmupSpareProcessCreationWhenDeferRFH{ |
| &kDeferSpeculativeRFHCreation, "warmup_spare_process", false}; |
| // When enabled, the browser will not try to create a speculative RFH after |
| // loading starts for BFCache restore and prerender activation. The |
| // `OnResponseStarted` function will be called immediately and the RFH will be |
| // created there. |
| const base::FeatureParam<bool> kCreateSpeculativeRFHFilterRestore{ |
| &kDeferSpeculativeRFHCreation, "create_speculative_rfh_filter_restore", |
| false}; |
| // When enabled, the creation of the speculative RFH will be delayed for |
| // a short time after the loading starts. The loading start functions are |
| // critical for performance. We try not to interfere with it. |
| // Zero or negative value will disable the delay and create the speculative |
| // RFH instantly. |
| const base::FeatureParam<int> kCreateSpeculativeRFHDelayMs{ |
| &kDeferSpeculativeRFHCreation, "create_speculative_rfh_delay_ms", 0}; |
| |
| // When a device bound session |
| // (https://github.com/w3c/webappsec-dbsc/blob/main/README.md) is |
| // terminated, evict pages with cache-control:no-store from the |
| // BFCache. Note that if `kCacheControlNoStoreEnterBackForwardCache` is |
| // disabled, no such pages will be in the cache. |
| BASE_FEATURE(kDeviceBoundSessionTerminationEvictBackForwardCache, |
| "DeviceBoundSessionTerminationEvictBackForwardCache", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When enabled, the DevTools Privacy UI is displayed. |
| BASE_FEATURE(kDevToolsPrivacyUI, |
| "DevToolsPrivacyUI", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Controls whether the Digital Goods API is enabled. |
| // https://github.com/WICG/digital-goods/ |
| BASE_FEATURE(kDigitalGoodsApi, |
| "DigitalGoodsApi", |
| #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Enables the BTM (Bounce Tracking Mitigation) feature. |
| // On by default to allow for collecting metrics. All potentially dangerous |
| // behavior (database persistence, storage deletion) will be gated by params. |
| BASE_FEATURE(kBtm, "DIPS", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Flag used to control the TTL for user interactions (separately from the |
| // |kBtm| feature flag). |
| BASE_FEATURE(kBtmTtl, "DIPSTtl", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Set the time period that Chrome will wait for before clearing storage for a |
| // site after it performs some action (e.g. bouncing the user or using storage) |
| // without user interaction. |
| const base::FeatureParam<base::TimeDelta> kBtmGracePeriod{&kBtm, "grace_period", |
| base::Hours(1)}; |
| |
| // Set the cadence at which Chrome will attempt to clear incidental state |
| // repeatedly. |
| const base::FeatureParam<base::TimeDelta> kBtmTimerDelay{&kBtm, "timer_delay", |
| base::Hours(1)}; |
| |
| // Sets how long BTM maintains interactions and Web Authn Assertions (WAA) for |
| // a site. |
| // |
| // If a site in the BTM database has an interaction or WAA within the grace |
| // period a BTM-triggering action, then that action and all ensuing actions are |
| // protected from BTM clearing until the interaction and WAA "expire" as set |
| // by this param. |
| // NOTE: Updating this param name (to reflect WAA) is deemed unnecessary as far |
| // as readability is concerned. |
| const base::FeatureParam<base::TimeDelta> kBtmInteractionTtl{ |
| &kBtmTtl, "interaction_ttl", base::Days(45)}; |
| |
| constexpr base::FeatureParam<content::BtmTriggeringAction>::Option |
| kBtmTriggeringActionOptions[] = { |
| {content::BtmTriggeringAction::kNone, "none"}, |
| {content::BtmTriggeringAction::kStorage, "storage"}, |
| {content::BtmTriggeringAction::kBounce, "bounce"}, |
| {content::BtmTriggeringAction::kStatefulBounce, "stateful_bounce"}}; |
| |
| // Sets the actions which will trigger BTM clearing for a site. The default is |
| // to set to |kBounce|, but can be overridden by Finch experiment groups, |
| // command-line flags, or chrome flags. |
| const base::FeatureParam<content::BtmTriggeringAction> kBtmTriggeringAction{ |
| &kBtm, "triggering_action", content::BtmTriggeringAction::kBounce, |
| &kBtmTriggeringActionOptions}; |
| |
| // Denotes the length of a time interval within which any client-side redirect |
| // is viewed as a bounce (provided all other criteria are equally met). The |
| // interval starts every time a page finishes a navigation (a.k.a. a commit is |
| // registered). |
| const base::FeatureParam<base::TimeDelta> kBtmClientBounceDetectionTimeout{ |
| &kBtm, "client_bounce_detection_timeout", base::Seconds(10)}; |
| |
| // Enables Bounce Tracking Mitigations for Dual Use sites. |
| BASE_FEATURE(kBtmDualUse, "BtmDualUse", base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables HW decode acceleration for WebRTC. |
| BASE_FEATURE(kWebRtcHWDecoding, |
| "webrtc-hw-decoding", |
| // TODO: b/336314537 Re enable HW Decoding once the GPU Hang is resolved |
| #if BUILDFLAG(PLATFORM_CFM) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| ); |
| // Enables HW encode acceleration for WebRTC. |
| BASE_FEATURE(kWebRtcHWEncoding, |
| "webrtc-hw-encoding", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables a discard operation on WebContents to free associated resources. |
| // Eliminates the need to destroy the WebContents object to free its resources. |
| BASE_FEATURE(kWebContentsDiscard, |
| "WebContentsDiscard", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enable drawing under System Bars within DisplayCutout. |
| BASE_FEATURE(kDrawCutoutEdgeToEdge, |
| "DrawCutoutEdgeToEdge", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable establishing the GPU channel early in renderer startup. |
| BASE_FEATURE(kEarlyEstablishGpuChannel, |
| "EarlyEstablishGpuChannel", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables canvas 2d methods BeginLayer and EndLayer. |
| BASE_FEATURE(kEnableCanvas2DLayers, |
| "EnableCanvas2DLayers", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables service workers on chrome-untrusted:// urls. |
| BASE_FEATURE(kEnableServiceWorkersForChromeUntrusted, |
| "EnableServiceWorkersForChromeUntrusted", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables service workers on chrome:// urls. |
| BASE_FEATURE(kEnableServiceWorkersForChromeScheme, |
| "EnableServiceWorkersForChromeScheme", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Ensures the renderer is not dead when getting the process host for a site |
| // instance. |
| BASE_FEATURE(kEnsureExistingRendererAlive, |
| "EnsureExistingRendererAlive", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables JavaScript API to intermediate federated identity requests. |
| // Note that actual exposure of the FedCM API to web content is controlled |
| // by the flag in RuntimeEnabledFeatures on the blink side. See also |
| // the use of kSetOnlyIfOverridden in content/child/runtime_features.cc. |
| // We enable it here by default to support use in origin trials. |
| BASE_FEATURE(kFedCm, "FedCm", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables the "Use a different account" button in the FedCM account chooser to |
| // log in to another IDP account, if the IDP opts in. |
| BASE_FEATURE(kFedCmUseOtherAccount, |
| "FedCmUseOtherAccount", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Support usernames and phone numbers to identify users, instead of |
| // (or in addition to) names and emails. |
| BASE_FEATURE(kFedCmAlternativeIdentifiers, |
| "FedCmAlternativeIdentifiers", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM Authz API. |
| // Note that actual exposure of the API to web content is controlled by |
| // the flag in RuntimeEnabledFeatures on the blink side. See also the use |
| // of kSetOnlyIfOverridden in content/child/runtime_features.cc. We enable |
| // it here by default to support use in origin trials and web platform tests. |
| BASE_FEATURE(kFedCmAuthz, "FedCmAuthz", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables RPs to enhance autofill with federated accounts fetched by the FedCM |
| // API. |
| BASE_FEATURE(kFedCmAutofill, |
| "FedCmAutofill", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM ButtonMode feature. |
| // Note that actual exposure of the API to web content is controlled by |
| // the flag in RuntimeEnabledFeatures on the blink side. See also the use |
| // of kSetOnlyIfOverridden in content/child/runtime_features.cc. We enable |
| // it here by default to support use in origin trials. |
| BASE_FEATURE(kFedCmButtonMode, |
| "FedCmButtonMode", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables cooldown on ignore in FedCM API. |
| BASE_FEATURE(kFedCmCooldownOnIgnore, |
| "FedCmCooldownOnIgnore", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM Delegation API. |
| BASE_FEATURE(kFedCmDelegation, |
| "FedCmDelegation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM IdP Registration API. |
| BASE_FEATURE(kFedCmIdPRegistration, |
| "FedCmIdPregistration", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM API with metrics endpoint at the same time. |
| BASE_FEATURE(kFedCmMetricsEndpoint, |
| "FedCmMetricsEndpoint", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM API with multiple identity providers at the same |
| // time. |
| BASE_FEATURE(kFedCmMultipleIdentityProviders, |
| "FedCmMultipleIdentityProviders", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables usage of the FedCM API with the Selective Disclosure API at the same |
| // time. |
| BASE_FEATURE(kFedCmSelectiveDisclosure, |
| "FedCmSelectiveDisclosure", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables showing filtered out accounts in FedCM UI after the user attempts to |
| // login to an account. These accounts are shown greyed out. |
| BASE_FEATURE(kFedCmShowFilteredAccounts, |
| "FedCmShowFilteredAccounts", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables bypassing the well-known file enforcement. |
| BASE_FEATURE(kFedCmWithoutWellKnownEnforcement, |
| "FedCmWithoutWellKnownEnforcement", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables Lightweight FedCM Mode |
| BASE_FEATURE(kFedCmLightweightMode, |
| "FedCmLightweightMode", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables browser-side focus verification when crossing fenced boundaries. |
| BASE_FEATURE(kFencedFramesEnforceFocus, |
| "FencedFramesEnforceFocus", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // This is a kill switch for focusing the RenderWidgetHostViewAndroid on |
| // ActionDown on every touch sequence if not focused already, please see |
| // crbug.com/381820236. The root view, RWHVA, is always focused in Chrome, |
| // however this might not be true on WebView, see crbug.com/378779896 for more |
| // details. |
| #if BUILDFLAG(IS_ANDROID) |
| BASE_FEATURE(kFocusRenderWidgetHostViewAndroidOnActionDown, |
| "FocusRenderWidgetHostViewAndroidOnActionDown", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #endif |
| |
| // Whether a memory pressure signal in a renderer should be forwarded to Blink |
| // isolates. Forwarding the signal triggers a GC (critical) or starts |
| // incremental marking (moderate), see `v8::Heap::CheckMemoryPressure`. |
| BASE_FEATURE(kForwardMemoryPressureToBlinkIsolates, |
| "ForwardMemoryPressureToBlinkIsolates", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables the Digital Credential API. |
| BASE_FEATURE(kWebIdentityDigitalCredentials, |
| "WebIdentityDigitalCredentials", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables the Digital Credentials Creation API. |
| BASE_FEATURE(kWebIdentityDigitalCredentialsCreation, |
| "WebIdentityDigitalCredentialsCreation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables scrollers inside Blink to store scroll offsets in fractional |
| // floating-point numbers rather than truncating to integers. |
| BASE_FEATURE(kFractionalScrollOffsets, |
| "FractionalScrollOffsets", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Puts network quality estimate related Web APIs in the holdback mode. When the |
| // holdback is enabled the related Web APIs return network quality estimate |
| // set by the experiment (regardless of the actual quality). |
| BASE_FEATURE(kNetworkQualityEstimatorWebHoldback, |
| "NetworkQualityEstimatorWebHoldback", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Whether GuestViews (see components/guest_view/README.md) are implemented |
| // using MPArch inner pages. See https://crbug.com/40202416 |
| BASE_FEATURE(kGuestViewMPArch, |
| "GuestViewMPArch", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // See crbug.com/359623664 |
| BASE_FEATURE(kIdbPrioritizeForegroundClients, |
| "IdbPrioritizeForegroundClients", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls whether we ignore duplicate navigations or not, in favor of |
| // preserving the already ongoing navigation. |
| BASE_FEATURE(kIgnoreDuplicateNavs, |
| "IgnoreDuplicateNavs", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| BASE_FEATURE_PARAM(base::TimeDelta, |
| kDuplicateNavThreshold, |
| &kIgnoreDuplicateNavs, |
| "duplicate_nav_threshold", |
| base::Milliseconds(2000)); |
| |
| // Kill switch for the GetInstalledRelatedApps API. |
| BASE_FEATURE(kInstalledApp, "InstalledApp", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Allow Windows specific implementation for the GetInstalledRelatedApps API. |
| BASE_FEATURE(kInstalledAppProvider, |
| "InstalledAppProvider", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable support for isolated web apps. This will guard features like serving |
| // isolated web apps via the isolated-app:// scheme, and other advanced isolated |
| // app functionality. See https://github.com/reillyeon/isolated-web-apps for a |
| // general overview. |
| // Please don't use this feature flag directly to guard the IWA code. Use |
| // IsolatedWebAppsPolicy::AreIsolatedWebAppsEnabled() in the browser process or |
| // check kEnableIsolatedWebAppsInRenderer command line flag in the renderer |
| // process. |
| BASE_FEATURE(kIsolatedWebApps, |
| "IsolatedWebApps", |
| #if BUILDFLAG(IS_CHROMEOS) |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| #endif // BUILDFLAG(IS_CHROMEOS) |
| |
| // Enables a new Automatic Fullscreen content setting that lets allowlisted |
| // origins use the HTML Fullscreen API without transient activation. |
| // https://chromestatus.com/feature/6218822004768768 |
| BASE_FEATURE(kAutomaticFullscreenContentSetting, |
| "AutomaticFullscreenContentSetting", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables process isolation of fenced content (content inside fenced frames) |
| // from non-fenced content. See |
| // https://github.com/WICG/fenced-frame/blob/master/explainer/process_isolation.md |
| // for rationale and more details. |
| BASE_FEATURE(kIsolateFencedFrames, |
| "IsolateFencedFrames", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Alternative to switches::kIsolateOrigins, for turning on origin isolation. |
| // List of origins to isolate has to be specified via |
| // kIsolateOriginsFieldTrialParamName. |
| BASE_FEATURE(kIsolateOrigins, |
| "IsolateOrigins", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| const char kIsolateOriginsFieldTrialParamName[] = "OriginsList"; |
| |
| // Enable lazy initialization of the media controls. |
| BASE_FEATURE(kLazyInitializeMediaControls, |
| "LazyInitializeMediaControls", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| BASE_FEATURE(kLogJsConsoleMessages, |
| "LogJsConsoleMessages", |
| #if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_DESKTOP_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // The MBI mode controls whether or not communication over the |
| // AgentSchedulingGroup is ordered with respect to the render-process-global |
| // legacy IPC channel, as well as the granularity of AgentSchedulingGroup |
| // creation. This will break ordering guarantees between different agent |
| // scheduling groups (ordering withing a group is still preserved). |
| // DO NOT USE! The feature is not yet fully implemented. See crbug.com/1111231. |
| BASE_FEATURE(kMBIMode, |
| "MBIMode", |
| #if BUILDFLAG(MBI_MODE_PER_RENDER_PROCESS_HOST) || \ |
| BUILDFLAG(MBI_MODE_PER_SITE_INSTANCE) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| const base::FeatureParam<MBIMode>::Option mbi_mode_types[] = { |
| {MBIMode::kLegacy, "legacy"}, |
| {MBIMode::kEnabledPerRenderProcessHost, "per_render_process_host"}, |
| {MBIMode::kEnabledPerSiteInstance, "per_site_instance"}}; |
| const base::FeatureParam<MBIMode> kMBIModeParam { |
| &kMBIMode, "mode", |
| #if BUILDFLAG(MBI_MODE_PER_RENDER_PROCESS_HOST) |
| MBIMode::kEnabledPerRenderProcessHost, |
| #elif BUILDFLAG(MBI_MODE_PER_SITE_INSTANCE) |
| MBIMode::kEnabledPerSiteInstance, |
| #else |
| MBIMode::kLegacy, |
| #endif |
| &mbi_mode_types |
| }; |
| |
| // Controls the configurablity of the navigation confidence noise level. |
| // If the feature is not enabled, then the epsilon value will be 1.1. |
| BASE_FEATURE(kNavigationConfidenceEpsilon, |
| "NavigationConfidenceEpsilon", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| // The epsilon value returned if `kNavigationConfidenceNoise` is enabled. |
| const base::FeatureParam<double> kNavigationConfidenceEpsilonValue{ |
| &kNavigationConfidenceEpsilon, "navigation-confidence-epsilon-value", 1.1}; |
| |
| // When NavigationNetworkResponseQueue is enabled, the browser will schedule |
| // some tasks related to navigation network responses in a kHigh priority |
| // queue. |
| BASE_FEATURE(kNavigationNetworkResponseQueue, |
| "NavigationNetworkResponseQueue", |
| #if BUILDFLAG(IS_CHROMEOS) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // If the network service is enabled, runs it in process. |
| BASE_FEATURE(kNetworkServiceInProcess, |
| "NetworkServiceInProcess2", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Feature which holdbacks NoStatePrefetch on all surfaces. |
| BASE_FEATURE(kNoStatePrefetchHoldback, |
| "NoStatePrefetchHoldback", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls the Origin-Agent-Cluster header. Tracking bug |
| // https://crbug.com/1042415; flag removal bug (for when this is fully launched) |
| // https://crbug.com/1148057. |
| // |
| // The name is "OriginIsolationHeader" because that was the old name when the |
| // feature was under development. |
| BASE_FEATURE(kOriginIsolationHeader, |
| "OriginIsolationHeader", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // History navigation in response to horizontal overscroll (aka gesture-nav). |
| BASE_FEATURE(kOverscrollHistoryNavigation, |
| "OverscrollHistoryNavigation", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Partitioned Popins must have a Popin-Policy in their top-frame HTTP Response |
| // that permits the opener origin. This feature disables that check for purposes |
| // of testing only, this must never be enabled by default in any context. |
| // See https://explainers-by-googlers.github.io/partitioned-popins/ |
| BASE_FEATURE(kPartitionedPopinsHeaderPolicyBypass, |
| "PartitionedPopinsHeaderPolicyBypass", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables additional ChildProcessSecurityPolicy enforcements for PDF renderer |
| // processes, including blocking storage and cookie access for them. |
| // |
| // TODO(https://crbug.com/40205612): Remove this kill switch once the PDF |
| // enforcements are verified not to cause problems. |
| BASE_FEATURE(kPdfEnforcements, |
| "PdfEnforcements", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Whether web apps can run periodic tasks upon network connectivity. |
| BASE_FEATURE(kPeriodicBackgroundSync, |
| "PeriodicBackgroundSync", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Use code paths for prefetch/prerender integration. |
| // See also `kPrerender2FallbackPrefetchSpecRules`. |
| BASE_FEATURE(kPrefetchPrerenderIntegration, |
| "PrefetchPrerenderIntegration", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // If enabled, browser-initiated prefetch is allowed. |
| // Please see crbug.com/40946257 for more details. |
| BASE_FEATURE(kPrefetchBrowserInitiatedTriggers, |
| "PrefetchBrowserInitiatedTriggers", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // This was used for enabling a new limit and scheduler for prerender triggers |
| // (crbug.com/40275452). Now the new implementation is used by default and this |
| // flag is just for injecting parameters through field trials. |
| BASE_FEATURE(kPrerender2NewLimitAndScheduler, |
| "Prerender2NewLimitAndScheduler", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables exposure of ads APIs in the renderer: Attribution Reporting, |
| // FLEDGE, Topics, along with a number of other features actively in development |
| // within these APIs. |
| BASE_FEATURE(kPrivacySandboxAdsAPIsOverride, |
| "PrivacySandboxAdsAPIsOverride", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables Private Network Access checks for all types of web workers. |
| // |
| // This affects initial worker script fetches, fetches initiated by workers |
| // themselves, and service worker update fetches. |
| // |
| // The exact checks run are the same as for other document subresources, and |
| // depend on the state of other Private Network Access feature flags: |
| // |
| // - `kBlockInsecurePrivateNetworkRequests` |
| // - `kPrivateNetworkAccessSendPreflights` |
| // - `kPrivateNetworkAccessRespectPreflightResults` |
| // |
| BASE_FEATURE(kPrivateNetworkAccessForWorkers, |
| "PrivateNetworkAccessForWorkers", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables Private Network Access checks in warning mode for all types of web |
| // workers. |
| // |
| // Does nothing if `kPrivateNetworkAccessForWorkers` is disabled. |
| // |
| // If both this and `kPrivateNetworkAccessForWorkers` are enabled, then PNA |
| // preflight requests for workers are not required to succeed. If one fails, a |
| // warning is simply displayed in DevTools. |
| BASE_FEATURE(kPrivateNetworkAccessForWorkersWarningOnly, |
| "PrivateNetworkAccessForWorkersWarningOnly", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables Private Network Access checks for navigations. |
| // |
| // The exact checks run are the same as for document subresources, and depend on |
| // the state of other Private Network Access feature flags: |
| // - `kBlockInsecurePrivateNetworkRequests` |
| // - `kPrivateNetworkAccessSendPreflights` |
| // - `kPrivateNetworkAccessRespectPreflightResults` |
| BASE_FEATURE(kPrivateNetworkAccessForNavigations, |
| "PrivateNetworkAccessForNavigations", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables Private Network Access checks in warning mode for navigations. |
| // |
| // Does nothing if `kPrivateNetworkAccessForNavigations` is disabled. |
| // |
| // If both this and `kPrivateNetworkAccessForNavigations` are enabled, then PNA |
| // preflight requests for navigations are not required to succeed. If |
| // one fails, a warning is simply displayed in DevTools. |
| BASE_FEATURE(kPrivateNetworkAccessForNavigationsWarningOnly, |
| "PrivateNetworkAccessForNavigationsWarningOnly", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Requires that CORS preflight requests succeed before sending private network |
| // requests. This flag implies `kPrivateNetworkAccessSendPreflights`. |
| // See: https://wicg.github.io/private-network-access/#cors-preflight |
| BASE_FEATURE(kPrivateNetworkAccessRespectPreflightResults, |
| "PrivateNetworkAccessRespectPreflightResults", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables sending CORS preflight requests ahead of private network requests. |
| // See: https://wicg.github.io/private-network-access/#cors-preflight |
| BASE_FEATURE(kPrivateNetworkAccessSendPreflights, |
| "PrivateNetworkAccessSendPreflights", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables origin-keyed processes by default, unless origins opt out using |
| // Origin-Agent-Cluster: ?0. This feature only takes effect if the Blink feature |
| // OriginAgentClusterDefaultEnable is enabled, since origin-keyed processes |
| // require origin-agent-clusters. |
| BASE_FEATURE(kOriginKeyedProcessesByDefault, |
| "OriginKeyedProcessesByDefault", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Fires the `pushsubscriptionchange` event defined here: |
| // https://w3c.github.io/push-api/#the-pushsubscriptionchange-event |
| // for subscription refreshes, revoked permissions or subscription losses |
| BASE_FEATURE(kPushSubscriptionChangeEventOnInvalidation, |
| "PushSubscriptionChangeEventOnInvalidation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Fires the `pushsubscriptionchange` event defined here: |
| // https://w3c.github.io/push-api/#the-pushsubscriptionchange-event |
| // upon manual resubscription to previously unsubscribed notifications. |
| BASE_FEATURE(kPushSubscriptionChangeEventOnResubscribe, |
| "PushSubscriptionChangeEventOnResubscribe", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When enabled, queues navigations instead of cancelling the previous |
| // navigation if the previous navigation is already waiting for commit. |
| // See https://crbug.com/838348 and https://crbug.com/1220337. |
| BASE_FEATURE(kQueueNavigationsWhileWaitingForCommit, |
| "QueueNavigationsWhileWaitingForCommit", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // When enabled, sends SubresourceResponseStarted IPC only when the user has |
| // allowed any HTTPS-related warning exceptions. From field data, ~100% of |
| // subresource notifications are not required, since allowing certificate |
| // exceptions by users is a rare event. Hence, if user has never allowed any |
| // certificate or HTTP exceptions, notifications are not sent to the browser. |
| // Once we start sending these messages, we keep sending them until all |
| // exceptions are revoked and browser restart occurs. |
| BASE_FEATURE(kReduceSubresourceResponseStartedIPC, |
| "ReduceSubresourceResponseStartedIPC", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) |
| // When a Web application is video-capturing a tab, it can use the Region |
| // Capture API to crop the resulting video. |
| // - If `kRegionCaptureOfOtherTabs` is disabled, the Web application can only |
| // crop self-capture tracks. (That is, cropping is only possible when the |
| // application is capturing its own tab.) |
| // - If `kRegionCaptureOfOtherTabs` is enabled, the Web application can crop |
| // video-captures of any tab (so long as that other tab collaborates by sending |
| // a CropTarget). |
| BASE_FEATURE(kRegionCaptureOfOtherTabs, |
| "RegionCaptureOfOtherTabs", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) |
| |
| // RenderDocument: |
| // |
| // Currently, a RenderFrameHost represents neither a frame nor a document, but a |
| // frame in a given process. A new one is created after a different-process |
| // navigation. The goal of RenderDocument is to get a new one for each document |
| // instead. |
| // |
| // Design doc: https://bit.ly/renderdocument |
| // Main bug tracker: https://crbug.com/936696 |
| |
| // Enable using the RenderDocument. |
| BASE_FEATURE(kRenderDocument, |
| "RenderDocument", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Restrict the maximum number of concurrent ThreadPool tasks when a renderer is |
| // low priority. |
| BASE_FEATURE(kRestrictThreadPoolInBackground, |
| "RestrictThreadPoolInBackground", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Set a tri-state priority on v8 isolates reflecting the renderer priority. |
| BASE_FEATURE(kSetIsolatesPriority, |
| "SetIsolatesPriority", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When enabled, sends the spare renderer information when setting the |
| // priority of renderers. Currently only Android handles the spare renderer |
| // information in priority. |
| // The target priority of a spare renderer in Android is decided by the feature |
| // parameters in ContentFeatureList.java. |
| BASE_FEATURE(kSpareRendererProcessPriority, |
| "SpareRendererProcessPriority", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Reuse compositor instances with RenderDocument |
| BASE_FEATURE(kRenderDocumentCompositorReuse, |
| "RenderDocumentCompositorReuse", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables retrying to obtain list of available cameras after restarting the |
| // video capture service if a previous attempt failed, which could be caused |
| // by a service crash. |
| BASE_FEATURE(kRetryGetVideoCaptureDeviceInfos, |
| "RetryGetVideoCaptureDeviceInfos", |
| #if BUILDFLAG(IS_MAC) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Reuses RenderProcessHost up to a certain threshold. This mode ignores the |
| // soft process limit and behaves just like a process-per-site policy for all |
| // sites, with an additional restriction that a process may only be reused while |
| // the number of main frames in that process stays below a threshold. |
| BASE_FEATURE(kProcessPerSiteUpToMainFrameThreshold, |
| "ProcessPerSiteUpToMainFrameThreshold", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Specifies the threshold for `kProcessPerSiteUpToMainFrameThreshold` feature. |
| constexpr base::FeatureParam<int> kProcessPerSiteMainFrameThreshold{ |
| &kProcessPerSiteUpToMainFrameThreshold, "ProcessPerSiteMainFrameThreshold", |
| 2}; |
| |
| // Allows process reuse for localhost and IP based hosts when |
| // `kProcessPerSiteUpToMainFrameThreshold` is enabled. |
| constexpr base::FeatureParam<bool> kProcessPerSiteMainFrameAllowIPAndLocalhost{ |
| &kProcessPerSiteUpToMainFrameThreshold, |
| "ProcessPerSiteMainFrameAllowIPAndLocalhost", false}; |
| |
| // When `kProcessPerSiteUpToMainFrameThreshold` is enabled, allows process reuse |
| // even when DevTools was ever attached. This allows developers to test the |
| // process sharing mode, since DevTools normally disables it for the field |
| // trial participants. |
| constexpr base::FeatureParam<bool> |
| kProcessPerSiteMainFrameAllowDevToolsAttached{ |
| &kProcessPerSiteUpToMainFrameThreshold, |
| "ProcessPerSiteMainFrameAllowDevToolsAttached", false}; |
| |
| // Specifies the scaling factor for `kProcessPerSiteUpToMainFrameThreshold` |
| // feature. This factor will be multiplied to the calculated size of a top |
| // level frame in the process and ensure there is more than that enough |
| // space in the process. For example if the expected size of a top level frame |
| // was 100K, and the factor was 1.5, the process must have 150K left in its |
| // allocation limit. |
| constexpr base::FeatureParam<double> kProcessPerSiteMainFrameSiteScalingFactor{ |
| &kProcessPerSiteUpToMainFrameThreshold, |
| "ProcessPerSiteMainFrameSiteScalingFactor", 1.5f}; |
| |
| // Specifies the total memory limit for `kProcessPerSiteUpToMainFrameThreshold` |
| // feature. This is a limit of the private memory footprint calculation, if |
| // adding an additional top level frame would take us over this limit the |
| // addition will be denied. An application may indeed allocate more than this |
| // but we use this limit as a heuristic only. |
| constexpr base::FeatureParam<double> kProcessPerSiteMainFrameTotalMemoryLimit{ |
| &kProcessPerSiteUpToMainFrameThreshold, |
| "ProcessPerSiteMainFrameTotalMemoryLimit", 2 * 1024 * 1024 * 1024u}; |
| |
| // Enables auto preloading for fetch requests before invoking the fetch handler |
| // in ServiceWorker. The fetch request inside the fetch handler is resolved with |
| // this preload response. If the fetch handler result is fallback, uses this |
| // preload request as a fallback network request. |
| // |
| // Unlike navigation preload, this preloading is applied to subresources. Also, |
| // it doesn't require a developer opt-in. |
| // |
| // crbug.com/1472634 for more details. |
| BASE_FEATURE(kServiceWorkerAutoPreload, |
| "ServiceWorkerAutoPreload", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // crbug.com/374606637: When this is enabled, race-network-and-fetch-hander will |
| // prioritize the response processing for the network request over the |
| // processing for the fetch handler. |
| BASE_FEATURE( |
| kServiceWorkerStaticRouterRaceNetworkRequestPerformanceImprovement, |
| "ServiceWorkerStaticRouterRaceNetworkRequestPerformanceImprovement", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) |
| // Run video capture service in the Browser process as opposed to a dedicated |
| // utility process. |
| BASE_FEATURE(kRunVideoCaptureServiceInBrowserProcess, |
| "RunVideoCaptureServiceInBrowserProcess", |
| base::FEATURE_DISABLED_BY_DEFAULT |
| ); |
| #endif |
| |
| // Update scheduler settings using resourced on ChromeOS. |
| BASE_FEATURE(kSchedQoSOnResourcedForChrome, |
| "SchedQoSOnResourcedForChrome", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Browser-side feature flag for Secure Payment Confirmation (SPC) that also |
| // controls the render side feature state. SPC is not currently available on |
| // Linux or ChromeOS, as it requires platform authenticator support. |
| BASE_FEATURE(kSecurePaymentConfirmation, |
| "SecurePaymentConfirmationBrowser", |
| #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Used to control whether to remove the restriction that PaymentCredential in |
| // WebAuthn and secure payment confirmation method in PaymentRequest API must |
| // use a user verifying platform authenticator. When enabled, this allows using |
| // such devices as UbiKey on Linux, which can make development easier. |
| BASE_FEATURE(kSecurePaymentConfirmationDebug, |
| "SecurePaymentConfirmationDebug", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Service worker based payment apps as defined by w3c here: |
| // https://w3c.github.io/webpayments-payment-apps-api/ |
| // TODO(rouslan): Remove this. |
| BASE_FEATURE(kServiceWorkerPaymentApps, |
| "ServiceWorkerPaymentApps", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // http://tc39.github.io/ecmascript_sharedmem/shmem.html |
| // This feature is also enabled independently of this flag for cross-origin |
| // isolated renderers. |
| BASE_FEATURE(kSharedArrayBuffer, |
| "SharedArrayBuffer", |
| #if BUILDFLAG(PLATFORM_CFM) |
| // Supports x-on-meet-coop interop implementation. |
| // TODO: crbug.com/398741358 - clean up this temporary workaround after |
| // https://crbug.com/333029146 replaces COOP restrict-properties. |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // If enabled, GetUserMedia API will only work when the concerned tab is in |
| // focus |
| BASE_FEATURE(kUserMediaCaptureOnFocus, |
| "UserMediaCaptureOnFocus", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // A feature to enable using the update token in the manifest or icon url |
| // changes to detect app updates. When this is enabled, automatic icon |
| // downloading is disabled. |
| BASE_FEATURE(kWebAppEnableUpdateTokenParsing, |
| "WebAppEnableUpdateTokenParsing", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // This is intended as a kill switch for the WebOTP Service feature. To enable |
| // this feature, the experimental web platform features flag should be set. |
| BASE_FEATURE(kWebOTP, "WebOTP", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable the web lockscreen API implementation |
| // (https://github.com/WICG/lock-screen) in Chrome. |
| BASE_FEATURE(kWebLockScreenApi, |
| "WebLockScreenApi", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When enabled, puts subframe data: URLs in a separate SiteInstance in the same |
| // SiteInstanceGroup as the initiator. |
| BASE_FEATURE(kSiteInstanceGroupsForDataUrls, |
| "SiteInstanceGroupsForDataUrls", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // When enabled, puts non-isolated sites in separate SiteInstances in a default |
| // SiteInstanceGroup (per BrowsingInstance), rather than sharing a default |
| // SiteInstance. |
| BASE_FEATURE(kDefaultSiteInstanceGroups, |
| "DefaultSiteInstanceGroups", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls whether to isolate sites of documents that specify an eligible |
| // Cross-Origin-Opener-Policy header. Note that this is only intended to be |
| // used on Android, which does not use strict site isolation. See |
| // https://crbug.com/1018656. |
| BASE_FEATURE(kSiteIsolationForCrossOriginOpenerPolicy, |
| "SiteIsolationForCrossOriginOpenerPolicy", |
| // Enabled by default on Android only; see https://crbug.com/1206770. |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| // This feature param (true by default) controls whether sites are persisted |
| // across restarts. |
| const base::FeatureParam<bool> |
| kSiteIsolationForCrossOriginOpenerPolicyShouldPersistParam{ |
| &kSiteIsolationForCrossOriginOpenerPolicy, |
| "should_persist_across_restarts", true}; |
| // This feature param controls the maximum size of stored sites. Only used |
| // when persistence is also enabled. |
| const base::FeatureParam<int> |
| kSiteIsolationForCrossOriginOpenerPolicyMaxSitesParam{ |
| &kSiteIsolationForCrossOriginOpenerPolicy, "stored_sites_max_size", |
| 100}; |
| // This feature param controls the period of time for which the stored sites |
| // should remain valid. Only used when persistence is also enabled. |
| const base::FeatureParam<base::TimeDelta> |
| kSiteIsolationForCrossOriginOpenerPolicyExpirationTimeoutParam{ |
| &kSiteIsolationForCrossOriginOpenerPolicy, "expiration_timeout", |
| base::Days(7)}; |
| |
| // This feature controls whether the renderer should use FontDataManager to |
| // fetch fonts from the Browser's FontDataService. It is currently scoped to |
| // just Windows. See crbug.com/335680565. |
| #if BUILDFLAG(IS_WIN) |
| BASE_FEATURE(kFontDataServiceAllWebContents, |
| "FontDataServiceAllWebContents", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| const base::FeatureParam<FontDataServiceTypefaceType>::Option |
| font_data_service_typeface[] = { |
| {FontDataServiceTypefaceType::kDwrite, "DWrite"}, |
| {FontDataServiceTypefaceType::kFreetype, "Freetype"}, |
| {FontDataServiceTypefaceType::kFontations, "Fontations"}}; |
| const base::FeatureParam<FontDataServiceTypefaceType> |
| kFontDataServiceTypefaceType{&kFontDataServiceAllWebContents, "typeface", |
| FontDataServiceTypefaceType::kDwrite, |
| &font_data_service_typeface}; |
| #endif // BUILDFLAG(IS_WIN) |
| |
| // When enabled, OOPIFs will not try to reuse compatible processes from |
| // unrelated tabs. |
| BASE_FEATURE(kDisableProcessReuse, |
| "DisableProcessReuse", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls whether SpareRenderProcessHostManager tries to always have a warm |
| // spare renderer process around for the most recently requested BrowserContext. |
| // This feature is only consulted in site-per-process mode. |
| BASE_FEATURE(kSpareRendererForSitePerProcess, |
| "SpareRendererForSitePerProcess", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Controls whether site isolation should use origins instead of scheme and |
| // eTLD+1. |
| BASE_FEATURE(kStrictOriginIsolation, |
| "StrictOriginIsolation", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls whether subframe process reuse should be restricted according to |
| // resource usage policies. Namely, a process that is already consuming too |
| // much memory is not attempted to be reused. |
| BASE_FEATURE(kSubframeProcessReuseThresholds, |
| "SubframeProcessReuseThresholds", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Specifies the memory threshold for the `kSubframeProcessReuseThresholds` |
| // feature, which only allows a process to be reused for another subframe if the |
| // process's memory footprint stays below this threshold. Similar to |
| // `kProcessPerSiteMainFrameTotalMemoryLimit`, and only provided as a separate |
| // knob so that it can be independently controlled in subframe and main frame |
| // process reuse experiments. |
| constexpr base::FeatureParam<double> kSubframeProcessReuseMemoryThreshold{ |
| &kSubframeProcessReuseThresholds, "SubframeProcessReuseMemoryThreshold", |
| 512 * 1024 * 1024u}; |
| |
| // Disallows window.{alert, prompt, confirm} if triggered inside a subframe that |
| // is not same origin with the main frame. |
| BASE_FEATURE(kSuppressDifferentOriginSubframeJSDialogs, |
| "SuppressDifferentOriginSubframeJSDialogs", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Dispatch touch events to "SyntheticGestureController" for events from |
| // Devtool Protocol Input.dispatchTouchEvent to simulate touch events close to |
| // real OS events. |
| BASE_FEATURE(kSyntheticPointerActions, |
| "SyntheticPointerActions", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // This feature allows touch dragging and a context menu to occur |
| // simultaneously, with the assumption that the menu is non-modal. Without this |
| // feature, a long-press touch gesture can start either a drag or a context-menu |
| // in Blink, not both (more precisely, a context menu is shown only if a drag |
| // cannot be started). |
| BASE_FEATURE(kTouchDragAndContextMenu, |
| "TouchDragAndContextMenu", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| #if BUILDFLAG(IS_ANDROID) |
| // When the context menu is triggered, the browser allows motion in a small |
| // region around the initial touch location menu to allow for finger jittering. |
| // This param holds the movement threshold in DIPs to consider drag an |
| // intentional drag, which will dismiss the current context menu and prevent new |
| // menu from showing. |
| const base::FeatureParam<int> kTouchDragMovementThresholdDip{ |
| &kTouchDragAndContextMenu, "DragAndDropMovementThresholdDipParam", 60}; |
| #endif |
| |
| // Controls whether the browser should track and reuse free and empty renderer |
| // processes. When enabled, the browser maintains a list of renderer processes |
| // that are currently not hosting any frames and are thus eligible for reuse |
| // when a new renderer process is needed. Currently, only background renderer |
| // processes are considered for reuse. |
| BASE_FEATURE(kTrackEmptyRendererProcessesForReuse, |
| "TrackEmptyRendererProcessesForReuse", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // This feature is for a reverse Origin Trial, enabling SharedArrayBuffer for |
| // sites as they migrate towards requiring cross-origin isolation for these |
| // features. |
| // TODO(bbudge): Remove when the deprecation is complete. |
| // https://developer.chrome.com/origintrials/#/view_trial/303992974847508481 |
| // https://crbug.com/1144104 |
| BASE_FEATURE(kUnrestrictedSharedArrayBuffer, |
| "UnrestrictedSharedArrayBuffer", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| #if BUILDFLAG(IS_ANDROID) && BUILDFLAG(INCLUDE_BOTH_V8_SNAPSHOTS) |
| // If enabled, blink's context snapshot is used rather than the v8 snapshot. |
| BASE_FEATURE(kUseContextSnapshot, |
| "UseContextSnapshot", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| #endif |
| |
| // Enables comparing browser and renderer's DidCommitProvisionalLoadParams in |
| // RenderFrameHostImpl::VerifyThatBrowserAndRendererCalculatedDidCommitParamsMatch. |
| BASE_FEATURE(kVerifyDidCommitParams, |
| "VerifyDidCommitParams", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables future V8 VM features |
| BASE_FEATURE(kV8VmFuture, "V8VmFuture", base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables per PWA System Media Controls. Only supported on Windows and macOS. |
| BASE_FEATURE(kWebAppSystemMediaControls, |
| "WebAppSystemMediaControls", |
| #if BUILDFLAG(IS_WIN) |
| // Windows enabled since 124. |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #elif BUILDFLAG(IS_MAC) |
| // macOS enabled in 130. If a kill switch is needed, it should be |
| // safe to only disable the failing platform (ie. macOS here). |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| #endif // BUILDFLAG(IS_WIN) |
| |
| // Enable WebAssembly baseline compilation (Liftoff). |
| BASE_FEATURE(kWebAssemblyBaseline, |
| "WebAssemblyBaseline", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) |
| // When a Web application is video-capturing a tab, it can use the Element |
| // Capture API to restrict the resulting video. |
| // - If `kElementCaptureOfOtherTabs` is disabled, the Web application can only |
| // restrict self-capture tracks. (That is, restrictping is only possible when |
| // the application is capturing its own tab.) |
| // - If `kElementCaptureOfOtherTabs` is enabled, the Web application can |
| // restrict video-captures of any tab (so long as that other tab collaborates by |
| // sending a RestrictionTarget). |
| BASE_FEATURE(kElementCaptureOfOtherTabs, |
| "ElementCaptureOfOtherTabs", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) |
| |
| // Enable WebAssembly JSPI. |
| BASE_FEATURE(kEnableExperimentalWebAssemblyJSPI, |
| "WebAssemblyExperimentalJSPI", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable WebAssembly lazy compilation (JIT on first call). |
| BASE_FEATURE(kWebAssemblyLazyCompilation, |
| "WebAssemblyLazyCompilation", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable WebAssembly tiering (Liftoff -> TurboFan). |
| BASE_FEATURE(kWebAssemblyTiering, |
| "WebAssemblyTiering", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable WebAssembly trap handler. |
| BASE_FEATURE(kWebAssemblyTrapHandler, |
| "WebAssemblyTrapHandler", |
| #if ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || \ |
| BUILDFLAG(IS_MAC)) && \ |
| defined(ARCH_CPU_X86_64)) || \ |
| ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC)) && \ |
| defined(ARCH_CPU_ARM64)) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| |
| // Controls whether the Web Bluetooth API is enabled: |
| // https://webbluetoothcg.github.io/web-bluetooth/ |
| BASE_FEATURE(kWebBluetooth, "WebBluetooth", base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls whether Web Bluetooth should use the new permissions backend. The |
| // new permissions backend uses ObjectPermissionContextBase, which is used by |
| // other device APIs, such as WebUSB. When enabled, |
| // WebBluetoothWatchAdvertisements and WebBluetoothGetDevices blink features are |
| // also enabled. |
| BASE_FEATURE(kWebBluetoothNewPermissionsBackend, |
| "WebBluetoothNewPermissionsBackend", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Controls which backend is used to retrieve OTP on Android. When disabled |
| // we use User Consent API. |
| BASE_FEATURE(kWebOtpBackendAuto, |
| "WebOtpBackendAuto", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // The JavaScript API for payments on the web. |
| BASE_FEATURE(kWebPayments, "WebPayments", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enables code caching for scripts used on WebUI pages. |
| BASE_FEATURE(kWebUICodeCache, |
| "WebUICodeCache", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables build-time generated resource-bundled code caches for WebUI pages. |
| // See crbug.com/375509504 for details. |
| BASE_FEATURE(kWebUIBundledCodeCache, |
| "WebUIBundledCodeCache", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables populating the WebUI URL to code cache resource map. |
| const base::FeatureParam<bool> kWebUIBundledCodeCacheGenerateResourceMap{ |
| &kWebUIBundledCodeCache, "WebUIBundledCodeCacheGenerateResourceMap", true}; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| // Reports WebUI Javascript errors to the crash server on all desktop platforms. |
| // Previously, this was only supported on ChromeOS and Linux. |
| // Intentionally enabled by default and will be used as a kill switch in case |
| // of regressions. |
| BASE_FEATURE(kWebUIJSErrorReportingExtended, |
| "WebUIJSErrorReportingExtended", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #endif |
| |
| // Controls whether the WebUSB API is enabled: |
| // https://wicg.github.io/webusb |
| BASE_FEATURE(kWebUsb, "WebUSB", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Controls whether the WebXR Device API is enabled. |
| BASE_FEATURE(kWebXr, "WebXR", base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable the navigator.permissions API. |
| // Used for launch in WebView, but exposed in content to map to runtime-enabled |
| // feature. |
| BASE_FEATURE(kWebPermissionsApi, |
| "WebPermissionsApi", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| #if BUILDFLAG(IS_ANDROID) |
| // When enabled, TYPE_ANNOUNCE events will no longer be sent for live regions in |
| // the web contents. |
| BASE_FEATURE(kAccessibilityDeprecateTypeAnnounce, |
| "AccessibilityDeprecateTypeAnnounce", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // When enabled, includes the ACTION_LONG_CLICK action to all relevant nodes in |
| // the web contents accessibility tree. |
| BASE_FEATURE(kAccessibilityIncludeLongClickAction, |
| "AccessibilityIncludeLongClickAction", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables the second iteration of AccessibilityPageZoom, which continues |
| // the work completed in the first experiment and the subsequent fast-follow. |
| // This version of the experiment explores enabling OS-level adjustments. |
| BASE_FEATURE(kAccessibilityPageZoomV2, |
| "AccessibilityPageZoomV2", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables the use of a unified code path for AXTree snapshots. |
| BASE_FEATURE(kAccessibilityUnifiedSnapshots, |
| "AccessibilityUnifiedSnapshots", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables posting registering, unregistering the broadcast receiver to the |
| // background thread. |
| BASE_FEATURE(kAccessibilityManageBroadcastReceiverOnBackground, |
| "AccessibilityManageBroadcastReceiverOnBackground", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Enable open PDF inline on Android. |
| BASE_FEATURE(kAndroidOpenPdfInline, |
| "AndroidOpenPdfInline", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // A feature to enable launch handler and file handler api for Chrome on Android |
| BASE_FEATURE(kAndroidWebAppLaunchHandler, |
| "AndroidWebAppLaunchHandler", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Allows the use of "Smart Zoom", an alternative form of page zoom, and |
| // enables the associated UI. |
| BASE_FEATURE(kSmartZoom, "SmartZoom", base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Skips clearing objects on main document ready. Only has an impact |
| // when gin java bridge is enabled. |
| BASE_FEATURE(kGinJavaBridgeMojoSkipClearObjectsOnMainDocumentReady, |
| "GinJavaBridgeMojoSkipClearObjectsOnMainDocumentReady", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Reduce the priority of GPU process when in background so it is more likely |
| // to be killed first if the OS needs more memory. |
| BASE_FEATURE(kReduceGpuPriorityOnBackground, |
| "ReduceGpuPriorityOnBackground", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Screen Capture API support for Android. |
| // This should not be enabled unless ENABLE_SCREEN_CAPTURE is on, otherwise |
| // it won't work. |
| BASE_FEATURE(kUserMediaScreenCapturing, |
| "UserMediaScreenCapturing", |
| #if BUILDFLAG(ENABLE_SCREEN_CAPTURE) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| ); |
| #endif // BUILDFLAG(IS_ANDROID) |
| |
| #if BUILDFLAG(IS_MAC) |
| // Enables backgrounding hidden renderers on Mac. |
| BASE_FEATURE(kMacAllowBackgroundingRenderProcesses, |
| "MacAllowBackgroundingRenderProcesses", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| // Enables a fix for a macOS IME Live Conversion issue. crbug.com/40226470 and |
| // crbug.com/40060200 |
| BASE_FEATURE(kMacImeLiveConversionFix, |
| "MacImeLiveConversionFix", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| |
| // Changes how Chrome responds to accessibility activation signals on macOS |
| // Sonoma, to avoid unnecessary changes to the screen reader state. |
| BASE_FEATURE(kSonomaAccessibilityActivationRefinements, |
| "SonomaAccessibilityActivationRefinements", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| |
| #endif // BUILDFLAG(IS_MAC) |
| |
| #if BUILDFLAG(IS_ANDROID) |
| // Disables WebAuthn on Android Auto. Default enabled in M137, remove in or |
| // after M140. |
| BASE_FEATURE(kWebauthnDisabledOnAuto, |
| "WebAuthenticationDisabledOnAuto", |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| #endif // BUILDFLAG(IS_ANDROID) |
| |
| // Default amount of days after which the global navigation capturing IPH |
| // guardrails are cleared from storage. |
| const base::FeatureParam<int> kNavigationCapturingIPHGuardrailStorageDuration{ |
| &kPwaNavigationCapturing, "link_capturing_guardrail_storage_duration", 30}; |
| |
| BASE_FEATURE(kPwaNavigationCapturing, |
| "PwaNavigationCapturing", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| const base::FeatureParam<CapturingState>::Option kNavigationCapturingParams[] = |
| {{CapturingState::kDefaultOn, "on_by_default"}, |
| {CapturingState::kDefaultOff, "off_by_default"}, |
| {CapturingState::kReimplDefaultOn, "reimpl_default_on"}, |
| {CapturingState::kReimplDefaultOff, "reimpl_default_off"}, |
| {CapturingState::kReimplOnViaClientMode, "reimpl_on_via_client_mode"}}; |
| |
| const base::FeatureParam<CapturingState> kNavigationCapturingDefaultState{ |
| &kPwaNavigationCapturing, "link_capturing_state", |
| CapturingState::kReimplDefaultOn, &kNavigationCapturingParams}; |
| |
| const base::FeatureParam<std::string> kForcedOffCapturingAppsOnFirstNavigation{ |
| &kPwaNavigationCapturing, "initial_nav_forced_off_apps", ""}; |
| |
| const base::FeatureParam<std::string> kForcedOffCapturingAppsUserSetting{ |
| &kPwaNavigationCapturing, "user_settings_forced_off_apps", ""}; |
| |
| namespace { |
| enum class VideoCaptureServiceConfiguration { |
| kEnabledForOutOfProcess, |
| kEnabledForBrowserProcess, |
| kDisabled |
| }; |
| |
| VideoCaptureServiceConfiguration GetVideoCaptureServiceConfiguration() { |
| #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) |
| return VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; |
| #else |
| return base::FeatureList::IsEnabled( |
| features::kRunVideoCaptureServiceInBrowserProcess) |
| ? VideoCaptureServiceConfiguration::kEnabledForBrowserProcess |
| : VideoCaptureServiceConfiguration::kEnabledForOutOfProcess; |
| #endif |
| } |
| |
| } // namespace |
| |
| bool IsVideoCaptureServiceEnabledForOutOfProcess() { |
| return GetVideoCaptureServiceConfiguration() == |
| VideoCaptureServiceConfiguration::kEnabledForOutOfProcess; |
| } |
| |
| bool IsVideoCaptureServiceEnabledForBrowserProcess() { |
| return GetVideoCaptureServiceConfiguration() == |
| VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; |
| } |
| |
| bool IsPushSubscriptionChangeEventEnabled() { |
| return base::FeatureList::IsEnabled( |
| features::kPushSubscriptionChangeEventOnInvalidation) || |
| base::FeatureList::IsEnabled( |
| features::kPushSubscriptionChangeEventOnResubscribe); |
| } |
| |
| } // namespace features |