| // Copyright 2015 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 "content/public/common/content_features.h" |
| #include "build/build_config.h" |
| |
| namespace features { |
| |
| // All features in alphabetical order. |
| |
| // Enables the allowActivationDelegation attribute on iframes. |
| // https://www.chromestatus.com/features/6025124331388928 |
| // |
| // TODO(mustaq): Deprecated, see kUserActivationPostMessageTransfer. |
| const base::Feature kAllowActivationDelegationAttr{ |
| "AllowActivationDelegationAttr", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables content-initiated, main frame navigations to data URLs. |
| // TODO(meacer): Remove when the deprecation is complete. |
| // https://www.chromestatus.com/feature/5669602927312896 |
| const base::Feature kAllowContentInitiatedDataUrlNavigations{ |
| "AllowContentInitiatedDataUrlNavigations", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Accepts Origin-Signed HTTP Exchanges to be signed with certificates |
| // that do not have CanSignHttpExchangesDraft extension. |
| // TODO(https://crbug.com/862003): Remove when certificates with |
| // CanSignHttpExchangesDraft extension are available from trusted CAs. |
| const base::Feature kAllowSignedHTTPExchangeCertsWithoutExtension{ |
| "AllowSignedHTTPExchangeCertsWithoutExtension", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Creates audio output and input streams using the audio service. |
| const base::Feature kAudioServiceAudioStreams{"AudioServiceAudioStreams", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Launches the audio service on the browser startup. |
| const base::Feature kAudioServiceLaunchOnStartup{ |
| "AudioServiceLaunchOnStartup", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Runs the audio service in a separate process. |
| const base::Feature kAudioServiceOutOfProcess{ |
| "AudioServiceOutOfProcess", |
| #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Kill switch for Background Fetch. |
| const base::Feature kBackgroundFetch{"BackgroundFetch", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable using the BackForwardCache. |
| const base::Feature kBackForwardCache{"BackForwardCache", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allows swipe left/right from touchpad change browser navigation. Currently |
| // only enabled by default on CrOS. |
| const base::Feature kTouchpadOverscrollHistoryNavigation { |
| "TouchpadOverscrollHistoryNavigation", |
| #if defined(OS_CHROMEOS) || defined(OS_WIN) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Block subresource requests whose URLs contain embedded credentials (e.g. |
| // `https://user:pass@example.com/resource`). |
| const base::Feature kBlockCredentialedSubresources{ |
| "BlockCredentialedSubresources", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether Bundled HTTP Exchanges is enabled. |
| // https://wicg.github.io/webpackage/draft-yasskin-wpack-bundled-exchanges.html |
| const base::Feature kBundledHTTPExchanges{"BundledHTTPExchanges", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables code caching for inline scripts. |
| const base::Feature kCacheInlineScriptCode{"CacheInlineScriptCode", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables support for parallel cache_storage operations via the |
| // "max_shared_ops" fieldtrial parameter. |
| const base::Feature kCacheStorageParallelOps{"CacheStorageParallelOps", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If Canvas2D Image Chromium is allowed, this feature controls whether it is |
| // enabled. |
| const base::Feature kCanvas2DImageChromium { |
| "Canvas2DImageChromium", |
| #if defined(OS_MACOSX) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enables the compositing of fixed position content that is opaque and can |
| // preserve LCD text. |
| const base::Feature kCompositeOpaqueFixedPosition{ |
| "CompositeOpaqueFixedPosition", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables the compositing of scrolling content that supports painting the |
| // background with the foreground, such that LCD text will still be enabled. |
| const base::Feature kCompositeOpaqueScrollers{"CompositeOpaqueScrollers", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When enabled, event.movement is calculated in blink instead of in browser. |
| const base::Feature kConsolidatedMovementXY{"ConsolidatedMovementXY", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Show messages in the DevTools console about upcoming deprecations |
| // that would affect sent/received cookies. |
| const base::Feature kCookieDeprecationMessages{ |
| "CookieDeprecationMessages", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables crash reporting via Reporting API. |
| // https://www.w3.org/TR/reporting/#crash-report |
| const base::Feature kCrashReporting{"CrashReporting", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Puts save-data header in the holdback mode. This disables sending of |
| // save-data header to origins, and to the renderer processes within Chrome. |
| const base::Feature kDataSaverHoldback{"DataSaverHoldback", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable changing source dynamically for desktop capture. |
| const base::Feature kDesktopCaptureChangeSource{ |
| "DesktopCaptureChangeSource", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When a screen reader is detected, allow users the option of letting |
| // Google provide descriptions for unlabeled images. |
| const base::Feature kExperimentalAccessibilityLabels{ |
| "ExperimentalAccessibilityLabels", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Throttle tasks in Blink background timer queues based on CPU budgets |
| // for the background tab. Bug: https://crbug.com/639852. |
| const base::Feature kExpensiveBackgroundTimerThrottling{ |
| "ExpensiveBackgroundTimerThrottling", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables exposing back/forward mouse buttons to the renderer and the web. |
| const base::Feature kExtendedMouseButtons{"ExtendedMouseButtons", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When enabled Feature Policy propagation is similar to sandbox flags and, |
| // sandbox flags are implemented on top of Feature Policy. |
| const base::Feature kFeaturePolicyForSandbox{"FeaturePolicyForSandbox", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables fixes for matching src: local() for web fonts correctly against full |
| // font name or postscript name. Rolling out behind a flag, as enabling this |
| // enables a font indexer on Android which we need to test in the field first. |
| const base::Feature kFontSrcLocalMatching{"FontSrcLocalMatching", |
| 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). |
| const base::Feature kNetworkQualityEstimatorWebHoldback{ |
| "NetworkQualityEstimatorWebHoldback", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Causes the implementations of guests (inner WebContents) to use |
| // out-of-process iframes. |
| // TODO(533069): Remove once BrowserPlugin is removed. |
| const base::Feature kGuestViewCrossProcessFrames{ |
| "GuestViewCrossProcessFrames", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // If a page does a client side redirect or adds to the history without a user |
| // gesture, then skip it on back/forward UI. |
| const base::Feature kHistoryManipulationIntervention{ |
| "HistoryManipulationIntervention", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // This is intended as a kill switch for the Idle Detection feature. To enable |
| // this feature, the experimental web platform features flag should be set, |
| // or the site should obtain an Origin Trial token. |
| const base::Feature kIdleDetection{"IdleDetection", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // This flag is used to set field parameters to choose predictor we use when |
| // kResamplingInputEvents is disabled. It's used for gatherig accuracy metrics |
| // on finch and also for choosing predictor type for predictedEvents API without |
| // enabling resampling. It does not have any effect when the resampling flag is |
| // enabled. |
| const base::Feature kInputPredictorTypeChoice{ |
| "InputPredictorTypeChoice", 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. |
| const base::Feature kIsolateOrigins{"IsolateOrigins", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const char kIsolateOriginsFieldTrialParamName[] = "OriginsList"; |
| |
| const base::Feature kBuiltInModuleKvStorage{"BuiltInModuleKvStorage", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kBuiltInModuleAll{"BuiltInModuleAll", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kBuiltInModuleInfra{"BuiltInModuleInfra", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kLazyFrameLoading{"LazyFrameLoading", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::Feature kLazyFrameVisibleLoadTimeMetrics{ |
| "LazyFrameVisibleLoadTimeMetrics", |
| #if defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| const base::Feature kLazyImageLoading{"LazyImageLoading", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| const base::Feature kLazyImageVisibleLoadTimeMetrics{ |
| "LazyImageVisibleLoadTimeMetrics", |
| #if defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enable lazy initialization of the media controls. |
| const base::Feature kLazyInitializeMediaControls{ |
| "LazyInitializeMediaControls", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Configures whether Blink on Windows 8.0 and below should use out of process |
| // API font fallback calls to retrieve a fallback font family name as opposed to |
| // using a hard-coded font lookup table. |
| const base::Feature kLegacyWindowsDWriteFontFallback{ |
| "LegacyWindowsDWriteFontFallback", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| const base::Feature kLogJsConsoleMessages{"LogJsConsoleMessages", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables lowering the priority of the resources in iframes. |
| const base::Feature kLowPriorityIframes{"LowPriorityIframes", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If this feature is enabled, media-device enumerations use a cache that is |
| // invalidated upon notifications sent by base::SystemMonitor. If disabled, the |
| // cache is considered invalid on every enumeration request. |
| const base::Feature kMediaDevicesSystemMonitorCache { |
| "MediaDevicesSystemMonitorCaching", |
| #if defined(OS_MACOSX) || defined(OS_WIN) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Instead of BrowserPlugin or GuestViews, MimeHandlerView will use a cross |
| // process frame to render its handler. |
| const base::Feature kMimeHandlerViewInCrossProcessFrame{ |
| "MimeHandlerViewInCrossProcessFrame", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables/disables the video capture service. |
| const base::Feature kMojoVideoCapture{"MojoVideoCapture", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // A secondary switch used in combination with kMojoVideoCapture. |
| // This is intended as a kill switch to allow disabling the service on |
| // particular groups of devices even if they forcibly enable kMojoVideoCapture |
| // via a command-line argument. |
| const base::Feature kMojoVideoCaptureSecondary{ |
| "MojoVideoCaptureSecondary", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // When enable, iframe does not implicit capture mouse event. |
| const base::Feature kMouseSubframeNoImplicitCapture{ |
| "MouseSubframeNoImplicitCapture", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If enabled, the URLLoaderRequestController lives on the UI thread. |
| const base::Feature kNavigationLoaderOnUI{"NavigationLoaderOnUI", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Transmit the response body datapipe to the renderer process in |
| // CommitNavigation() so that it can start reading earlier. |
| const base::Feature kNavigationImmediateResponseBody{ |
| "NavigationImmediateResponseBody", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // If the network service is enabled, runs it in process. |
| const base::Feature kNetworkServiceInProcess { |
| "NetworkServiceInProcess", |
| #if defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Kill switch for Web Notification content images. |
| const base::Feature kNotificationContentImage{"NotificationContentImage", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables the notification trigger API. |
| const base::Feature kNotificationTriggers{"NotificationTriggers", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Origin Policy. See https://crbug.com/751996 |
| const base::Feature kOriginPolicy{"OriginPolicy", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Origin Trials for controlling access to feature/API experiments. |
| const base::Feature kOriginTrials{"OriginTrials", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // History navigation in response to horizontal overscroll (aka gesture-nav). |
| const base::Feature kOverscrollHistoryNavigation { |
| "OverscrollHistoryNavigation", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Whether document level event listeners should default 'passive' to true. |
| const base::Feature kPassiveDocumentEventListeners{ |
| "PassiveDocumentEventListeners", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether document level wheel and mousewheel event listeners should default |
| // 'passive' to true. |
| const base::Feature kPassiveDocumentWheelEventListeners{ |
| "PassiveDocumentWheelEventListeners", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether we should force a touchstart and first touchmove per scroll event |
| // listeners to be non-blocking during fling. |
| const base::Feature kPassiveEventListenersDueToFling{ |
| "PassiveEventListenersDueToFling", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether PaymentRequest exposes hasEnrolledInstrument API. |
| const base::Feature kPaymentRequestHasEnrolledInstrument = { |
| "PaymentRequestHasEnrolledInstrument", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether ExecutionContext is paused (and workers) on background freeze. |
| const base::Feature kPauseExecutionContextOnBackgroundFreeze = { |
| "PauseExecutionContextOnBackgroundFreeze", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether PDF files should be rendered in diffent processes based on origin. |
| const base::Feature kPdfIsolation = {"PdfIsolation", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether web apps can run periodic tasks upon network connectivity. |
| const base::Feature kPeriodicBackgroundSync{"PeriodicBackgroundSync", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Whether we should use the navigation_client mojo interface for navigations. |
| const base::Feature kPerNavigationMojoInterface = { |
| "PerNavigationMojoInterface", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // If Pepper 3D Image Chromium is allowed, this feature controls whether it is |
| // enabled. |
| const base::Feature kPepper3DImageChromium { |
| "Pepper3DImageChromium", |
| #if defined(OS_MACOSX) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enables process sharing for sites that do not require a dedicated process |
| // by using a default SiteInstance. Default SiteInstances will only be used |
| // on platforms that do not use full site isolation. |
| // Note: This feature is mutally exclusive with |
| // kProcessSharingWithStrictSiteInstances. Only one of these should be enabled |
| // at a time. |
| const base::Feature kProcessSharingWithDefaultSiteInstances{ |
| "ProcessSharingWithDefaultSiteInstances", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether cross-site frames should get their own SiteInstance even when |
| // strict site isolation is disabled. These SiteInstances will still be |
| // grouped into a shared default process based on BrowsingInstance. |
| const base::Feature kProcessSharingWithStrictSiteInstances{ |
| "ProcessSharingWithStrictSiteInstances", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Under this flag bootstrap (aka startup) tasks will be prioritized. This flag |
| // is used by various modules to determine whether special scheduling |
| // arrangements need to be made to prioritize certain tasks. |
| const base::Feature kPrioritizeBootstrapTasks = { |
| "PrioritizeBootstrapTasks", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable the ProactivelySwapBrowsingInstance experiment. A browsing instance |
| // represents a set of frames that can script each other. Currently, Chrome does |
| // not always switch BrowsingInstance when navigating in between two unrelated |
| // pages. This experiment makes Chrome swap BrowsingInstances for cross-site |
| // HTTP(S) navigations when the BrowsingInstance doesn't contain any other |
| // windows. |
| const base::Feature kProactivelySwapBrowsingInstance{ |
| "ProactivelySwapBrowsingInstance", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable raster-inducing scroll. |
| const base::Feature kRasterInducingScroll{"RasterInducingScroll", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Reduce the amount of information in the default 'referer' header for |
| // cross-origin requests. |
| const base::Feature kReducedReferrerGranularity{ |
| "ReducedReferrerGranularity", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Causes hidden tabs with crashed subframes to be marked for reload, meaning |
| // that if a user later switches to that tab, the current page will be |
| // reloaded. This will hide crashed subframes from the user at the cost of |
| // extra reloads. |
| const base::Feature kReloadHiddenTabsWithCrashedSubframes { |
| "ReloadHiddenTabsWithCrashedSubframes", |
| #if defined(OS_ANDROID) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // 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. |
| |
| // Enable using the RenderDocument on main frame navigations. |
| const base::Feature kRenderDocumentForMainFrame{ |
| "RenderDocumentForMainFrame", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable using the RenderDocument on subframe navigations. |
| const base::Feature kRenderDocumentForSubframe{ |
| "RenderDocumentForSubframe", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Throttle Blink's rendering pipeline based on frame visibility. |
| const base::Feature kRenderingPipelineThrottling{ |
| "RenderingPipelineThrottling", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables resampling input events on main thread. |
| const base::Feature kResamplingInputEvents{"ResamplingInputEvents", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Loading Dispatcher v0 support with ResourceLoadScheduler (crbug.com/729954). |
| const base::Feature kResourceLoadScheduler{"ResourceLoadScheduler", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Run video capture service in the Browser process as opposed to a dedicated |
| // utility process |
| const base::Feature kRunVideoCaptureServiceInBrowserProcess{ |
| "RunVideoCaptureServiceInBrowserProcess", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Save the scroll anchor and use it to restore scroll position. |
| const base::Feature kScrollAnchorSerialization{ |
| "ScrollAnchorSerialization", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Make sendBeacon throw for a Blob with a non simple type. |
| const base::Feature kSendBeaconThrowForBlobWithNonSimpleType{ |
| "SendBeaconThrowForBlobWithNonSimpleType", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables long running message dispatch for service workers. |
| // This is a temporary addition only to be used for the Android Messages |
| // integration with ChromeOS (http://crbug.com/823256). |
| const base::Feature kServiceWorkerLongRunningMessage{ |
| "ServiceWorkerLongRunningMessage", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Service worker based payment apps as defined by w3c here: |
| // https://w3c.github.io/webpayments-payment-apps-api/ |
| // TODO(rouslan): Remove this. |
| const base::Feature kServiceWorkerPaymentApps{"ServiceWorkerPaymentApps", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // http://tc39.github.io/ecmascript_sharedmem/shmem.html |
| const base::Feature kSharedArrayBuffer { |
| "SharedArrayBuffer", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Signed HTTP Exchange prefetch cache for navigations |
| // https://crbug.com/968427 |
| const base::Feature kSignedExchangePrefetchCacheForNavigations{ |
| "SignedExchangePrefetchCacheForNavigations", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Signed Exchange Reporting for distributors |
| // https://www.chromestatus.com/features/5687904902840320 |
| const base::Feature kSignedExchangeReportingForDistributors{ |
| "SignedExchangeReportingForDistributors", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Subresource prefetching+loading via Signed HTTP Exchange |
| // https://www.chromestatus.com/features/5126805474246656 |
| const base::Feature kSignedExchangeSubresourcePrefetch{ |
| "SignedExchangeSubresourcePrefetch", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Origin-Signed HTTP Exchanges (for WebPackage Loading) |
| // https://www.chromestatus.com/features/5745285984681984 |
| const base::Feature kSignedHTTPExchange{"SignedHTTPExchange", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether to send a ping to the inner URL upon navigation or not. |
| const base::Feature kSignedHTTPExchangePingValidity{ |
| "SignedHTTPExchangePingValidity", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // This is intended as a kill switch for the SMS Receiver feature. To enable |
| // this feature, the experimental web platform features flag should be set, |
| // or the site should obtain an Origin Trial token. |
| const base::Feature kSmsReceiver{"SmsReceiver", |
| base::FEATURE_ENABLED_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. |
| const base::Feature kSpareRendererForSitePerProcess{ |
| "SpareRendererForSitePerProcess", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables StaleWhileRevalidate support. |
| // https://www.chromestatus.com/features/5050913014153216 |
| const base::Feature kStaleWhileRevalidate{"StaleWhileRevalidate", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether site isolation should use origins instead of scheme and |
| // eTLD+1. |
| const base::Feature kStrictOriginIsolation{"StrictOriginIsolation", |
| 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. |
| const base::Feature kSyntheticPointerActions{"SyntheticPointerActions", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Throttle Blink timers in out-of-view cross origin frames. |
| const base::Feature kTimerThrottlingForHiddenFrames{ |
| "TimerThrottlingForHiddenFrames", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables async touchpad pinch zoom events. We check the ACK of the first |
| // synthetic wheel event in a pinch sequence, then send the rest of the |
| // synthetic wheel events of the pinch sequence as non-blocking if the first |
| // event’s ACK is not canceled. |
| const base::Feature kTouchpadAsyncPinchEvents{"TouchpadAsyncPinchEvents", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allows developers transfer user activation state to any target window in the |
| // frame tree. |
| const base::Feature kUserActivationPostMessageTransfer{ |
| "UserActivationPostMessageTransfer", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allows user activation propagation to all frames having the same origin as |
| // the activation notifier frame. This is an intermediate measure before we |
| // have an iframe attribute to declaratively allow user activation propagation |
| // to subframes. |
| const base::Feature kUserActivationSameOriginVisibility{ |
| "UserActivationSameOriginVisibility", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // An experimental simple user-activation model where the user gesture state is |
| // tracked through a frame-based state instead of the gesture tokens we use |
| // today. |
| const base::Feature kUserActivationV2{"UserActivationV2", |
| 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_DISABLED_BY_DEFAULT}; |
| |
| // Enables V8's low memory mode for subframes. This is used only |
| // in conjunction with the --site-per-process feature. |
| const base::Feature kV8LowMemoryModeForSubframes{ |
| "V8LowMemoryModeForSubframes", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables future V8 VM features |
| const base::Feature kV8VmFuture{"V8VmFuture", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable WebAssembly structured cloning. |
| // http://webassembly.org/ |
| const base::Feature kWebAssembly{"WebAssembly", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable WebAssembly baseline compilation and tier up. |
| const base::Feature kWebAssemblyBaseline{"WebAssemblyBaseline", |
| #ifdef ARCH_CPU_X86_FAMILY |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enable garbage collection of WebAssembly code. |
| const base::Feature kWebAssemblyCodeGC{"WebAssemblyCodeGC", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable WebAssembly SIMD |
| // https://github.com/WebAssembly/Simd |
| const base::Feature kWebAssemblySimd{"WebAssemblySimd", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enable WebAssembly threads. |
| // https://github.com/WebAssembly/threads |
| const base::Feature kWebAssemblyThreads { |
| "WebAssemblyThreads", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enable WebAssembly trap handler. |
| #if (defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \ |
| defined(ARCH_CPU_X86_64) |
| const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #else |
| const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| // Controls whether the visibility of a WebContents can be OCCLUDED. When |
| // disabled, an occluded WebContents behaves exactly like a VISIBLE WebContents. |
| const base::Feature kWebContentsOcclusion { |
| "WebContentsOcclusion", |
| #if defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_WIN) |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Controls whether the WebAuthentication API is enabled: |
| // https://w3c.github.io/webauthn |
| const base::Feature kWebAuth{"WebAuthentication", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether BLE authenticators can be used via the WebAuthentication |
| // API. https://w3c.github.io/webauthn |
| const base::Feature kWebAuthBle{"WebAuthenticationBle", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether CTAP2 devices can communicate via the WebAuthentication API |
| // using pairingless BLE protocol. |
| // https://w3c.github.io/webauthn |
| const base::Feature kWebAuthCable { |
| "WebAuthenticationCable", |
| #if !defined(OS_CHROMEOS) && defined(OS_LINUX) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // If WebGL Image Chromium is allowed, this feature controls whether it is |
| // enabled. |
| const base::Feature kWebGLImageChromium{"WebGLImageChromium", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable experimental policy-controlled features and LAPIs |
| const base::Feature kExperimentalProductivityFeatures{ |
| "ExperimentalProductivityFeatures", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // The JavaScript API for payments on the web. |
| // TODO(rouslan): Remove this. |
| const base::Feature kWebPayments{"WebPayments", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Makes WebRTC use ECDSA certs by default (i.e., when no cert type was |
| // specified in JS). |
| const base::Feature kWebRtcEcdsaDefault{"WebRTC-EnableWebRtcEcdsa", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables HW H264 encoding on Android. |
| const base::Feature kWebRtcHWH264Encoding{"WebRtcHWH264Encoding", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enables HW VP8 encoding on Android. |
| const base::Feature kWebRtcHWVP8Encoding { |
| "WebRtcHWVP8Encoding", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_ENABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enables HW VP9 encoding on Android. |
| const base::Feature kWebRtcHWVP9Encoding { |
| "WebRtcHWVP9Encoding", |
| #if defined(OS_ANDROID) |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #else |
| base::FEATURE_DISABLED_BY_DEFAULT |
| #endif |
| }; |
| |
| // Enables negotiation of experimental multiplex codec in SDP. |
| const base::Feature kWebRtcMultiplexCodec{"WebRTC-MultiplexCodec", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Fallback from hardware encoder (if available) to software, for WebRTC |
| // screensharing that uses temporal scalability. |
| const base::Feature kWebRtcScreenshareSwEncoding{ |
| "WebRtcScreenshareSwEncoding", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Use GpuMemoryBuffer backed VideoFrames in media streams. |
| const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames{ |
| "WebRTC-UseGpuMemoryBufferVideoFrames", base::FEATURE_ENABLED_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_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether the WebUSB API is enabled: |
| // https://wicg.github.io/webusb |
| const base::Feature kWebUsb{"WebUSB", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether the WebXR Device API is enabled. |
| const base::Feature kWebXr{"WebXR", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables access to raycasting against estimated XR scene geometry. |
| const base::Feature kWebXrHitTest{"WebXRHitTest", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables access to planes detected in the user's environment. |
| const base::Feature kWebXrPlaneDetection{"WebXRPlaneDetection", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Start streaming scripts on script preload. |
| const base::Feature kScriptStreamingOnPreload{ |
| "ScriptStreamingOnPreload", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether the Trusted Types API is available. |
| const base::Feature kTrustedDOMTypes{"TrustedDOMTypes", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Use ThreadPriority::DISPLAY for browser UI and IO threads. |
| #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| const base::Feature kBrowserUseDisplayThreadPriority{ |
| "BrowserUseDisplayThreadPriority", base::FEATURE_ENABLED_BY_DEFAULT}; |
| #else |
| const base::Feature kBrowserUseDisplayThreadPriority{ |
| "BrowserUseDisplayThreadPriority", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif |
| |
| #if defined(OS_ANDROID) |
| // Autofill Accessibility in Android. |
| // crbug.com/627860 |
| const base::Feature kAndroidAutofillAccessibility{ |
| "AndroidAutofillAccessibility", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Sets moderate binding to background renderers playing media, when enabled. |
| // Else the renderer will have strong binding. |
| const base::Feature kBackgroundMediaRendererHasModerateBinding{ |
| "BackgroundMediaRendererHasModerateBinding", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Pre-warm up the network process on browser startup. |
| const base::Feature kWarmUpNetworkProcess{"WarmUpNetworkProcess", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Force display to tick at ~60Hz refresh rate. |
| const base::Feature kForce60HzRefreshRate{"Force60HzRefreshRate", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether the WebNFC API is enabled: |
| // https://w3c.github.io/web-nfc/ |
| const base::Feature kWebNfc{"WebNFC", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_ANDROID) |
| |
| #if defined(OS_CHROMEOS) |
| // If this flag is enabled, Web UI pages can call DisablePolymer2() on the |
| // shared resource during setup in order to use Polymer 1. Note: Currently, this |
| // only supports one Web UI page disabling Polymer 2. |
| // TODO(crbug.com/955194): Remove this once chrome://oobe migrates off of |
| // Polymer 1. |
| const base::Feature kWebUIPolymer2Exceptions{"WebUIPolymer2Exceptions", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| #endif // defined(OS_CHROMEOS) |
| |
| #if defined(OS_MACOSX) |
| // Enables caching of media devices for the purpose of enumerating them. |
| const base::Feature kDeviceMonitorMac{"DeviceMonitorMac", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Enable IOSurface based screen capturer. |
| const base::Feature kIOSurfaceCapturer{"IOSurfaceCapturer", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| const base::Feature kMacV2GPUSandbox{"MacV2GPUSandbox", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Enables retrying to obtain list of available cameras on Macbooks after |
| // restarting the video capture service if a previous attempt delivered zero |
| // cameras. |
| const base::Feature kRetryGetVideoCaptureDeviceInfos{ |
| "RetryGetVideoCaptureDeviceInfos", base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(OS_MACOSX) |
| |
| #if defined(WEBRTC_USE_PIPEWIRE) |
| // Controls whether the PipeWire support for screen capturing is enabled on the |
| // Wayland display server. |
| const base::Feature kWebRtcPipeWireCapturer{"WebRTCPipeWireCapturer", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| #endif // defined(WEBRTC_USE_PIPEWIRE) |
| |
| enum class VideoCaptureServiceConfiguration { |
| kEnabledForOutOfProcess, |
| kEnabledForBrowserProcess, |
| kDisabled |
| }; |
| |
| bool ShouldEnableVideoCaptureService() { |
| return base::FeatureList::IsEnabled(features::kMojoVideoCapture) && |
| base::FeatureList::IsEnabled(features::kMojoVideoCaptureSecondary); |
| } |
| |
| VideoCaptureServiceConfiguration GetVideoCaptureServiceConfiguration() { |
| if (!ShouldEnableVideoCaptureService()) |
| return VideoCaptureServiceConfiguration::kDisabled; |
| |
| // On ChromeOS the service must run in the browser process, because parts of the |
| // code depend on global objects that are only available in the Browser process. |
| // See https://crbug.com/891961. |
| #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| return VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; |
| #else |
| return base::FeatureList::IsEnabled( |
| features::kRunVideoCaptureServiceInBrowserProcess) |
| ? VideoCaptureServiceConfiguration::kEnabledForBrowserProcess |
| : VideoCaptureServiceConfiguration::kEnabledForOutOfProcess; |
| #endif |
| } |
| |
| bool IsVideoCaptureServiceEnabledForOutOfProcess() { |
| return GetVideoCaptureServiceConfiguration() == |
| VideoCaptureServiceConfiguration::kEnabledForOutOfProcess; |
| } |
| |
| bool IsVideoCaptureServiceEnabledForBrowserProcess() { |
| return GetVideoCaptureServiceConfiguration() == |
| VideoCaptureServiceConfiguration::kEnabledForBrowserProcess; |
| } |
| |
| } // namespace features |