| // 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 "third_party/blink/public/common/features.h" |
| |
| #include "base/command_line.h" |
| #include "base/feature_list.h" |
| #include "build/build_config.h" |
| #include "build/chromeos_buildflags.h" |
| #include "services/network/public/cpp/features.h" |
| #include "third_party/blink/public/common/forcedark/forcedark_switches.h" |
| #include "third_party/blink/public/common/switches.h" |
| |
| namespace blink { |
| namespace features { |
| |
| // Apply lazy-loading to ad frames which have embeds likely impacting Core Web |
| // Vitals. |
| const base::Feature kAutomaticLazyFrameLoadingToAds{ |
| "AutomaticLazyFrameLoadingToAds", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Apply lazy-loading to frames which have embeds likely impacting Core Web |
| // Vitals. |
| const base::Feature kAutomaticLazyFrameLoadingToEmbeds{ |
| "AutomaticLazyFrameLoadingToEmbeds", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Define the allowed websites to use LazyEmbeds. The allowed websites need to |
| // be defined separately from kAutomaticLazyFrameLoadingToEmbeds because we want |
| // to gather Blink.AutomaticLazyLoadFrame.LazyEmbedFrameCount UKM data even when |
| // kAutomaticLazyFrameLoadingToEmbeds is disabled. |
| const base::Feature kAutomaticLazyFrameLoadingToEmbedUrls{ |
| "AutomaticLazyFrameLoadingToEmbedUrls", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allows pages with DedicatedWorker to stay eligible for the back/forward |
| // cache. |
| const base::Feature kBackForwardCacheDedicatedWorker{ |
| "BackForwardCacheDedicatedWorker", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable intervention for download that was initiated from or occurred in an ad |
| // frame without user activation. |
| const base::Feature kBlockingDownloadsInAdFrameWithoutUserActivation{ |
| "BlockingDownloadsInAdFrameWithoutUserActivation", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable CSS Container Queries. Also implies LayoutNGGrid and CSSContainSize1D. |
| const base::Feature kCSSContainerQueries{"CSSContainerQueries", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether the Conversion Measurement API infrastructure is enabled. |
| const base::Feature kConversionMeasurement{"ConversionMeasurement", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether LCP calculations should exclude low-entropy images. If |
| // enabled, then the associated parameter sets the cutoff, expressed as the |
| // minimum number of bits of encoded image data used to encode each rendered |
| // pixel. Note that this is not just pixels of decoded image data; the rendered |
| // size includes any scaling applied by the rendering engine to display the |
| // content. |
| const base::Feature kExcludeLowEntropyImagesFromLCP{ |
| "ExcludeLowEntropyImagesFromLCP", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<double> kMinimumEntropyForLCP{ |
| &kExcludeLowEntropyImagesFromLCP, "min_bpp", 2}; |
| |
| const base::Feature kGMSCoreEmoji{"GMSCoreEmoji", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable defer commits to avoid flash of unstyled content, for same origin |
| // navigation only. |
| const base::Feature kPaintHolding{"PaintHolding", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable defer commits to avoid flash of unstyled content, for all navigation. |
| const base::Feature kPaintHoldingCrossOrigin{"PaintHoldingCrossOrigin", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable eagerly setting up a CacheStorage interface pointer and |
| // passing it to service workers on startup as an optimization. |
| // TODO(crbug/1077916): Re-enable once the issue with COOP/COEP is fixed. |
| const base::Feature kEagerCacheStorageSetupForServiceWorkers{ |
| "EagerCacheStorageSetupForServiceWorkers", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls script streaming. |
| const base::Feature kScriptStreaming{"ScriptStreaming", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allow streaming small (<30kB) scripts. |
| const base::Feature kSmallScriptStreaming{"SmallScriptStreaming", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls off-thread code cache consumption. |
| const base::Feature kConsumeCodeCacheOffThread{ |
| "ConsumeCodeCacheOffThread", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables user level memory pressure signal generation on Android. |
| const base::Feature kUserLevelMemoryPressureSignal{ |
| "UserLevelMemoryPressureSignal", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Perform memory purges after freezing only if all pages are frozen. |
| const base::Feature kFreezePurgeMemoryAllPagesFrozen{ |
| "FreezePurgeMemoryAllPagesFrozen", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Freezes the user-agent as part of https://github.com/WICG/ua-client-hints. |
| const base::Feature kReduceUserAgent{"ReduceUserAgent", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the `sec-ch-ua-full` client hint to be sent along with the full user |
| // agent string in the HTTP request headers, as well as surfacing the full user |
| // agent string in the JS APIs (navigator.userAgent, etc). |
| const base::Feature kFullUserAgent{"FullUserAgent", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the frequency capping for detecting overlay popups. Overlay-popups |
| // are the interstitials that pop up and block the main content of the page. |
| const base::Feature kFrequencyCappingForOverlayPopupDetection{ |
| "FrequencyCappingForOverlayPopupDetection", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the frequency capping for detecting large sticky ads. |
| // Large-sticky-ads are those ads that stick to the bottom of the page |
| // regardless of a user’s efforts to scroll, and take up more than 30% of the |
| // screen’s real estate. |
| const base::Feature kFrequencyCappingForLargeStickyAdDetection{ |
| "FrequencyCappingForLargeStickyAdDetection", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable Display Locking JavaScript APIs. |
| const base::Feature kDisplayLocking{"DisplayLocking", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kJSONModules{"JSONModules", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kDeferredFontShaping{"DeferredShaping", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable LayoutNG. |
| const base::Feature kLayoutNG{"LayoutNG", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the use of the PaintCache for Path2D objects that are rasterized |
| // out of process. Has no effect when kCanvasOopRasterization is disabled. |
| const base::Feature kPath2DPaintCache{"Path2DPaintCache", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable by default. This feature is for a kill switch. |
| const base::Feature kLayoutNGBlockInInline{"LayoutNGBlockInInline", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kPrivacySandboxAdsAPIs{"PrivacySandboxAdsAPIs", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kMixedContentAutoupgrade{"AutoupgradeMixedContent", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // An experimental replacement for the `User-Agent` header, defined in |
| // https://tools.ietf.org/html/draft-west-ua-client-hints. |
| const base::Feature kUserAgentClientHint{"UserAgentClientHint", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable `sec-ch-ua-full-version-list` client hint. |
| const base::Feature kUserAgentClientHintFullVersionList{ |
| "UserAgentClientHintFullVersionList", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Handle prefers-color-scheme user preference media feature via client hints. |
| const base::Feature kPrefersColorSchemeClientHintHeader{ |
| "PrefersColorSchemeClientHintHeader", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether the Viewport Height client hint can be added to request |
| // headers. |
| const base::Feature kViewportHeightClientHintHeader{ |
| "ViewportHeightClientHintHeader", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Used to control the collection of anchor element metrics (crbug.com/856683). |
| // If kNavigationPredictor is enabled, then metrics of anchor elements |
| // in the first viewport after the page load and the metrics of the clicked |
| // anchor element will be extracted and recorded. Additionally, navigation |
| // predictor may preconnect/prefetch to resources/origins to make the |
| // future navigations faster. |
| const base::Feature kNavigationPredictor { |
| "NavigationPredictor", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Anchor Element Interaction |
| const base::Feature kAnchorElementInteraction{ |
| "AnchorElementInteraction", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable browser-initiated dedicated worker script loading |
| // (PlzDedicatedWorker). https://crbug.com/906991 |
| const base::Feature kPlzDedicatedWorker{"PlzDedicatedWorker", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable Portals. https://crbug.com/865123. |
| // Note that default enabling this does not expose the portal |
| // element on its own, but does allow its use with an origin trial. This was the |
| // case for the M85 Android only origin trial (https://crbug.com/1040212). |
| const base::Feature kPortals{"Portals", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When kPortals is enabled, allow portals to load content that is third-party |
| // (cross-origin) to the hosting page. Otherwise has no effect. |
| // |
| // https://crbug.com/1013389 |
| const base::Feature kPortalsCrossOrigin{"PortalsCrossOrigin", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable the <fencedframe> element; see crbug.com/1123606. Note that enabling |
| // this feature does not automatically expose this element to the web, it only |
| // allows the element to be enabled by the runtime enabled feature, for origin |
| // trials. |
| const base::Feature kFencedFrames{"FencedFrames", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<FencedFramesImplementationType>::Option |
| fenced_frame_implementation_types[] = { |
| {FencedFramesImplementationType::kShadowDOM, "shadow_dom"}, |
| {FencedFramesImplementationType::kMPArch, "mparch"}}; |
| const base::FeatureParam<FencedFramesImplementationType> |
| kFencedFramesImplementationTypeParam{ |
| &kFencedFrames, "implementation_type", |
| FencedFramesImplementationType::kShadowDOM, |
| &fenced_frame_implementation_types}; |
| |
| // Enable the shared storage API. This base::Feature directly controls the |
| // corresponding runtime enabled feature. |
| // https://github.com/pythagoraskitty/shared-storage/blob/main/README.md |
| const base::Feature kSharedStorageAPI{"SharedStorageAPI", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<int> |
| kSharedStorageURLSelectionOperationInputURLSizeLimit{ |
| &kSharedStorageAPI, "url_selection_operation_input_url_size_limit", 8}; |
| const base::FeatureParam<int> kMaxSharedStorageStringLength = { |
| &kSharedStorageAPI, "MaxSharedStorageStringLength", 1024}; |
| const base::FeatureParam<int> kMaxSharedStorageEntriesPerOrigin = { |
| &kSharedStorageAPI, "MaxSharedStorageEntriesPerOrigin", 10000}; |
| const base::FeatureParam<int> kMaxSharedStoragePageSize = { |
| &kSharedStorageAPI, "MaxSharedStoragePageSize", 4096}; |
| const base::FeatureParam<int> kMaxSharedStorageCacheSize = { |
| &kSharedStorageAPI, "MaxSharedStorageCacheSize", 1024}; |
| const base::FeatureParam<int> kMaxSharedStorageInitTries = { |
| &kSharedStorageAPI, "MaxSharedStorageInitTries", 2}; |
| const base::FeatureParam<int> kMaxSharedStorageIteratorBatchSize = { |
| &kSharedStorageAPI, "MaxSharedStorageIteratorBatchSize", 100}; |
| const base::FeatureParam<base::TimeDelta> |
| kSharedStorageStaleOriginPurgeInitialInterval = { |
| &kSharedStorageAPI, "SharedStorageStaleOriginPurgeInitialInterval", |
| base::Minutes(15)}; |
| const base::FeatureParam<base::TimeDelta> |
| kSharedStorageStaleOriginPurgeRecurringInterval = { |
| &kSharedStorageAPI, "SharedStorageStaleOriginPurgeRecurringInterval", |
| base::Hours(2)}; |
| const base::FeatureParam<base::TimeDelta> |
| kSharedStorageOriginStalenessThreshold = { |
| &kSharedStorageAPI, "SharedStorageOriginStalenessThreshold", |
| base::Days(60)}; |
| |
| // Enables the Prerender2 feature: https://crbug.com/1126305 |
| // Note that default enabling this does not enable the Prerender2 features |
| // because kSetOnlyIfOverridden is used for setting WebRuntimeFeatures' |
| // Prerender2. To enable this feature, we need to force-enable this feature |
| // using chrome://flags/#enable-prerender2 or --enable-features=Prerender2 |
| // command line or a valid Origin Trial token in the page. |
| const base::Feature kPrerender2 { |
| "Prerender2", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| const base::Feature kPrerender2MemoryControls{"Prerender2MemoryControls", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| const char kPrerender2MemoryThresholdParamName[] = "memory_threshold_in_mb"; |
| |
| bool IsPrerender2Enabled() { |
| return base::FeatureList::IsEnabled(blink::features::kPrerender2); |
| } |
| |
| bool IsFencedFramesEnabled() { |
| return base::FeatureList::IsEnabled(blink::features::kFencedFrames); |
| } |
| |
| bool IsFencedFramesMPArchBased() { |
| return blink::features::kFencedFramesImplementationTypeParam.Get() == |
| blink::features::FencedFramesImplementationType::kMPArch; |
| } |
| |
| bool IsFencedFramesShadowDOMBased() { |
| return blink::features::kFencedFramesImplementationTypeParam.Get() == |
| blink::features::FencedFramesImplementationType::kShadowDOM; |
| } |
| |
| const base::Feature kInitialNavigationEntry{"InitialNavigationEntry", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| bool IsInitialNavigationEntryEnabled() { |
| return base::FeatureList::IsEnabled(blink::features::kInitialNavigationEntry); |
| } |
| |
| // Enable limiting previews loading hints to specific resource types. |
| const base::Feature kPreviewsResourceLoadingHintsSpecificResourceTypes{ |
| "PreviewsResourceLoadingHintsSpecificResourceTypes", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Perform a memory purge after a renderer is backgrounded. Formerly labelled as |
| // the "PurgeAndSuspend" experiment. |
| // |
| // TODO(https://crbug.com/926186): Disabled by default on Android for historical |
| // reasons. Consider enabling by default if experiment results are positive. |
| const base::Feature kPurgeRendererMemoryWhenBackgrounded { |
| "PurgeRendererMemoryWhenBackgrounded", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enables new behavior for window.open() and BarProp properties. |
| const base::Feature kWindowOpenNewPopupBehavior{ |
| "WindowOpenNewPopupBehavior", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Changes the default RTCPeerConnection constructor behavior to use Unified |
| // Plan as the SDP semantics. When the feature is enabled, Unified Plan is used |
| // unless the default is overridden (by passing {sdpSemantics:'plan-b'} as the |
| // argument). This was shipped in M72. |
| // The feature is still used by virtual test suites exercising Plan B. |
| const base::Feature kRTCUnifiedPlanByDefault{"RTCUnifiedPlanByDefault", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Determines if the SDP attrbute extmap-allow-mixed should be offered by |
| // default or not. The default value can be overridden by passing |
| // {offerExtmapAllowMixed:false} as an argument to the RTCPeerConnection |
| // constructor. |
| const base::Feature kRTCOfferExtmapAllowMixed{"RTCOfferExtmapAllowMixed", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables waiting for codec support status notification from GPU factory in RTC |
| // codec factories. |
| const base::Feature kRTCGpuCodecSupportWaiter{"kRTCGpuCodecSupportWaiter", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::FeatureParam<int> kRTCGpuCodecSupportWaiterTimeoutParam{ |
| &kRTCGpuCodecSupportWaiter, "timeout_ms", 3000}; |
| |
| // Prevents workers from sending IsolateInBackgroundNotification to V8 |
| // and thus instructs V8 to favor performance over memory on workers. |
| const base::Feature kV8OptimizeWorkersForPerformance{ |
| "V8OptimizeWorkersForPerformance", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether the implementation of the performance.measureMemory |
| // web API uses PerformanceManager or not. |
| const base::Feature kWebMeasureMemoryViaPerformanceManager{ |
| "WebMeasureMemoryViaPerformanceManager", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables negotiation of experimental multiplex codec in SDP. |
| const base::Feature kWebRtcMultiplexCodec{"WebRTC-MultiplexCodec", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Causes WebRTC to replace host ICE candidate IP addresses with generated |
| // names ending in ".local" and resolve them using mDNS. |
| // http://crbug.com/878465 |
| const base::Feature kWebRtcHideLocalIpsWithMdns{ |
| "WebRtcHideLocalIpsWithMdns", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Causes WebRTC to not set the color space of video frames on the receive side |
| // in case it's unspecified. Otherwise we will guess that the color space is |
| // BT709. http://crbug.com/1129243 |
| const base::Feature kWebRtcIgnoreUnspecifiedColorSpace{ |
| "WebRtcIgnoreUnspecifiedColorSpace", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, wake ups from throttleable TaskQueues are limited to 1 per |
| // minute in a page that has been backgrounded for 5 minutes. |
| // |
| // Intensive wake up throttling is enforced in addition to other throttling |
| // mechanisms: |
| // - 1 wake up per second in a background page or hidden cross-origin frame |
| // - 1% CPU time in a page that has been backgrounded for 10 seconds |
| // |
| // Feature tracking bug: https://crbug.com/1075553 |
| // |
| // The base::Feature should not be read from; rather the provided accessors |
| // should be used, which also take into account the managed policy override of |
| // the feature. |
| // |
| // The base::Feature is enabled by default on all platforms. However, on |
| // Android, it has no effect because page freezing kicks in at the same time. It |
| // would have an effect if the grace period ("grace_period_seconds" param) was |
| // reduced. |
| const base::Feature kIntensiveWakeUpThrottling{ |
| "IntensiveWakeUpThrottling", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Name of the parameter that controls the grace period during which there is no |
| // intensive wake up throttling after a page is hidden. Defined here to allow |
| // access from about_flags.cc. The FeatureParam is defined in |
| // third_party/blink/renderer/platform/scheduler/common/features.cc. |
| const char kIntensiveWakeUpThrottling_GracePeriodSeconds_Name[] = |
| "grace_period_seconds"; |
| |
| // Throttles Javascript timer wake ups on foreground pages. |
| const base::Feature kThrottleForegroundTimers{ |
| "ThrottleForegroundTimers", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) |
| // Run-time feature for the |rtc_use_h264| encoder/decoder. |
| const base::Feature kWebRtcH264WithOpenH264FFmpeg{ |
| "WebRTC-H264WithOpenH264FFmpeg", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) |
| |
| // Experiment of the delay from navigation to starting an update of a service |
| // worker's script. |
| const base::Feature kServiceWorkerUpdateDelay{ |
| "ServiceWorkerUpdateDelay", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable the use of Speculation Rules in access the private prefetch proxy |
| // (chrome/browser/prefetch/prefetch_proxy/). |
| // https://crbug.com/1190167 |
| const base::Feature kSpeculationRulesPrefetchProxy { |
| "SpeculationRulesPrefetchProxy", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Freeze scheduler task queues in background after allowed grace time. |
| // "stop" is a legacy name. |
| const base::Feature kStopInBackground { |
| "stop-in-background", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Freeze scheduler task queues in background on network idle. |
| // This feature only works if stop-in-background is enabled. |
| const base::Feature kFreezeBackgroundTabOnNetworkIdle{ |
| "freeze-background-tab-on-network-idle", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable the Storage Access API. https://crbug.com/989663. |
| const base::Feature kStorageAccessAPI{"StorageAccessAPI", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable text snippets in URL fragments. https://crbug.com/919204. |
| const base::Feature kTextFragmentAnchor{"TextFragmentAnchor", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables CSS selector fragment anchors. https://crbug.com/1252460 |
| const base::Feature kCssSelectorFragmentAnchor{ |
| "CssSelectorFragmentAnchor", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // File handling integration. https://crbug.com/829689 |
| const base::Feature kFileHandlingAPI{"FileHandlingAPI", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // File handling icons. https://crbug.com/1218213 |
| const base::Feature kFileHandlingIcons{"FileHandlingIcons", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allows for synchronous XHR requests during page dismissal |
| const base::Feature kAllowSyncXHRInPageDismissal{ |
| "AllowSyncXHRInPageDismissal", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Font enumeration and data access. https://crbug.com/535764 |
| const base::Feature kFontAccess{"FontAccess", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Kill switch for the Compute Pressure API. https://crbug.com/1067627 |
| const base::Feature kComputePressure{"ComputePressure", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Prefetch request properties are updated to be privacy-preserving. See |
| // crbug.com/988956. |
| const base::Feature kPrefetchPrivacyChanges{"PrefetchPrivacyChanges", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Decodes jpeg 4:2:0 formatted images to YUV instead of RGBX and stores in this |
| // format in the image decode cache. See crbug.com/919627 for details on the |
| // feature. |
| const base::Feature kDecodeJpeg420ImagesToYUV{"DecodeJpeg420ImagesToYUV", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Decodes lossy WebP images to YUV instead of RGBX and stores in this format |
| // in the image decode cache. See crbug.com/900264 for details on the feature. |
| const base::Feature kDecodeLossyWebPImagesToYUV{ |
| "DecodeLossyWebPImagesToYUV", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables cache-aware WebFonts loading. See https://crbug.com/570205. |
| // The feature is disabled on Android for WebView API issue discussed at |
| // https://crbug.com/942440. |
| const base::Feature kWebFontsCacheAwareTimeoutAdaption { |
| "WebFontsCacheAwareTimeoutAdaption", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enabled to block programmatic focus in subframes when not triggered by user |
| // activation (see htpps://crbug.com/954349). |
| const base::Feature kBlockingFocusWithoutUserActivation{ |
| "BlockingFocusWithoutUserActivation", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // A server-side switch for the REALTIME_AUDIO thread priority of |
| // RealtimeAudioWorkletThread object. This can be controlled by a field trial, |
| // it will use the NORMAL priority thread when disabled. |
| const base::Feature kAudioWorkletThreadRealtimePriority{ |
| "AudioWorkletThreadRealtimePriority", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // A feature to reduce the set of resources fetched by No-State Prefetch. |
| const base::Feature kLightweightNoStatePrefetch { |
| "LightweightNoStatePrefetch", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Automatically convert light-themed pages to use a Blink-generated dark theme |
| const base::Feature kForceWebContentsDarkMode{ |
| "WebContentsForceDark", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // A feature to enable using the smallest image specified within image srcset |
| // for users with Save Data enabled. |
| const base::Feature kSaveDataImgSrcset{"SaveDataImgSrcset", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Which algorithm should be used for color inversion? |
| const base::FeatureParam<ForceDarkInversionMethod>::Option |
| forcedark_inversion_method_options[] = { |
| {ForceDarkInversionMethod::kUseBlinkSettings, |
| "use_blink_settings_for_method"}, |
| {ForceDarkInversionMethod::kHslBased, "hsl_based"}, |
| {ForceDarkInversionMethod::kCielabBased, "cielab_based"}, |
| {ForceDarkInversionMethod::kRgbBased, "rgb_based"}}; |
| |
| const base::FeatureParam<ForceDarkInversionMethod> |
| kForceDarkInversionMethodParam{&kForceWebContentsDarkMode, |
| "inversion_method", |
| ForceDarkInversionMethod::kUseBlinkSettings, |
| &forcedark_inversion_method_options}; |
| |
| // Should images be inverted? |
| const base::FeatureParam<ForceDarkImageBehavior>::Option |
| forcedark_image_behavior_options[] = { |
| {ForceDarkImageBehavior::kUseBlinkSettings, |
| "use_blink_settings_for_images"}, |
| {ForceDarkImageBehavior::kInvertNone, "none"}, |
| {ForceDarkImageBehavior::kInvertSelectively, "selective"}}; |
| |
| const base::FeatureParam<ForceDarkImageBehavior> kForceDarkImageBehaviorParam{ |
| &kForceWebContentsDarkMode, "image_behavior", |
| ForceDarkImageBehavior::kUseBlinkSettings, |
| &forcedark_image_behavior_options}; |
| |
| // Do not invert text lighter than this. |
| // Range: 0 (do not invert any text) to 255 (invert all text) |
| // Can also set to -1 to let Blink's internal settings control the value |
| const base::FeatureParam<int> kForceDarkForegroundLightnessThresholdParam{ |
| &kForceWebContentsDarkMode, "foreground_lightness_threshold", -1}; |
| |
| // Do not invert backgrounds darker than this. |
| // Range: 0 (invert all backgrounds) to 255 (invert no backgrounds) |
| // Can also set to -1 to let Blink's internal settings control the value |
| const base::FeatureParam<int> kForceDarkBackgroundLightnessThresholdParam{ |
| &kForceWebContentsDarkMode, "background_lightness_threshold", -1}; |
| |
| const base::FeatureParam<ForceDarkIncreaseTextContrast>::Option |
| forcedark_increase_text_contrast_options[] = { |
| {ForceDarkIncreaseTextContrast::kUseBlinkSettings, |
| "use_blink_settings_for_method"}, |
| {ForceDarkIncreaseTextContrast::kFalse, "false"}, |
| {ForceDarkIncreaseTextContrast::kTrue, "true"}}; |
| |
| // Should text contrast be increased. |
| const base::FeatureParam<ForceDarkIncreaseTextContrast> |
| kForceDarkIncreaseTextContrastParam{ |
| &kForceWebContentsDarkMode, "increase_text_contrast", |
| ForceDarkIncreaseTextContrast::kUseBlinkSettings, |
| &forcedark_increase_text_contrast_options}; |
| |
| // Instructs WebRTC to honor the Min/Max Video Encode Accelerator dimensions. |
| const base::Feature kWebRtcUseMinMaxVEADimensions { |
| "WebRtcUseMinMaxVEADimensions", |
| // TODO(crbug.com/1008491): enable other platforms. |
| #if BUILDFLAG(IS_CHROMEOS_ASH) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Blink garbage collection. |
| // Enables compaction of backing stores on Blink's heap. |
| const base::Feature kBlinkHeapCompaction{"BlinkHeapCompaction", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| // Enables concurrently marking Blink's heap. |
| const base::Feature kBlinkHeapConcurrentMarking{ |
| "BlinkHeapConcurrentMarking", base::FEATURE_ENABLED_BY_DEFAULT}; |
| // Enables concurrently sweeping Blink's heap. |
| const base::Feature kBlinkHeapConcurrentSweeping{ |
| "BlinkHeapConcurrentSweeping", base::FEATURE_ENABLED_BY_DEFAULT}; |
| // Enables incrementally marking Blink's heap. |
| const base::Feature kBlinkHeapIncrementalMarking{ |
| "BlinkHeapIncrementalMarking", base::FEATURE_ENABLED_BY_DEFAULT}; |
| // Enables a marking stress mode that schedules more garbage collections and |
| // also adds additional verification passes. |
| const base::Feature kBlinkHeapIncrementalMarkingStress{ |
| "BlinkHeapIncrementalMarkingStress", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether we use ThreadPriority::DISPLAY for renderer |
| // compositor & IO threads. |
| const base::Feature kBlinkCompositorUseDisplayThreadPriority { |
| "BlinkCompositorUseDisplayThreadPriority", |
| #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // When enabled, enforces new interoperable semantics for 3D transforms. |
| // See crbug.com/1008483. |
| const base::Feature kBackfaceVisibilityInterop{ |
| "BackfaceVisibilityInterop", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, beacons (and friends) have ResourceLoadPriority::kLow, |
| // not ResourceLoadPriority::kVeryLow. |
| const base::Feature kSetLowPriorityForBeacon{"SetLowPriorityForBeacon", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled allows the header name used in the blink |
| // CacheStorageCodeCacheHint runtime feature to be modified. This runtime |
| // feature disables generating full code cache for responses stored in |
| // cache_storage during a service worker install event. The runtime feature |
| // must be enabled via the blink runtime feature mechanism, however. |
| const base::Feature kCacheStorageCodeCacheHintHeader{ |
| "CacheStorageCodeCacheHintHeader", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<std::string> kCacheStorageCodeCacheHintHeaderName{ |
| &kCacheStorageCodeCacheHintHeader, "name", "x-CacheStorageCodeCacheHint"}; |
| |
| // When enabled, the beforeunload handler is dispatched when a frame is frozen. |
| // This allows the browser to know whether discarding the frame could result in |
| // lost user data, at the cost of extra CPU usage. The feature will be removed |
| // once we have determine whether the CPU cost is acceptable. |
| const base::Feature kDispatchBeforeUnloadOnFreeze{ |
| "DispatchBeforeUnloadOnFreeze", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the use of GpuMemoryBuffer images for low latency 2d canvas. |
| // TODO(khushalsagar): Enable this if we're using SurfaceControl and GMBs allow |
| // us to overlay these resources. |
| const base::Feature kLowLatencyCanvas2dImageChromium { |
| "LowLatencyCanvas2dImageChromium", |
| #if BUILDFLAG(IS_CHROMEOS_ASH) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif // BUILDFLAG(IS_CHROMEOS) |
| }; |
| |
| // Enables the use of shared image swap chains for low latency 2d canvas. |
| const base::Feature kLowLatencyCanvas2dSwapChain{ |
| "LowLatencyCanvas2dSwapChain", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the use of shared image swap chains for low latency webgl canvas. |
| const base::Feature kLowLatencyWebGLSwapChain{"LowLatencyWebGLSwapChain", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables Dawn-accelerated 2D canvas. |
| const base::Feature kDawn2dCanvas{"Dawn2dCanvas", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables small accelerated canvases for webview (crbug.com/1004304) |
| const base::Feature kWebviewAccelerateSmallCanvases{ |
| "WebviewAccelerateSmallCanvases", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Let accelerated canvases remain accelerated after readback |
| // (crbug.com/1288118) |
| const base::Feature kCanvas2dStaysGPUOnReadback{ |
| "Canvas2dStaysGPUOnReadback", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, frees up CachedMetadata after consumption by script resources |
| // and modules. Needed for the experiment in http://crbug.com/1045052. |
| const base::Feature kDiscardCodeCacheAfterFirstUse{ |
| "DiscardCodeCacheAfterFirstUse", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kCacheCodeOnIdle{"CacheCodeOnIdle", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<int> kCacheCodeOnIdleDelayParam{&kCacheCodeOnIdle, |
| "delay-in-ms", 0}; |
| |
| // Kill switch for the new element.offsetParent behavior. |
| // TODO(crbug.com/920069): Remove this once the feature has |
| // landed and no compat issues are reported. |
| const base::Feature kOffsetParentNewSpecBehavior{ |
| "OffsetParentNewSpecBehavior", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kKeepScriptResourceAlive{"KeepScriptResourceAlive", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the JPEG XL Image File Format (JXL). |
| const base::Feature kJXL{"JXL", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Make all pending 'display: auto' web fonts enter the swap or failure period |
| // immediately before reaching the LCP time limit (~2500ms), so that web fonts |
| // do not become a source of bad LCP. |
| const base::Feature kAlignFontDisplayAutoTimeoutWithLCPGoal{ |
| "AlignFontDisplayAutoTimeoutWithLCPGoal", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // The amount of time allowed for 'display: auto' web fonts to load without |
| // intervention, counted from navigation start. |
| const base::FeatureParam<int> |
| kAlignFontDisplayAutoTimeoutWithLCPGoalTimeoutParam{ |
| &kAlignFontDisplayAutoTimeoutWithLCPGoal, "lcp-limit-in-ms", 2000}; |
| |
| const base::FeatureParam<AlignFontDisplayAutoTimeoutWithLCPGoalMode>::Option |
| align_font_display_auto_timeout_with_lcp_goal_modes[] = { |
| {AlignFontDisplayAutoTimeoutWithLCPGoalMode::kToFailurePeriod, |
| "failure"}, |
| {AlignFontDisplayAutoTimeoutWithLCPGoalMode::kToSwapPeriod, "swap"}}; |
| const base::FeatureParam<AlignFontDisplayAutoTimeoutWithLCPGoalMode> |
| kAlignFontDisplayAutoTimeoutWithLCPGoalModeParam{ |
| &kAlignFontDisplayAutoTimeoutWithLCPGoal, "intervention-mode", |
| AlignFontDisplayAutoTimeoutWithLCPGoalMode::kToSwapPeriod, |
| &align_font_display_auto_timeout_with_lcp_goal_modes}; |
| |
| // Enable throttling of fetch() requests from service workers in the |
| // installing state. The limit of 3 was chosen to match the limit |
| // in background main frames. In addition, trials showed that this |
| // did not cause excessive timeouts and resulted in a net improvement |
| // in successful install rate on some platforms. |
| const base::Feature kThrottleInstallingServiceWorker{ |
| "ThrottleInstallingServiceWorker", base::FEATURE_ENABLED_BY_DEFAULT}; |
| const base::FeatureParam<int> kInstallingServiceWorkerOutstandingThrottledLimit{ |
| &kThrottleInstallingServiceWorker, "limit", 3}; |
| |
| const base::Feature kInputPredictorTypeChoice{ |
| "InputPredictorTypeChoice", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kResamplingInputEvents{"ResamplingInputEvents", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kInputTargetClientHighPriority{ |
| "InputTargetClientHighPriority", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kResamplingScrollEvents{"ResamplingScrollEvents", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the device-memory, resource-width, viewport-width and DPR client |
| // hints to be sent to third-party origins if the first-party has opted in to |
| // receiving client hints, regardless of Permissions Policy. |
| const base::Feature kAllowClientHintsToThirdParty { |
| "AllowClientHintsToThirdParty", |
| #if BUILDFLAG(IS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| const base::Feature kFilteringScrollPrediction{ |
| "FilteringScrollPrediction", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kKalmanHeuristics{"KalmanHeuristics", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kKalmanDirectionCutOff{"KalmanDirectionCutOff", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kSkipTouchEventFilter{"SkipTouchEventFilter", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| const char kSkipTouchEventFilterTypeParamName[] = "type"; |
| const char kSkipTouchEventFilterTypeParamValueDiscrete[] = "discrete"; |
| const char kSkipTouchEventFilterTypeParamValueAll[] = "all"; |
| const char kSkipTouchEventFilterFilteringProcessParamName[] = |
| "skip_filtering_process"; |
| const char kSkipTouchEventFilterFilteringProcessParamValueBrowser[] = "browser"; |
| const char kSkipTouchEventFilterFilteringProcessParamValueBrowserAndRenderer[] = |
| "browser_and_renderer"; |
| |
| // Disabling this will cause parkable strings to never be compressed. |
| // This is useful for headless mode + virtual time. Since virtual time advances |
| // quickly, strings may be parked too eagerly in that mode. |
| const base::Feature kCompressParkableStrings{"CompressParkableStrings", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enabling this will cause parkable strings to use Snappy for compression iff |
| // kCompressParkableStrings is enabled. |
| const base::Feature kUseSnappyForParkableStrings{ |
| "UseSnappyForParkableStrings", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enabling this will delay the first aging of strings by 60 seconds instead of |
| // the default. See comment around the use of the feature for the logic behind |
| // the delay. |
| const base::Feature kDelayFirstParkingOfStrings{ |
| "DelayFirstParkingOfStrings", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| bool ParkableStringsUseSnappy() { |
| return base::FeatureList::IsEnabled(kUseSnappyForParkableStrings); |
| } |
| |
| bool IsParkableStringsToDiskEnabled() { |
| // Always enabled as soon as compression is enabled. |
| return base::FeatureList::IsEnabled(kCompressParkableStrings); |
| } |
| |
| const base::Feature kCLSScrollAnchoring{"CLSScrollAnchoring", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Reduce the amount of information in the default 'referer' header for |
| // cross-origin requests. |
| const base::Feature kReducedReferrerGranularity{ |
| "ReducedReferrerGranularity", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the constant streaming in the ContentCapture task. |
| const base::Feature kContentCaptureConstantStreaming = { |
| "ContentCaptureConstantStreaming", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Dispatches a fake fetch event to a service worker to check the offline |
| // capability of the site before promoting installation. |
| // See https://crbug.com/965802 for more details. |
| const base::Feature kCheckOfflineCapability{"CheckOfflineCapability", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<CheckOfflineCapabilityMode>::Option |
| check_offline_capability_types[] = { |
| {CheckOfflineCapabilityMode::kWarnOnly, "warn_only"}, |
| {CheckOfflineCapabilityMode::kEnforce, "enforce"}}; |
| const base::FeatureParam<CheckOfflineCapabilityMode> |
| kCheckOfflineCapabilityParam{&kCheckOfflineCapability, "check_mode", |
| CheckOfflineCapabilityMode::kWarnOnly, |
| &check_offline_capability_types}; |
| |
| // The "BackForwardCacheABExperimentControl" feature indicates the state of the |
| // same-site BackForwardCache experiment. This information is used when sending |
| // the "Sec-bfcache-experiment" HTTP Header on resource requests. The header |
| // value is determined by the value of the "experiment_group_for_http_header" |
| // feature parameter. |
| const base::Feature kBackForwardCacheABExperimentControl{ |
| "BackForwardCacheABExperimentControl", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const char kBackForwardCacheABExperimentGroup[] = |
| "experiment_group_for_http_header"; |
| |
| // Whether we should composite a PLSA (paint layer scrollable area) even if it |
| // means losing lcd text. |
| const base::Feature kPreferCompositingToLCDText = { |
| "PreferCompositingToLCDText", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kLogUnexpectedIPCPostedToBackForwardCachedDocuments{ |
| "LogUnexpectedIPCPostedToBackForwardCachedDocuments", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables web apps to provide theme color and background color overrides for |
| // dark mode. |
| const base::Feature kWebAppEnableDarkMode{"WebAppEnableDarkMode", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the "handle_links" manifest field for web apps. |
| // Explainer: |
| // https://github.com/WICG/pwa-url-handler/blob/main/handle_links/explainer.md |
| const base::Feature kWebAppEnableHandleLinks{"WebAppEnableHandleLinks", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the "launch_handler" manifest field for web apps. |
| // Explainer: https://github.com/WICG/sw-launch/blob/main/launch_handler.md |
| const base::Feature kWebAppEnableLaunchHandler{ |
| "WebAppEnableLaunchHandler", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the deprecated syntax for the above "launch_handler": { |
| // "route_to": "existing-client", |
| // "navigate_existing_client: "always" | "never" |
| // } |
| const base::Feature kWebAppEnableLaunchHandlerV1API{ |
| "WebAppEnableLaunchHandlerV1API", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables Unique ID feature in web apps. Controls parsing of "id" field in web |
| // app manifests. See explainer for more information: |
| // https://github.com/philloooo/pwa-unique-id |
| const base::Feature kWebAppEnableManifestId{"WebAppEnableManifestId", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the "translations" manifest field for web apps. |
| const base::Feature kWebAppEnableTranslations{ |
| "WebAppEnableTranslations", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls URL handling feature in web apps. Controls parsing of "url_handlers" |
| // field in web app manifests. See explainer for more information: |
| // https://github.com/WICG/pwa-url-handler/blob/main/explainer.md |
| const base::Feature kWebAppEnableUrlHandlers{"WebAppEnableUrlHandlers", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Makes network loading tasks unfreezable so that they can be processed while |
| // the page is frozen. |
| const base::Feature kLoadingTasksUnfreezable{"LoadingTasksUnfreezable", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls how max frame rates are enforced in MediaStreamTracks. |
| // TODO(crbug.com/1152307): Remove in M91. |
| const base::Feature kMediaStreamTrackUseConfigMaxFrameRate{ |
| "MediaStreamTrackUseConfigMaxFrameRate", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, the SubresourceFilter receives calls from the ResourceLoader |
| // to perform additional checks against any aliases found from DNS CNAME records |
| // for the requested URL. |
| const base::Feature kSendCnameAliasesToSubresourceFilterFromRenderer{ |
| "SendCnameAliasesToSubresourceFilterFromRenderer", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kDisableDocumentDomainByDefault{ |
| "DisableDocumentDomainByDefault", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Scopes the memory cache to a fetcher i.e. document/frame. Any resource cached |
| // in the blink cache will only be reused if the most recent fetcher that |
| // fetched it was the same as the current document. |
| const base::Feature kScopeMemoryCachePerContext{ |
| "ScopeMemoryCachePerContext", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allow image context menu selections to penetrate through transparent |
| // elements. |
| const base::Feature kEnablePenetratingImageSelection{ |
| "EnablePenetratingImageSelection", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When enabled, permits shared/root element transitions. See |
| // https://github.com/WICG/shared-element-transitions. |
| const base::Feature kDocumentTransition{"DocumentTransition", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Used to configure a per-origin allowlist of performance.mark events that are |
| // permitted to be included in slow reports traces. See crbug.com/1181774. |
| const base::Feature kBackgroundTracingPerformanceMark{ |
| "BackgroundTracingPerformanceMark", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<std::string> |
| kBackgroundTracingPerformanceMark_AllowList{ |
| &kBackgroundTracingPerformanceMark, "allow_list", ""}; |
| |
| // Controls whether the Sanitizer API is available. |
| const base::Feature kSanitizerAPI{"SanitizerAPI", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether the Sanitizer API allows namespaced content (SVG + MathML). |
| // |
| // This feature is unlikely to be launched as-is. The primary purpose is to |
| // allow testing of different non-standard configurations. |
| const base::Feature kSanitizerAPINamespaces{"SanitizerAPINamespacesForTesting", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Kill switch for the blocking of the navigation of top from a cross origin |
| // iframe to a different protocol. TODO(https://crbug.com/1151507): Remove in |
| // M92. |
| const base::Feature kBlockCrossOriginTopNavigationToDiffentScheme{ |
| "BlockCrossOriginTopNavigationToDiffentScheme", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables a Web API for websites to access admin-provided configuration. |
| const base::Feature kManagedConfiguration{"ManagedConfiguration", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Causes all cross-origin iframes, both same-process and out-of-process, to |
| // have their rendering throttled on display:none or zero-area. |
| const base::Feature kThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes{ |
| "ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Kill switch for the Interest Group API, i.e. if disabled, the |
| // API exposure will be disabled regardless of the OT config. |
| const base::Feature kInterestGroupStorage{"InterestGroupStorage", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| // TODO(crbug.com/1197209): Adjust these limits in response to usage. |
| const base::FeatureParam<int> kInterestGroupStorageMaxOwners{ |
| &kInterestGroupStorage, "max_owners", 1000}; |
| const base::FeatureParam<int> kInterestGroupStorageMaxGroupsPerOwner{ |
| &kInterestGroupStorage, "max_groups_per_owner", 1000}; |
| const base::FeatureParam<int> kInterestGroupStorageMaxOpsBeforeMaintenance{ |
| &kInterestGroupStorage, "max_ops_before_maintenance", 1000000}; |
| |
| // Enable the availability of the ad interest group API as part of the |
| // origin trial for FLEDGE or PARAKEET. |
| const base::Feature kAdInterestGroupAPI{"AdInterestGroupAPI", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Feature flag to enable PARAKEET implementation (See |
| // https://github.com/WICG/privacy-preserving-ads/blob/main/Parakeet.md). |
| // See also https://crbug.com/1249186. |
| const base::Feature kParakeet{"Parakeet", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // See https://github.com/WICG/turtledove/blob/main/FLEDGE.md |
| // Enables FLEDGE implementation. See https://crbug.com/1186444. |
| const base::Feature kFledge{"Fledge", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // See https://github.com/WICG/turtledove/blob/main/FLEDGE.md |
| // Changes default Permissions Policy for features join-ad-interest-group and |
| // run-ad-auction to a more restricted EnableForSelf. |
| const base::Feature kAdInterestGroupAPIRestrictedPolicyByDefault{ |
| "AdInterestGroupAPIRestrictedPolicyByDefault", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // See https://github.com/WICG/turtledove/blob/main/FLEDGE.md |
| // Feature flag to enable debug reporting APIs. |
| const base::Feature kBiddingAndScoringDebugReportingAPI{ |
| "BiddingAndScoringDebugReportingAPI", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables URN URLs like those produced by FLEDGE auctions to be displayed by |
| // iframes (instead of requiring fenced frames). This is only intended to be |
| // enabled as part of the FLEDGE origin trial. |
| const base::Feature kAllowURNsInIframes{"AllowURNsInIframes", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| BLINK_COMMON_EXPORT bool IsAllowURNsInIframeEnabled() { |
| return base::FeatureList::IsEnabled(blink::features::kAllowURNsInIframes); |
| } |
| |
| // https://github.com/jkarlin/topics |
| // Kill switch for the Topics API. |
| const base::Feature kBrowsingTopics{"BrowsingTopics", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| // The number of epochs from where to calculate the topics to give to a |
| // requesting contexts. |
| const base::FeatureParam<int> kBrowsingTopicsNumberOfEpochsToExpose{ |
| &kBrowsingTopics, "number_of_epochs_to_expose", 3}; |
| // The periodic topics calculation interval. |
| const base::FeatureParam<base::TimeDelta> kBrowsingTopicsTimePeriodPerEpoch{ |
| &kBrowsingTopics, "time_period_per_epoch", base::Days(7)}; |
| // The number of top topics to derive and to keep for each epoch (week). |
| const base::FeatureParam<int> kBrowsingTopicsNumberOfTopTopicsPerEpoch{ |
| &kBrowsingTopics, "number_of_top_topics_per_epoch", 5}; |
| // The probability (in percent number) to return the random topic to a site. The |
| // "random topic" is per-site, and is selected from the full taxonomy uniformly |
| // at random, and each site has a |
| // `kBrowsingTopicsUseRandomTopicProbabilityPercent`% chance to see their random |
| // topic instead of one of the top topics. |
| const base::FeatureParam<int> kBrowsingTopicsUseRandomTopicProbabilityPercent{ |
| &kBrowsingTopics, "use_random_topic_probability_percent", 5}; |
| // How many epochs (weeks) of API usage data (i.e. topics observations) will be |
| // based off for the filtering of topics for a calling context. |
| const base::FeatureParam<int> |
| kBrowsingTopicsNumberOfEpochsOfObservationDataToUseForFiltering{ |
| &kBrowsingTopics, |
| "number_of_epochs_of_observation_data_to_use_for_filtering", 3}; |
| // The max number of observed-by context domains to keep for each top topic. |
| // The intent is to cap the in-use memory. |
| const base::FeatureParam<int> |
| kBrowsingTopicsMaxNumberOfApiUsageContextDomainsToKeepPerTopic{ |
| &kBrowsingTopics, |
| "max_number_of_api_usage_context_domains_to_keep_per_topic", 1000}; |
| // The max number of entries allowed to be retrieved from the |
| // `BrowsingTopicsSiteDataStorage` database for each query for the API usage |
| // contexts. The query will occur once per epoch (week) at topics calculation |
| // time. The intent is to cap the peak memory usage. |
| const base::FeatureParam<int> |
| kBrowsingTopicsMaxNumberOfApiUsageContextEntriesToLoadPerEpoch{ |
| &kBrowsingTopics, |
| "max_number_of_api_usage_context_entries_to_load_per_epoch", 100000}; |
| // The max number of API usage context domains allowed to be stored per page |
| // load. |
| const base::FeatureParam<int> |
| kBrowsingTopicsMaxNumberOfApiUsageContextDomainsToStorePerPageLoad{ |
| &kBrowsingTopics, |
| "max_number_of_api_usage_context_domains_to_store_per_page_load", 30}; |
| // Encodes the configuration parameters above. Each version number should only |
| // be mapped to one configuration set. In practice, this can be guaranteed by |
| // always bumping up the version number whenever parameters are updated. |
| const base::FeatureParam<int> kBrowsingTopicsConfigVersion{&kBrowsingTopics, |
| "config_version", 1}; |
| // The taxonomy version. This only affects the topics classification that occurs |
| // during this browser session, and doesn't affect the pre-existing epochs. |
| const base::FeatureParam<int> kBrowsingTopicsTaxonomyVersion{ |
| &kBrowsingTopics, "taxonomy_version", 1}; |
| |
| // If enabled, the check for whether the IP address is publicly routable will be |
| // bypassed when determining the eligibility for a page to be included in topics |
| // calculation. This is useful for developers to test in local environment. |
| const base::Feature kBrowsingTopicsBypassIPIsPubliclyRoutableCheck{ |
| "BrowsingTopicsBypassIPIsPubliclyRoutableCheck", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When <dialog>s are closed, this focuses the "previously focused" element |
| // which had focus when the <dialog> was first opened. |
| // TODO(crbug.com/649162): Remove DialogFocusNewSpecBehavior after |
| // the feature is in stable with no issues. |
| const base::Feature kDialogFocusNewSpecBehavior{ |
| "DialogFocusNewSpecBehavior", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Makes autofill look across shadow boundaries when collecting form controls to |
| // fill. |
| const base::Feature kAutofillShadowDOM{"AutofillShadowDOM", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| // Allows read/write of custom formats with unsanitized clipboard content. See |
| // crbug.com/106449. |
| const base::Feature kClipboardCustomFormats{"ClipboardCustomFormats", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Uses page viewport instead of frame viewport in the Largest Contentful Paint |
| // heuristic where images occupying the full viewport are ignored. |
| const base::Feature kUsePageViewportInLCP{"UsePageViewportInLCP", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable `Sec-CH-UA-Platform` client hint and request header to be sent by |
| // default |
| const base::Feature kUACHPlatformEnabledByDefault{ |
| "UACHPlatformEnabledByDefault", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When enabled, allow dropping alpha on media streams for rendering sinks if |
| // other sinks connected do not use alpha. |
| const base::Feature kAllowDropAlphaForMediaStream{ |
| "AllowDropAlphaForMediaStream", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables partitioning of third party storage (IndexedDB, CacheStorage, etc.) |
| // by the top level site to reduce fingerprinting. |
| const base::Feature kThirdPartyStoragePartitioning{ |
| "ThirdPartyStoragePartitioning", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // API that allows installed PWAs to add additional shortcuts by means of |
| // installing sub app components. |
| const base::Feature kDesktopPWAsSubApps{"DesktopPWAsSubApps", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Suppresses console errors for CORS problems which report an associated |
| // inspector issue anyway. |
| const base::Feature kCORSErrorsIssueOnly{"CORSErrorsIssueOnly", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kPersistentQuotaIsTemporaryQuota{ |
| "PersistentQuotaIsTemporaryQuota", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kDelayLowPriorityRequestsAccordingToNetworkState{ |
| "DelayLowPriorityRequestsAccordingToNetworkState", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kIncludeInitiallyInvisibleImagesInLCP{ |
| "IncludeInitiallyInvisibleImagesInLCP", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kIncludeBackgroundSVGInLCP{ |
| "IncludeBackgroundSVGInLCP", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::FeatureParam<int> kMaxNumOfThrottleableRequestsInTightMode{ |
| &kDelayLowPriorityRequestsAccordingToNetworkState, |
| "MaxNumOfThrottleableRequestsInTightMode", 5}; |
| |
| const base::Feature kHTMLParamElementUrlSupport{ |
| "HTMLParamElementUrlSupport", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::FeatureParam<base::TimeDelta> kHttpRttThreshold{ |
| &kDelayLowPriorityRequestsAccordingToNetworkState, "HttpRttThreshold", |
| base::Milliseconds(450)}; |
| |
| const base::FeatureParam<double> kCostReductionOfMultiplexedRequests{ |
| &kDelayLowPriorityRequestsAccordingToNetworkState, |
| "CostReductionOfMultiplexedRequests", 0.5}; |
| |
| const base::Feature kForceMajorVersionInMinorPositionInUserAgent{ |
| "ForceMajorVersionInMinorPositionInUserAgent", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable `sec-ch-device-memory` client hint. |
| const base::Feature kClientHintsDeviceMemory{"ClientHintsDeviceMemory", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable `sec-ch-dpr` client hint. |
| const base::Feature kClientHintsDPR{"ClientHintsDPR", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable `sec-ch-width` client hint. |
| const base::Feature kClientHintsResourceWidth{"ClientHintsResourceWidth", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable `sec-ch-viewport-width` client hint. |
| const base::Feature kClientHintsViewportWidth{"ClientHintsViewportWidth", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable legacy `device-memory` client hint. |
| const base::Feature kClientHintsDeviceMemory_DEPRECATED{ |
| "ClientHintsDeviceMemory_DEPRECATED", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable legacy `dpr` client hint. |
| const base::Feature kClientHintsDPR_DEPRECATED{ |
| "ClientHintsDPR_DEPRECATED", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable legacy `width` client hint. |
| const base::Feature kClientHintsResourceWidth_DEPRECATED{ |
| "ClientHintsResourceWidth_DEPRECATED", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable legacy `viewport-width` client hint. |
| const base::Feature kClientHintsViewportWidth_DEPRECATED{ |
| "ClientHintsViewportWidth_DEPRECATED", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // If enabled, the setTimeout(..., 0) will not clamp to 1ms. |
| // Tracking bug: https://crbug.com/402694. |
| const base::Feature kSetTimeoutWithoutClamp{"SetTimeoutWithoutClamp", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| namespace { |
| |
| enum class SetTimeoutWithout1MsClampPolicyOverride { |
| kNoOverride, |
| kForceDisable, |
| kForceEnable |
| }; |
| |
| bool g_set_timeout_without_1m_clamp_policy_override_cached = false; |
| |
| // Returns the SetTimeoutWithout1MsClamp policy settings. This is calculated |
| // once on first access and cached. |
| SetTimeoutWithout1MsClampPolicyOverride |
| GetSetTimeoutWithout1MsClampPolicyOverride() { |
| static SetTimeoutWithout1MsClampPolicyOverride policy = |
| SetTimeoutWithout1MsClampPolicyOverride::kNoOverride; |
| if (g_set_timeout_without_1m_clamp_policy_override_cached) |
| return policy; |
| |
| // Otherwise, check the command-line for the renderer. Only values of "0" |
| // and "1" are valid, anything else is ignored (and allows the base::Feature |
| // to control the feature). This slow path will only be hit once per renderer |
| // process. |
| std::string value = |
| base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| switches::kSetTimeoutWithout1MsClampPolicy); |
| if (value == switches::kSetTimeoutWithout1MsClampPolicy_ForceEnable) { |
| policy = SetTimeoutWithout1MsClampPolicyOverride::kForceEnable; |
| } else if (value == switches::kSetTimeoutWithout1MsClampPolicy_ForceDisable) { |
| policy = SetTimeoutWithout1MsClampPolicyOverride::kForceDisable; |
| } else { |
| policy = SetTimeoutWithout1MsClampPolicyOverride::kNoOverride; |
| } |
| g_set_timeout_without_1m_clamp_policy_override_cached = true; |
| return policy; |
| } |
| |
| } // namespace |
| |
| void ClearSetTimeoutWithout1MsClampPolicyOverrideCacheForTesting() { |
| // Tests may want to force recalculation of the cached policy value when |
| // exercising different configs. |
| g_set_timeout_without_1m_clamp_policy_override_cached = false; |
| } |
| |
| bool IsSetTimeoutWithoutClampEnabled() { |
| // If policy is present then respect it. |
| auto policy = GetSetTimeoutWithout1MsClampPolicyOverride(); |
| if (policy != SetTimeoutWithout1MsClampPolicyOverride::kNoOverride) |
| return policy == SetTimeoutWithout1MsClampPolicyOverride::kForceEnable; |
| // Otherwise respect the base::Feature. |
| return base::FeatureList::IsEnabled(features::kSetTimeoutWithoutClamp); |
| } |
| |
| // If enabled, the setTimeout(..., 0) will clamp to 4ms after a custom `nesting` |
| // level. |
| // Tracking bug: https://crbug.com/1108877. |
| const base::Feature kMaxUnthrottledTimeoutNestingLevel{ |
| "MaxUnthrottledTimeoutNestingLevel", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<int> kMaxUnthrottledTimeoutNestingLevelParam{ |
| &kMaxUnthrottledTimeoutNestingLevel, "nesting", 10}; |
| bool IsMaxUnthrottledTimeoutNestingLevelEnabled() { |
| return base::FeatureList::IsEnabled( |
| blink::features::kMaxUnthrottledTimeoutNestingLevel); |
| } |
| int GetMaxUnthrottledTimeoutNestingLevel() { |
| return kMaxUnthrottledTimeoutNestingLevelParam.Get(); |
| } |
| |
| const base::Feature kTabSwitchMetrics2{"TabSwitchMetrics2", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables reporting and web-exposure (respectively) of the time the first frame |
| // of an animated image was painted. |
| const base::Feature kLCPAnimatedImagesReporting{ |
| "LCPAnimatedImagesReporting", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // TODO(crbug.com/1185950): Remove this flag when the feature is fully launched |
| // and released to stable with no issues. |
| const base::Feature kAutoExpandDetailsElement{"AutoExpandDetailsElement", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables loading the response body earlier in navigation. |
| const base::Feature kEarlyBodyLoad{"EarlyBodyLoad", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables fetching the code cache earlier in navigation. |
| const base::Feature kEarlyCodeCache{"EarlyCodeCache", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allow use of an http-equiv meta tag to set client hints. |
| const base::Feature kClientHintsMetaHTTPEquivAcceptCH{ |
| "ClientHintsMetaHTTPEquivAcceptCH", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allow use of a named meta tag to set client hints. |
| const base::Feature kClientHintsMetaNameAcceptCH{ |
| "ClientHintsMetaNameAcceptCH", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kOriginAgentClusterDefaultEnabled{ |
| "OriginAgentClusterDefaultEnable", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kOriginAgentClusterDefaultWarning{ |
| "OriginAgentClusterDefaultWarning", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allow third-party delegation of client hint information. |
| const base::Feature kClientHintThirdPartyDelegation{ |
| "ClientHintThirdPartyDelegation", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| #if BUILDFLAG(IS_ANDROID) |
| // Enables prefetching Android fonts on renderer startup. |
| const base::Feature kPrefetchAndroidFonts{"PrefetchAndroidFonts", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif |
| |
| const base::Feature kCompositedCaret{"CompositedCaret", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kBackForwardCacheAppBanner{ |
| "BackForwardCacheAppBanner", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Initialize CSSDefaultStyleSheets early in renderer startup. |
| const base::Feature kDefaultStyleSheetsEarlyInit{ |
| "DefaultStyleSheetsEarlyInit", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kSystemColorChooser{"SystemColorChooser", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kNoForcedFrameUpdatesForWebTests{ |
| "NoForcedFrameUpdatesForWebTests", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // This flag makes ElementRareData lazily initialize infrequently used fields as |
| // another class called ElementSuperRareData to improve memory usage. |
| const base::Feature kElementSuperRareData{"ElementSuperRareData", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kClientHintsPartitionedCookies{ |
| "ClientHintsPartitionedCookies", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If enabled, the memory limit used for tiles is scaled by |
| // `kScaleTileMemoryLimitFactor`. |
| const base::Feature kScaleTileMemoryLimit{"ScaleTileMemoryLimit", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::FeatureParam<double> kScaleTileMemoryLimitFactor{ |
| &kScaleTileMemoryLimit, "Factor", 1.0}; |
| |
| const base::Feature kDurableClientHintsCache{"DurableClientHintsCache", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If enabled, allows web pages to use the experimental EditContext API to |
| // better control text input. See crbug.com/999184. |
| const base::Feature kEditContext{"EditContext", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables basic Multi-Screen Window Placement functionality. |
| const base::Feature kWindowPlacement{"WindowPlacement", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allows sites to request fullscreen and open a popup from a single gesture. |
| const base::Feature kWindowPlacementFullscreenCompanionWindow{ |
| "WindowPlacementFullscreenCompanionWindow", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allows sites to request fullscreen when the set of screens change. |
| const base::Feature kWindowPlacementFullscreenOnScreensChange{ |
| "WindowPlacementFullscreenOnScreensChange", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // TODO(crbug.com/1277431): This flag should be eventually disabled. |
| const base::Feature kEventPath{"EventPath", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Removes a paint invalidation of viewport constrained objects (sticky or |
| // fixed) after scrolling. |
| const base::Feature kOptimizeViewportConstrainedPaintInvalidation{ |
| "OptimizeViewportConstrainedPaintInvalidation", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kReduceUserAgentMinorVersion{ |
| "ReduceUserAgentMinorVersion", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kReportFCPOnlyOnSuccessfulCommit{ |
| "ReportFCPOnlyOnSuccessfulCommit", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables correctly computing whether dedicated workers are secure contexts. |
| // TODO(https://crbug.com/780031): Remove this once fully shipped. |
| const base::Feature kSecureContextFixForWorkers{ |
| "SecureContextFixForWorkers", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kZeroCopyTabCapture{"ZeroCopyTabCapture", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kUserAgentOverrideExperiment{ |
| "UserAgentOverrideExperiment", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allow access to WebSQL APIs. |
| const base::Feature kWebSQLAccess{"kWebSQLAccess", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Changes behavior of User-Agent Client Hints to send blank headers when the |
| // User-Agent string is overridden, instead of disabling the headers altogether. |
| const base::Feature kUACHOverrideBlank{"UACHOverrideBlank", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| #if BUILDFLAG(IS_WIN) |
| const base::Feature kPrewarmDefaultFontFamilies{ |
| "PrewarmDefaultFontFamilies", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<bool> kPrewarmStandard = {&kPrewarmDefaultFontFamilies, |
| "prewarm_standard", true}; |
| const base::FeatureParam<bool> kPrewarmFixed = {&kPrewarmDefaultFontFamilies, |
| "prewarm_fixed", true}; |
| const base::FeatureParam<bool> kPrewarmSerif = {&kPrewarmDefaultFontFamilies, |
| "prewarm_serif", true}; |
| const base::FeatureParam<bool> kPrewarmSansSerif = { |
| &kPrewarmDefaultFontFamilies, "prewarm_sans_serif", true}; |
| const base::FeatureParam<bool> kPrewarmCursive = {&kPrewarmDefaultFontFamilies, |
| "prewarm_cursive", true}; |
| const base::FeatureParam<bool> kPrewarmFantasy = {&kPrewarmDefaultFontFamilies, |
| "prewarm_fantasy", true}; |
| #endif |
| |
| // Enable `save-data` client hint. |
| const base::Feature kClientHintsSaveData{"ClientHintsSaveData", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kEstablishGpuChannelAsync{ |
| "EstablishGpuChannelAsync", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kDeferBeginMainFrameDuringLoading{ |
| "DeferBeginMainFrameDuringLoading", base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::FeatureParam<base::TimeDelta> kRecentBeginMainFrameCutoff = { |
| &kDeferBeginMainFrameDuringLoading, "recent_begin_main_frame_cutoff", |
| base::Milliseconds(150)}; |
| |
| } // namespace features |
| } // namespace blink |