blob: de23f4da2ce7f8b85b713e9cac296f0151ef2384 [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", "Win": "experimental"},
// }
// "ExampleFeature" will be stable on Android/WebView/WebLayer, experimental
// on Windows and not enabled on any other platform.
//
// Note that the Android status key implies Chrome for Android, WebView and
// WebLayer.
//
// "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_Ash", "ChromeOS_Lacros", "Mac", "Linux"]
},
// "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 the
// default being false.
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: {
valid_type: "str",
default: "",
},
// Specifiy 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 default is overridden by field trial or command
// line, set Blink feature to the state of the base::Feature;
// - Otherwise if the base::Feature is enabled, enable the Blink feature.
// - Otherwise no change.
//
// * "overridden"
// Enables the Blink feature when the base::Feature is overridden 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.
//
// 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.
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.
browser_process_read_write_access: {
default: false,
value_type: "bool",
},
override_from_pref: {
valid_keys: [
// Chrome Prefs name (string) from which we will conditionally override
// the runtime feature value.
"name",
// If the preference equals the provided integral, string, or boolean
// value, the feature will be force enabled.
"force_enable_val",
// If the preference equals the provided integral, string, or
// boolean value, the feature will be force disabled.
"force_disable_val",
// Short-hand boolean flag. If true, will always override
// the feature. The specified Chrome Pref must be boolean.
"override_from_boolean_val",
],
}
},
data: [
{
name: "AbortSignalAny",
status: "experimental",
depends_on: ["AbortSignalComposition"]
},
{
name: "AbortSignalComposition",
status: "stable"
},
{
name: "Accelerated2dCanvas",
settable_from_internals: true,
status: "stable",
base_feature: "none",
},
{
name: "AcceleratedSmallCanvases",
status: "stable",
base_feature: "none",
},
{
name: "AccessibilityAriaVirtualContent",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "AccessibilityEagerAXTreeUpdate",
status: "stable",
},
{
name: "AccessibilityExposeDisplayNone",
status: "test",
base_feature: "none",
},
{
name: "AccessibilityExposeHTMLElement",
base_feature: "none",
public: true,
},
{
name: "AccessibilityExposeIgnoredNodes",
base_feature: "none",
public: true,
},
{
name: "AccessibilityObjectModel",
status: "experimental",
base_feature: "none",
},
{
name: "AccessibilityPageZoom",
base_feature: "none",
public: true,
},
{
name: "AccessibilityUseAXPositionForDocumentMarkers",
base_feature: "none",
public: true,
},
{
name: "AccordionPattern",
status: "experimental",
},
{
name: "AddIdentityInCanMakePaymentEvent",
origin_trial_allows_third_party: true,
origin_trial_feature_name: "AddIdentityInCanMakePaymentEvent",
public: true,
},
{
name: "AddressSpace",
status: "experimental",
implied_by: ["CorsRFC1918"],
base_feature: "none",
},
{
// Interest Group JS API/runtimeflag.
name: "AdInterestGroupAPI",
origin_trial_feature_name: "AdInterestGroupAPI",
implied_by: ["Fledge", "Parakeet"],
},
{
name: "AdTagging",
public: true,
status: "test",
base_feature: "none",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
base_feature: "none",
},
{
name: "AllowURNsInIframes",
base_feature: "none",
},
{
name: "AndroidDownloadableFontsMatching",
base_feature: "none",
public: true,
},
{
name: "AnimationWorklet",
base_feature: "none",
},
{
name: "AnonymousIframe",
origin_trial_allows_third_party: true,
origin_trial_feature_name: "AnonymousIframeOriginTrial",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "AOMAriaRelationshipProperties",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "AttributionReporting",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "none",
},
{
name: "AttributionReportingCrossAppWeb",
origin_trial_feature_name: "AttributionReportingCrossAppWeb",
origin_trial_allows_third_party: true,
base_feature: "none",
browser_process_read_access: true,
},
{
// This only exists so we can use RuntimeEnabled in the IDL file
// when either implied_by flag is enabled.
name: "AttributionReportingInterface",
// This is not going into origin trial, "origin_trial_feature_name" is
// required for using the "implied_by" behaviour.
origin_trial_feature_name: "AttributionReportingInterface",
origin_trial_allows_third_party: true,
implied_by: ["AttributionReporting", "AttributionReportingCrossAppWeb"],
base_feature: "none",
},
{
name: "AudioContextSetSinkId",
status: "stable",
base_feature: "none",
},
{
name: "AudioOutputDevices",
// Android does not yet support switching of audio output devices
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "AudioVideoTracks",
status: "experimental",
base_feature: "none",
},
{
name: "AutoDarkMode",
base_feature: "none",
origin_trial_feature_name: "AutoDarkMode",
},
{
name: "AutoDisableAccessibilityV2",
base_feature: "none",
public: true,
},
{
// Makes autofill look across shadow boundaries when collecting form
// controls to fill.
name: "AutofillShadowDOM",
status: "stable",
},
{
name: "AutomationControlled",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
// Flag set by the media::kAutoplayIgnoreWebAudio feature flag.
name: "AutoplayIgnoresWebAudio",
base_feature: "none",
public: true,
settable_from_internals: true,
},
// 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: "experimental",
origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
base_feature: "BackForwardCacheSendNotRestoredReasons",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "BackgroundFetch",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "BarcodeDetector",
status: {
// Built-in barcode detection APIs are only available from some
// platforms. See //services/shape_detection.
"Android": "stable",
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"Mac": "stable",
"default": "test",
},
base_feature: "none",
},
{
// https://github.com/WICG/display-locking/blob/master/explainer-beforematch.md
name: "BeforeMatchEvent",
origin_trial_feature_name: "BeforeMatchEvent",
status: "stable",
base_feature: "none",
},
{
name: "BeforeunloadEventCancelByPreventDefault",
status: "experimental",
public: true,
},
{
name: "BidiCaretAffinity",
base_feature: "none",
},
{
name: "BlinkExtensionChromeOS",
base_feature: "none",
},
{
name: "BlinkExtensionChromeOSHID",
depends_on: ["BlinkExtensionChromeOS"],
base_feature: "none",
},
{
name: "BlinkExtensionChromeOSTelemetry",
depends_on: ["BlinkExtensionChromeOS"],
base_feature: "none",
},
{
name: "BlinkExtensionChromeOSWindowManagement",
depends_on: ["BlinkExtensionChromeOS"],
base_feature: "none",
},
{
name: "BlinkLifecycleScriptForbidden",
},
{
name: "BlinkRuntimeCallStats",
base_feature: "none",
},
{
// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#blocking-attributes
name: "BlockingAttribute",
status: "stable",
base_feature: "none",
},
{
name: "BlockingFocusWithoutUserActivation",
status: "experimental",
},
{
name: "BrowserVerifiedUserActivationKeyboard",
base_feature: "none",
public: true,
},
{
name: "BrowserVerifiedUserActivationMouse",
base_feature: "none",
public: true,
},
{
name: "ByobFetch",
status: "experimental",
},
{
name: "CacheStorageCodeCacheHint",
origin_trial_feature_name: "CacheStorageCodeCacheHint",
status: "experimental",
base_feature: "none",
},
{
// If set, the parser will canonicalize whitespace strings.
name: "CanonicalizeWhitespaceStrings",
status: "stable",
},
{
name: "Canvas2dCanvasFilter",
status: "experimental",
base_feature: "none",
},
{
name: "Canvas2dImageChromium",
base_feature: "none",
public: true,
},
{
name: "Canvas2dLayers",
base_feature: "none",
},
{
name: "Canvas2dScrollPathIntoView",
status: "experimental",
base_feature: "none",
},
{
name: "CanvasFloatingPoint",
status: "experimental",
base_feature: "none",
},
{
name: "CanvasHDR",
status: "experimental",
base_feature: "none",
},
{
name: "CanvasImageSmoothing",
status: "experimental",
base_feature: "none",
},
{
name: "CapabilityDelegationDisplayCaptureRequest",
status: "experimental",
},
{
name: "CapabilityDelegationFullscreenRequest",
status: "stable",
base_feature: "none",
},
{
name: "CaptureController",
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "CaptureHandle",
depends_on: ["GetDisplayMedia"],
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "checkVisibility",
status: "stable",
base_feature: "none",
},
{
name: "ClickToCapturedPointer",
status: "experimental",
base_feature: "none",
},
{
name: "ClientHintsMetaEquivDelegateCH",
status: "stable",
},
{
name: "ClientHintsMetaHTTPEquivAcceptCH",
status: "stable",
},
{
name: "ClientHintThirdPartyDelegation",
status: "stable",
},
{
// Allows read/write of custom formats with unsanitized clipboard content.
// See crbug.com/106449.
name: "ClipboardCustomFormats",
status: "stable",
},
{
name: "ClipboardSvg",
status: "experimental",
base_feature: "none",
},
{
name: "ClipboardUnsanitizedContent",
status: "experimental",
base_feature: "none",
},
{
name: "CloseWatcher",
},
{
name: "CLSScrollAnchoring",
status: "stable",
},
{
name: "CoepReflection",
status: "test",
base_feature: "none",
},
{
name: "CompositeBackgroundAttachmentFixed",
status: "experimental",
},
{
name: "CompositeBGColorAnimation",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "CompositeBoxShadowAnimation",
base_feature: "none",
},
{
name: "CompositeClipPathAnimation",
base_feature: "none",
public: true,
},
{
name: "CompositedSelectionUpdate",
public: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "CompositeScrollAfterPaint",
status: "experimental",
},
{
name: "CompressionDictionaryTransport",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "CompressionDictionaryTransport",
public: true,
},
{
name: "CompressionDictionaryTransportBackend",
base_feature_status: "disabled",
public: true,
},
{
name: "ComputedAccessibilityInfo",
status: "experimental",
base_feature: "none",
},
{
// 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_v2",
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "ConfirmationOfAction",
status: "test",
base_feature: "none",
},
{
name: "ConsolidatedMovementXY",
base_feature: "none",
public: true,
},
{
name: "ContactsManager",
status: {"Android": "stable", "default": "test"},
base_feature: "none",
},
{
name: "ContactsManagerExtraProperties",
status: {"Android": "stable", "default": "test"},
base_feature: "none",
},
{
name: "ContentIndex",
status: {"Android": "stable", "default": "experimental"},
base_feature: "none",
},
{
name: "ContentVisibilityAutoStateChangeEvent",
status: "stable",
base_feature: "none",
},
{
name: "ContextMenu",
status: "experimental",
base_feature: "none",
},
{
name: "CooperativeScheduling",
base_feature: "none",
public: true,
},
{
name: "CorsRFC1918",
base_feature: "none",
},
{
name: "CriticalCHRestartNavigationTiming",
status: "experimental",
},
{
name: "CrossFramePerformanceTimeline",
status: "experimental",
},
{
// Allows positioning a positioned element relative to another one.
// https://drafts.csswg.org/css-anchor-1/
name: "CSSAnchorPositioning",
implied_by: ["HTMLSelectMenuElement"],
status: "experimental",
base_feature: "none",
},
{
name: "CSSAnimationComposition",
status: "stable",
base_feature: "none",
},
{
// Support for the animation-delay-start and animation-delay-end
// properties.
//
// Additionally, animation-delay becomes a shorthand which expands
// to those properties.
name: "CSSAnimationDelayStartEnd",
depends_on: ["ScrollTimeline"],
},
{
// Whether <image> values are allowed as counter style <symbol>
name: "CSSAtRuleCounterStyleImageSymbols",
base_feature: "none",
},
{
// https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
status: "test",
base_feature: "none",
},
{
// https://drafts.csswg.org/css-conditional-4/#support-definition-ext
// https://github.com/w3c/csswg-drafts/issues/7280#issuecomment-1143852187
name: "CSSAtSupportsAlwaysNonForgivingParsing",
status: "stable",
},
{
name: "CSSBaselineSource",
status: "stable",
},
{
// 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",
base_feature: "none",
},
{
// Support case-sensitive attribute selector modifier
// https://drafts.csswg.org/selectors-4/#attribute-case
name: "CSSCaseSensitiveSelector",
status: "test",
base_feature: "none",
},
{
name: "CSSColorContrast",
status: "experimental",
base_feature: "none",
},
{
name: "CSSColorTypedOM",
status: "experimental",
base_feature: "none",
},
// Ablation study to try to measure very roughly memory savings from not saving
// pretokenized strings in CSS custom properties.
{
name: "CSSCustomPropertiesAblation",
// Off by default.
},
{
name: "CSSDisplayAnimation",
status: "experimental",
},
{
// crbug.com/995106
name: "CSSDisplayMultipleValues",
status: "stable",
},
// Exists so that we can run a reverse-Finch experiment to assess its performance.
{
name: "CSSEasySelectors",
status: "stable",
},
{
// Include custom properties in CSSComputedStyleDeclaration::item/length.
// https://crbug.com/949807
name: "CSSEnumeratedCustomProperties",
status: "test",
base_feature: "none",
},
{
name: "CSSExponentialFunctions",
status: "experimental",
},
{
name: "CSSFocusVisible",
status: "stable",
base_feature: "none",
},
{
name: "CSSFoldables",
status: "experimental",
base_feature: "none",
},
{
// @font-face Font property descriptors auto range.
// https://www.w3.org/TR/css-fonts-4/#font-prop-desc
name: "CSSFontFaceAutoVariableRange",
status: "stable",
base_feature: "none",
},
{
name: "CSSFontFaceSrcTechParsing",
status: "stable",
base_feature: "none",
},
{
name: "CSSFontFamilyMath",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSFontSizeAdjust",
status: "test",
base_feature: "none",
},
{
name: "CSSGridTemplatePropertyInterpolation",
status: "stable",
base_feature: "none",
},
{
// 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",
base_feature: "none",
},
{
// crbug.com/924069
name: "CSSHyphenateLimitChars",
status: "stable",
base_feature: "CSSHyphenateLimitChars",
},
{
// If enabled,
// image-set values without the `-webkit-` prefix
// will be parsed.
name: "CSSImageSet",
status: "stable",
},
{
name: "CSSIndependentTransformProperties",
status: "stable",
base_feature: "none",
},
{
name: "CSSInitialPseudo",
status: "experimental",
base_feature: "none",
},
{
name: "CSSLayoutAPI",
status: "experimental",
base_feature: "none",
},
{
name: "CSSLinearTimingFunction",
status: "stable"
},
{
name: "CSSLogical",
status: "experimental",
base_feature: "none",
},
{
name: "CSSLogicalOverflow",
status: "test",
base_feature: "none",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "experimental",
base_feature: "none",
},
{
name: "CSSMathDepth",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathShift",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathStyle",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathVariant",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMixBlendModePlusLighter",
status: "stable",
base_feature: "none",
},
{
// Support for CSS Nesting Level 1.
//
// https://csswg.sesse.net/css-nesting-1/
name: "CSSNesting",
status: "stable",
},
{
// Support nested selectors that start with idents.
name: "CSSNestingIdent",
},
{
name: "CSSObjectViewBox",
status: "stable",
base_feature: "none",
},
{
name: "CSSOffsetPathBasicShapesCircleAndEllipse",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPathBasicShapesRectanglesAndPolygon",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPathCoordBox",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPathRay",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPathRayContain",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPathUrl",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOffsetPositionAnchor",
status: "experimental",
base_feature: "none",
},
{
name: "CSSOverflowForReplacedElements",
status: "stable",
copied_from_base_feature_if: "overridden",
},
{
name: "CSSOverflowMediaFeatures",
status: "stable",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
base_feature: "none",
},
{
// Use the new CSS-based painting for spelling and grammar errors,
// regardless of whether the new highlights or decorations are exposed
// to authors (see CSSSpellingGrammarErrors).
name: "CSSPaintingForSpellingGrammarErrors",
status: "experimental",
base_feature: "CssPaintingForSpellingGrammarErrors",
},
{
name: "CSSPictureInPicture",
status: "stable",
base_feature: "none",
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "test",
base_feature: "none",
},
{
name: "CSSPseudoDir",
status: "experimental",
base_feature: "none",
},
{
name: "CSSPseudoHasNonForgivingParsing",
status: "stable",
},
{
// When an audio, video, or similar resource is "playing"
// or "paused".
// https://www.w3.org/TR/selectors-4/#video-state
name: "CSSPseudoPlayingPaused",
status: "test",
base_feature: "none",
},
{
// https://drafts.csswg.org/css-cascade-6/#scoped-styles
name: "CSSScope",
status: "experimental",
base_feature: "none",
},
{
// https://drafts.csswg.org/css-scroll-snap-2
name: "CSSScrollSnap2",
status: "test",
},
{
name: "CSSSelectorFragmentAnchor",
status: "experimental",
base_feature: "CssSelectorFragmentAnchor",
},
{
// Support for :nth-child(An + B of S).
//
// https://drafts.csswg.org/selectors-4/#the-nth-child-pseudo
name: "CSSSelectorNthChildComplexSelector",
status: "stable",
base_feature: "none",
},
{
name: "CSSSignRelatedFunctions",
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: "experimental",
base_feature: "none",
},
{
// Explainer: https://drafts.csswg.org/css-values/#round-func
name: "CSSSteppedValueFunctions",
status: "experimental",
},
{
name: "CSSStickyContainerQueries",
status: "experimental",
},
{
// https://drafts.csswg.org/css-contain-3/#style-container
// This flag is for querying custom properties only.
name: "CSSStyleQueries",
status: "stable",
base_feature: "none",
},
{
// Support style() queries that evaluate in a boolean context.
name: "CSSStyleQueriesBoolean",
status: "stable",
},
{
// Merge multiple rulesets into one, for faster matching.
name: "CSSSuperRulesets",
status: "experimental",
},
{
name: "CSSSystemAccentColor",
status: "experimental",
},
{
// TODO(https://crbug.com/1411581):
// https://w3c.github.io/csswg-drafts/css-inline-3/#propdef-leading-trim
name: "CSSTextBoxTrim",
status: "test",
},
// `text-wrap: balance`. crbug.com/1251079
{
name: "CSSTextWrap",
status: "stable",
},
// Use the `NGSCoreLineBreaker` for `text-wrap: balance`. crbug.com/1451205
{
name: "CSSTextWrapBalanceByScore",
depends_on: ["CSSTextWrapPretty"],
},
// `text-wrap: pretty`. crbug.com/1432798
{
name: "CSSTextWrapPretty",
status: "experimental",
depends_on: ["CSSTextWrap", "CSSWhiteSpaceShorthand"],
},
// Support for CSS Toggles, https://tabatkins.github.io/css-toggle/
{
name: "CSSToggles",
status: "experimental",
base_feature: "none",
},
{
// Support for transitioning top layer elements out of the top layer by
// allowing the new CSS overlay property to keep the element in the top
// layer with transition-name: overlay. Also, the HTML implementation is
// deferring removal of top layer elements from the top layer until the
// overlay property computes to 'none'.
//
// See: https://github.com/w3c/csswg-drafts/issues/8189
name: "CSSTopLayerForTransitions",
status: "experimental",
base_feature: "none",
},
{
name: "CSSTransitionDiscrete",
status: "experimental",
},
{
// A kill switch for the fix for part of https://crbug.com/1180387 .
// Should be removed after M116 has been stable for a few weeks.
name: "CSSTranslatePreserveYPercent",
status: "stable",
},
{
// 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",
base_feature: "none",
},
{
// Explainer: https://github.com/DevSDK/css-trigonometric-functions
name: "CSSTrigonometricFunctions",
status: "stable",
base_feature: "none",
},
{
name: "CSSUpdateMediaFeature",
status: "stable",
},
// Support for `user-select:contain`.
{
name: "CSSUserSelectContain",
status: "test",
base_feature: "none",
},
// Support for registered custom properties with <image> syntax.
{
name: "CSSVariables2ImageValues",
status: "experimental",
},
// Support for registered custom properties with <transform-list> and
// <transform-function> syntax.
{
name: "CSSVariables2TransformValues",
status: "experimental",
},
{
name: "CSSVideoDynamicRangeMediaQueries",
status: "experimental",
base_feature: "none",
},
{
// Support for viewport units added by css-values-4.
//
// https://drafts.csswg.org/css-values-4/#viewport-relative-units
name: "CSSViewportUnits4",
status: "stable",
base_feature: "none",
},
// `white-space` as a shorthand. crbug.com/1417543
{
name: "CSSWhiteSpaceShorthand",
status: "stable",
depends_on: ["CSSTextWrap"],
},
{
name: "CSSWordBoundaryDetection",
status: "test",
},
{
name: "CSSZoom",
status: "stable",
},
{
name: "Database",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "DateInputInlineBlock",
status: "test",
},
{
name: "DecodeJpeg420ImagesToYUV",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "DecodeLossyWebPImagesToYUV",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "DeflateRawCompressionFormat",
status: "stable",
base_feature: "none",
},
{
name: "DelayOutOfViewportLazyImages",
public: true,
status: "experimental",
},
{
name: "DelegatedInkTrails",
status: "stable",
base_feature: "none",
},
// https://github.com/w3c/resource-timing/pull/343
{
name: "DeliveryType",
status: "experimental",
implied_by: ["SpeculationRulesPrefetchFuture"],
base_feature: "none",
origin_trial_feature_name: "DeliveryType",
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
base_feature: "none",
},
{
name: "DesktopPWAsSubApps",
status: "test",
},
{
name: "DeviceAttributes",
origin_trial_feature_name: "DeviceAttributes",
origin_trial_os: ["chromeos"],
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "none",
},
{
name: "DeviceOrientationRequestPermission",
status: "experimental",
base_feature: "none",
},
{
name: "DevicePosture",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "DialogNewFocusBehavior",
status: "experimental",
},
{
name: "DigitalGoods",
origin_trial_feature_name: "DigitalGoodsV2",
origin_trial_os: ["android", "chromeos"],
public: true,
status: {
"Android": "stable",
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "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_Ash": "stable",
"ChromeOS_Lacros": "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: "DirectSockets",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "DisableDifferentOriginSubframeDialogSuppression",
base_feature: "none",
origin_trial_feature_name: "DisableDifferentOriginSubframeDialogSuppression",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
},
{
name: "DisableHardwareNoiseSuppression",
origin_trial_feature_name: "DisableHardwareNoiseSuppression",
status: "experimental",
base_feature: "none",
},
{
name: "DisableSelectAllForEmptyText",
status: "stable",
},
// This feature should only be enabled if
// DisableThirdPartyStoragePartitioning is enabled, but as
// DisableThirdPartyStoragePartitioning will be linked to a deprecation
// trial it isn't possible to set a `depends_on`.
{
name: "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning",
origin_trial_feature_name: "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
base_feature: "none",
},
// This feature will represent the deprecation trial that allows first
// parties to temporarily use unpartitioned storage in embeds loaded
// on their site.
{
name: "DisableThirdPartyStoragePartitioning",
origin_trial_feature_name: "DisableThirdPartyStoragePartitioning",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "none",
browser_process_read_write_access: true,
},
{
name: "DisplayCutoutAPI",
base_feature: "none",
public: true,
},
{
// When a Web application calls getDisplayMedia() and asks for video,
// allow a hint to be provided as to whether it prefers that a
// certain surface type be more prominently offered to the user.
//
// https://github.com/w3c/mediacapture-screen-share/pull/186/files
name: "DisplaySurfaceConstraint",
status: "stable",
base_feature: "none",
},
{
name: "DocumentCookie",
base_feature: "none",
},
{
name: "DocumentDomain",
base_feature: "none",
},
{
name: "DocumentOpenOriginAliasRemoval",
status: "experimental",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentOpenSandboxInheritanceRemoval",
status: "experimental",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentPictureInPictureAPI",
origin_trial_feature_name: "DocumentPictureInPictureAPI",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
status: {
"Android": "",
"ChromeOS_Lacros": "",
"default": "experimental",
},
},
{
name: "DocumentPolicy",
public: true,
status: "stable",
base_feature: "none",
},
// Enables the ability to use Document Policy header to control feature
// DocumentDomain.
{
name: "DocumentPolicyDocumentDomain",
status: "experimental",
depends_on: ["DocumentPolicy"],
base_feature: "none",
},
{
name: "DocumentPolicyNegotiation",
origin_trial_feature_name: "DocumentPolicyNegotiation",
public: true,
status: "experimental",
depends_on: ["DocumentPolicy"],
base_feature: "none",
},
// Enables the ability to use Document Policy header to control feature
// SyncXHR.
{
name: "DocumentPolicySyncXHR",
status: "experimental",
depends_on: ["DocumentPolicy"],
base_feature: "none",
},
{
name: "DocumentWrite",
base_feature: "none",
},
{
// Kill-switch for fixes to a bug that detached input elements are retained.
// See crbug.com/1413100
name: "DontLeakDetachedInput",
status: "stable",
},
{
name: "EarlyHintsPreloadForNavigationOptIn",
origin_trial_feature_name: "EarlyHintsPreloadForNavigation",
status: "stable",
base_feature: "none",
},
{
// If enabled, allows web pages to use the experimental EditContext API to
// better control text input. See crbug.com/999184.
name: "EditContext",
status: "experimental",
},
{
// Disables the `white-space` code in `edit_style.cc`.
// Part of crbug.com/1417543, see crrev.com/c/4289333.
name: "EditingStyleWhiteSpace",
status: "stable",
},
{
// Experiment with preventing some instances of mutation XSS
// by escaping "<" and ">" in attribute values.
// See: crbug.com/1175016
name: "EscapeLtGtInAttributes",
status: "experimental",
},
{
name: "EventTimingInteractionCount",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalJSProfilerMarkers",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalPolicies",
depends_on: ["DocumentPolicy"],
status: "experimental",
base_feature: "none",
},
{
name: "ExposeRenderTimeNonTaoDelayedImage",
base_feature: "none",
},
{
name: "ExtendedTextMetrics",
status: "experimental",
base_feature: "none",
},
{
name: "ExtraWebGLVideoTextureMetadata",
base_feature: "none",
},
{
name: "EyeDropperAPI",
status: {
// EyeDropper UI is available only on Windows, Mac, and Linux. This list
// should match the supported operating systems for the kEyeDropper
// base::Feature.
"Mac": "stable",
"Win": "stable",
"Linux": "stable",
},
base_feature: "none",
},
{
name: "FaceDetector",
status: "experimental",
base_feature: "none",
},
{
name: "FakeNoAllocDirectCallForTesting",
status: "test",
base_feature: "none",
},
{
name: "FastComparePositions",
status: "stable",
},
{
name: "FastPositionIterator",
// Not enabled due to a RTL issue. crbug.com/1421016.
},
{
name: "FeaturePolicyReporting",
status: "experimental",
base_feature: "none",
},
{
name: "FedCm",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmAuthz",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmAutoReauthn",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
// This only exists so we can use RuntimeEnabled in the IDL file
// when either implied_by flag is enabled.
name: "FedCmIdentityProviderInterface",
implied_by: ["FedCmIdpSigninStatus", "FedCmUserInfo", "FedCmIdPRegistration", "FedCmAuthz"],
base_feature: "none",
},
{
name: "FedCmIdPRegistration",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmIdpSigninStatus",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmIdpSignout",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmIframeSupport",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmLoginHint",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmMultipleIdentityProviders",
depends_on: ["FedCm"],
base_feature: "none",
public: true,
},
{
name: "FedCmRpContext",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FedCmSelectiveDisclosure",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FedCmUserInfo",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FencedFrames",
base_feature: "none",
// 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.
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "FencedFramesAPIChanges",
// Various new IDL attributes on the <fencedframe> element (such as
// `config`, `sandbox`, and `allow`).
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "enabled_or_overridden",
},
{
name: "FencedFramesDefaultMode",
base_feature_status: "disabled",
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
name: "FetchUploadStreaming",
status: "stable",
base_feature: "none",
},
{
// 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"],
base_feature: "none",
},
{
name: "FileSystemAccessAccessHandle",
status: "stable",
base_feature: "none",
},
{
// In-development features for the File System Access API.
name: "FileSystemAccessAPIExperimental",
status: "experimental",
base_feature: "none",
},
{
// Non-OPFS File System Access API.
name: "FileSystemAccessLocal",
status: {"Android": "test", "default": "stable"},
base_feature: "none",
},
{
// OPFS File System Access API.
name: "FileSystemAccessOriginPrivate",
status: "stable",
base_feature: "none",
},
{
name: "FirstRectForRangeVertical",
status: "stable",
},
{
name: "FixedElementsDontOverscroll",
status: "stable",
},
{
name: "Fledge",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
},
{
name: "FledgeBiddingAndAuctionServer",
base_feature: "none",
origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "FluentScrollbars",
base_feature: "none",
},
{
name: "Focusgroup",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "Focusgroup",
},
{
name: "FocuslessSpatialNavigation",
base_feature: "none",
settable_from_internals: true,
},
{
name: "FontAccess",
status: {"Android": "", "default": "stable"},
},
{
name: "FontPaletteAnimation",
},
{
name: "FontSrcLocalMatching",
base_feature: "none",
// No status, as the web platform runtime enabled feature is controlled by
// a Chromium level feature.
},
{
name: "FontVariantAlternates",
status: "stable",
base_feature: "none",
},
{
name: "FontVariantPosition",
status: "experimental",
base_feature: "none",
},
{
// 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",
},
{
name: "ForcedColorsPreserveParentColor",
status: "stable",
base_feature: "none",
},
{
// This is used in tests to perform memory measurement without
// waiting for GC.
name:"ForceEagerMeasureMemory",
base_feature: "none",
},
{
// https://github.com/flackr/reduce-motion/blob/main/explainer.md
name: "ForceReduceMotion",
base_feature: "none",
},
{
name: "ForceTallerSelectPopup",
status: {"ChromeOS_Ash": "stable", "ChromeOS_Lacros": "stable"},
base_feature: "none",
},
{
name: "FormattedText",
status: "experimental",
base_feature: "none",
},
{
// 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: "FormControlsVerticalWritingModeDirectionSupport",
},
{
name: "FormControlsVerticalWritingModeSupport",
status: "experimental",
},
{
name: "FormRelAttribute",
status: "stable",
},
{
// Bug fix for crbug.com/1429585
name: "FormStateRestoreCallbackCallWithState",
status: "stable",
},
{
name: "FractionalScrollOffsets",
implied_by: ["PercentBasedScrolling"],
base_feature: "none",
public: true,
},
{
name: "FreezeFramesOnVisibility",
status: "experimental",
base_feature: "none",
},
{
// Enables `fullscreen` windowFeatures parameter in window.open().
name: "FullscreenPopupWindows",
status: "experimental",
base_feature: "FullscreenPopupWindows"
},
{
// If enabled, `window.screen` always provides display dimensions.
// Otherwise, `window.screen` provides viewport dimensions in fullscreen
// as a speculative site compatibility measure, because web authors may
// assume that screen dimensions match window.innerWidth/innerHeight while
// a page is fullscreen, but that is not always true. crbug.com/1367416
name: "FullscreenScreenSizeMatchesDisplay",
status: "stable",
},
{
name: "GamepadButtonAxisEvents",
status: "experimental",
base_feature: "none",
},
{
name: "GamepadMultitouch",
status: "experimental",
public: true,
},
{
name: "GetAllScreensMedia",
depends_on: ["GetDisplayMedia"],
public: true,
status: "test",
},
{
name: "GetDisplayMedia",
public: true,
status: {
"Android": "experimental",
"default": "stable",
},
base_feature: "none",
},
{
name: "GetDisplayMediaRequiresUserActivation",
depends_on: ["GetDisplayMedia"],
status: "experimental",
},
{
name: "GroupEffect",
status: "test",
base_feature: "none",
},
{
name: "HandwritingRecognition",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental",
},
base_feature: "none",
},
// HighlightAPI's custom highlights use HighlightInheritance's behavior even
// if the HighlightInheritance feature is not enabled.
{
name: "HighlightAPI",
status: "stable",
base_feature: "none",
},
{
name: "HighlightInheritance",
status: "experimental",
base_feature: "none",
},
{
name: "HighlightOverlayPainting",
status: "stable",
base_feature: "none",
},
{
name: "HighlightPointerEvents",
depends_on: ["HighlightAPI"],
base_feature: "none",
},
{
name: "HrefTranslate",
depends_on: ["TranslateService"],
origin_trial_feature_name: "HrefTranslate",
status: "stable",
base_feature: "none",
},
{
// 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",
},
{
// A kill-switch for crbug.com/1412729
// (enabling the `v` flag for `pattern` RegExps).
name: "HTMLPatternRegExpUnicodeSets",
status: "stable",
},
{
// TODO(crbug.com/1307772): Enables the Popover API.
name: "HTMLPopoverAttribute",
status: "stable",
origin_trial_feature_name: "HTMLPopupAttribute",
implied_by: ["HTMLSelectMenuElement","HTMLPopoverHint"],
},
{
// TODO(crbug.com/1416284): Enables popover=hint functionality.
name: "HTMLPopoverHint",
status: "experimental",
},
{
name: "HTMLSelectMenuElement",
status: "experimental",
base_feature: "none",
},
{
name: "IDBBatchGetAll",
status:"experimental",
base_feature: "none",
},
{
name: "IdleDetection",
public: true,
status: "stable",
base_feature: "none",
},
{
// TODO(crbug.com/1406358): Remove after the origin trial ends in M113.
name: "IgnoreCSPInWebPaymentAPI",
origin_trial_feature_name: "IgnoreCSPInWebPaymentAPI",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "ImplicitRootScroller",
public: true,
settable_from_internals: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "IncomingCallNotifications",
},
{
name: "InertAttribute",
status: "stable",
base_feature: "none",
},
{
name: "InertDisplayTransition",
status: "experimental",
},
{
// If a painting bug no longer reproduces with this feature enabled, then
// the bug is caused by incorrect cull rects.
name: "InfiniteCullRect",
base_feature: "none",
},
{
// If enabled, setting innerHTML will use a special fast-path parser.
name: "InnerHTMLParserFastpath",
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",
},
{
name: "InputMultipleFieldsUI",
// No plan to support complex UI for date/time INPUT types on Android.
status: {"Android": "test", "default": "stable"},
base_feature: "none",
},
{
name: "InstalledApp",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "InteroperablePrivateAttribution",
status: "experimental",
},
{
"name": "IntersectionOptimization",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
base_feature: "none",
},
{
name: "KeyboardFocusableScrollers",
status: "experimental",
},
{
name: "LangAttributeAwareFormControlUI",
base_feature: "none",
settable_from_internals: true,
},
{
name: "LayoutDisableWebkitBoxSafeAlignment",
status: "stable",
},
{
name: "LayoutFlexNewColumnAlgorithm",
status: "stable",
},
{
name: "LayoutFlexNewRowAlgorithm",
status: "test",
},
{
name: "LayoutFlexSafeAlignment",
status: "stable",
},
{
name: "LayoutNewTextAreaScrollbar",
status: "stable",
},
{
// crbug.com/1353190
name: "LayoutNGNoCopyBack",
depends_on: ["RemoveConvertToLayerCoords", "ScrollableAreaNoSnapping"],
status: "test",
},
{
name: "LayoutNGShapeCache",
status: "test",
base_feature: "LayoutNGShapeCache",
},
{
name: "LayoutNGSubgrid",
status: "experimental",
base_feature: "none",
},
{
name: "LazyFrameLoading",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "LazyInitializeMediaControls",
base_feature: "none",
public: true,
// This is enabled by features::kLazyInitializeMediaControls.
},
{
name: "LCPAnimatedImagesWebExposed",
status: "test",
base_feature: "none",
},
{
name: "LCPMouseoverHeuristics",
},
{
name: "LCPMultipleUpdatesPerElement",
},
{
name: "LegacyWindowsDWriteFontFallback",
// Enabled by features::kLegacyWindowsDWriteFontFallback;
base_feature: "none",
},
{
// A feature to load <input type=image> images even if there is no layout object.
// This aligns with <img> behavior, but for safety can be disabled with this
// flag.
name: "LoadInputImageWithoutObject",
status: "stable",
base_feature: "LoadInputImageWithoutObject",
},
{
// Enable AnimationFrameTimingMonitor, which measures long animation
// frames. Can be used for UKM or for the perofrmance API.
name: "LongAnimationFrameMonitoring",
implied_by: ["LongAnimationFrameTiming", "LongAnimationFrameUKM", "LongTaskFromLongAnimationFrame"],
status: "experimental"
},
{
// Enables long aniamtion frames as a performance API (the
// "long-animation-frame" timeline entry)
name: "LongAnimationFrameTiming",
status: "experimental"
},
{
// Enables long aniamtion frame logging to UKM
name: "LongAnimationFrameUKM",
status: "stable"
},
{
// Use LongAnimationFrameMonitor to emit longtask entries
name: "LongTaskFromLongAnimationFrame"
},
{
name: "MachineLearningCommon",
implied_by: ["MachineLearningModelLoader", "MachineLearningNeuralNetwork"],
status: "experimental",
base_feature: "none",
},
{
name: "MachineLearningModelLoader",
status: "experimental",
base_feature: "none",
},
{
name: "MachineLearningNeuralNetwork",
status: {
"Win": "experimental",
"Linux": "experimental",
"default": "test"
},
base_feature: "none",
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
name: "MathMLCore",
status: "stable",
},
{
name:"MeasureMemory",
status:"stable",
base_feature: "none",
},
{
name: "MediaCapabilitiesDynamicRange",
status: "test",
base_feature: "none",
},
{
name: "MediaCapabilitiesEncodingInfo",
status: "experimental",
base_feature: "none",
},
{
name: "MediaCapabilitiesSpatialAudio",
status: "test",
base_feature: "none",
},
{
name: "MediaCapture",
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "MediaCaptureBackgroundBlur",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
base_feature: "none",
},
{
name: "MediaCaptureConfigurationChange",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureBackgroundBlur"],
base_feature: "none",
},
// Set to reflect the MediaCastOverlayButton feature.
{
name: "MediaCastOverlayButton",
base_feature: "none",
public: true,
},
{
name: "MediaControlsExpandGesture",
base_feature: "none",
public: true,
},
{
name: "MediaControlsOverlayPlayButton",
public: true,
settable_from_internals: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "MediaElementVolumeGreaterThanOne",
base_feature: "none",
},
// Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
{
name: "MediaEngagementBypassAutoplayPolicies",
base_feature: "none",
public: true,
},
{
name: "MediaLatencyHint",
status: "test",
base_feature: "none",
},
{
name: "MediaQueryNavigationControls",
base_feature: "none",
},
{
name: "MediaSession",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "MediaSessionSlides",
status: "stable",
base_feature: "none",
},
{
name: "MediaSourceExperimental",
status: "experimental",
base_feature: "none",
},
{
name: "MediaSourceExtensionsForWebCodecs",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
},
{
name: "MediaSourceNewAbortAndDuration",
status: "experimental",
base_feature: "none",
},
{
name: "MediaStreamTrackTransfer",
status: "test",
base_feature: "none",
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
base_feature: "none",
},
{
name: "MobileLayoutTheme",
base_feature: "none",
},
{
name: "MojoJS",
status: "test",
base_feature: "none",
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
base_feature: "none",
},
// crbug.com/1446498: This feature is being used for the deprecation of
// Mutation Events.
{
name: "MutationEvents",
status: "stable",
},
{
name: "NavigateEventCancelableTraversals",
status: "stable",
},
{
name: "NavigateEventCommitBehavior",
status: "experimental",
},
{
name: "NavigationId",
status: "experimental",
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
name: "NavigatorContentUtils",
// Android does not yet support NavigatorContentUtils.
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "NetInfoConstantType",
},
{
name: "NetInfoDownlinkMax",
public: true,
// Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now
status: {
"Android": "stable",
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental",
},
base_feature: "none",
},
{
name: "NodeAsNSResolver",
status: "stable",
},
{
name: "NoIdleEncodingForWebTests",
status: "test",
base_feature: "none",
},
// Makes enter/leave Mouse and Pointer Events non-composed as per
// corresponding specifications.
{
name: "NonComposedEnterLeaveEvents",
public: true,
status: "stable",
},
{
// Kill switch for crbug.com/1427047 fix.
// TODO(xiaochengh): Remove in M117.
name: "NonReentrantFieldSetDisable",
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"},
base_feature: "none",
},
// 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",
},
// Origin trial to experiment with No-Vary-Search in Prefetch Cache
// See crbug.com/1378075. Depends on SpeculationRulesPrefetchProxy to be
// enabled.
// On the browser side, the trial needs features::kPrefetchUseContentRefactor
// enabled. If features::kPrefetchUseContentRefactor is disabled, then
// the code will behave as if PrefetchNoVarySearch is disabled.
{
name: "NoVarySearchPrefetch",
base_feature: "none",
origin_trial_feature_name: "NoVarySearchPrefetch",
},
{
name: "OffMainThreadCSSPaint",
status: "stable",
base_feature: "none",
},
{
name: "OffscreenCanvasCommit",
status: "experimental",
base_feature: "none",
},
{
// TODO(crbug.com/920069): Remove OffsetParentNewSpecBehavior after the
// feature is in stable with no issues.
name: "OffsetParentNewSpecBehavior",
status: "stable",
public: true,
},
{
name: "OnDeviceChange",
// Android does not yet support SystemMonitor.
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "OrientationEvent",
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "OriginIsolationHeader",
status: "stable",
base_feature: "none",
},
{
name: "OriginPolicy",
status: "experimental",
base_feature: "none",
},
// 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",
},
// 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,
},
// 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: "OverflowOverlayAliasesAuto",
status: "stable",
},
{
name: "OverscrollCustomization",
status: "experimental",
base_feature: "none",
},
// 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",
base_feature: "none",
origin_trial_feature_name: "PageFreezeOptIn",
},
{
name: "PageFreezeOptOut",
base_feature: "none",
origin_trial_feature_name: "PageFreezeOptOut",
},
{
name: "PagePopup",
// Android does not have support for PagePopup
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "PaintUnderInvalidationChecking",
base_feature: "none",
settable_from_internals: true,
},
{
// PARAKEET ad serving runtime flag/JS API.
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
{
name: "PartitionedCookies",
base_feature: "none",
origin_trial_feature_name: "PartitionedCookies",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by the corresponding Chromium feature,
// net::features::kPartitionedCookies, which needs to be enabled to make
// the whole feature work.
},
// This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
{
name: "PasswordReveal",
base_feature: "none",
},
{
name: "PaymentApp",
depends_on: ["PaymentRequest"],
public: true,
status: "experimental",
base_feature: "none",
},
// Desktop only, if enabled PaymentHandler will use the new minimal header UX.
// See https://crbug.com/1385136.
{
name: "PaymentHandlerMinimalHeaderUX",
origin_trial_feature_name: "PaymentHandlerMinimalHeaderUX",
origin_trial_allows_third_party: true,
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
},
{
name: "PaymentInstruments",
depends_on: ["PaymentApp"],
base_feature: "none",
},
{
name: "PaymentMethodChangeEvent",
depends_on: ["PaymentRequest"],
status: "stable",
base_feature: "none",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PaymentRequestMerchantValidationEvent",
status: "experimental",
base_feature: "none",
},
{
name: "PendingBeaconAPI",
origin_trial_feature_name: "PendingBeaconAPI",
origin_trial_allows_third_party: true,
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PercentBasedScrolling",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
name: "PerformanceManagerInstrumentation",
base_feature: "none",
public: true,
},
{
name: "PerformanceNavigateSystemEntropy",
status: "experimental",
},
{
name: "PeriodicBackgroundSync",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PerMethodCanMakePaymentQuota",
origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
status: "experimental",
base_feature: "none",
},
{
name: "Permissions",
public: true,
status: "stable",
base_feature: "none",
},
// See https://crbug.com/1324111
{
name: "PermissionsPolicyUnload",
origin_trial_feature_name: "PermissionsPolicyUnload",
status: "experimental",
},
{
name: "PermissionsRequestRevoke",
status: "experimental",
base_feature: "none",
},
// This is a reverse OT used for a phased deprecation.
// https://crbug.com/918374
{
name: "PNaCl",
base_feature: "none",
origin_trial_feature_name: "PNaCl",
},
{
name: "PointerEventDeviceId",
status: "test",
},
// PopoverDialogDontThrow makes popover and dialog elements stop throwing
// exceptions when calling their show and hide methods when they are
// already in their requested state. See https://github.com/whatwg/html/pull/9142
{
name: "PopoverDialogDontThrow",
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"],
public: true,
copied_from_base_feature_if: "overridden",
},
{
name: "PreciseMemoryInfo",
base_feature: "none",
public: true,
},
// 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",
base_feature: "none",
settable_from_internals: true,
},
{
name: "PrefersReducedData",
status: "experimental",
base_feature: "none",
},
// This feature is deprecated and we are evangelizing affected sites.
// See https://crbug.com/346236 for current status.
{
name: "PrefixedVideoFullscreen",
status: "stable",
base_feature: "none",
},
{
// Attempt to set up paint properties for ancestors when pre-painting a
// missed descendant, so that paint effects like transforms aren't lost.
name: "PrePaintAncestorsOfMissedOOF",
status: "stable",
},
{
// https://crbug.com/1126305
name: "Prerender2",
status: "stable",
},
{
name: "Presentation",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PriorityHints",
status: "stable",
base_feature: "none",
},
// The RTE feature encompasses multiple APIs, including: Attribution
// Reporting, FLEDGE, Topics and Fenced Frames.
{
name: "PrivacySandboxAdsAPIs",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
},
{
name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_feature_name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
base_feature: "none",
},
{
name: "PrivateNetworkAccessPermissionPrompt",
},
{
name: "PrivateStateTokens",
// status: "test",
base_feature: "none",
origin_trial_feature_name: "TrustTokens",
origin_trial_allows_third_party: true,
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",
},
{
name: "PushMessaging",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PushMessagingSubscriptionChange",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "QuickIntensiveWakeUpThrottlingAfterLoading",
status: "stable",
},
{
name: "QuotaChange",
status: "experimental",
base_feature: "none",
},
{
name: "ReadableStreamTeeCloneForBranch2",
status: "experimental",
},
// If enabled, the Accept-Language header will be reduced.
{
name: "ReduceAcceptLanguage",
base_feature: "none",
origin_trial_feature_name: "ReduceAcceptLanguage"
},
{
// 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 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"},
},
{
name: "RegionCapture",
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "RemotePlayback",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "RemotePlaybackBackend",
settable_from_internals: true,
// Tracking bug for the implementation: https://crbug.com/728609
status: {"Android": "stable", "default": ""},
base_feature: "none",
},
{
// crbug.com/1432839
name: "RemoveConvertToLayerCoords",
status: "stable",
},
{
name: "RemoveDanglingMarkupInTarget",
status: "experimental",
base_feature: "none",
},
{
name: "RemoveDataUrlInSvgUse",
status: "experimental",
base_feature: "none",
},
{
name: "RemoveLegacySizeComputation",
status: "stable",
},
{
name: "RemoveMobileViewportDoubleTap",
public: true,
status: "stable",
base_feature: "none",
},
{
// Non-standard appearance values should be removed. This feature removes
// inner-spin-button, media-slider, media-sliderthumb, media-volume-slider
// media-volume-sliderthumb, searchfield-cancel-button,
// sliderthumb-horizontal, sliderthumb-vertical.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "RemoveNonStandardAppearanceValue",
status: "experimental",
},
{
// Non-standard appearance values should be removed. This feature removes
// slider-vertical.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "RemoveNonStandardAppearanceValueSliderVertical",
},
{
name: "RenderBlockingStatus",
status: "stable",
base_feature: "none",
},
{
// The renderpriority attribute feature.
// https://github.com/WICG/display-locking/blob/main/explainers/update-rendering.md
name: "RenderPriorityAttribute",
base_feature: "none",
},
{
name: "ResourceHintsLeastRestrictiveCSP",
status: "stable",
base_feature: "none",
},
{
name: "ResourceTimingContentType",
status: "experimental",
base_feature: "none",
},
{
name: "ResourceTimingInterimResponseTimes",
status: "stable",
base_feature: "none",
},
{
name: "ResourceTimingResponseStatus",
status: "stable",
base_feature: "none",
},
{
name: "ResourceTimingUseCORSForBodySizes",
status: "test",
base_feature: "none",
},
{
name: "RestrictGamepadAccess",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "RtcAudioJitterBufferMaxPackets",
origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
status: "experimental",
base_feature: "none",
},
{
name: "RTCEncodedAudioFrameClone",
status: "experimental",
},
{
name: "RTCEncodedVideoFrameAdditionalMetadata",
status: "experimental",
},
{
name: "RTCEncodedVideoFrameClone",
status: "experimental",
},
// 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 |RTCRtpTransceiver::setOfferedRtpHeaderExtensions|,
// |RTCRtpTransceiver::headerExtensionsToOffer|, and
// |RTCRtpTransceiver::headerExtensionsNegotiated|.
{
name: "RTCRtpHeaderExtensionControl",
status: "experimental",
base_feature: "none",
},
{
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",
},
{
name: "SanitizerAPI",
status: "experimental",
},
{
name: "SaveAsWithDeclarativeShadowDOM",
status: "stable",
},
{
name: "SchedulerYield",
origin_trial_feature_name: "SchedulerYield",
depends_on: ["AbortSignalComposition"],
status: "experimental",
},
{
// https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
name: "ScopedCustomElementRegistry",
status: "test",
base_feature: "none",
},
// 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",
},
{
name: "ScriptElementSupports",
status: "stable",
base_feature: "none",
},
{
name: "ScrollableAreaNoSnapping",
status: "stable",
},
{
name: "ScrollbarColor",
status: "test",
},
{
name: "ScrollbarWidth",
status: "experimental",
base_feature: "none",
},
{
name: "ScrollCustomization",
base_feature: "none",
},
{
name: "ScrollEndEvents",
status: "stable",
},
{
name: "ScrollTimeline",
status: "stable",
implied_by: ["AnimationWorklet", "ScrollTimelineCurrentTime"]
},
{
// Support for scroll/view-timeline-attachment.
//
// This feature was intially specified in scroll-animations-1,
// but was since removed by a resolution in Issue 7759.
//
// The properties will remain available behind this flag until
// all WPTs are adjusted to the new API (see feature TimelineScope).
//
// https://github.com/w3c/csswg-drafts/issues/7759
// https://crbug.com/1446702
name: "ScrollTimelineAttachment"
},
{
// Separate flag for crbug.com/1426506 (getCurrentTime API change) which
// is expected to land after the initial launch of ScrollTimeline.
name: "ScrollTimelineCurrentTime",
status: "experimental"
},
// Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
// as per the spec, matching other Web engines.
{
name: "ScrollTopLeftInterop",
status: "stable",
base_feature: "none",
},
// 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: "SecurePaymentConfirmationAllowOneActivationlessShow",
public: true,
status: "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",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "SendFullUserAgentAfterReduction",
base_feature: "none",
origin_trial_feature_name: "SendFullUserAgentAfterReduction",
origin_trial_allows_third_party: true
},
{
name: "SendMouseEventsDisabledFormControls",
status: "experimental",
public: true,
},
{
name: "SensorExtraClasses",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "Serial",
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "SerializeViewTransitionStateInSPA",
base_feature: "none",
},
{
name: "ServiceWorkerBypassFetchHandler",
base_feature: "none",
origin_trial_feature_name: "ServiceWorkerBypassFetchHandlerForMainResource",
public: true,
},
{
name: "ServiceWorkerClientLifecycleState",
status: "experimental",
base_feature: "none",
},
{
name: "ServiceWorkerRaceNetworkRequest",
base_feature: "none",
origin_trial_feature_name: "ServiceWorkerBypassFetchHandlerWithRaceNetworkRequest",
public: true,
},
{
name: "SharedArrayBuffer",
base_feature: "none",
public: true,
},
{
name: "SharedArrayBufferOnDesktop",
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",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "SharedWorker",
public: true,
// Android does not yet support SharedWorker. crbug.com/154571
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "SignatureBasedIntegrity",
origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental",
base_feature: "none",
},
{
name: "SiteInitiatedMirroring",
status: "experimental",
base_feature: "none",
},
{
name: "SkipAd",
depends_on: ["MediaSession"],
status: "experimental",
base_feature: "none",
},
{
// 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",
},
{
name: "SmartCard",
status: {"Android": "", "default": "test"},
},
{
// If enabled Border, Outline and Column-Rule Widths
// will be pixel snapped before layout.
name: "SnapBorderWidthsBeforeLayout",
status: "stable",
},
{
name: "SoftNavigationHeuristics",
status: "experimental",
depends_on: ["NavigationId"],
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
name: "SolidColorLayers",
},
// 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",
status: "stable",
base_feature: "none",
implied_by: ["SpeculationRulesPrefetchProxy", "SpeculationRulesPrefetchWithSubresources", "Prerender2", "SpeculationRulesDocumentRules", "SpeculationRulesRelativeToDocument"],
origin_trial_feature_name: "SpeculationRules__DONOTUSE",
},
{
name: "SpeculationRulesDocumentRules",
base_feature: "none",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "SpeculationRulesDocumentRulesSelectorMatches",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "SpeculationRulesEagerness",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
status: "experimental",
implied_by: ["SpeculationRulesNoVarySearchHint"],
},
{
name: "SpeculationRulesFetchFromHeader",
base_feature: "none",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "SpeculationRulesNoVarySearchHint",
base_feature: "none",
origin_trial_feature_name: "NoVarySearchPrefetch",
},
{
name: "SpeculationRulesPointerDownHeuristics",
base_feature_status: "enabled",
},
{
name: "SpeculationRulesPointerHoverHeuristics",
base_feature_status: "enabled",
},
// This feature exists solely to be the target of implied_by for features
// that are part of this trial but which may also be enabled another way.
// Otherwise, runtime-enabled features can be added to the origin trial
// with the following:
// origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
// origin_trial_allows_third_party: true,
{
name: "SpeculationRulesPrefetchFuture",
base_feature: "none",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
},
{
name: "SpeculationRulesPrefetchProxy",
origin_trial_feature_name: "SpeculationRulesPrefetch",
status: "stable",
copied_from_base_feature_if: "overridden",
implied_by: ["SpeculationRulesPrefetchFuture", "NoVarySearchPrefetch"],
},
{
name: "SpeculationRulesPrefetchWithSubresources",
base_feature: "none",
},
{
name: "SpeculationRulesRelativeToDocument",
base_feature: "none",
origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
name: "SrcsetMaxDensity",
base_feature: "none",
},
// 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",
},
{
// Enabled when blink::features::kStorageAccessAPI is enabled.
name: "StorageAccessAPI",
status: "experimental",
},
{
name: "StorageAccessAPIForOriginExtension",
public: true,
status: "test",
depends_on: ["StorageAccessAPI"],
},
{
name: "StorageBuckets",
status: "experimental",
origin_trial_feature_name: "StorageBuckets",
},
{
// Gates the `locks()` method on a storage bucket.
name: "StorageBucketsLocks",
status: "experimental",
},
{
name: "StreamingDeclarativeShadowDOM",
status: "stable",
},
{
name: "StrictMimeTypesForWorkers",
status: "experimental",
base_feature: "none",
},
{
name: "StylusHandwriting",
base_feature: "none",
},
{
name: "SupportsFontFormatTech",
status: "stable",
base_feature: "none",
},
{
name: "SvgRasterOptimizations",
status: "experimental",
},
{
name: "SynthesizedKeyboardEventsForAccessibilityActions",
status: "experimental",
base_feature: "none",
},
{
name: "SystemWakeLock",
status: "experimental",
base_feature: "none",
},
// For unit tests.
{
name: "TestFeature",
base_feature: "none",
browser_process_read_write_access: true,
},
// For unit tests.
{
name: "TestFeatureDependent",
depends_on: ["TestFeatureImplied"],
base_feature: "none",
},
// For unit tests.
{
name: "TestFeatureImplied",
implied_by: ["TestFeature"],
base_feature: "none",
},
{
// crbug.com/1008951
name: "TextDecoratingBox",
status: "stable",
base_feature: "none",
},
{
name: "TextDetector",
status: "experimental",
base_feature: "none",
},
{
name: "TextFragmentAPI",
status: "experimental",
base_feature: "none",
},
{
name: "TextFragmentIdentifiers",
origin_trial_feature_name: "TextFragmentIdentifiers",
public: true,
status: "stable",
base_feature: "TextFragmentAnchor",
},
{
name: "TextFragmentTapOpensContextMenu",
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "ThirdPartyCookiesUserBypass",
status: "experimental",
base_feature: "none",
browser_process_read_write_access: true,
},
{
// Support for the timeline-scope property.
//
// https://github.com/w3c/csswg-drafts/issues/7759
name: "TimelineScope",
status: "experimental",
depends_on: ["ScrollTimeline"]
},
{
name: "TimerThrottlingForBackgroundTabs",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "TimeZoneChangeEvent",
status: "experimental",
base_feature: "none",
},
{
name: "TopicsAPI",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "TopicsDocumentAPI",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "TopicsXHR",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
// 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).
{
name: "TouchDragAndContextMenu",
implied_by: ["TouchDragOnShortPress"],
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. This feature assumes
// that TouchDragAndContextMenu is enabled.
{
name: "TouchDragOnShortPress",
base_feature: "none",
},
// 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",
},
// This is conditionally set if the platform supports translation.
{
name: "TranslateService",
base_feature: "none",
},
{
name: "TrustedTypeBeforePolicyCreationEvent",
status: "experimental",
base_feature: "none",
},
{
name: "TrustedTypesFromLiteral",
status: "experimental",
base_feature: "none",
},
{
name: "TrustedTypesUseCodeLike",
status: "experimental",
base_feature: "none",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
base_feature: "none",
},
{
// Allow unbalanced columns (no implicit breaks), even if the block-size
// of the multicol container isn't constrained, rather than forcing column
// balancing in such cases. See crbug.com/1156312
name: "UnconstrainedColumnFillAuto",
status: "stable",
},
{
name: "UnexposedTaskIds",
base_feature: "none",
},
// 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"],
},
{
name: "URLPatternCompareComponent",
status: "experimental",
base_feature: "none",
},
{
// Makes the global root scrollbars follow the preferred color scheme
// by default. Please see more details: crbug.com/1423087.
name: "UsedColorSchemeRootScrollbars",
},
{
name: "UserActivationSameOriginVisibility",
base_feature: "none",
public: true,
},
{
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"],
base_feature: "ReduceUserAgent",
},
{
name: "V8IdleTasks",
base_feature: "none",
public: true,
},
{
// Whether a video element should automatically play fullscreen unless
// 'playsinline' is set.
name: "VideoAutoFullscreen",
base_feature: "none",
settable_from_internals: true,
},
{
name: "VideoFullscreenOrientationLock",
base_feature: "none",
},
{
name: "VideoPlaybackQuality",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "VideoRotateToFullscreen",
base_feature: "none",
},
{
name: "VideoTrackGenerator",
status: "test",
base_feature: "none",
},
{
name: "VideoTrackGeneratorInWindow",
status: "test",
base_feature: "none",
},
{
name: "VideoTrackGeneratorInWorker",
base_feature: "none",
},
{
name: "ViewportHeightClientHintHeader",
status: "stable",
},
{
name: "ViewportSegments",
status: "experimental",
base_feature: "none",
},
{
// View transitions.
// See https://www.w3.org/TR/css-view-transitions-1/
name: "ViewTransition",
status: "stable",
implied_by: ["ViewTransitionOnNavigation"],
},
{
// If enabled, ViewTransition API is supported for navigations including
// cross-document transitions.
// See https://drafts.csswg.org/css-view-transitions-1/.
name: "ViewTransitionOnNavigation",
},
{
name: "VisibilityCollapseColumn",
base_feature: "none",
},
{
name: "VisibilityStateEntry",
status: "stable",
base_feature: "none",
},
{
// 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"],
base_feature: "none",
},
{
// 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",
base_feature: "none",
},
{
// A kill switch. Please consider removing this after M112.
name: "WarnSandboxIneffective",
status: "stable",
copied_from_base_feature_if: "overridden",
},
{
name: "WebAnimationsAPI",
status: "stable",
implied_by: ["AnimationWorklet"],
base_feature: "none",
},
{
name: "WebAnimationsSVG",
status: "experimental",
base_feature: "none",
},
{
name: "WebAppDarkMode",
origin_trial_feature_name: "WebAppDarkModeV2",
status: "experimental",
base_feature: "WebAppEnableDarkMode",
},
{
name: "WebAppLaunchHandler",
origin_trial_feature_name: "Launch Handler",
status: {"Android": "experimental", "default": "stable"},
base_feature: "WebAppEnableLaunchHandler",
},
{
name: "WebAppLaunchQueue",
// This is not going into origin trial, "origin_trial_feature_name" is
// required for using the "implied_by" behaviour.
origin_trial_feature_name: "WebAppLaunchQueue",
implied_by: ["WebAppLaunchHandler", "FileHandling"],
base_feature: "none",
},
{
name:"WebAppsLockScreen",
status:"experimental",
base_feature: "none",
},
{
name: "WebAppTabStrip",
status: "experimental",
base_feature: "none",
},
{
name: "WebAppTabStripCustomizations",
status: "experimental",
base_feature: "none",
},
{
name: "WebAppTranslations",
status: "experimental",
base_feature: "WebAppEnableTranslations",
},
{
// 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",
base_feature: "none",
origin_trial_feature_name: "WebAppUrlHandling",
origin_trial_os: ["win", "mac", "linux"],
},
{
name: "WebAppWindowControlsOverlay",
origin_trial_feature_name: "WebAppWindowControlsOverlay",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
status: "stable",
base_feature: "none",
},
{
name: "WebAssemblyGC",
origin_trial_feature_name: "WebAssemblyGC",
status: "experimental",
base_feature: "none",
},
// 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",
base_feature: "none",
},
// When enabled adds the authenticator attachment used for registration and
// authentication to the public key credential response.
{
name: "WebAuthAuthenticatorAttachment",
status: "test",
base_feature: "none",
},
// https://github.com/w3c/webauthn/pull/1663
{
name: "WebAuthenticationDevicePublicKey",
status: "experimental",
base_feature: "none",
},
// https://w3c.github.io/webauthn/#dom-publickeycredential-tojson
// https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON
// https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON
{
name: "WebAuthenticationJSONSerialization",
status: "test",
},
{
name: "WebAuthenticationLargeBlobExtension",
status: "stable",
base_feature: "none",
},
// https://w3c.github.io/webauthn/#prf-extension
{
name: "WebAuthenticationPRF",
status: "stable",
base_feature: "WebAuthenticationPRFExtension",
},
{
name: "WebAuthenticationRemoteDesktopSupport",
base_feature: "none",
public: true,
},
// WebBluetooth is enabled by default on Android, ChromeOS, macOS and
// Windows.
{
name: "WebBluetooth",
public: true,
status: {
"Android": "stable",
"ChromeOS_Ash": "stable", "ChromeOS_Lacros": "stable",
"Mac": "stable",
"Win": "stable",
"default": "experimental",
},
base_feature: "none",
},
{
name: "WebBluetoothGetDevices",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebBluetoothScanning",
status: "experimental",
base_feature: "none",
},
{
name: "WebBluetoothWatchAdvertisements",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebCodecs",
status: "stable",
base_feature: "none",
origin_trial_feature_name: "WebCodecs"
},
{
name: "WebCodecsDequeueEvent",
status: "stable",
base_feature: "none",
},
{
name: "WebCryptoCurve25519",
status: "experimental",
base_feature: "none",
},
{
name: "WebEnvironmentIntegrity",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "WebEnvironmentIntegrity",
},
{
name: "WebFontResizeLCP",
status: "experimental",
},
{
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: "experimental",
base_feature: "none",
},
{
name: "WebGLImageChromium",
base_feature: "none",
public: true,
},
{
name: "WebGPU",
base_feature: "none",
// Note that this isn't enough to enable WebGPU and that access to
// WebGPU is further gated on the "WebGPUService" feature exposing GPU
// process access to WebGPU to the renderer process.
status: "stable",
},
{
// WebGPU developer features are deliberately not enabled by experimental
// web platform features.
name: "WebGPUDeveloperFeatures",
base_feature: "none",
public: true,
},
{
name: "WebGPUWebCodecs",
base_feature: "none",
origin_trial_feature_name: "WebGPUWebCodecs",
public: true,
// Make the WebGPUDeveloperFeatures also enabled this OT feature.
implied_by: ["WebGPUDeveloperFeatures"],
},
{
name: "WebHID",
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
// It is only enabled in extension environment for now.
name: "WebHIDOnServiceWorkers",
depends_on: ["WebHID"],
base_feature: "none",
public: true,
},
{
name: "WebIdentityMDocs",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
// Legacy ::-webkit-scrollbar* pseudo element styling. Enabled for stable
// but configurable via WebPreferences.
{
name: "WebKitScrollbarStyling",
status: "stable",
base_feature: "none",
},
{
name: "WebNFC",
public: true,
status: {"Android": "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",
},
{
name: "WebSerialBluetooth",
status: "experimental",
base_feature: "none",
},
// WebShare is enabled by default on Android.
{
name: "WebShare",
public: true,
status: "test",
base_feature: "none",
},
{
name: "WebSocketStream",
status: "experimental",
base_feature: "none",
},
{
name: "WebTransportCustomCertificates",
origin_trial_feature_name: "WebTransportCustomCertificates",
status: "stable",
base_feature: "none",
},
{
name: "WebUSB",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebUSBOnDedicatedWorkers",
status: "stable",
depends_on: ["WebUSB"],
base_feature: "none",
},
{
// It is only enabled in extension environment for now.
name: "WebUSBOnServiceWorkers",
depends_on: ["WebUSB"],
base_feature: "none",
public: true,
},
{
name: "WebViewXRequestedWithDeprecation",
origin_trial_feature_name: "WebViewXRequestedWithDeprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
origin_trial_os: ["android"],
origin_trial_type: "deprecation",
status: "experimental",
base_feature: "none",
},
{
name: "WebVTTRegions",
status: "experimental",
base_feature: "none",
},
{
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: "WebXRHandInput",
depends_on: ["WebXR"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebXRHitTestEntityTypes",
depends_on: ["WebXR"],
status: "experimental",
base_feature: "none",
},
{
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: "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: "WGIGamepadTriggerRumble",
status: "test",
base_feature: "none",
},
// 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",
},
// Allows use of `window-management` as an alias for `window-placement`
// permission. See crbug.com/1328581
{
name: "WindowManagementPermissionAlias",
status: "stable",
},
// Allows sites to request fullscreen when the set of screens change.
{
name: "WindowPlacementFullscreenOnScreensChange",
status: "experimental",
},
{
// 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",
},
],
}