blob: a607003fd694cd05dda0906bfc6cf14cf07dc039 [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", "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: "AccessibilityCustomElementRoleNone",
public: true,
status: "test",
base_feature: "none",
},
{
name: "AccessibilityExposeDisplayNone",
status: "test",
},
{
// If the author did not define aria-actions, surface button and link
// children inside option and menuitem elements as implicit actions.
name: "AccessibilityImplicitActions",
status: "experimental",
},
{
// Use a minimum role of group on elements that are keyboard-focusable.
// See https://w3c.github.io/html-aam/#minimum-role.
name: "AccessibilityMinRoleTabbable",
},
{
name: "AccessibilityOSLevelBoldText",
status: "experimental",
public: true,
},
{
// Enforce no accessible name on objects that have a role where names are
// prohibited (listed in https://w3c.github.io/aria/#namefromprohibited):
// log a friendly error in the developer console, and trigger a DCHECK().
// The incorrect markup situation will be repaired, and the name will
// be exposed as a description instead.
// TODO(crbug.com/350528330,
// https://github.com/web-platform-tests/interop-accessibility/issues/133,
// https://github.com/w3c/accname/issues/240,
// https://github.com/w3c/accname/issues/241): If community feedback is
// positive, and WPT + accname testable statements are updated to allow
// this, then add status: test.
name: "AccessibilityProhibitedNames",
},
{
name: "AccessibilitySerializationSizeMetrics",
status: "experimental",
},
{
name: "AccessibilityUseAXPositionForDocumentMarkers",
base_feature: "none",
public: true,
},
{
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",
public: true,
status: "test",
implied_by: ["AIPromptAPIForWebPlatform", "AIPromptAPIMultimodalInput"],
},
{
name: "AIPromptAPIForExtension",
public: true,
origin_trial_feature_name: "AIPromptAPIForExtension",
status: "test",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "AIPromptAPIForWebPlatform",
public: true,
status: "test",
},
{
name: "AIPromptAPIMultimodalInput",
public: true,
status: "test",
},
{
name: "AIRewriterAPI",
public: true,
status: "test",
},
{
name: "AISummarizationAPI",
public: true,
status: "test",
origin_trial_feature_name: "AISummarizationAPI",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "AIWriterAPI",
public: true,
status: "test",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
base_feature: "none",
},
// Fix for https://crbug.com/41238177.
{
name: "AllowCopyingEmptyLastTableCell",
status: "stable",
},
// 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: "AllowPreloadingWithCSPMetaTag",
status: "experimental",
},
{
name: "AllowSameSiteNoneCookiesInSandbox",
base_feature: "none",
// No status because this blink runtime feature doesn't work by itself.
// It's controlled by the corresponding Chromium feature,
// net::features::kAllowSameSiteNoneCookiesInSandbox, which needs to be
// enabled to make the whole feature work.
},
{
// https://crbug.com/40681200
name: "AllowSkippingEditingBoundaryToMergeEnd",
status: "stable",
},
{
name: "AllowSyntheticTimingForCanvasCapture",
base_feature: "none",
status: {
"Mac": "stable",
"default": ""
}
},
{
name: "AllowURNsInIframes",
base_feature: "none",
},
{
name: "AndroidDownloadableFontsMatching",
base_feature: "none",
public: true,
},
{
// https://chromestatus.com/feature/5083257285378048
name: "AnimationProgressAPI",
status: "stable",
},
{
name: "AnimationWorklet",
},
{
name: "AnonymousIframe",
status: "stable",
},
{
name: "AOMAriaRelationshipProperties",
public: true,
status: "experimental",
},
{
name: "AOMAriaRelationshipPropertiesAriaOwns",
public: true,
status: "experimental",
depends_on: ["AOMAriaRelationshipProperties"],
},
{
name: "AppTitle",
status: "experimental",
origin_trial_feature_name: "AppTitle",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature: "WebAppEnableAppTitle",
},
{
name: "AriaActions",
status: "experimental",
},
{
name: "AriaNotify",
status: "test",
},
{
name: "AriaRowColIndexText",
status: "stable",
},
// See https://crbug.com/40150299,
// https://github.com/whatwg/dom/issues/1255, and
// https://github.com/whatwg/dom/pull/1307.
{
name: "AtomicMoveAPI",
status: "stable",
},
// This flag specifically guards live Range (and by extension, selection)
// preservation for atomic move (`moveBefore()`). This is not part of the
// launching proposal, per discussion in
// https://github.com/whatwg/dom/pull/1307, but because it could come later
// and was already mostly implemented, we flag-guard the implementation for
// later use.
{
name: "AtomicMoveRangePreservation",
},
{
name: "AttributionReporting",
status: "stable",
base_feature: "none",
public: true,
},
{
name: "AudioContextInterruptedState",
status: "test",
},
{
name: "AudioContextOnError",
status: "stable",
},
{
// AudioContext.playoutStats interface.
// https://chromestatus.com/feature/5172818344148992
name: "AudioContextPlayoutStats",
origin_trial_feature_name: "AudioContextPlayoutStats",
status: "experimental",
},
{
name: "AudioContextSetSinkId",
status: "stable",
},
{
name: "AudioOutputDevices",
// Android does not yet support switching of audio output devices
status: {"Android": "", "default": "stable"},
},
{
name: "AudioVideoTracks",
status: "experimental",
},
// Killswitch.
{
name: "AuraScrollbarUsesNinePatchTrack",
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",
},
// When enabled, clicking on canvas element will not update the selection.
// See crbug.com/40130450.
{
name: "AvoidSelectionChangeOnCanvasClick",
status: "stable"
},
// When enabled, enforces new interoperable semantics for 3D transforms.
// See crbug.com/1008483.
{
name: "BackfaceVisibilityInterop",
},
{
name: "BackForwardCache",
base_feature: "none",
public: true,
},
{
name: "BackForwardCacheExperimentHTTPHeader",
origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader",
status: "experimental",
base_feature: "none",
},
{
name: "BackForwardCacheNotRestoredReasons",
status: "stable",
origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
base_feature: "BackForwardCacheSendNotRestoredReasons",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "BackForwardCacheUpdateNotRestoredReasonsName",
status: "experimental",
},
{
// Used to enable Blink side of features flags for Default Nav Transition.
name: "BackForwardTransitions",
},
{
name: "BackgroundFetch",
public: true,
status: "stable",
base_feature: "none",
},
// A developer opt-out for background page freezing.
{
name: "BackgroundPageFreezeOptOut",
base_feature: "none",
origin_trial_feature_name: "BackgroundPageFreezeOptOut",
origin_trial_type: "deprecation",
},
{
name: "BarcodeDetector",
status: {
// Built-in barcode detection APIs are only available from some
// platforms. See //services/shape_detection.
"Android": "stable",
"ChromeOS_Ash": "stable",
"Mac": "stable",
"default": "test",
},
},
{
name: "BidiCaretAffinity",
},
{
name: "BlinkExtensionChromeOS",
browser_process_read_write_access: true,
},
{
name: "BlinkExtensionChromeOSKiosk",
depends_on: ["BlinkExtensionChromeOS"],
browser_process_read_write_access: true,
},
{
name: "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: "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_status: "enabled",
// A origin trial is feature is required for the build to success.
// The feature reuses the AISummarizationAPI. Any other origin trial
// features in the `implied_by` list will enable this feature as well.
origin_trial_feature_name: "AISummarizationAPI",
copied_from_base_feature_if: "overridden",
implied_by: [
"AIPromptAPI",
"AIRewriterAPI",
"AISummarizationAPI",
"AIWriterAPI",
"LanguageDetectionAPI",
"TranslationAPIEntryPoint",
"TranslationAPI",
]
},
{
// crbug.com/40681980
name: "ButtonNoAlignItems",
status: "stable",
},
{
// 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",
},
{
// Increase disabled color on calendar picker's month-popup-button to 0.9.
// Enabled by default on M132. Remove flag on or after M135.
name: "CalendarPickerMonthPopupButtonDisabledColor",
status: "stable",
},
{
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",
},
{
// https://crbug.com/377325952
name: "CanvasInterventions",
browser_process_read_write_access: true,
},
{
// 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",
},
{
name: "CascadedAfterChangeStyle",
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",
},
{
// crbug.com/40702380
name: "CheckIfHighestRootContainsPositionAnchorNode",
status: "stable",
},
{
name: "CheckVisibilityExtraProperties",
status: "stable",
},
// crbug.com/40851596: Send click to the capture pointer target instead of
// the common ancestor of pointerdown and pointerup targets.
{
name: "ClickToCapturedPointer",
status: "experimental",
},
{
// Allows top-level sites to restrict collection of high-entropy UA client
// hints (from 3Ps, or itself) via the getHighEntropyValues API.
// crbug.com/385161047
name: "ClientHintUAHighEntropyValuesPermissionPolicy",
status: "test",
},
// This ensures that clipboard event fires on a target node which is
// focused in case no visible selection is present.
// crbug.com/40735783
{
name: "ClipboardEventTargetCanBeFocusedElement",
status: "stable",
},
{
// Support ClipboardItemData of Promise<DOMString> type according to spec
// https://w3c.github.io/clipboard-apis/#typedefdef-clipboarditemdata
name: "ClipboardItemWithDOMStringSupport",
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",
status: "experimental",
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: "ComputeInsertionPositionBasedOnAnchorType",
status: "stable",
},
{
name: "ComputePressure",
status: {
"Android": "",
"default": "stable",
}
},
{
name: "ConcurrentViewTransitionsSPA",
status: "stable",
},
{
name: "ConsiderFullChildNodeContentForListify",
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: "stable",
},
{
// 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: "CoopRestrictProperties",
origin_trial_feature_name: "CoopRestrictProperties",
base_feature: "none",
},
{
// Corrects the handling of <form> elements nested within <template> tags
// in HTML parsing. See https://crbug.com/352896478 for details.
name: "CorrectTemplateFormParsing",
status: "experimental"
},
{
name: "CorsRFC1918",
},
{
// Allow WebAuthn relying parties to report information about existing
// credentials back to credential storage providers.
// Enabled by default on M132. Remove flag on or after M135.
name: "CredentialManagerReport",
status: "stable",
},
{
name: "CSPReportHash",
status: "stable",
},
{
// The AccentColor And AccentColorText CSS system color keywords
name: "CSSAccentColorKeyword",
status: "experimental",
},
{
// CSS attr() function that accepts not only string types
// and can be used in all properties.
// https://drafts.csswg.org/css-values-5/#attr-notation
name: "CSSAdvancedAttrFunction",
status: "stable",
},
{
// Let the visual position of the default anchor affect IMCB for
// position-area.
// This means taking scroll offset into account, if an element is aligned
// to the default anchor at one edge, and at the actual containing block
// at the other edge.
name: "CSSAnchorPositionAreaVisualPosition",
status: "experimental",
},
{
// Support for the anchor-scope property.
// https://drafts.csswg.org/css-anchor-position-1/#anchor-scope
name: "CSSAnchorScope",
status: "stable",
},
{
// Support anchor-size() values in inset and margin properties.
name: "CSSAnchorSizeInsetsMargins",
status: "stable",
},
{
// https://github.com/w3c/csswg-drafts/issues/8942
name: "CSSAnimationTrigger",
status: "test",
},
{
name: "CSSAnimationTriggerRange",
status: "test",
implied_by: ["CSSAnimationTrigger"],
},
{
name: "CSSAnimationTriggerTimeline",
status: "test",
implied_by: ["CSSAnimationTrigger"],
},
{
name: "CSSAnimationTriggerType",
status: "test",
implied_by: ["CSSAnimationTrigger"],
},
{
// Support for <string> syntax in @property
// https://drafts.css-houdini.org/css-properties-values-api-1/#syntax-strings
name: "CSSAtPropertyStringSyntax",
status: "stable",
},
{
// 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/5082469066604544
name: "CSSCaretAnimation",
status: "experimental",
},
{
// 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",
},
{
// https://drafts.csswg.org/css-borders-4/#corner-shaping
name: "CSSCornerShape",
status: "experimental",
},
{
// Unprefixed cross-fade() (in addition to the existing -webkit-cross-fade()).
// https://drafts.csswg.org/css-images-4/#cross-fade-function
name: "CSSCrossFade",
status: "experimental",
},
{
name: "CSSDynamicRangeLimit",
status: "stable",
},
{
// Include custom properties in CSSComputedStyleDeclaration::item/length.
// https://crbug.com/949807
name: "CSSEnumeratedCustomProperties",
status: "test",
},
{
name: "CSSExponentialFunctions",
status: "stable",
},
{
name: "CSSFontSizeAdjust",
status: "stable",
},
{
name: "CSSFunctions",
status: "test",
},
{
// https://chromestatus.com/feature/5157805733183488
name: "CSSGapDecoration",
},
{
// This needs to be kept as a runtime flag as long as we need to forcibly
// disable it for WebView on Android versions older than P. See
// https://crrev.com/f311a84728272e30979432e8474089b3db3c67df
name: "CSSHexAlphaColor",
status: "stable",
},
{
// Support making elements inert through the interactivity property.
name: "CSSInert",
status: "experimental",
},
{
// CSS if() function for custom properties. Supports only style
// queries in conditions.
// https://github.com/w3c/csswg-drafts/issues/10064.
name: "CSSInlineIfForStyleQueries",
status: "test",
},
{
// https://chromestatus.com/feature/6289894144212992
name: "CSSKeyframesRuleLength",
status: "stable",
},
{
name: "CSSLayoutAPI",
status: "experimental",
},
{
name: "CSSLineClamp",
status: "experimental",
},
{
name: "CSSLineClampLineBreakingEllipsis",
depends_on: ["CSSLineClamp"],
},
{
name: "CSSLogicalOverflow",
status: "test",
},
{
name: "CSSMarkerNestedPseudoElement",
status: "experimental",
},
{
name: "CSSMasonryLayout",
status: "test",
},
{
name: "CSSMixins",
status: "test",
},
{
name: "CSSNestedPseudoElements",
status: "experimental",
},
{
name: "CSSPaintAPIArguments",
status: "experimental",
},
{
// Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
// See crbug.com/1485525.
name: "CSSParserIgnoreCharsetForURLs",
},
{
name: "CSSPositionStickyStaticScrollPosition",
status: "test",
},
// https://drafts.csswg.org/css-values-5/#progress
// progress(), media-progress(), container-progress()
{
name: "CSSProgressNotation",
status: "experimental",
},
{
// For ::column pseudo element for fragment styling.
// https://github.com/flackr/carousel/blob/main/fragmentation/README.md
name: "CSSPseudoColumn",
status: "experimental",
},
{
// Enables the :has-slotted pseudo-selector.
// https://chromestatus.com/feature/5134941143433216
name: "CSSPseudoHasSlotted",
status: "experimental",
},
{
// Enables the :open pseudo-selector.
// https://chromestatus.com/feature/5085419215781888
name: "CSSPseudoOpen",
status: "stable",
},
{
// When an audio, video, or similar resource is "playing"
// or "paused".
// https://www.w3.org/TR/selectors-4/#video-state
name: "CSSPseudoPlayingPaused",
status: "test",
},
{
// 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/359616070
name: "CSSRelativeColorLateResolveAlways",
status: "experimental",
},
{
// crbug.com/365818844
name: "CSSRelativeColorPreserveNone",
status: "stable",
},
{
// crbug.com/325309578
name: "CSSRelativeColorSupportsCurrentcolor",
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",
},
{
// Enables env(safe-area-max-inset-*).
// https://github.com/w3c/csswg-drafts/issues/11019
name: "CSSSafeAreaMaxInset"
},
{
// The "@import scope(...)" syntax.
// https://github.com/w3c/csswg-drafts/issues/7348
name: "CSSScopeImport",
status: "experimental",
},
{
name: "CSSScrollableContainerQueries",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2#scroll-initial-target
name: "CSSScrollInitialTarget",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchange
name: "CSSScrollSnapChangeEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchanging
name: "CSSScrollSnapChangingEvent",
status: "stable",
},
{
// https://drafts.csswg.org/css-scroll-snap-2/#snap-events
name: "CSSScrollSnapEvents",
status: "stable",
implied_by: ["CSSScrollSnapChangeEvent", "CSSScrollSnapChangingEvent"],
},
{
// 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", "CSSSnapContainerQueries", "CSSScrollableContainerQueries"],
},
{
name: "CSSSelectorFragmentAnchor",
status: "experimental",
base_feature: "CssSelectorFragmentAnchor",
},
{
// https://drafts.csswg.org/css-shapes-2/#shape-function
name: "CSSShapeFunction",
status: "experimental",
},
{
name: "CSSShapeFunctionCompositeAnimation",
status: "experimental",
depends_on: ["CSSShapeFunction", "CompositeClipPathAnimation"]
},
{
// sibling-index() and sibling-count()
name: "CSSSiblingFunctions",
status: "experimental",
},
{
name: "CSSSignRelatedFunctions",
status: "experimental",
},
{
name: "CSSSnapContainerQueries",
status: "stable",
},
{
// Explainer: https://drafts.csswg.org/css-values/#round-func
name: "CSSSteppedValueFunctions",
status: "stable",
},
{
name: "CSSStickyContainerQueries",
status: "stable",
},
{
name: "CSSSupportsAtRuleFunction",
status: "experimental",
},
{
name: "CSSSupportsForImportRules",
status: "stable",
},
{
// Allows the CSS "accent-color" property to support the system accent color as the default option.
name: "CSSSystemAccentColor",
status: "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: "stable",
},
{
// crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
name: "CSSTextSpacing",
depends_on: ["CSSTextAutoSpace"],
},
{
// 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: "CSSViewTransitionAutoName",
status: "experimental",
depends_on: ["CSSViewTransitionMatchElement"],
},
{
// https://chromestatus.com/feature/5064894363992064
name: "CSSViewTransitionMatchElement",
status: "experimental"
},
{
name: "CursorAnchorInfoMojoPipe",
status: {
"Android": "stable",
"default": "",
}
},
{
// Adds the appearance:base-select CSS value which makes <select>
// rendering using alternate content in the UA shadowroot which is
// customizable.
name: "CustomizableSelect",
status: "experimental",
// SelectParserRelaxation is needed to allow more content in <select>
// than just <option>s etc.
depends_on: ["SelectParserRelaxation"],
},
{
// If a node within a customizable <select> doesn't obey the content model, an Issue is reported to DevTools so that web authors get more context on why this can impact the accessibility behavior of the <select>.
name: "CustomizableSelectElementAccessibilityIssues",
status: "experimental",
depends_on: ["CustomizableSelect"],
},
{
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: "DeviceAttributes",
status: {
"ChromeOS_Ash": "stable",
"default": "experimental",
},
},
{
name: "DeviceOrientationRequestPermission",
status: "experimental",
},
{
name: "DevicePosture",
status: "stable",
},
{
// This feature makes the <dialog> element close properly when its "open"
// attribute is removed. https://github.com/whatwg/html/issues/5802 and
// https://github.com/whatwg/html/pull/10124.
name: "DialogCloseWhenOpenRemoved",
status: "experimental",
},
{
// This feature makes the dialog element fire beforetoggle and toggle
// events every time it is closed or opened.
// https://bugs.chromium.org/p/chromium/issues/detail?id=1521813
name: "DialogElementToggleEvents",
status: "stable",
},
{
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",
// 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",
// crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
// so enable the API on all platforms for testing.
"default": "test"
},
},
{
name: "DirectSockets",
public: true,
status: "stable",
},
{
// 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 and
// DisableThirdPartyStoragePartitioning2 which expired in M132.
{
name: "DisableThirdPartyStoragePartitioning3",
origin_trial_feature_name: "DisableThirdPartyStoragePartitioning3",
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",
},
{
// 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,
},
{
// Scale very large height and width of HTML Element
// to allow DnD.
name: "DnDScaleHeightAndWidthToMaxDimension",
status: "stable",
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
// Enables DocumentIsolationPolicy.
// See https://https://github.com/WICG/document-isolation-policy.
name: "DocumentIsolationPolicy",
status: "experimental",
origin_trial_feature_name: "DocumentIsolationPolicy",
origin_trial_os: ["win", "mac", "linux", "chromeos"],
base_feature: "none",
},
{
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": "stable",
},
},
// Enables propagating user activation from a document picture-in-picture
// window up to its opener window and vice versa.
{
name: "DocumentPictureInPictureUserActivation",
status: {
"Android": "",
"default": "stable",
},
},
// Enables the ability to use Document Policy header to control feature
// DocumentDomain.
{
name: "DocumentPolicyDocumentDomain",
status: "experimental",
},
// Enables the ability to use Document Policy header to control feature
// ExpectNoLinkedResources.
{
name: "DocumentPolicyExpectNoLinkedResources",
status: "stable",
},
// Enables the ability to use Document Policy header to control feature
// IncludeJSCallStacksInCrashReports. https://chromestatus.com/feature/4731248572628992
{
name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
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",
},
{
name: "DocumentWrite",
},
{
// This is a flag for performance improvements that shipped in M134,
// for use as a kill-switch and for other finch measurement in Q2 2025.
name: "DOMInsertionFaster",
status: "stable",
},
{
name: "DOMPartsAPI",
status: "experimental",
implied_by: ["DOMPartsAPIMinimal"],
},
{
name: "DOMPartsAPIMinimal",
},
{
name: "DragImageNoNodeId",
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"]
},
{
// Fix for https://crbug.com/40821646. When enabled, it prevents
// returning empty position when the position's anchor node is not
// a descendant of the anchor's highest editable root.
name: "EditableBoundaryAdjustment",
status: "stable",
},
{
name: "ElementCapture",
status: {"Android": "", "default": "stable"},
},
{
name: "ElementInnerTextHandleFirstLineStyle",
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: "stable",
},
{
name: "EventTimingInteractionCount",
status: "experimental",
},
{
// Event Timings should not get interactionId assigned if the next paint
// was affected by autoscroll, i.e. from text selection.
name: "EventTimingSelectionAutoScrollNoInteractionId",
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: "ExposeCoarsenedRenderTime",
status: "stable",
},
{
name: "ExposeCSSFontFeatureValuesRule",
status: "stable",
},
{
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",
"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",
},
// Kill switch.
{
name: "FastClearNeedsRepaint",
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: "stable",
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: "stable",
base_feature: "none",
origin_trial_feature_name: "FedCmButtonMode",
origin_trial_allows_third_party: true,
},
{
name: "FedCmDelegation",
depends_on: ["FedCm"],
public: true,
status: "test",
base_feature: "none",
},
{
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: "FedCmLightweightMode",
depends_on: ["FedCm"],
status: "test",
public: true,
base_feature: "none",
},
{
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: "stable",
},
{
name: "FencedFrames",
base_feature: "none",
// This helps enable and expose the <fencedframe> element, but note that
// blink::features::kFencedFrames must be enabled as well, as we require
// the support of the browser process to fully enable the feature.
// Enabling this runtime enabled feature alone has no effect.
public: true,
status: "stable",
},
{
name: "FencedFramesAPIChanges",
// Various new IDL attributes on the <fencedframe> element (such as
// `config`, `sandbox`, and `allow`).
base_feature_status: "enabled",
copied_from_base_feature_if: "enabled_or_overridden",
status: "stable",
},
{
name: "FencedFramesDefaultMode",
base_feature_status: "disabled",
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
// Allows fenced frames to access unpartioned data via Shared Storage in
// exchange for disabling untrusted network access. This is the Blink
// counterpart of the base::Feature with the same name. Because local
// unpartitioned data access requires browser and renderer process
// coordination, the value of this flag is strictly controlled by the
// base::Feature variant, and setting this flag does nothing.
name: "FencedFramesLocalUnpartitionedDataAccess",
base_feature: "none",
public: true,
},
{
// Add Request.bytes() and Response.bytes()
// https://chromestatus.com/feature/5239268180754432
name: "FetchBodyBytes",
status: "stable",
},
{
// The Blink runtime-enabled feature name for the API's IDL.
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",
"default": "",
}
},
{
// Non-OPFS File System Access API.
name: "FileSystemAccessLocal",
status: {"default": "stable"},
},
{
name: "FileSystemAccessLockingScheme",
status: "stable",
},
{
// OPFS File System Access API.
name: "FileSystemAccessOriginPrivate",
status: "stable",
},
{
// The FileSystemObserver interface for the File System Access API.
// See https://crbug.com/1019297.
name: "FileSystemObserver",
depends_on: ["FileSystemAccess"],
status: {
"Android": "experimental",
"iOS": "experimental",
"default": "stable",
},
},
{
// The unobserve function of the FileSystemObserver.
// See https://crbug.com/321980469.
name: "FileSystemObserverUnobserve",
status: "experimental",
},
{
// crbug.com/40755728
name: "FindRubyInPage",
status: "stable",
},
{
name: "FindTextInReadonlyTextInput",
status: "experimental",
},
{
name: "Fledge",
status: "stable",
base_feature: "none",
public: true,
},
{
// Enables deal support within auctions.
name: "FledgeAuctionDealSupport",
status: "test",
},
{
name: "FledgeBiddingAndAuctionServerAPI",
origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
origin_trial_allows_third_party: true,
base_feature: "none",
status: "stable",
},
{
name: "FledgeBiddingAndAuctionServerAPIMultiSeller",
},
{
name: "FledgeCustomMaxAuctionAdComponents",
status: "stable",
},
{
// Enables using a 'deprecatedRenderURLReplacements' field within the
// Protected Audience ad auction config.
name: "FledgeDeprecatedRenderURLReplacements",
public: true,
status: "stable",
},
{
name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
status: "stable",
},
{
// Feature flag to control removal, in case we run into unexpected
// breakage.
//
// TODO(crbug.com/384481095): Remove in a few milestones, along with the
// implementation code.
name: "FledgeDirectFromSellerSignalsWebBundles",
},
{
name: "FledgeMultiBid",
public: true,
status: "stable",
},
{
// Enables the private model training API in Protected Audience.
// https://github.com/WICG/turtledove/blob/main/PA_private_model_training.md
name: "FledgePrivateModelTraining",
status: "test",
},
{
// Enables real time reporting API in Protected Audience.
// https://github.com/WICG/turtledove/blob/main/PA_real_time_monitoring.md
name: "FledgeRealTimeReporting",
public: true,
status: "stable",
},
{
// Enables using a 'reportingTimeout' field within the Protected Audience
// ad auction config.
name: "FledgeReportingTimeout",
status: "stable",
},
{
// Enables the ability to set seller nonces on the header response and
// use bidNonce in bids.
name: "FledgeSellerNonce",
status: "stable",
},
{
name: "FledgeTrustedSignalsKVv1CreativeScanning",
status: "test",
},
{
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",
status: "stable",
},
{
name: "FontationsForSelectedFormats",
status: "stable",
},
{
name: "FontFamilyPostscriptMatchingCTMigration",
},
{
name: "FontFamilyStyleMatchingCTMigration",
},
{
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: "stable",
},
{
name: "FontVariationSequences",
status: "stable",
},
{
// TODO(crbug.com/1231644): This flag is being kept (even though the
// feature has shipped) until there are settings to allow users to
// customize the feature.
name: "ForcedColors",
public: true,
status: "stable",
base_feature: "none",
},
{
// This is used in tests to perform memory measurement without
// waiting for GC.
name:"ForceEagerMeasureMemory",
},
{
// https://github.com/flackr/reduce-motion/blob/main/explainer.md
name: "ForceReduceMotion",
},
{
name: "ForceTallerSelectPopup",
status: {"ChromeOS_Ash": "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",
},
{
// TODO(crbug.com/389587444): Remove this feature after M134 is stable.
// Form-associated custom elements should check isFocusable on the
// focus delegate if the shadow host has delegatesFocus=true.
name: "FormValidationCustomElementsDelegatesFocusFix",
status: "stable",
},
{
name: "FractionalScrollOffsets",
base_feature: "none",
public: true,
},
{
name: "FreezeFramesOnVisibility",
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: "GetComputedStyleOutsideFlatTree",
status: "stable",
},
{
name: "GetDisplayMedia",
public: true,
status: {
"Android": "experimental",
"default": "stable",
},
base_feature: "none",
},
{
name: "GetDisplayMediaRequiresUserActivation",
depends_on: ["GetDisplayMedia"],
status: "experimental",
},
{
name: "GroupEffect",
status: "test",
},
{
name: "HandwritingRecognition",
status: {
"ChromeOS_Ash": "stable",
"default": "experimental",
},
},
{
name: "HasUAVisualTransition",
status: "stable",
},
{
name: "HighlightInheritance",
status: "stable",
},
{
name: "HighlightPointerEvents",
},
{
name: "HighlightsFromPoint",
},
{
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",
},
{
// TODO(crbug.com/376516550): Enables dialog light dismiss functionality.
// This feature shipped in M134, so this flag can be removed in M136.
name: "HTMLDialogLightDismiss",
status: "stable",
},
// The `<embed>` should follow the specification, layout is not forced
// when the `type` attribute is set to `image`.
// https://html.spec.whatwg.org/C/#the-embed-element
// This feature was shipped in M131, so this flag can be removed in M133.
{
name: "HTMLEmbedElementNotForceLayout",
status: "stable",
},
// The width attribute on the hr element, previously converted 0 values to 1px.
// This will ship in M133, so should be safe to remove in M135.
{
name: "HTMLHRWidthAllowZero",
status: "stable"
},
// Return a natural width/height of zero from
// HTMLImageElement.naturalWidth/Height for SVG images that don't have a
// natural width/height set.
{
name: "HTMLImageElementActualNaturalSize",
status: "test",
},
// Adds support for the 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: "test",
},
// 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",
},
{
// TODO(crbug.com/1416284): Enables popover=hint functionality.
// This shipped in M133, and this flag can be removed in M135.
name: "HTMLPopoverHint",
status: "stable",
},
{
name: "HTMLSelectElementShowPicker",
status: "stable",
},
{
name: "ImageDataPixelFormat",
status: "experimental",
},
{
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"
},
// This ensures that list element tag is included in extended selection.
// https://crbug.com/40658772
{
name: "IncludeListElementTagInExtendedSelection",
status: "stable",
},
// This ensures that table tag is included in extended selection.
// https://crbug.com/40833812
{
name: "IncludeTableTagInExtendedSelection",
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: "IndexedDbGetAllRecords",
status: "experimental",
},
{
name: "InertElementNonEditable",
status: "stable",
},
{
// If a painting bug no longer reproduces with this feature enabled, then
// the bug is caused by incorrect cull rects.
name: "InfiniteCullRect",
},
{
name: "InheritUserModifyWithoutContenteditable",
status: "stable",
},
{
// crbug.com/370217727
name: "InitialLetterRaiseBySpecified",
status: "stable",
},
{
name: "InlineBlockInSameLine",
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",
},
{
// Makes the HTML parser close <select> tags before inserting <input>
// tags to match the old parser behavior in case we have compat issues
// launching SelectParserRelaxation. If SelectParserRelaxation stays
// stable in M131, then this flag can be removed in M133.
name: "InputClosesSelect",
depends_on: ["SelectParserRelaxation"],
},
{
name: "InputEventConstructorThrows",
status: "stable",
},
{
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",
},
{
name: "InsertLineBreakIfInlineListItem",
status: "stable",
},
{
// crbug.com/1420675
name: "InsertLineBreakIfPhrasingContent",
status: {"Android": "test", "default": "stable"},
},
{
// Improved support for debugging CSSNestedDeclarations.
name: "InspectorGhostRules",
},
{
name: "InstalledApp",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "InstallOnDeviceSpeechRecognition",
},
{
name: "InterestGroupsInSharedStorageWorklet",
public: true,
status: "stable",
},
{
name: "InteroperablePrivateAttribution",
status: "experimental",
},
{
// If enabled, IntersectionObserverScrollMargin will be parsed.
name: "IntersectionObserverScrollMargin",
status: "stable",
},
{
name: "InvertedColors",
status: "experimental",
},
{
name: "InvisibleSVGAnimationThrottling",
status: "stable",
},
{
name: "IsSecurePaymentConfirmationAvailableAPI",
status: "experimental",
},
{
name: "JavaScriptCompileHintsMagicAlwaysRuntime",
status: "experimental",
origin_trial_feature_name: "JavaScriptCompileHintsMagicAlways",
},
{
name: "JavaScriptCompileHintsMagicRuntime",
status: "experimental",
origin_trial_feature_name: "JavaScriptCompileHintsMagic",
},
{
name: "KeyboardAccessibleTooltip",
status: "experimental",
base_feature: "none",
},
{
// TODO(crbug.com/40113891): This feature allows scrollers to be
// keyboard focusable by default. This was enabled by default in M130,
// but this flag should not be removed until the origin trial and
// enterprise policies have both expired. See the
// KeyboardFocusableScrollersOptOut flag.
name: "KeyboardFocusableScrollers",
status: "stable",
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,
},
{
name: "LangAttributeAwareFormControlUI",
settable_from_internals: true,
},
{
name: "LanguageDetectionAPI",
status: "experimental",
origin_trial_feature_name: "LanguageDetectionAPI",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
name: "LayoutDisableWebkitBoxQuirks",
status: "stable",
},
{
name: "LayoutFlexNewRowAlgorithmV3",
status: "test",
},
{
name: "LayoutIgnoreMarginsForSticky",
},
{
name: "LayoutImageForceAspectRatioOfOneOnError",
},
{
name: "LayoutJustifySelfForBlocks",
status: "stable",
},
{
name: "LayoutNGShapeCache",
status: "test",
base_feature: "LayoutNGShapeCache",
},
{
name: "LayoutStretch",
status: "experimental",
},
{
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: "LimitThirdPartyCookies",
origin_trial_feature_name: "LimitThirdPartyCookies",
status: "experimental",
base_feature: "none",
},
{
// crbug.com/365814218
name: "LineBoxBelowLeadingFloats",
status: "stable",
},
{
name: "ListItemWithCounterSetNotSetExplicitValue",
status: "stable",
},
{
name: "LockedMode",
status: "test",
// Enabled by features::kLockedMode.
public: true,
},
{
// Enable sourceCharPosition for the invoke-type resolve-promise
// https://issues.chromium.org/issues/381529126
name: "LongAnimationFrameSourceCharPosition",
status: "experimental",
},
{
// 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: "MachineLearningNeuralNetwork",
// Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork.
base_feature: "none",
},
{
name: "ManagedConfiguration",
status: "stable",
},
{
name:"MeasureMemory",
status:"stable",
},
{
name: "MediaCapabilitiesEncodingInfo",
status: "experimental",
},
{
name: "MediaCapabilitiesSpatialAudio",
status: "test",
},
{
name: "MediaCapture",
status: {"Android": "stable"},
},
{
name: "MediaCaptureBackgroundBlur",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureCameraControls"],
base_feature: "none",
},
{
name: "MediaCaptureCameraControls",
status: "experimental",
},
{
name: "MediaCaptureConfigurationChange",
origin_trial_feature_name: "MediaCaptureBackgroundBlur",
status: "experimental",
implied_by: ["MediaCaptureBackgroundBlur"],
base_feature: "none",
},
{
name: "MediaCaptureVoiceIsolation",
status: "experimental",
},
// 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",
},
// 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,
},
{
// Fix HandleMouseFocus and FrameSelection to use FlatTree parent so
// correct fallback element receives focus.
// See https://crbug.com/41420461
// This feature was shipped in M133, so this flag can be removed in M135.
name: "MouseFocusFlatTreeParent",
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: "MultipleImportMaps",
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/removal
// of Mutation Events. Timeline summary:
// - Events disabled for the open web: M127 (July 23, 2024)
// - Reminder email sent to all Origin trial registrants: December 12, 2024
// - Origin trial disabled: M135 (April 1, 2025)
// - Enterprise policy disabled: {not yet}
// - Flag/code can be removed: {2 milestones after EP removal}
{
name: "MutationEvents",
public: true,
},
{
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",
"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",
},
{
// crbug.com/376097115
name: "NoCollapseSpaceBeforeRuby",
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",
},
// Doesn't insert empty blockquotes on outdenting a blockquote. See
// https://crbug.com/323960902
{
name: "NonEmptyBlockquotesOnOutdenting",
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: "OffscreenCanvasGetContextAttributes",
status: "stable",
},
{
name: "OmitBlurEventOnElementRemoval",
status: "test"
},
{
name: "OnDeviceChange",
status: "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",
public: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIBrowserReadWrite",
base_feature: "none",
origin_trial_feature_name: "FrobulateBrowserReadWrite",
browser_process_read_write_access: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
// TODO(yashard): Add tests for this feature.
{
name: "OriginTrialsSampleAPIDependent",
depends_on: ["OriginTrialsSampleAPI"],
base_feature: "none",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIDeprecation",
base_feature: "none",
origin_trial_feature_name: "FrobulateDeprecation",
origin_trial_type: "deprecation",
origin_trial_allows_insecure: true,
public: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIExpiryGracePeriod",
base_feature: "none",
origin_trial_feature_name: "FrobulateExpiryGracePeriod",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIExpiryGracePeriodThirdParty",
base_feature: "none",
origin_trial_feature_name: "FrobulateExpiryGracePeriodThirdParty",
origin_trial_allows_third_party: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIImplied",
base_feature: "none",
origin_trial_feature_name: "FrobulateImplied",
implied_by: ["OriginTrialsSampleAPI", "OriginTrialsSampleAPIInvalidOS"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIInvalidOS",
base_feature: "none",
origin_trial_feature_name: "FrobulateInvalidOS",
origin_trial_os: ["invalid"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPINavigation",
base_feature: "none",
origin_trial_feature_name: "FrobulateNavigation",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentExpiryGracePeriod",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentExpiryGracePeriod",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentFeature",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistent",
origin_trial_allows_third_party: true,
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentInvalidOS",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentInvalidOS",
origin_trial_allows_third_party: true,
origin_trial_os: ["invalid"],
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIPersistentThirdPartyDeprecationFeature",
base_feature: "none",
origin_trial_feature_name: "FrobulatePersistentThirdPartyDeprecation",
origin_trial_allows_third_party: true,
origin_trial_type: "deprecation",
},
// As above. Do not change this flag to stable, as it exists solely to
// generate code used by the origin trials sample API implementation.
{
name: "OriginTrialsSampleAPIThirdParty",
base_feature: "none",
origin_trial_feature_name: "FrobulateThirdParty",
origin_trial_allows_third_party: true,
},
{
name: "OverscrollCustomization",
status: "experimental",
},
// Support for page margin boxes.
// https://www.w3.org/TR/css-page-3/#margin-boxes
{
name: "PageMarginBoxes",
status: "stable",
},
{
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",
},
// Kill switch.
{
name: "PaintLayerUpdateOptimizations",
status: "stable",
},
{
name: "PaintTimingMixin",
status: "experimental",
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
// PARAKEET ad serving runtime flag/JS API.
name: "Parakeet",
origin_trial_feature_name: "Parakeet",
},
{
name: "PartitionedPopins",
status: "experimental",
},
{
name: "PartitionVisitedLinkDatabaseWithSelfLinks",
status: {"iOS": "", "default": "experimental"},
},
// This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
{
name: "PasswordReveal",
},
{
// https://crbug.com/41247646
name: "PasteListItemOutsidePreviousListItem",
status: "stable",
},
{
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: "PerformanceManagerInstrumentation",
base_feature: "none",
public: true,
},
{
// Enables performance.mark('mark_feature_usage'): crbug.com/1517170
name: "PerformanceMarkFeatureUsage",
status: "experimental"
},
{
name: "PerformanceNavigateSystemEntropy",
status: "experimental",
},
{
name: "PerformanceNavigationTimingConfidence",
status: "experimental",
},
{
name: "PeriodicBackgroundSync",
public: true,
status: "stable",
base_feature: "none",
},
{
name: "PerMethodCanMakePaymentQuota",
origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
status: "experimental",
base_feature: "none",
},
{
// Tracking bug for the implementation: https://crbug.com/1462930
name: "PermissionElement",
origin_trial_feature_name: "PermissionElement",
origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos", "android"],
status: "experimental",
public: true,
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
},
{
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",
public: true,
},
{
name: "PointerEventDeviceId",
status: "stable",
},
// Coalesced/predicted event targets in untrusted events.
// See https://crbug.com/353538500
{
name: "PointerEventTargetsInEventLists",
status: "stable",
},
// TODO(crbug.com/364669918) This enables these two new functionalities:
// 1. add an imperative way to set invoker relationships between popovers.
// 2. invoker relationships create implicit anchor element references.
// This was shipped in M133, and this flag can be removed in M135.
{
name: "PopoverAnchorRelationships",
status: "stable",
},
// TODO(crbug.com/379241451): This controls the behavior when a popover is
// nested inside an invoker button. This was shipped in M133, and this flag
// can be removed in M135.
{
name: "PopoverButtonNestingBehavior",
status: "stable",
},
{
name: "PositionOutsideTabSpanCheckSiblingNode",
status: "stable",
},
{
name: "PotentialPermissionsPolicyReporting",
status: "experimental",
},
{
name: "PreciseMemoryInfo",
base_feature: "none",
public: true,
},
// Adds a web setting to disable CSS ScrollbarColor, ScrollbarWidth, and
// legacy ::-webkit-scrollbar* pseudo element styling.
{
name: "PreferDefaultScrollbarStyles",
},
// Prefer not using composited scrolling. Composited scrolling will still
// be used if there are other reasons forcing compositing. For consistency,
// any code calling Settings::GetPreferCompositingToLCDTextEnabled() should
// ensure that this flag overrides the setting.
{
name: "PreferNonCompositedScrolling",
settable_from_internals: true,
},
{
name: "PreferredAudioOutputDevices",
status: "test",
},
{
name: "PrefersReducedData",
status: "experimental",
},
{
// Used to allow preloading data: URLs with link rel=preload.
name: "PreloadLinkRelDataUrls",
},
{
// 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",
},
{