{ // See third_party/blink/renderer/platform/RuntimeEnabledFeatures.md // // This list is used to generate runtime_enabled_features.h/cc which contains // a class that stores static enablers for all experimental features. parameters: { // Each feature can be assigned a "status". The "status" can be either // one of the values in the |valid_values| list or a dictionary of // the platforms listed in |valid_keys| to |valid_values|. // Use "default" as the key if you want to specify the status of // the platforms other than the ones declared in the dictionary. // ** Omitting "default" means the feature is not enabled on // the platforms not listed in the status dictionary // // Definition of each status: // * status=stable: Enable this in all Blink configurations. We are // committed to these APIs indefinitely. // * status=experimental: In-progress features, Web Developers might play // with, but are not on by default in stable. These features may be // turned on using the "Experimental Web Platform features" flag in // chrome://flags/#enable-experimental-web-platform-features. // * status=test: Enabled in ContentShell for testing, otherwise off. // Features without a status are not enabled anywhere by default. // // Example of the dictionary value use: // { // name: "ExampleFeature", // status: {"Android": "stable", "Win": "experimental"}, // } // "ExampleFeature" will be stable on Android/WebView, experimental // on Windows and not enabled on any other platform. // // Note that the Android status key implies Chrome for Android and WebView. // // "stable" features listed here should be rare, as anything which we've // shipped stable can have its runtime flag removed soon after. status: { valid_values: ["stable", "experimental", "test"], valid_keys: ["Android", "Win", "ChromeOS", "Mac", "Linux", "iOS"] }, // "implied_by" or "depends_on" specifies relationship to other features: // * implied_by: ["feature1","feature2",...] // The feature is automatically enabled if any implied_by features is // enabled. To effectively disable the feature, you must disable the // feature and all the implied_by features. // * depends_on: ["feature1","feature2",...] // The feature can be enabled only if all depends_on features are enabled. // Only one of "implied_by" and "depends_on" can be specified. implied_by: { default: [], valid_type: "list", }, // *DO NOT* specify features that depend on origin trial features. // It is NOT supported. As a workaround, you can either specify the same // |origin_trial_feature_name| for the feature or add the OT feature to // the |implied_by| list. // TODO(https://crbug.com/954679): Add support for origin trial features in 'depends_on' list depends_on: { default: [], valid_type: "list", }, // origin_trial_feature_name: "FEATURE_NAME" is used to integrate the // feature with the Origin Trials framework. The framework allows the // feature to be enabled at runtime on a per-page basis through a signed // token for the corresponding feature name. Declaring the // origin_trial_feature_name will modify the generation of the static // methods in runtime_enabled_features.h/cpp -- the no-parameter version // will not be generated, so all callers have to use the version that takes // a const FeatureContext* argument. origin_trial_feature_name: { }, // origin_trial_os specifies the platforms where the trial is available. // The default is empty, meaning all platforms. origin_trial_os: { default: [], valid_type: "list", }, // origin_trial_type specifies the unique type of the trial, when not the // usual trial for a new experimental feature. origin_trial_type: { default: "", valid_type: "str", valid_values: ["deprecation", "intervention", ""], }, // origin_trial_allows_insecure specifies whether the trial can be enabled // in an insecure context, with default being false. This can only be set // to true for a "deprecation" type trial. origin_trial_allows_insecure: { valid_type: "bool", }, // origin_trial_allows_third_party specifies whether the trial can be enabled // from third party origins, with default being false. origin_trial_allows_third_party: { valid_type: "bool", }, // settable_from_internals specifies whether a feature can be set from // internals.runtimeFlags, with the default being false. settable_from_internals: { valid_type: "bool", }, // public specifies whether a feature can be accessed via // third_party/blink/public/platform/web_runtime_features.h with dedicated // methods. The default is false. This should be rare because // WebRuntimeFeatures::EnableFeatureFromString() works in most cases. public: { valid_type: "bool", }, // Feature policy IDL extended attribute (see crrev.com/2247923004). feature_policy: { }, // The string name of a base::Feature. The C++ variable name in // blink::features is built with this string by prepending 'k'. // As long as this field isn't "none", a base::Feature is automatically // generated in features_generated.{h,cc}. By default the "name" field // is used for the feature name, but can be overridden here. // // The default value of the base::Feature instance is: // base::FEATURE_ENABLED_BY_DEFAULT if 'status' field is 'stable", and // base::FEATURE_DISABLED_BY_DEFAULT otherwise. // It can be overridden by 'base_feature_status' field. // // If the flag should be associated with a feature not in blink::features, // we need to specify `base_feature: "none"` and map the features in // content/child/runtime_features.cc. `base_feature: "none"` is strongly // discouraged if the feature doesn't have an associated base feature // because the feature would lack a killswitch controllable via finch. base_feature: { valid_type: "str", default: "", }, // Specify the default value of the base::Feature instance. This field // works only if base_feature is not "none". // If the field is missing or "", the default value depends on the 'status' // field. See the comment above. // "disabled" sets base::FEATURE_DISABLED_BY_DEFAULT, and "enabled" sets // base::FEATURE_ENABLED_BY_DEFAULT. base_feature_status: { valid_type: "str", valid_values: ["", "disabled", "enabled"], default: "", }, // Specify how the flag value is updated from the base::Feature value. This // field works only if base_feature is not "none". // // * "enabled_or_overridden" // - If the base::Feature status is overridden to the enabled or disabled // state by field trial or command line, set Blink feature to the state // of the base::Feature. Note: "Override to Default" doesn't affect the // Blink feature. // - Otherwise if the base::Feature is enabled, enable the Blink feature. // - Otherwise no change. // // * "overridden" // Enables the Blink feature when the base::Feature status is overridden // to the enabled or disabled state by field trial or command line. // Otherwise no change. Its difference from "enabled_or_overridden" is // that the Blink feature isn't affected by the default state of the // base::Feature. Note: "Override to Default" deosn't affect the Blink // feature. // // This is useful for Blink origin trial features especially those // implemented in both Chromium and Blink. As origin trial only controls // the Blink features, we require the base::Feature to be enabled // by default, but we don't want the default enabled status to affect the // Blink feature. See RuntimeEnabledFeatures.md for a detailed explanation // of how this works. See also https://crbug.com/1048656#c10. // This can also be used for features that are enabled by default in // Chromium but not in Blink on all platforms and we want to use the Blink // status. However, we would prefer consistent Chromium and Blink status // to this. copied_from_base_feature_if: { valid_type: "str", valid_values: ["enabled_or_overridden", "overridden"], default: "enabled_or_overridden", }, // browser_process_read_access indicates the runtime feature state should be // readable in the browserprocess via RuntimeFeatureStateReadContext. // TODO(crbug.com/1377000): this feature does not support origin trial // tokens provided in HTTP headers. Any tokens provided via HTTP header will // be dropped. Please inform developers they must embed the token in HTML. browser_process_read_access: { default: false, value_type: "bool", }, // browser_process_read_write_access indicates the runtime feature state // should be writable in the browserprocess via RuntimeFeatureStateContext. // TODO(crbug.com/1377000): this feature does not support origin trial // tokens provided in HTTP headers. Any tokens provided via HTTP header will // be dropped. Please inform developers they must embed the token in HTML. browser_process_read_write_access: { default: false, value_type: "bool", }, // is_protected_feature indicates whether the feature enablement state should // be tracked using a base::ProtectedMemory value or just a regular bool // value. is_protected_feature: { default: false, value_type: "bool", } }, data: [ { // This flag changes about:blank to dark in dark mode on user action. name: "AboutBlankPageRespectsDarkModeOnUserAction", status: "stable", }, { name: "Accelerated2dCanvas", settable_from_internals: true, status: "stable", }, { name: "AcceleratedSmallCanvases", status: "stable", }, { name: "AccessibilityAriaVirtualContent", public: true, status: "experimental", base_feature: "none", }, { name: "AccessibilityCustomElementRoleNone", public: true, status: "test", base_feature: "none", }, { name: "AccessibilityExposeDisplayNone", status: "test", }, { // If the author did not define aria-actions, surface button and link // children inside option and menuitem elements as implicit actions. name: "AccessibilityImplicitActions", status: "experimental", }, { // Use a minimum role of group on elements that are keyboard-focusable. // See https://w3c.github.io/html-aam/#minimum-role. name: "AccessibilityMinRoleTabbable", }, { name: "AccessibilityOSLevelBoldText", status: "experimental", public: true, }, { // Enforce no accessible name on objects that have a role where names are // prohibited (listed in https://w3c.github.io/aria/#namefromprohibited): // log a friendly error in the developer console, and trigger a DCHECK(). // The incorrect markup situation will be repaired, and the name will // be exposed as a description instead. // TODO(crbug.com/350528330, // https://github.com/web-platform-tests/interop-accessibility/issues/133, // https://github.com/w3c/accname/issues/240, // https://github.com/w3c/accname/issues/241): If community feedback is // positive, and WPT + accname testable statements are updated to allow // this, then add status: test. name: "AccessibilityProhibitedNames", }, { name: "AccessibilitySerializationSizeMetrics", status: "experimental", }, { name: "AccessibilityUseAXPositionForDocumentMarkers", base_feature: "none", public: true, }, { // https://chromestatus.com/feature/5113389252739072 // https://issues.chromium.org/issues/41119923 name: "AccessKeyLabel", status: "experimental", }, { name: "AddressSpace", status: "experimental", implied_by: ["CorsRFC1918"], }, { // Interest Group JS API/runtimeflag. name: "AdInterestGroupAPI", status: "stable", origin_trial_feature_name: "AdInterestGroupAPI", implied_by: ["Fledge", "Parakeet"], public: true, }, // Fix for crbug.com/403358869 { name: "AdjustDOMOffsetToLayoutOffsetForSecureText", status: "stable", }, // Adjust the end of the next paragraph if the end position for the // paragraph is updated while moving the paragraph. See // https://crbug.com/329121649 { name: "AdjustEndOfNextParagraphIfMovedParagraphIsUpdated", status: "stable", }, { name: "AdTagging", public: true, status: "test", base_feature: "none", }, { name: "AIClassifierAPI", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, }, // Whether to automatically build an APC content_extraction tree on load. { name: "AIPageContentBuildOnLoadForTesting", }, // Whether to enforce geometry invariants in AIPageContentAgent. // Only supported for DCHECK-enabled builds. { name: "AIPageContentCheckGeometry", status: "test" }, // Ensures that text content extracted from DOM nodes are valid UTF-8 Before // providing them to consumers of AIPageContent. { name: "AIPageContentConvertNodeTextToUtf8", status: "stable" }, // When enabled, redact elements with --webkit-text-security. { name: "AIPageContentElementCSSRedaction", status: "stable", }, { name: "AIPageContentIncludeSVGSubtree", status: "stable" }, // Use MapToVisualRectInAncestorSpace for outer bounding boxes, for // math consistent with visual bounding boxes. { name: "AIPageContentOuterBoxMapToAncestorSpace", }, { name: "AIPageContentPaidContentAnnotation", status: "stable" }, // Clamp AIPageContent visible bounding boxes to the local-root viewport // after visual-viewport mapping to normalize viewport-relative geometry. { name: "AIPageContentVisualViewportClamp", status: "stable", implied_by: ["AIPageContentBuildOnLoadForTesting"], }, { name: "AIPromptAPI", public: true, status: { "Win": "stable", "Mac": "stable", "Linux": "stable", "ChromeOS": "stable", "default": "", }, }, { // Extension access to "AIPromptAPI". name: "AIPromptAPIForExtension", public: true, status: { "Win": "stable", "Mac": "stable", "Linux": "stable", "ChromeOS": "stable", "default": "", }, }, { name: "AIPromptAPIForWorkers", public: true, }, { // Gates access to legacy aliases of renamed "AIPromptAPI" identifiers. // TODO(crbug.com/498228550): Remove after extension context usage drops. name: "AIPromptAPILegacyIdentifiers", public: true, }, { // Gates access to legacy sampling parameter surfaces for "AIPromptAPI". // Enabled in extension contexts, and for API enhancement experiments. name: "AIPromptAPILegacyParams", public: true, origin_trial_feature_name: "AIPromptAPIParams", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, implied_by: ["AIPromptAPIParams"], }, { name: "AIPromptAPIMultimodalInput", status: { "Win": "stable", "Mac": "stable", "Linux": "stable", "ChromeOS": "stable", "default": "", }, }, { // Gates access to inference parameter enhancements for "AIPromptAPI". // This feature alone does not expose any "AIPromptAPI" feature access. name: "AIPromptAPIParams", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, origin_trial_feature_name: "AIPromptAPIParams", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, }, { // Gates access to the responseConstraint enhancement for "AIPromptAPI". // This feature alone does not expose any "AIPromptAPI" feature access. name: "AIPromptAPIStructuredOutput", status: "stable", }, { // Gates access to the tool use (function calling) enhancement for // "AIPromptAPI". This feature alone does not expose any "AIPromptAPI" // feature access. name: "AIPromptAPIToolUse", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, }, { name: "AIProofreadingAPI", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, origin_trial_feature_name: "AIProofreaderAPI", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, { name: "AIRewriterAPI", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, origin_trial_feature_name: "AIRewriterAPI", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, { name: "AIRewriterAPIForWorkers", public: true, }, { name: "AISummarizationAPI", status: { "Win": "stable", "Mac": "stable", "Linux": "stable", "ChromeOS": "stable", "default": "", }, }, { name: "AISummarizationAPIForWorkers", public: true, }, { name: "AISummarizationPerformancePreference", status: "experimental", }, { name: "AIWriterAPI", status: { "Win": "experimental", "Mac": "experimental", "Linux": "experimental", "ChromeOS": "experimental", "default": "", }, origin_trial_feature_name: "AIWriterAPI", origin_trial_os: ["win", "mac", "linux", "chromeos"], origin_trial_allows_third_party: true, base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, { name: "AIWriterAPIForWorkers", public: true, }, { name: "AlignZoomToCenter", status: "stable", }, { name: "AllImagesPaintedSentToElementTiming", status: "experimental", }, { name: "AllowContentInitiatedDataUrlNavigations", base_feature: "none", }, { name: "AllowPreloadingWithCSPMetaTag", status: "experimental", }, { name: "AllowSameSiteNoneCookiesInSandbox", base_feature: "none", // No status because this blink runtime feature doesn't work by itself. // It's controlled by the corresponding Chromium feature, // net::features::kAllowSameSiteNoneCookiesInSandbox, which needs to be // enabled to make the whole feature work. }, { // https://crbug.com/40681200 name: "AllowSkippingEditingBoundaryToMergeEnd", status: "stable", }, { name: "AllowSvgUseToReferenceExternalDocumentRoot", status: "stable", }, { name: "AllowSyntheticTimingForCanvasCapture", base_feature: "none", status: { "Mac": "stable", "default": "" } }, { name: "AllowURNsInIframes", base_feature: "none", }, { // Instead of creating a new DOMStringList on every access to // location.ancestorOrigins, return the ancestor origins list // stored on Document. // This was added in M147 and can be removed after M149. // https://issues.chromium.org/issues/483610021 name: "AncestorOriginsStoredOnDocument", status: "stable", }, { // Enables the new behavior for this spec change: // https://github.com/whatwg/html/pull/11457 // https://issues.chromium.org/issues/433545121 // https://chromestatus.com/feature/5179013869993984 name: "AncestorRevealingNewSpec", status: "stable", }, { // This is a bug fix for rendering a missing focus ring on elements. // Shipping in M147, safe to remove in M150. name: "AnchorFocusRingFix", status: "stable", }, { // Kill switch for https://crbug.com/415834974 which changes anchor // positioning adjustments to occur even in cases where there is no // scrollable overflow. name: "AnchorPositionAdjustmentWithoutOverflow", status: "stable", }, { name: "AndroidDownloadableFontsMatching", base_feature: "none", public: true, }, { // https://chromestatus.com/feature/5083257285378048 name: "AnimationProgressAPI", status: "stable", }, { // https://drafts.csswg.org/web-animations-2/#triggers name: "AnimationTrigger", status: "stable", implied_by: ["EventTrigger", "TimelineTrigger"], }, { name: "AnimationWorklet", }, { name: "AnonymousIframe", status: "stable", }, { name: "AOMAriaRelationshipProperties", public: true, status: "stable", }, { name: "AOMAriaRelationshipPropertiesAriaOwns", public: true, status: "experimental", depends_on: ["AOMAriaRelationshipProperties"], }, { // appearance:base for in-page form controls. // https://drafts.csswg.org/css-forms-1/ // https://issues.chromium.org/issues/450139531 // https://chromestatus.com/feature/5104958101913600 name: "AppearanceBase", status: "experimental", }, { name: "ApproximateGeolocationPermission", // This feature is controlled by the kApproximateGeolocationPermission // base::Feature in the browser process. base_feature: "none", }, { name: "ApproximateGeolocationPermissionAPI", }, { name: "ApproximateGeolocationWebVisibleAPI", depends_on: ["ApproximateGeolocationPermission"], }, { name: "AppTitle", status: "experimental", origin_trial_feature_name: "AppTitle", origin_trial_os: ["win", "mac", "linux", "chromeos"], base_feature: "WebAppEnableAppTitle", }, { name: "AriaActions", status: "experimental", }, { name: "AriaNotify", status: {"Android": "stable", "Win": "stable", "Mac": "stable", "Linux": "stable"}, implied_by: ["AriaNotifyV2"], }, { name: "AriaNotifyV2", status: {"Android": "test", "Win": "test", "Mac": "test", "Linux": "test"}, }, { name: "AriaRowColIndexText", status: "stable", }, { // When enabled, perform async IPCs from CookieJar::SetCookie to the // network service. name: "AsyncSetCookie", status: "stable", }, { name: "AttributionReporting", status: "stable", base_feature: "none", public: true, }, { // The transition to "running" after construction happens asynchronously. // Same for the transition to "suspended" after suspend() is called. // https://webaudio.github.io/web-audio-api/#AudioContext-constructors name: "AudioContextAsyncStateTransitions", status: "experimental", }, { // AudioContext.playbackStats interface. name: "AudioContextPlaybackStats", status: "stable", }, { // AudioContext.playoutStats interface. // https://chromestatus.com/feature/5172818344148992 name: "AudioContextPlayoutStats", origin_trial_feature_name: "AudioContextPlayoutStats", status: "experimental", }, { name: "AudioContextSetSinkId", status: "stable", }, { name: "AudioOutputDevices", // Android support for switching audio output devices is not stable status: {"Android": "", "default": "stable"}, public: true, base_feature: "none" }, { name: "AudioVideoTracks", status: "experimental", }, { name: "AuthenticatorPasswordsOnlyImmediateRequests", base_feature: "none", public: true, }, { // https://drafts.csswg.org/css-scroll-snap name: "AuthorSpecifiedLayoutScrollSnapBehavior", status: "stable", }, { name: "AutoDarkMode", base_feature: "none", origin_trial_feature_name: "AutoDarkMode", }, { name: "Autofill", public: true, status: "test", base_feature: "none", }, { name: "AutofillEvent", origin_trial_feature_name: "AutofillEvent", origin_trial_allows_third_party: true, status: "experimental", public: true, }, { name: "AutomationControlled", base_feature: "none", public: true, settable_from_internals: true, }, { name: "AutoPictureInPictureVideoHeuristics", status: "experimental", }, { name: "AvoidForcedLayoutOnInvisibleDocumentClose", status: "stable", }, { // Fix for https://crbug.com/471876082 name: "AvoidMergingStyledSpanWithSiblings", status: "stable", }, { // If the start and end positions are the same in MoveParagraph, // there is no need to collapse the whitespace between them. // https://crbug.com/406053617 name: "AvoidNormalizingVisiblePositionsWhenStartEqualsEnd", status: "stable", }, // When enabled, enforces new interoperable semantics for 3D transforms. // See crbug.com/1008483. { name: "BackfaceVisibilityInterop", }, { name: "BackForwardCache", base_feature: "none", public: true, }, { name: "BackForwardCacheExperimentHTTPHeader", origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader", status: "experimental", base_feature: "none", }, { name: "BackForwardCacheNotRestoredReasons", status: "stable", origin_trial_feature_name: "BackForwardCacheNotRestoredReasons", base_feature: "BackForwardCacheSendNotRestoredReasons", base_feature_status: "enabled", copied_from_base_feature_if: "overridden", }, { name: "BackForwardCacheRestorationPerformanceEntry", status: "experimental", }, { name: "BackForwardCacheUpdateNotRestoredReasonsName", status: "stable", }, { name: "BackgroundClipTextDecoration", status: "stable", }, { name: "BackgroundFetch", public: true, status: "stable", base_feature: "none", }, // A developer opt-out for background page freezing. { name: "BackgroundPageFreezeOptOut", base_feature: "none", origin_trial_feature_name: "BackgroundPageFreezeOptOut", origin_trial_type: "deprecation", }, { name: "BarcodeDetector", status: { // Built-in barcode detection APIs are only available from some // platforms. See //services/shape_detection. "Android": "stable", "ChromeOS": "stable", "Mac": "stable", "default": "test", }, }, { name: "BidiCaretAffinity", }, { name: "BlinkExtensionChromeOS", browser_process_read_write_access: true, }, { name: "BlinkExtensionChromeOSIsolatedWebAppSetShape", status: {"ChromeOS": "experimental", "default": ""}, browser_process_read_write_access: true, depends_on: ["BlinkExtensionChromeOS"], }, { name: "BlinkExtensionChromeOSKiosk", depends_on: ["BlinkExtensionChromeOS"], browser_process_read_write_access: true, }, { name: "BlinkExtensionWebView", public: true, }, { name: "BlinkExtensionWebViewMediaIntegrity", public: true, }, // Whether MapToVisualRectInAncestorSpace() with a null ancestor can // use the geometry mapper fast path. { name: "BlinkGeometryMapperViewportFastPath", status: "stable", }, { name: "BlinkLifecycleScriptForbidden", }, { name: "BlinkRuntimeCallStats", }, { // https://chromestatus.com/feature/4830298126417920 name: "BlobBytes", status: "stable", }, { name: "BlockingFocusWithoutUserActivation", status: "experimental", }, { // Prevents the popup document for the select element from being opened // if the corresponding OS window is not focused. Enabled in M147, can be // removed in M150. name: "BlockSelectPopupUnfocusedWindow", status: "stable", }, // https://crbug.com/415304289: Mouse and Pointer boundary event dispatch // (i.e. dispatch of enter, leave, over, out events) tracks DOM node removal // to fix event pairing on ancestor nodes. { name: "BoundaryEventDispatchTracksNodeRemoval", public: true, status: "stable", }, { name: "BrowserInitiatedAutomaticPictureInPicture", public: true, status: "experimental", }, { name: "BrowserVerifiedUserActivationKeyboard", base_feature: "none", public: true, }, { name: "BrowserVerifiedUserActivationMouse", base_feature: "none", public: true, }, { name: "BufferedBytesConsumerLimitSize", status: "stable", }, { // Bypasses the enforcement of the Page Embedded Permission Control // security checks. This flag is disabled by default and should only be // enabled in automated tests in order to allow them to avoid needing to // wait until the PEPC is validated and also to use JS-initiated clicks. name: "BypassPepcSecurityForTesting", }, { // Enables RFC 7234-compliant Cache-Control header parsing, removing RFC // 2616 separators that are not valid in RFC 7234. // https://crbug.com/42050325 name: "CacheControlRFC7234Parsing", status: "experimental", }, { // Enables metrics collection comparing RFC 7234 vs RFC 2616 Cache-Control // parsing. Performs double parsing on every Cache-Control header to // measure behavioral differences. Can be disabled as a kill switch if // performance issues arise. // https://crbug.com/42050325 name: "CacheControlRFC7234ParsingMetrics", status: "experimental", }, { name: "CacheStorageCodeCacheHint", origin_trial_feature_name: "CacheStorageCodeCacheHint", status: "experimental", base_feature: "none", }, { name: "CallExitNodeWithoutLayoutObject", status: "stable", }, { name: "Canvas2dCanvasFilter", status: "experimental", }, { name: "Canvas2dGPUTransfer", status: "experimental", }, { name: "Canvas2dLayers", }, { name: "Canvas2dLayersWithOptions", status: "experimental", depends_on: ["Canvas2dLayers"], }, { name: "Canvas2dMesh", origin_trial_feature_name: "Canvas2dMesh", origin_trial_allows_third_party: true, status: "test", }, { // https://github.com/WICG/html-in-canvas/blob/main/README.md // Note the API name has changed to `drawElementImage`. name: "CanvasDrawElement", origin_trial_feature_name: "HTMLInCanvas", status: "experimental", }, { name: "CanvasFloatingPoint", status: "stable", }, { // Canvas2D API for specifying HDR headroom for drawing operations. // https:/crbug.com/428575083, https://github.com/whatwg/html/issues/11165 name: "CanvasGlobalHDRHeadroom", status: "experimental", }, { // https://crbug.com/394052224 name: "CanvasGradientCSSColor4", status: "experimental", }, { name: "CanvasHDR", status: "experimental", }, { // https://crbug.com/479240778 name: "CanvasTextMetricsPreciseBounds", status: "experimental", }, { // Canvas2D API for specifying HDR tone mapping behavior. // https:/crbug.com/448552449, https://github.com/whatwg/html/issues/11424 name: "CanvasToneMapping", status: "experimental", }, { // Kill switch for https://crbug.com/330506337. name: "CanvasUsesArcPaintOp", status: "stable", }, { name: "CapabilityDelegationDisplayCaptureRequest", status: "experimental", }, { name: "CaptureController", status: {"Android": "", "default": "stable"}, }, { // TODO(crbug.com/1444712): Before enabling that flag by default, // make sure MouseCursorOverlayController does not transmit mouse // events to a CaptureController that don't have any // capturedmousechange listener attached to it. // See https://github.com/screen-share/mouse-events/issues/14 name: "CapturedMouseEvents", "depends_on": ["CaptureController"], status: {"Android": "", "default": "test"}, }, { name: "CapturedSurfaceControl", status: {"Android": "", "default": "stable"} }, { name: "CapturedSurfaceResolution", status: { "Win": "stable", "Mac": "stable", "ChromeOS": "stable", "default": ""}, }, { name: "CaptureHandle", depends_on: ["GetDisplayMedia"], status: {"Android": "", "default": "stable"}, }, { // Changes the caret's affinity to upstream, preventing spaces // from appearing in the previous line when typing at the start // of a wrapped line. See https://crbug.com/40677155 name: "CaretWithTextAffinityUpstream", status: "stable", }, { // Kill switch for changes to RenderFrameMetadataObserverImpl in connection with Engagement // Signals. See https://crrev.com/c/4544201 and https://crbug.com/1458640. name: "CCTNewRFMPushBehavior", base_feature_status: "enabled", }, { name: "CheckableInputTypeLayoutInline", status: "stable", }, { // If focus is not at canonical position then spellcheck should be deactivated. // crbug.com/396485529 name: "CheckForCanonicalPositionInIdleSpellCheck", status: "stable", }, { name: "CheckVisibilityExtraProperties", status: "stable", }, { // Clamps word boundary detection to the contenteditable scope when // adjacent contenteditable spans have no whitespace between them. // See https://crbug.com/40848794. name: "ClampWordBoundaryToContentEditableScope", status: "stable", }, { // Set currentTarget to null after dispatch for EventTarget. // This was added in M142 and can be removed after M144. // https://issues.chromium.org/issues/346766786 name: "ClearCurrentTargetAfterDispatch", status: "stable", }, { // Fixes a bug where ancestor elements retain a stale :focus-within // state if the focused element's subtree is removed during blur // or focusout events. // This was added in M147 and can be removed after M149. // https://issues.chromium.org/issues/454668198 // https://issues.chromium.org/issues/457465869 name: "ClearFocusWithinOnSubtreeRemoval", status: "stable", }, { // Determine clearing of target and relatedTarget by checking // if the top node is in shadow tree. // This was added in M142 and can be removed after M144. // https://issues.chromium.org/issues/373655918 // https://issues.chromium.org/issues/40253359 name: "ClearTargetOnlyIfInShadowTree", status: "stable", }, { // If the link has tabindex, the status bubble should not persist after // mouse out. // This was added in M146 and can be removed after M148. name: "ClickFocusDoesntPersistStatusBubble", status: "stable", }, { // Enables clipboardchange event API for listening for changes to the // system clipboard // https://chromestatus.com/feature/5085102657503232 name: "ClipboardChangeEvent", origin_trial_feature_name: "ClipboardChangeEvent", status: "stable", }, // This ensures that clipboard event fires on a target node which is // focused in case no visible selection is present. // crbug.com/40735783 { name: "ClipboardEventTargetCanBeFocusedElement", status: "stable", }, { // Allows usecounter in `ClipboardItem` name: "ClipboardItemGetTypeCounter", status: "stable", }, { // Support ClipboardItemData of Promise type according to spec // https://w3c.github.io/clipboard-apis/#typedefdef-clipboarditemdata name: "ClipboardItemWithDOMStringSupport", status: "stable", }, { // TODO(crbug.com/440374239): Disabled due to https://crbug.com/440374239. name: "ClipElementVisibleBoundsInLocalRoot", }, { name: "ClipPathNestedRasterOptimization", status: "stable", }, { // Avoid queuing a task to fire a selectionchange event when there is already a task scheduled // to do that for the target according to the new spec: // https://w3c.github.io/selection-api/#scheduling-selectionhange-event name: "CoalesceSelectionchangeEvent", status: "stable", }, { name: "CoepReflection", status: "test", }, { name: "CollapseZeroWidthSpaceWhenReuseItem", status: "stable", }, { // Allows to accept any valid CSS color value // (named colors, rgb(), hsl(), system colors, etc.) in addition to // the legacy 7-character hex format (#rrggbb). // https://crbug.com/40226268 // This was added in M146 and can be removed after M148. name: "ColorInputAcceptsCSSColors", status: "stable", }, // Enable the display-p3-linear color space in CSS. // https://chromestatus.com/feature/5162372125818880 { name: "ColorSpaceDisplayP3Linear", status: "stable", }, // Enable the srgb-linear and display-p3-linear color spaces in // PredefinedColorSpace. // https://chromestatus.com/feature/5122501071994880 { name: "ColorSpacePredefinedLinearSpaces", status: "experimental", }, // Enable the rec2100-linear color space in CSS and PredefinedColorSpace. // https://chromestatus.com/feature/5204024772788224 { name: "ColorSpaceRec2100Linear", status: "experimental", }, { // Makes the command event not composed. Launched in M141. // https://github.com/whatwg/html/pull/11255 // https://issues.chromium.org/issues/414826954 name: "CommandEventNotComposed", status: "stable", }, { // Return the current target from composedPath() while // dispatching. // This was added in M142 and can be removed after M144. // https://issues.chromium.org/issues/444932649 // https://issues.chromium.org/issues/346766786 name: "ComposedPathReturnTargetBeingDispatched", status: "stable", }, { name: "CompositeBGColorAnimation", public: true, status: "stable", base_feature: "none", }, { name: "CompositeBoxShadowAnimation", }, { name: "CompositeClipPathAnimation", status: "experimental", public: true, }, { name: "CompositedAnimationsCancelledAsynchronously", status: "stable" }, { name: "CompositedSelectionUpdate", public: true, status: {"Android": "stable"}, base_feature: "none", }, { name: "CompositingDecisionAtAnimationPhaseBoundaries" }, { name: "CompositionForegroundMarkers", status: { "Android": "stable", "default": "", } }, { // When enabled, EventTriggers[1] will function via cc::EventTrigger // objects that live on the compositor thread. // [1] https://drafts.csswg.org/css-animations-2/#event-triggers name: "CompositorEventTrigger" }, { // When enabled, TimelineTriggers[1] will function via cc::TimelineTrigger // objects that live on the compositor thread. // [1] https://drafts.csswg.org/css-animations-2/#timeline-triggers name: "CompositorTimelineTrigger", }, { name: "CompressionDictionaryTransport", base_feature: "none", public: true, }, { name: "ComputedAccessibilityInfo", status: "experimental", }, { name: "ComputeInlineContentsSafeRetarget", status: "stable", }, { name: "ComputePressure", status: { "Android": "", "default": "stable", } }, { name: "ComputePressureOwnContributionEstimate", status: { "Android": "", "default": "experimental", } }, { // When enabled, providing developers control over the resources loaded // into their pages' contexts and the endpoints to which their pages can // make requests. // Note: To enable this feature, developers MUST include the origin trial // token within the HTTP headers. Including the origin trial token via the // tag in the head of any page does NOT enable the feature. // See https://wicg.github.io/connection-allowlists/. name: "ConnectionAllowlist", origin_trial_feature_name: "ConnectionAllowlist", // This feature flag is used for overriding origin trial requirements for // testing purpose. See the comment below for `status` field for why this // is required even though there already exists a // `network::features::kConnectionAllowlists` for connection allowlist. // Kill switch is `network::features::kConnectionAllowlists`. base_feature: "OverrideConnectionAllowlistOriginTrial", base_feature_status: "disabled", // For the connection allowlist, its implementation is entirely within the // browser processes. It does not involve any changes in the renderer // process. The `status` field does not behave in the same manner for // other web platform features. For example, setting it to "stable" does // not enable the feature -- the renderer's internal state is updated, but // does not get propagated to the browser process. So connection allowlist // cannot know the status of the RuntimeEnabledFeature. status: "experimental", settable_from_internals: true, }, { // Fix for https://crbug.com/40659076. When enabled, queryCommandState for // 'subscript' or 'superscript' with a caret selection will consider // ancestor or elements, matching the behavior for range // selections. name: "ConsiderSubOrSuperScriptAncestorAlignForCaretSelection", status: "stable" }, { name: "ContactsManager", status: {"Android": "stable", "default": "test"}, }, { name: "ContactsManagerExtraProperties", status: {"Android": "stable", "default": "test"}, }, { name: "ContainerNameOnly", status: "stable", }, { name: "ContainerTiming", origin_trial_feature_name: "ContainerTiming", origin_trial_allows_third_party: true, status: "experimental", }, { name: "ContentIndex", status: {"Android": "stable", "default": "experimental"}, }, { name: "ContextMenu", status: "experimental", }, { // Enable support for Controlled Frame, providing the Controlled // Frame tag to IWA apps and other contexts. See // https://github.com/WICG/controlled-frame/blob/main/README.md for more // info. name: "ControlledFrame", public: true, status: "stable", }, { // Enable support for requesting SecurityInfo in WebRequest API // for controlled frames. See // https://wicg.github.io/controlled-frame/#dictdef-securityinfo for more // info. name: "ControlledFrameWebRequestSecurityInfo", status: "stable", depends_on: ["ControlledFrame"], }, { // Enables setting the `maxAge` option when creating a cookie in the // Cookie Store API. name: "CookieStoreAPIMaxAge", public: true, status: "stable", }, { // Feature flag for stripping \t and space from Cookie names and values. // https://crbug.com/437345480 name: "CookieStoreAPIWhitespaceStripping", status: "stable", }, { name: "CoopRestrictProperties", origin_trial_feature_name: "CoopRestrictProperties", base_feature: "none", }, { // Corrects the handling of
elements nested within