blob: c1eb7df57f39bf336d6b866ebb0faa2e6dcf2c39 [file] [log] [blame]
{
// See third_party/blink/renderer/platform/RuntimeEnabledFeatures.md
//
// This list is used to generate runtime_enabled_features.h/cc which contains
// a class that stores static enablers for all experimental features.
parameters: {
// Each feature can be assigned a "status". The "status" can be either
// one of the values in the |valid_values| list or a dictionary of
// the platforms listed in |valid_keys| to |valid_values|.
// Use "default" as the key if you want to specify the status of
// the platforms other than the ones declared in the dictionary.
// ** Omitting "default" means the feature is not enabled on
// the platforms not listed in the status dictionary
//
// Definition of each status:
// * status=stable: Enable this in all Blink configurations. We are
// committed to these APIs indefinitely.
// * status=experimental: In-progress features, Web Developers might play
// with, but are not on by default in stable. These features may be
// turned on using the "Experimental Web Platform features" flag in
// chrome://flags/#enable-experimental-web-platform-features.
// * status=test: Enabled in ContentShell for testing, otherwise off.
// Features without a status are not enabled anywhere by default.
//
// Example of the dictionary value use:
// {
// name: "ExampleFeature",
// status: {"Android": "stable", "Win": "experimental"},
// }
// "ExampleFeature" will be stable on Android/WebView/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 default is overridden by field trial or command
// line, set Blink feature to the state of the base::Feature;
// - Otherwise if the base::Feature is enabled, enable the Blink feature.
// - Otherwise no change.
//
// * "overridden"
// Enables the Blink feature when the base::Feature is overridden by field
// trial or command line. Otherwise no change. Its difference from
// "enabled_or_overridden" is that the Blink feature isn't affected by the
// default state of the base::Feature.
//
// This is useful for Blink origin trial features especially those
// implemented in both Chromium and Blink. As origin trial only controls
// the Blink features, for now we require the base::Feature to be enabled
// by default, but we don't want the default enabled status affect the
// Blink feature. See also https://crbug.com/1048656#c10.
// This can also be used for features that are enabled by default in
// Chromium but not in Blink on all platforms and we want to use the Blink
// status. However, we would prefer consistent Chromium and Blink status
// to this.
copied_from_base_feature_if: {
valid_type: "str",
valid_values: ["enabled_or_overridden", "overridden"],
default: "enabled_or_overridden",
},
// browser_process_read_access indicates the runtime feature state should be
// readable in the browserprocess via RuntimeFeatureStateReadContext.
// 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",
},
},
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",
},
{
name: "AccessibilityExposeHTMLElement",
base_feature: "none",
public: true,
},
{
name: "AccessibilityObjectModel",
status: "experimental",
},
{
name: "AccessibilityOSLevelBoldText",
status: "experimental",
public: true,
},
{
name: "AccessibilityPageZoom",
base_feature: "none",
public: true,
},
{
name: "AccessibilitySerializationSizeMetrics",
status: "experimental",
},
{
name: "AccessibilityUseAXPositionForDocumentMarkers",
base_feature: "none",
public: true,
},
{
name: "AddIdentityInCanMakePaymentEvent",
origin_trial_allows_third_party: true,
origin_trial_feature_name: "AddIdentityInCanMakePaymentEvent",
public: true,
},
{
name: "AddressSpace",
status: "experimental",
implied_by: ["CorsRFC1918"],
},
{
// Interest Group JS API/runtimeflag.
name: "AdInterestGroupAPI",
origin_trial_feature_name: "AdInterestGroupAPI",
implied_by: ["Fledge", "Parakeet"],
public: true,
},
{
name: "AdTagging",
public: true,
status: "test",
base_feature: "none",
},
{
// crbug.com/1500511
name: "AlignContentForBlocks",
status: "stable",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
base_feature: "none",
},
{
name: "AllowSyntheticTimingForCanvasCapture",
base_feature: "none",
status: {
"Mac": "stable",
"default": ""
},
},
{
name: "AllowURNsInIframes",
base_feature: "none",
},
{
name: "AndroidDownloadableFontsMatching",
base_feature: "none",
public: true,
},
{
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: "AsyncClipboardImplicitPermission",
status: "stable",
},
{
name: "AttributionReporting",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "none",
public: true,
},
{
name: "AttributionReportingCrossAppWeb",
origin_trial_feature_name: "AttributionReportingCrossAppWeb",
origin_trial_allows_third_party: true,
base_feature: "none",
public: true,
},
{
// This only exists so we can use RuntimeEnabled in the IDL file
// when either implied_by flag is enabled.
name: "AttributionReportingInterface",
// This is not going into origin trial, "origin_trial_feature_name" is
// required for using the "implied_by" behaviour.
origin_trial_feature_name: "AttributionReportingInterface",
origin_trial_allows_third_party: true,
implied_by: ["AttributionReporting", "AttributionReportingCrossAppWeb"],
base_feature: "none",
},
{
name: "AudioContextSetSinkId",
status: "stable",
},
{
name: "AudioOutputDevices",
// Android does not yet support switching of audio output devices
status: {"Android": "", "default": "stable"},
},
{
name: "AudioVideoTracks",
status: "experimental",
},
{
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",
},
{
// Flag set by the media::kAutoplayIgnoreWebAudio feature flag.
name: "AutoplayIgnoresWebAudio",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
// If enabled, lazy loaded images can be auto sized if the sizes
// attribute is missing or set to auto.
name: "AutoSizeLazyLoadedImages",
status: "experimental",
},
{
name: "AvoidCaretVisibleSelectionAdjuster",
status: "stable",
},
{
name: "BackdropInheritOriginating",
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: "experimental",
origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
base_feature: "BackForwardCacheSendNotRestoredReasons",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "BackgroundFetch",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "BarcodeDetector",
status: {
// Built-in barcode detection APIs are only available from some
// platforms. See //services/shape_detection.
"Android": "stable",
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
"Mac": "stable",
"default": "test",
},
},
{
// There are two different code changes guarded by this feature. Both
// are about triggering a beforeunload cancel dialog and need adoption
// from developers.
// 1. If event.preventDefault() is called, prompt cancel dialog.
// 2. If event.returnValue is the empty string, do not prompt cancel dialog.
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",
},
{
name: "BrowserVerifiedUserActivationKeyboard",
base_feature: "none",
public: true,
},
{
name: "BrowserVerifiedUserActivationMouse",
base_feature: "none",
public: true,
},
{
name: "CacheStorageCodeCacheHint",
origin_trial_feature_name: "CacheStorageCodeCacheHint",
status: "experimental",
base_feature: "none",
},
{
name: "Canvas2dCanvasFilter",
status: "experimental",
},
{
name: "Canvas2dImageChromium",
base_feature: "none",
public: true,
},
{
name: "Canvas2dLayers",
},
{
name: "Canvas2dMesh",
status: "test",
},
{
name: "Canvas2dScrollPathIntoView",
status: "experimental",
},
{
name: "CanvasFloatingPoint",
status: "experimental",
},
{
name: "CanvasHDR",
status: "experimental",
},
{
name: "CanvasImageSmoothing",
status: "experimental",
},
{
name: "CanvasWebGPUAccess",
status: "experimental",
},
{
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: "test",
},
{
// 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: "ClipboardSvg",
status: "stable",
},
{
name: "ClipPathRejectEmptyPaths",
status: "stable",
},
{
// https://html.spec.whatwg.org/multipage/interaction.html#close-requests-and-close-watchers
name: "CloseWatcher",
status: "experimental",
},
{
name: "CoepReflection",
status: "test",
},
{
name: "CompositeBGColorAnimation",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "CompositeBoxShadowAnimation",
},
{
name: "CompositeClipPathAnimation",
public: true,
},
{
name: "CompositedSelectionUpdate",
public: true,
status: {"Android": "stable"},
base_feature: "none",
},
{
name: "CompositionForegroundMarkers",
status: {
"Android": "stable",
"default": "",
}
},
{
name: "CompressionDictionaryTransport",
base_feature: "none",
origin_trial_feature_name: "CompressionDictionaryTransportV2",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "CompressionDictionaryTransportBackend",
base_feature: "none",
public: true,
},
{
name: "ComputedAccessibilityInfo",
status: "experimental",
},
{
// blink::features::kComputePressure is a kill switch for the API. If the
// feature is disabled, origin trial tokens are ignored.
name: "ComputePressure",
origin_trial_feature_name: "ComputePressure_v2",
origin_trial_allows_third_party: true,
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "ConsolidatedMovementXY",
base_feature: "none",
public: true,
},
{
name: "ContactsManager",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContactsManagerExtraProperties",
status: {"Android": "stable", "default": "test"},
},
{
name: "ContentIndex",
status: {"Android": "stable", "default": "experimental"},
},
{
name: "ContextMenu",
status: "experimental",
},
{
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"
},
{
name: "CrossFramePerformanceTimeline",
status: "experimental",
},
{
// Allows positioning a positioned element relative to another one.
// https://drafts.csswg.org/css-anchor-1/
name: "CSSAnchorPositioning",
implied_by: ["HTMLSelectListElement"],
status: "experimental",
},
{
// Use full cascading for applying @position-try fallback for anchor
// positioning during layout.
name: "CSSAnchorPositioningCascadeFallback",
implied_by: ["CSSAnchorPositioning"],
},
{
// Support for the animation-delay-start and animation-delay-end
// properties.
//
// Additionally, animation-delay becomes a shorthand which expands
// to those properties.
name: "CSSAnimationDelayStartEnd",
depends_on: ["ScrollTimeline"],
},
{
// Whether <image> values are allowed as counter style <symbol>
name: "CSSAtRuleCounterStyleImageSymbols",
},
{
// 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
name: "CSSCalcSizeFunction",
status: "experimental",
},
{
name: "CSSCapFontUnits",
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",
status: "stable",
},
{
// 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: "experimental",
},
{
name: "CSSDisplayAnimation",
status: "stable",
},
{
name: "CSSDisplayModePictureInPicture",
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",
},
{
// crbug.com/1447058
name: "CssFieldSizing",
status: "stable",
},
{
name: "CSSFirstLetterTextRewrite",
status: "stable",
},
{
name: "CSSFontSizeAdjust",
status: "experimental",
},
{
name: "CSSFunctions",
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",
},
{
// https://chromestatus.com/feature/6289894144212992
name: "CSSKeyframesRuleLength",
status: "stable",
},
{
name: "CSSLayoutAPI",
status: "experimental",
},
{
// Support for 'light-dark()' function to select computed color values
// based on the used color-scheme.
name: "CSSLightDarkColors",
status: "stable",
},
{
name: "CSSLinearTimingFunction",
status: "stable"
},
{
name: "CSSLogicalOverflow",
status: "test",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "experimental",
},
{
// Un-prefixed and interoperable mask implementation, including
// sub-features such as mask-image, mask-mode, etc.
// Tracking bug: https://crbug.com/1418401
// Spec: https://drafts.fxtf.org/css-masking/#the-mask
name: "CSSMaskingInterop",
status: "stable",
},
{
// Tracked as an experiment to help Search quantify
// performance improvements.
name: "CSSMPCImprovements",
status: "stable",
},
{
// Support for typed om numeric factory methods for various units that
// were otherwise shipped: rex, rch, ic, ric, lh, rlh, x (cap and rcap
// covered by separate runtime flag).
name: "CSSNumericFactoryCompleteness",
status: "stable",
},
{
name: "CSSOffsetPathBasicShapesCircleAndEllipse",
status: "stable",
},
{
name: "CSSOffsetPathBasicShapesRectanglesAndPolygon",
status: "stable",
},
{
name: "CSSOffsetPathCoordBox",
status: "stable",
},
{
name: "CSSOffsetPathRay",
status: "stable",
},
{
name: "CSSOffsetPathRayContain",
status: "stable",
},
{
name: "CSSOffsetPathUrl",
status: "stable",
},
{
name: "CSSOffsetPositionAnchor",
status: "stable",
},
{
name: "CSSOverflowMediaFeatures",
status: "stable",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
},
{
// Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
// See crbug.com/1485525.
name: "CSSParserIgnoreCharsetForURLs",
},
{
// crbug.com/1443291: Phrase Line Breaking
name: "CSSPhraseLineBreak",
status: "stable",
},
{
// Support for the position-fallback-bounds property.
//
// This property was part of the CSS Anchor Positioning spec,
// but was removed at some point. We do however plan to offer
// something similar in the future [1], and so we're holding
// on to the implementation for how.
//
// [1] https://github.com/w3c/csswg-drafts/issues/9868
name: "CSSPositionFallbackBounds",
depends_on: ["CSSAnchorPositioning"],
status: "test",
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "test",
},
{
// Support the position-try-order property. Currently not implied by the
// anchor positioning feature.
// https://drafts.csswg.org/css-anchor-position-1/#position-try-order-property
name: "CSSPositionTryOrder",
status: "test",
},
// 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",
},
{
// TODO(crbug.com/40932006): Non-standard 'reading-order-items' keyword
// for CSS reading of grid and flex layout.
// https://drafts.csswg.org/css-display-4/#reading-order-items
name: "CSSReadingOrderItems",
status: "test",
},
{
// https://drafts.csswg.org/css-color-5/#relative-colors
name: "CSSRelativeColor",
status: "stable",
},
{
// 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",
},
{
// https://drafts.csswg.org/css-cascade-6/#scoped-styles
name: "CSSScope",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSScrollSnapEvents",
status: "test",
implied_by: ["CSSSnapChangedEvent", "CSSSnapChangingEvent"],
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-start
name: "CSSScrollStart",
status: "test",
},
{
// 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", "CSSStickyContainerQueries"],
},
{
name: "CSSSelectorFragmentAnchor",
status: "experimental",
base_feature: "CssSelectorFragmentAnchor",
},
{
name: "CSSSignRelatedFunctions",
status: "experimental",
},
{
// A separate feature for testing compatibility, related to the work on
// https://chromestatus.com/feature/5196713071738880
name: "CSSSizingKeywordAnimation",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSSnapChangedEvent",
status: "test",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSSnapChangingEvent",
status: "test",
},
{
name: "CSSSnapContainerQueries",
status: "experimental",
},
{
// Explainer: https://drafts.csswg.org/css-values/#round-func
name: "CSSSteppedValueFunctions",
status: "experimental",
},
{
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: "test",
},
{
// crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
name: "CSSTextSpacing",
depends_on: ["CSSTextAutoSpace", "CSSTextSpacingTrim"],
},
{
// crbug.com/1463891: CSS `text-spacing-trim` property
name: "CSSTextSpacingTrim",
status: "stable",
},
// Use the `ScoreLineBreaker` for `text-wrap: balance`. crbug.com/1451205
{
name: "CSSTextWrapBalanceByScore",
status: "stable",
},
// `text-wrap: pretty`. crbug.com/1432798
{
name: "CSSTextWrapPretty",
status: "stable",
},
{
name: "CSSTransitionDiscrete",
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",
},
{
// Container query selectors containing uknown or unsupported queries
// never selects a container with this feature enabled.
// For instance, "@container (width > 0px) or (foo: bar)" will never
// select or match any containers.
name: "CSSUnknownContainerQueriesNoSelection",
status: "stable",
},
{
name: "CSSUpdateMediaFeature",
status: "stable",
},
// Support for `user-select:contain`.
{
name: "CSSUserSelectContain",
status: "test",
},
// Support for registered custom properties with <image> syntax.
{
name: "CSSVariables2ImageValues",
status: "stable",
},
// Support for registered custom properties with <transform-list> and
// <transform-function> syntax.
{
name: "CSSVariables2TransformValues",
status: "stable",
},
{
name: "CSSVideoDynamicRangeMediaQueries",
status: "experimental",
},
{
// The view-timeline shorthand includes the view-timeline-inset
// property.
//
// https://github.com/w3c/csswg-drafts/pull/9189
name: "CSSViewTimelineInsetShorthand",
status: "stable",
},
{
// https://chromestatus.com/feature/5064894363992064
name: "CSSViewTransitionClass",
status: "test"
},
{
// 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",
},
{
// Makes the default display value of date type <input> elements
// inline-block for cross-browser compatibility. Enabled in M122, should
// be safe to remove in M126.
name: "DateInputInlineBlock",
status: "stable",
},
{
// This is a killswitch for the `serializable` attribute on declarative
// shadow roots. It should be removed in M125 (March 18, 2024) assuming
// no issues are encountered.
name: "DeclarativeShadowDOMSerializable",
status: "stable",
},
{
// This is a killswitch (enabled by *enabling* the feature) for the
// removal of the IDL reflection of the old 'shadowroot' attribute.
// This should be removed in M124 (Feb 20, 2024) assuming no issues.
name: "DeprecatedTemplateShadowRoot",
},
// 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: "none",
},
{
// 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 M123. Flag should be removed after M123 has been
// shipping to stable for a few weeks.
name: "DirAutoNoInheritance",
status: "stable",
},
{
name: "DirectSockets",
public: true,
status: "experimental",
},
{
// Shipping in M121. Flag should be removed after M121 has been
// shipping to stable for a few weeks.
name: "DirnameMoreInputTypes",
status: "stable",
},
{
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",
},
{
// 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: "DisablePepcSecurityForTesting",
},
{
name: "DisableSelectAllForEmptyText",
status: "stable",
},
// This feature should only be enabled if
// DisableThirdPartyStoragePartitioning is enabled, but as
// DisableThirdPartyStoragePartitioning will be linked to a deprecation
// trial it isn't possible to set a `depends_on`.
{
name: "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning",
origin_trial_feature_name: "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
status: "experimental",
base_feature: "none",
},
// This feature will represent the deprecation trial that allows first
// parties to temporarily use unpartitioned storage in embeds loaded
// on their site.
{
name: "DisableThirdPartyStoragePartitioning",
origin_trial_feature_name: "DisableThirdPartyStoragePartitioning",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
origin_trial_allows_third_party: true,
status: "experimental",
base_feature: "none",
browser_process_read_write_access: true,
},
{
// `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",
},
{
// Allowing elements with display:contents to have focus.
// See https://crbug.com/1366037
name: "DisplayContentsFocusable",
status: "experimental",
},
{
name: "DisplayCutoutAPI",
base_feature: "none",
public: true,
},
{
// Makes document's fallback base URL use about:blank instead of the base
// URL of whatever execution context created it in order to match the
// HTML spec and the behavior already shipped in all other browsers. This
// behavior is reflected by document.baseURI.
name: "DocumentBaseURIFix",
status: "stable",
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
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 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",
status: "experimental",
},
{
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",
implied_by: ["ViewTransitionOnNavigation"],
},
{
name: "DocumentWrite",
},
// When enabled, this allows users of DOMParser to do:
// (new DOMParser()).parseFromString(...,{includeShadowRoots:true}).
// This is being deprecated and removed: crbug.com/329330085.
// The fieldtrial_testing_config currently disables this feature for tests.
{
name: "DOMParserIncludeShadowRoots",
status: "stable",
},
// 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",
},
{
// Shipping in M121, so should be safe to remove in M126.
name: "DontFireDblclickOnDisabledFormControls",
status: "stable",
},
{
name: "DynamicScrollCullRectExpansion",
status: "experimental",
},
{
name: "ElementCapture",
origin_trial_feature_name: "ElementCapture",
status: {"Android": "", "default": "experimental"},
},
{
// This is the "new" version of getHTML() used for declarative shadow
// DOM, and this version will replace the deprecated getInnerHTML(), which
// is enabled by the ElementGetInnerHTML feature.
name: "ElementGetHTML",
status: "experimental",
},
{
// This is the "old" version of getInnerHTML() used for declarative shadow
// DOM, and this version is deprecated. The replacement is enabled by the
// ElementGetHTML feature. Once the new feature is stabilized and shipped,
// this feature (and its corresponding functionality) will be removed.
name: "ElementGetInnerHTML",
status: "stable",
},
{
name: "EmptyClipboardRead",
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: "EventTimingInteractionCount",
status: "experimental",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
base_feature: "none",
},
{
name: "ExperimentalJSProfilerMarkers",
status: "experimental",
},
{
name: "ExperimentalPolicies",
status: "experimental",
},
{
name: "ExposeRenderTimeNonTaoDelayedImage",
},
{
name: "ExtendedTextMetrics",
status: "experimental",
},
{
name: "ExtraWebGLVideoTextureMetadata",
},
{
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: "FakeNoAllocDirectCallForTesting",
status: "test",
},
{
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,
status: "test",
base_feature: "none",
},
{
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,
},
{
name: "FedCmSelectiveDisclosure",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FencedFrames",
base_feature: "none",
// This helps enable and expose the <fencedframe> element, but note that
// blink::features::kFencedFrames must be enabled as well, similar to
// Portals, as we require the support of the browser process to fully
// enable the feature. Enabling this runtime enabled feature alone has no
// effect.
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "FencedFramesAPIChanges",
// Various new IDL attributes on the <fencedframe> element (such as
// `config`, `sandbox`, and `allow`).
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "enabled_or_overridden",
},
{
name: "FencedFramesDefaultMode",
base_feature_status: "disabled",
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
// 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",
},
{
name: "Fledge",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "FledgeBiddingAndAuctionServerAPI",
origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
origin_trial_allows_third_party: true,
},
{
name: "FledgeClearOriginJoinedAdInterestGroups",
status: "stable",
},
{
name: "FledgeCreateAuctionNonceSynchronousResolution",
status: "stable",
},
{
name: "FledgeCustomMaxAuctionAdComponents",
},
{
// Enables using a 'deprecatedRenderURLReplacements' field within the
// Protected Audience ad auction config.
name: "FledgeDeprecatedRenderURLReplacements"
},
{
name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
status: "stable",
},
{
name: "FledgeFeatureDetection",
// FledgeFeatureDetection should be on if any of the features it aims
// to help detect is on.
implied_by: ["FledgeCustomMaxAuctionAdComponents",
"FledgeDeprecatedRenderURLReplacements"],
base_feature: "none",
},
{
name: "FledgeMultiBid",
},
{
name: "FledgeNegativeTargeting",
status: "stable",
},
{
// Enables using a 'reportingTimeout' field within the Protected Audience
// ad auction config.
name: "FledgeReportingTimeout",
},
{
name: "FledgeTrustedBiddingSignalsSlotSize",
status: "stable",
},
{
name: "FluentOverlayScrollbars",
},
{
name: "FluentScrollbars",
},
{
// Kill switch for crbug.com/1420810 fix
// TODO(xiaochengh): Remove after M122.
name: "FlushParserBeforeCreatingCustomElements",
status: "stable",
},
{
name: "Focusgroup",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "Focusgroup",
},
{
name: "FocusStyleInvalidationOnPageActivation",
status: "stable",
},
{
name: "FontAccess",
status: {"Android": "", "default": "stable"},
},
{
name: "FontationsFontBackend",
},
{
name: "FontFamilyPostscriptMatchingCTMigration",
},
{
name: "FontFamilyStyleMatchingCTMigration",
},
{
name: "FontMatchingCTMigration",
status: "stable",
},
{
name: "FontPaletteAnimation",
status: "stable",
},
{
name: "FontSrcLocalMatching",
base_feature: "none",
// No status, as the web platform runtime enabled feature is controlled by
// a Chromium level feature.
},
{
// 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"},
},
{
name: "FormattedText",
status: "experimental",
},
{
// 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",
},
{
// Allow these form controls to have vertical writing mode: select, meter,
// progress, button and non-text-based input types.
name: "FormControlsVerticalWritingModeSupport",
status: "stable",
},
{
// Allow text-based form controls to have vertical writing mode: textarea
// and input types email, number, password, search, tel, text, url.
name: "FormControlsVerticalWritingModeTextSupport",
status: "stable",
},
{
// Bug fix for crbug.com/1429585
name: "FormStateRestoreCallbackCallWithState",
status: "stable",
},
{
name: "FractionalScrollOffsets",
base_feature: "none",
public: true,
},
{
name: "FreezeFramesOnVisibility",
status: "experimental",
},
{
// Enables `fullscreen` windowFeatures parameter in window.open().
name: "FullscreenPopupWindows",
status: "experimental",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_feature_name: "FullscreenPopupWindows",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
},
{
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: "GetNextSiblingPositionWhenLastChild",
status: "stable",
},
{
name: "GroupEffect",
status: "test",
},
{
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: "experimental",
},
{
name: "HrefTranslate",
depends_on: ["TranslateService"],
origin_trial_feature_name: "HrefTranslate",
status: "stable",
base_feature: "none",
},
// 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",
},
{
// 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: "experimental",
},
{
// TODO(crbug.com/1416284): Enables popover=hint functionality.
name: "HTMLPopoverHint",
status: "experimental",
},
{
name: "HTMLSearchElement",
status: "stable",
},
{
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",
},
{
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"
},
{
// ImprovedXMLErrors tweaks the way that we emit XML parsing errors in
// some cases in order to comply with upstream changes to libxml.
// Shipping in M123, so should be safe to remove in M126.
name: "ImprovedXMLErrors",
status: "stable",
},
{
name: "IncomingCallNotifications",
},
{
name: "InertDisplayTransition",
status: "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",
},
{
// 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"},
},
// 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: "InteroperablePrivateAttribution",
status: "experimental",
},
{
name: "InterruptComposedScrollbarDisappearance",
status: "stable",
},
{
// If enabled, IntersectionObserverScrollMargin will be parsed.
name: "IntersectionObserverScrollMargin",
status: "stable",
},
{
name: "IntersectionOptimization",
status: "experimental",
},
{
name: "InvertedColors",
status: "experimental",
},
{
name: "InvisibleSVGAnimationThrottling",
status: "stable",
},
{
name: "JavaScriptCompileHintsMagicRuntime",
status: "experimental",
origin_trial_feature_name: "JavaScriptCompileHintsMagic",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
base_feature: "none",
},
{
name: "KeyboardFocusableScrollers",
status: "experimental",
},
{
// 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: "LayoutFlexNewRowAlgorithmV3",
status: "test",
},
{
name: "LayoutIgnoreMarginsForSticky",
},
{
name: "LayoutNGShapeCache",
status: "test",
base_feature: "LayoutNGShapeCache",
},
{
name: "LayoutSegmentationCache",
status: "stable",
},
{
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: "LCPMouseoverHeuristics",
},
{
name: "LCPMultipleUpdatesPerElement",
},
{
name: "LegacyWindowsDWriteFontFallback",
// Enabled by features::kLegacyWindowsDWriteFontFallback;
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"
},
{
// Use LongAnimationFrameMonitor to emit longtask entries
name: "LongTaskFromLongAnimationFrame",
status: "stable",
},
{
name: "MacFontsDeprecateFontTraitsWorkaround",
status: "stable",
},
{
name: "MachineLearningCommon",
implied_by: ["MachineLearningModelLoader", "MachineLearningNeuralNetwork"],
status: "experimental",
},
{
name: "MachineLearningModelLoader",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "MachineLearningNeuralNetwork",
public: true,
status: {
"ChromeOS_Ash": "experimental",
"ChromeOS_Lacros": "experimental",
"Win": "experimental",
"Mac": "experimental",
"Linux": "experimental",
"default": "test"
},
base_feature: "none",
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
// crbug.com/40417720
name: "MaskingGraphemeClusters",
status: "stable",
depends_on: ["OffsetMappingUnitVariable"],
},
{
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: "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: "test",
},
{
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: "MessagePortCloseEvent",
status: "test",
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
},
{
name: "MobileLayoutTheme",
},
{
name: "ModelExecutionAPI",
status: "test",
base_feature: "EnableModelExecutionAPI",
},
{
name: "MojoJS",
status: "test",
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
base_feature: "none",
},
// 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",
},
// crbug.com/1446498: This feature is being used for the deprecation of
// Mutation Events.
{
name: "MutationEvents",
status: "stable",
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: "NestedTopLayerSupport",
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: "NextSiblingPositionUseNextCandidate",
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",
},
{
// TODO(crbug.com/924486): This feature enables the deprecated values
// inner-spin-button, push-button, searchfield-cancel-button,
// slider-horizontal, square-button. Disable this feature to stop
// parsing or allowing these values.
// This feature is disabled in fieldtrial testing config because we are
// testing the deprecation via Finch.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "NonStandardAppearanceValuesHighUsage",
},
{
// 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",
},
{
// TODO(crbug.com/924486): This feature enables the deprecated values
// media-slider, media-sliderthumb, media-volume-slider
// media-volume-sliderthumb, sliderthumb-horizontal, sliderthumb-vertical.
// Disable this feature to stop parsing or allowing these values.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "NonStandardAppearanceValuesLowUsage",
},
{
name: "NoOffsetMappingForInconsistentText",
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",
},
// Origin trial to experiment with No-Vary-Search in Prefetch Cache.
// The functionality in this Origin Trial is now enabled by default in the
// browser by network::features::kPrefetchNoVarySearchShippedByDefault
// feature parameter of network::features::kPrefetchNoVarySearch.
// This runtime enabled feature is ignored as long as the feature
// parameter network::features::kPrefetchNoVarySearchShippedByDefault is
// not disabled via Finch.
// See crbug.com/1378075. Depends on SpeculationRulesPrefetchProxy to be
// enabled.
// On the browser side, the trial needs features::kPrefetchUseContentRefactor
// enabled. If features::kPrefetchUseContentRefactor is disabled, then
// the code will behave as if PrefetchNoVarySearch is disabled.
{
name: "NoVarySearchPrefetch",
base_feature: "none",
origin_trial_feature_name: "NoVarySearchPrefetch",
},
{
name: "ObservableAPI",
status: "experimental",
public: true,
},
{
name: "OffMainThreadCSSPaint",
status: "stable",
},
{
name: "OffscreenCanvasCommit",
status: "experimental",
},
{
// crbug.com/40532763
name: "OffsetMappingUnitVariable",
status: "stable",
},
{
name: "OmitBlurEventOnElementRemoval",
status: "test"
},
{
name: "OnDeviceChange",
// Android does not yet support SystemMonitor.
status: {"Android": "", "default": "stable"},
},
// This flag is a killswitch. It was only exists as a way for us to turn
// the feature off in the emergency that it breaks websites.
// TODO(http://crbug.com/1473340): Delete internal web_tests which are
// redundant with existing WPTs when we delete this flag.
{
name: "OptionElementAlwaysUseLabel",
status: "stable",
},
{
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",
},
{
name: "PagePopup",
// Android does not have support for PagePopup
status: {"Android": "", "default": "stable"},
},
{
name: "PageRevealEvent",
status: "stable",
implied_by: ["ViewTransitionOnNavigation"],
},
{
name: "PageSwapEvent",
status: "stable",
implied_by: ["ViewTransitionOnNavigation"],
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
// PARAKEET ad serving runtime flag/JS API.
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
// 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: "PastingBlocksSVGUseNonLocalHrefs",
status: "stable",
},
{
name: "PaymentApp",
depends_on: ["PaymentRequest"],
public: true,
status: "experimental",
base_feature: "none",
},
// Desktop only, if enabled PaymentHandler will use the new minimal header UX.
// See https://crbug.com/1385136.
{
name: "PaymentHandlerMinimalHeaderUX",
origin_trial_feature_name: "PaymentHandlerMinimalHeaderUX",
origin_trial_allows_third_party: true,
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
status: "stable",
},
{
name: "PaymentInstruments",
depends_on: ["PaymentApp"],
},
{
name: "PaymentMethodChangeEvent",
depends_on: ["PaymentRequest"],
status: "stable",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PaymentRequestAllowOneActivationlessShow",
public: true,
status: "stable",
},
{
name: "PaymentRequestMerchantValidationEvent",
status: "experimental",
},
{
name: "PendingBeaconAPI",
origin_trial_feature_name: "PendingBeaconAPI",
origin_trial_allows_third_party: true,
public: true,
status: "experimental",
base_feature: "none",
},
{
name: "PercentBasedScrolling",
base_feature: "none",
public: true,
settable_from_internals: true,
},
{
name: "PerformanceManagerInstrumentation",
base_feature: "none",
public: true,
},
{
// 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",
status: "experimental",
base_feature: "none",
},
{
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: "test",
},
{
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.
// See https://crbug.com/346236 for current status.
{
name: "PrefixedVideoFullscreen",
status: "stable",
},
{
// 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, gives the option to pretty-print JSON documents to
// cleanly format the JSON and make it readable.
name:"PrettyPrintJSONDocument",
status: "stable",
},
{
// Privacy intervention to disable reading the system accent-color via
// images.
name: "PreventReadingSystemAccentColor",
status: "stable",
},
// The RTE feature encompasses multiple APIs, including: Attribution
// Reporting, FLEDGE, Topics and Fenced Frames.
{
name: "PrivacySandboxAdsAPIs",
base_feature: "none",
origin_trial_feature_name: "PrivacySandboxAdsAPIs",
origin_trial_allows_third_party: true,
},
{
name: "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",
},
{
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",
},
{
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: "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"},
},
{
name: "RemoveDanglingMarkupInTarget",
status: "stable",
},
{
name: "RemoveDataUrlInSvgUse",
status: "stable",
},
{
name: "RemoveMobileViewportDoubleTap",
public: true,
status: "stable",
base_feature: "none",
},
{
// 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",
},
{
// 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",
},
{
// 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: "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: "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/40942025
name: "RtNoFirstLetterFirstLine",
status: "stable",
},
{
// crbug.com/324111880
name: "RubyLineBreakable",
},
{
// Runs a microtask checkpoint before creating custom elements in
// XMLDocumentParser. Should be safe to remove after M125
name: "RunMicrotaskBeforeXmlCustomElement",
status: "stable",
},
{
name: "SanitizerAPI",
status: "experimental",
},
{
name: "SchedulerYield",
origin_trial_feature_name: "SchedulerYield",
origin_trial_allows_third_party: true,
status: "experimental",
},
{
// 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",
},
{
name: "ScrollTimeline",
status: "stable",
implied_by: ["AnimationWorklet", "ScrollTimelineCurrentTime"]
},
{
name: "ScrollTimelineAlwaysOnCompositor",
status: "stable",
depends_on: ["ScrollTimelineOnCompositor"],
},
{
// Separate flag for crbug.com/1426506 (getCurrentTime API change) which
// is expected to land after the initial launch of ScrollTimeline.
name: "ScrollTimelineCurrentTime",
status: "experimental"
},
{
name: "ScrollTimelineOnCompositor",
status: "stable"
},
// 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",
},
// 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