blob: 8d6c0483ca9454cb44f257b58a106ad8803d01af [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.
// * 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", "ChromeOS": "experimental"},
// }
// "ExampleFeature" will be stable on Android, experimental on ChromeOS
// and not enabled on any other platform
//
// "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", "Lacros"]
},
// "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;
// * depends_on: ["feature1","feature2",...]
// The feature is 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 static method then allows
// the feature implementation to check if the trial is enabled for the
// current context.
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",
},
// Feature policy IDL extended attribute (see crrev.com/2247923004).
feature_policy: {
},
},
data: [
{
name: "Accelerated2dCanvas",
settable_from_internals: true,
status: "stable",
},
{
name: "AcceleratedSmallCanvases",
status: "stable",
},
{
name: "AccessibilityAriaTouchPassthrough",
status: "experimental",
origin_trial_feature_name: "AccessibilityAriaTouchPassthrough",
},
{
name: "AccessibilityAriaVirtualContent",
status: "experimental",
},
{
name: "AccessibilityExposeDisplayNone",
status: "test",
},
{
name: "AccessibilityExposeHTMLElement",
},
{
name: "AccessibilityExposeIgnoredNodes",
},
{
name: "AccessibilityObjectModel",
status: "experimental",
},
{
name: "AccessibilityPageZoom",
},
{
name: "AccessibilityUseAXPositionForDocumentMarkers",
},
{
name: "AddEventListenerAbortSignal",
status: "stable",
},
{
name: "AddressSpace",
status: "experimental",
implied_by: ["CorsRFC1918"],
},
{
name: "AdInterestGroupAPI",
origin_trial_feature_name: "AdInterestGroupAPI",
implied_by: ["Fledge", "Parakeet"],
},
{
name: "AdTagging",
status: "test",
},
{
// Deprecated, see UserActivationPostMessageTransfer.
name: "AllowActivationDelegationAttr",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
},
{
name: "AllowSyncXHRInPageDismissal",
origin_trial_feature_name: "AllowSyncXHRInPageDismissal",
},
{
name: "AndroidDownloadableFontsMatching",
},
{
name: "AnimationWorklet",
status: "experimental",
},
{
name: "AnonymousIframe",
status: "test",
},
{
name: "AOMAriaProperties",
status: "stable",
},
{
name: "AOMAriaRelationshipProperties",
status: "experimental",
},
{
// Force disabled if blink::features::kAppCache is disabled, and this
// will override any origin trial setting.
// Disabled if blink::features::kAppCacheRequireOriginTrial is enabled,
// but can be turned back on by the origin trial.
// Otherwise, on by default.
name: "AppCache",
status: "stable",
origin_trial_feature_name: "AppCache",
},
{
name: "AppHistory",
origin_trial_feature_name: "AppHistory",
status: "experimental",
},
{
name: "AriaTouchPassthrough",
status: "experimental",
},
{
name: "AudioOutputDevices",
// Android does not yet support switching of audio output devices
status: {"Android": "", "default": "stable"},
},
{
name: "AudioVideoTracks",
status: "experimental",
},
{
name: "AutoExpandDetailsElement",
status: "experimental",
},
{
name: "AutofillShadowDOM",
status: "experimental",
},
{
name: "AutoLazyLoadOnReloads",
depends_on: ["LazyFrameLoading"],
},
{
name: "AutomaticLazyFrameLoading",
depends_on: ["LazyFrameLoading"],
status: "stable",
},
{
name: "AutomaticLazyImageLoading",
depends_on: ["LazyImageLoading"],
status: "stable",
},
{
name: "AutomationControlled",
settable_from_internals: true,
},
{
name: "AutoPictureInPicture",
depends_on: ["PictureInPictureAPI"],
origin_trial_feature_name: "AutoPictureInPicture",
status: "experimental",
},
{
// Flag set by the media::kAutoplayIgnoreWebAudio feature flag.
name: "AutoplayIgnoresWebAudio",
settable_from_internals: true,
},
// When enabled, enforces new interoperable semantics for 3D transforms.
// See crbug.com/1008483.
{
name: "BackfaceVisibilityInterop",
},
{
name: "BackForwardCache",
},
{
name: "BackForwardCacheExperimentHTTPHeader",
origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader",
status: "experimental",
},
{
name: "BackgroundFetch",
status: "stable",
},
{
name: "BackgroundVideoTrackOptimization",
status: "stable",
},
{
name: "Badging",
status: "stable",
},
{
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",
},
},
{
// https://github.com/chrishtr/battery-savings/blob/master/explainer.md
name: "BatterySavingsMeta",
origin_trial_feature_name: "BatterySavingsMeta",
status: "experimental",
},
{
// https://github.com/WICG/display-locking/blob/master/explainer-beforematch.md
name: "BeforeMatchEvent",
origin_trial_feature_name: "BeforeMatchEvent",
status: "experimental",
},
{
name: "BidiCaretAffinity",
},
{
name: "BlinkRuntimeCallStats",
},
{
name: "BlockCredentialedSubresources",
status: "stable",
},
{
name: "BlockingFocusWithoutUserActivation",
status: "experimental",
},
{
name: "BrowserVerifiedUserActivationKeyboard",
},
{
name: "BrowserVerifiedUserActivationMouse",
},
{
name: "CacheInlineScriptCode"
},
{
name: "CacheStorageCodeCacheHint",
origin_trial_feature_name: "CacheStorageCodeCacheHint",
status: "experimental",
},
{
name: "Canvas2dImageChromium",
},
{
name: "Canvas2dLayers",
},
{
name: "Canvas2dScrollPathIntoView",
status: "experimental",
},
{
name: "CanvasColorManagement",
status: "stable",
},
{
name: "CanvasColorManagementV2",
status: "experimental",
},
{
name: "CanvasFormattedText",
status: "experimental",
},
{
name: "CanvasImageSmoothing",
status: "experimental",
},
{
name: "CapabilityDelegation",
implied_by: ["CapabilityDelegationPaymentRequest"],
origin_trial_feature_name: "CapabilityDelegationPaymentRequest",
},
{
name: "CapabilityDelegationPaymentRequest",
origin_trial_feature_name: "CapabilityDelegationPaymentRequest",
},
{
name: "CaptureHandle",
origin_trial_feature_name: "CaptureHandle",
depends_on: ["GetDisplayMedia"],
status: {"Android": "", "default": "experimental"},
},
{
name: "CaptureTimeInCsrc",
status: "stable",
},
{
name: "ClickPointerEvent",
status: "stable",
},
{
name: "ClickRetargetting",
status: "experimental",
},
{
name: "ClipboardCustomFormats",
status: "experimental",
},
{
name: "ClipboardSvg",
status: "experimental",
},
{
name: "CloseWatcher",
status: "experimental",
},
{
name: "CLSScrollAnchoring",
status: "experimental",
},
{
name: "COLRV1Fonts",
status: "experimental",
},
{
name: "CompositeAfterPaint",
status: "test",
},
{
name: "CompositeBGColorAnimation",
status: "experimental",
},
{
name: "CompositeBoxShadowAnimation",
},
{
name: "CompositeClipPathAnimation",
},
{
name: "CompositedSelectionUpdate",
status: {"Android": "stable"},
},
{
name: "CompositeRelativeKeyframes",
status: "stable"
},
{
name: "ComputedAccessibilityInfo",
status: "experimental",
},
{
// blink::features::kComputePressure is a kill switch for the API. If the
// feature is disabled, origin trial tokens are ignored.
name: "ComputePressure",
origin_trial_feature_name: "ComputePressure",
status: "experimental",
},
{
name: "ConditionalFocus",
origin_trial_feature_name: "ConditionalFocus",
status: {"Android": "", "default": "experimental"},
implied_by: ["RegionCapture"],
},
{
name: "ConsolidatedMovementXY",
},
{
name: "ContactsManager",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContactsManagerExtraProperties",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContainIntrinsicSizeAuto",
status: "test",
},
{
name: "ContentIndex",
status: {"Android": "stable", "default": "experimental"},
},
{
name: "ContextMenu",
status: "experimental",
},
{
name: "ConversionMeasurement",
origin_trial_feature_name: "ConversionMeasurement",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "ConversionMeasurementEventSources",
status: "test",
},
{
name: "CooperativeScheduling"
},
{
name: "CorsRFC1918",
},
// This block isn't really used on its own. Blink doesn't really have to
// know about COEP:credentialless. However it is used for "declaring" the
// OriginTrial feature name. This is similar to:
// https://chromium-review.googlesource.com/c/chromium/src/+/2366778
// for CrossOriginOpenerPolicyReporting.
{
name: "CrossOriginEmbedderPolicyCredentialless",
origin_trial_feature_name: "CrossOriginEmbedderPolicyCredentiallessOriginTrial",
status: "experimental",
},
{
name: "CrossOriginIsolation",
status: "stable",
},
{
name: "CrossOriginOpenerPolicyReporting",
origin_trial_feature_name: "CrossOriginOpenerPolicyReporting",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "CrossOriginWebAssemblyModuleSharingAllowed",
},
{
name: "CSS3Text",
status: "experimental",
},
{
name: "CSSAccentColor",
status: "stable",
},
{
// Whether <image> values are allowed as counter style <symbol>
name: "CSSAtRuleCounterStyleImageSymbols",
},
{
// https://github.com/w3c/csswg-drafts/issues/5693
// Experimental support of @counter-style rules in shadow DOM.
name: "CSSAtRuleCounterStyleInShadowDOM",
status: "stable",
},
{
// https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
status: "test",
},
{
// https://github.com/DevSDK/calc-infinity-and-NaN/blob/master/explainer.md
name: "CSSCalcInfinityAndNaN",
status: "test",
},
{
// https://drafts.csswg.org/css-cascade-5/#layering
name: "CSSCascadeLayers",
status: "test",
},
{
// Support case-sensitive attribute selector modifier
// https://drafts.csswg.org/selectors-4/#attribute-case
name: "CSSCaseSensitiveSelector",
status: "test",
},
{
// Support the 'only' keyword for the color-scheme property.
name: "CSSColorSchemeOnly",
status: "test",
},
{
name: "CSSColorTypedOM",
status: "experimental",
},
{
// Stop propagation from BODY to HTML and viewport if HTML or BODY
// elements have any containment applied.
// https://drafts.csswg.org/css-contain-2/#contain-property
name: "CSSContainedBodyPropagation",
status: "stable",
},
{
// https://drafts.csswg.org/css-contain-3/#container-queries
name: "CSSContainerQueries",
},
{
// https://drafts.csswg.org/css-contain-3/#container-lengths
name: "CSSContainerRelativeUnits",
implied_by: ["CSSContainerQueries"]
},
{
// With this flag disabled, we run UpdateStyle() over the full DOM tree
// before running interleaved style/layout. With this flag enabled, we
// skip style recalc in UpdateStyle() for containers which are guaranteed
// to be reachable in the following layout.
name: "CSSContainerSkipStyleRecalc",
implied_by: ["CSSContainerQueries"]
},
{
// Support for contain:inline-size and contain:block-size
name: "CSSContainSize1D",
implied_by: ["CSSContainerQueries"]
},
{
// The main content-visibility feature.
// https://drafts.csswg.org/css-contain/#content-visibility
name: "CSSContentVisibility",
status: "stable",
},
{
// The content-visibility: hidden-matchable feature. This is a planned
// follow-up to the main CSSContentVisibility feature, thus it is gated
// by a different flag.
// https://wicg.github.io/display-locking/
name: "CSSContentVisibilityHiddenMatchable",
origin_trial_feature_name: "BeforeMatchEvent",
status: "experimental"
},
{
// CSS animation/transition updates occur outside style recalc.
//
// https://crbug.com/1180159
name: "CSSDelayedAnimationUpdates",
status: "stable",
},
{
name: "CSSDynamicRangeMediaQueries",
status: "experimental"
},
{
// Include custom properties in CSSComputedStyleDeclaration::item/length.
// https://crbug.com/949807
name: "CSSEnumeratedCustomProperties",
status: "test",
},
{
name: "CSSFocusVisible",
status: "stable",
},
{
name: "CSSFoldables",
status: "experimental",
},
{
// @font-face descriptor size-adjust.
// https://drafts.csswg.org/css-fonts-5/#descdef-font-face-size-adjust
name: "CSSFontFaceSizeAdjust",
status: "stable",
},
{
name: "CSSFontFamilyMath",
status: "experimental",
implied_by: ["MathMLCore"],
},
{
name: "CSSFontSizeAdjust",
status: "test",
},
{
// 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",
},
{
name: "CSSIndependentTransformProperties",
status: "experimental",
},
{
name: "CSSLayoutAPI",
status: "experimental",
},
{
name: "CSSLogical",
status: "experimental",
},
{
name: "CSSLogicalOverflow",
status: "test",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "experimental",
},
{
name: "CSSMathDepth",
status: "experimental",
implied_by: ["MathMLCore"],
},
{
name: "CSSMathShift",
status: "experimental",
implied_by: ["MathMLCore"],
},
{
name: "CSSMathStyle",
status: "experimental",
implied_by: ["MathMLCore"],
},
{
name: "CSSMathVariant",
status: "experimental",
implied_by: ["MathMLCore"],
},
{
name: "CSSModules",
status: "stable",
},
{
name: "CSSOffsetPathRay",
status: "experimental",
},
{
name: "CSSOffsetPathRayContain",
status: "experimental",
},
{
name: "CSSOffsetPositionAnchor",
status: "experimental",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
},
{
name: "CSSPictureInPicture",
status: "experimental",
depends_on: ["PictureInPictureAPI"],
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "experimental",
},
{
// Match input elements which have been autofilled by user agent.
// https://html.spec.whatwg.org/multipage/semantics-other.html#selector-autofill
name: "CSSPseudoAutofill",
status: "experimental",
},
{
name: "CSSPseudoDir",
status: "experimental",
},
{
name: "CSSPseudoHas",
status: "test",
},
{
name: "CSSPseudoHasInSnapshotProfile",
status: "experimental",
implied_by: ["CSSPseudoHas"],
},
{
// When an audio, video, or similar resource is "playing"
// or "paused".
// https://www.w3.org/TR/selectors-4/#video-state
name: "CSSPseudoPlayingPaused",
status: "test",
},
// Scrollbar styling.
// https://drafts.csswg.org/css-scrollbars/
{
name: "CSSScrollbars",
status: "test",
},
// Support for declarative parts of scroll-animations-1, i.e.
// the animation-timeline property and the @scroll-timeline rule.
//
// https://drafts.csswg.org/scroll-animations-1/#animation-timeline
// https://drafts.csswg.org/scroll-animations-1/#scroll-timeline-at-rule
{
name: "CSSScrollTimeline",
status: "experimental",
},
{
name: "CSSSnapSize",
status: "experimental",
},
{
// Support for CSS ::spelling-error, ::grammar-error, and the
// spelling-error and grammar-error values in text-decoration-line.
//
// https://drafts.csswg.org/css-pseudo-4/#selectordef-spelling-error
// https://drafts.csswg.org/css-pseudo-4/#selectordef-grammar-error
// https://drafts.csswg.org/css-text-decor-4/#valdef-text-decoration-line-spelling-error
// https://drafts.csswg.org/css-text-decor-4/#valdef-text-decoration-line-grammar-error
name: "CSSSpellingGrammarErrors",
status: "test",
},
// Make system color keywords compute to themselves.
// https://github.com/w3c/csswg-drafts/issues/3847
{
name: "CSSSystemColorComputeToSelf",
status: "experimental",
},
{
// Support for ::target-text pseudo element as specified in
// https://drafts.csswg.org/css-pseudo/#selectordef-target-text
name: "CSSTargetTextPseudoElement",
status: "stable",
},
// Support for registered custom properties with <image> syntax.
{
name: "CSSVariables2ImageValues",
status: "test",
},
// Support for registered custom properties with <transform-list> and
// <transform-function> syntax.
{
name: "CSSVariables2TransformValues",
status: "test",
},
{
name: "CullRectUpdate",
implied_by: ["CompositeAfterPaint"],
},
{
name: "CustomElementDefaultStyle",
status: "experimental",
},
{
name: "CustomStatePseudoClass",
status: "stable",
},
{
name: "Database",
status: "stable",
},
{
name: "DecodeJpeg420ImagesToYUV",
status: "stable",
},
{
name: "DecodeLossyWebPImagesToYUV",
status: "stable",
},
{
name: "DelegatedInkTrails",
status: "stable",
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
},
{
name: "DesktopPWAsSubApps",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by the corresponding Chromium feature which needs to
// be enabled to make the whole feature work.
},
{
name: "DeviceAttributes",
origin_trial_feature_name: "DeviceAttributes",
origin_trial_os: ["chromeos"],
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "DevicePosture",
status: "experimental",
},
{
name: "DialogFocusNewSpecBehavior",
status: "stable",
},
{
name: "DigitalGoods",
origin_trial_feature_name: "DigitalGoods",
origin_trial_os: ["android", "chromeos"],
status: {
"Android": "experimental",
"ChromeOS": "experimental",
// crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
// so enable the API on all platforms for testing.
"default": "test"
},
},
{
name: "DirectSockets",
status: "test",
},
{
name: "DisableDifferentOriginSubframeDialogSuppression",
origin_trial_feature_name: "DisableDifferentOriginSubframeDialogSuppression",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
},
{
name: "DisableHardwareNoiseSuppression",
origin_trial_feature_name: "DisableHardwareNoiseSuppression",
status: "experimental",
},
{
// Disable composited layer squashing in pre-CompositeAfterPaint for
// testing.
name: "DisableLayerSquashing",
},
{
// When on, the display-capture permissions-policy is enforced.
// When off, enforcement of this permissions-policy is skipped.
// This is driven from the browser process by the Enterprise policy
// called "DisplayCapturePermissionsPolicyEnabled".
// TODO(crbug.com/1233969): Remove this around m100.
name: "DisplayCapturePermissionsPolicy",
},
{
name: "DisplayCutoutAPI",
settable_from_internals: true,
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
name: "DocumentPolicy",
status: "stable",
},
// Enables the ability to use Document Policy header to control feature
// DocumentDomain.
{
name: "DocumentPolicyDocumentDomain",
status: "experimental",
depends_on: ["DocumentPolicy"],
},
{
name: "DocumentPolicyNegotiation",
origin_trial_feature_name: "DocumentPolicyNegotiation",
status: "experimental",
depends_on: ["DocumentPolicy"],
},
// Enables the ability to use Document Policy header to control feature
// SyncXHR.
{
name: "DocumentPolicySyncXHR",
status: "experimental",
depends_on: ["DocumentPolicy"],
},
{
// Document transitions, including shared element transitions.
// See https://github.com/WICG/shared-element-transitions
name: "DocumentTransition",
origin_trial_feature_name: "DocumentTransition",
},
{
name: "DocumentWrite",
},
{
name: "EarlyHintsPreloadForNavigationOptIn",
origin_trial_feature_name: "EarlyHintsPreloadForNavigation",
status: "experimental",
},
{
name: "EditContext",
status: "experimental",
},
{
// http://crbug.com/707656 content editable in LayoutNG.
name: "EditingNG",
status: "stable",
},
{
name: "EncryptedMediaSessionClosedReason",
status: "stable",
},
{
name: "EnterKeyHintAttribute",
status: "stable",
},
{
name: "ExceptionMetaDataForDevTools",
status: "stable",
},
{
name: "ExecCommandInJavaScript",
status: "test",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
},
// Enables navigator.scheduling.isFramePending, allowing long-running JS to
// be able to yield itself when a display update is scheduled.
{
name: "ExperimentalIsFramePending",
status: "experimental"
},
// Enables navigator.scheduling.isInputPending, allowing long-running JS to
// be able to yield itself when user input is queued (crbug.com/910421).
{
name: "ExperimentalIsInputPending",
origin_trial_feature_name: "ExperimentalIsInputPending",
status: "stable"
},
// Enables a DOM-exposed interface to profile client JS.
// https://github.com/WICG/js-self-profiling
{
name: "ExperimentalJSProfiler",
origin_trial_feature_name: "ExperimentalJSProfiler",
status: "stable"
},
{
name: "ExperimentalPolicies",
depends_on: ["DocumentPolicy"],
status: "experimental"
},
{
name: "ExtendedTextMetrics",
status: "experimental",
},
{
name: "ExtraWebGLVideoTextureMetadata",
},
{
name: "EyeDropperAPI",
status: {
// EyeDropper UI is available only on desktop operating systems.
"Android": "test",
"default": "stable",
},
},
{
name: "FaceDetector",
status: "experimental",
},
{
name: "FakeNoAllocDirectCallForTesting",
status: "test",
},
{
name: "FeaturePolicyForClientHints",
status: "stable",
},
{
name: "FeaturePolicyReporting",
status: "experimental"
},
{
name: "FencedFrames",
// This helps enable and expose the <fencedframe> element, but note that
// blink::features::kFencedFrames must be enabled as well, similar to
// Portals, as we require the support of the browser process to fully
// enable the feature. Enabling this runtime enabled feature alone has no
// effect.
status: "experimental",
origin_trial_feature_name: "FencedFrames",
},
{
name: "FetchUploadStreaming",
origin_trial_feature_name: "FetchUploadStreaming",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
// Also enabled when blink::features::kFileHandlingAPI is overridden
// on the command line (or via chrome://flags).
name: "FileHandling",
depends_on: ["FileSystemAccess"],
status: {"Android": "test", "default": "experimental"},
origin_trial_feature_name: "FileHandling",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
},
{
name: "FileHandlingIcons",
depends_on: ["FileHandling"],
status: {"Android": "test", "default": "experimental"},
},
{
name: "FileSystem",
status: "stable",
},
{
name: "FileSystemAccess",
status: {"Android": "test", "default": "stable"},
},
{
name: "FileSystemAccessAccessHandle",
origin_trial_feature_name: "FileSystemAccessAccessHandle",
status: "experimental",
},
{
// In-development features for the File System Access API.
name: "FileSystemAccessAPIExperimental",
status: "experimental",
},
{
name: "Fledge",
origin_trial_feature_name: "Fledge",
},
{
name: "FocuslessSpatialNavigation",
settable_from_internals: true,
},
{
name: "FontAccess",
origin_trial_feature_name: "FontAccess",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by the corresponding Chromium feature which needs to
// be enabled to make the whole feature work.
},
{
name: "FontAccessPersistent",
// TODO(crbug.com/1000486): Add when the Origin Trial dependency bug is fixed.
// depends_on: ["FontAccess"],
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by the corresponding Chromium feature which needs to
// be enabled to make the whole feature work.
},
{
name: "FontSrcLocalMatching",
// No status, as the web platform runtime enabled feature is controlled by
// a Chromium level feature.
},
{
name: "FontSynthesis",
status: "stable",
},
// For simulating Android's overlay fullscreen video in web tests on Linux.
{
name: "ForcedColors",
status: "stable",
},
{
name: "ForcedColorsPreserveParentColor",
depends_on: ["ForcedColors"],
},
{
// This is used in tests to perform memory measurement without
// waiting for GC.
name:"ForceEagerMeasureMemory",
},
{
name: "ForceOverlayFullscreenVideo",
},
{
name: "ForceSynchronousHTMLParsing",
},
{
name: "ForceTallerSelectPopup",
status: {"ChromeOS": "stable"},
},
{
name: "FractionalLineHeight",
status: "stable",
},
{
name: "FractionalScrollOffsets",
status: "experimental",
},
{
name: "FreezeFramesOnVisibility",
status: "experimental",
},
{
name: "GamepadButtonAxisEvents",
status: "experimental",
},
{
name: "GetDisplayMedia",
status: {
"Android": "experimental",
"default": "stable",
},
},
{
name: "GravitySensor",
status: "stable",
},
{
name: "GroupEffect",
status: "test",
},
{
name: "HandwritingRecognition",
status: "experimental",
// Trial also requires kHandwritingRecognitionWebPlatformApiFinch enabled.
origin_trial_feature_name: "HandwritingRecognition",
origin_trial_os: ["chromeos"]
},
{
name: "HighlightAPI",
status: "experimental",
},
{
name: "HighlightInheritance",
},
{
name: "HrefTranslate",
depends_on: ["TranslateService"],
origin_trial_feature_name: "HrefTranslate",
status: "stable",
},
{
name: "HTMLPopupElement",
status: "experimental",
implied_by: ["HTMLSelectMenuElement"],
},
{
name: "HTMLSelectMenuElement",
status: "experimental",
},
{
name: "IdleDetection",
status: "stable",
},
{
name: "ImplicitRootScroller",
settable_from_internals: true,
status: {"Android": "stable"},
},
{
name: "InertAttribute",
status: "experimental",
},
{
name: "InputMultipleFieldsUI",
// No plan to support complex UI for date/time INPUT types on Android.
status: {"Android": "test", "default": "stable"},
},
{
name: "InstalledApp",
status: "stable",
},
{
name: "InteractionId",
status: "stable",
},
{
name: "InterestCohortAPI",
origin_trial_feature_name: "InterestCohortAPI",
origin_trial_allows_third_party: true,
},
{
name: "InterestCohortFeaturePolicy",
status: "experimental",
},
{
name: "IntersectionObserverDocumentScrollingElementRoot",
status: "stable",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
},
{
name: "KeyboardFocusableScrollers",
status: "experimental",
},
{
name: "LangAttributeAwareFormControlUI",
settable_from_internals: true,
},
{
// LayoutNG has been enabled in M76, but we still keep this flag for
// testing. See web_tests/FlagExpectations/disable-layout-ng for more
// details about running web tests with LayoutNG disabled. This flag also
// provides a convenient way for testing legacy layout code path in blink
// unit tests.
name: "LayoutNG",
implied_by: ["BidiCaretAffinity", "CSSContainerQueries"],
status: "stable",
},
{
name: "LayoutNGBlockFragmentation",
implied_by: ["LayoutNGFlexFragmentation", "LayoutNGGridFragmentation", "LayoutNGPrinting"],
},
{
name: "LayoutNGBlockInInline",
depends_on: ["LayoutNG"],
},
{
// Block fragmentation support in the flex layout algorithm.
// https://drafts.csswg.org/css-flexbox-1/#pagination
name: "LayoutNGFlexFragmentation",
depends_on: ["LayoutNG"],
},
{
// Traverse the fragment tree when painting and hit-testing, instead of
// the layout object tree.
name: "LayoutNGFragmentTraversal",
implied_by: ["LayoutNGBlockFragmentation"],
status: "stable",
},
{
// Full support for PositionForPoint in NGPhysicalFragment. Without this
// enabled, we'll typically fall back to legacy code for block children.
name: "LayoutNGFullPositionForPoint",
implied_by: ["LayoutNGBlockFragmentation", "LayoutNGFragmentTraversal"],
status: "stable",
},
{
name: "LayoutNGGrid",
depends_on: ["LayoutNG"],
status: "stable",
},
{
name: "LayoutNGGridCaching",
depends_on: ["LayoutNGGrid"],
status: "stable"
},
{
// Block fragmentation support in the grid layout algorithm.
// https://drafts.csswg.org/css-grid-1/#pagination
name: "LayoutNGGridFragmentation",
depends_on: ["LayoutNG"],
},
{
name: "LayoutNGPrinting",
},
{
name: "LayoutNGTable",
depends_on: ["LayoutNG"],
status: "stable"
},
{
name: "LayoutNGTextCombine",
depends_on: ["LayoutNG"],
status: "stable"
},
{
name: "LayoutNGTextControl",
depends_on: ["EditingNG"],
status: "stable",
},
{
name: "LazyFrameLoading",
status: "stable",
},
{
name: "LazyFrameVisibleLoadTimeMetrics",
},
{
name: "LazyImageLoading",
status: "stable",
},
{
name: "LazyImageVisibleLoadTimeMetrics",
},
{
name: "LazyInitializeMediaControls",
// This is enabled by features::kLazyInitializeMediaControls.
},
{
name: "LegacyWindowsDWriteFontFallback",
// Enabled by features::kLegacyWindowsDWriteFontFallback;
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
name: "MathMLCore",
status:"experimental",
depends_on: ["LayoutNG"],
},
{
name:"MeasureMemory",
status:"stable",
},
{
name: "MediaCapabilitiesDynamicRange",
status: "test",
},
{
name: "MediaCapabilitiesEncodingInfo",
status: "experimental",
},
{
name: "MediaCapabilitiesEncryptedMedia",
status: "stable",
},
{
name: "MediaCapabilitiesSpatialAudio",
status: "test",
},
{
name: "MediaCapabilitiesWebRtc",
status: "experimental",
},
{
name: "MediaCapture",
status: {"Android": "stable"},
},
{
name: "MediaCaptureDepthVideoKind",
status: "experimental",
},
// Set to reflect the MediaCastOverlayButton feature.
{
name: "MediaCastOverlayButton",
},
{
name: "MediaControlsExpandGesture"
},
{
name: "MediaControlsOverlayPlayButton",
settable_from_internals: true,
status: {"Android": "stable"},
},
{
name: "MediaControlsUseCutOutByDefault",
status: "stable",
},
{
name: "MediaDocumentDownloadButton",
},
{
name: "MediaElementVolumeGreaterThanOne",
},
// Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
{
name: "MediaEngagementBypassAutoplayPolicies",
},
{
name: "MediaLatencyHint",
status: "test",
},
{
// https://github.com/whatwg/html/pull/6569
name: "MediaMetaThemeColor",
status: "stable",
},
{
name: "MediaPreservesPitch",
status: "stable",
},
{
name: "MediaQueryNavigationControls",
},
{
name: "MediaSession",
status: "stable",
},
{
name: "MediaSessionPosition",
status: "stable",
},
{
name: "MediaSessionWebRTC",
},
{
name: "MediaSourceExperimental",
status: "experimental",
},
{
name: "MediaSourceExtensionsForWebCodecs",
status: "experimental",
origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
},
{
name: "MediaSourceInWorkers",
status: "experimental",
origin_trial_feature_name: "MediaSourceInWorkers",
},
{
name: "MediaSourceNewAbortAndDuration",
status: "experimental",
},
{
// This is used in cases of mixed specification of stable and
// experimental MediaSource features, such as in the IDL for an interface
// constructor where exposure of the constructor in Window vs other
// contexts can vary in stable vs experimental.
name: "MediaSourceStable",
status: "stable",
},
{
name: "MediaStreamInsertableStreams",
status: "stable",
origin_trial_feature_name: "WebCodecs"
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
},
{
name: "MobileLayoutTheme",
},
{
name: "ModuleServiceWorker",
status: "stable",
},
{
name: "MojoJS",
status: "test",
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
},
{
// When enabled, iframes are not capturing mouse events by default.
name: "MouseSubframeNoImplicitCapture",
},
{
// Named pages for pagination (the "page" CSS property).
name: "NamedPages",
status: "stable",
},
{
name: "NavigatorContentUtils",
// Android does not yet support NavigatorContentUtils.
status: {"Android": "", "default": "stable"},
},
{
// Allows the navigator.language and navigator.languages APIs in insecure
// contexts, which https://github.com/WICG/lang-client-hint proposes that
// we deprecate.
name: "NavigatorLanguageInInsecureContext",
settable_from_internals: true,
status: "stable",
},
{
// Controlled by blink::features::kNavigatorPluginsFixed.
name: "NavigatorPluginsFixed",
},
{
name: "NetInfoDownlinkMax",
// Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now
status: {"Android": "stable", "ChromeOS": "stable", "default": "experimental"},
},
{
name: "NeverSlowMode",
},
{
name: "NewCanvas2DAPI",
origin_trial_feature_name: "NewCanvas2DAPI",
status: "experimental",
},
// Not a web exposed feature, enabled from the command line.
{
name: "NewRemotePlaybackPipeline",
},
{
name: "NoIdleEncodingForWebTests",
status: "test",
},
{
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",
status: {"Mac": "test", "default": "stable"},
},
{
name: "Notifications",
status: "stable",
},
{
name: "NotificationTriggers",
origin_trial_feature_name: "NotificationTriggers",
status: "experimental",
},
{
name: "OffMainThreadCSSPaint",
status: "stable",
},
{
name: "OffscreenCanvasCommit",
status: "experimental",
},
{
// TODO(crbug.com/920069): Remove OffsetParentNewSpecBehavior after the
// feature is in stable with no issues.
name: "OffsetParentNewSpecBehavior",
status: "experimental"
},
{
name: "OnDeviceChange",
// Android does not yet support SystemMonitor.
status: {"Android": "", "default": "stable"},
},
{
name: "OrientationEvent",
status: {"Android": "stable"},
},
{
name: "OriginIsolationHeader",
status: "stable",
},
{
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",
origin_trial_feature_name: "Frobulate",
},
// 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"],
},
// 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",
origin_trial_feature_name: "FrobulateDeprecation",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: 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",
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",
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",
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: "OriginTrialsSampleAPIThirdParty",
origin_trial_feature_name: "FrobulateThirdParty",
origin_trial_allows_third_party: true,
},
{
name: "OverflowClip",
status: "stable",
},
{
name: "OverscrollCustomization",
settable_from_internals: true,
status: "experimental",
},
// The following are developer opt-outs and opt-ins for page freezing. If
// neither is specified then heuristics will be applied to determine whether
// the page is eligible.
{
name: "PageFreezeOptIn",
origin_trial_feature_name: "PageFreezeOptIn",
},
{
name: "PageFreezeOptOut",
origin_trial_feature_name: "PageFreezeOptOut",
},
{
name: "PagePopup",
// Android does not have support for PagePopup
status: {"Android": "", "default": "stable"},
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
{
// This flag enables the Manifest parser to handle URL Protocols.
// Also enabled when blink::features::kWebAppEnableProtocolHandlers is
// overridden on the command line (or via chrome://flags).
name: "ParseUrlProtocolHandler",
status: "experimental",
origin_trial_feature_name: "ParseUrlProtocolHandler",
origin_trial_os: ["win", "mac", "linux"],
},
{
name: "PassPaintVisualRectToCompositor",
},
// This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
{
name: "PasswordReveal",
},
{
name: "PaymentApp",
status: "experimental",
},
{
name: "PaymentHandlerChangePaymentMethod",
status: "stable",
},
{
name: "PaymentHandlerHandlesShippingAndContact",
status: "stable",
},
{
name: "PaymentMethodChangeEvent",
status: "stable",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
status: "experimental",
},
// TODO(crbug.com/1209835): this feature is getting deprecated.
{
name: "PaymentRequestBasicCard",
status: "stable",
},
{
name: "PaymentRequestMerchantValidationEvent",
status: "experimental",
},
{
name: "PaymentRetry",
status: "stable",
},
{
name: "PercentBasedScrolling",
settable_from_internals: true,
},
{
name: "PerformanceManagerInstrumentation",
},
{
name: "PeriodicBackgroundSync",
status: "stable",
},
{
name: "PerMethodCanMakePaymentQuota",
origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
status: "experimental",
},
{
name: "PermissionDelegation",
status: "test",
},
{
name: "Permissions",
status: "stable",
},
{
name: "PermissionsPolicyHeader",
status: "stable"
},
{
name: "PermissionsRequestRevoke",
status: "experimental",
},
{
name: "PictureInPicture",
settable_from_internals: true,
},
// Picture-in-Picture API is disabled by default on Android.
{
name: "PictureInPictureAPI",
status: {"Android": "", "default": "stable"},
},
{
name: "PictureInPictureV2",
depends_on: ["PictureInPictureAPI"],
settable_from_internals: true,
},
// This is a reverse OT used for a phased deprecation.
// https://crbug.com/918374
{
name: "PNaCl",
origin_trial_feature_name: "PNaCl",
},
{
name: "PointerLockOptions",
origin_trial_feature_name: "PointerLockOptions",
status: "stable",
},
{
name: "PointerRawUpdate",
status: "stable",
},
{
name: "Portals",
// Portals must be enabled by blink::features::kPortals as we require the
// support of the browser process to enable the feature. Enabling this
// feature specifically within blink has no effect. An experimental/test
// status can only be set here if the default of blink::features::kPortals
// allows for it.
// Note that the origin trial paramaters are kept for future OT usage.
// There is no currently running OT and it is not possible for OT code to
// enable portals without browser process support.
origin_trial_feature_name: "Portals",
origin_trial_os: ["android"],
},
{
name: "PreciseMemoryInfo",
},
// 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: "PrefersColorSchemeClientHintHeader",
status: "stable",
},
{
name: "PrefersContrast",
depends_on: ["ForcedColors"],
status: "stable",
},
{
name: "PrefersReducedData",
status: "experimental",
},
// This feature is deprecated and we are evangelizing affected sites.
// See https://crbug.com/346236 for current status.
{
name: "PrefixedVideoFullscreen",
status: "stable",
},
{
name: "Prerender2",
origin_trial_feature_name: "Prerender2",
origin_trial_os: ["android"],
},
{
name: "Presentation",
status: "stable",
},
{
name: "PriorityHints",
origin_trial_feature_name: "PriorityHintsAPI",
status: "experimental",
},
{
name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_feature_name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
},
{
name: "PushMessaging",
status: "stable",
},
{
name: "PushMessagingSubscriptionChange",
status: "experimental",
},
{
name: "QuotaChange",
status: "experimental",
},
{
name: "RegionCapture",
status: {"Android": "", "default": "experimental"},
},
{
name: "RemotePlayback",
status: "stable",
},
{
name: "RemotePlaybackBackend",
settable_from_internals: true,
// Tracking bug for the implementation: https://crbug.com/728609
status: {"Android": "stable", "default": ""},
},
{
name: "RemoveMobileViewportDoubleTap",
status: "stable"
},
{
// See https://crbug.com/1012063
name: "RequestVideoFrameCallback",
status: "stable",
},
{
name: "RestrictAutomaticLazyFrameLoadingToDataSaver",
depends_on: ["AutomaticLazyFrameLoading"],
status: "stable",
},
{
name: "RestrictAutomaticLazyImageLoadingToDataSaver",
depends_on: ["AutomaticLazyImageLoading"],
status: "stable",
},
{
name: "RestrictGamepadAccess",
status: "experimental",
},
{
name: "RtcAudioJitterBufferMaxPackets",
origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
status: "experimental",
},
{
name: "RtcAudioJitterBufferRtxHandling",
origin_trial_feature_name: "RtcAudioJitterBufferRtxHandling",
status: "experimental",
},
// Reverse Origin Trial for Plan B. When enabled through the Origin Trial,
// Plan B is available beyond the initial removal date of Plan B (M93).
{
name: "RTCExtendDeadlineForPlanBRemoval",
origin_trial_feature_name: "RTCExtendDeadlineForPlanBRemoval",
status: "test",
},
// Enables the use of the RTCIceTransport with extensions.
{
name: "RTCIceTransportExtension",
origin_trial_feature_name: "RTCQuicTransport",
status: "experimental",
},
// Enables the use of the Insertable Streams legacy API.
// TODO(https://crbug.com/1119801): Remove when the origin trial ends.
{
name: "RTCInsertableStreams",
origin_trial_feature_name: "RTCInsertableStreams",
status: "experimental",
},
// Enables the use of the RTCQuicTransport object.
{
name: "RTCQuicTransport",
origin_trial_feature_name: "RTCQuicTransport",
status: "experimental",
},
// Enables the use of |RTCRtpTransceiver::setOfferedRtpHeaderExtensions|,
// |RTCRtpTransceiver::headerExtensionsToOffer|, and
// |RTCRtpTransceiver::headerExtensionsNegotiated|.
{
name: "RTCRtpHeaderExtensionControl",
status: "experimental",
},
// Enables the use of |RTCRtpTransceiver::stop()|
{
name: "RTCRtpTransceiverStop",
status: "stable",
},
{
name: "RTCStatsRelativePacketArrivalDelay",
origin_trial_feature_name: "RTCStatsRelativePacketArrivalDelay",
status: "experimental",
},
// Enables the use of SVC scalability mode in WebRTC.
// Spec: https://w3c.github.io/webrtc-svc/
{
name: "RTCSvcScalabilityMode",
status: "experimental",
},
// Enables the use of |RTCConfiguration::sdpSemantics| to override the
// default SDP semantics at RTCPeerConnection construction.
{
name: "RTCUnifiedPlan",
status: "stable",
},
// Overrides the default SDP semantics to be Unified Plan at
// RTCPeerConnection construction (unless otherwise specified).
{
name: "RTCUnifiedPlanByDefault",
},
{
name: "SanitizerAPI",
status: "experimental",
},
{
name: "SchedulerCurrentTaskSignal",
status: "experimental",
},
// WebSpeech API with both speech recognition and synthesis functionality
// is not fully enabled on all platforms.
{
name: "ScriptedSpeechRecognition",
status: "stable",
},
{
name: "ScriptedSpeechSynthesis",
status: "stable",
},
{
name: "ScriptElementSupports",
status: "stable",
},
{
name: "ScrollbarGutter",
status: "stable",
},
{
name: "ScrollbarWidth",
status: "test",
},
{
name: "ScrollCustomization",
},
{
name: "ScrollSnapAfterLayout",
status: "stable",
},
{
name: "ScrollTimeline",
status: "experimental",
implied_by: ["AnimationWorklet", "CSSScrollTimeline"]
},
// Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
// as per the spec, matching other Web engines.
{
name: "ScrollTopLeftInterop",
status: "stable",
},
{
name: "ScrollUnification",
},
{
name: "SecurePaymentConfirmation",
status: "stable",
},
{
name: "SecurePaymentConfirmationDebug",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
status: "stable",
},
{
name: "SendMouseEventsDisabledFormControls",
status: "experimental",
},
{
name: "SensorExtraClasses",
status: "experimental",
},
{
name: "Serial",
status: {"Android": "", "default": "stable"},
},
{
name: "ServiceWorkerClientLifecycleState",
status: "experimental",
},
{
name: "ServiceWorkerFetchEventWorkerTiming",
status: "experimental",
},
{
name: "ServiceWorkerSubresourceFilter",
origin_trial_feature_name: "ServiceWorkerSubresourceFilter",
status: "experimental",
},
{
name: "SharedArrayBuffer",
},
{
name: "SharedArrayBufferOnDesktop",
},
{
name: "SharedArrayBufferUnrestrictedAccessAllowed",
},
{
name: "SharedAutofill",
status: "experimental",
},
{
name: "SharedStorageAPI",
status: "test",
},
{
name: "SharedWorker",
// Android does not yet support SharedWorker. crbug.com/154571
status: {"Android": "", "default": "stable"},
},
{
name: "SignatureBasedIntegrity",
origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental",
},
{
name: "SignedExchangeSubresourcePrefetch",
origin_trial_feature_name: "SignedExchangeSubresourcePrefetch",
status: "experimental",
},
{
name: "SkipAd",
depends_on: ["MediaSession"],
origin_trial_feature_name: "SkipAd",
status: "experimental",
},
{
name: "SkipTouchEventFilter",
settable_from_internals: true,
},
// An origin trial feature name is required for this, even though it's
// actually enabled by the more specific trial. Having these as separate
// features will allow Blink to distinguish for which thing the trial
// was enabled.
{
name: "SpeculationRules",
implied_by: ["SpeculationRulesPrefetchProxy", "Prerender2"],
origin_trial_feature_name: "SpeculationRules__DONOTUSE",
},
// Origin trial to enable Speculation Rules for access to the prefetch proxy.
// https://crbug.com/1190167
{
name: "SpeculationRulesPrefetchProxy",
origin_trial_feature_name: "SpeculationRulesPrefetch",
},
{
name: "SrcsetMaxDensity",
},
// 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",
},
{
// Enabled when blink::features::kStorageAccessAPI is enabled.
name: "StorageAccessAPI",
status: "test",
},
{
name: "StorageBuckets",
status: "experimental",
},
{
name: "StorageFoundationAPI",
origin_trial_feature_name: "StorageFoundationAPI",
status: "experimental",
},
{
name: "StrictMimeTypesForWorkers",
status: "experimental"
},
{
name: "SubresourceWebBundles",
origin_trial_feature_name: "SubresourceWebBundles",
origin_trial_allows_third_party: true,
status: "experimental"
},
{
name: "SVGTextNG",
depends_on: ["LayoutNG"],
status: "stable"
},
{
// Synchronously load web fonts inlined as data urls (crbug.com/1236283)
name: "SyncLoadDataUrlFonts",
status: "test",
},
{
name: "SystemWakeLock",
status: "experimental",
},
{
// TODO(crbug.com/898942): Remove this in Chrome 95.
name: "TargetBlankImpliesNoOpener",
status: "stable",
},
// For unit tests.
{
name: "TestFeature",
},
// For unit tests.
{
name: "TestFeatureDependent",
depends_on: ["TestFeatureImplied"],
},
// For unit tests.
{
name: "TestFeatureImplied",
implied_by: ["TestFeature"],
},
{
name: "TextDetector",
status: "experimental",
},
{
name: "TextFragmentIdentifiers",
origin_trial_feature_name: "TextFragmentIdentifiers",
status: "stable",
},
{
name: "TextFragmentTapOpensContextMenu",
status: {"Android": "stable"},
},
{
name: "ThirdPartyOriginTrials",
status: "stable",
},
{
name: "ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes",
status: "experimental",
},
{
name: "TimerThrottlingForBackgroundTabs",
status: "stable",
},
{
name: "TimeZoneChangeEvent",
status: "experimental",
},
// 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",
status: "stable",
},
{
name: "TransferableStreams",
status: "stable",
origin_trial_feature_name: "RTCInsertableStreams",
implied_by: ["RTCInsertableStreams"],
},
// This is conditionally set if the platform supports translation.
{
name: "TranslateService"
},
{
name: "TrustedDOMTypes",
status: "stable",
},
{
name: "TrustedTypeBeforePolicyCreationEvent",
status: "experimental",
},
{
name: "TrustedTypesUseCodeLike",
status: "experimental",
},
{
name: "TrustTokens",
origin_trial_feature_name: "TrustTokens",
origin_trial_allows_third_party: true,
status: "test",
},
{
// 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: "TrustTokensAlwaysAllowIssuance",
status: "test",
},
// This is a reverse OT used for a phased deprecation of Cryptotoken, the
// component extension that implements the U2F security key API.
// https://crbug.com/1224886
{
name: "U2FSecurityKeyAPI",
origin_trial_feature_name: "U2FSecurityKeyAPI",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
origin_trial_type: "deprecation",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
},
{
name: "UnderlineOffsetThickness",
status: "stable",
},
// This is a reverse OT used for a phased deprecation, on desktop
// https://crbug.com/1071424
{
name: "UnrestrictedSharedArrayBuffer",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
},
{
name: "URLPattern",
status: "stable",
},
{
name: "URLPatternCompareComponent",
status: "experimental",
},
{
name: "UserActivationSameOriginVisibility",
},
{
name: "UserAgentClientHint",
status: "stable",
},
{
name: "UserAgentReduction",
origin_trial_feature_name: "UserAgentReduction",
origin_trial_allows_third_party: true,
// iOS not included as it should not send a reduced User-Agent string.
origin_trial_os: ["android", "chromeos", "fuchsia", "linux", "mac", "win"],
},
{
name: "UUID",
status: "stable"
},
{
name: "V8IdleTasks",
},
{
// Whether a video element should automatically play fullscreen unless
// 'playsinline' is set.
name: "VideoAutoFullscreen",
settable_from_internals: true,
},
{
name: "VideoFullscreenOrientationLock",
},
{
name: "VideoPlaybackQuality",
status: "stable",
},
{
name: "VideoRotateToFullscreen",
},
{
name: "VideoWakeLockOptimisationHiddenMuted",
status: "stable",
},
{
name: "ViewportHeightClientHintHeader",
status: "experimental",
},
{
name: "ViewportSegments",
status: "experimental",
},
{
name: "VirtualKeyboard",
status: "stable",
},
{
name: "VisibilityCollapseColumn",
},
{
name: "VisibilityStateEntry",
status: "experimental",
},
{
// 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"],
},
{
name: "WebAnimationsAPI",
status: "stable",
implied_by: ["AnimationWorklet"],
},
{
name: "WebAnimationsSVG",
status: "experimental",
},
{
name: "WebAppLaunchHandler",
status: "experimental",
},
{
name: "WebAppLinkCapturing",
origin_trial_feature_name: "WebAppLinkCapturing",
origin_trial_os: ["chromeos"],
},
{
// This flag enables the Manifest parser to handle id field.
// Also enabled when blink::features::kWebAppEnableManifestId is
// overridden on the command line (or via chrome://flags).
name: "WebAppManifestId",
status: "experimental",
},
{
name:"WebAppsLockScreen",
status:"experimental",
},
{
name: "WebAppTabStrip",
status: "experimental",
},
{
// This flag enables the Manifest parser to handle URL Handlers.
// Also enabled when blink::features::kWebAppEnableUrlHandlers is
// overridden on the command line (or via chrome://flags).
name: "WebAppUrlHandling",
status: "experimental",
origin_trial_feature_name: "WebAppUrlHandling",
origin_trial_os: ["win", "mac", "linux"],
},
{
name: "WebAppWindowControlsOverlay",
origin_trial_feature_name: "WebAppWindowControlsOverlay",
origin_trial_os: ["win", "mac", "linux"],
status: "experimental",
},
{
name: "WebAssemblyCSP",
status: "experimental",
},
{
name: "WebAssemblyDynamicTiering",
origin_trial_feature_name: "WebAssemblyDynamicTiering",
status: "test",
},
{
name: "WebAssemblyExceptions",
origin_trial_feature_name: "WebAssemblyExceptions",
status: "test",
},
// 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"
},
// A more subtle UI for WebAuthn that is web exposed. Under development.
// It's controlled by the corresponding Chromium feature which needs to
// be enabled to make the whole feature work.
{
name: "WebAuthenticationConditionalUI",
},
{
name: "WebAuthenticationLargeBlobExtension",
status: "experimental",
},
{
name: "WebAuthenticationResidentKeyRequirement",
status: "stable",
},
// WebBluetooth is enabled by default on Android, ChromeOS and Mac.
// It is also supported in Windows 10 which is handled in runtime_features.cc
{
name: "WebBluetooth",
status: {
"Android": "stable",
"ChromeOS": "stable",
"Mac": "stable",
"default": "experimental",
},
},
{
name: "WebBluetoothGetDevices",
status: "experimental",
},
// WebBluetoothManufacturerDataFilter is enabled by default on Android,
// ChromeOS and Mac. It is also supported in Windows 10 which is handled in
// runtime_features.cc
{
name: "WebBluetoothManufacturerDataFilter",
status: {
"Android": "stable",
"ChromeOS": "stable",
"Mac": "stable",
"default": "experimental",
},
},
{
name: "WebBluetoothRemoteCharacteristicNewWriteValue",
status: {
"Android": "stable",
"ChromeOS": "stable",
"Mac": "stable",
"default": "experimental",
},
},
{
name: "WebBluetoothScanning",
status: "experimental",
},
{
name: "WebBluetoothWatchAdvertisements",
status: "experimental",
},
{
name: "WebCodecs",
status: "stable",
origin_trial_feature_name: "WebCodecs"
},
{
name: "WebCryptoCurve25519",
status: "experimental",
},
{
name: "WebGLDeveloperExtensions",
status: "experimental",
},
{
name: "WebGLDraftExtensions",
status: "experimental",
},
{
name: "WebGLImageChromium",
},
// WebGPU adds a large attack surface area to the GPU process and allows
// running arbitrary programs on the GPU (compute shaders), which may
// perform arbitrary read/writes of GPU memory if not properly sandboxed.
// That's why it is not enabled as part of the
// --enable-experimental-web-platform-features flag.
{
name: "WebGPU",
origin_trial_feature_name: "WebGPU",
},
{
// Requires both WebGPU and --enable-experimental-web-platform-features
name: "WebGPUImportTexture",
status: "experimental",
},
{
name: "WebHID",
status: {"Android": "", "default": "stable"},
},
{
name: "WebID",
status: "test",
},
{
name: "WebNFC",
status: {"Android": "stable", "default": "test"},
},
{
name: "WebOTP",
status: "stable",
},
{
name: "WebOTPAssertionFeaturePolicy",
depends_on: ["WebOTP"],
status: "stable",
},
{
name: "WebScheduler",
status: "stable",
},
// WebShare is enabled by default on Android.
{
name: "WebShare",
status: "test",
},
{
name: "WebSocketStream",
status: "experimental",
},
{
name: "WebTransport",
origin_trial_feature_name: "WebTransport",
status: "experimental",
},
{
name: "WebTransportCustomCertificates",
origin_trial_feature_name: "WebTransport",
status: "experimental",
depends_on: ["WebTransport"],
},
{
name: "WebUSB",
status: "stable",
},
{
name: "WebUSBOnDedicatedWorkers",
status: "stable",
depends_on: ["WebUSB"],
},
{
name: "WebVTTRegions",
status: "experimental",
},
{
name: "WebXR",
status: "stable",
},
{
name: "WebXRAnchors",
depends_on: ["WebXRARModule", "WebXRHitTest"],
status: "stable"
},
{
name: "WebXRARModule",
depends_on: ["WebXR"],
status: "stable",
},
{
name: "WebXRCameraAccess",
depends_on: ["WebXRARModule"],
status: "experimental",
},
{
name: "WebXRDepth",
origin_trial_feature_name: "WebXRDepth",
depends_on: ["WebXRARModule"],
status: "stable",
},
{
name: "WebXRHandInput",
depends_on: ["WebXRARModule"],
status: "experimental"
},
{
name: "WebXRHitTest",
depends_on: ["WebXRARModule"],
status: "stable",
},
{
name: "WebXRHitTestEntityTypes",
depends_on: ["WebXRHitTest"],
status: "experimental"
},
{
name: "WebXRImageTracking",
origin_trial_feature_name: "WebXRImageTracking",
depends_on: ["WebXRARModule"],
status: "experimental",
},
{
name: "WebXRLightEstimation",
depends_on: ["WebXRARModule"],
status: "stable",
},
{
name: "WebXRPlaneDetection",
origin_trial_feature_name: "WebXRPlaneDetection",
depends_on: ["WebXRARModule"],
status: "experimental",
},
{
name: "WebXRViewportScale",
depends_on: ["WebXRARModule"],
status: "stable",
},
// Extends window placement functionality for multi-screen devices. Also
// exposes requisite information about displays connected to the device.
{
name: "WindowPlacement",
origin_trial_feature_name: "WindowPlacementOT2",
status: "experimental",
},
{
name: "XSLT",
status: "stable",
},
],
}