blob: 121c6f7f1d5b477d6f61a2c8ed6f2212c6074afc [file] [log] [blame]
{
// 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 is used only if base_feature is not empty.
//
// * "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, for now we require the base::Feature to be enabled
// by default, but we don't want the default enabled status affect the
// Blink feature. 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<bool> value or just a regular bool
// value.
is_protected_feature: {
default: false,
value_type: "bool",
}
},
data: [
{
// crbug.com/439682405
name: "AbortByPlaceholderLayout",
status: "stable",
},
{
// 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: "AIPageContentPaidContentAnnotation",
status: "stable"
},
// In AIPageContentAgent::ComputeHitTestableNodesInViewport, the hit test
// may hit the same node multiple times, which causes issues with computing
// the final z-order of page elements. This flag will filter those
// duplicate results first before doing any further processing.
{
name: "AIPageContentZOrderEarlyFiltering",
status: "stable"
},
{
name: "AIPromptAPI",
public: true,
status: {
"Win": "experimental",
"Mac": "experimental",
"Linux": "experimental",
"ChromeOS": "experimental",
"default": "",
},
origin_trial_feature_name: "AIPromptAPIMultimodalInput",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
origin_trial_allows_third_party: true,
implied_by: ["AIPromptAPIMultimodalInput"],
},
{
// Extension access to "AIPromptAPI".
name: "AIPromptAPIForExtension",
public: true,
status: {
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"ChromeOS": "stable",
"default": "",
},
},
{
name: "AIPromptAPIForWorkers",
public: true,
},
{
name: "AIPromptAPIMultimodalInput",
status: {
"Win": "experimental",
"Mac": "experimental",
"Linux": "experimental",
"ChromeOS": "experimental",
"default": "",
},
origin_trial_feature_name: "AIPromptAPIMultimodalInput",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
origin_trial_allows_third_party: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
// Gates access to the responseConstraint enhancement for "AIPromptAPI".
// This feature alone does not expose any "AIPromptAPI" feature access.
name: "AIPromptAPIStructuredOutput",
status: "stable",
},
{
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: "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: "AllowContentInitiatedDataUrlNavigations",
base_feature: "none",
},
// Fix for https://crbug.com/41238177.
{
name: "AllowCopyingEmptyLastTableCell",
status: "stable",
},
{
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",
},
{
// 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",
},
{
// 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",
},
{
// Switch for https://crbug.com/445371140 which changes the initial value
// for position-visibility to 'anchors-visible' per current spec.
name: "AnchorsVisibleInitialValue",
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: "experimental",
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: "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",
},
{
// Fix Asymmetric word navigation behavior on Windows when punctuation follows whitespace
// See https://crbug.com/40252703
name: "AsymmetricWordBoundaryFix",
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,
},
{
name: "AudioContextOnError",
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,
},
{
name: "AutoDarkMode",
base_feature: "none",
origin_trial_feature_name: "AutoDarkMode",
},
{
name: "AutomationControlled",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
name: "AutoPictureInPictureVideoHeuristics",
status: "experimental",
},
{
name: "AvoidForcedLayoutOnInvisibleDocumentClose",
status: "test",
},
{ // 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",
},
{
// Killswitch for https://crbug.com/40947850.
name: "BackdropRootForClipPathWithBackdropFilter",
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: "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: "BlinkExtensionChromeOSKiosk",
depends_on: ["BlinkExtensionChromeOS"],
browser_process_read_write_access: true,
},
{
name: "BlinkExtensionWebView",
public: true,
},
{
name: "BlinkExtensionWebViewMediaIntegrity",
public: true,
},
{
name: "BlinkLifecycleScriptForbidden",
},
{
name: "BlinkRuntimeCallStats",
},
{
// https://chromestatus.com/feature/4830298126417920
name: "BlobBytes",
status: "experimental",
},
{
name: "BlockingFocusWithoutUserActivation",
status: "experimental",
},
// https://chromestatus.com/feature/5176753681203200
{
name: "BorderRadiusCorrectionCoverageFactor",
status: "test",
},
// crbug.com/1147998: 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: "experimental",
},
{
name: "BrowserInitiatedAutomaticPictureInPicture",
public: true,
status: "experimental",
},
{
name: "BrowserVerifiedUserActivationKeyboard",
base_feature: "none",
public: true,
},
{
name: "BrowserVerifiedUserActivationMouse",
base_feature: "none",
public: true,
},
{
name: "BufferedBytesConsumerLimitSize",
status: "stable",
},
{
name: "BuiltInAIAPI",
status: "experimental",
base_feature_status: "enabled",
// An OT feature name is required to satisfy `implied_by` build checks.
// The feature reuses AIPromptAPIMultimodalInput, but any origin trial
// features in the `implied_by` list will enable this feature as well.
origin_trial_feature_name: "AIPromptAPIMultimodalInput",
copied_from_base_feature_if: "overridden",
implied_by: [
"AIPromptAPI",
"AIPromptAPIMultimodalInput",
"AIRewriterAPI",
"AISummarizationAPI",
"AIWriterAPI",
"LanguageDetectionAPI",
"TranslationAPI",
"AIProofreadingAPI",
]
},
{
// 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",
},
{
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: "Canvas2dImageChromium",
base_feature: "none",
public: true,
},
{
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",
status: "test",
},
{
// Remove the restriction that drawElementImage can only draw immediate children
// of the canvas, and allow drawing canvas descendants.
name: "CanvasDrawElementInSubtree",
depends_on: ["CanvasDrawElement"],
},
{
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",
},
{
// crbug.com/389726691.
name: "CanvasTextMemoryPressure",
status: "stable",
},
{
// crbug.com/450531794.
name: "CanvasTextSwitchFrameOnFinalize",
status: "stable",
},
{
// crbug.com/450531794.
name: "CanvasTextTexImage2DFix",
status: "stable",
},
{
// 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"},
},
{
// crbug.com/446475645
name: "CaretPositionFromPointTextareaFix",
status: "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",
},
{
// If focus is not at canonical position then spellcheck should be deactivated.
// crbug.com/396485529
name: "CheckForCanonicalPositionInIdleSpellCheck",
status: "stable",
},
{
name: "CheckVisibilityExtraProperties",
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",
},
{
// 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",
},
{
// Allows top-level sites to restrict collection of high-entropy UA client
// hints (from 3Ps, or itself) via the getHighEntropyValues API.
// crbug.com/385161047
name: "ClientHintUAHighEntropyValuesPermissionPolicy",
status: "test",
},
{
// 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: "experimental",
},
// 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<DOMString> 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",
},
{
name: "CollectWidthAndHeightAsStylesForNestedSvg",
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": "",
}
},
{
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",
}
},
{
// Fix for https://crbug.com/40659076. When enabled, queryCommandState for
// 'subscript' or 'superscript' with a caret selection will consider
// ancestor <sub> or <sup> 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: "ContainerTiming",
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",
},
{
name: "CookieDeprecationFacilitatedTesting",
base_feature: "none",
},
{
name: "CoopRestrictProperties",
origin_trial_feature_name: "CoopRestrictProperties",
base_feature: "none",
},
{
// Corrects the handling of <form> elements nested within <template> tags
// in HTML parsing. See https://crbug.com/352896478 for details.
name: "CorrectTemplateFormParsing",
status: "experimental"
},
{
name: "CorsRFC1918",
},
{
// CPU Performance API, work in progress.
// https://chromestatus.com/feature/5189864286978048
// https://github.com/explainers-by-googlers/cpu-performance
name: "CpuPerformance",
status: "experimental"
},
{
name: "CrashReportingStorageAPI",
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "CrashReportingStorageAPI",
},
{
name: "CreateInlineContentsExcludeOutOfFlow",
status: "stable",
},
{
// When enabled, allowlisting script urls and scripts used in eval via
// hashes will be supported in script-src. This is a no-op if the
// network::features::kCSPScriptSrcHashesInV1 flag is off, since it
// controls parsing in the network service.
// See crbug.com/392657736 for details.
name: "CSPHashesV1",
base_feature: "none",
origin_trial_feature_name: "CSPExtendedScriptSrcHashes",
origin_trial_os: ["win", "linux", "mac", "android", "chromeos"],
status: "experimental",
public: true,
},
{
name: "CSPReportHash",
status: "stable",
},
{
// The AccentColor And AccentColorText CSS system color keywords
name: "CSSAccentColorKeyword",
status: "experimental",
},
{
// Allows using counter() and counters() in alt text (after / in content property).
name: "CSSAltCounter",
status: "stable",
},
{
// An update of anchor positioning (primarily how scrolling affects
// layout, but includes other inter-connected changes).
name: "CSSAnchorUpdate",
status: "stable",
},
{
// Let transforms affect anchor() and anchor-size() functions.
name: "CSSAnchorWithTransforms",
status: "experimental",
},
{
// Whether <image> values are allowed as counter style <symbol>
name: "CSSAtRuleCounterStyleImageSymbols",
},
{
// https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
status: "test",
},
// https://chromestatus.com/feature/5459864205393920
{
// https://chromestatus.com/feature/5125388091260928
name: "CSSBorderShape",
status: "experimental",
},
{
// Support CSS Values Level 4 calc simplification and serialization
// as specified in the specs below.
// https://drafts.csswg.org/css-values-4/#calc-simplification
// https://drafts.csswg.org/css-values-4/#calc-serialize
name: "CSSCalcSimplificationAndSerialization",
},
{
// https://chromestatus.com/feature/5082469066604544
name: "CSSCaretAnimation",
status: "stable",
},
{
// Need a feature entry
name: "CSSCaretShape",
status: "experimental",
},
{
// Support case-sensitive attribute selector modifier
// https://drafts.csswg.org/selectors-4/#attribute-case
name: "CSSCaseSensitiveSelector",
status: "test",
},
{
// In the cases where it is impossible or impractical to determine the
// measure of the “0” glyph, it must be assumed to be 0.5em wide by 1em
// tall. Thus, the ch unit falls back to 0.5em in the general case, and to
// 1em when it would be typeset upright (i.e. writing-mode is vertical-rl or
// vertical-lr and text-orientation is upright).
// https://drafts.csswg.org/css-values-4/#ch
// See crbug.com/416145497 for more details.
name: "CSSChUnitSpecCompliantFallback",
status: "stable",
},
{
name: "CSSColorContrast",
status: "experimental",
},
{
name: "CSSColorTypedOM",
status: "experimental",
},
{
// https://github.com/w3c/csswg-drafts/issues/12090#issuecomment-3204775586
name: "CSSContainerNameNotTreeScoped",
status: "experimental",
},
// https://drafts.csswg.org/css-values-5/#progress
// container-progress()
{
name: "CSSContainerProgressNotation",
status: "experimental",
},
{
// https://drafts.csswg.org/css-conditional-5/#typedef-style-range
name: "CSSContainerStyleQueriesRange",
status: "stable",
},
{
// https://drafts.csswg.org/css-borders-4/#corner-shaping
name: "CSSCornerShapeInsetBoxShadowFollowsContour",
status: "test",
},
{
// https://drafts.csswg.org/css-borders-4/#corner-shaping
name: "CSSCornersShorthand",
status: "experimental",
},
{
// Unprefixed cross-fade() (in addition to the existing -webkit-cross-fade()).
// https://drafts.csswg.org/css-images-4/#cross-fade-function
name: "CSSCrossFade",
status: "experimental",
},
{
name: "CSSCustomMedia",
status: "test",
},
{
name: "CSSDynamicRangeLimit",
status: "stable",
},
{
// Include custom properties in CSSComputedStyleDeclaration::item/length.
// https://crbug.com/949807
name: "CSSEnumeratedCustomProperties",
status: "stable",
},
{
// https://drafts.csswg.org/css-anchor-position-2/#anchored
name: "CSSFallbackContainerQueries",
status: "stable",
},
{
// crbug.com/417306102
name: "CssFitWidthText",
status: "experimental",
},
{
name: "CSSFontSizeAdjust",
status: "stable",
},
{
// https://drafts.csswg.org/css-mixins-1/#function-rule
name: "CSSFunctions",
status: "stable",
},
{
// https://chromestatus.com/feature/5157805733183488
name: "CSSGapDecoration",
status: "experimental",
},
{
// https://chromestatus.com/feature/5157805733183488
name: "CSSGridGapSuppression",
status: "experimental",
depends_on: ["CSSGapDecoration"],
},
{
// This needs to be kept as a runtime flag as long as we need to forcibly
// disable it for WebView on Android versions older than P. See
// https://crrev.com/f311a84728272e30979432e8474089b3db3c67df
name: "CSSHexAlphaColor",
status: "stable",
},
{
// https://drafts.csswg.org/css-values-5/#ident
name: "CSSIdentFunction",
status: "test",
},
{
// The inherit() function works like var(), except that it grabs
// the computed value of the specified property from the parent style
// instead of the current style.
//
// https://drafts.csswg.org/css-values-5/#inherit-notation
name: "CSSInheritFunction",
status: "experimental",
},
{
// CSS if() function for custom properties. Flag is used only for media
// queries support in conditions.
// https://drafts.csswg.org/css-values-5/#if-notation.
name: "CSSInlineIfForMediaQueries",
status: "stable",
},
{
// CSS if() function for custom properties. Flag is used only for style
// queries support in conditions.
// https://drafts.csswg.org/css-values-5/#if-notation.
name: "CSSInlineIfForStyleQueries",
status: "stable",
},
{
// CSS if() function for custom properties. Flag is used only for supports
// queries support in conditions.
// https://drafts.csswg.org/css-values-5/#if-notation.
name: "CSSInlineIfForSupportsQueries",
status: "stable",
},
{
// https://chromestatus.com/feature/6289894144212992
name: "CSSKeyframesRuleLength",
status: "stable",
},
{
name: "CSSLayoutAPI",
status: "experimental",
},
{
name: "CSSLetterAndWordSpacingPercentage",
status: "experimental",
},
{
name: "CSSLineClamp",
status: "experimental",
},
{
name: "CSSLineClampLineBreakingEllipsis",
depends_on: ["CSSLineClamp"],
},
{
// Allows pseudo-element selectors within logical combination pseudo-
// classes, e.g. :is(div::before).
//
// https://crbug.com/444386484
name: "CSSLogicalCombinationPseudo",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "stable",
},
{
name: "CSSMasonryLayout",
status: "experimental",
public: true,
},
// https://drafts.csswg.org/css-values-5/#progress
// media-progress()
{
name: "CSSMediaProgressNotation",
status: "experimental",
},
{
name: "CSSMixins",
status: "experimental",
},
{
name: "CSSNestedPseudoElements",
status: "stable",
},
{
// https://chromestatus.com/feature/5261280285949952
name: "CSSOverscrollGestures",
status: "test",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
},
{
// Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
// See crbug.com/1485525.
name: "CSSParserIgnoreCharsetForURLs",
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "test",
},
// https://drafts.csswg.org/css-values-5/#progress
// progress()
{
name: "CSSProgressNotation",
status: "stable",
},
{
// For ::column pseudo-element for fragment styling.
// https://github.com/flackr/carousel/blob/main/fragmentation/README.md
name: "CSSPseudoColumn",
status: "stable",
},
{
name: "CSSPseudoElementInterface",
status: "experimental",
},
{
// Enables the :has-slotted pseudo-selector.
// https://chromestatus.com/feature/5134941143433216
name: "CSSPseudoHasSlotted",
status: "experimental",
},
{
// When an audio, video, or similar resource is "playing"
// or "paused".
// https://www.w3.org/TR/selectors-4/#video-state
name: "CSSPseudoPlayingPaused",
status: "test",
},
{
// For ::scroll-up-button and ::scroll-down-button pseudo-elements for Carousel.
// https://github.com/flackr/carousel/tree/main/scroll-button
name: "CSSPseudoScrollButtons",
status: "stable",
depends_on: ["PseudoElementsFocusable"],
},
{
// For ::scroll-marker and ::scroll-marker-group pseudo-elements for Carousel.
// https://github.com/flackr/carousel/tree/main/scroll-marker
name: "CSSPseudoScrollMarkers",
status: "stable",
depends_on: ["PseudoElementsFocusable"],
},
{
// Non-standard 'auto' keyword for the CSS resize property. Used for
// selectively enable resize corner for textarea via UA stylesheet, but
// unintentionally exposed to author sheets. UA rule is now using
// -internal-textarea-auto instead.
name: "CSSResizeAuto",
status: "stable",
},
{
name: "CSSRevertRule",
status: "experimental",
},
{
name: "CSSRubyOverhang",
status: "experimental",
},
{
name: "CSSSafePrintableInset",
status: "experimental",
},
{
// The '&' pseudo-class effectively behaves like :where(:scope)
// when used in @scope rules.
name: "CSSScopeifiedParentPseudoClass",
status: "stable",
},
{
// The "@import scope(...)" syntax.
// https://github.com/w3c/csswg-drafts/issues/7348
name: "CSSScopeImport",
status: "experimental",
},
{
// https://drafts.csswg.org/css-conditional-5/#scrolled
name: "CSSScrolledContainerQueries",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-initial-target
name: "CSSScrollInitialTarget",
status: "stable",
},
{
// https://github.com/w3c/csswg-drafts/issues/12122
name: "CSSScrollMarkerGroupModes",
status: "experimental",
},
{
// https://drafts.csswg.org/css-overflow-5/#active-before-after-scroll-markers
// :target-before and :target-after pseudo classes for scroll markers.
name: "CSSScrollMarkerTargetBeforeAfter",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchange
name: "CSSScrollSnapChangeEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchanging
name: "CSSScrollSnapChangingEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snapevent-interface
name: "CSSScrollSnapEventConstructorExposed",
status: "experimental",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSScrollSnapEvents",
status: "stable",
implied_by: ["CSSScrollSnapChangeEvent", "CSSScrollSnapChangingEvent"],
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-start
name: "CSSScrollStart",
status: "test",
},
{
// scroll-target-group property
// https://drafts.csswg.org/css-overflow-5/#scroll-target-group
name: "CSSScrollTargetGroup",
status: "stable",
},
{
// scroll-target-group property sets aria-current=true on :target-current html scroll marker.
name: "CSSScrollTargetGroupAriaCurrent",
status: "experimental",
},
{
name: "CSSSelectorFragmentAnchor",
status: "experimental",
base_feature: "CssSelectorFragmentAnchor",
},
{
name: "CSSSignRelatedFunctions",
status: "stable",
},
{
name: "CSSSupportsAtRuleFunction",
status: "experimental",
},
{
name: "CSSSupportsForImportRules",
status: "stable",
},
{
// Allows the CSS "accent-color" property to support the system accent color as the default option.
name: "CSSSystemAccentColor",
status: {
"ChromeOS": "stable",
"Mac": "stable",
"Win": "stable",
"default": "experimental",
},
},
{
// https://issues.chromium.org/40787216: CSS `text-align: match-parent` value
name: "CSSTextAlignMatchParent",
status: "experimental",
},
{
// crbug.com/1463890: CSS `text-autospace` property
name: "CSSTextAutoSpace",
status: "stable",
},
{
// crbug.com/40321528
name: "CssTextJustify",
status: "test",
},
{
// crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
name: "CSSTextSpacing",
depends_on: ["CSSTextAutoSpace"],
status: "test",
},
{
// https://issues.chromium.org/41297237: CSS `text-transform: full-width` value
name: "CSSTextTransformFullWidth",
status: "experimental",
},
{
// Support for tree-scoped [1] timeline names (e.g. produced by
// scroll-timeline).
//
// [1] https://drafts.csswg.org/css-scoping-1/#shadow-names
name: "CSSTreeScopedTimelines",
},
{
name: "CSSTypedArithmetic",
status: "stable",
},
// Support for `user-select:contain`.
{
name: "CSSUserSelectContain",
status: "test",
},
{
name: "CSSVideoDynamicRangeMediaQueries",
status: "experimental",
},
{
// https://chromestatus.com/feature/4850737974345728
name: "CSSViewTransitionAutoName",
status: "experimental",
},
{
// appearance:base-select for <select multiple> and <select size=n>
// https://issues.chromium.org/issues/357649033
name: "CustomizableSelectInPage",
status: "experimental",
depends_on: ["SelectMobileDesktopParity"],
},
{
// appearance:base-select for <select multiple size=1> with a picker.
name: "CustomizableSelectMultiplePopup",
status: "experimental",
depends_on: ["CustomizableSelectInPage"],
},
// see crbug.com/341313078
{
name: "CustomScrollbarApplyMinimumThumbLength",
status: "stable",
},
{
// https://chromestatus.com/feature/5134293578285056
name: "Database",
},
// https://crbug.com/448174611
{
name: "DeclarativeCSSModules",
status: "test",
},
{
// https://crbug.com/393631108
name: "DecoupleComputedBorderWidthFromStyle",
public: true,
status: "experimental",
},
{
// https://crbug.com/393631108
name: "DecoupleResolvedColumnRuleWidthFromStyle",
public: true,
status: "experimental",
},
{
// Killswitch for https://crbug.com/400317114 fix.
// This lands in M142, and the flag can be removed in M144.
name: "DelegatesFocusTextControlInputFix",
status: "stable",
},
{
name: "DeprecateCursorMovementIterator",
status: "stable",
},
// This allows pages to opt out of the unload deprecation. Enabling this
// allows unload event handers to be used in the frame regardless of any
// Permissions-Policy setting.
// https://crbug.com/1432116
{
name: "DeprecateUnloadOptOut",
origin_trial_feature_name: "DeprecateUnloadOptOut",
origin_trial_type: "deprecation",
origin_trial_allows_third_party: true,
origin_trial_allows_insecure: true,
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
},
{
name: "DesktopPWAsAdditionalWindowingControls",
status: "test",
},
{
name: "DesktopPWAsSubApps",
status: "test",
},
{
name: "DeviceAttributes",
status: {
"ChromeOS": "stable",
"default": "experimental",
},
},
{
name: "DeviceAttributesPermissionPolicy",
status: "stable",
},
{
name: "DeviceBoundSessionCredentials",
origin_trial_feature_name: "DeviceBoundSessionCredentials",
origin_trial_os: ["win", "linux", "mac"],
status: "experimental",
// Killswitch is net::features::kDeviceBoundSessions
base_feature: "none",
},
{
name: "DeviceBoundSessionCredentials2",
origin_trial_feature_name: "DeviceBoundSessionCredentials2",
origin_trial_os: ["win", "linux", "mac"],
status: "experimental",
// Killswitch is net::features::kDeviceBoundSessions
base_feature: "none",
},
{
name: "DeviceOrientationRequestPermission",
status: "experimental",
},
{
name: "DevicePosture",
status: "stable",
},
{
// This feature makes the <dialog> element close properly when its "open"
// attribute is removed. https://github.com/whatwg/html/issues/5802 and
// https://github.com/whatwg/html/pull/10124.
name: "DialogCloseWhenOpenRemoved",
status: "experimental",
},
{
name: "DialogNewFocusBehavior",
status: "experimental",
},
{
name: "DigitalGoods",
origin_trial_feature_name: "DigitalGoodsV2",
origin_trial_os: ["android", "chromeos"],
public: true,
status: {
"Android": "stable",
"ChromeOS": "stable",
// crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
// so enable the API on all platforms for testing.
"default": "test"
},
base_feature: "none",
},
{
name: "DigitalGoodsV2_1",
status: {
"Android": "stable",
"ChromeOS": "stable",
// crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
// so enable the API on all platforms for testing.
"default": "test"
},
},
{
name: "DirectSockets",
public: true,
status: "stable",
},
{
// Experimental support for the Direct Sockets API in Service Workers.
// https://github.com/WICG/direct-sockets
name: "DirectSocketsInServiceWorkers",
status: "test",
depends_on: ["DirectSockets"],
},
{
// Experimental support for the Direct Sockets API in Shared Workers.
// https://github.com/WICG/direct-sockets
name: "DirectSocketsInSharedWorkers",
status: "test",
depends_on: ["DirectSockets"],
},
{
name: "DisableDifferentOriginSubframeDialogSuppression",
base_feature: "none",
origin_trial_feature_name: "DisableDifferentOriginSubframeDialogSuppression",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
},
{
name: "DisableReduceAcceptLanguage",
origin_trial_feature_name: "DisableReduceAcceptLanguage",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
base_feature: "none",
},
{
// Disables removeFormat command on Plaintext-only content editable div
name: "DisableRemoveFormatForPlainTextOnlyEditableDiv",
status: "stable",
},
{
// `kHidden` and `kHiddenButPainting` visibility states are treated as
// hidden in the sense of `document.visibilityState`. However, they are
// handled differently internally. For example, video playback should
// continue in `kHiddenButPainting`, such as when the page is being
// background captured. When enabled, this feature causes blink to
// notify internal observers about visibility changes between the two
// hidden states, in addition to transitions to/from `kVisible`.
//
// Since the two hidden states are exposed to the web identically, there
// is no `visibilitychanged` event fired when switching between them.
//
// When this feature is disabled, blink reverts to its original behavior
// of eliding transitions between the two hidden states, including to
// internal observers. This behavior causes problems with capture and
// picture-in-picture, but is preserved as a safe fallback.
name: "DispatchHiddenVisibilityTransitions",
status: "stable",
base_feature: "DispatchHiddenVisibilityTransitions",
},
{
// Dispatch selectionchange event per element according to the new spec:
// https://w3c.github.io/selection-api/#selectionchange-event
name: "DispatchSelectionchangeEventPerElement",
status: "stable",
},
{
// Allowing elements with display:contents to have focus.
// See https://crbug.com/1366037
name: "DisplayContentsFocusable",
status: "experimental",
},
{
name: "DisplayCutoutAPI",
base_feature: "none",
public: true,
},
{
// https://chromestatus.com/feature/5067126381215744
name: "DocumentActiveViewTransition",
status: "stable",
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
// Enables DocumentIsolationPolicy.
// See https://https://github.com/WICG/document-isolation-policy.
name: "DocumentIsolationPolicy",
status: "experimental",
origin_trial_feature_name: "DocumentIsolationPolicy",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature: "none",
},
{
// Fix iframe unload events not firing during document.open()
// https://crbug.com/40947017
// Lands in M144; remove this flag in M146 after the milestone rolls.
name: "DocumentOpenIframeUnloadEvents",
status: "stable",
},
{
name: "DocumentOpenOriginAliasRemoval",
status: "experimental",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentOpenSandboxInheritanceRemoval",
status: "stable",
copied_from_base_feature_if: "overridden",
},
// https://chromestatus.com/feature/5111042975465472
// document.patch, <template patchfor> etc.
{
name: "DocumentPatching",
status: {
"default": "test",
},
},
{
name: "DocumentPictureInPictureAPI",
status: {
"Android": "",
"default": "stable",
},
},
// Enables `preferInitialWindowPlacement` Document PiP option to skip
// re-using the previous pip window bounds.
{
name: "DocumentPictureInPicturePreferInitialPlacement",
status: {
"Android": "",
"default": "stable",
},
},
// Enables propagating user activation from a document picture-in-picture
// window up to its opener window and vice versa.
{
name: "DocumentPictureInPictureUserActivation",
status: {
"Android": "",
"default": "stable",
},
},
// Enables the ability to use Document Policy header to control feature
// DocumentDomain.
{
name: "DocumentPolicyDocumentDomain",
status: "experimental",
},
// Enables the ability to use Document Policy header to control feature
// ExpectNoLinkedResources.
{
name: "DocumentPolicyExpectNoLinkedResources",
status: "stable",
},
// Enables the ability to use Document Policy header to control feature
// IncludeJSCallStacksInCrashReports. https://chromestatus.com/feature/4731248572628992
{
name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
status: "stable",
},
{
name: "DocumentPolicyNegotiation",
origin_trial_feature_name: "DocumentPolicyNegotiation",
public: true,
status: "experimental",
base_feature: "none",
},
// Enables the ability to use Document Policy header to control feature
// NetworkEfficiencyGuardrails. https://chromestatus.com/feature/5156240166223872
{
name: "DocumentPolicyNetworkEfficiencyGuardrails",
status: "experimental",
},
// Enables the ability to use Document Policy header to control feature
// SyncXHR.
{
name: "DocumentPolicySyncXHR",
status: "experimental",
},
{
name: "DocumentWrite",
},
{
name: "DOMPartsAPI",
status: "experimental",
implied_by: ["DOMPartsAPIMinimal"],
},
{
name: "DOMPartsAPIMinimal",
},
{
// Enable drag and drop delegation to child frames in HTMLPlugInElements
// (object/embed elements). Fixes drag and drop from text inputs/textareas
// to elements inside object frames.
name: "DragAndDropPluginElementSupport",
status: "stable",
},
{
// See https://crbug.com/379170477
name: "EditContextHandleTextOrSelectionUpdateDuringComposition",
status: "test",
},
{
name: "EditEmojiUnicode11",
status: "stable",
},
{
public: true,
name: "ElementCapture",
status: {"Android": "experimental", "iOS": "", "default": "stable"},
},
{
name: "ElementInnerTextHandleFirstLineStyle",
status: "stable",
},
{
// ElementInternals.type allows web authors to create autonomous
// custom elements that inherit specific behaviors from native
// HTML elements, while maintaining the ability to use shadow DOM
// and custom rendering.
// crbug.com/422947646
// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/ElementInternalsType/explainer.md
name: "ElementInternalsDotType",
status: "experimental",
},
{
// crbug.com/447267214
name: "EmojiJustification",
status: "stable",
},
{
name: "EmphasisMarkShapeCache",
status: "stable",
},
{
name: "EndpointInclusiveCommitStyles",
status: "stable",
},
{
name: "EnforceAnonymityExposure",
status: "stable",
},
{
// See: crbug.com/40771555
name: "EnterInOpenShadowRoots",
status: "stable",
},
// When enabled, the LCP algorithm ignores image entropy for the first
// video frame. See crbug.com/434659232.
{
name: "EntropyIgnoredForFirstVideoFrameLCP",
status: "experimental",
},
{
// `event.pseudoTarget` property to represent pseudo-elements in events. Returns `CSSPseudoElement` or null.
name: "EventPseudoTargetProperty",
status: "experimental",
depends_on: ["CSSPseudoElementInterface"],
},
{
// See: crbug.com/40887145
"name": "EventTargetStringIdentifierUsesQuotes",
"status": "stable",
},
{
name: "EventTimingInteractionCount",
status: "experimental",
},
{
name: "EventTimingTargetSelector",
status: "experimental",
},
{
// https://drafts.csswg.org/web-animations-2/#triggers
name: "EventTrigger",
status: "experimental",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalJSProfilerMarkers",
status: "experimental",
},
{
name: "ExperimentalMachineLearningNeuralNetwork",
// Enabled by webnn::mojom::features::kExperimentalWebMachineLearningNeuralNetwork.
base_feature: "none",
},
{
name: "ExperimentalPolicies",
status: "experimental",
},
{
name: "ExposeCSSFontFeatureValuesRule",
status: "stable",
},
{
name: "ExposeRenderTimeNonTaoDelayedImage",
},
{
name: "ExtendedTextMetrics",
origin_trial_feature_name: "ExtendedTextMetrics",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
// Kill-switch for crbug.com/40434449.
// Added in M139, and it can be removed in M141.
name: "ExternalPopupMenuClickEvent",
status: "stable",
},
{
name: "EyeDropperAPI",
status: {
// EyeDropper UI is available on ChromeOS, Linux (x11), Mac, and Win.
// This list should match the supported operating systems for the
// kEyeDropper base::Feature.
"ChromeOS": "stable",
"Linux": "stable",
"Mac": "stable",
"Win": "stable",
},
// When running under experimental platform variants, such as
// Linux/Wayland, EyeDropper base::Feature defined in the browser
// process is used to disable it at runtime, if needed.
base_feature: "none",
public: true,
},
{
name: "FaceDetector",
status: "experimental",
},
{
name: "FastPositionIterator",
// Not enabled due to a RTL issue. crbug.com/1421016.
},
{
name: "FedCm",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmAutofill",
implied_by: ["FedCmDelegation"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmDelegation",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmErrorAttribute",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FedCmIdPRegistration",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmLightweightMode",
depends_on: ["FedCm"],
status: "test",
public: true,
base_feature: "none",
},
{
name: "FedCmMultipleIdentityProviders",
depends_on: ["FedCm"],
status: "stable",
base_feature: "none",
public: true,
origin_trial_feature_name: "FedCmMultipleIdentityProviders",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
origin_trial_allows_third_party: true,
},
{
name: "FedCmNonStringToken",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
status: "stable",
},
{
name: "FencedFrames",
base_feature: "none",
// This helps enable and expose the <fencedframe> element, but note that
// blink::features::kFencedFrames must be enabled as well, as we require
// the support of the browser process to fully enable the feature.
// Enabling this runtime enabled feature alone has no effect.
public: true,
status: "stable",
},
{
name: "FencedFramesAPIChanges",
// Various new IDL attributes on the <fencedframe> element (such as
// `config`, `sandbox`, and `allow`).
base_feature_status: "enabled",
copied_from_base_feature_if: "enabled_or_overridden",
status: "stable",
},
{
name: "FencedFramesDefaultMode",
base_feature_status: "disabled",
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
// Allows fenced frames to access unpartioned data via Shared Storage in
// exchange for disabling untrusted network access. This is the Blink
// counterpart of the base::Feature with the same name. Because local
// unpartitioned data access requires browser and renderer process
// coordination, the value of this flag is strictly controlled by the
// base::Feature variant, and setting this flag does nothing.
name: "FencedFramesLocalUnpartitionedDataAccess",
base_feature: "none",
public: true,
},
{
// Add Request.bytes() and Response.bytes()
// https://chromestatus.com/feature/5239268180754432
name: "FetchBodyBytes",
status: "stable",
},
{
// The Blink runtime-enabled feature name for the API's IDL.
// https://chromestatus.com/feature/4654499737632768
name: "FetchLaterAPI",
status: "stable",
},
{
// The retry ability for Fetch keepalive requests.
// https://chromestatus.com/feature/5181984581877760
name: "FetchRetry",
origin_trial_feature_name: "FetchRetry",
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "FetchRetry",
// base_feature is meant as kill-switch. This runtime-enabled feature
// should follow the Origin Trial unless explicitly overriden by Finch or
// commandline flags.
base_feature_status: "enabled",
// Enables the Blink feature only when the base::Feature is overridden by
// field trial or command line.
copied_from_base_feature_if: "overridden",
},
{
name: "FetchUploadStreaming",
status: "stable",
},
{
// Also enabled when blink::features::kFileHandlingAPI is overridden
// on the command line (or via chrome://flags).
name: "FileHandling",
depends_on: ["FileSystemAccessLocal"],
status: {"Android": "test", "default": "stable"},
base_feature: "FileHandlingAPI",
},
{
name: "FileHandlingIcons",
depends_on: ["FileHandling"],
status: {"Android": "test", "default": "experimental"},
base_feature: "none",
},
{
name: "FileSystem",
public: true,
status: "stable",
base_feature: "none",
},
{
// Shared objects by OPFS and non-OPFS File System Access API.
name: "FileSystemAccess",
implied_by: ["FileSystemAccessLocal", "FileSystemAccessOriginPrivate"],
},
{
// In-development features for the File System Access API.
name: "FileSystemAccessAPIExperimental",
status: "experimental",
},
{
// The FileSystemHandle.getCloudIdentifiers() method (see
// crbug.com/1443354).
name: "FileSystemAccessGetCloudIdentifiers",
status: {
"ChromeOS": "experimental",
"default": "",
}
},
{
// Non-OPFS File System Access API.
name: "FileSystemAccessLocal",
status: {"default": "stable"},
},
{
name: "FileSystemAccessLockingScheme",
status: "stable",
},
{
// OPFS File System Access API.
name: "FileSystemAccessOriginPrivate",
status: "stable",
},
{
// When enabled, calling remove() on a FileSystemAccessHandle will also
// update the permission grants for the associated path. Restored after
// next write to the path.
// See crbug.com/421690393.
name: "FileSystemAccessRevokeReadOnRemove",
depends_on: ["FileSystemAccessWriteMode"],
status: "stable",
},
{
// Controls the internal write-only mode for various FileSystemAccess API.
// This covers mostly content layer and does not expose any write mode to
// user visible APIs.
// This flag is part of crbug.com/421690393 and crbug.com/328458680.
name: "FileSystemAccessWriteMode",
status: "stable",
},
{
// The FileSystemObserver interface for the File System Access API.
// See https://crbug.com/1019297.
name: "FileSystemObserver",
depends_on: ["FileSystemAccess"],
status: {
"Android": "experimental",
"iOS": "experimental",
"default": "stable",
},
},
{
// The unobserve function of the FileSystemObserver.
// See https://crbug.com/321980469.
name: "FileSystemObserverUnobserve",
status: "experimental",
},
{
// crbug.com/438220615
name: "FindAcrossParagraphsInTextarea",
status: "stable",
},
{
name: "FindFirstMisspellingEndWhenNonEditable",
status: "stable",
},
{
name: "FirstLineOnListItem",
status: "stable",
},
{
name: "FirstLineTextMetrics",
status: "stable",
},
{
// crbug.com/411739501
name: "FixNextPositionCalculationInInsertList",
status: "stable",
},
{
name: "Fledge",
status: "stable",
base_feature: "none",
public: true,
},
{
// Enables deal support within auctions.
name: "FledgeAuctionDealSupport",
status: "test",
},
{
name: "FledgeBiddingAndAuctionServerAPI",
origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
origin_trial_allows_third_party: true,
base_feature: "none",
status: "stable",
},
{
name: "FledgeBiddingAndAuctionServerAPIMultiSeller",
status: "stable",
},
{
name: "FledgeClickiness",
status: "test",
},
{
name: "FledgeCustomMaxAuctionAdComponents",
status: "stable",
},
{
// Enables using a 'deprecatedRenderURLReplacements' field within the
// Protected Audience ad auction config.
name: "FledgeDeprecatedRenderURLReplacements",
public: true,
status: "stable",
},
{
name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
status: "stable",
},
{
// Feature flag to control removal, in case we run into unexpected
// breakage.
//
// TODO(crbug.com/384481095): Remove in a few milestones, along with the
// implementation code.
name: "FledgeDirectFromSellerSignalsWebBundles",
},
{
name: "FledgeMultiBid",
public: true,
status: "stable",
},
{
// Enables the private model training API in Protected Audience.
// https://github.com/WICG/turtledove/blob/main/PA_private_model_training.md
name: "FledgePrivateModelTraining",
status: "test",
},
{
// Enables real time reporting API in Protected Audience.
// https://github.com/WICG/turtledove/blob/main/PA_real_time_monitoring.md
name: "FledgeRealTimeReporting",
public: true,
status: "stable",
},
{
// Enables the ability to set seller nonces on the header response and
// use bidNonce in bids.
name: "FledgeSellerNonce",
status: "stable",
},
{
// Enables having `executionMode` in the auctionConfig to use for seller scripts.
name: "FledgeSellerScriptExecutionMode",
status: "test",
},
{
name: "FledgeTrustedSignalsKVv1CreativeScanning",
status: "test",
},
{
name: "FledgeTrustedSignalsKVv2ContextualData",
depends_on: ["FledgeTrustedSignalsKVv2Support"],
status: "test",
},
{
name: "FledgeTrustedSignalsKVv2Support",
status: "stable",
},
{
name: "FlexWrapBalance",
status: "experimental",
},
{
name: "FluentOverlayScrollbars",
// The associated base feature is defined in
// ui/native_theme/features/native_theme_features.cc.
base_feature: "none",
},
{
name: "FluentScrollbars",
// The associated base feature is defined in
// ui/native_theme/features/native_theme_features.cc.
base_feature: "none",
},
{
// https://open-ui.org/components/scoped-focusgroup.explainer/
name: "Focusgroup",
status: "experimental",
origin_trial_feature_name: "Focusgroup",
},
{
// 2-D grid navigation functionality of focusgroup is considered out of
// scope for the initial implementation.
// crbug.com/445992558
name: "FocusgroupGrid",
depends_on: ["Focusgroup"],
status: "experimental",
},
{
name: "FontAccess",
status: {"Android": "", "default": "stable"},
},
{
name: "FontFallbackForTabSize",
status: "stable",
},
{
name: "FontFamilyPostscriptMatchingCTMigration",
},
{
name: "FontFamilyStyleMatchingCTMigration",
},
{
// crbug.com/40398871
name: "FontFeatureSettingsDescriptor",
status: "stable",
},
{
// crbug.com/41170551
name: "FontLanguageOverride",
status: "stable",
},
{
name: "FontMatchAliasesAsLastResort",
status: "stable",
},
{
name: "FontSrcLocalMatching",
base_feature: "none",
// No status, as the web platform runtime enabled feature is controlled by
// a Chromium level feature.
},
{
// crbug.com/393391746
name: "FontStyleObliqueZeroDegreeAsNormal",
status: "stable",
},
{
// crbug.com/40398871
name: "FontVariationSettingsDescriptor",
status: "stable",
},
{
// TODO(crbug.com/1231644): This flag is being kept (even though the
// feature has shipped) until there are settings to allow users to
// customize the feature.
name: "ForcedColors",
public: true,
status: "stable",
base_feature: "none",
},
{
// This is used in tests to perform memory measurement without
// waiting for GC.
name:"ForceEagerMeasureMemory",
},
{
// https://github.com/flackr/reduce-motion/blob/main/explainer.md
name: "ForceReduceMotion",
},
{
// The FormControlRange interface allows web authors to create
// Range-like objects of the value of <textarea> and <input>
// elements.
// crbug.com/421421332
// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/FormControlRange/explainer.md
name: "FormControlRange",
status: "test",
},
{
// TODO(crbug.com/1419161): Remove this feature after M113 has been stable
// for a few weeks or more. This is a kill switch that, when enabled, goes
// back to the old behavior, which was to restore the state for <input>
// and <select> even when they had `autocomplete=off`.
name: "FormControlRestoreStateIfAutocompleteOff",
},
{
name: "FractionalScrollOffsets",
base_feature: "none",
public: true,
},
{
name: "FreezeFramesOnVisibility",
status: "experimental",
},
{
name: "GamepadMultitouch",
status: "experimental",
public: true,
},
{
name: "GamepadWindowEventHandlers",
status: "stable",
},
{
// Tracking bug for the implementation: https://crbug.com/430204832
name: "GeolocationElement",
status: "experimental",
public: true,
},
{
name: "GetAllScreensMedia",
depends_on: ["GetDisplayMedia"],
public: true,
status: {
"ChromeOS": "stable",
"default": "test",
},
},
{
name: "GetComputedStyleOutsideFlatTree",
status: "stable",
},
{
name: "GetDisplayMedia",
public: true,
status: {
"Android": "experimental",
"default": "stable",
},
base_feature: "none",
},
{
name: "GetDisplayMediaRequiresUserActivation",
depends_on: ["GetDisplayMedia"],
status: "experimental",
},
// When a Web application calls getDisplayMedia() and asks for audio,
// allow a hint to be provided as to whether the Web application is
// interested in audio being among the options offered to the user
// on window display surfaces.
//
// https://www.w3.org/TR/screen-capture/#dom-displaymediastreamoptions-windowaudio
{
name: "GetDisplayMediaWindowAudioCapture",
status: "stable",
browser_process_read_write_access: true,
},
{
// To filter only elements in the HTML namespace when calling
// getElementsByName().
// This was added in M141 and can be removed after M143.
// https://issues.chromium.org/issues/40502558
name: "GetElementsByNameOnlyHTMLElements",
status: "stable",
},
{
name: "GetUserMediaEchoCancellationModes",
status: "stable",
},
{
name: "GroupEffect",
status: "test",
},
{
// Enables Skipping children for invisible select elements containing
// non-editable node while calculating end of paragraph.
name: "HandleDeletionAtStartAndEndBoundaryContainingHiddenElement",
status: "stable",
},
{
name: "HandleDisconnectedSelectionDuringDOMChanges",
status: "stable",
},
{
name: "HandleShadowDOMInSubstringUtil",
status: "stable",
},
{
name: "HandwritingRecognition",
status: {
"ChromeOS": "stable",
"default": "experimental",
},
},
{
name: "HasUAVisualTransition",
status: "stable",
},
// TODO(crbug.com/333628468): Enables the `headingoffset` and
// `headingreset` attributes, which allow for alternate styles of building
// structured headings. This is being actively prototyped, starting ~M136.
// For more see https://github.com/whatwg/html/issues/5033
{
name: "HeadingOffset",
status: "experimental",
},
{
name: "HighlightByLayoutObject",
status: "stable",
},
{
name: "HighlightPointerEvents",
},
{
name: "HighlightsFromPoint",
status: "stable",
},
{
// Moved from status stable to test due to https://crbug.com/456164629.
name: "HitTestBorderRadiusForStackingContext",
status: "test",
},
{
name: "HrefTranslate",
depends_on: ["TranslateService"],
origin_trial_feature_name: "HrefTranslate",
status: "stable",
base_feature: "none",
},
// The `anchor` attribute, supported by both anchor positioning and the
// popover API.
{
name: "HTMLAnchorAttribute",
status: "experimental",
},
// Additional default command/commandfor actions that aren't part of v1 of
// commands. When this flag is disabled only v1 actions (popover and dialog
// defaults) will work.
{
name: "HTMLCommandActionsV2",
status: "test",
},
// Adds support for the 'request-close' command.
// https://open-ui.org/components/invokers.explainer/
{
name: "HTMLCommandRequestClose",
status: "stable",
},
{
name: "HTMLElementScrollParent",
status: "experimental",
},
// Return a natural width/height of zero from
// HTMLImageElement.naturalWidth/Height for SVG images that don't have a
// natural width/height set.
{
name: "HTMLImageElementActualNaturalSize",
status: "test",
},
// Adds support for the `interestfor` attribute. See crbug.com/326681249.
// https://open-ui.org/components/interest-invokers.explainer/
// This shipped in M142 and the flag can be removed in M144.
{
name: "HTMLInterestForAttribute",
status: "stable",
},
// Adds support for the `::interest-hint` pseudo element, which is a sub-
// feature of the HTMLInterestForAttribute feature.
// https://open-ui.org/components/interest-invokers.explainer/
{
name: "HTMLInterestForInterestHintPseudo",
status: "experimental",
depends_on: ["HTMLInterestForAttribute"],
},
{
// Prevents the HTMLLinkElement processing model from being invoked when
// attributes are processed but their value doesn't change. See
// https://crbug.com/41436016.
name: "HTMLLinkElementAttributeValueChanges",
status: "stable",
},
{
// A flag, just for local testing to make the
// HTML parser yield more often and take longer to resume.
// This helps when debugging flaky tests caused by parser
// yielding heuristics.
name: "HTMLParserYieldAndDelayOftenForTesting",
},
{
name: "HTMLParserYieldByUserTiming",
status: "test",
},
{
// When enabled, specifies visual affordances for printing such as headers,
// footers and page numbers, to be PDF annotations.
// See section 14.8.2.2.1 here for info:
// https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf
name: "HTMLPrintingArtifactAnnotations",
status: "stable",
},
{
name: "ICUCapitalization",
status: "experimental",
},
{
name: "IgnoreLetterSpacingInCursiveScripts",
status: "stable",
},
{
name: "ImageDataPixelFormat",
status: "stable",
},
{
name: "ImageDocumentUseLayoutWidth",
status: "stable",
},
{
name: "ImplicitRootScroller",
public: true,
settable_from_internals: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
// Improved retargeting behavior of ToggleEvent.source and
// CommandEvent.source to match Event.relatedTarget.
// crbug.com/420639769
// Enabled in M142, can be removed in M144.
name: "ImprovedSourceRetargeting",
status: "stable",
},
{
name: "IncomingCallNotifications",
origin_trial_feature_name: "IncomingCallNotifications",
origin_trial_os: [ "win" ],
base_feature: "IncomingCallNotifications",
},
{
name: "IndexedDbGetAllRecords",
status: "stable",
},
{
name: "InertElementNonEditable",
status: "stable",
},
{
// If a painting bug no longer reproduces with this feature enabled, then
// the bug is caused by incorrect cull rects.
name: "InfiniteCullRect",
},
{
name: "InheritUserModifyWithoutContenteditable",
status: "stable",
},
{
// If enabled, and the inner html parser is unable to successfully
// parse, it will log histograms of why it failed. The logging is
// non-trivial.
name: "InnerHTMLParserFastpathLogFailure",
status: "experimental",
},
{
// Enable DataTransfer propagation to input events for insertFromPaste,
// insertFromDrop, and insertReplacementText operations on content-editables.
name: "InputEventDataTransferForInsertCmd",
status: "stable",
},
{
// The HTML parser inserts a </select> end tag before inserting <input>
// when parsing inside of a <select> tag. We want to allow <input> inside
// <select>, but it isn't web compatible enough. This flag allows <input>
// inside <select> but only if there is another open tag in between the
// <input> and the <select>, like <select><div><input>.
// For now, this flag also makes <input> close <select> like it used to
// when the <input> is put directly within an <option> or <optgroup>.
name: "InputInSelect",
status: "experimental",
},
{
name: "InputMultipleFieldsUI",
// No plan to support complex UI for date/time INPUT types on Android and
// iOS.
status: {"Android": "test", "iOS": "test", "default": "stable"},
},
// Insert a blockquote before a outer block after creating the blockquote
// when indenting a node whose outer block is a blockquote. See
// https://crbug.com/327665597
{
name: "InsertBlockquoteBeforeOuterBlock",
status: "stable",
},
{
// crbug.com/1420675
name: "InsertLineBreakIfPhrasingContent",
status: "stable",
},
{
name: "InstalledApp",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "InstallElement",
status: "experimental"
},
{
name: "InstallOnDeviceSpeechRecognition",
status: "stable",
},
{
name: "IntegrityPolicyScript",
status: "stable",
base_feature: "none",
public: true,
},
{
// Adds `!important` to `[inert] {interactivity: auto}` in the UA
// stylesheet. Resolved in the CSSWG here:
// https://github.com/w3c/csswg-drafts/issues/12049#issuecomment-3303716541
// This killswitch is shipping in M142, and can ge removed in M144.
name: "InteractivityInertImportant",
status: "stable",
},
{
name: "InterestGroupsInSharedStorageWorklet",
public: true,
status: "stable",
},
{
// If enabled, BeginMainFrame will always be requested when there are
// active IntersectionObservers and also active composited animations.
name: "IntersectionObserverCompositedAnimationsForceMainFrames",
status: "stable",
},
{
name: "InvertedColors",
status: "experimental",
},
{
name: "InvisibleSVGAnimationThrottling",
status: "stable",
},
{
name: "JavaScriptCompileHintsPerFunctionMagicRuntime",
status: "experimental",
origin_trial_feature_name: "JavaScriptCompileHintsPerFunctionMagic",
},
{
name: "JavaScriptSourcePhaseImports",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
base_feature: "none",
},
{
// Fixes a bug after find-in-page tries to return focus to
// the page. This change shipped in M142, and this flag can
// be removed in M144.
name: "KeyboardFocusabilityAfterFindInPage",
status: "stable",
},
{
name: "LangAttributeAwareFormControlUI",
settable_from_internals: true,
},
{
name: "LanguageDetectionAPI",
status: {
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"ChromeOS": "stable",
"Android": "test",
"default": "",
},
origin_trial_feature_name: "LanguageDetectionAPI",
origin_trial_allows_third_party: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "LanguageDetectionAPIForWorkers",
public: true,
},
{
name: "LayoutFlexNewRowAlgorithm",
status: "stable",
},
{
name: "LayoutIgnoreMarginsForSticky",
},
{
name: "LayoutImageEmptyNaturalSizeBeforeSizeAvailable",
status: "stable",
},
{
// Allow triggering the word suggestion from left click.
// From crbug.com/433209485
name: "LeftClickToHandleSuggestion",
status: {
"Android": "stable"
}
},
{
// Makes light dismiss for popovers and dialogs use the click event
// instead of pointerdown and pointerup in order to fix light dismiss
// bugs for touch inputs.
// https://issues.chromium.org/issues/408010435
name: "LightDismissFromClick",
status: "experimental",
},
{
name: "LimitThirdPartyCookies",
origin_trial_feature_name: "LimitThirdPartyCookies",
status: "experimental",
base_feature: "none",
},
{
// Improves the logic for removing focus from a currently focused <a>
// element when its href attribute is removed by considering other ways
// that an <a> may be focusable. Shipped in M142, should be safe to
// remove in M144.
// https://issues.chromium.org/issues/443585794
name: "LinkBlurImprovement",
status: "stable",
},
{
name: "ListOwnerMustHaveCSSBox",
status: "stable",
},
{
// Reverse origin trial allowing Local Network Access requests on
// non-secure contexts (but still requiring a permission grant from the
// user).
name: "LocalNetworkAccessNonSecureContextAllowed",
origin_trial_feature_name: "LocalNetworkAccessNonSecureContextAllowed",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
base_feature: "none",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by network::features::kLocalNetworkAccessChecks which
// needs to be enabled to make the whole feature work (see
// crbug.com/394009026).
},
{
name: "LocalNetworkAccessPermissionPolicy",
base_feature: "none",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by network::features::kLocalNetworkAccessChecks which
// needs to be enabled to make the whole feature work (see
// crbug.com/394009026).
},
{
name: "LocalNetworkAccessWebRTC",
base_feature: "none",
// No status because this feature is controlled by
// network::features::kLocalNetworkAccessChecks and
// network::features::kLocalNetworkAccessChecksWebRTC.
},
{
name: "LockedMode",
status: "test",
// Enabled by features::kLockedMode.
public: true,
},
{
// Enable sourceCharPosition for the invoke-type resolve-promise
// https://issues.chromium.org/issues/381529126
name: "LongAnimationFrameSourceCharPosition",
status: "experimental",
},
{
// Enable retrieving sourceLine and sourceColumn in LoAF implementation.
// https://issues.chromium.org/issues/391417815
name: "LongAnimationFrameSourceLineColumn",
status: "test",
implied_by: ["LongAnimationFrameSourceLineColumnInterface"],
},
{
// Add sourceLine and sourceColumn to PerformanceScriptTiming
// https://issues.chromium.org/issues/391417815
name: "LongAnimationFrameSourceLineColumnInterface",
status: "test",
},
{
// Long press on a link selects the link text instead of bringing up
// context menu. Enabled only on Android AuthView.
name: "LongPressLinkSelectText",
},
{
// Use LongAnimationFrameMonitor to emit longtask entries
name: "LongTaskFromLongAnimationFrame",
status: "test",
},
{
name: "MacCharacterFallbackCache",
status: "stable",
},
{
name: "MacDisableCtrlHomeEnd",
status: "stable",
},
{
name: "MachineLearningNeuralNetwork",
// Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork.
base_feature: "none",
},
{
// Enables macOS system-level clipboard permission checking using
// NSPasteboard.accessBehavior API (available on macOS 15.4+).
// This allows web applications to respect user's clipboard privacy
// settings in System Settings > Privacy & Security > Clipboard.
name: "MacSystemClipboardPermissionCheck",
status: {"Mac": "stable", "default": ""},
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
name: "MaskDeserializationTimeForCrossOriginMessages",
status: "stable",
},
{
// Enables mirroring for stretchy and large MathML operators when
// the text direction is right to left.
name: "MathMLOperatorRTLMirroring",
status: "experimental",
},
{
// Enables MathML ancestor context preservation during copy-paste
// serialization. When enabled, copying partial MathML content includes
// the containing <math> element to preserve semantic context and
// namespace declarations.
name: "MathMLSerializationOnCopy",
status: "stable",
},
{
// Enables skipping <mtr> wrapping during ancestor wrapping in
// serialization. When enabled duplicate <mtr> wrapping are absent.
name: "MathMLSkipMtrTagInAncestorWrapping",
status: "stable",
},
{
name:"MeasureMemory",
status:"stable",
},
{
name: "MediaCapabilitiesEncodingInfo",
status: "experimental",
},
{
name: "MediaCapabilitiesSpatialAudio",
status: "test",
},
{
name: "MediaCapture",
status: {"Android": "stable"},
},
{
name: "MediaCaptureBackgroundBlur",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureCameraControls"],
base_feature: "none",
},
{
name: "MediaCaptureCameraControls",
status: "experimental",
},
{
name: "MediaCaptureConfigurationChange",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureBackgroundBlur"],
base_feature: "none",
},
{
name: "MediaCaptureVoiceIsolation",
status: "experimental",
},
{
name: "MediaControlsExpandGesture",
base_feature: "none",
public: true,
},
{
name: "MediaControlsOverlayPlayButton",
public: true,
settable_from_internals: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "MediaElementVolumeGreaterThanOne",
},
// Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
{
name: "MediaEngagementBypassAutoplayPolicies",
base_feature: "none",
public: true,
},
{
name: "MediaLatencyHint",
status: "test",
},
{
name: "MediaPlaybackWhileNotVisiblePermissionPolicy",
status: "test",
origin_trial_feature_name: "MediaPlaybackWhileNotVisiblePermissionPolicy",
},
{
name: "MediaQueryNavigationControls",
},
{
name: "MediaSession",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "MediaSessionChapterInformation",
status: "stable",
},
{
name: "MediaSessionEnterPictureInPicture",
public: true,
status: "stable",
},
{
name: "MediaSourceExperimental",
status: "experimental",
},
{
name: "MediaSourceExtensionsForWebCodecs",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
},
{
name: "MediaSourceNewAbortAndDuration",
status: "stable",
},
{
name: "MediaStreamTrackTransfer",
status: "test",
base_feature: "none",
},
{
name: "MediaStreamTrackWebSpeech",
status: {
"Linux": "stable",
"Mac": "stable",
"Win": "stable",
"default": "experimental",
},
},
{
// This feature helps to add memory consumer to NGShapeCache, so that
// the cached shape results would be cleared once exceeding the memory limit.
name: "MemoryConsumerForNGShapeCache",
status: "test",
},
{
name: "MenuElements",
status: "experimental",
},
{
name: "MessagePortCloseEvent",
status: "test",
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
},
// Killswitch for crbug.com/40062462 fix.
{
name: "MixedContentAutoupgradesUseIsMixedContentRestrictedInFrame",
status: "stable",
},
{
name: "MobileLayoutTheme",
},
{
name: "ModifyParagraphCrossEditingoundary",
status: "stable",
},
// ModulePreloadReferrer enables modulepreload to send proper referrer
// headers as specified in the HTML spec. Behind a flag for safer rollout.
// https://crbug.com/441933555
{
name: "ModulePreloadReferrer",
status: "experimental",
},
{
name: "MojoJS",
status: "test",
is_protected_feature: true,
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
base_feature: "none",
is_protected_feature: true,
},
// Move the selection to the last position in the list item. See
// https://crbug.com/331841851
{
name: "MoveEndingSelectionToListChild",
status: "stable",
},
{
name: "MoveToParagraphStartOrEndSkipsNonEditable",
status: "stable",
},
{
// Multicast in Direct Sockets API.
// https://github.com/WICG/direct-sockets/blob/main/docs/multicast-explainer.md
name: "MulticastInDirectSockets",
status: "stable",
depends_on: ["DirectSockets"]
},
{
name: "MulticolColumnWrapping",
status: "experimental",
},
{
name: "NavigateEventCanTransition",
},
{
name: "NavigateEventCommitBehavior",
status: "stable",
},
{
name: "NavigateEventPopstateLimitations",
status: "stable",
},
{
name: "NavigateEventSourceElement",
status: "stable",
},
{
name: "NavigationId",
status: "experimental",
origin_trial_feature_name: "SoftNavigationHeuristics",
implied_by: ["SoftNavigationHeuristics"],
},
{
name: "NavigationTransitionDestination",
status: "experimental",
},
{
name: "NavigatorContentUtils",
// Android does not yet support NavigatorContentUtils.
status: {"Android": "", "default": "stable"},
},
{
// crbug.com/437612643
name: "NestedRubyMinMaxFix",
status: "stable",
},
{
name: "NestedViewTransition",
status: "stable",
},
{
name: "NetInfoConstantType",
},
{
name: "NetInfoDownlinkMax",
public: true,
// Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now
status: {
"Android": "stable",
"ChromeOS": "stable",
"default": "experimental",
},
base_feature: "none",
},
{
// This turns off all font antialiasing for tests unless it is
// explicitly required and enabled using the
// "--enable-font-antialiasing" flag like in the case of
// "virtual/text-antialias/" virtual test suite.
// crbug.com/339041663
name: "NoFontAntialiasing",
status: "test",
},
{
name: "NoIdleEncodingForWebTests",
status: "test",
},
// Doesn't insert empty blockquotes on outdenting a blockquote. See
// https://crbug.com/323960902
{
name: "NonEmptyBlockquotesOnOutdenting",
status: "stable",
},
{
name: "NonEmptyVisibleTextSelectionForTextFragment",
status: "stable",
},
{
// TODO(crbug.com/1426629): This feature enables the deprecated value
// slider-vertical. Disable this feature to stop parsing or allowing these
// values.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "NonStandardAppearanceValueSliderVertical",
status: "stable",
},
{
name: "NotificationConstructor",
// Android won't be able to reliably support non-persistent notifications, the
// intended behavior for which is in flux by itself.
status: {"Android": "", "default": "stable"},
},
// NotificationContentImage is not available in all platforms
// The Notification Center on Mac OS X does not support content images.
{
name: "NotificationContentImage",
public: true,
status: {"Mac": "test", "default": "stable"},
base_feature: "none",
},
{
name: "Notifications",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "NotificationTriggers",
origin_trial_feature_name: "NotificationTriggers",
status: "experimental",
base_feature: "none",
},
{
name: "NumberInputFullWidthChars",
status: "stable",
},
{
name: "OffMainThreadCSSPaint",
status: "stable",
},
{
name: "OffscreenCanvasGetContextAttributes",
status: "stable",
},
{
name: "OffsetParentNewSpecBehaviorForFixedPosition",
status: "stable",
},
{
name: "OmitBlurEventOnElementRemoval",
status: "test"
},
{
name: "OnDeviceWebSpeechAvailable",
status: "stable",
},
{
// Restrict popover invoker lookup to the same TreeScope as the element.
// This will be shipped in M142, and it can be removed in M144.
// See https://issues.chromium.org/issues/443031270.
name: "OpenPopoverInvokerRestrictToSameTreeScope",
status: "stable",
},
{
name: "OrientationEvent",
status: {"Android": "stable"},
},
{
name: "OriginAPI",
status: "experimental",
},
{
// Originating elements are implicit anchors for pseudo elements.
// This is a spec change since anchor positioning was shipped in Blink.
// https://issues.chromium.org/issues/408223892
name: "OriginatingElementIsImplicitAnchor",
status: "experimental",
},
{
name: "OriginIsolationHeader",
status: "stable",
base_feature: "none",
},
{
name: "OriginPolicy",
status: "experimental",
},
// Define a sample API for testing integration with the Origin Trials
// Framework. The sample API is used in both unit and web tests for the
// Origin Trials Framework. Do not change this flag to stable, as it exists
// solely to generate code used by the sample API implementation.
{
name: "OriginTrialsSampleAPI",
base_feature: "none",
origin_trial_feature_name: "Frobulate",
public: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIBrowserReadWrite",
base_feature: "none",
origin_trial_feature_name: "FrobulateBrowserReadWrite",
browser_process_read_write_access: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
// TODO(yashard): Add tests for this feature.
{
name: "OriginTrialsSampleAPIDependent",
depends_on: ["OriginTrialsSampleAPI"],
base_feature: "none",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIDeprecation",
base_feature: "none",
origin_trial_feature_name: "FrobulateDeprecation",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
public: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIExpiryGracePeriod",
base_feature: "none",
origin_trial_feature_name: "FrobulateExpiryGracePeriod",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIExpiryGracePeriodThirdParty",
base_feature: "none",
origin_trial_feature_name: "FrobulateExpiryGracePeriodThirdParty",
origin_trial_allows_third_party: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIImplied",
base_feature: "none",
origin_trial_feature_name: "FrobulateImplied",
implied_by: ["OriginTrialsSampleAPI", "OriginTrialsSampleAPIInvalidOS"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIInvalidOS",
base_feature: "none",
origin_trial_feature_name: "FrobulateInvalidOS",
origin_trial_os: ["invalid"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPINavigation",
base_feature: "none",
origin_trial_feature_name: "FrobulateNavigation",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentExpiryGracePeriod",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentExpiryGracePeriod",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentFeature",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistent",
origin_trial_allows_third_party: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentInvalidOS",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentInvalidOS",
origin_trial_allows_third_party: true,
origin_trial_os: ["invalid"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentThirdPartyDeprecationFeature",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentThirdPartyDeprecation",
origin_trial_allows_third_party: true,
origin_trial_type: "deprecation",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIThirdParty",
base_feature: "none",
origin_trial_feature_name: "FrobulateThirdParty",
origin_trial_allows_third_party: true,
},
{
name: "OverscrollCustomization",
status: "experimental",
},
{
name: "PagePopup",
// Android does not have support for PagePopup
status: {"Android": "", "iOS": "", "default": "stable"},
},
{
name: "PagePopupCopyPaste",
depends_on: ["PagePopup"],
status: "stable",
},
{
name: "PageRevealEvent",
status: "stable",
},
{
name: "PageSwapEvent",
status: "stable",
},
{
name: "PaintHoldingForIframes",
status: "stable",
},
{
// Fix for https://crbug.com/40716515.
// Killswitch M141.
name: "PaintOffsetTranslationForBackdropFilterWithInlineElement",
status: "stable",
},
{
// Killswitch M142. Overrides the above to enable PaintOffsetTranslation
// for all composited LayoutObjects.
name: "PaintOffsetTranslationForComposited",
status: "test",
},
{
name: "PaintTimingMixin",
status: "experimental",
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
// PARAKEET ad serving runtime flag/JS API.
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
{
name: "PartialCompletionNotAllowedInMoveParagraphs",
status: "stable",
},
{
name: "PartitionedPopins",
status: "experimental",
},
{
name: "PartitionVisitedLinkDatabaseWithSelfLinks",
status: {"iOS": "", "default": "stable"},
},
// This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
{
name: "PasswordReveal",
},
{
name: "PaymentApp",
public: true,
status: "experimental",
base_feature: "none",
},
{
// https://chromestatus.com/feature/5198846820352000
name: "PaymentLinkDetection",
status: "stable",
},
{
name: "PaymentMethodChangeEvent",
depends_on: ["PaymentRequest"],
status: "stable",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PerformanceManagerInstrumentation",
base_feature: "none",
public: true,
},
{
// Enables performance.mark('mark_feature_usage'): crbug.com/1517170
name: "PerformanceMarkFeatureUsage",
status: "experimental"
},
{
name: "PerformanceNavigateSystemEntropy",
},
{
name: "PerformanceNavigationTimingConfidence",
origin_trial_feature_name: "PerformanceNavigationTimingConfidence",
status: "experimental",
},
{
name: "PeriodicBackgroundSync",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PerMethodCanMakePaymentQuota",
origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
status: "experimental",
base_feature: "none",
},
{
// Tracking bug for the implementation: https://crbug.com/1462930
name: "PermissionElement",
origin_trial_feature_name: "PermissionElement",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos", "android"],
status: "experimental",
public: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
implied_by: ["GeolocationElement", "InstallElement"],
},
{
// Tracking bug for the implementation: crbug.com/352249547
// This flag adds having the option to show an icon in the Permission
// element, if developers want to.
// The flag will enable us to land the feature over multiple CLs, and will
// be enabled after the feature has been fully implemented.
name: "PermissionElementIcon",
status: "stable",
depends_on: ["PermissionElement"],
},
{
name: "Permissions",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PermissionsRequestRevoke",
status: "experimental",
},
{
// crbug.com/398955086
name: "PlaceholderVisibility",
status: "stable",
},
// This is a reverse OT used for a phased deprecation.
// https://crbug.com/918374
{
name: "PNaCl",
base_feature: "none",
origin_trial_feature_name: "PNaCl",
public: true,
},
{
name: "PointerEventDeviceId",
status: "stable",
},
{
// Flag for enabling the pointer lock API on Android
name: "PointerLockOnAndroid",
},
{
// https://crbug.com/404479704
name: "PointerRawUpdateOnlyInSecureContext",
status: "stable",
},
{
// Kill switch for removing *x-self*, *y-self* as valid values.
// Enabling this flag will make *x-self* and *y-self* aliases of
// *self-x* and *self-y* at parse time.
// https://crbug.com/448642325
name: "PositionAreaXYSelf",
},
{
name: "PositionOutsideTabSpanCheckSiblingNode",
status: "stable",
},
{
// Kill switch for https://crbug.com/448173938 which changes position
// visibility to ignore non-clipping ancestors.
name: "PositionVisibilityIgnoreNonClipAncestors",
status: "stable",
},
{
name: "PotentialPermissionsPolicyReporting",
status: "stable",
},
{
name: "PreciseMemoryInfo",
base_feature: "none",
public: true,
},
// Adds a web setting to disable CSS ScrollbarColor, ScrollbarWidth, and
// legacy ::-webkit-scrollbar* pseudo-element styling.
{
name: "PreferDefaultScrollbarStyles",
},
// Prefer not using composited scrolling. Composited scrolling will still
// be used if there are other reasons forcing compositing. For consistency,
// any code calling Settings::GetPreferCompositingToLCDTextEnabled() should
// ensure that this flag overrides the setting.
{
name: "PreferNonCompositedScrolling",
settable_from_internals: true,
},
{
name: "PreferredAudioOutputDevices",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "PreferredAudioOutputDevices",
origin_trial_allows_third_party: true,
status: "experimental",
public: true,
},
{
name: "PrefersReducedData",
status: "experimental",
},
{
// Used to allow preloading data: URLs with link rel=preload.
// https://crbug.com/348442535
name: "PreloadLinkRelDataUrls",
status: "stable",
},
{
// Used to allow chrome://flags to turn off prerendering. (Without using
// the user-facing preloading settings page to turn off other
// preloading.) See https://crbug.com/1494471.
//
// It also has some feature params defined throughout the codebase.
name: "Prerender2",
status: "stable",
},
{
// Used to allow prerender cross-origin iframes with an opt-in response
// header.
// https://chromestatus.com/feature/5112398709129216
// https://crbug.com/440387014
name: "Prerender2CrossOriginIframes",
origin_trial_feature_name: "Prerender2CrossOriginIframes",
},
{
name: "PrerenderUntilScript",
public: true,
origin_trial_feature_name: "PrerenderUntilScript",
status: "experimental",
},
{
name: "Presentation",
public: true,
status: "stable",
base_feature: "none",
},
{
// When enabled, preserves dropEffect in drag event set during dragover
// events.
name: "PreserveDropEffect",
status: "stable",
},
{
// When enabled, prevents undo to be applied if the enclosing block
// is not editable
name: "PreventUndoIfNotEditable",
status: "stable"
},
{
// Controls the aggregate error reporting feature, which allows for
// contributions to be made conditional on error conditions that can be
// hit when using the API. This also defers contribution merging and
// modifies the budgeting flow.
// https://chromestatus.com/feature/5194896325214208
name: "PrivateAggregationApiErrorReporting",
status: "experimental",
},
{
// Controls whether Private Aggregation's "maxContributions" field is
// enabled for Shared Storage callers. If disabled, the field will be
// ignored. https://chromestatus.com/feature/5189366316793856
name: "PrivateAggregationApiMaxContributions",
status: "stable",
},
{
name: "PrivateNetworkAccessNullIpAddress",
status: "experimental",
base_feature: "none",
},
{
name: "PrivateStateTokens",
status: "stable",
base_feature: "none",
public: true,
},
{
// Always allow trust token issuance (so long as the base::Feature
// is enabled). Used for testing; circumvents a runtime check that,
// if this RuntimeEnabledFeature is not present, guarantees the origin
// trial is enabled.
name: "PrivateStateTokensAlwaysAllowIssuance",
public: true,
status: "test",
base_feature: "none",
},
// Promisify programmatic scroll methods in Element and Window.
// https://crbug.com/41406914
{
name: "ProgrammaticScrollPromise",
},
{
// Propagate overscroll-behavior from the root element rather than the
// body element. crbug.com/41453796
name: "PropagateOverscrollBehaviorFromRoot",
status: "stable"
},
// Protected memory varariant of the sample API for testing integration with
// the Origin Trials Framework. This is used only in unit tests.
// Do not change this flag to stable, as it exists
// solely to generate code used by the sample API implementation.
{
name: "ProtectedOriginTrialsSampleAPI",
base_feature: "none",
origin_trial_feature_name: "Frobulate",
is_protected_feature: "true",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
// TODO(yashard): Add tests for this feature.
{
name: "ProtectedOriginTrialsSampleAPIDependent",
depends_on: ["ProtectedOriginTrialsSampleAPI"],
base_feature: "none",
is_protected_feature: "true",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "ProtectedOriginTrialsSampleAPIImplied",
base_feature: "none",
origin_trial_feature_name: "FrobulateImplied",
implied_by: ["ProtectedOriginTrialsSampleAPI"],
is_protected_feature: "true",
},
{
// Allowing pseudo-elements to have focus.
name: "PseudoElementsFocusable",
status: "stable",
},
{
name: "PushMessageDataBytes",
depends_on: ["PushMessaging"],
status: "stable",
base_feature: "none",
},
{
name: "PushMessaging",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PushMessagingSubscriptionChange",
public: true,
status: "experimental",
base_feature: "none",
},
{
// ChromeStatus: https://chromestatus.com/feature/6194847180128256
name: "QuotaExceededErrorUpdate",
status: "stable",
},
{
name: "QuoteFirstLineStyle",
status: "stable",
},
{
name: "RasterInducingScroll",
status: {
"Linux": "stable",
"Win": "stable",
"default": "test",
}
},
{
// Enables support for a 'min' option in ReadableStream BYOBReader.read(),
// allowing callers to specify the minimum number of bytes to be read into
// the buffer before resolving the read request.
// https://chromestatus.com/feature/6396991665602560
name: "ReadableStreamBYOBReaderReadMinOption",
status: "stable",
},
{
name: "RecordSameDocumentPresentationTimeOnce",
status: "stable",
},
// If enabled, both Accept-Language HTTP header and JavaScript getter will
// be reduced.
{
name: "ReduceAcceptLanguage",
base_feature: "none",
},
{
// If enabled, the deviceModel will be reduced to "K" and the
// androidVersion will be reduced to a static "10" string in android
// User-Agent string.
name: "ReduceUserAgentAndroidVersionDeviceModel",
depends_on: ["ReduceUserAgentMinorVersion"],
status: {"Android": "stable"},
},
// If enabled, the platform version in User-Agent Data will be removed.
// This feature is limited to Linux only.
{
name: "ReduceUserAgentDataLinuxPlatformVersion",
status: {"Linux": "experimental"},
},
// If enabled, the minor version of the User-Agent string will be reduced.
// This User-Agent Reduction feature has been enabled starting from M101,
// but we still keep this flag for future phase tests.
{
name: "ReduceUserAgentMinorVersion",
status: "stable",
},
{
// If enabled, the platform and oscpu of the User-Agent string will be
// reduced.
name: "ReduceUserAgentPlatformOsCpu",
depends_on: ["ReduceUserAgentMinorVersion"],
status: {"Android": "", "default": "stable"},
},
{
public: true,
name: "RegionCapture",
status: {"Android": "experimental", "iOS": "", "default": "stable"},
},
{
name: "RelatedWebsitePartitionAPI",
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::kRelatedWebsitePartitionAPI, which needs to be
// enabled to make the whole feature work.
},
{
// This flag allows more characters to be accepted as valid names in the
// createElement and attribute related DOM APIs.
// https://github.com/whatwg/dom/pull/1079
// http://crbug.com/40228234
// https://chromestatus.com/feature/6278918763708416
name: "RelaxDOMValidNames",
status: "stable",
},
{
name: "RelOpenerBcgDependencyHint",
status: "experimental",
},
{
name: "RemotePlayback",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "RemotePlaybackBackend",
settable_from_internals: true,
status: {
"Android": "stable",
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"default": "experimental"},
},
{
// This feature acts as a kill switch for ISO-2022-JP auto-detection.
// This will be shipped in M139, and it can be removed in M141.
// See https://chromestatus.com/feature/6576566521561088.
name: "RemoveCharsetAutoDetectionForISO2022JP",
status: "stable",
},
// After paste operation removes the placeholder <br> tag
// that gets inserted in contenteditable as placeholder for newline
{
name: "RemoveCollapsedPlaceholderForContentEditable",
status: "stable"
},
{
name: "RemoveDanglingMarkupInTarget",
status: "stable",
},
{
name: "RemoveDataUrlInSvgUse",
status: "stable",
},
{
// Fix for removeFormat command incorrectly preserving background-color
// when removing styles from elements. Prevents background-color from being
// re-applied to child elements during style removal.
// See https://crbug.com/41438799
name: "RemoveFormatFilterBackgroundColor",
status: "stable",
},
{
// See https://issues.chromium.org/issues/41474791
name: "RemoveSelectionCanonicalizationInMoveParagraph",
status: "stable",
},
{
// See https://issues.chromium.org/issues/41311101
name: "RemoveVisibleSelectionInDOMSelection",
status: "test",
},
{
// See https://github.com/whatwg/html/issues/11070
// ChromeStatus: https://chromestatus.com/feature/5207202081800192
name: "RenderBlockingFullFrameRate",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "RenderBlockingFullFrameRate",
status: "test",
},
{
name: "RenderBlockingStatus",
status: "stable",
},
{
// The renderpriority attribute feature.
// https://github.com/WICG/display-locking/blob/main/explainers/update-rendering.md
name: "RenderPriorityAttribute",
},
{
// See https://crbug.com/40896371 for details.
name: "ReplacedElementCursorPositioningFix",
status: "stable",
},
{
name: "ReportFirstFrameTimeAsRenderTime",
status: "test",
},
{
name: "ReportLayoutShiftRectsInCssPixels",
status: "experimental",
},
{
name: "RequestMainFrameAfterFirstVideoFrame",
status: "experimental",
},
{
name: "ResolveVarStylesOnCopy",
status: "stable",
},
{
name: "ResourceTimingContentEncoding",
status: "stable",
},
{
name: "ResourceTimingContentType",
status: "experimental",
},
{
name: "ResourceTimingInitiator",
status: "experimental",
},
{
name: "ResourceTimingUseCORSForBodySizes",
status: "test",
},
{
name: "ResponsiveIframes",
status: "experimental",
},
{
name: "RestrictGamepadAccess",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "RestrictOwnAudio",
status: "stable",
},
{
// Constrains text selections to stay within table cell boundaries
// (e.g., triple-click paragraph selection)
// See crbug.com/40852213.
name: "RestrictTableCellSelectionToBoundary",
status: "stable",
},
{
// If enabled, makes the root scrollbars' foreground elements follow the
// browser
name: "RootScrollbarFollowsBrowserTheme",
status: {"Linux": "test", "Win": "test"},
},
// Route matching, @route CSS rule, script type="routemap".
// https://chromestatus.com/feature/4771962874363904
{
name: "RouteMatching",
status: "test",
},
{
name: "RtcAudioJitterBufferMaxPackets",
origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
status: "experimental",
base_feature: "none",
},
{
name: "RTCDataChannelPriority",
status: "experimental",
},
{
name: "RTCEncodedFrameAudioLevel",
status: "stable",
},
{
name: "RTCEncodedFrameSetMetadata",
status: "experimental",
origin_trial_feature_name: "RTCEncodedFrameSetMetadata",
},
{
name: "RTCEncodedFrameTimestamps",
status: "stable",
},
{
name: "RTCEncodedVideoFrameAdditionalMetadata",
status: "experimental",
},
// Enables the use of jitterBufferTarget attribute in WebRTC.
// Spec: https://w3c.github.io/webrtc-extensions/#dom-rtcrtpreceiver-jitterbuffertarget
{
name: "RTCJitterBufferTarget",
status: "stable",
},
// Legacy callback-based getStats() has limited availability unless this
// Deprecation Trial is enabled.
// TODO(https://crbug.com/822696): Remove when origin trial ends.
{
name: "RTCLegacyCallbackBasedGetStats",
origin_trial_feature_name: "RTCLegacyCallbackBasedGetStats",
status: "experimental",
base_feature: "none",
},
// Enables the use of |RTCRtpEncodingParameters.codec|
{
name: "RTCRtpEncodingParametersCodec",
status: "stable",
},
{
name: "RTCRtpScaleResolutionDownTo",
status: "stable",
},
{
name: "RTCRtpScriptTransform",
status: "stable",
},
{
name: "RTCRtpTransport",
status: "test",
},
{
name: "RTCStatsRelativePacketArrivalDelay",
origin_trial_feature_name: "RTCStatsRelativePacketArrivalDelay",
status: "experimental",
base_feature: "none",
},
// Enables the use of SVC scalability mode in WebRTC.
// Spec: https://w3c.github.io/webrtc-svc/
{
name: "RTCSvcScalabilityMode",
status: "stable",
},
{
// HTML event loop invoking 'Run snapshot post-layout state steps' from
// the CSSOM View per spec proposal.
name: "RunSnapshotPostLayoutStateSteps",
},
{
// This flag is for fixing validation error
// for valid email address using IDN.
// This may ship in M142, and this flag can be
// removed in M144 pending no issues.
// See https://issues.chromium.org/issues/429490608
name: "SanitizeIDNEmailFormInput",
status: "stable",
},
{
// Spec: https://wicg.github.io/sanitizer-api/
// Tracking bug: crbug.com/356601280
name: "SanitizerAPI",
status: "test",
},
{
// https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
// https://github.com/whatwg/html/issues/10854
// Spec PRs:
// https://github.com/whatwg/html/pull/10869
// https://github.com/whatwg/dom/pull/1341
name: "ScopedCustomElementRegistry",
},
{
// https://github.com/WICG/view-transitions/blob/main/scoped-transitions.md
name: "ScopedViewTransitions",
depends_on: ["CSSAnchorWithTransforms", "OriginatingElementIsImplicitAnchor"],
status: "experimental",
},
{
// https://github.com/w3c/window-management/issues/149
name: "ScreenDetailedHdrHeadroom",
status: "experimental",
},
// WebSpeech API with both speech recognition and synthesis functionality
// is not fully enabled on all platforms.
{
name: "ScriptedSpeechRecognition",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "ScriptedSpeechSynthesis",
public: true,
status: "stable",
base_feature: "none",
},
{
// crbug.com/378692756
name: "ScriptRunIteratorCombiningMarkAlways",
status: "stable",
},
{
name: "ScriptRunIteratorCombiningMarks",
},
{
name: "ScrollAnchorPriorityCandidateSubtree",
status: "stable",
},
{
name: "ScrollbarColor",
status: "stable",
},
{
name: "ScrollbarWidth",
status: "stable",
},
{
name: "ScrollIntoViewNearest",
status: "stable"
},
// TODO(355460994): Remove after M129.
// scroll into root frame didn't take scrollbar and borders into account,
// while this is fixed, to avoid any web compat issues we have this killswitch.
{
name: "ScrollIntoViewRootFrameViewportBugFix",
status: "stable",
},
// TODO(crbug.com/401443093): Remove after M141.
{
name: "ScrollIntoViewSelfScrollFix",
status: "stable"
},
{
// Separate flag for crbug.com/1426506 (getCurrentTime API change) which
// is expected to land after the initial launch of ScrollTimeline.
name: "ScrollTimelineCurrentTime",
status: "experimental"
},
{
// https://github.com/w3c/csswg-drafts/issues/9367#issuecomment-1854280461
name: "ScrollTimelineNamedRangeScroll",
status: "test",
},
// Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
// as per the spec, matching other Web engines.
//
// This flag can't be removed until the Android min SDK version is 28
// (i.e., 'P') or later. See AWSettings.setScrollTopLeftInteropEnabled
// and its caller.
{
name: "ScrollTopLeftInterop",
status: "stable",
},
// Allows CSS styling of browser search results.
// https://issues.chromium.org/issues/339298411
// https://chromestatus.com/feature/5195073796177920
{
name: "SearchTextHighlightPseudo",
status: "experimental",
},
// SecurePaymentConfirmation has shipped on some platforms, but its
// availability is controlled by the browser process (via the
// SecurePaymentConfirmationBrowser feature), as it requires browser
// support to function. See //content/public/common/content_features.cc
//
// The status is set to 'test' here to enable some WPT tests that only
// require blink-side support to function.
{
name: "SecurePaymentConfirmation",
public: true,
status: "test",
base_feature: "none",
},
{
name: "SecurePaymentConfirmationAvailabilityAPI",
status: "stable",
},
{
name: "SecurePaymentConfirmationBrowserBoundKeys",
status: {
"Android": "stable",
"default": "test",
},
},
{
name: "SecurePaymentConfirmationDebug",
base_feature: "none",
public: true,
},
{
name: "SecurePaymentConfirmationOptOut",
origin_trial_feature_name: "SecurePaymentConfirmationOptOut",
origin_trial_allows_third_party: true,
status: "stable",
base_feature: "none",
},
{
// Implements new UX for SPC including new output states, payment
// instrument details and payment entities logos.
name: "SecurePaymentConfirmationUxRefresh",
status: {
"Android": "stable",
"default": "test",
},
},
{
// SelectAudioOutput API
// https://chromestatus.com/feature/5164535504437248
name: "SelectAudioOutput",
status: {
"Android": "",
"default": "test",
},
},
{
// Replicates old behavior which removes selectedness from option
// elements when they are all removed from a select at the same time.
// https://issues.chromium.org/issues/444330901
// Enabled in M142, can be removed in M145.
name: "SelectChildrenRemovedFix",
status: "stable",
},
{
// Prevents the <select> element from tracking <option>s inside a nested
// <datalist>. Shipping in M144, should be safe to remove in M146.
name: "SelectDisallowDatalist",
status: "stable",
},
{
// The selectedcontentelement attribute is for connecting select elements
// to arbitrary <selectedcontent> elements.
// https://github.com/openui/open-ui/issues/1063
name: "SelectedcontentelementAttribute",
status: "test",
},
{
// See https://crbug.com/40664519
// Disabled due to UI freeze issues, see https://crbug.com/448833953.
name: "SelectionAndFocusedVisiblePositionMatch",
status: "experimental",
},
{
name: "SelectionCollapsedDirectionNone",
status: "stable",
},
{
// Killswitch M141.
name: "SelectionHandleWithBottomClipped",
status: "stable",
},
{
// https://issues.chromium.org/issues/40502558
name: "SelectionRemoveRangeNotFoundError",
status: "experimental",
},
{
// https://issues.chromium.org/issues/40502558
name: "SelectionSetBaseAndExtentNonNullNode",
status: "experimental",
settable_from_internals: true,
},
{
// Enables skipping user-select: none content
// in DOMSelection::toString()
name: "SelectionToStringSkipsUserSelectNone",
status: "stable",
},
{
// See https://crbug.com/395544401
name: "SelectionUpdateToInitialSelectionInListify",
status: "stable",
},
{
// See https://chromestatus.com/feature/5203433409871872
name: "SelectiveClipboardFormatRead",
status: "test",
},
{
// See https://chromestatus.com/feature/4811835974615040
name: "SelectivePermissionsIntervention",
status: "experimental",
},
{
// Makes the logic to choose between ListBox (in-page) or MenuList
// (dropdown) select element modes the same between mobile and desktop.
// Without this flag, mobile will always use MenuList and desktop always
// makes <select multiple> a ListBox.
// https://chromestatus.com/feature/5412736871825408
// https://issues.chromium.org/issues/439964654
name: "SelectMobileDesktopParity",
status: "stable",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "SensorExtraClasses",
public: true,
status: "experimental",
base_feature: "none",
},
{
// Separate defer and module script execution into individual tasks
// to comply with HTML spec requirement to "spin the event loop" between
// each script execution. This prevents long tasks and improves responsiveness.
// https://crbug.com/40894694
name: "SeparateDeferModuleScriptTasks",
status: "test",
},
{
name: "Serial",
status: "stable",
base_feature: "WebSerialAPI",
},
{
name: "SerializeViewTransitionStateInSPA",
},
{
name: "SerialPortConnected",
status: {"Android": "", "default": "experimental"},
base_feature: "none",
},
{
// Support for Service Worker background sync APIs in Dedicated Workers.
// See https://chromestatus.com/feature/6497653025931264
// See https://issues.chromium.org/issues/40364838
name: "ServiceWorkerBackgroundSyncInDedicatedWorker",
depends_on: ["ServiceWorkerInDedicatedWorker"],
},
{
name: "ServiceWorkerClientLifecycleState",
status: "experimental",
},
{
// Support for Service Worker APIs in Dedicated Workers.
// See https://chromestatus.com/feature/6497653025931264
// See https://issues.chromium.org/issues/40364838
name: "ServiceWorkerInDedicatedWorker",
},
{
name: "ServiceWorkerStaticRouterTimingInfo",
status: "stable",
},
{
name: "SetSequentialFocusStartingPoint",
status: "experimental",
},
{
// Reference Target allows IDREF attributes to refer inside Shadow DOM.
// crbug.com/346835896
name: "ShadowRootReferenceTarget",
status: "experimental",
origin_trial_feature_name: "ShadowRootReferenceTarget"
},
{
// If enabled, Reference Target will support aria-owns.
// https://github.com/WICG/webcomponents/issues/1091
name: "ShadowRootReferenceTargetAriaOwns",
},
{
name: "SharedArrayBuffer",
base_feature: "none",
public: true,
},
{
name: "SharedArrayBufferUnrestrictedAccessAllowed",
base_feature: "none",
public: true,
},
{
name: "SharedAutofill",
public: true,
status: "test",
base_feature: "none",
},
{
name: "SharedStorageAPI",
base_feature: "none",
public: true,
status: "stable",
},
{
name: "SharedStorageWebLocks",
depends_on: ["SharedStorageAPI"],
status: "stable",
},
{
name: "SharedWorker",
public: true,
// Android does not yet support SharedWorker. crbug.com/154571
status: {"Android": "", "default": "stable"},
// Allow Android to run the origin trial.
origin_trial_feature_name: "SharedWorkerOnAndroid",
origin_trial_os: ["android"],
origin_trial_allows_third_party: true,
},
{
// If enabled, SharedWorker supports extendedLifetime
// https://github.com/whatwg/html/issues/10997
name: "SharedWorkerExtendedLifetime",
status: "experimental",
origin_trial_feature_name: "SharedWorkerExtendedLifetime",
origin_trial_allows_third_party: true,
},
{
name: "SideRelativeBackgroundPosition",
status: "experimental",
public: true,
},
{
name: "SignatureBasedInlineIntegrity",
status: "experimental",
},
{
name: "SignatureBasedIntegrity",
status: "stable",
},
{
name: "SkipAd",
depends_on: ["MediaSession"],
status: "stable",
},
{
// If enabled, only call ResourceLoadObserver callbacks if the DevTools
// panel is open.
name: "SkipCallbacksWhenDevToolsNotOpen",
status: "experimental",
},
{
// Skip field disabled checks in DateTimeEditElement.
// This will be shipped in M143, and it can be removed in M145.
// See https://issues.chromium.org/issues/442293382.
name: "SkipDateTimeFieldDisableChecks",
status: "stable",
},
{
name: "SkipOofItemForBreakCandidate",
status: "stable",
},
{
// Skips the browser touch event filter, ensuring that events that reach
// the queue and would otherwise be filtered out will instead be passed
// onto the renderer compositor process as long as the page hasn't timed
// out. If skip_filtering_process is browser_and_renderer, also skip the
// renderer cc touch event filter, ensuring that events will be passed
// onto the renderer main thread.
name: "SkipTouchEventFilter",
status: "stable",
},
// Fix for crbug.com/41393366
{
name: "SkipUnselectableContentInSerialization",
status: "stable",
},
{
name: "SmartCard",
status: {
"Android": "",
"ChromeOS": "stable",
"default": "test",
},
},
{
name: "SmartZoom",
base_feature: "none",
public: true,
status: {"Android": "test"},
},
{
// Used to enable the code for detecting soft navigations through task
// attribution. Set to stable as this generates an enabled-by-default
// base::Feature for a field-trial remote shutoff. Needs to be a runtime
// feature so that the Soft Navigation Heuristics Origin Trial can depend
// on it.
name: "SoftNavigationDetection",
status: "stable",
},
{
name: "SoftNavigationDetectionAdvancedPaintAttribution",
depends_on: ["SoftNavigationDetection"],
},
{
name: "SoftNavigationDetectionPrePaintBasedAttribution",
status: "stable",
depends_on: ["SoftNavigationDetection"],
},
{
name: "SoftNavigationHeuristics",
status: "experimental",
origin_trial_allows_third_party: true,
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
// Whether spatial navigation should use cursor inheritance to exclude
// nodes where cursor is inherited. Kill-switch that can be remove once
// the change goes through a stable release.
name: "SpatNavUsesCursorInheritance",
status: "stable",
},
{
name: "SpeakerSelection",
status: "experimental",
},
// This is a flag that re-enables some deprecated/removed "special rules"
// that apply to the styles of an <h1> element nested within <article>,
// <aside>, <nav>, or <section>. It is disabled by default, and here as a
// Finch killswitch only. This was shipped (disabled) in M140, and the flag
// can be removed in M142.
{
name: "SpecialRulesForNestedH1Elements",
},
{
name: "SpeculationRulesPrefetchWithSubresources",
},
{
name: "SplitTextNotCleanupDummySpans",
status: "stable",
},
// Kill switch for change to unify image-set and srcset selection logic.
{
name: "SrcsetSelectionMatchesImageSet",
status: "stable",
},
// Used as argument in attribute of stable-release functions/interfaces
// where a runtime-enabled feature name is required for correct IDL syntax.
// This is a global flag; do not change its status.
{
name: "StableBlinkFeatures",
status: "stable",
base_feature: "none",
},
{
// See https://github.com/w3c/csswg-drafts/issues/9398
name: "StandardizedBrowserZoom",
status: "stable",
public: true,
},
{
name: "StandardizedBrowserZoomOptOut",
origin_trial_feature_name: "DisableStandardizedBrowserZoom",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
},
{
// Preserves the sticky user activation state after a page navigates to
// another same-origin page. https://crbug.com/433729626
name: "StickyUserActivationAcrossSameOriginNavigation",
status: "stable",
},
{
name: "StorageBuckets",
status: "stable",
},
{
// Gates the `durability()` method on a storage bucket and the property in
// the options struct.
name: "StorageBucketsDurability",
status: "experimental",
},
{
// Gates the `locks()` method on a storage bucket.
name: "StorageBucketsLocks",
status: "experimental",
},
// Enforces that MIME types matched via *+json wildcards have HTTP token
// compliant type and subtype (rejects invalid characters) in addition to
// requiring a single slash.
{
name: "StrictJsonMimeTypeTokenValidation",
status: "stable",
},
{
name: "StrictMimeTypesForWorkers",
status: "experimental",
},
{
name: "StylusHandwriting",
base_feature: "none",
},
{
name: "Svg2Cascade",
},
{
name: "SvgAnchorElementAttributes",
status: "experimental",
},
{
name: "SvgAnchorElementDownloadAttribute",
status: "stable",
},
{
name: "SvgAvoidCullingElementsWithTransformOperations",
status: "stable",
},
{
// Treat SVG documents in <object>/<embed> as replaced elements
// https://issues.chromium.org/41302806
name: "SVGEmbeddedAsReplacedElement",
status: "experimental",
},
{
name: "SvgEnableTextDecorationCssStyling",
status: "experimental",
},
{
name: "SvgFallBackToContainerSize",
status: "experimental",
},
{
name: "SvgFilterPaintsForHiddenContent",
status: "stable",
},
{
name: "SvgIgnoreNegativeEllipseRadii",
status: "stable",
},
{
// Disable "external" XSLT stylesheets in SVGImage.
name: "SvgImageNoExternalXslt",
status: "stable",
},
{
name: "SvgInlineRootPixelSnappingScaleAdjustment",
status: "test",
},
{
name: "SvgPartitionSVGDocumentResourcesInMemoryCache",
status: "stable",
},
{
name: "SvgScriptElementAsyncAttribute",
status: "stable",
},
{
name: "SvgSizingWithPreserveAspectRatioNone",
status: "experimental",
},
{
name: "SvgSmilPruneInstanceTimes",
status: "stable",
},
{
name: "SvgTransformOnNestedSvgElement",
status: "stable",
},
{
name: "SynthesizedKeyboardEventsForAccessibilityActions",
status: "experimental",
},
{
name: "SystemDefaultAccentColors",
status: "stable",
base_feature: "none",
// This feature is controlled by the corresponding Chromium feature
// features::kUseSystemDefaultAccentColors.
},
{
// This is used for emoji variation selectors support in system
// fallback matching. This is a workaround solution that helps to
// avoid incorrect font matching due to lack of cmap format 14
// subtable in system emoji fonts on various platforms.
// This should be eventually removed when the custom emoji font
// is shipped with Chrome or when system emoji fonts will have
// cmap format 14 subtable.
name: "SystemFallbackEmojiVSSupport",
status: "stable",
},
{
name: "SystemWakeLock",
status: "experimental",
},
{
name: "TableIsAutoFixedLayout",
status: "test",
},
{
name: "TabSizeAncestor",
status: "stable",
},
{
name: "TabSizeWithSpacing",
status: "stable",
},
{
name: "TabWidthNegativePosition",
status: "stable",
},
{
// When checking the shadow tree during invoke(),
// use the invocationTargetInShadowTree saved before
// calling the listener.
// This was added in M142 and can be removed after M144.
// https://issues.chromium.org/issues/41408360
name: "TargetInShadowDeterminedBeforeListener",
status: "stable",
},
// For unit tests.
{
// This is for testing copied_from_base_feature_if.
// This is set in base/test/test_suite.cc.
name: "TestBlinkFeatureDefault",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "TestFeature",
base_feature: "none",
browser_process_read_write_access: true,
},
// For unit tests.
{
name: "TestFeatureDependent",
depends_on: ["TestFeatureImplied"],
base_feature: "none",
},
// This is a feature used for testing what happens when an origin trial
// feature has browser-process read/write access. It should never be used
// in production code.
{
name: "TestFeatureForBrowserProcessReadWriteAccessOriginTrial",
origin_trial_feature_name: "TestFeatureForBrowserProcessReadWriteAccessOriginTrial",
base_feature: "none",
browser_process_read_write_access: true,
},
// For unit tests.
{
name: "TestFeatureImplied",
implied_by: ["TestFeature"],
base_feature: "none",
},
// For unit tests.
{
name: "TestFeatureProtected",
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureProtectedDependent",
depends_on: ["TestFeatureProtectedImplied"],
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureProtectedImplied",
implied_by: ["TestFeatureProtected"],
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureStable",
status: "stable",
},
{
// crbug.com/442551790
name: "TextareaLastLineRemovalFix",
status: "stable",
},
{
// crbug.com/414858401
name: "TextareaLineEndingsAsBr",
status: "stable",
},
{
// crbug.com/414858401
name: "TextareaMultipleIfcs",
status: "stable",
depends_on: ["TextareaLineEndingsAsBr"],
},
{
name: "TextDetector",
status: "experimental",
},
{
// crbug.com/40812040
name: "TextEmphasisLetterSpacing",
status: "stable",
},
{
// crbug.com/368657256
name: "TextEmphasisPositionAuto",
status: "experimental",
},
{
name: "TextEmphasisPunctuationExceptions",
status: "stable"
},
{
// crbug.com/442481227
name: "TextEmphasisWithRuby",
status: "stable",
},
{
name: "TextFragmentAPI",
status: "experimental",
},
{
name: "TextFragmentIdentifiers",
origin_trial_feature_name: "TextFragmentIdentifiers",
public: true,
status: "stable",
base_feature: "TextFragmentAnchor",
},
{
name: "TextFragmentTapOpensContextMenu",
status: {"Android": "stable"},
},
{
name: "TextMetricsBaselines",
status: "stable",
},
{
// https://crbug.com/41492459
name: "TextOverflowString",
status: "test",
},
{
// crbug.com/431660829
name: "TextSpacingTrimFallback",
status: "stable",
},
{
// crbug.com/431660829
name: "TextSpacingTrimFallback2",
depends_on: ["TextSpacingTrimFallback"],
status: "test",
},
{
// crbug.com/331123676
name: "TextSpacingTrimYuGothicUI",
status: "stable",
},
// This feature is used to inform the renderer of a user bypass from the
// browser process to disable third-party storage partitioning.
{
name: "ThirdPartyStoragePartitioningUserBypass",
browser_process_read_write_access: true,
base_feature: "none",
},
{
// https://drafts.csswg.org/web-animations-2/#triggers
name: "TimelineTrigger",
status: "experimental",
},
{
name: "TimerThrottlingForBackgroundTabs",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "TimestampBasedCLSTracking",
status: "experimental"
},
{
name: "TimeZoneChangeEvent",
status: "experimental",
},
{
name: "TopicsAPI",
base_feature: "none",
public: true,
status: "stable",
},
{
name: "TopicsDocumentAPI",
base_feature: "none",
public: true,
status: "stable",
},
{
// This feature allows calling the Topics API via an image
// attribute.
name: "TopicsImgAPI",
base_feature: "none",
public: true,
status: "experimental",
},
{
name: "TopLevelTpcd",
origin_trial_feature_name: "TopLevelTpcd",
origin_trial_type: "deprecation",
status: "experimental",
base_feature: "none",
},
// This feature allows touch dragging and a context menu to occur
// simultaneously, with the assumption that the menu is non-modal. Without
// this feature, a long-press touch gesture can start either a drag or a
// context-menu in Blink, not both (more precisely, a context menu is shown
// only if a drag cannot be started).
// This feature is enabled by default in Android, where
// TouchDragOnShortPress is not shipped due to interactions with the OS that
// caused issues in the behavior.
// Please see https://issues.chromium.org/40823294
{
name: "TouchDragAndContextMenu",
base_feature: "none",
public: true,
},
// This feature enables drag and drop using touch input devices. Replaces
// the old "--enable-touch-drag-drop" and "--disable-touch-drag-drop"
// switches.
// Enabled by default in Android, ChromeOS and Windows.
{
name: "TouchDragAndDrop",
base_feature: "none",
public: true,
},
// This feature makes touch dragging to occur at the short-press gesture,
// which occurs right before the long-press gesture.
{
name: "TouchDragOnShortPress",
depends_on: ["TouchDragAndDrop"],
status: {
"Win": "stable",
},
},
// Many websites disable mouse support when touch APIs are available. We'd
// like to enable this always but can't until more websites fix this bug.
// Chromium sets this conditionally (eg. based on the presence of a
// touchscreen) in ApplyWebPreferences. "Touch events" themselves are always
// enabled since they're a feature always supported by Chrome.
{
name: "TouchEventFeatureDetection",
origin_trial_feature_name: "ForceTouchEventFeatureDetectionForInspector",
public: true,
status: "stable",
base_feature: "none",
},
// Set to reflect the kTouchTextEditingRedesign feature.
{
name: "TouchTextEditingRedesign",
base_feature: "none",
},
{
name: "Tpcd",
origin_trial_feature_name: "Tpcd",
origin_trial_allows_third_party: true,
origin_trial_type: "deprecation",
status: "experimental",
base_feature: "none",
},
{
name: "TransferableRTCDataChannel",
status: "stable",
},
// This is conditionally set if the platform supports translation.
{
name: "TranslateService",
},
{
name: "TranslationAPI",
status: {
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"ChromeOS": "stable",
"default": "",
},
origin_trial_feature_name: "TranslationAPI",
origin_trial_allows_third_party: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "TranslationAPIForWorkers",
public: true,
},
{
// Traverse flat tree to find start and end of paragraph in delete
// selection to handle slot distribution in details.
// See https://crbug.com/413595949
name: "TraverseFlatTreeToHandleSlots",
status: "stable",
},
{
// When enabled, treats the initial navigation to about:blank#fragment in
// an MHTML document as a cross-document navigation.
//
// Although it appears to be a same-document fragment navigation, MHTML
// loading replaces the initial empty document with a new committed
// document that has an opaque origin.
//
// This feature acts as a kill switch for https://crbug.com/40580002.
name: "TreatMhtmlInitialDocumentLoadsAsCrossDocument",
status: "stable",
},
{
name: "TrustedTypesFromLiteral",
status: "experimental",
base_feature: "none",
},
{
// Adapt Trusted Types to its new spec, as part of HTML.
// Tracking bug: 330516530
name: "TrustedTypesHTML",
status: "experimental",
},
{
name: "TrustedTypesUseCodeLike",
status: "experimental",
},
{
name: "TwoPhaseViewTransition",
status: "test",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
},
{
name: "UnencodedDigest",
status: "stable",
},
{
name: "UnexposedTaskIds",
},
// This is a kill switch for the unprefixed Web Speech API.
{
name: "UnprefixedSpeechRecognition",
status: "stable",
},
{
name: "UnrestrictedMeasureUserAgentSpecificMemory",
},
// This is a reverse OT used for a phased deprecation, on desktop
// https://crbug.com/1071424
{
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
// isolated context to access protected USB interface classes and to
// bypass the USB blocklist.
{
name: "UnrestrictedUsb",
status: "stable",
depends_on: ["WebUSB"],
},
// If enabled, notify the associated DisplayCutoutHost of changes in
// complex safe area constraint usage on the page.
// Only Android may make use of this feature currently.
{
name: "UpdateComplexSafaAreaConstraints",
status: {
"Android": "stable",
"default": "",
}
},
// Fix for https://crbug.com/41329214.
{
name: "UpdateSelectionOnNodeInsertion"
},
// Fix for https://crbug.com/436624850
// Ensures trivial_text_ is updated after fragment creation from text
// by calling UpdateTrivialReplacementText()
{
name: "UpdateTrivalTextAfterFragmentCreationFromText",
status: "stable",
},
{
name: "URLPatternCompareComponent",
status: "experimental",
},
{
name: "URLPatternGenerate",
status: "experimental",
},
{
name: "URLSearchParamsHasAndDeleteMultipleArgs",
status: "stable",
},
{
name: "UseBeginFramePresentationFeedback",
status: {
"ChromeOS": "stable",
},
},
{
// Android currently uses low-quality interpolation, while other platforms
// default to medium-quality. This flag is for experimenting with changing
// the value on Android. See: https://crbug.com/374315986.
name: "UseLowQualityInterpolation",
status: {
"Android": "stable",
"default": "",
},
},
{
// This flag uses the original DOM text for input when the password
// echo is enabled to create the offset_map.
name: "UseOriginalDomOffsetsForOffsetMap",
status: "test",
},
{
name: "UsePositionForPointInFlexibleBoxWithSingleChildElement",
status: "stable",
},
{
name: "UsePositionIfIsVisuallyEquivalentCandidate",
status: "stable",
},
{
name: "UserDefinedEntryPointTiming",
status: "experimental",
},
{
// Fix for https://crbug.com/421314614
name: "UseSelectionInDOMTreeAnchorInExtendSelection",
status: "stable"
},
{
name: "UseShadowHostStyleCheckEditable",
status: "stable",
},
{
// Fix for https://crbug.com/354497121
name: "UseSpecValuesInTextFormatUpdateEventStyles",
status: "stable"
},
{
name: "UseUndoStepElementDispatchBeforeInput",
status: "stable",
},
{
name: "V8IdleTasks",
base_feature: "none",
public: true,
},
{
// Whether a video element should automatically play fullscreen unless
// 'playsinline' is set.
name: "VideoAutoFullscreen",
settable_from_internals: true,
},
{
name: "VideoFrameMetadataBackgroundBlur",
status: "experimental",
},
{
name: "VideoFrameMetadataRtpTimestamp",
status: "experimental",
},
{
name: "VideoFullscreenOrientationLock",
},
{
name: "VideoRotateToFullscreen",
},
{
name: "VideoTrackGenerator",
status: "test",
},
{
name: "VideoTrackGeneratorInWindow",
status: "test",
},
{
name: "VideoTrackGeneratorInWorker",
},
{
name: "ViewportHeightClientHintHeader",
status: "stable",
},
{
name: "ViewportSegments",
status: "stable",
},
{
name: "ViewTransitionAsyncFinished",
status: "stable",
},
{
name: "ViewTransitionHoistBackdropFilterEffect",
status: "stable",
},
{
name: "ViewTransitionLongCallbackTimeoutForTesting",
status: "test",
},
{
name: "ViewTransitionUpdateLifecycleBeforeReady",
status: "stable",
},
{
name: "ViewTransitionWaitUntil",
status: "stable",
},
{
name: "VisibilityCollapseColumn",
},
{
// The "WakeLock" feature was originally implied_by "ScreenWakeLock" and
// "SystemWakeLock". The former was removed after being promoted to
// stable, but we need to keep this feature around for code and IDLs that
// should work with both screen and system wake locks.
name: "WakeLock",
status: "stable",
implied_by: ["SystemWakeLock"],
},
{
// When enabled, this will issue a warning to the console any time
// rendering is forced withing content-visibility subtrees (both
// content-visibility: auto and content-visibility: hidden).
name: "WarnOnContentVisibilityRenderAccess",
},
{
// https://chromestatus.com/feature/5183481574850560
name: "WebAppInstallation",
status: {"Android": "", "default": "test"},
origin_trial_feature_name: "WebAppInstallation",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "WebAppLaunchQueue",
status: "stable",
base_feature: "none",
},
{
name: "WebAppScopeExtensions",
origin_trial_feature_name: "WebAppScopeExtensions",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
status: "experimental",
base_feature: "none",
},
{
name: "WebAppTabStrip",
status: {
"ChromeOS": "stable",
"default": "experimental"
},
base_feature: "DesktopPWAsTabStrip",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "WebAppTabStripCustomizations",
status: {
"ChromeOS": "stable",
"default": "experimental"
},
base_feature: "DesktopPWAsTabStripCustomizations",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "WebAppTranslations",
status: "experimental",
base_feature: "WebAppEnableTranslations",
},
{
// https://chromestatus.com/feature/6024844719947776
name: "WebAssemblyCustomDescriptors",
origin_trial_feature_name: "WebAssemblyCustomDescriptors",
status: "experimental",
base_feature: "none",
},
{
// WebAssembly JS Promise Integration,
// https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration
name: "WebAssemblyJSPromiseIntegration",
origin_trial_feature_name: "WebAssemblyJSPromiseIntegration",
status: "experimental",
base_feature: "none",
},
{
// https://chromestatus.com/feature/5077691662073856
name: "WebAudioBypassOutputBuffering",
status: {
"Win": "stable",
"ChromeOS": "stable",
"Mac": "stable",
"Linux": "stable",
},
},
{
// https://chromestatus.com/feature/5077691662073856
// Allows an Enterprise Policy to override WebAudioBypassOutputBuffering
name: "WebAudioBypassOutputBufferingOptOut",
public: true,
},
{
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-renderquantumsize
name: "WebAudioConfigurableRenderQuantum",
},
// WebAuth is disabled on Android versions prior to N (7.0) due to lack of
// supporting APIs, see runtime_features.cc.
{
name: "WebAuth",
status: "stable",
},
// When enabled adds the authenticator attachment used for registration and
// authentication to the public key credential response.
{
name: "WebAuthAuthenticatorAttachment",
status: "test",
},
// Prototyping https://github.com/w3c/webauthn/issues/2144
{
name: "WebAuthenticationAmbient",
status: "experimental",
base_feature: "none",
public: true,
},
// https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-attestationformats
{
name: "WebAuthenticationAttestationFormats",
status: "experimental",
origin_trial_feature_name: "WebAuthnAttestationFormats",
origin_trial_os: ["android"],
origin_trial_allows_third_party: true,
},
// Enables providing a URL to retrieve a WebAuthn challenge.
// https://chromestatus.com/feature/5109012922892288
{
name: "WebAuthenticationChallengeUrl",
status: "experimental",
},
// https://w3c.github.io/webauthn/#dom-clientcapability-conditionalcreate
{
name: "WebAuthenticationConditionalCreate",
status: "test",
base_feature: "none",
public: true,
},
// Prototyping https://github.com/w3c/webauthn/issues/2228
{
name: "WebAuthenticationImmediateGet",
origin_trial_feature_name: "WebAuthenticationImmediateGet",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature: "none",
public: true,
},
{
name: "WebAuthenticationRemoteDesktopSupport",
base_feature: "none",
public: true,
},
// https://w3c.github.io/webauthn/#sctn-supplemental-public-keys-extension
{
name: "WebAuthenticationSupplementalPubKeys",
status: "experimental",
},
// WebBluetooth is enabled by default on Android, ChromeOS, iOS, macOS and
// Windows.
{
name: "WebBluetooth",
public: true,
status: {
"Android": "stable",
"ChromeOS": "stable",
"iOS": "stable",
"Mac": "stable",
"Win": "stable",
"default": "experimental",
},
base_feature: "none",
},
{
name: "WebBluetoothGetDevices",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebBluetoothScanning",
status: "experimental",
},
{
name: "WebBluetoothWatchAdvertisements",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebCodecsVideoEncoderBuffers",
status: "experimental",
},
{
// Adding post-quantum algorithms (ML-DSA, ML-KEM) to WebCrypto.
// Also adding ChaCha20-Poly1305 while we're at it.
//
// https://chromestatus.com/feature/5198951632470016
name: "WebCryptoPQC",
},
{
name: "WebFontResizeLCP",
},
{
name: "WebGLDeveloperExtensions",
public: true,
status: "experimental",
base_feature: "none",
},
{
// Draft WebGL extensions are deliberately not enabled by experimental web
// platform features.
name: "WebGLDraftExtensions",
base_feature: "none",
public: true,
},
{
name: "WebGLDrawingBufferStorage",
status: "stable",
},
{
name: "WebGLImageChromium",
base_feature: "none",
public: true,
},
{
// Switch WebGL to use an experimental implementation where WebGL calls
// are translated in Blink, via ANGLE, to WebGPU calls. Note that this
// is not marked as "experimental" because it is not an incremental
// addition like other experimental features but a code switch, so we
// don't want to enable it when testing all "experimental Web platform
// features".
name: "WebGLOnWebGPU",
},
{
// Launch feature flag for WebGPU Compatibility Mode
// https://chromestatus.com/feature/6436406437871616
name: "WebGPUCompatibilityMode",
origin_trial_feature_name: "WebGPUCompatibilityMode",
status: "experimental",
// Also enabled as part of all experimental WebGPU features.
implied_by: ["WebGPUExperimentalFeatures"],
},
{
// WebGPU developer features are deliberately not enabled by experimental
// web platform features.
name: "WebGPUDeveloperFeatures",
base_feature: "none",
public: true,
},
{
// WebGPU experimental features are meant for features that would
// eventually land in the WebGPU spec.
name: "WebGPUExperimentalFeatures",
status: "experimental",
public: true,
},
{
// https://chromestatus.com/feature/5110223547269120
name: "WebGPUTextureComponentSwizzle",
status: "stable",
},
{
name: "WebHID",
status: {"Android": "", "default": "stable"},
},
{
// It is only enabled in extension environment for now.
name: "WebHIDOnServiceWorkers",
depends_on: ["WebHID"],
base_feature: "none",
public: true,
},
{
name: "WebIdentityDigitalCredentials",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebIdentityDigitalCredentialsCreation",
origin_trial_feature_name: "WebIdentityDigitalCredentialsCreation",
origin_trial_allows_third_party: true,
public: true,
status: "experimental",
base_feature: "none",
},
// Kill switch for making BigInt handling in WebIDL use ToBigInt.
{
name: "WebIDLBigIntUsesToBigInt",
status: "stable",
},
{
name: "WebMCP",
status: "experimental",
},
{
name: "WebMCPTesting",
status: "experimental",
},
{
name: "WebNFC",
public: true,
status: {"Android": "stable", "iOS": "stable", "default": "test"},
base_feature: "none",
},
{
name: "WebOTP",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebOTPAssertionFeaturePolicy",
depends_on: ["WebOTP"],
public: true,
status: "stable",
base_feature: "none",
},
{
// https://wicg.github.io/web-preferences-api/
name: "WebPreferences",
status: "experimental",
},
{
name: "WebPrinting",
status: {"Android": "", "default": "test"},
},
// WebShare is enabled by default on Android (non-WebView), Win, ChromeOS, and Mac.
// This is done in chrome/renderer/chrome_content_renderer_client.cc to prevent
// making the API available to Linux and WebView. Ideally we would set the status
// below to "stable" once we can do so without significant test expectation duplication.
{
name: "WebShare",
public: true,
status: "test",
},
{
name: "WebSocketStream",
status: "stable",
},
{
name: "WebSpeechRecognitionContext",
status: {
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"ChromeOS": "experimental",
"default": "",
},
},
{
name: "WebTransportApplicationProtocol",
status: "stable",
base_feature: "none",
},
{
name: "WebTransportCustomCertificates",
origin_trial_feature_name: "WebTransportCustomCertificates",
status: "stable",
base_feature: "none",
},
{
// Note: enabling this without setting WebTransportCongestionControl to
// either BBRv1 or BBRv2 will produce poor bandwidth estimates.
name: "WebTransportStats",
status: "experimental",
base_feature: "none",
},
{
// Fetches the WebUI code cache from the resource bundle asynchronously
// on a worker thread.
name: "WebUIBundledCodeCacheAsyncFetch",
status: "experimental",
},
{
name: "WebUSB",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebUSBOnDedicatedWorkers",
status: "stable",
depends_on: ["WebUSB"],
},
{
// It is only enabled in extension environment for now.
name: "WebUSBOnServiceWorkers",
depends_on: ["WebUSB"],
base_feature: "none",
public: true,
},
{
name: "WebVTTRegions",
status: "experimental",
},
{
name: "WebXR",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebXREnabledFeatures",
depends_on: ["WebXR"],
status: "stable",
},
{
name: "WebXRFrameRate",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRFrontFacing",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRGPUBinding",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRHitTestEntityTypes",
depends_on: ["WebXR"],
status: "experimental",
},
{
name: "WebXRImageTracking",
depends_on: ["WebXR"],
origin_trial_feature_name: "WebXRImageTracking",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRLayers",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRLayersCommon",
implied_by: ["WebXRLayers", "WebXRGPUBinding"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRPlaneDetection",
depends_on: ["WebXR"],
origin_trial_feature_name: "WebXRPlaneDetection",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRPoseMotionData",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRSpecParity",
depends_on: ["WebXR"],
public: true,
status: "experimental",
},
{
name: "WebXRVisibilityMask",
depends_on: ["WebXR"],
status: "experimental",
},
{
name: "WidthAndHeightAsPresentationAttributesOnNestedSvg",
// Disabled due to web compat issues, see https://crbug.com/449170647.
status: "experimental",
},
{
name: "WidthAndHeightStylePropertiesOnUseAndSymbol",
status: "experimental",
},
{
name: "WindowControlsOverlay",
status: { "Android": "test", "default": "stable" },
base_feature: "AndroidWindowControlsOverlay",
},
// If enabled, window.default[Ss]tatus will be supported. This is disabled
// by default, and is here to allow this behavior to be re-enabled via Finch
// in case of problems. This flag should be removed by Q1 2023, assuming
// no problems are encountered.
{
name: "WindowDefaultStatus",
},
{
name: "WordSpacingWhiteSpacePre",
status: "stable",
},
{
// Moving to the Rust parser requires deprecation of the niche feature
// of synchronously including external entities.
// https://crbug.com/455813733
name: "XMLNoExternalEntities",
},
{
name: "XMLSerializerConsistentDefaultNsDeclMatching",
status: "test",
},
{
// A feature flag that controls whether XSLT is supported by the browser.
// crbug.com/435623334.
name: "XSLT",
status: "stable",
},
{
// A feature flag that will be used for a "special trial" of disabling
// XSLT on pre-stable channels only. If *either* this flag is disabled,
// *or* the main "XSLT" flag is disabled, then XSLT will be disabled.
// crbug.com/435623334.
name: "XSLTSpecialTrial",
status: "stable",
},
{
// If enabled, the `getDisplayMedia()` family of APIs will ask for NV12
// frames, which should trigger a zero-copy path in the tab capture code.
name: "ZeroCopyTabCapture",
}
],
}