{
// See third_party/blink/renderer/platform/RuntimeEnabledFeatures.md
//
// This list is used to generate runtime_enabled_features.h/cc which contains
// a class that stores static enablers for all experimental features.
parameters: {
// Each feature can be assigned a "status". The "status" can be either
// one of the values in the |valid_values| list or a dictionary of
// the platforms listed in |valid_keys| to |valid_values|.
// Use "default" as the key if you want to specify the status of
// the platforms other than the ones declared in the dictionary.
// ** Omitting "default" means the feature is not enabled on
// the platforms not listed in the status dictionary
//
// Definition of each status:
// * status=stable: Enable this in all Blink configurations. We are
// committed to these APIs indefinitely.
// * status=experimental: In-progress features, Web Developers might play
// with, but are not on by default in stable. These features may be
// turned on using the "Experimental Web Platform features" flag in
// chrome://flags/#enable-experimental-web-platform-features.
// * status=test: Enabled in ContentShell for testing, otherwise off.
// Features without a status are not enabled anywhere by default.
//
// Example of the dictionary value use:
// {
// name: "ExampleFeature",
// status: {"Android": "stable", "Win": "experimental"},
// }
// "ExampleFeature" will be stable on Android/WebView/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", "iOS"]
},
// "implied_by" or "depends_on" specifies relationship to other features:
// * implied_by: ["feature1","feature2",...]
// The feature is automatically enabled if any implied_by features is
// enabled. To effectively disable the feature, you must disable the
// feature and all the implied_by features.
// * depends_on: ["feature1","feature2",...]
// The feature can be enabled only if all depends_on features are enabled.
// Only one of "implied_by" and "depends_on" can be specified.
implied_by: {
default: [],
valid_type: "list",
},
// *DO NOT* specify features that depend on origin trial features.
// It is NOT supported. As a workaround, you can either specify the same
// |origin_trial_feature_name| for the feature or add the OT feature to
// the |implied_by| list.
// TODO(https://crbug.com/954679): Add support for origin trial features in 'depends_on' list
depends_on: {
default: [],
valid_type: "list",
},
// origin_trial_feature_name: "FEATURE_NAME" is used to integrate the
// feature with the Origin Trials framework. The framework allows the
// feature to be enabled at runtime on a per-page basis through a signed
// token for the corresponding feature name. Declaring the
// origin_trial_feature_name will modify the generation of the static
// methods in runtime_enabled_features.h/cpp -- the no-parameter version
// will not be generated, so all callers have to use the version that takes
// a const FeatureContext* argument.
origin_trial_feature_name: {
},
// origin_trial_os specifies the platforms where the trial is available.
// The default is empty, meaning all platforms.
origin_trial_os: {
default: [],
valid_type: "list",
},
// origin_trial_type specifies the unique type of the trial, when not the
// usual trial for a new experimental feature.
origin_trial_type: {
default: "",
valid_type: "str",
valid_values: ["deprecation", "intervention", ""],
},
// origin_trial_allows_insecure specifies whether the trial can be enabled
// in an insecure context, with default being false. This can only be set
// to true for a "deprecation" type trial.
origin_trial_allows_insecure: {
valid_type: "bool",
},
// origin_trial_allows_third_party specifies whether the trial can be enabled
// from third party origins, with default being false.
origin_trial_allows_third_party: {
valid_type: "bool",
},
// settable_from_internals specifies whether a feature can be set from
// internals.runtimeFlags, with the default being false.
settable_from_internals: {
valid_type: "bool",
},
// public specifies whether a feature can be accessed via
// third_party/blink/public/platform/web_runtime_features.h with dedicated
// methods. The default is false. This should be rare because
// WebRuntimeFeatures::EnableFeatureFromString() works in most cases.
public: {
valid_type: "bool",
},
// Feature policy IDL extended attribute (see crrev.com/2247923004).
feature_policy: {
},
// The string name of a base::Feature. The C++ variable name in
// blink::features is built with this string by prepending 'k'.
// As long as this field isn't "none", a base::Feature is automatically
// generated in features_generated.{h,cc}. By default the "name" field
// is used for the feature name, but can be overridden here.
//
// The default value of the base::Feature instance is:
// base::FEATURE_ENABLED_BY_DEFAULT if 'status' field is 'stable", and
// base::FEATURE_DISABLED_BY_DEFAULT otherwise.
// It can be overridden by 'base_feature_status' field.
//
// If the flag should be associated with a feature not in blink::features,
// we need to specify `base_feature: "none"` and map the features in
// content/child/runtime_features.cc. `base_feature: "none"` is strongly
// discouraged if the feature doesn't have an associated base feature
// because the feature would lack a killswitch controllable via finch.
base_feature: {
valid_type: "str",
default: "",
},
// Specify the default value of the base::Feature instance. This field
// works only if base_feature is not "none".
// If the field is missing or "", the default value depends on the 'status'
// field. See the comment above.
// "disabled" sets base::FEATURE_DISABLED_BY_DEFAULT, and "enabled" sets
// base::FEATURE_ENABLED_BY_DEFAULT.
base_feature_status: {
valid_type: "str",
valid_values: ["", "disabled", "enabled"],
default: "",
},
// Specify how the flag value is updated from the base::Feature value. This
// field is used only if base_feature is not empty.
//
// * "enabled_or_overridden"
// - If the base::Feature status is overridden to the enabled or disabled
// state by field trial or command line, set Blink feature to the state
// of the base::Feature. Note: "Override to Default" doesn't affect the
// Blink feature.
// - Otherwise if the base::Feature is enabled, enable the Blink feature.
// - Otherwise no change.
//
// * "overridden"
// Enables the Blink feature when the base::Feature status is overridden
// to the enabled or disabled state by field trial or command line.
// Otherwise no change. Its difference from "enabled_or_overridden" is
// that the Blink feature isn't affected by the default state of the
// base::Feature. Note: "Override to Default" deosn't affect the Blink
// feature.
//
// This is useful for Blink origin trial features especially those
// implemented in both Chromium and Blink. As origin trial only controls
// the Blink features, for now we require the base::Feature to be enabled
// by default, but we don't want the default enabled status affect the
// Blink feature. See also https://crbug.com/1048656#c10.
// This can also be used for features that are enabled by default in
// Chromium but not in Blink on all platforms and we want to use the Blink
// status. However, we would prefer consistent Chromium and Blink status
// to this.
copied_from_base_feature_if: {
valid_type: "str",
valid_values: ["enabled_or_overridden", "overridden"],
default: "enabled_or_overridden",
},
// browser_process_read_access indicates the runtime feature state should be
// readable in the browserprocess via RuntimeFeatureStateReadContext.
// TODO(crbug.com/1377000): this feature does not support origin trial
// tokens provided in HTTP headers. Any tokens provided via HTTP header will
// be dropped.
browser_process_read_access: {
default: false,
value_type: "bool",
},
// browser_process_read_write_access indicates the runtime feature state
// should be writable in the browserprocess via RuntimeFeatureStateContext.
// TODO(crbug.com/1377000): this feature does not support origin trial
// tokens provided in HTTP headers. Any tokens provided via HTTP header will
// be dropped.
browser_process_read_write_access: {
default: false,
value_type: "bool",
},
// is_protected_feature indicates whether the feature enablement state should
// be tracked using a base::Protected<bool> value or just a regular bool
// value.
is_protected_feature: {
default: false,
value_type: "bool",
}
},
data: [
{
name: "Accelerated2dCanvas",
settable_from_internals: true,
status: "stable",
},
{
name: "AcceleratedSmallCanvases",
status: "stable",
},
{
name: "AccessibilityAriaVirtualContent",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "AccessibilityExposeDisplayNone",
status: "test",
},
{
// Use a minimum role of group on elements that are keyboard-focusable.
// See https://w3c.github.io/html-aam/#minimum-role.
name: "AccessibilityMinRoleTabbable",
},
{
name: "AccessibilityObjectModel",
status: "experimental",
},
{
name: "AccessibilityOSLevelBoldText",
status: "experimental",
public: true,
},
{
name: "AccessibilityPageZoom",
base_feature: "none",
public: true,
},
{
// Enforce no accessible name on objects that have a role where names are
// prohibited (listed in https://w3c.github.io/aria/#namefromprohibited):
// log a friendly error in the developer console, and trigger a DCHECK().
// The incorrect markup situation will be repaired, and the name will
// be exposed as a description instead.
// TODO(crbug.com/350528330,
// https://github.com/web-platform-tests/interop-accessibility/issues/133,
// https://github.com/w3c/accname/issues/240,
// https://github.com/w3c/accname/issues/241): If community feedback is
// positive, and WPT + accname testable statements are updated to allow
// this, then add status: test.
name: "AccessibilityProhibitedNames",
},
{
name: "AccessibilitySerializationSizeMetrics",
status: "experimental",
},
{
name: "AccessibilityUseAXPositionForDocumentMarkers",
base_feature: "none",
public: true,
},
{
name: "AddressSpace",
status: "experimental",
implied_by: ["CorsRFC1918"],
},
{
// Interest Group JS API/runtimeflag.
name: "AdInterestGroupAPI",
status: "stable",
origin_trial_feature_name: "AdInterestGroupAPI",
implied_by: ["Fledge", "Parakeet"],
public: true,
},
// Adjust the end of the next paragraph if the end position for the
// paragraph is updated while moving the paragraph. See
// https://crbug.com/329121649
{
name: "AdjustEndOfNextParagraphIfMovedParagraphIsUpdated",
status: "stable",
},
{
name: "AdTagging",
public: true,
status: "test",
base_feature: "none",
},
{
name: "AIPromptAPI",
status: "test",
base_feature: "EnableAIPromptAPI",
},
{
name: "AIRewriterAPI",
status: "test",
base_feature: "EnableAIRewriterAPI",
},
{
name: "AISummarizationAPI",
status: "test",
base_feature: "EnableAISummarizationAPI",
},
{
name: "AIWriterAPI",
status: "test",
base_feature: "EnableAIWriterAPI",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
base_feature: "none",
},
// If enabled, blink will not set the autofill state of a field after JS
// modifies its value, and will instead leave it to the WebAutofillClient to
// take care of the state setting.
// This feature should be enabled with
// autofill::features::kAutofillFixCachingOnJavaScriptChanges.
{
name: "AllowJavaScriptToResetAutofillState",
status: "experimental",
},
{
name: "AllowURNsInIframes",
base_feature: "none",
},
{
name: "AndroidDownloadableFontsMatching",
base_feature: "none",
public: true,
},
{
name: "AnimationProgressAPI",
status: "test",
},
{
name: "AnimationWorklet",
},
{
name: "AnonymousIframe",
status: "stable",
},
{
name: "AOMAriaRelationshipProperties",
public: true,
status: "experimental",
},
{
name: "AppTitle",
status: "experimental",
origin_trial_feature_name: "AppTitle",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature: "WebAppEnableAppTitle",
},
{
name: "AriaNotify",
status: "test",
},
{
name: "AriaRowColIndexText",
status: "stable",
},
// See https://crbug.com/40150299, and
// https://github.com/whatwg/dom/issues/1255.
{
name: "AtomicMoveAPI",
status: "test",
},
{
name: "AttributionReporting",
status: "stable",
base_feature: "none",
public: true,
},
{
name: "AttributionReportingCrossAppWeb",
base_feature: "none",
public: true,
status: "stable",
},
{
// 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: "AudioContextOnError",
status: "stable",
},
{
// AudioContext.playoutStats interface.
// https://chromestatus.com/feature/5172818344148992
name: "AudioContextPlayoutStats",
status: "experimental",
},
{
name: "AudioContextSetSinkId",
status: "stable",
},
{
name: "AudioOutputDevices",
// Android does not yet support switching of audio output devices
status: {"Android": "", "default": "stable"},
},
{
name: "AudioVideoTracks",
status: "experimental",
},
// Killswitch. Remove after 1 or 2 stable releases.
{
name: "AuraScrollbarUsesNinePatchTrack",
status: "stable",
},
// Killswitch. Remove after 1 or 2 stable releases.
{
name: "AuraScrollbarUsesSolidColorThumb",
status: "stable",
},
{
name: "AutoDarkMode",
base_feature: "none",
origin_trial_feature_name: "AutoDarkMode",
},
{
name: "AutomationControlled",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
name: "AutoPictureInPictureVideoHeuristics",
status: "experimental",
},
{
// If enabled, lazy loaded images can be auto sized if the sizes
// attribute is missing or set to auto.
name: "AutoSizeLazyLoadedImages",
status: "stable",
},
// When enabled, enforces new interoperable semantics for 3D transforms.
// See crbug.com/1008483.
{
name: "BackfaceVisibilityInterop",
},
{
name: "BackForwardCache",
base_feature: "none",
public: true,
},
{
name: "BackForwardCacheExperimentHTTPHeader",
origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader",
status: "experimental",
base_feature: "none",
},
{
name: "BackForwardCacheNotRestoredReasons",
status: "stable",
origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
base_feature: "BackForwardCacheSendNotRestoredReasons",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
// Used to enable Blink side of features flags for Default Nav Transition.
name: "BackForwardTransitions",
},
{
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",
},
},
{
// When the <base> element href attribute scheme is "data" or "javascript",
// set element's frozen base URL to document's fallback base URL.
// This feature was shipped in M129, so this flag can be removed in M131.
name: "BaseElementUrlUseFallback",
status: "stable",
},
{
// TODO(crbug.com/40586353) There are two different code changes guarded
// by this feature, both related to triggering a beforeunload cancel
// dialog.
// 1. If event.preventDefault() is called, prompt cancel dialog.
// 2. If event.returnValue is the empty string, do not prompt cancel
// dialog.
// This flag was shipped to stable in M117, but there is an enterprise
// policy that allows this flag to be force-diabled. As a result, this
// flag should not be removed until at least M132.
// The enterprise policy has an extended expiration date of M130:
// https://groups.google.com/a/chromium.org/g/chromium-enterprise/c/52qHFoQF_mw/m/gw7e6qPlAAAJ
name: "BeforeunloadEventCancelByPreventDefault",
status: "stable",
public: true,
},
{
name: "BidiCaretAffinity",
},
{
name: "BlinkExtensionChromeOS",
browser_process_read_write_access: true,
},
{
name: "BlinkExtensionChromeOSKiosk",
depends_on: ["BlinkExtensionChromeOS"],
browser_process_read_write_access: true,
},
{
name: "BlinkExtensionDiagnostics",
depends_on: ["BlinkExtensionChromeOS"],
browser_process_read_write_access: true,
base_feature: "none",
},
{
name: "BlinkExtensionWebView",
public: true,
},
{
name: "BlinkExtensionWebViewMediaIntegrity",
public: true,
},
{
name: "BlinkLifecycleScriptForbidden",
},
{
name: "BlinkRuntimeCallStats",
},
{
name: "BlockingFocusWithoutUserActivation",
status: "experimental",
},
// crbug.com/1147998: Mouse and Pointer boundary event dispatch (i.e. dispatch
// of enter, leave, over, out events) tracks DOM node removal to fix event
// pairing on ancestor nodes.
{
name: "BoundaryEventDispatchTracksNodeRemoval",
public: true,
status: "experimental",
},
{
// Full support for box-decoration-break, including block fragmentation,
// not just -webkit-box-decoration-break with inlines at line breaks.
name: "BoxDecorationBreak",
status: "experimental",
},
{
// crbug.com/41485013
name: "BreakIteratorDataGenerator",
status: "stable",
},
{
// crbug.com/41485013
name: "BreakIteratorSetStartOffset",
status: "stable",
},
{
name: "BrowserVerifiedUserActivationKeyboard",
base_feature: "none",
public: true,
},
{
name: "BrowserVerifiedUserActivationMouse",
base_feature: "none",
public: true,
},
{
name: "BufferedBytesConsumerLimitSize",
status: "stable",
},
{
name: "BuiltInAIAPI",
status: "test",
base_feature: "EnableBuiltInAIAPI",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
implied_by: ["AIPromptAPI", "AIRewriterAPI", "AISummarizationAPI", "AIWriterAPI"]
},
{
// Bypasses the enforcement of the Page Embedded Permission Control
// security checks. This flag is disabled by default and should only be
// enabled in automated tests in order to allow them to avoid needing to
// wait until the PEPC is validated and also to use JS-initiated clicks.
name: "BypassPepcSecurityForTesting",
},
{
name: "CacheStorageCodeCacheHint",
origin_trial_feature_name: "CacheStorageCodeCacheHint",
status: "experimental",
base_feature: "none",
},
{
name: "CallExitNodeWithoutLayoutObject",
status: "stable",
},
{
name: "Canvas2dCanvasFilter",
status: "experimental",
},
{
name: "Canvas2dGPUTransfer",
status: "experimental",
},
{
name: "Canvas2dImageChromium",
base_feature: "none",
public: true,
},
{
name: "Canvas2dLayers",
},
{
name: "Canvas2dLayersWithOptions",
status: "experimental",
depends_on: ["Canvas2dLayers"],
},
{
name: "Canvas2dMesh",
origin_trial_feature_name: "Canvas2dMesh",
origin_trial_allows_third_party: true,
status: "test",
},
{
// This is a kill switch for shaping directly in TextMetrics when
// ctx.measureText() is called. Disabled after speedometer regression:
// https://crbug.com/362784008.
name: "Canvas2dTextMetricsShaping",
status: "experimental",
},
{
name: "CanvasFloatingPoint",
status: "experimental",
},
{
name: "CanvasHDR",
status: "experimental",
},
{
name: "CanvasImageSmoothing",
status: "experimental",
},
{
// https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/html-in-canvas.md
name: "CanvasPlaceElement",
status: "experimental",
},
{
// Kill switch for https://crbug.com/330506337.
name: "CanvasUsesArcPaintOp",
status: "stable",
},
{
name: "CapabilityDelegationDisplayCaptureRequest",
status: "experimental",
},
{
name: "CaptureController",
status: {"Android": "", "default": "stable"},
},
{
// TODO(crbug.com/1444712): Before enabling that flag by default,
// make sure MouseCursorOverlayController does not transmit mouse
// events to a CaptureController that don't have any
// capturedmousechange listener attached to it.
// See https://github.com/screen-share/mouse-events/issues/14
name: "CapturedMouseEvents",
"depends_on": ["CaptureController"],
status: {"Android": "", "default": "test"},
},
{
name: "CapturedSurfaceControl",
origin_trial_feature_name: "CapturedSurfaceControl",
status: {"Android": "", "default": "experimental"},
},
{
name: "CaptureHandle",
depends_on: ["GetDisplayMedia"],
status: {"Android": "", "default": "stable"},
},
{
// https://www.w3.org/TR/cssom-view-1/#dom-document-caretpositionfrompoint
name: "CaretPositionFromPoint",
status: "stable",
},
{
// Kill switch for changes to RenderFrameMetadataObserverImpl in connection with Engagement
// Signals. See https://crrev.com/c/4544201 and https://crbug.com/1458640.
name: "CCTNewRFMPushBehavior",
base_feature_status: "enabled",
},
{
name: "CheckVisibilityExtraProperties",
status: "stable",
},
{
name: "ClickToCapturedPointer",
status: "experimental",
},
{
name: "ClipPathRejectEmptyPaths",
status: "stable",
},
{
// Avoid queuing a task to fire a selectionchange event when there is already a task scheduled
// to do that for the target according to the new spec:
// https://w3c.github.io/selection-api/#scheduling-selectionhange-event
name: "CoalesceSelectionchangeEvent",
status: "stable",
},
{
name: "CoepReflection",
status: "test",
},
{
name: "CompositeBGColorAnimation",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "CompositeBoxShadowAnimation",
},
{
name: "CompositeClipPathAnimation",
public: true,
},
{
name: "CompositedAnimationsCancelledAsynchronously",
status: "stable"
},
{
name: "CompositedSelectionUpdate",
public: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "CompositionForegroundMarkers",
status: {
"Android": "stable",
"default": "",
}
},
{
name: "CompressionDictionaryTransport",
base_feature: "none",
public: true,
},
{
name: "CompressionDictionaryTransportBackend",
base_feature: "none",
public: true,
},
{
name: "ComputedAccessibilityInfo",
status: "experimental",
},
{
name: "ComputePressure",
status: {
"Android": "",
"default": "stable",
}
},
{
name: "ConcurrentViewTransitionsSPA",
status: "stable",
},
{
name: "ContactsManager",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContactsManagerExtraProperties",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContainerTypeNoLayoutContainment",
status: "stable",
},
{
name: "ContentIndex",
status: {"Android": "stable", "default": "experimental"},
},
{
name: "ContextMenu",
status: "experimental",
},
{
name: "ContinueEventTimingRecordingWhenBufferIsFull",
status: "experimental",
},
{
// Enable support for Controlled Frame, providing the Controlled
// Frame tag to IWA apps and other contexts. See
// https://github.com/WICG/controlled-frame/blob/main/README.md for more
// info.
name: "ControlledFrame",
public: true,
status: "experimental",
base_feature_status: "disabled",
},
{
name: "CookieDeprecationFacilitatedTesting",
base_feature: "none",
},
{
name: "CooperativeScheduling",
base_feature: "none",
public: true,
},
{
name: "CoopRestrictProperties",
origin_trial_feature_name: "CoopRestrictProperties",
base_feature: "none",
},
{
name: "CorsRFC1918",
},
{
// Controls whether form elements may delay editor creation until layout.
// This is a kill switch. See https://crbug.com/325613706 for details.
name: "CreateInputShadowTreeDuringLayout",
status: "stable"
},
{
// Allow WebAuthn relying parties to report information about existing
// credentials back to credential storage providers.
name: "CredentialManagerReport",
status: "experimental",
},
{
name: "CrossFramePerformanceTimeline",
status: "experimental",
},
{
// CSS attr() function that accepts not only string types
// and can be used in all properties.
// https://drafts.csswg.org/css-values-4/#attr-notation
name: "CSSAdvancedAttrFunction",
},
{
// Support for the anchor-scope property.
// https://drafts.csswg.org/css-anchor-position-1/#anchor-scope
name: "CSSAnchorScope",
status: "experimental",
},
{
// Support for <string> syntax in @property
// https://drafts.css-houdini.org/css-properties-values-api-1/#syntax-strings
name: "CSSAtPropertyStringSyntax",
status: "experimental",
},
{
// Whether <image> values are allowed as counter style <symbol>
name: "CSSAtRuleCounterStyleImageSymbols",
},
{
// https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
status: "test",
},
{
// https://chromestatus.com/feature/5125388091260928
name: "CSSBackgroundClipUnprefix",
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",
},
{
// https://chromestatus.com/feature/5196713071738880
// Shipped in M129. Should be safe to remove the flag a bit after
// M129 has shipped to stable.
name: "CSSCalcSizeFunction",
status: "stable",
},
{
// Support case-sensitive attribute selector modifier
// https://drafts.csswg.org/selectors-4/#attribute-case
name: "CSSCaseSensitiveSelector",
status: "test",
},
{
name: "CSSColorContrast",
status: "experimental",
},
{
name: "CSSColorTypedOM",
status: "experimental",
},
{
name: "CSSComputedStyleFullPseudoElementParser",
status: "stable",
},
{
name: "CSSContentVisibilityImpliesContainIntrinsicSizeAuto",
status: "stable",
},
{
// Unprefixed cross-fade() (in addition to the existing -webkit-cross-fade()).
// https://drafts.csswg.org/css-images-4/#cross-fade-function
name: "CSSCrossFade",
status: "experimental",
},
{
// This flag controls whether the deprecated :--foo syntax is enabled. It
// is being replaced by :state(foo), which is controlled by the
// CSSCustomStateNewSyntax flag.
// TODO(crbug.com/1514397): Remove this when the feature is fully launched.
name: "CSSCustomStateDeprecatedSyntax",
public: true,
},
{
// This flag controls whether the :state(foo) pseudo-class for custom
// elements is enabled. It is a rename of :--foo, which is being
// deprecated and is controlled by the CSSCustomStateDeprecatedSyntax
// flag.
// TODO(crbug.com/1514397): Remove this when the deprecation is done.
name: "CSSCustomStateNewSyntax",
status: "stable",
},
{
// crbug.com/345562934
name: "CssDecoratingBoxFirstLine",
status: "stable",
},
{
name: "CSSDisplayModePictureInPicture",
status: "stable",
},
{
// crbug.com/353228153
name: "CssDisplaySerialziationFix",
status: "stable",
},
{
name: "CSSDynamicRangeLimit",
status: "experimental",
},
{
// Include custom properties in CSSComputedStyleDeclaration::item/length.
// https://crbug.com/949807
name: "CSSEnumeratedCustomProperties",
status: "test",
},
{
name: "CSSExponentialFunctions",
status: "stable",
},
{
// Spec change to search for container query and container units up the
// flat tree instead of the shadow-including ancestors.
name: "CSSFlatTreeContainer",
status: "stable",
},
{
name: "CSSFontSizeAdjust",
status: "stable",
},
{
name: "CSSFunctions",
status: "test",
},
{
// https://chromestatus.com/feature/5157805733183488
name: "CSSGapDecoration",
status: "test",
},
{
// This needs to be kept as a runtime flag as long as we need to forcibly
// disable it for WebView on Android versions older than P. See
// https://crrev.com/f311a84728272e30979432e8474089b3db3c67df
name: "CSSHexAlphaColor",
status: "stable",
},
{
// The `inset-area` CSS property has been renamed to `position-area`. This
// feature (CSSInsetAreaProperty) enables the old `inset-area` property.
// This is enabled by default for now, but deprecated in M129. The plan is
// to disable it starting in M131.
name: "CSSInsetAreaProperty",
status: "stable",
},
{
// https://chromestatus.com/feature/6289894144212992
name: "CSSKeyframesRuleLength",
status: "stable",
},
{
name: "CSSLayoutAPI",
status: "experimental",
},
{
// Flag so that we can Finch the effects of our SIMD fast-path for
// skipping lazily-parsed CSS declaration blocks faster.
name: "CSSLazyParsingFastPath",
status: "experimental"
},
{
name: "CSSLineClamp",
status: "experimental",
},
{
name: "CSSLogicalOverflow",
status: "test",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "experimental",
},
{
name: "CSSMasonryLayout",
status: "test",
},
{
name: "CSSMixins",
},
{
name: "CSSNestedDeclarations",
status: "experimental",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
},
{
// Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
// See crbug.com/1485525.
name: "CSSParserIgnoreCharsetForURLs",
},
{
name: "CSSPartAllowsMoreSelectorsAfter",
status: "experimental",
},
{
// The `inset-area` CSS property has been renamed to `position-area`. This
// feature (CSSPositionAreaProperty) enables the new `position-area`
// property. This is shipped in M129, and (depending on the status of the
// CSSInsetAreaProperty feature) can be removed in M131.
name: "CSSPositionAreaProperty",
status: "stable",
},
{
// For the position-try-fallbacks property, replaces the inset-area()
// syntax (which had the old "inset-area" name) with just a
// <'position-area'>.
name: "CSSPositionAreaValue",
status: "stable",
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "test",
},
{
// position-try-options has been renamed to position-try-fallbacks.
// This feature was shipped in M128, so this flag can be removed in M130.
name: "CSSPositionTryFallbacks",
status: "stable",
},
{
// Kill switch (inverted logic) to re-enable `position-try-options`. That
// property was renamed to `position-try-fallbacks` which is enabled via
// the CSSPositionTryFallbacks flag.
// This feature was disabled in M128, so this flag (and the code to
// implement `position-try-options`) can be removed in M130.
name: "CSSPositionTryOptions",
},
// https://drafts.csswg.org/css-values-5/#progress
// progress(), media-progress(), container-progress()
{
name: "CSSProgressNotation",
status: "experimental",
},
{
// Enables the :open and :closed pseudo-selectors.
// https://chromestatus.com/feature/5085419215781888
name: "CSSPseudoOpenClosed",
status: "experimental",
},
{
// When an audio, video, or similar resource is "playing"
// or "paused".
// https://www.w3.org/TR/selectors-4/#video-state
name: "CSSPseudoPlayingPaused",
status: "test",
},
{
// For ::scroll-up-button and ::scroll-down-button pseudo elements for Carousel.
// https://github.com/flackr/carousel/tree/main/scroll-button
name: "CSSPseudoScrollButtons",
status: "experimental",
depends_on: ["PseudoElementsFocusable"],
},
{
// For ::scroll-marker and ::scroll-marker-group pseudo elements for Carousel.
// https://github.com/flackr/carousel/tree/main/scroll-marker
name: "CSSPseudoScrollMarkers",
status: "experimental",
depends_on: ["PseudoElementsFocusable"],
},
{
// TODO(crbug.com/40932006): Non-standard 'reading-flow' keyword
// for reading of grid and flexbox items.
// https://drafts.csswg.org/css-display-4/#reading-flow
name: "CSSReadingFlow",
status: "experimental",
},
{
// https://drafts.csswg.org/css-color-5/#relative-colors
name: "CSSRelativeColor",
status: "stable",
},
{
// crbug.com/325309578
name: "CSSRelativeColorSupportsCurrentcolor",
status: "test",
},
{
// Non-standard 'auto' keyword for the CSS resize property. Used for
// selectively enable resize corner for textarea via UA stylesheet, but
// unintentionally exposed to author sheets. UA rule is now using
// -internal-textarea-auto instead.
name: "CSSResizeAuto",
status: "stable",
},
{
// crbug.com/40249572
name: "CssRubyAlign",
status: "stable",
depends_on: ["RubyLineBreakable"],
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchange
name: "CSSScrollSnapChangeEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchanging
name: "CSSScrollSnapChangingEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSScrollSnapEvents",
status: "stable",
implied_by: ["CSSScrollSnapChangeEvent", "CSSScrollSnapChangingEvent"],
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-start
name: "CSSScrollStart",
status: "test",
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-start-target
name: "CSSScrollStartTarget",
status: "experimental",
},
{
// Flag for supporting scroll-state() and container-type: scroll-state
// Implied by supporting at least one of the scroll-state query features.
name: "CSSScrollStateContainerQueries",
implied_by: ["CSSStickyContainerQueries", "CSSSnapContainerQueries"],
},
{
name: "CSSSelectorFragmentAnchor",
status: "experimental",
base_feature: "CssSelectorFragmentAnchor",
},
{
name: "CSSSignRelatedFunctions",
status: "experimental",
},
{
name: "CSSSnapContainerQueries",
status: "experimental",
},
{
// Explainer: https://drafts.csswg.org/css-values/#round-func
name: "CSSSteppedValueFunctions",
status: "stable",
},
{
name: "CSSStickyContainerQueries",
status: "experimental",
},
{
name: "CSSSupportsForImportRules",
status: "stable",
},
{
// The AccentColor And AccentColorText CSS system color keywords
name: "CSSSystemAccentColor",
status: "experimental",
},
{
// crbug.com/1463890: CSS `text-autospace` property
name: "CSSTextAutoSpace",
status: "experimental",
},
{
// TODO(https://crbug.com/1411581):
// https://w3c.github.io/csswg-drafts/css-inline-3/#propdef-leading-trim
name: "CSSTextBoxTrim",
status: "experimental",
},
{
// crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
name: "CSSTextSpacing",
depends_on: ["CSSTextAutoSpace"],
},
{
// Makes the transition shorthand omit longhands which have initial
// values as per a standards discussion.
// Shipped in M127, should be safe to remove in M132.
// https://issues.chromium.org/issues/41487057
// https://github.com/web-platform-tests/wpt/issues/43574
name: "CSSTransitionShorterSerialization",
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",
},
// Support for `user-select:contain`.
{
name: "CSSUserSelectContain",
status: "test",
},
{
name: "CSSVideoDynamicRangeMediaQueries",
status: "experimental",
},
{
// https://chromestatus.com/feature/5064894363992064
name: "CSSViewTransitionClass",
status: "stable"
},
{
name: "CursorAnchorInfoMojoPipe",
// No status as this will be controlled by the matching Chromium feature.
},
{
// https://html.spec.whatwg.org/#dom-customelementregistry-getname
name: "CustomElementsGetName",
status: "stable",
},
{
name: "Database",
public: true,
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "WebSQL",
origin_trial_allows_third_party: true,
origin_trial_type: "deprecation",
},
// This allows pages to opt out of the unload deprecation. Enabling this
// allows unload event handers to be used in the frame regardless of any
// Permissions-Policy setting.
// https://crbug.com/1432116
{
name: "DeprecateUnloadOptOut",
origin_trial_feature_name: "DeprecateUnloadOptOut",
origin_trial_type: "deprecation",
origin_trial_allows_third_party: true,
origin_trial_allows_insecure: true,
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
},
{
name: "DesktopPWAsAdditionalWindowingControls",
status: "test",
},
{
name: "DesktopPWAsSubApps",
status: "test",
},
{
name: "DetailsStyling",
status: "experimental",
},
{
name: "DeviceAttributes",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental",
},
},
{
name: "DeviceOrientationRequestPermission",
status: "experimental",
},
{
name: "DevicePosture",
public: true,
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "FoldableAPIs",
},
{
// This feature makes the <dialog> element close properly when its "open"
// attribute is removed. https://github.com/whatwg/html/issues/5802
name: "DialogCloseWhenOpenRemoved",
status: "experimental",
},
{
name: "DialogNewFocusBehavior",
status: "experimental",
depends_on: ["NewGetFocusableAreaBehavior"],
},
{
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"
},
},
{
// Shipping in M130. Flag should be removed after M130 has been
// shipping to stable for a few weeks.
name: "DirAutoFixSlotExclusions",
status: "stable",
},
{
name: "DirectSockets",
public: true,
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
// Disables anti-aliasing for the Ahem font. Anti-aliasing this font breaks a
// significant amount of WPT test expectations.
name: "DisableAhemAntialias",
},
{
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: "DisableReduceAcceptLanguage",
origin_trial_feature_name: "DisableReduceAcceptLanguage",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
base_feature: "none",
},
{
name: "DisableSelectAllForEmptyText",
status: "stable",
},
// This feature will represent the extension of a deprecation trial that
// allows first parties to temporarily use unpartitioned storage in embeds
// loaded on their site. It replaces an old DT named
// DisableThirdPartyStoragePartitioning which expired in M126.
{
name: "DisableThirdPartyStoragePartitioning2",
origin_trial_feature_name: "DisableThirdPartyStoragePartitioning2",
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,
},
{
// Dispatch beforeinput event for number input according to the spec:
// https://w3c.github.io/uievents/#event-type-beforeinput
//
// This is landing in M127, and can be removed in M129.
//
// When disabled, beforeinput event will not be fired when spin button
// interactions like ArrowUp, ArrowDown and mouse click on spin button
// are made on number input.
name: "DispatchBeforeInputForSpinButtonInteractions",
status: "stable",
},
{
// `kHidden` and `kHiddenButPainting` visibility states are treated as
// hidden in the sense of `document.visibilityState`. However, they are
// handled differently internally. For example, video playback should
// continue in `kHiddenButPainting`, such as when the page is being
// background captured. When enabled, this feature causes blink to
// notify internal observers about visibility changes between the two
// hidden states, in addition to transitions to/from `kVisible`.
//
// Since the two hidden states are exposed to the web identically, there
// is no `visibilitychanged` event fired when switching between them.
//
// When this feature is disabled, blink reverts to its original behavior
// of eliding transitions between the two hidden states, including to
// internal observers. This behavior causes problems with capture and
// picture-in-picture, but is preserved as a safe fallback.
name: "DispatchHiddenVisibilityTransitions",
status: "stable",
base_feature: "DispatchHiddenVisibilityTransitions",
},
{
// Dispatch selectionchange event per element according to the new spec:
// https://w3c.github.io/selection-api/#selectionchange-event
name: "DispatchSelectionchangeEventPerElement",
status: "stable",
},
{
// Allowing elements with display:contents to have focus.
// See https://crbug.com/1366037
name: "DisplayContentsFocusable",
status: "experimental",
},
{
name: "DisplayCutoutAPI",
base_feature: "none",
public: true,
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
// This is a performance fix for <select> popups which was enabled by
// default in M128.
name: "DocumentInstallChunking",
status: "stable",
},
{
name: "DocumentOpenOriginAliasRemoval",
status: "experimental",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentOpenSandboxInheritanceRemoval",
status: "stable",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentPictureInPictureAPI",
status: {
"Android": "",
"default": "stable",
},
},
// Enables `preferInitialWindowPlacement` Document PiP option to skip
// re-using the previous pip window bounds.
{
name: "DocumentPictureInPicturePreferInitialPlacement",
status: {
"Android": "",
"default": "experimental",
},
},
// Enables propagating user activation from a document picture-in-picture
// window up to its opener window and vice versa.
{
name: "DocumentPictureInPictureUserActivation",
status: {
"Android": "",
"default": "stable",
},
},
// Enables the ability to use Document Policy header to control feature
// DocumentDomain.
{
name: "DocumentPolicyDocumentDomain",
status: "experimental",
},
// Enables the ability to use Document Policy header to control feature
// IncludeJSCallStacksInCrashReports. https://chromestatus.com/feature/4731248572628992
{
name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
origin_trial_feature_name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "DocumentPolicyNegotiation",
origin_trial_feature_name: "DocumentPolicyNegotiation",
public: true,
status: "experimental",
base_feature: "none",
},
// Enables the ability to use Document Policy header to control feature
// SyncXHR.
{
name: "DocumentPolicySyncXHR",
status: "experimental",
},
{
// https://chromestatus.com/feature/5113053598711808
name: "DocumentRenderBlocking",
status: "stable",
},
{
name: "DocumentWrite",
},
// Controls whether DOMParser.parseFromString() attempts to use the
// html fast path parser. This flag is to be used as a killswitch in case
// of any issues.
{
name: "DOMParserUsesHTMLFastPathParser",
status: "stable"
},
{
name: "DOMPartsAPI",
status: "experimental",
implied_by: ["DOMPartsAPIMinimal"],
},
{
name: "DOMPartsAPIMinimal",
},
{
// Drop the entire URL as plaintext in plaintext only editable position.
// Fix for https://crbug.com/40895258. This change is landing in M127 and
// the flag can be removed in M129 in case of no issues.
name: "DropUrlAsPlainTextInPlainTextOnlyEditablePosition",
status: "stable"
},
// Dynamically change the safe area insets based on the bottom browser
// controls visibility.
{
name: "DynamicSafeAreaInsets",
},
// Dynamically change the safe area insets as browser controls scrolls.
{
name: "DynamicSafeAreaInsetsOnScroll",
depends_on: ["DynamicSafeAreaInsets"]
},
{
name: "DynamicScrollCullRectExpansion",
status: "stable",
},
{
name: "ElementCapture",
origin_trial_feature_name: "ElementCapture",
status: {"Android": "", "default": "experimental"},
},
{
// TODO(crbug.fom/41492947) This is the "old" version of getInnerHTML()
// used for declarative shadow DOM, and this version is deprecated and
// currently being removed via Finch. The removal rollout plan is:
// 1. (July 29) Disable at 50% of Canary/Dev in M129.
// 2. (August 19) Disable at 50% of Canary/Dev/Beta, M129.
// 3. (September 16) Disable at 1% of Stable M129.
// 4. (September 23) Disable at 2% of Stable M129.
// 5. (September 30) Disable at 5% of Stable M129.
// 5.5. (September 30) Disable in code, M131, assuming no issues so far.
// 6. (October 7) Disable at 10% of Stable M129.
// 7. (October 14) Disable at 50% of Stable M129-M130 (Oct 15 stable release).
// 8. (October 21) Full disable via Finch, M129-130.
// In the meantime, replacement API is called `getHTML()` and that
// shipped in M125.
name: "ElementGetInnerHTML",
status: "stable",
},
{
name: "EnforceAnonymityExposure",
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: "EventTimingHandleKeyboardEventSimulatedClick",
status: "experimental",
},
{
name: "EventTimingInteractionCount",
status: "experimental",
},
{
// When the fling is active, a tap on the page can stop scroll. When
// calculating the input latency, we should exclude all the input events
// caused by this tap.
name: "EventTimingTapStopScrollNoInteractionId",
status: "experimental",
},
// Killswitch. Remove after 1-2 stable releases, and rename
// cc::ScrollNode::main_thread_scrolling_reasons to
// main_thread_repaint_reasons.
{
name: "ExcludePopupMainThreadScrollingReason",
status: "stable",
},
{
name: "ExcludeTransparentTextsFromBeingLcpEligible",
status: "experimental",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalJSProfilerMarkers",
status: "experimental",
},
{
name: "ExperimentalMachineLearningNeuralNetwork",
// Enabled by webnn::mojom::features::kExperimentalWebMachineLearningNeuralNetwork.
base_feature: "none",
},
{
name: "ExperimentalPolicies",
status: "experimental",
},
{
name: "ExposeRenderTimeNonTaoDelayedImage",
},
{
name: "ExtendedTextMetrics",
status: "experimental",
},
{
name: "EyeDropperAPI",
status: {
// EyeDropper UI is available on ChromeOS, Linux (x11), Mac, and Win.
// This list should match the supported operating systems for the
// kEyeDropper base::Feature.
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"Linux": "stable",
"Mac": "stable",
"Win": "stable",
},
// When running under experimental platform variants, such as
// Linux/Wayland, EyeDropper base::Feature defined in the browser
// process is used to disable it at runtime, if needed.
base_feature: "none",
public: true,
},
{
name: "FaceDetector",
status: "experimental",
},
{
name: "FastNonCompositedScrollHitTest",
depends_on: ["HitTestOpaqueness", "RasterInducingScroll"],
status: "stable",
},
// Kill switch.
{
name: "FastPathSingleSelectorExactMatch",
status: "stable",
},
{
name: "FastPositionIterator",
// Not enabled due to a RTL issue. crbug.com/1421016.
},
{
name: "FedCm",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmAuthz",
depends_on: ["FedCm"],
public: true,
browser_process_read_access: true,
status: "test",
base_feature: "none",
origin_trial_feature_name: "FedCmContinueOnBundle",
origin_trial_allows_third_party: true,
},
{
name: "FedCmAutoSelectedFlag",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmButtonMode",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
origin_trial_feature_name: "FedCmButtonMode",
origin_trial_allows_third_party: true,
},
{
name: "FedCmDisconnect",
depends_on: ["FedCm"],
base_feature: "none",
status: "stable",
public: true,
},
{
name: "FedCmDomainHint",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmError",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmIdPRegistration",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
name: "FedCmIdpSigninStatus",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
browser_process_read_access: true,
},
{
name: "FedCmMultipleIdentityProviders",
depends_on: ["FedCm"],
base_feature: "none",
public: true,
origin_trial_feature_name: "FedCmMultipleIdentityProviders",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
origin_trial_allows_third_party: true,
},
{
name: "FedCmSelectiveDisclosure",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FedCmWithStorageAccessAPI",
depends_on: ["FedCm"],
base_feature_status: "enabled",
browser_process_read_access: true,
origin_trial_feature_name: "FedCmWithStorageAccessAPI",
copied_from_base_feature_if: "overridden",
status: "experimental",
},
{
name: "FencedFrames",
base_feature: "none",
// This helps enable and expose the <fencedframe> element, but note that
// blink::features::kFencedFrames must be enabled as well, as we require
// the support of the browser process to fully enable the feature.
// Enabling this runtime enabled feature alone has no effect.
public: true,
status: "stable",
},
{
name: "FencedFramesAPIChanges",
// Various new IDL attributes on the <fencedframe> element (such as
// `config`, `sandbox`, and `allow`).
base_feature_status: "enabled",
copied_from_base_feature_if: "enabled_or_overridden",
status: "stable",
},
{
name: "FencedFramesDefaultMode",
base_feature_status: "disabled",
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
// Allows fenced frames to access unpartioned data via Shared Storage in
// exchange for disabling untrusted network access. This is the Blink
// counterpart of the base::Feature with the same name. Because local
// unpartitioned data access requires browser and renderer process
// coordination, the value of this flag is strictly controlled by the
// base::Feature variant, and setting this flag does nothing.
name: "FencedFramesLocalUnpartitionedDataAccess",
base_feature: "none",
public: true,
},
{
// The Blink runtime-enabled feature name for the API's IDL.
name: "FetchLaterAPI",
status: "experimental",
origin_trial_feature_name: "FetchLaterAPI",
origin_trial_allows_third_party: true,
base_feature: "FetchLaterAPI",
// base_feature is meant as kill-switch. This runtime-enabled feature
// should follow the Origin Trial unless explicitly overriden by Finch or
// commandline flags.
base_feature_status: "enabled",
// Enables the Blink feature only when the base::Feature is overridden by
// field trial or command line.
copied_from_base_feature_if: "overridden",
},
{
name: "FetchUploadStreaming",
status: "stable",
},
{
// Also enabled when blink::features::kFileHandlingAPI is overridden
// on the command line (or via chrome://flags).
name: "FileHandling",
depends_on: ["FileSystemAccessLocal"],
status: {"Android": "test", "default": "stable"},
base_feature: "FileHandlingAPI",
},
{
name: "FileHandlingIcons",
depends_on: ["FileHandling"],
status: {"Android": "test", "default": "experimental"},
base_feature: "none",
},
{
name: "FileSystem",
public: true,
status: "stable",
base_feature: "none",
},
{
// Shared objects by OPFS and non-OPFS File System Access API.
name: "FileSystemAccess",
implied_by: ["FileSystemAccessLocal", "FileSystemAccessOriginPrivate"],
},
{
// In-development features for the File System Access API.
name: "FileSystemAccessAPIExperimental",
status: "experimental",
},
{
// The FileSystemHandle.getCloudIdentifiers() method (see
// crbug.com/1443354).
name: "FileSystemAccessGetCloudIdentifiers",
status: {
"ChromeOS_Ash": "experimental",
"ChromeOS_Lacros": "experimental",
"default": "",
}
},
{
// Non-OPFS File System Access API.
name: "FileSystemAccessLocal",
status: {"Android": "test", "default": "stable"},
},
{
name: "FileSystemAccessLockingScheme",
status: "stable",
},
{
// OPFS File System Access API.
name: "FileSystemAccessOriginPrivate",
status: "stable",
},
{
// The FileSystemObserver interface for the File System Access API.
// See https://crbug.com/1019297.
name: "FileSystemObserver",
depends_on: ["FileSystemAccess"],
status: "experimental",
origin_trial_feature_name: "FileSystemObserver",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
},
{
// The unobserve function of the FileSystemObserver.
// See https://crbug.com/321980469.
name: "FileSystemObserverUnobserve",
status: "experimental",
},
{
name: "FindTextInReadonlyTextInput",
status: "experimental",
},
{
name: "Fledge",
status: "stable",
base_feature: "none",
public: true,
},
{
// Enables deal support within auctions.
name: "FledgeAuctionDealSupport",
},
{
name: "FledgeBiddingAndAuctionServerAPI",
origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
origin_trial_allows_third_party: true,
},
{
name: "FledgeCustomMaxAuctionAdComponents",
status: "stable",
},
{
// Enables using a 'deprecatedRenderURLReplacements' field within the
// Protected Audience ad auction config.
name: "FledgeDeprecatedRenderURLReplacements",
public: true,
status: "stable",
},
{
name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
status: "stable",
},
{
name: "FledgeFeatureDetectAll",
// FledgeFeatureDetectAll should be enabled by any feature-detectable
// experiment that enters trials after it got created; this makes it easy
// to polyfill by only checking older things, and makes it serve its
// purpose of modularly advertising new things.
implied_by: ["FledgePermitCrossOriginTrustedSignals",
"FledgeRealTimeReporting"],
base_feature: "none",
},
{
name: "FledgeFeatureDetection",
// FledgeFeatureDetection should be on if any of the features it aims
// to help detect is on.
implied_by: ["FledgeCustomMaxAuctionAdComponents",
"FledgeDeprecatedRenderURLReplacements",
"FledgePermitCrossOriginTrustedSignals",
"FledgeRealTimeReporting",
"FledgeReportingTimeout"],
base_feature: "none",
},
{
name: "FledgeMultiBid",
public: true,
status: "stable",
},
{
// Permit trusted signals to come cross-origin, subject to CORS on the
// trusted server side and opt-in on the worklet script side.
name: "FledgePermitCrossOriginTrustedSignals",
},
{
// Enables real time reporting API in Protected Audience.
// https://github.com/WICG/turtledove/blob/main/PA_real_time_monitoring.md
name: "FledgeRealTimeReporting",
public: true,
status: "test",
},
{
// Enables using a 'reportingTimeout' field within the Protected Audience
// ad auction config.
name: "FledgeReportingTimeout",
status: "stable",
},
{
name: "FledgeTrustedSignalsKVv2Support",
status: "test",
},
{
name: "FluentOverlayScrollbars",
// The associated base feature is defined in
// ui/native_theme/native_theme_features.cc.
base_feature: "none",
},
{
name: "FluentScrollbars",
// The associated base feature is defined in
// ui/native_theme/native_theme_features.cc.
base_feature: "none",
},
{
name: "FluentScrollbarUsesNinePatchTrack",
status: "stable",
},
{
name: "Focusgroup",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "Focusgroup",
},
{
name: "FontAccess",
status: {"Android": "", "default": "stable"},
},
{
name: "FontationsFontBackend",
},
{
name: "FontationsForSelectedFormats",
status: "stable",
},
{
name: "FontFamilyPostscriptMatchingCTMigration",
},
{
name: "FontFamilyStyleMatchingCTMigration",
},
{
name: "FontMatchingCTMigration",
status: "stable",
},
{
name: "FontPaletteAnimation",
status: "stable",
},
{
name: "FontPresentWin",
status: "stable",
},
{
name: "FontSrcLocalMatching",
base_feature: "none",
// No status, as the web platform runtime enabled feature is controlled by
// a Chromium level feature.
},
{
name: "FontSystemFallbackNotoCjk",
status: "stable",
},
{
name: "FontVariantEmoji",
status: "test",
},
{
name: "FontVariationSequences",
status: "experimental",
},
{
// 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",
},
{
// This is used in tests to perform memory measurement without
// waiting for GC.
name:"ForceEagerMeasureMemory",
},
{
// https://github.com/flackr/reduce-motion/blob/main/explainer.md
name: "ForceReduceMotion",
},
{
name: "ForceTallerSelectPopup",
status: {"ChromeOS_Ash": "stable", "ChromeOS_Lacros": "stable"},
},
{
// 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",
},
{
// TODO(crbug.com/1432009) Allow form controls with vertical writing mode
// to have direction affect the flow of the control.
name: "FormControlsVerticalWritingModeDirectionSupport",
status: "stable",
},
{
name: "FractionalScrollOffsets",
base_feature: "none",
public: true,
},
{
name: "FreezeFramesOnVisibility",
status: "experimental",
},
{
name: "GamepadButtonAxisEvents",
status: "experimental",
},
{
name: "GamepadMultitouch",
status: "experimental",
public: true,
},
{
name: "GetAllScreensMedia",
depends_on: ["GetDisplayMedia"],
origin_trial_feature_name: "GetAllScreensMedia",
origin_trial_os: ["chromeos"],
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",
},
{
name: "HandleDeletionWithNonEditableContentAtBlockBoundary",
status: "stable",
},
{
name: "HandleSelectionChangeOnDeletingEmptyElement",
status: "stable",
},
{
name: "HandwritingRecognition",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental",
},
},
{
// Updates the hanging behavior of preserved whitespace at the end of a
// line to not depend on text-align. This flag is to be used as a
// killswitch in case of any issues.
// https://github.com/w3c/csswg-drafts/issues/3440
// crbug.com/1363901
name: "HangingWhitespaceDoesNotDependOnAlignment",
status: "stable",
},
{
name: "HasUAVisualTransition",
status: "stable",
},
{
name: "HighlightInheritance",
status: "experimental",
},
{
name: "HighlightPointerEvents",
},
{
name: "HitTestOpaqueness",
status: "stable",
},
{
name: "HrefTranslate",
depends_on: ["TranslateService"],
origin_trial_feature_name: "HrefTranslate",
status: "stable",
base_feature: "none",
},
// The `anchor` attribute, supported by both anchor positioning and the
// popover API.
{
name: "HTMLAnchorAttribute",
status: "experimental",
},
// Adds support for the experimental `interesttarget`
// attributes, as specified in the open-ui "Interest Invokers" explainer.
// https://open-ui.org/components/interest-invokers.explainer/
{
name: "HTMLInterestTargetAttribute",
status: "experimental",
},
// Additional default invoke actions that aren't part of v1 of invokers.
// When this flag is disabled only v1 actions (popover and dialog defaults) will work.
{
name: "HTMLInvokeActionsV2",
status: "experimental",
},
// Adds support for the experimental `invoketarget` and `invokeaction`
// attributes, as specified in the open-ui "Invokers" explainer.
// https://open-ui.org/components/invokers.explainer/
{
name: "HTMLInvokeTargetAttribute",
status: "experimental",
},
{
name: "HTMLMenuElementIsListOwner",
status: "stable",
},
{
// A flag, just for local testing to make the
// HTML parser yield more often and take longer to resume.
// This helps when debugging flaky tests caused by parser
// yielding heuristics.
name: "HTMLParserYieldAndDelayOftenForTesting",
},
{
// A flag to control the popovertargetaction=hover behavior,
// and associated CSS properties.
name: "HTMLPopoverActionHover",
status: "test",
},
{
// TODO(crbug.com/1416284): Enables popover=hint functionality.
name: "HTMLPopoverHint",
status: "experimental",
},
{
name: "HTMLSelectElementShowPicker",
status: "stable",
},
{
name: "HTMLSelectListElement",
status: "experimental",
},
{
// http://crbug.com/1478969
// https://github.com/whatwg/html/pull/9538
// https://chromestatus.com/feature/6560361081995264
// Enabled by default in M123, should be safe to remove in M127
name: "HTMLUnsafeMethods",
status: "stable",
},
{
// According to spec, text transforms should not affect the content
// of plain text copy and paste -
// https://www.w3.org/TR/css-text-3/#text-transform
name: "IgnoresCSSTextTransformsForPlainTextCopy",
status: "stable",
},
{
name: "ImplicitRootScroller",
public: true,
settable_from_internals: true,
status: {"Android": "stable"},
base_feature: "none",
},
// This change, although technically breaking, is expected to be fully web-compatible
// due to how import attributes are currently used in the ecosystem. However, this is
// a killswitch just in case. This can be removed once it ships to stable and no
// regressions are reported.
{
name: "ImportAttributesDisallowUnknownKeys",
status: "stable"
},
{
name: "ImportMapIntegrity",
status: "stable"
},
{
name: "IncomingCallNotifications",
},
{
// When enabled, every traversable mainframe same-doc navigation will
// increment the `viz::LocalSurfaceId` from the impl thread.
name: "IncrementLocalSurfaceIdForMainframeSameDocNavigation",
status: {"Android": "stable"},
},
{
name: "InertElementNonEditable",
status: "stable",
},
{
name: "InertElementNonSearchable",
status: "stable",
},
{
// If a painting bug no longer reproduces with this feature enabled, then
// the bug is caused by incorrect cull rects.
name: "InfiniteCullRect",
},
{
name: "InheritUserModifyWithoutContenteditable",
status: "stable",
},
{
name: "InlineBlockInSameLine",
status: "stable",
},
{
// crbug.com/343749045
name: "InlineCursorMultiColFix",
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 and
// iOS.
status: {"Android": "test", "iOS": "test", "default": "stable"},
},
{
// If enabled, the input stepDown(n) and stepUp(n) methods will check
// that the current value is valid before applying step 10 of their
// specified algorithms.
// This flag can be removed in M128 assuming no issues.
name: "InputStepCurrentValueValidation",
status: "stable",
},
{
name: "InputTypeSupportInsertLink",
status: "stable",
},
// Insert a blockquote before a outer block after creating the blockquote
// when indenting a node whose outer block is a blockquote. See
// https://crbug.com/327665597
{
name: "InsertBlockquoteBeforeOuterBlock",
status: "stable",
},
{
// crbug.com/1420675
name: "InsertLineBreakIfPhrasingContent",
status: {"Android": "test", "default": "stable"},
},
{
name: "InstalledApp",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "InstallOnDeviceSpeechRecognition",
},
{
name: "InteroperablePrivateAttribution",
status: "experimental",
},
{
// If enabled, IntersectionObserverScrollMargin will be parsed.
name: "IntersectionObserverScrollMargin",
status: "stable",
},
{
name: "IntersectionOptimization",
status: "stable",
},
{
name: "InvertedColors",
status: "experimental",
},
{
name: "InvisibleSVGAnimationThrottling",
status: "stable",
},
{
name: "JavaScriptCompileHintsMagicRuntime",
status: "experimental",
origin_trial_feature_name: "JavaScriptCompileHintsMagic",
},
{
// Fix to crbug.com/40934455.
// Should be removed a bit after M129 reaches stable.
name: "KeepActiveIfLabelActive",
status: "stable",
},
{
// Allows :target to match elements even after they are removed and
// reattached to the document. Enabled in M128, should be safe to remove
// in M133.
name: "KeepCSSTargetAfterReattach",
status: "stable",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
base_feature: "none",
},
{
// TODO(crbug.com/40113891): This feature allows scrollers to be
// keyboard focusable by default.
name: "KeyboardFocusableScrollers",
status: "experimental",
public: true,
},
{
// TODO(crbug.com/40113891): Disables KeyboardFocusableScrollers.
// This feature only takes effect if KeyboardFocusableScrollers is
// enabled. It will overwrite the behavior and not allow scrollers to be
// keyboard focusable by default.
name: "KeyboardFocusableScrollersOptOut",
origin_trial_feature_name: "KeyboardFocusableScrollersOptOut",
// This is not a feature that is being deprecated, but the origin trial
// *is* being used to allow sites to opt back out of the feature launch.
// So we're marking it as a "deprecation" trial.
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
},
{
// This is a killswitch for a bug fix that is shipping in M128.
name: "LabelAndDelegatesFocusNewHandling",
status: "stable",
},
{
// This feature makes HTMLLabelElement::DefaultEventHandler always call
// HTMLElement::DefaultEventHandler instead of only doing so
// conditionally. Shipping in M123 so should be safe to remove in M127.
name: "LabelEventHandlerCallSuper",
status: "stable",
},
{
name: "LangAttributeAwareFormControlUI",
settable_from_internals: true,
},
{
name: "LanguageDetectionAPI",
status: "experimental",
},
{
name: "LayoutFlexNewRowAlgorithmV3",
status: "test",
},
{
name: "LayoutIgnoreMarginsForSticky",
},
{
name: "LayoutJustifySelfForBlocks",
status: "test",
},
{
name: "LayoutNGShapeCache",
status: "test",
base_feature: "LayoutNGShapeCache",
},
{
name: "LazyInitializeMediaControls",
base_feature: "none",
public: true,
// This is enabled by features::kLazyInitializeMediaControls.
},
{
// If enabled, the lazy load image observer will use a scroll margin in
// its init dictionary instead of a root margin.
name: "LazyLoadScrollMargin",
public: true,
status: "stable",
},
{
// If enabled, the lazy load iframe observer will use a scroll margin in
// its init dictionary instead of a root margin.
name: "LazyLoadScrollMarginIframe",
public: true,
status: "stable",
},
{
name: "LCPAnimatedImagesWebExposed",
status: "test",
},
{
name: "LegacyWindowsDWriteFontFallback",
// Enabled by features::kLegacyWindowsDWriteFontFallback;
base_feature: "none",
},
{
name: "LimitThirdPartyCookies",
origin_trial_feature_name: "LimitThirdPartyCookies",
status: "experimental",
base_feature: "none",
},
{
name: "LockedMode",
status: "test",
// Enabled by features::kLockedMode.
public: true,
},
{
// Enables long aniamtion frames as a performance API (the
// "long-animation-frame" timeline entry)
name: "LongAnimationFrameTiming",
status: "stable"
},
{
// Long press on a link selects the link text instead of bringing up
// context menu. Enabled only on Android AuthView.
name: "LongPressLinkSelectText",
},
{
// Use LongAnimationFrameMonitor to emit longtask entries
name: "LongTaskFromLongAnimationFrame",
status: "test",
},
{
name: "MacFontsDeprecateFontTraitsWorkaround",
status: "stable",
},
{
name: "MachineLearningNeuralNetwork",
// Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork.
base_feature: "none",
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
name:"MeasureMemory",
status:"stable",
},
{
name: "MediaCapabilitiesDynamicRange",
status: "stable",
},
{
name: "MediaCapabilitiesEncodingInfo",
status: "experimental",
},
{
name: "MediaCapabilitiesSpatialAudio",
status: "test",
},
{
name: "MediaCapture",
status: {"Android": "stable"},
},
{
name: "MediaCaptureBackgroundBlur",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureCameraControls"],
base_feature: "none",
},
{
name: "MediaCaptureCameraControls",
status: "experimental",
},
{
name: "MediaCaptureConfigurationChange",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureBackgroundBlur"],
base_feature: "none",
},
{
name: "MediaCaptureVoiceIsolation",
status: "experimental",
},
// 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",
},
// Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
{
name: "MediaEngagementBypassAutoplayPolicies",
base_feature: "none",
public: true,
},
{
name: "MediaLatencyHint",
status: "test",
},
{
name: "MediaPlaybackWhileNotVisiblePermissionPolicy",
status: "test",
},
{
name: "MediaPreviewsOptOut",
base_feature: "none",
origin_trial_feature_name: "MediaPreviewsOptOutPersistent",
origin_trial_allows_third_party: true,
},
{
name: "MediaQueryNavigationControls",
},
{
// This uses media::VideoEncoder implementation in MediaRecorder API
// instead of using MediaRecorder own video encoder implementation.
name: "MediaRecorderUseMediaVideoEncoder",
},
{
name: "MediaSession",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "MediaSessionChapterInformation",
status: "stable",
},
{
name: "MediaSessionEnterPictureInPicture",
public: true,
status: "stable",
},
{
name: "MediaSourceExperimental",
status: "experimental",
},
{
name: "MediaSourceExtensionsForWebCodecs",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
},
{
name: "MediaSourceNewAbortAndDuration",
status: "experimental",
},
{
name: "MediaStreamTrackTransfer",
status: "test",
base_feature: "none",
},
{
name: "MediaStreamTrackWebSpeech",
},
{
name: "MessagePortCloseEvent",
status: "test",
},
// This is a killswitch for <meta http-equiv="refresh"> no
// longer accepting fractions, landed around M125.
// It can be removed in M127 if there are no problems.
{
name: "MetaRefreshNoFractional",
status: "stable",
},
{
// If enabled, meter elements will render with a fallback style when
// appearance is set to none.
name: "MeterAppearanceNoneFallbackStyle",
status: "stable",
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
},
// Killswitch. Remove after 1 or 2 stable releases.
{
name: "MinimimalResourceRequestPrepBeforeCacheLookup",
status: "stable",
},
{
name: "MobileLayoutTheme",
},
{
name: "ModifyParagraphCrossEditingoundary",
status: "stable",
},
{
name: "MojoJS",
status: "test",
is_protected_feature: true,
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
base_feature: "none",
is_protected_feature: true,
},
// crbug.com/269917: Make mouse event targets agnostic to mousedown event
// cancellation when the pointer is dragged out of an iframe.
{
name: "MouseDragFromIframeOnCancelledMouseDown",
status: "stable",
},
// crbug.com/40078978: Allow mouse-drag text selection even when mousemove
// event is cancelled.
{
name: "MouseDragOnCancelledMouseMove",
status: "stable",
},
// Move the selection to the last position in the list item. See
// https://crbug.com/331841851
{
name: "MoveEndingSelectionToListChild",
status: "stable",
},
{
name: "MoveToParagraphStartOrEndSkipsNonEditable",
status: "stable",
},
{
name: "MultiSelectDeselectWhenOnlyOption",
status: "test",
},
{
// https://chromestatus.com/feature/6270155647352832
name: "MultiSmoothScrollIntoView",
status: "stable",
},
// crbug.com/1446498: This feature is being used for the deprecation of
// Mutation Events.
{
name: "MutationEvents",
origin_trial_feature_name: "MutationEvents",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
public: true,
},
// crbug.com/1446498: This feature is just used as part of an "early trial"
// of disabling Mutation Events in Canary/Dev/Beta. If this feature is
// enabled *and* MutationEvents is disabled, then a special console error
// message is used to give more information.
{
name: "MutationEventsSpecialTrialMessage",
},
{
name: "NavigateEventCommitBehavior",
status: "experimental",
},
{
name: "NavigateEventSourceElement",
status: "experimental",
},
{
name: "NavigationActivation",
status: "stable",
},
{
name: "NavigationId",
status: "experimental",
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
name: "NavigatorContentUtils",
// Android does not yet support NavigatorContentUtils.
status: {"Android": "", "default": "stable"},
},
{
name: "NestedViewTransition",
status: "experimental",
},
{
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",
},
{
// This is a killswitch for the behavior of Element::GetFocusableArea
// on delegatesFocus shadow hosts. This flag can be removed in M127 if
// things are stable.
name: "NewGetFocusableAreaBehavior",
status: "stable",
},
{
name: "NoIdleEncodingForWebTests",
status: "test",
},
// Doesn't increase the end offset on getting the range for a new line
// character. See https://crbug.com/326888905
{
name: "NoIncreasingEndOffsetOnSplittingTextNodes",
status: "stable",
},
// Makes enter/leave Mouse and Pointer Events non-composed as per
// corresponding specifications.
{
name: "NonComposedEnterLeaveEvents",
public: true,
status: "stable",
},
// Doesn't insert empty blockquotes on outdenting a blockquote. See
// https://crbug.com/323960902
{
name: "NonEmptyBlockquotesOnOutdenting",
status: "stable",
},
{
// Input event data for textarea should not be null for certain
// inputTypes.
// https://issues.chromium.org/issues/40737336
name: "NonNullInputEventDataForTextArea",
status: "stable"
},
{
// TODO(crbug.com/1426629): This feature enables the deprecated value
// slider-vertical. Disable this feature to stop parsing or allowing these
// values.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "NonStandardAppearanceValueSliderVertical",
status: "stable",
},
{
name: "NotificationConstructor",
// Android won't be able to reliably support non-persistent notifications, the
// intended behavior for which is in flux by itself.
status: {"Android": "", "default": "stable"},
},
// NotificationContentImage is not available in all platforms
// The Notification Center on Mac OS X does not support content images.
{
name: "NotificationContentImage",
public: true,
status: {"Mac": "test", "default": "stable"},
base_feature: "none",
},
{
name: "Notifications",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "NotificationTriggers",
origin_trial_feature_name: "NotificationTriggers",
status: "experimental",
base_feature: "none",
},
{
name: "ObservableAPI",
status: "experimental",
public: true,
},
{
name: "OffMainThreadCSSPaint",
status: "stable",
},
{
name: "OffscreenCanvasCommit",
status: "experimental",
},
{
name: "OmitBlurEventOnElementRemoval",
status: "test"
},
{
name: "OnDeviceChange",
// Android does not yet support SystemMonitor.
status: {"Android": "", "default": "stable"},
},
{
name: "OnDeviceWebSpeechAvailable",
},
{
name: "OrientationEvent",
status: {"Android": "stable"},
},
{
name: "OriginIsolationHeader",
status: "stable",
base_feature: "none",
},
{
name: "OriginPolicy",
status: "experimental",
},
// Define a sample API for testing integration with the Origin Trials
// Framework. The sample API is used in both unit and web tests for the
// Origin Trials Framework. Do not change this flag to stable, as it exists
// solely to generate code used by the sample API implementation.
{
name: "OriginTrialsSampleAPI",
base_feature: "none",
origin_trial_feature_name: "Frobulate",
},
// 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: "OverscrollCustomization",
status: "experimental",
},
// The following are developer opt-outs and opt-ins for page freezing. If
// neither is specified then heuristics will be applied to determine whether
// the page is eligible.
{
name: "PageFreezeOptIn",
base_feature: "none",
origin_trial_feature_name: "PageFreezeOptIn",
},
{
name: "PageFreezeOptOut",
base_feature: "none",
origin_trial_feature_name: "PageFreezeOptOut",
},
// Support for page margin boxes.
// https://www.w3.org/TR/css-page-3/#margin-boxes
{
name: "PageMarginBoxes",
status: "experimental",
},
{
name: "PagePopup",
// Android does not have support for PagePopup
status: {"Android": "", "iOS": "", "default": "stable"},
},
{
name: "PageRevealEvent",
status: "stable",
},
{
name: "PageSwapEvent",
status: "stable",
},
{
name: "PaintHighlightsForFirstLetter",
status: "stable",
},
{
name: "PaintHoldingForIframes",
status: "stable",
},
{
name: "PaintHoldingForLocalIframes",
status: "stable",
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
// PARAKEET ad serving runtime flag/JS API.
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
{
name: "PartitionedPopins",
status: "experimental",
},
// This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
{
name: "PasswordReveal",
},
{
name: "PasswordStrongLabel",
status: "experimental",
},
{
name: "PaymentApp",
depends_on: ["PaymentRequest"],
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PaymentInstruments",
depends_on: ["PaymentApp"],
},
{
// https://chromestatus.com/feature/5198846820352000
name: "PaymentLinkDetection",
status: "experimental",
},
{
name: "PaymentMethodChangeEvent",
depends_on: ["PaymentRequest"],
status: "stable",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
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,
},
{
// Enables performance.mark('mark_feature_usage'): crbug.com/1517170
name: "PerformanceMarkFeatureUsage",
status: "experimental"
},
{
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",
},
{
// Tracking bug for the implementation: https://crbug.com/1462930
name: "PermissionElement",
origin_trial_feature_name: "PermissionElement",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
status: "experimental",
public: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "Permissions",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PermissionsRequestRevoke",
status: "experimental",
},
// 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: "PointerCaptureLostOnRemovalDuringCapture",
status: "stable",
},
{
name: "PointerEventDeviceId",
status: "stable",
},
// Coalesced/predicted event targets in untrusted events.
// See https://crbug.com/353538500
{
name: "PointerEventTargetsInEventLists",
status: "experimental",
},
// This is a killswitch for the behavior of <dialog popover autofocus>,
// which landed in M130 and can be removed in M132.
{
name: "PopoverDialogNewFocusBehavior",
status: "stable",
},
{
name: "PositionOutsideTabSpanCheckSiblingNode",
status: "stable",
},
{
name: "PreciseMemoryInfo",
base_feature: "none",
public: true,
},
// Adds a web setting to disable CSS ScrollbarColor, ScrollbarWidth, and
// legacy ::-webkit-scrollbar* pseudo element styling.
{
name: "PreferDefaultScrollbarStyles",
},
// Prefer not using composited scrolling. Composited scrolling will still
// be used if there are other reasons forcing compositing. For consistency,
// any code calling Settings::GetPreferCompositingToLCDTextEnabled() should
// ensure that this flag overrides the setting.
{
name: "PreferNonCompositedScrolling",
settable_from_internals: true,
},
{
name: "PrefersReducedData",
status: "experimental",
},
// This feature is deprecated and we are evangelizing affected sites.
// A deprecation trial is underway, starting in M125.
// See https://crbug.com/40352864 for current status
{
name: "PrefixedVideoFullscreen",
status: "test",
origin_trial_feature_name: "DeprecatePrefixedVideoFullscreen",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
},
{
// 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",
},
{
// Used to allow chrome://flags to turn off prerendering. (Without using
// the user-facing preloading settings page to turn off other
// preloading.) See https://crbug.com/1494471.
//
// It also has some feature params defined throughout the codebase.
name: "Prerender2",
status: "stable",
},
{
name: "Presentation",
public: true,
status: "stable",
base_feature: "none",
},
{
// When enabled, styling for the content within heading will be
// preserved after merge.
name: "PreserveFollowingBlockStylesDuringBlockMerge",
status: "stable",
},
{
// When enabled, prevents undo to be applied if the enclosing block
// is not editable
name: "PreventUndoIfNotEditable",
status: "stable"
},
{
// Controls whether filtering IDs can be specified for Private Aggregation
// contributions. If disabled, any IDs will be ignored.
name: "PrivateAggregationApiFilteringIds",
status: "stable",
},
{
name: "PrivateAggregationAuctionReportBuyerDebugModeConfig",
status: "stable",
},
{
name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_feature_name: "PrivateNetworkAccessNonSecureContextsAllowed",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
base_feature: "none",
},
{
name: "PrivateNetworkAccessNullIpAddress",
status: "experimental",
base_feature: "none",
},
{
name: "PrivateNetworkAccessPermissionPrompt",
origin_trial_feature_name: "PrivateNetworkAccessPermissionPrompt",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
status: "stable",
public: true,
base_feature: "none",
},
{
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",
},
// Protected memory varariant of the sample API for testing integration with
// the Origin Trials Framework. This is used only in unit tests.
// Do not change this flag to stable, as it exists
// solely to generate code used by the sample API implementation.
{
name: "ProtectedOriginTrialsSampleAPI",
base_feature: "none",
origin_trial_feature_name: "Frobulate",
is_protected_feature: "true",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
// TODO(yashard): Add tests for this feature.
{
name: "ProtectedOriginTrialsSampleAPIDependent",
depends_on: ["ProtectedOriginTrialsSampleAPI"],
base_feature: "none",
is_protected_feature: "true",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "ProtectedOriginTrialsSampleAPIImplied",
base_feature: "none",
origin_trial_feature_name: "FrobulateImplied",
implied_by: ["ProtectedOriginTrialsSampleAPI"],
is_protected_feature: "true",
},
{
// Allowing pseudo elements to have focus.
name: "PseudoElementsFocusable",
status: "experimental",
},
{
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",
},
{
name: "RasterInducingScroll",
status: "test",
},
{
name: "ReadableStreamAsyncIterable",
status: "stable",
},
// If enabled, the Accept-Language header will be reduced.
{
name: "ReduceAcceptLanguage",
base_feature: "none",
origin_trial_feature_name: "ReduceAcceptLanguage"
},
{
name: "ReduceCookieIPCs",
status: "stable",
},
{
// 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"},
},
{
name: "RelOpenerBcgDependencyHint",
},
{
name: "RemotePlayback",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "RemotePlaybackBackend",
settable_from_internals: true,
status: {
"Android": "stable",
"Win": "stable",
"Mac": "stable",
"Linux": "stable",
"default": "experimental"},
},
{
// See https://issues.chromium.org/40805258
name: "RemoveCollapsedPlaceholder",
status: "stable",
},
{
name: "RemoveDanglingMarkupInTarget",
status: "stable",
},
{
name: "RemoveDataUrlInSvgUse",
status: "stable",
},
{
name: "RemoveMobileViewportDoubleTap",
public: true,
status: "stable",
base_feature: "none",
},
// Remove a node if it's selected fully even though it has children. See
// https://crbug.com/331074432
{
name: "RemoveNodeHavingChildrenIfFullySelected",
status: "stable",
},
{
// See https://issues.chromium.org/issues/41311101
name: "RemoveVisibleSelectionInDOMSelection",
status: "test",
},
{
// See https://github.com/whatwg/html/issues/10034
name: "RenderBlockingInlineModuleScript",
status: "stable",
},
{
name: "RenderBlockingStatus",
status: "stable",
},
{
// The renderpriority attribute feature.
// https://github.com/WICG/display-locking/blob/main/explainers/update-rendering.md
name: "RenderPriorityAttribute",
},
{
name: "ReportEventTimingAtVisibilityChange",
status: "experimental",
},
{
// TODO(crbug.com/1500633): Remove this flag when the new CursorAnchorInfo
// mojo pipe is launched.
name: "ReportVisibleLineBounds",
status: {
"Android": "stable",
"default": "",
}
},
{
name: "ResourceTimingContentType",
status: "experimental",
},
{
name: "ResourceTimingUseCORSForBodySizes",
status: "test",
},
{
name: "RestrictGamepadAccess",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "ReuseShapeResultsByFonts",
status: "stable",
},
{
// New behavior when line breaker rewinds floats. crbug.com/1499290
name: "RewindFloats",
status: "stable",
},
{
name: "RtcAudioJitterBufferMaxPackets",
origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
status: "experimental",
base_feature: "none",
},
{
name: "RTCDataChannelPriority",
status: "experimental",
},
{
name: "RTCEncodedAudioFrameAbsCaptureTime",
status: "experimental",
},
{
name: "RTCEncodedFrameSetMetadata",
status: "experimental",
origin_trial_feature_name: "RTCEncodedFrameSetMetadata",
},
{
name: "RTCEncodedVideoFrameAdditionalMetadata",
status: "experimental",
},
// Enables the use of jitterBufferTarget attribute in WebRTC.
// Spec: https://w3c.github.io/webrtc-extensions/#dom-rtcrtpreceiver-jitterbuffertarget
{
name: "RTCJitterBufferTarget",
status: "stable",
},
// Legacy callback-based getStats() has limited availability unless this
// Deprecation Trial is enabled.
// TODO(https://crbug.com/822696): Remove when origin trial ends.
{
name: "RTCLegacyCallbackBasedGetStats",
origin_trial_feature_name: "RTCLegacyCallbackBasedGetStats",
status: "experimental",
base_feature: "none",
},
// Enables the use of |RTCRtpEncodingParameters.codec|
{
name: "RTCRtpEncodingParametersCodec",
status: "stable",
},
// Enables the use of |RTCRtpTransceiver::getHeaderExtensionsToNegotiate|,
// |RTCRtpTransceiver::setHeaderExtensionsToNegotiate|, and
// |RTCRtpTransceiver::getNegotiatedHeaderExtensions|.
{
name: "RTCRtpHeaderExtensionControl",
status: "stable",
},
{
name: "RTCRtpScriptTransform",
status: "experimental",
},
{
name: "RTCRtpTransport",
status: "test",
},
{
name: "RTCStatsRelativePacketArrivalDelay",
origin_trial_feature_name: "RTCStatsRelativePacketArrivalDelay",
status: "experimental",
base_feature: "none",
},
// Enables the use of SVC scalability mode in WebRTC.
// Spec: https://w3c.github.io/webrtc-svc/
{
name: "RTCSvcScalabilityMode",
status: "stable",
},
{
// crbug.com/324111880
name: "RubyLineBreakable",
status: "stable",
},
{
// crbug.com/340041662
name: "RubyLineEdgeAlignment",
status: "stable",
depends_on: ["RubyLineBreakable"],
},
{
// crbug.com/324111880
name: "RubyShortHeuristics",
status: "stable",
},
{
name: "SanitizerAPI",
status: "experimental",
},
{
name: "SchedulerYield",
status: "stable",
},
{
// https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
name: "ScopedCustomElementRegistry",
status: "experimental",
},
// WebSpeech API with both speech recognition and synthesis functionality
// is not fully enabled on all platforms.
{
name: "ScriptedSpeechRecognition",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "ScriptedSpeechSynthesis",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "ScrollbarColor",
status: "stable",
},
{
name: "ScrollbarWidth",
status: "stable",
},
{
name: "ScrollEndEvents",
status: "stable",
},
// TODO(355460994): Remove after M129.
// scroll into root frame didn't take scrollbar and borders into account,
// while this is fixed, to avoid any web compat issues we have this killswitch.
{
name: "ScrollIntoViewRootFrameViewportBugFix",
status: "stable",
},
// Killswitch. Remove after M126 or M127 stable.
{
name: "ScrollNodeForOverflowHidden",
status: "stable",
},
{
name: "ScrollTimeline",
status: "stable",
implied_by: ["AnimationWorklet", "ScrollTimelineCurrentTime"]
},
{
// 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.
//
// This flag can't be removed until the Android min SDK version is 28
// (i.e., 'P') or later. See AWSettings.setScrollTopLeftInteropEnabled
// and its caller.
{
name: "ScrollTopLeftInterop",
status: "stable",
},
{
name: "SearchTextHighlightPseudo",
status: "test",
},
// 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: "SecurePaymentConfirmationDebug",
base_feature: "none",
public: true,
},
{
name: "SecurePaymentConfirmationNetworkAndIssuerIcons",
status: "experimental",
},
{
name: "SecurePaymentConfirmationOptOut",
origin_trial_feature_name: "SecurePaymentConfirmationOptOut",
origin_trial_allows_third_party: true,
status: "stable",
base_feature: "none",
},
{
// Implement Selection API across shadow DOM
// See https://w3c.github.io/selection-api/
name: "SelectionAcrossShadowDOM",
status: "experimental",
},
{
// selection.isCollapsed should return false if anchor and focus nodes
// are different, including in shadow tree.
// https://crbug.com/40400558
name: "SelectionIsCollapsedShadowDOMSupport",
status: "experimental",
},
{
// Maintain author-defined ::selection highlight colors, even if they
// match the text color.
name: "SelectionRespectsColors",
status: "stable",
},
{
// Sets the minimum target size of <option> in <select> to 24x24 CSS
// pixels to meet Accessibility standards.
// https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
name: "SelectOptionAccessibilityTargetSize",
status: "stable",
},
{
// Makes the HTML parser allow most tags inside of <select> instead of
// only <option>, <optgroup>, and <hr>.
// https://github.com/whatwg/html/issues/10310
name: "SelectParserRelaxation",
status: "experimental",
},
{
// This flag is a performance optimization which reorganizes some code
// for handling <select>'s popup in order to avoid expensive calls to
// InternalPopupMenu::UpdateFromElement. Added in M130, should be safe to
// remove in M133.
name: "SelectPopupLessUpdates",
status: "stable",
},
{
// If enabled, the type to search in a select element will ignore accents.
// This should land in M128, and can be cleaned up (assuming no problems)
// after M130.
// https://crbug.com/349089079
name: "SelectTypeToSearchIgnoreAccents",
status: "stable",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "SensorExtraClasses",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "Serial",
status: {"Android": "", "default": "stable"},
},
{
name: "SerializeViewTransitionStateInSPA",
},
{
name: "SerialPortConnected",
status: {"Android": "", "default": "experimental"},
base_feature: "none",
},
{
name: "ServiceWorkerClientLifecycleState",
status: "experimental",
},
{
name: "ServiceWorkerStaticRouter",
base_feature: "none",
origin_trial_feature_name: "ServiceWorkerStaticRouter",
public: true,
},
{
name: "ServiceWorkerStaticRouterTimingInfo",
},
{
name: "SetSequentialFocusStartingPoint",
status: "experimental",
},
{
// Reference Target allows IDREF attributes to refer inside Shadow DOM.
// crbug.com/346835896
name: "ShadowRootReferenceTarget",
status: "test",
},
{
// crbug.com/360716751
name: "ShapeOutsideClippedImageFix",
status: "stable",
},
{
// crbug.com/359616076, crbug.com/360158400, and crbug.com/360903551.
name: "ShapeOutsideWritingModeFix",
status: "stable",
},
{
// crbug.com/329677645
name: "ShapeResultCachedPreviousSafeToBreakOffset",
status: "stable",
},
{
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",
public: true,
status: "stable",
},
{
name: "SharedStorageAPIM118",
base_feature: "none",
public: true,
},
{
name: "SharedStorageAPIM125",
base_feature: "none",
public: true,
},
{
name: "SharedWorker",
public: true,
// Android does not yet support SharedWorker. crbug.com/154571
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
// Makes select.showPicker() and input.showPicker() consume user
// activation in order to prevent abuse. Shipping in M127, should be safe
// to remove in M131.
name: "ShowPickerConsumeUserActivation",
status: "stable"
},
{
// crbug.com/40501131
name: "SidewaysWritingModes",
status: "experimental",
},
{
name: "SignatureBasedIntegrity",
origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental",
base_feature: "none",
},
{
name: "SiteInitiatedMirroring",
status: "experimental",
},
{
name: "SkipAd",
depends_on: ["MediaSession"],
status: "stable",
},
{
// If enabled, HTMLPreloadScanner will be skipped.
name: "SkipPreloadScanning",
origin_trial_feature_name: "SkipPreloadScanning",
base_feature: "SkipPreloadScanning",
},
{
// 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",
},
{
// Skips calling update type if the HTMLInputElement is created by parser.
// This flag can be removed in M127 if no issues reported.
name: "SkipUpdateTypeForHTMLInputElementCreatedByParser",
status: "stable",
},
{
name: "SmartCard",
status: {"Android": "", "default": "test"},
},
{
name: "SmartZoom",
depends_on: ["AccessibilityPageZoom"],
base_feature: "none",
public: true,
status: {"Android": "test"},
},
{
name: "SmilAutoSuspendOnLag",
status: "stable",
},
{
// Used to enable the code for detecting soft navigations through task
// attribution. Set to stable as this generates an enabled-by-default
// base::Feature for a field-trial remote shutoff. Needs to be a runtime
// feature so that the Soft Navigation Heuristics Origin Trial can depend
// on it.
name: "SoftNavigationDetection",
status: "stable",
},
{
name: "SoftNavigationHeuristics",
status: "experimental",
depends_on: ["NavigationId","SoftNavigationDetection"],
origin_trial_allows_third_party: true,
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
name: "SoftNavigationHeuristicsExposeFPAndFCP",
},
{
name: "SpeakerSelection",
status: "experimental",
},
{
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: "SpeculationRulesPrefetchWithSubresources",
},
{
name: "SrcsetMaxDensity",
},
// Used as argument in attribute of stable-release functions/interfaces
// where a runtime-enabled feature name is required for correct IDL syntax.
// This is a global flag; do not change its status.
{
name: "StableBlinkFeatures",
status: "stable",
base_feature: "none",
},
{
// See https://github.com/w3c/csswg-drafts/issues/9398
name: "StandardizedBrowserZoom",
status: "stable",
public: true,
},
{
name: "StandardizedBrowserZoomOptOut",
origin_trial_feature_name: "DisableStandardizedBrowserZoom",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
},
{
name: "StaticAnimationOptimization",
status: "experimental",
},
{
name: "StorageAccessHeader",
origin_trial_feature_name: "StorageAccessHeader",
status: "experimental"
},
{
name: "StorageBuckets",
status: "stable",
},
{
// Gates the `durability()` method on a storage bucket and the property in
// the options struct.
name: "StorageBucketsDurability",
status: "experimental",
},
{
// Gates the `locks()` method on a storage bucket.
name: "StorageBucketsLocks",
status: "experimental",
},
{
name: "StrictMimeTypesForWorkers",
status: "experimental",
},
{
// Adds the appearance:base-select CSS value which makes <select>
// rendering using alternate content in the UA shadowroot which is
// stylable.
name: "StylableSelect",
status: "experimental",
// :open is used in the UA stylesheet for StylableSelect, so this feature
// will not work properly without CSSPseudoOpenClosed.
// SelectParserRelaxation is needed to allow more content in <select>
// than just <option>s etc.
depends_on: ["CSSPseudoOpenClosed", "SelectParserRelaxation"],
},
{
name: "StylusHandwriting",
base_feature: "none",
},
{
name: "SvgContextPaint",
status: "stable",
},
{
name: "SvgCrossOriginAttribute",
status: "stable",
},
{
name: "SvgFilterUserSpaceViewportForNonSvg",
status: "stable",
},
{
name: "SvgGradientColorInterpolationLinearRgbSupport",
status: "stable",
},
{
name: "SvgNoPixelSnappingScaleAdjustment",
status: "stable",
},
{
// Feature for optimizing SVG transform changes. This is a kill switch in
// case we encounter issues with these optimizations.
name: "SvgTransformOptimization",
status: "stable",
},
{
name: "SynthesizedKeyboardEventsForAccessibilityActions",
status: "experimental",
},
{
// This is used for emoji variation selectors support in system
// fallback matching. This is a workaround solution that helps to
// avoid incorrect font matching due to lack of cmap format 14
// subtable in system emoji fonts on various platforms.
// This should be eventually removed when the custom emoji font
// is shipped with Chrome or when system emoji fonts will have
// cmap format 14 subtable.
name: "SystemFallbackEmojiVSSupport",
status: "test",
},
{
name: "SystemWakeLock",
status: "experimental",
},
// For unit tests.
{
// This is for testing copied_from_base_feature_if.
// This is set in base/test/test_suite.cc.
name: "TestBlinkFeatureDefault",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "TestFeature",
base_feature: "none",
browser_process_read_write_access: true,
},
// For unit tests.
{
name: "TestFeatureDependent",
depends_on: ["TestFeatureImplied"],
base_feature: "none",
},
// For unit tests.
{
name: "TestFeatureImplied",
implied_by: ["TestFeature"],
base_feature: "none",
},
// For unit tests.
{
name: "TestFeatureProtected",
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureProtectedDependent",
depends_on: ["TestFeatureProtectedImplied"],
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureProtectedImplied",
implied_by: ["TestFeatureProtected"],
base_feature: "none",
is_protected_feature: true,
},
// For unit tests.
{
name: "TestFeatureStable",
status: "stable",
},
{
name: "TextDetector",
status: "experimental",
},
{
// crbug.com/325517313
name: "TextDiffSplitFix",
status: "stable",
},
{
name: "TextFragmentAPI",
status: "experimental",
},
{
name: "TextFragmentIdentifiers",
origin_trial_feature_name: "TextFragmentIdentifiers",
public: true,
status: "stable",
base_feature: "TextFragmentAnchor",
},
{
name: "TextFragmentTapOpensContextMenu",
status: {"Android": "stable"},
},
{
name: "TextInputNotAlwaysDirAuto",
status: "stable",
},
{
name: "TextMetricsBaselines",
status: "stable",
},
{
// New implementation of text-size-adjust that applies during style rather
// than via the text autosizer. This also includes changes such as
// directly using percentage values without heuristics, and fully
// disabling automatic size adjustments when non-auto values are used.
// See: https://crbug.com/340389272.
name: "TextSizeAdjustImprovements",
status: "experimental",
},
{
// Support for the timeline-scope property.
//
// https://drafts.csswg.org/scroll-animations-1/#timeline-scope
name: "TimelineScope",
status: "stable",
depends_on: ["ScrollTimeline"]
},
{
name: "TimerThrottlingForBackgroundTabs",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "TimeZoneChangeEvent",
status: "experimental",
},
{
name: "TopicsAPI",
base_feature: "none",
public: true,
status: "stable",
},
{
name: "TopicsDocumentAPI",
base_feature: "none",
public: true,
status: "stable",
},
{
name: "TopLevelTpcd",
origin_trial_feature_name: "TopLevelTpcd",
origin_trial_type: "deprecation",
status: "experimental",
base_feature: "none",
},
// This feature allows touch dragging and a context menu to occur
// simultaneously, with the assumption that the menu is non-modal. Without
// this feature, a long-press touch gesture can start either a drag or a
// context-menu in Blink, not both (more precisely, a context menu is shown
// only if a drag cannot be started).
{
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",
},
// Many websites disable mouse support when touch APIs are available. We'd
// like to enable this always but can't until more websites fix this bug.
// Chromium sets this conditionally (eg. based on the presence of a
// touchscreen) in ApplyWebPreferences. "Touch events" themselves are always
// enabled since they're a feature always supported by Chrome.
{
name: "TouchEventFeatureDetection",
origin_trial_feature_name: "ForceTouchEventFeatureDetectionForInspector",
public: true,
status: "stable",
base_feature: "none",
},
// Set to reflect the kTouchTextEditingRedesign feature.
{
name: "TouchTextEditingRedesign",
base_feature: "none",
},
{
name: "Tpcd",
origin_trial_feature_name: "Tpcd",
origin_trial_allows_third_party: true,
origin_trial_type: "deprecation",
status: "experimental",
base_feature: "none",
},
{
name: "TransferableRTCDataChannel",
status: "stable",
},
// This is conditionally set if the platform supports translation.
{
name: "TranslateService",
},
{
name: "TranslationAPI",
status: "test",
base_feature: "EnableTranslationAPI",
},
{
name: "TranslationAPIEntryPoint",
status: "test",
implied_by: ["TranslationAPI", "LanguageDetectionAPI"],
},
{
name: "TrustedTypeBeforePolicyCreationEvent",
status: "experimental",
},
{
name: "TrustedTypesFromLiteral",
status: "experimental",
base_feature: "none",
},
{
name: "TrustedTypesUseCodeLike",
status: "experimental",
},
{
// Unblock queued blocking touchmove after the main thread handles the
// touchstart and the first touchmove and they didn't call
// preventDefault(), instead of waiting for the browser to send
// touchscrollstarted.
name: "UnblockTouchMoveEarlier",
status: "stable",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
},
{
name: "UnexposedTaskIds",
},
{
// Skip CSS animation events on unowned CSS animations:
// https://drafts.csswg.org/css-animations-2/#event-dispatch
name: "UnownedAnimationsSkipCSSEvents",
status: "stable",
},
{
name: "UnrestrictedMeasureUserAgentSpecificMemory",
},
// This is a reverse OT used for a phased deprecation, on desktop
// https://crbug.com/1071424
{
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
// isolated context to access protected USB interface classes and to
// bypass the USB blocklist.
{
name: "UnrestrictedUsb",
status: "stable",
depends_on: ["WebUSB"],
},
{
name: "URLPatternCompareComponent",
status: "experimental",
},
{
name: "URLSearchParamsHasAndDeleteMultipleArgs",
status: "stable",
},
{
name: "UseBeginFramePresentationFeedback",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
},
},
{
name: "UserActivationSameOriginVisibility",
base_feature: "none",
public: true,
},
{
name: "UseUndoStepElementDispatchBeforeInput",
status: "stable",
},
{
name: "V8IdleTasks",
base_feature: "none",
public: true,
},
{
// crbug.com/356190942
name: "VerticalInputRangeKeyOperationFix",
status: "stable",
},
{
// Whether a video element should automatically play fullscreen unless
// 'playsinline' is set.
name: "VideoAutoFullscreen",
settable_from_internals: true,
},
{
name: "VideoFullscreenOrientationLock",
},
{
name: "VideoRotateToFullscreen",
},
{
name: "VideoTrackGenerator",
status: "test",
},
{
name: "VideoTrackGeneratorInWindow",
status: "test",
},
{
name: "VideoTrackGeneratorInWorker",
},
{
// This is a kill switch for a fix where viewport changes did not update
// the text autosizer, see: crbug.com/359910401.
name: "ViewportChangesUpdateTextAutosizing",
status: "stable",
},
{
name: "ViewportHeightClientHintHeader",
status: "stable",
},
{
name: "ViewportSegments",
status: "experimental",
public: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "FoldableAPIs",
},
{
name: "ViewTransitionDisableSnapBrowserControlsOnHidden",
status: "stable",
},
{
// If enabled, ViewTransition API is supported for navigations including
// cross-document transitions.
// See https://drafts.csswg.org/css-view-transitions-1/.
name: "ViewTransitionOnNavigation",
status: "stable",
},
{
name: "ViewTransitionOnNavigationForIframes",
status: "stable",
},
{
name: "ViewTransitionTreeScopedNames",
status: "stable",
},
{
// https://chromestatus.com/feature/5089552511533056
name: "ViewTransitionTypes",
status: "stable",
},
{
name: "VisibilityCollapseColumn",
},
{
name: "VisualViewportOnScrollEnd",
status: "stable",
},
{
// The "WakeLock" feature was originally implied_by "ScreenWakeLock" and
// "SystemWakeLock". The former was removed after being promoted to
// stable, but we need to keep this feature around for code and IDLs that
// should work with both screen and system wake locks.
name: "WakeLock",
status: "stable",
implied_by: ["SystemWakeLock"],
},
{
// When enabled, this will issue a warning to the console any time
// rendering is forced withing content-visibility subtrees (both
// content-visibility: auto and content-visibility: hidden).
name: "WarnOnContentVisibilityRenderAccess",
},
{
name: "WebAnimationsSVG",
status: "experimental",
},
{
name: "WebAppInstallation",
status: "experimental",
},
{
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: ["FileHandling"],
base_feature: "none",
},
{
name: "WebAppScopeExtensions",
origin_trial_feature_name: "WebAppScopeExtensions",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
status: "experimental",
base_feature: "none",
},
{
name:"WebAppsLockScreen",
status:"experimental",
},
{
name: "WebAppTabStrip",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental"
},
base_feature: "DesktopPWAsTabStrip",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "WebAppTabStripCustomizations",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"default": "experimental"
},
base_feature: "DesktopPWAsTabStripCustomizations",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
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"],
},
{
// WebAssembly JS Promise Integration,
// https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration
name: "WebAssemblyJSPromiseIntegration",
origin_trial_feature_name: "WebAssemblyJSPromiseIntegration",
status: "experimental",
base_feature: "none",
},
{
name: "WebAssemblyJSStringBuiltins",
origin_trial_feature_name: "WebAssemblyJSStringBuiltins",
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",
},
// When enabled adds the authenticator attachment used for registration and
// authentication to the public key credential response.
{
name: "WebAuthAuthenticatorAttachment",
status: "test",
},
// https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-attestationformats
{
name: "WebAuthenticationAttestationFormats",
status: "experimental",
origin_trial_feature_name: "WebAuthnAttestationFormats",
origin_trial_os: ["android"],
origin_trial_allows_third_party: true,
},
// Enables the PublicKeyCredential.getClientCapabilities() static method.
// https://w3c.github.io/webauthn/#sctn-getClientCapabilities
{
name: "WebAuthenticationClientCapabilities",
status: "experimental",
},
// Methods for deserializing WebAuthn requests from JSON/serializing
// responses into JSON.
// 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: "stable",
},
{
name: "WebAuthenticationLargeBlobExtension",
status: "stable",
},
// https://w3c.github.io/webauthn/#prf-extension
{
name: "WebAuthenticationPRF",
status: "stable",
base_feature: "WebAuthenticationPRFExtension",
},
{
name: "WebAuthenticationRemoteDesktopSupport",
base_feature: "none",
public: true,
},
// https://w3c.github.io/webauthn/#sctn-supplemental-public-keys-extension
{
name: "WebAuthenticationSupplementalPubKeys",
status: "experimental",
},
// WebBluetooth is enabled by default on Android, ChromeOS, 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",
},
{
name: "WebBluetoothWatchAdvertisements",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "WebCodecsCopyToRGB",
status: "stable",
},
{
name: "WebCodecsHBDFormats",
status: "stable",
},
{
name: "WebCodecsVideoEncoderBuffers",
status: "experimental",
},
{
name: "WebCryptoCurve25519",
status: "experimental",
},
{
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: "stable",
},
{
name: "WebGLImageChromium",
base_feature: "none",
public: true,
},
{
name: "WebGPUAdapterInfoAttribute",
status: "stable",
},
{
// WebGPU developer features are deliberately not enabled by experimental
// web platform features.
name: "WebGPUDeveloperFeatures",
base_feature: "none",
public: true,
},
{
// WebGPU experimental features are meant for features that would
// eventually land in the WebGPU spec.
name: "WebGPUExperimentalFeatures",
status: "experimental",
public: true,
},
{
name: "WebGPUHDR",
status: "stable",
},
{
// Using subgroup related features in WebGPU.
// https://chromestatus.com/feature/5126409856221184
name: "WebGPUSubgroupsFeatures",
status: "experimental",
origin_trial_feature_name: "WebGPUSubgroupsFeatures",
base_feature: "none",
// Subgroups related features are also enabled if experimental
// WebGPU is enabled.
implied_by: ["WebGPUExperimentalFeatures"],
},
{
name: "WebHID",
status: {"Android": "", "default": "stable"},
},
{
// It is only enabled in extension environment for now.
name: "WebHIDOnServiceWorkers",
depends_on: ["WebHID"],
base_feature: "none",
public: true,
},
{
name: "WebIdentityDigitalCredentials",
origin_trial_feature_name: "WebIdentityDigitalCredentials",
origin_trial_os: ["android"],
origin_trial_allows_third_party: true,
depends_on: ["FedCm"],
public: true,
status: "experimental",
base_feature: "none",
},
// Kill switch for making BigInt handling in WebIDL use ToBigInt.
{
name: "WebIDLBigIntUsesToBigInt",
status: "stable",
},
{
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",
},
{
// https://wicg.github.io/web-preferences-api/
name: "WebPreferences",
status: "experimental",
},
{
name: "WebPrinting",
status: {"Android": "", "default": "test"},
},
{
name: "WebSerialBluetooth",
status: "stable",
base_feature: "none",
},
// WebShare is enabled by default on Android.
{
name: "WebShare",
public: true,
status: "test",
base_feature: "none",
},
{
name: "WebSocketStream",
status: "stable",
},
{
name: "WebTransportCustomCertificates",
origin_trial_feature_name: "WebTransportCustomCertificates",
status: "stable",
base_feature: "none",
},
{
// Note: enabling this without setting WebTransportCongestionControl to
// either BBRv1 or BBRv2 will produce poor bandwidth estimates.
name: "WebTransportStats",
status: "experimental",
base_feature: "none",
},
{
name: "WebUSB",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "WebUSBOnDedicatedWorkers",
status: "stable",
depends_on: ["WebUSB"],
},
{
// It is only enabled in extension environment for now.
name: "WebUSBOnServiceWorkers",
depends_on: ["WebUSB"],
base_feature: "none",
public: true,
},
{
name: "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",
},
{
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",
},
{
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: "WebXRSpecParity",
depends_on: ["WebXR"],
public: true,
status: "experimental",
},
// 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",
},
// Flag guard for change to XML parser to merge adjacent CDATA sections.
// See https://crrev.com/c/4790343.
{
name: "XMLParserMergeAdjacentCDataSections",
status: "stable",
},
{
// If enabled, the `getDisplayMedia()` family of APIs will ask for NV12
// frames, which should trigger a zero-copy path in the tab capture code.
name: "ZeroCopyTabCapture",
},
],
}