chromium/third_party/blink/renderer/platform/runtime_enabled_features.json5

{
  // See third_party/blink/renderer/platform/RuntimeEnabledFeatures.md
  //
  // This list is used to generate runtime_enabled_features.h/cc which contains
  // a class that stores static enablers for all experimental features.

  parameters: {
    // Each feature can be assigned a "status". The "status" can be either
    // one of the values in the |valid_values| list or a dictionary of
    // the platforms listed in |valid_keys| to |valid_values|.
    // Use "default" as the key if you want to specify the status of
    // the platforms other than the ones declared in the dictionary.
    // ** Omitting "default" means the feature is not enabled on
    // the platforms not listed in the status dictionary
    //
    // Definition of each status:
    // * status=stable: Enable this in all Blink configurations. We are
    //   committed to these APIs indefinitely.
    // * status=experimental: In-progress features, Web Developers might play
    //   with, but are not on by default in stable. These features may be
    //   turned on using the "Experimental Web Platform features" flag in
    //   chrome://flags/#enable-experimental-web-platform-features.
    // * status=test: Enabled in ContentShell for testing, otherwise off.
    // Features without a status are not enabled anywhere by default.
    //
    // Example of the dictionary value use:
    // {
    //   name: "ExampleFeature",
    //   status: {"Android": "stable", "Win": "experimental"},
    // }
    // "ExampleFeature" will be stable on Android/WebView/WebLayer, experimental
    // on Windows and not enabled on any other platform.
    //
    // Note that the Android status key implies Chrome for Android, WebView and
    // WebLayer.
    //
    // "stable" features listed here should be rare, as anything which we've
    // shipped stable can have its runtime flag removed soon after.
    status: {
      valid_values: ["stable", "experimental", "test"],
      valid_keys: ["Android", "Win", "ChromeOS_Ash", "ChromeOS_Lacros", "Mac", "Linux", "iOS"]
    },

    // "implied_by" or "depends_on" specifies relationship to other features:
    // * implied_by: ["feature1","feature2",...]
    //   The feature is automatically enabled if any implied_by features is
    //   enabled. To effectively disable the feature, you must disable the
    //   feature and all the implied_by features.
    // * depends_on: ["feature1","feature2",...]
    //   The feature can be enabled only if all depends_on features are enabled.
    // Only one of "implied_by" and "depends_on" can be specified.
    implied_by: {
      default: [],
      valid_type: "list",
    },

    // *DO NOT* specify features that depend on origin trial features.
    // It is NOT supported. As a workaround, you can either specify the same
    // |origin_trial_feature_name| for the feature or add the OT feature to
    // the |implied_by| list.
    // TODO(https://crbug.com/954679): Add support for origin trial features in 'depends_on' list
    depends_on: {
      default: [],
      valid_type: "list",
    },

    // origin_trial_feature_name: "FEATURE_NAME" is used to integrate the
    // feature with the Origin Trials framework. The framework allows the
    // feature to be enabled at runtime on a per-page basis through a signed
    // token for the corresponding feature name. Declaring the
    // origin_trial_feature_name will modify the generation of the static
    // methods in runtime_enabled_features.h/cpp -- the no-parameter version
    // will not be generated, so all callers have to use the version that takes
    // a const FeatureContext* argument.
    origin_trial_feature_name: {
    },
    // origin_trial_os specifies the platforms where the trial is available.
    // The default is empty, meaning all platforms.
    origin_trial_os: {
      default: [],
      valid_type: "list",
    },
    // origin_trial_type specifies the unique type of the trial, when not the
    // usual trial for a new experimental feature.
    origin_trial_type: {
      default: "",
      valid_type: "str",
      valid_values: ["deprecation", "intervention", ""],
    },
    // origin_trial_allows_insecure specifies whether the trial can be enabled
    // in an insecure context, with default being false. This can only be set
    // to true for a "deprecation" type trial.
    origin_trial_allows_insecure: {
      valid_type: "bool",
    },

    // origin_trial_allows_third_party specifies whether the trial can be enabled
    // from third party origins, with default being false.
    origin_trial_allows_third_party: {
      valid_type: "bool",
    },

    // settable_from_internals specifies whether a feature can be set from
    // internals.runtimeFlags, with the default being false.
    settable_from_internals: {
      valid_type: "bool",
    },

    // public specifies whether a feature can be accessed via
    // third_party/blink/public/platform/web_runtime_features.h with dedicated
    // methods. The default is false. This should be rare because
    // WebRuntimeFeatures::EnableFeatureFromString() works in most cases.
    public: {
      valid_type: "bool",
    },

    // Feature policy IDL extended attribute (see crrev.com/2247923004).
    feature_policy: {
    },

    // The string name of a base::Feature. The C++ variable name in
    // blink::features is built with this string by prepending 'k'.
    // As long as this field isn't "none", a base::Feature is automatically
    // generated in features_generated.{h,cc}.  By default the "name" field
    // is used for the feature name, but can be overridden here.
    //
    // The default value of the base::Feature instance is:
    //  base::FEATURE_ENABLED_BY_DEFAULT if 'status' field is 'stable", and
    //  base::FEATURE_DISABLED_BY_DEFAULT otherwise.
    // It can be overridden by 'base_feature_status' field.
    //
    // If the flag should be associated with a feature not in blink::features,
    // we need to specify `base_feature: "none"` and map the features in
    // content/child/runtime_features.cc. `base_feature: "none"` is strongly
    // discouraged if the feature doesn't have an associated base feature
    // because the feature would lack a killswitch controllable via finch.
    base_feature: {
      valid_type: "str",
      default: "",
    },

    // Specify the default value of the base::Feature instance. This field
    // works only if base_feature is not "none".
    // If the field is missing or "", the default value depends on the 'status'
    // field.  See the comment above.
    // "disabled" sets base::FEATURE_DISABLED_BY_DEFAULT, and "enabled" sets
    // base::FEATURE_ENABLED_BY_DEFAULT.
    base_feature_status: {
      valid_type: "str",
      valid_values: ["", "disabled", "enabled"],
      default: "",
    },

    // Specify how the flag value is updated from the base::Feature value. This
    // field is used only if base_feature is not empty.
    //
    // * "enabled_or_overridden"
    // - If the base::Feature status is overridden to the enabled or disabled
    //   state by field trial or command line, set Blink feature to the state
    //   of the base::Feature.  Note: "Override to Default" doesn't affect the
    //   Blink feature.
    // - Otherwise if the base::Feature is enabled, enable the Blink feature.
    // - Otherwise no change.
    //
    // * "overridden"
    //   Enables the Blink feature when the base::Feature status is overridden
    //   to the enabled or disabled state by field trial or command line.
    //   Otherwise no change. Its difference from "enabled_or_overridden" is
    //   that the Blink feature isn't affected by the default state of the
    //   base::Feature.  Note: "Override to Default" deosn't affect the Blink
    //   feature.
    //
    //   This is useful for Blink origin trial features especially those
    //   implemented in both Chromium and Blink. As origin trial only controls
    //   the Blink features, for now we require the base::Feature to be enabled
    //   by default, but we don't want the default enabled status affect the
    //   Blink feature. See also https://crbug.com/1048656#c10.
    //   This can also be used for features that are enabled by default in
    //   Chromium but not in Blink on all platforms and we want to use the Blink
    //   status. However, we would prefer consistent Chromium and Blink status
    //   to this.
    copied_from_base_feature_if: {
      valid_type: "str",
      valid_values: ["enabled_or_overridden", "overridden"],
      default: "enabled_or_overridden",
    },

    // browser_process_read_access indicates the runtime feature state should be
    // readable in the browserprocess via RuntimeFeatureStateReadContext.
    // TODO(crbug.com/1377000): this feature does not support origin trial
    // tokens provided in HTTP headers. Any tokens provided via HTTP header will
    // be dropped.
    browser_process_read_access: {
      default: false,
      value_type: "bool",
    },

    // browser_process_read_write_access indicates the runtime feature state
    // should be writable in the browserprocess via RuntimeFeatureStateContext.
    // TODO(crbug.com/1377000): this feature does not support origin trial
    // tokens provided in HTTP headers. Any tokens provided via HTTP header will
    // be dropped.
    browser_process_read_write_access: {
      default: false,
      value_type: "bool",
    },

    // is_protected_feature indicates whether the feature enablement state should
    // be tracked using a base::Protected<bool> value or just a regular bool
    // value.
    is_protected_feature: {
      default: false,
      value_type: "bool",
    }
  },

  data: [
    {
      name: "Accelerated2dCanvas",
      settable_from_internals: true,
      status: "stable",
    },
    {
      name: "AcceleratedSmallCanvases",
      status: "stable",
    },
    {
      name: "AccessibilityAriaVirtualContent",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "AccessibilityExposeDisplayNone",
      status: "test",
    },
    {
      // Use a minimum role of group on elements that are keyboard-focusable.
      // See https://w3c.github.io/html-aam/#minimum-role.
      name: "AccessibilityMinRoleTabbable",
    },
    {
      name: "AccessibilityObjectModel",
      status: "experimental",
    },
    {
      name: "AccessibilityOSLevelBoldText",
      status: "experimental",
      public: true,
    },
    {
      name: "AccessibilityPageZoom",
      base_feature: "none",
      public: true,
    },
    {
      // Enforce no accessible name on objects that have a role where names are
      // prohibited (listed in https://w3c.github.io/aria/#namefromprohibited):
      // log a friendly error in the developer console, and trigger a DCHECK().
      // The incorrect markup situation will be repaired, and the name will
      // be exposed as a description instead.
      // TODO(crbug.com/350528330,
      // https://github.com/web-platform-tests/interop-accessibility/issues/133,
      // https://github.com/w3c/accname/issues/240,
      // https://github.com/w3c/accname/issues/241): If community feedback is
      // positive, and WPT + accname testable statements are updated to allow
      // this, then add status: test.
      name: "AccessibilityProhibitedNames",
    },
    {
      name: "AccessibilitySerializationSizeMetrics",
      status: "experimental",
    },
    {
      name: "AccessibilityUseAXPositionForDocumentMarkers",
      base_feature: "none",
      public: true,
    },
    {
      name: "AddressSpace",
      status: "experimental",
      implied_by: ["CorsRFC1918"],
    },
    {
      // Interest Group JS API/runtimeflag.
      name: "AdInterestGroupAPI",
      status: "stable",
      origin_trial_feature_name: "AdInterestGroupAPI",
      implied_by: ["Fledge", "Parakeet"],
      public: true,
    },
    // Adjust the end of the next paragraph if the end position for the
    // paragraph is updated while moving the paragraph. See
    // https://crbug.com/329121649
    {
      name: "AdjustEndOfNextParagraphIfMovedParagraphIsUpdated",
      status: "stable",
    },
    {
      name: "AdTagging",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "AIPromptAPI",
      status: "test",
      base_feature: "EnableAIPromptAPI",
    },
    {
      name: "AIRewriterAPI",
      status: "test",
      base_feature: "EnableAIRewriterAPI",
    },
    {
      name: "AISummarizationAPI",
      status: "test",
      base_feature: "EnableAISummarizationAPI",
    },
    {
      name: "AIWriterAPI",
      status: "test",
      base_feature: "EnableAIWriterAPI",
    },
    {
      name: "AllowContentInitiatedDataUrlNavigations",
      base_feature: "none",
    },
    // If enabled, blink will not set the autofill state of a field after JS
    // modifies its value, and will instead leave it to the WebAutofillClient to
    // take care of the state setting.
    // This feature should be enabled with
    // autofill::features::kAutofillFixCachingOnJavaScriptChanges.
    {
      name: "AllowJavaScriptToResetAutofillState",
      status: "experimental",
    },
    {
      name: "AllowURNsInIframes",
      base_feature: "none",
    },
    {
      name: "AndroidDownloadableFontsMatching",
      base_feature: "none",
      public: true,
    },
    {
      name: "AnimationProgressAPI",
      status: "test",
    },
    {
      name: "AnimationWorklet",
    },
    {
      name: "AnonymousIframe",
      status: "stable",
    },
    {
      name: "AOMAriaRelationshipProperties",
      public: true,
      status: "experimental",
    },
    {
      name: "AppTitle",
      status: "experimental",
      origin_trial_feature_name: "AppTitle",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      base_feature: "WebAppEnableAppTitle",
    },
    {
      name: "AriaNotify",
      status: "test",
    },
    {
      name: "AriaRowColIndexText",
      status: "stable",
    },
    // See https://crbug.com/40150299, and
    // https://github.com/whatwg/dom/issues/1255.
    {
      name: "AtomicMoveAPI",
      status: "test",
    },
    {
      name: "AttributionReporting",
      status: "stable",
      base_feature: "none",
      public: true,
    },
    {
      name: "AttributionReportingCrossAppWeb",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      // This only exists so we can use RuntimeEnabled in the IDL file
      // when either implied_by flag is enabled.
      name: "AttributionReportingInterface",
      // This is not going into origin trial, "origin_trial_feature_name" is
      // required for using the "implied_by" behaviour.
      origin_trial_feature_name: "AttributionReportingInterface",
      origin_trial_allows_third_party: true,
      implied_by: ["AttributionReporting", "AttributionReportingCrossAppWeb"],
      base_feature: "none",
    },
    {
      name: "AudioContextOnError",
      status: "stable",
    },
    {
      // AudioContext.playoutStats interface.
      // https://chromestatus.com/feature/5172818344148992
      name: "AudioContextPlayoutStats",
      status: "experimental",
    },
    {
      name: "AudioContextSetSinkId",
      status: "stable",
    },
    {
      name: "AudioOutputDevices",
      // Android does not yet support switching of audio output devices
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "AudioVideoTracks",
      status: "experimental",
    },
    // Killswitch. Remove after 1 or 2 stable releases.
    {
      name: "AuraScrollbarUsesNinePatchTrack",
      status: "stable",
    },
    // Killswitch. Remove after 1 or 2 stable releases.
    {
      name: "AuraScrollbarUsesSolidColorThumb",
      status: "stable",
    },
    {
      name: "AutoDarkMode",
      base_feature: "none",
      origin_trial_feature_name: "AutoDarkMode",
    },
    {
      name: "AutomationControlled",
      base_feature: "none",
      public: true,
      settable_from_internals: true,
    },
    {
      name: "AutoPictureInPictureVideoHeuristics",
      status: "experimental",
    },
    {
      // If enabled, lazy loaded images can be auto sized if the sizes
      // attribute is missing or set to auto.
      name: "AutoSizeLazyLoadedImages",
      status: "stable",
    },
    // When enabled, enforces new interoperable semantics for 3D transforms.
    // See crbug.com/1008483.
    {
      name: "BackfaceVisibilityInterop",
    },
    {
      name: "BackForwardCache",
      base_feature: "none",
      public: true,
    },
    {
      name: "BackForwardCacheExperimentHTTPHeader",
      origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "BackForwardCacheNotRestoredReasons",
      status: "stable",
      origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
      base_feature: "BackForwardCacheSendNotRestoredReasons",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      // Used to enable Blink side of features flags for Default Nav Transition.
      name: "BackForwardTransitions",
    },
    {
      name: "BackgroundFetch",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "BarcodeDetector",
      status: {
        // Built-in barcode detection APIs are only available from some
        // platforms. See //services/shape_detection.
        "Android": "stable",
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "Mac": "stable",
        "default": "test",
      },
    },
    {
      // When the <base> element href attribute scheme is "data" or "javascript",
      // set element's frozen base URL to document's fallback base URL.
      // This feature was shipped in M129, so this flag can be removed in M131.
      name: "BaseElementUrlUseFallback",
      status: "stable",
    },
    {
      // TODO(crbug.com/40586353) There are two different code changes guarded
      // by this feature, both related to triggering a beforeunload cancel
      // dialog.
      //  1. If event.preventDefault() is called, prompt cancel dialog.
      //  2. If event.returnValue is the empty string, do not prompt cancel
      //     dialog.
      // This flag was shipped to stable in M117, but there is an enterprise
      // policy that allows this flag to be force-diabled. As a result, this
      // flag should not be removed until at least M132.
      // The enterprise policy has an extended expiration date of M130:
      // https://groups.google.com/a/chromium.org/g/chromium-enterprise/c/52qHFoQF_mw/m/gw7e6qPlAAAJ
      name: "BeforeunloadEventCancelByPreventDefault",
      status: "stable",
      public: true,
    },
    {
      name: "BidiCaretAffinity",
    },
    {
      name: "BlinkExtensionChromeOS",
      browser_process_read_write_access: true,
    },
    {
      name: "BlinkExtensionChromeOSKiosk",
      depends_on: ["BlinkExtensionChromeOS"],
      browser_process_read_write_access: true,
    },
    {
      name: "BlinkExtensionDiagnostics",
      depends_on: ["BlinkExtensionChromeOS"],
      browser_process_read_write_access: true,
      base_feature: "none",
    },
    {
      name: "BlinkExtensionWebView",
      public: true,
    },
    {
      name: "BlinkExtensionWebViewMediaIntegrity",
      public: true,
    },
    {
      name: "BlinkLifecycleScriptForbidden",
    },
    {
      name: "BlinkRuntimeCallStats",
    },
    {
      name: "BlockingFocusWithoutUserActivation",
      status: "experimental",
    },
    // crbug.com/1147998: Mouse and Pointer boundary event dispatch (i.e. dispatch
    // of enter, leave, over, out events) tracks DOM node removal to fix event
    // pairing on ancestor nodes.
    {
      name: "BoundaryEventDispatchTracksNodeRemoval",
      public: true,
      status: "experimental",
    },
    {
      // Full support for box-decoration-break, including block fragmentation,
      // not just -webkit-box-decoration-break with inlines at line breaks.
      name: "BoxDecorationBreak",
      status: "experimental",
    },
    {
      // crbug.com/41485013
      name: "BreakIteratorDataGenerator",
      status: "stable",
    },
    {
      // crbug.com/41485013
      name: "BreakIteratorSetStartOffset",
      status: "stable",
    },
    {
      name: "BrowserVerifiedUserActivationKeyboard",
      base_feature: "none",
      public: true,
    },
    {
      name: "BrowserVerifiedUserActivationMouse",
      base_feature: "none",
      public: true,
    },
    {
      name: "BufferedBytesConsumerLimitSize",
      status: "stable",
    },
    {
      name: "BuiltInAIAPI",
      status: "test",
      base_feature: "EnableBuiltInAIAPI",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      implied_by: ["AIPromptAPI", "AIRewriterAPI", "AISummarizationAPI", "AIWriterAPI"]
    },
    {
      // Bypasses the enforcement of the Page Embedded Permission Control
      // security checks. This flag is disabled by default and should only be
      // enabled in automated tests in order to allow them to avoid needing to
      // wait until the PEPC is validated and also to use JS-initiated clicks.
      name: "BypassPepcSecurityForTesting",
    },
    {
      name: "CacheStorageCodeCacheHint",
      origin_trial_feature_name: "CacheStorageCodeCacheHint",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "CallExitNodeWithoutLayoutObject",
      status: "stable",
    },
    {
      name: "Canvas2dCanvasFilter",
      status: "experimental",
    },
    {
      name: "Canvas2dGPUTransfer",
      status: "experimental",
    },
    {
      name: "Canvas2dImageChromium",
      base_feature: "none",
      public: true,
    },
    {
      name: "Canvas2dLayers",
    },
    {
      name: "Canvas2dLayersWithOptions",
      status: "experimental",
      depends_on: ["Canvas2dLayers"],
    },
    {
      name: "Canvas2dMesh",
      origin_trial_feature_name: "Canvas2dMesh",
      origin_trial_allows_third_party: true,
      status: "test",
    },
    {
      // This is a kill switch for shaping directly in TextMetrics when
      // ctx.measureText() is called. Disabled after speedometer regression:
      // https://crbug.com/362784008.
      name: "Canvas2dTextMetricsShaping",
      status: "experimental",
    },
    {
      name: "CanvasFloatingPoint",
      status: "experimental",
    },
    {
      name: "CanvasHDR",
      status: "experimental",
    },
    {
      name: "CanvasImageSmoothing",
      status: "experimental",
    },
    {
      // https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/html-in-canvas.md
      name: "CanvasPlaceElement",
      status: "experimental",
    },
    {
      // Kill switch for https://crbug.com/330506337.
      name: "CanvasUsesArcPaintOp",
      status: "stable",
    },
    {
      name: "CapabilityDelegationDisplayCaptureRequest",
      status: "experimental",
    },
    {
      name: "CaptureController",
      status: {"Android": "", "default": "stable"},
    },
    {
      // TODO(crbug.com/1444712): Before enabling that flag by default,
      // make sure MouseCursorOverlayController does not transmit mouse
      // events to a CaptureController that don't have any
      // capturedmousechange listener attached to it.
      // See https://github.com/screen-share/mouse-events/issues/14
      name: "CapturedMouseEvents",
      "depends_on": ["CaptureController"],
      status: {"Android": "", "default": "test"},
    },
    {
      name: "CapturedSurfaceControl",
      origin_trial_feature_name: "CapturedSurfaceControl",
      status: {"Android": "", "default": "experimental"},
    },
    {
      name: "CaptureHandle",
      depends_on: ["GetDisplayMedia"],
      status: {"Android": "", "default": "stable"},
    },
    {
      // https://www.w3.org/TR/cssom-view-1/#dom-document-caretpositionfrompoint
      name: "CaretPositionFromPoint",
      status: "stable",
    },
    {
      // Kill switch for changes to RenderFrameMetadataObserverImpl in connection with Engagement
      // Signals. See https://crrev.com/c/4544201 and https://crbug.com/1458640.
      name: "CCTNewRFMPushBehavior",
      base_feature_status: "enabled",
    },
    {
      name: "CheckVisibilityExtraProperties",
      status: "stable",
    },
    {
      name: "ClickToCapturedPointer",
      status: "experimental",
    },
    {
      name: "ClipPathRejectEmptyPaths",
      status: "stable",
    },
    {
      // Avoid queuing a task to fire a selectionchange event when there is already a task scheduled
      // to do that for the target according to the new spec:
      // https://w3c.github.io/selection-api/#scheduling-selectionhange-event
      name: "CoalesceSelectionchangeEvent",
      status: "stable",
    },
    {
      name: "CoepReflection",
      status: "test",
    },
    {
      name: "CompositeBGColorAnimation",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "CompositeBoxShadowAnimation",
    },
    {
      name: "CompositeClipPathAnimation",
      public: true,
    },
    {
      name: "CompositedAnimationsCancelledAsynchronously",
      status: "stable"
    },
    {
      name: "CompositedSelectionUpdate",
      public: true,
      status: {"Android": "stable"},
      base_feature: "none",
    },
    {
      name: "CompositionForegroundMarkers",
      status: {
        "Android": "stable",
        "default": "",
      }
    },
    {
      name: "CompressionDictionaryTransport",
      base_feature: "none",
      public: true,
    },
    {
      name: "CompressionDictionaryTransportBackend",
      base_feature: "none",
      public: true,
    },
    {
      name: "ComputedAccessibilityInfo",
      status: "experimental",
    },
    {
      name: "ComputePressure",
      status: {
        "Android": "",
        "default": "stable",
      }
    },
    {
      name: "ConcurrentViewTransitionsSPA",
      status: "stable",
    },
    {
      name: "ContactsManager",
      status:  {"Android": "stable", "default": "test"},
    },
    {
      name: "ContactsManagerExtraProperties",
      status:  {"Android": "stable", "default": "test"},
    },
    {
      name: "ContainerTypeNoLayoutContainment",
      status: "stable",
    },
    {
      name: "ContentIndex",
      status:  {"Android": "stable", "default": "experimental"},
    },
    {
      name: "ContextMenu",
      status: "experimental",
    },
    {
      name: "ContinueEventTimingRecordingWhenBufferIsFull",
      status: "experimental",
    },
    {
      // Enable support for Controlled Frame, providing the Controlled
      // Frame tag to IWA apps and other contexts. See
      // https://github.com/WICG/controlled-frame/blob/main/README.md for more
      // info.
      name: "ControlledFrame",
      public: true,
      status: "experimental",
      base_feature_status: "disabled",
    },
    {
      name: "CookieDeprecationFacilitatedTesting",
      base_feature: "none",
    },
    {
      name: "CooperativeScheduling",
      base_feature: "none",
      public: true,
    },
    {
      name: "CoopRestrictProperties",
      origin_trial_feature_name: "CoopRestrictProperties",
      base_feature: "none",
    },
    {
      name: "CorsRFC1918",
    },
    {
      // Controls whether form elements may delay editor creation until layout.
      // This is a kill switch. See https://crbug.com/325613706 for details.
      name: "CreateInputShadowTreeDuringLayout",
      status: "stable"
    },
    {
      // Allow WebAuthn relying parties to report information about existing
      // credentials back to credential storage providers.
      name: "CredentialManagerReport",
      status: "experimental",
    },
    {
      name: "CrossFramePerformanceTimeline",
      status: "experimental",
    },
    {
      // CSS attr() function that accepts not only string types
      // and can be used in all properties.
      // https://drafts.csswg.org/css-values-4/#attr-notation
      name: "CSSAdvancedAttrFunction",
    },
    {
      // Support for the anchor-scope property.
      // https://drafts.csswg.org/css-anchor-position-1/#anchor-scope
      name: "CSSAnchorScope",
      status: "experimental",
    },
    {
      // Support for <string> syntax in @property
      // https://drafts.css-houdini.org/css-properties-values-api-1/#syntax-strings
      name: "CSSAtPropertyStringSyntax",
      status: "experimental",

    },
    {
      // Whether <image> values are allowed as counter style <symbol>
      name: "CSSAtRuleCounterStyleImageSymbols",
    },
    {
      // https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
      name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
      status: "test",
    },
    {
      // https://chromestatus.com/feature/5125388091260928
      name: "CSSBackgroundClipUnprefix",
      status: "stable",
    },
    {
      // Support CSS Values Level 4 calc simplification and serialization
      // as specified in the specs below.
      // https://drafts.csswg.org/css-values-4/#calc-simplification
      // https://drafts.csswg.org/css-values-4/#calc-serialize
      name: "CSSCalcSimplificationAndSerialization",
    },
    {
      // https://chromestatus.com/feature/5196713071738880
      // Shipped in M129.  Should be safe to remove the flag a bit after
      // M129 has shipped to stable.
      name: "CSSCalcSizeFunction",
      status: "stable",
    },
    {
      // Support case-sensitive attribute selector modifier
      // https://drafts.csswg.org/selectors-4/#attribute-case
      name: "CSSCaseSensitiveSelector",
      status: "test",
    },
    {
      name: "CSSColorContrast",
      status: "experimental",
    },
    {
      name: "CSSColorTypedOM",
      status: "experimental",
    },
    {
      name: "CSSComputedStyleFullPseudoElementParser",
      status: "stable",
    },
    {
      name: "CSSContentVisibilityImpliesContainIntrinsicSizeAuto",
      status: "stable",
    },
    {
      // Unprefixed cross-fade() (in addition to the existing -webkit-cross-fade()).
      // https://drafts.csswg.org/css-images-4/#cross-fade-function
      name: "CSSCrossFade",
      status: "experimental",
    },
    {
      // This flag controls whether the deprecated :--foo syntax is enabled. It
      // is being replaced by :state(foo), which is controlled by the
      // CSSCustomStateNewSyntax flag.
      // TODO(crbug.com/1514397): Remove this when the feature is fully launched.
      name: "CSSCustomStateDeprecatedSyntax",
      public: true,
    },
    {
      // This flag controls whether the :state(foo) pseudo-class for custom
      // elements is enabled. It is a rename of :--foo, which is being
      // deprecated and is controlled by the CSSCustomStateDeprecatedSyntax
      // flag.
      // TODO(crbug.com/1514397): Remove this when the deprecation is done.
      name: "CSSCustomStateNewSyntax",
      status: "stable",
    },
    {
      // crbug.com/345562934
      name: "CssDecoratingBoxFirstLine",
      status: "stable",
    },
    {
      name: "CSSDisplayModePictureInPicture",
      status: "stable",
    },
    {
      // crbug.com/353228153
      name: "CssDisplaySerialziationFix",
      status: "stable",
    },
    {
      name: "CSSDynamicRangeLimit",
      status: "experimental",
    },
    {
      // Include custom properties in CSSComputedStyleDeclaration::item/length.
      // https://crbug.com/949807
      name: "CSSEnumeratedCustomProperties",
      status: "test",
    },
    {
      name: "CSSExponentialFunctions",
      status: "stable",
    },
    {
      // Spec change to search for container query and container units up the
      // flat tree instead of the shadow-including ancestors.
      name: "CSSFlatTreeContainer",
      status: "stable",
    },
    {
      name: "CSSFontSizeAdjust",
      status: "stable",
    },
    {
      name: "CSSFunctions",
      status: "test",
    },
    {
      // https://chromestatus.com/feature/5157805733183488
      name: "CSSGapDecoration",
      status: "test",
    },
    {
      // This needs to be kept as a runtime flag as long as we need to forcibly
      // disable it for WebView on Android versions older than P. See
      // https://crrev.com/f311a84728272e30979432e8474089b3db3c67df
      name: "CSSHexAlphaColor",
      status: "stable",
    },
    {
      // The `inset-area` CSS property has been renamed to `position-area`. This
      // feature (CSSInsetAreaProperty) enables the old `inset-area` property.
      // This is enabled by default for now, but deprecated in M129. The plan is
      // to disable it starting in M131.
      name: "CSSInsetAreaProperty",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/6289894144212992
      name: "CSSKeyframesRuleLength",
      status: "stable",
    },
    {
      name: "CSSLayoutAPI",
      status: "experimental",
    },
    {
      // Flag so that we can Finch the effects of our SIMD fast-path for
      // skipping lazily-parsed CSS declaration blocks faster.
      name: "CSSLazyParsingFastPath",
      status: "experimental"
    },
    {
      name: "CSSLineClamp",
      status: "experimental",
    },
    {
      name: "CSSLogicalOverflow",
      status: "test",
    },
    {
      name: "CSSMarkerNestedPseudoElement",
      status: "experimental",
    },
    {
      name: "CSSMasonryLayout",
      status: "test",
    },
    {
      name: "CSSMixins",
    },
    {
      name: "CSSNestedDeclarations",
      status: "experimental",
    },
    {
      name: "CSSPaintAPIArguments",
      status: "experimental",
    },
    {
      // Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
      // See crbug.com/1485525.
      name: "CSSParserIgnoreCharsetForURLs",
    },
    {
      name: "CSSPartAllowsMoreSelectorsAfter",
      status: "experimental",
    },
    {
      // The `inset-area` CSS property has been renamed to `position-area`. This
      // feature (CSSPositionAreaProperty) enables the new `position-area`
      // property. This is shipped in M129, and (depending on the status of the
      // CSSInsetAreaProperty feature) can be removed in M131.
      name: "CSSPositionAreaProperty",
      status: "stable",
    },
    {
      // For the position-try-fallbacks property, replaces the inset-area()
      // syntax (which had the old "inset-area" name) with just a
      // <'position-area'>.
      name: "CSSPositionAreaValue",
      status: "stable",
    },
    {
      name: "CSSPositionStickyStaticScrollPosition",
      status: "test",
    },
    {
      // position-try-options has been renamed to position-try-fallbacks.
      // This feature was shipped in M128, so this flag can be removed in M130.
      name: "CSSPositionTryFallbacks",
      status: "stable",
    },
    {
      // Kill switch (inverted logic) to re-enable `position-try-options`. That
      // property was renamed to `position-try-fallbacks` which is enabled via
      // the CSSPositionTryFallbacks flag.
      // This feature was disabled in M128, so this flag (and the code to
      // implement `position-try-options`) can be removed in M130.
      name: "CSSPositionTryOptions",
    },
    // https://drafts.csswg.org/css-values-5/#progress
    // progress(), media-progress(), container-progress()
    {
      name: "CSSProgressNotation",
      status: "experimental",
    },
    {
      // Enables the :open and :closed pseudo-selectors.
      // https://chromestatus.com/feature/5085419215781888
      name: "CSSPseudoOpenClosed",
      status: "experimental",
    },
    {
      // When an audio, video, or similar resource is "playing"
      // or "paused".
      // https://www.w3.org/TR/selectors-4/#video-state
      name: "CSSPseudoPlayingPaused",
      status: "test",
    },
    {
      // For ::scroll-up-button and ::scroll-down-button pseudo elements for Carousel.
      // https://github.com/flackr/carousel/tree/main/scroll-button
      name: "CSSPseudoScrollButtons",
      status: "experimental",
      depends_on: ["PseudoElementsFocusable"],
    },
    {
      // For ::scroll-marker and ::scroll-marker-group pseudo elements for Carousel.
      // https://github.com/flackr/carousel/tree/main/scroll-marker
      name: "CSSPseudoScrollMarkers",
      status: "experimental",
      depends_on: ["PseudoElementsFocusable"],
    },
    {
      // TODO(crbug.com/40932006): Non-standard 'reading-flow' keyword
      // for reading of grid and flexbox items.
      // https://drafts.csswg.org/css-display-4/#reading-flow
      name: "CSSReadingFlow",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/css-color-5/#relative-colors
      name: "CSSRelativeColor",
      status: "stable",
    },
    {
      // crbug.com/325309578
      name: "CSSRelativeColorSupportsCurrentcolor",
      status: "test",
    },
    {
      // Non-standard 'auto' keyword for the CSS resize property. Used for
      // selectively enable resize corner for textarea via UA stylesheet, but
      // unintentionally exposed to author sheets. UA rule is now using
      // -internal-textarea-auto instead.
      name: "CSSResizeAuto",
      status: "stable",
    },
    {
      // crbug.com/40249572
      name: "CssRubyAlign",
      status: "stable",
      depends_on: ["RubyLineBreakable"],
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchange
      name: "CSSScrollSnapChangeEvent",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchanging
      name: "CSSScrollSnapChangingEvent",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#snap-events
      name: "CSSScrollSnapEvents",
      status: "stable",
      implied_by: ["CSSScrollSnapChangeEvent", "CSSScrollSnapChangingEvent"],
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2#scroll-start
      name: "CSSScrollStart",
      status: "test",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2#scroll-start-target
      name: "CSSScrollStartTarget",
      status: "experimental",
    },
    {
      // Flag for supporting scroll-state() and container-type: scroll-state
      // Implied by supporting at least one of the scroll-state query features.
      name: "CSSScrollStateContainerQueries",
      implied_by: ["CSSStickyContainerQueries", "CSSSnapContainerQueries"],
    },
    {
      name: "CSSSelectorFragmentAnchor",
      status: "experimental",
      base_feature: "CssSelectorFragmentAnchor",
    },
    {
      name: "CSSSignRelatedFunctions",
      status: "experimental",
    },
    {
      name: "CSSSnapContainerQueries",
      status: "experimental",
    },
    {
      // Explainer: https://drafts.csswg.org/css-values/#round-func
      name: "CSSSteppedValueFunctions",
      status: "stable",
    },
    {
      name: "CSSStickyContainerQueries",
      status: "experimental",
    },
    {
      name: "CSSSupportsForImportRules",
      status: "stable",
    },
    {
      // The AccentColor And AccentColorText CSS system color keywords
      name: "CSSSystemAccentColor",
      status: "experimental",
    },
    {
      // crbug.com/1463890: CSS `text-autospace` property
      name: "CSSTextAutoSpace",
      status: "experimental",
    },
    {
      // TODO(https://crbug.com/1411581):
      // https://w3c.github.io/csswg-drafts/css-inline-3/#propdef-leading-trim
      name: "CSSTextBoxTrim",
      status: "experimental",
    },
    {
      // crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
      name: "CSSTextSpacing",
      depends_on: ["CSSTextAutoSpace"],
    },
    {
      // Makes the transition shorthand omit longhands which have initial
      // values as per a standards discussion.
      // Shipped in M127, should be safe to remove in M132.
      // https://issues.chromium.org/issues/41487057
      // https://github.com/web-platform-tests/wpt/issues/43574
      name: "CSSTransitionShorterSerialization",
      status: "stable",
    },
    {
      // Support for tree-scoped [1] timeline names (e.g. produced by
      // scroll-timeline).
      //
      // [1] https://drafts.csswg.org/css-scoping-1/#shadow-names
      name: "CSSTreeScopedTimelines",
    },
    // Support for `user-select:contain`.
    {
      name: "CSSUserSelectContain",
      status: "test",
    },
    {
      name: "CSSVideoDynamicRangeMediaQueries",
      status: "experimental",
    },
    {
      // https://chromestatus.com/feature/5064894363992064
      name: "CSSViewTransitionClass",
      status: "stable"
    },
    {
      name: "CursorAnchorInfoMojoPipe",
      // No status as this will be controlled by the matching Chromium feature.
    },
    {
      // https://html.spec.whatwg.org/#dom-customelementregistry-getname
      name: "CustomElementsGetName",
      status: "stable",
    },
    {
      name: "Database",
      public: true,
      status: "experimental",
      base_feature: "none",
      origin_trial_feature_name: "WebSQL",
      origin_trial_allows_third_party: true,
      origin_trial_type: "deprecation",
    },
    // This allows pages to opt out of the unload deprecation. Enabling this
    // allows unload event handers to be used in the frame regardless of any
    // Permissions-Policy setting.
    // https://crbug.com/1432116
    {
      name: "DeprecateUnloadOptOut",
      origin_trial_feature_name: "DeprecateUnloadOptOut",
      origin_trial_type: "deprecation",
      origin_trial_allows_third_party: true,
      origin_trial_allows_insecure: true,
    },
    {
      name: "DesktopCaptureDisableLocalEchoControl",
      status: "experimental",
    },
    {
      name: "DesktopPWAsAdditionalWindowingControls",
      status: "test",
    },
    {
      name: "DesktopPWAsSubApps",
      status: "test",
    },
    {
      name: "DetailsStyling",
      status: "experimental",
    },
    {
      name: "DeviceAttributes",
      status: {
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "default": "experimental",
      },
    },
    {
      name: "DeviceOrientationRequestPermission",
      status: "experimental",
    },
    {
      name: "DevicePosture",
      public: true,
      status: "experimental",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      origin_trial_feature_name: "FoldableAPIs",
    },
    {
      // This feature makes the <dialog> element close properly when its "open"
      // attribute is removed. https://github.com/whatwg/html/issues/5802
      name: "DialogCloseWhenOpenRemoved",
      status: "experimental",
    },
    {
      name: "DialogNewFocusBehavior",
      status: "experimental",
      depends_on: ["NewGetFocusableAreaBehavior"],
    },
    {
      name: "DigitalGoods",
      origin_trial_feature_name: "DigitalGoodsV2",
      origin_trial_os: ["android", "chromeos"],
      public: true,
      status: {
        "Android": "stable",
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        // crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
        // so enable the API on all platforms for testing.
        "default": "test"
      },
      base_feature: "none",
    },
    {
      name: "DigitalGoodsV2_1",
      status: {
        "Android": "stable",
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        // crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
        // so enable the API on all platforms for testing.
        "default": "test"
      },
    },
    {
      // Shipping in M130.  Flag should be removed after M130 has been
      // shipping to stable for a few weeks.
      name: "DirAutoFixSlotExclusions",
      status: "stable",
    },
    {
      name: "DirectSockets",
      public: true,
      status: "experimental",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      // Disables anti-aliasing for the Ahem font. Anti-aliasing this font breaks a
      // significant amount of WPT test expectations.
      name: "DisableAhemAntialias",
    },
    {
      name: "DisableDifferentOriginSubframeDialogSuppression",
      base_feature: "none",
      origin_trial_feature_name: "DisableDifferentOriginSubframeDialogSuppression",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
    },
    {
      name: "DisableHardwareNoiseSuppression",
      origin_trial_feature_name: "DisableHardwareNoiseSuppression",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "DisableReduceAcceptLanguage",
      origin_trial_feature_name: "DisableReduceAcceptLanguage",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
      base_feature: "none",
    },
    {
      name: "DisableSelectAllForEmptyText",
      status: "stable",
    },
    // This feature will represent the extension of a deprecation trial that
    // allows first parties to temporarily use unpartitioned storage in embeds
    // loaded on their site. It replaces an old DT named
    // DisableThirdPartyStoragePartitioning which expired in M126.
    {
      name: "DisableThirdPartyStoragePartitioning2",
      origin_trial_feature_name: "DisableThirdPartyStoragePartitioning2",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
      status: "experimental",
      base_feature: "none",
      browser_process_read_write_access: true,
    },
    {
      // Dispatch beforeinput event for number input according to the spec:
      // https://w3c.github.io/uievents/#event-type-beforeinput
      //
      // This is landing in M127, and can be removed in M129.
      //
      // When disabled, beforeinput event will not be fired when spin button
      // interactions like ArrowUp, ArrowDown and mouse click on spin button
      // are made on number input.
      name: "DispatchBeforeInputForSpinButtonInteractions",
      status: "stable",
    },
    {
      // `kHidden` and `kHiddenButPainting` visibility states are treated as
      // hidden in the sense of `document.visibilityState`.  However, they are
      // handled differently internally.  For example, video playback should
      // continue in `kHiddenButPainting`, such as when the page is being
      // background captured.  When enabled, this feature causes blink to
      // notify internal observers about visibility changes between the two
      // hidden states, in addition to transitions to/from `kVisible`.
      //
      // Since the two hidden states are exposed to the web identically, there
      // is no `visibilitychanged` event fired when switching between them.
      //
      // When this feature is disabled, blink reverts to its original behavior
      // of eliding transitions between the two hidden states, including to
      // internal observers.  This behavior causes problems with capture and
      // picture-in-picture, but is preserved as a safe fallback.
      name: "DispatchHiddenVisibilityTransitions",
      status: "stable",
      base_feature: "DispatchHiddenVisibilityTransitions",
    },
    {
      // Dispatch selectionchange event per element according to the new spec:
      // https://w3c.github.io/selection-api/#selectionchange-event
      name: "DispatchSelectionchangeEventPerElement",
      status: "stable",
    },
    {
      // Allowing elements with display:contents to have focus.
      // See https://crbug.com/1366037
      name: "DisplayContentsFocusable",
      status: "experimental",
    },
    {
      name: "DisplayCutoutAPI",
      base_feature: "none",
      public: true,
    },
    {
      name: "DocumentCookie",
    },
    {
      name: "DocumentDomain",
    },
    {
      // This is a performance fix for <select> popups which was enabled by
      // default in M128.
      name: "DocumentInstallChunking",
      status: "stable",
    },
    {
      name: "DocumentOpenOriginAliasRemoval",
      status: "experimental",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "DocumentOpenSandboxInheritanceRemoval",
      status: "stable",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "DocumentPictureInPictureAPI",
      status: {
        "Android": "",
        "default": "stable",
      },
    },
    // Enables `preferInitialWindowPlacement` Document PiP option to skip
    // re-using the previous pip window bounds.
    {
      name: "DocumentPictureInPicturePreferInitialPlacement",
      status: {
        "Android": "",
        "default": "experimental",
      },
    },
    // Enables propagating user activation from a document picture-in-picture
    // window up to its opener window and vice versa.
    {
      name: "DocumentPictureInPictureUserActivation",
      status: {
        "Android": "",
        "default": "stable",
      },
    },
    // Enables the ability to use Document Policy header to control feature
    // DocumentDomain.
    {
      name: "DocumentPolicyDocumentDomain",
      status: "experimental",
    },
    // Enables the ability to use Document Policy header to control feature
    // IncludeJSCallStacksInCrashReports. https://chromestatus.com/feature/4731248572628992
    {
      name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
      origin_trial_feature_name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
      status: "experimental",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "DocumentPolicyNegotiation",
      origin_trial_feature_name: "DocumentPolicyNegotiation",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    // Enables the ability to use Document Policy header to control feature
    // SyncXHR.
    {
      name: "DocumentPolicySyncXHR",
      status: "experimental",
    },
    {
      // https://chromestatus.com/feature/5113053598711808
      name: "DocumentRenderBlocking",
      status: "stable",
    },
    {
      name: "DocumentWrite",
    },
    // Controls whether DOMParser.parseFromString() attempts to use the
    // html fast path parser. This flag is to be used as a killswitch in case
    // of any issues.
    {
      name: "DOMParserUsesHTMLFastPathParser",
      status: "stable"
    },
    {
      name: "DOMPartsAPI",
      status: "experimental",
      implied_by: ["DOMPartsAPIMinimal"],
    },
    {
      name: "DOMPartsAPIMinimal",
    },
    {
      // Drop the entire URL as plaintext in plaintext only editable position.
      // Fix for https://crbug.com/40895258. This change is landing in M127 and
      // the flag can be removed in M129 in case of no issues.
      name: "DropUrlAsPlainTextInPlainTextOnlyEditablePosition",
      status: "stable"
    },
    // Dynamically change the safe area insets based on the bottom browser
    // controls visibility.
    {
      name: "DynamicSafeAreaInsets",
    },
    // Dynamically change the safe area insets as browser controls scrolls.
    {
      name: "DynamicSafeAreaInsetsOnScroll",
      depends_on: ["DynamicSafeAreaInsets"]
    },
    {
      name: "DynamicScrollCullRectExpansion",
      status: "stable",
    },
    {
      name: "ElementCapture",
      origin_trial_feature_name: "ElementCapture",
      status: {"Android": "", "default": "experimental"},
    },
    {
      // TODO(crbug.fom/41492947) This is the "old" version of getInnerHTML()
      // used for declarative shadow DOM, and this version is deprecated and
      // currently being removed via Finch. The removal rollout plan is:
      //   1. (July 29) Disable at 50% of Canary/Dev in M129.
      //   2. (August 19) Disable at 50% of Canary/Dev/Beta, M129.
      //   3. (September 16) Disable at 1% of Stable M129.
      //   4. (September 23) Disable at 2% of Stable M129.
      //   5. (September 30) Disable at 5% of Stable M129.
      //   5.5. (September 30) Disable in code, M131, assuming no issues so far.
      //   6. (October 7) Disable at 10% of Stable M129.
      //   7. (October 14) Disable at 50% of Stable M129-M130 (Oct 15 stable release).
      //   8. (October 21) Full disable via Finch, M129-130.
      // In the meantime, replacement API is called `getHTML()` and that
      // shipped in M125.
      name: "ElementGetInnerHTML",
      status: "stable",
    },
    {
      name: "EnforceAnonymityExposure",
      status: "stable",
    },
    {
      // Experiment with preventing some instances of mutation XSS
      // by escaping "<" and ">" in attribute values.
      // See: crbug.com/1175016
      name: "EscapeLtGtInAttributes",
      status: "experimental",
    },
    {
      name: "EventTimingHandleKeyboardEventSimulatedClick",
      status: "experimental",
    },
    {
      name: "EventTimingInteractionCount",
      status: "experimental",
    },
    {
      // When the fling is active, a tap on the page can stop scroll. When
      // calculating the input latency, we should exclude all the input events
      // caused by this tap.
      name: "EventTimingTapStopScrollNoInteractionId",
      status: "experimental",
    },
    // Killswitch. Remove after 1-2 stable releases, and rename
    // cc::ScrollNode::main_thread_scrolling_reasons to
    // main_thread_repaint_reasons.
    {
      name: "ExcludePopupMainThreadScrollingReason",
      status: "stable",
    },
    {
      name: "ExcludeTransparentTextsFromBeingLcpEligible",
      status: "experimental",
    },
    {
      name: "ExperimentalContentSecurityPolicyFeatures",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "ExperimentalJSProfilerMarkers",
      status: "experimental",
    },
    {
      name: "ExperimentalMachineLearningNeuralNetwork",
      // Enabled by webnn::mojom::features::kExperimentalWebMachineLearningNeuralNetwork.
      base_feature: "none",
    },
    {
      name: "ExperimentalPolicies",
      status: "experimental",
    },
    {
      name: "ExposeRenderTimeNonTaoDelayedImage",
    },
    {
      name: "ExtendedTextMetrics",
      status: "experimental",
    },
    {
      name: "EyeDropperAPI",
      status: {
        // EyeDropper UI is available on ChromeOS, Linux (x11), Mac, and Win.
        // This list should match the supported operating systems for the
        // kEyeDropper base::Feature.
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "Linux": "stable",
        "Mac": "stable",
        "Win": "stable",
      },
      // When running under experimental platform variants, such as
      // Linux/Wayland, EyeDropper base::Feature defined in the browser
      // process is used to disable it at runtime, if needed.
      base_feature: "none",
      public: true,
    },
    {
      name: "FaceDetector",
      status: "experimental",
    },
    {
      name: "FastNonCompositedScrollHitTest",
      depends_on: ["HitTestOpaqueness", "RasterInducingScroll"],
      status: "stable",
    },
    // Kill switch.
    {
      name: "FastPathSingleSelectorExactMatch",
      status: "stable",
    },
    {
      name: "FastPositionIterator",
      // Not enabled due to a RTL issue. crbug.com/1421016.
    },
    {
      name: "FedCm",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "FedCmAuthz",
      depends_on: ["FedCm"],
      public: true,
      browser_process_read_access: true,
      status: "test",
      base_feature: "none",
      origin_trial_feature_name: "FedCmContinueOnBundle",
      origin_trial_allows_third_party: true,
    },
    {
      name: "FedCmAutoSelectedFlag",
      depends_on: ["FedCm"],
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "FedCmButtonMode",
      depends_on: ["FedCm"],
      public: true,
      status: "test",
      base_feature: "none",
      origin_trial_feature_name: "FedCmButtonMode",
      origin_trial_allows_third_party: true,
    },
    {
      name: "FedCmDisconnect",
      depends_on: ["FedCm"],
      base_feature: "none",
      status: "stable",
      public: true,
    },
    {
      name: "FedCmDomainHint",
      depends_on: ["FedCm"],
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "FedCmError",
      depends_on: ["FedCm"],
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "FedCmIdPRegistration",
      depends_on: ["FedCm"],
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "FedCmIdpSigninStatus",
      depends_on: ["FedCm"],
      public: true,
      status: "stable",
      base_feature: "none",
      browser_process_read_access: true,
    },
    {
      name: "FedCmMultipleIdentityProviders",
      depends_on: ["FedCm"],
      base_feature: "none",
      public: true,
      origin_trial_feature_name: "FedCmMultipleIdentityProviders",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
    },
    {
      name: "FedCmSelectiveDisclosure",
      depends_on: ["FedCm"],
      public: true,
      base_feature: "none",
    },
    {
      name: "FedCmWithStorageAccessAPI",
      depends_on: ["FedCm"],
      base_feature_status: "enabled",
      browser_process_read_access: true,
      origin_trial_feature_name: "FedCmWithStorageAccessAPI",
      copied_from_base_feature_if: "overridden",
      status: "experimental",
    },
    {
      name: "FencedFrames",
      base_feature: "none",
      // This helps enable and expose the <fencedframe> element, but note that
      // blink::features::kFencedFrames must be enabled as well, as we require
      // the support of the browser process to fully enable the feature.
      // Enabling this runtime enabled feature alone has no effect.
      public: true,
      status: "stable",
    },
    {
      name: "FencedFramesAPIChanges",
      // Various new IDL attributes on the <fencedframe> element (such as
      // `config`, `sandbox`, and `allow`).
      base_feature_status: "enabled",
      copied_from_base_feature_if: "enabled_or_overridden",
      status: "stable",
    },
    {
      name: "FencedFramesDefaultMode",
      base_feature_status: "disabled",
      copied_from_base_feature_if: "enabled_or_overridden",
      public: true,
    },
    {
      // Allows fenced frames to access unpartioned data via Shared Storage in
      // exchange for disabling untrusted network access. This is the Blink
      // counterpart of the base::Feature with the same name. Because local
      // unpartitioned data access requires browser and renderer process
      // coordination, the value of this flag is strictly controlled by the
      // base::Feature variant, and setting this flag does nothing.
      name: "FencedFramesLocalUnpartitionedDataAccess",
      base_feature: "none",
      public: true,
    },
    {
      // The Blink runtime-enabled feature name for the API's IDL.
      name: "FetchLaterAPI",
      status: "experimental",
      origin_trial_feature_name: "FetchLaterAPI",
      origin_trial_allows_third_party: true,
      base_feature: "FetchLaterAPI",
      // base_feature is meant as kill-switch. This runtime-enabled feature
      // should follow the Origin Trial unless explicitly overriden by Finch or
      // commandline flags.
      base_feature_status: "enabled",
      // Enables the Blink feature only when the base::Feature is overridden by
      // field trial or command line.
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "FetchUploadStreaming",
      status: "stable",
    },
    {
      // Also enabled when blink::features::kFileHandlingAPI is overridden
      // on the command line (or via chrome://flags).
      name: "FileHandling",
      depends_on: ["FileSystemAccessLocal"],
      status: {"Android": "test", "default": "stable"},
      base_feature: "FileHandlingAPI",
    },
    {
      name: "FileHandlingIcons",
      depends_on: ["FileHandling"],
      status: {"Android": "test", "default": "experimental"},
      base_feature: "none",
    },
    {
      name: "FileSystem",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // Shared objects by OPFS and non-OPFS File System Access API.
      name: "FileSystemAccess",
      implied_by: ["FileSystemAccessLocal", "FileSystemAccessOriginPrivate"],
    },
    {
      // In-development features for the File System Access API.
      name: "FileSystemAccessAPIExperimental",
      status: "experimental",
    },
    {
      // The FileSystemHandle.getCloudIdentifiers() method (see
      // crbug.com/1443354).
      name: "FileSystemAccessGetCloudIdentifiers",
      status: {
        "ChromeOS_Ash": "experimental",
        "ChromeOS_Lacros": "experimental",
        "default": "",
      }
    },
    {
      // Non-OPFS File System Access API.
      name: "FileSystemAccessLocal",
      status: {"Android": "test", "default": "stable"},
    },
    {
      name: "FileSystemAccessLockingScheme",
      status: "stable",
    },
    {
      // OPFS File System Access API.
      name: "FileSystemAccessOriginPrivate",
      status: "stable",
    },
    {
      // The FileSystemObserver interface for the File System Access API.
      // See https://crbug.com/1019297.
      name: "FileSystemObserver",
      depends_on: ["FileSystemAccess"],
      status: "experimental",
      origin_trial_feature_name: "FileSystemObserver",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
    },
    {
      // The unobserve function of the FileSystemObserver.
      // See https://crbug.com/321980469.
      name: "FileSystemObserverUnobserve",
      status: "experimental",
    },
    {
      name: "FindTextInReadonlyTextInput",
      status: "experimental",
    },
    {
      name: "Fledge",
      status: "stable",
      base_feature: "none",
      public: true,
    },
    {
      // Enables deal support within auctions.
      name: "FledgeAuctionDealSupport",
    },
    {
      name: "FledgeBiddingAndAuctionServerAPI",
      origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
      origin_trial_allows_third_party: true,
    },
    {
      name: "FledgeCustomMaxAuctionAdComponents",
      status: "stable",
    },
    {
      // Enables using a 'deprecatedRenderURLReplacements' field within the
      // Protected Audience ad auction config.
      name: "FledgeDeprecatedRenderURLReplacements",
      public: true,
      status: "stable",
    },
    {
      name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
      status: "stable",
    },
    {
      name: "FledgeFeatureDetectAll",
      // FledgeFeatureDetectAll should be enabled by any feature-detectable
      // experiment that enters trials after it got created; this makes it easy
      // to polyfill by only checking older things, and makes it serve its
      // purpose of modularly advertising new things.
      implied_by: ["FledgePermitCrossOriginTrustedSignals",
                   "FledgeRealTimeReporting"],
      base_feature: "none",
    },
    {
      name: "FledgeFeatureDetection",
      // FledgeFeatureDetection should be on if any of the features it aims
      // to help detect is on.
      implied_by: ["FledgeCustomMaxAuctionAdComponents",
                   "FledgeDeprecatedRenderURLReplacements",
                   "FledgePermitCrossOriginTrustedSignals",
                   "FledgeRealTimeReporting",
                   "FledgeReportingTimeout"],
      base_feature: "none",
    },
    {
      name: "FledgeMultiBid",
      public: true,
      status: "stable",
    },
    {
      // Permit trusted signals to come cross-origin, subject to CORS on the
      // trusted server side and opt-in on the worklet script side.
      name: "FledgePermitCrossOriginTrustedSignals",
    },
    {
      // Enables real time reporting API in Protected Audience.
      // https://github.com/WICG/turtledove/blob/main/PA_real_time_monitoring.md
      name: "FledgeRealTimeReporting",
      public: true,
      status: "test",
    },
    {
      // Enables using a 'reportingTimeout' field within the Protected Audience
      // ad auction config.
      name: "FledgeReportingTimeout",
      status: "stable",
    },
    {
      name: "FledgeTrustedSignalsKVv2Support",
      status: "test",
    },
    {
      name: "FluentOverlayScrollbars",
      // The associated base feature is defined in
      // ui/native_theme/native_theme_features.cc.
      base_feature: "none",
    },
    {
      name: "FluentScrollbars",
      // The associated base feature is defined in
      // ui/native_theme/native_theme_features.cc.
      base_feature: "none",
    },
    {
      name: "FluentScrollbarUsesNinePatchTrack",
      status: "stable",
    },
    {
      name: "Focusgroup",
      status: "experimental",
      base_feature: "none",
      origin_trial_feature_name: "Focusgroup",
    },
    {
      name: "FontAccess",
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "FontationsFontBackend",
    },
    {
      name: "FontationsForSelectedFormats",
      status: "stable",
    },
    {
      name: "FontFamilyPostscriptMatchingCTMigration",
    },
    {
      name: "FontFamilyStyleMatchingCTMigration",
    },
    {
      name: "FontMatchingCTMigration",
      status: "stable",
    },
    {
      name: "FontPaletteAnimation",
      status: "stable",
    },
    {
      name: "FontPresentWin",
      status: "stable",
    },
    {
      name: "FontSrcLocalMatching",
      base_feature: "none",
      // No status, as the web platform runtime enabled feature is controlled by
      // a Chromium level feature.
    },
    {
      name: "FontSystemFallbackNotoCjk",
      status: "stable",
    },
    {
      name: "FontVariantEmoji",
      status: "test",
    },
    {
      name: "FontVariationSequences",
      status: "experimental",
    },
    {
      // TODO(crbug.com/1231644): This flag is being kept (even though the
      // feature has shipped) until there are settings to allow users to
      // customize the feature.
      name: "ForcedColors",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "ForcedColorsPreserveParentColor",
      status: "stable",
    },
    {
      // This is used in tests to perform memory measurement without
      // waiting for GC.
      name:"ForceEagerMeasureMemory",
    },
    {
      // https://github.com/flackr/reduce-motion/blob/main/explainer.md
      name: "ForceReduceMotion",
    },
    {
      name: "ForceTallerSelectPopup",
      status: {"ChromeOS_Ash": "stable", "ChromeOS_Lacros": "stable"},
    },
    {
      // TODO(crbug.com/1419161): Remove this feature after M113 has been stable
      // for a few weeks or more. This is a kill switch that, when enabled, goes
      // back to the old behavior, which was to restore the state for <input>
      // and <select> even when they had `autocomplete=off`.
      name: "FormControlRestoreStateIfAutocompleteOff",
    },
    {
      // TODO(crbug.com/1432009) Allow form controls with vertical writing mode
      // to have direction affect the flow of the control.
      name: "FormControlsVerticalWritingModeDirectionSupport",
      status: "stable",
    },
    {
      name: "FractionalScrollOffsets",
      base_feature: "none",
      public: true,
    },
    {
      name: "FreezeFramesOnVisibility",
      status: "experimental",
    },
    {
      name: "GamepadButtonAxisEvents",
      status: "experimental",
    },
    {
      name: "GamepadMultitouch",
      status: "experimental",
      public: true,
    },
    {
      name: "GetAllScreensMedia",
      depends_on: ["GetDisplayMedia"],
      origin_trial_feature_name: "GetAllScreensMedia",
      origin_trial_os: ["chromeos"],
      public: true,
      status: "test",
    },
    {
      name: "GetDisplayMedia",
      public: true,
      status: {
        "Android": "experimental",
        "default": "stable",
      },
      base_feature: "none",
    },
    {
      name: "GetDisplayMediaRequiresUserActivation",
      depends_on: ["GetDisplayMedia"],
      status: "experimental",
    },
    {
      name: "GroupEffect",
      status: "test",
    },
    {
      name: "HandleDeletionWithNonEditableContentAtBlockBoundary",
      status: "stable",
    },
    {
      name: "HandleSelectionChangeOnDeletingEmptyElement",
      status: "stable",
    },
    {
      name: "HandwritingRecognition",
      status: {
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "default": "experimental",
      },
    },
    {
      // Updates the hanging behavior of preserved whitespace at the end of a
      // line to not depend on text-align. This flag is to be used as a
      // killswitch in case of any issues.
      // https://github.com/w3c/csswg-drafts/issues/3440
      // crbug.com/1363901
      name: "HangingWhitespaceDoesNotDependOnAlignment",
      status: "stable",
    },
    {
      name: "HasUAVisualTransition",
      status: "stable",
    },
    {
      name: "HighlightInheritance",
      status: "experimental",
    },
    {
      name: "HighlightPointerEvents",
    },
    {
      name: "HitTestOpaqueness",
      status: "stable",
    },
    {
      name: "HrefTranslate",
      depends_on: ["TranslateService"],
      origin_trial_feature_name: "HrefTranslate",
      status: "stable",
      base_feature: "none",
    },
    // The `anchor` attribute, supported by both anchor positioning and the
    // popover API.
    {
      name: "HTMLAnchorAttribute",
      status: "experimental",
    },
    // Adds support for the experimental `interesttarget`
    // attributes, as specified in the open-ui "Interest Invokers" explainer.
    // https://open-ui.org/components/interest-invokers.explainer/
    {
      name: "HTMLInterestTargetAttribute",
      status: "experimental",
    },
    // Additional default invoke actions that aren't part of v1 of invokers.
    // When this flag is disabled only v1 actions (popover and dialog defaults) will work.
    {
      name: "HTMLInvokeActionsV2",
      status: "experimental",
    },
    // Adds support for the experimental `invoketarget` and `invokeaction`
    // attributes, as specified in the open-ui "Invokers" explainer.
    // https://open-ui.org/components/invokers.explainer/
    {
      name: "HTMLInvokeTargetAttribute",
      status: "experimental",
    },
    {
      name: "HTMLMenuElementIsListOwner",
      status: "stable",
    },
    {
      // A flag, just for local testing to make the
      // HTML parser yield more often and take longer to resume.
      // This helps when debugging flaky tests caused by parser
      // yielding heuristics.
      name: "HTMLParserYieldAndDelayOftenForTesting",
    },
    {
      // A flag to control the popovertargetaction=hover behavior,
      // and associated CSS properties.
      name: "HTMLPopoverActionHover",
      status: "test",
    },
    {
      // TODO(crbug.com/1416284): Enables popover=hint functionality.
      name: "HTMLPopoverHint",
      status: "experimental",
    },
    {
      name: "HTMLSelectElementShowPicker",
      status: "stable",
    },
    {
      name: "HTMLSelectListElement",
      status: "experimental",
    },
    {
      // http://crbug.com/1478969
      // https://github.com/whatwg/html/pull/9538
      // https://chromestatus.com/feature/6560361081995264
      // Enabled by default in M123, should be safe to remove in M127
      name: "HTMLUnsafeMethods",
      status: "stable",
    },
    {
      // According to spec, text transforms should not affect the content
      // of plain text copy and paste -
      // https://www.w3.org/TR/css-text-3/#text-transform
      name: "IgnoresCSSTextTransformsForPlainTextCopy",
      status: "stable",
    },
    {
      name: "ImplicitRootScroller",
      public: true,
      settable_from_internals: true,
      status: {"Android": "stable"},
      base_feature: "none",
    },
    // This change, although technically breaking, is expected to be fully web-compatible
    // due to how import attributes are currently used in the ecosystem. However, this is
    // a killswitch just in case. This can be removed once it ships to stable and no
    // regressions are reported.
    {
      name: "ImportAttributesDisallowUnknownKeys",
      status: "stable"
    },
    {
      name: "ImportMapIntegrity",
      status: "stable"
    },
    {
      name: "IncomingCallNotifications",
    },
    {
       // When enabled, every traversable mainframe same-doc navigation will
       // increment the `viz::LocalSurfaceId` from the impl thread.
      name: "IncrementLocalSurfaceIdForMainframeSameDocNavigation",
      status: {"Android": "stable"},
    },
    {
      name: "InertElementNonEditable",
      status: "stable",
    },
    {
      name: "InertElementNonSearchable",
      status: "stable",
    },
    {
      // If a painting bug no longer reproduces with this feature enabled, then
      // the bug is caused by incorrect cull rects.
      name: "InfiniteCullRect",
    },
    {
      name: "InheritUserModifyWithoutContenteditable",
      status: "stable",
    },
    {
      name: "InlineBlockInSameLine",
      status: "stable",
    },
    {
      // crbug.com/343749045
      name: "InlineCursorMultiColFix",
      status: "stable",
    },
    {
      // If enabled, and the inner html parser is unable to successfully
      // parse, it will log histograms of why it failed. The logging is
      // non-trivial.
      name: "InnerHTMLParserFastpathLogFailure",
      status: "experimental",
    },
    {
      name: "InputMultipleFieldsUI",
      // No plan to support complex UI for date/time INPUT types on Android and
      // iOS.
      status: {"Android": "test", "iOS": "test", "default": "stable"},
    },
    {
      // If enabled, the input stepDown(n) and stepUp(n) methods will check
      // that the current value is valid before applying step 10 of their
      // specified algorithms.
      // This flag can be removed in M128 assuming no issues.
      name: "InputStepCurrentValueValidation",
      status: "stable",
    },
    {
      name: "InputTypeSupportInsertLink",
      status: "stable",
    },
    // Insert a blockquote before a outer block after creating the blockquote
    // when indenting a node whose outer block is a blockquote. See
    // https://crbug.com/327665597
    {
      name: "InsertBlockquoteBeforeOuterBlock",
      status: "stable",
    },
    {
      // crbug.com/1420675
      name: "InsertLineBreakIfPhrasingContent",
      status: {"Android": "test", "default": "stable"},
    },
    {
      name: "InstalledApp",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "InstallOnDeviceSpeechRecognition",
    },
    {
      name: "InteroperablePrivateAttribution",
      status: "experimental",
    },
    {
      // If enabled, IntersectionObserverScrollMargin will be parsed.
      name: "IntersectionObserverScrollMargin",
      status: "stable",
    },
    {
      name: "IntersectionOptimization",
      status: "stable",
    },
    {
      name: "InvertedColors",
      status: "experimental",
    },
    {
      name: "InvisibleSVGAnimationThrottling",
      status: "stable",
    },
    {
      name: "JavaScriptCompileHintsMagicRuntime",
      status: "experimental",
      origin_trial_feature_name: "JavaScriptCompileHintsMagic",
    },
    {
      // Fix to crbug.com/40934455.
      // Should be removed a bit after M129 reaches stable.
      name: "KeepActiveIfLabelActive",
      status: "stable",
    },
    {
      // Allows :target to match elements even after they are removed and
      // reattached to the document. Enabled in M128, should be safe to remove
      // in M133.
      name: "KeepCSSTargetAfterReattach",
      status: "stable",
    },
    {
      name: "KeyboardAccessibleTooltip",
      status: "experimental",
      base_feature: "none",
    },
    {
      // TODO(crbug.com/40113891): This feature allows scrollers to be
      // keyboard focusable by default.
      name: "KeyboardFocusableScrollers",
      status: "experimental",
      public: true,
    },
    {
      // TODO(crbug.com/40113891): Disables KeyboardFocusableScrollers.
      // This feature only takes effect if KeyboardFocusableScrollers is
      // enabled. It will overwrite the behavior and not allow scrollers to be
      // keyboard focusable by default.
      name: "KeyboardFocusableScrollersOptOut",
      origin_trial_feature_name: "KeyboardFocusableScrollersOptOut",
      // This is not a feature that is being deprecated, but the origin trial
      // *is* being used to allow sites to opt back out of the feature launch.
      // So we're marking it as a "deprecation" trial.
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
    },
    {
      // This is a killswitch for a bug fix that is shipping in M128.
      name: "LabelAndDelegatesFocusNewHandling",
      status: "stable",
    },
    {
      // This feature makes HTMLLabelElement::DefaultEventHandler always call
      // HTMLElement::DefaultEventHandler instead of only doing so
      // conditionally. Shipping in M123 so should be safe to remove in M127.
      name: "LabelEventHandlerCallSuper",
      status: "stable",
    },
    {
      name: "LangAttributeAwareFormControlUI",
      settable_from_internals: true,
    },
    {
      name: "LanguageDetectionAPI",
      status: "experimental",
    },
    {
      name: "LayoutFlexNewRowAlgorithmV3",
      status: "test",
    },
    {
      name: "LayoutIgnoreMarginsForSticky",
    },
    {
      name: "LayoutJustifySelfForBlocks",
      status: "test",
    },
    {
      name: "LayoutNGShapeCache",
      status: "test",
      base_feature: "LayoutNGShapeCache",
    },
    {
      name: "LazyInitializeMediaControls",
      base_feature: "none",
      public: true,
      // This is enabled by features::kLazyInitializeMediaControls.
    },
    {
      // If enabled, the lazy load image observer will use a scroll margin in
      // its init dictionary instead of a root margin.
      name: "LazyLoadScrollMargin",
      public: true,
      status: "stable",
    },
    {
      // If enabled, the lazy load iframe observer will use a scroll margin in
      // its init dictionary instead of a root margin.
      name: "LazyLoadScrollMarginIframe",
      public: true,
      status: "stable",
    },
    {
      name: "LCPAnimatedImagesWebExposed",
      status: "test",
    },
    {
      name: "LegacyWindowsDWriteFontFallback",
      // Enabled by features::kLegacyWindowsDWriteFontFallback;
      base_feature: "none",
    },
     {
      name: "LimitThirdPartyCookies",
      origin_trial_feature_name: "LimitThirdPartyCookies",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "LockedMode",
      status: "test",
      // Enabled by features::kLockedMode.
      public: true,
    },
    {
      // Enables long aniamtion frames as a performance API (the
      // "long-animation-frame" timeline entry)
      name: "LongAnimationFrameTiming",
      status: "stable"
    },
    {
      // Long press on a link selects the link text instead of bringing up
      // context menu. Enabled only on Android AuthView.
      name: "LongPressLinkSelectText",
    },
    {
      // Use LongAnimationFrameMonitor to emit longtask entries
      name: "LongTaskFromLongAnimationFrame",
      status: "test",
    },
    {
      name: "MacFontsDeprecateFontTraitsWorkaround",
      status: "stable",
    },
    {
      name: "MachineLearningNeuralNetwork",
      // Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork.
      base_feature: "none",
    },
    {
      name: "ManagedConfiguration",
      status: "stable",
    },
    {
      name:"MeasureMemory",
      status:"stable",
    },
    {
      name: "MediaCapabilitiesDynamicRange",
      status: "stable",
    },
    {
      name: "MediaCapabilitiesEncodingInfo",
      status: "experimental",
    },
    {
      name: "MediaCapabilitiesSpatialAudio",
      status: "test",
    },
    {
      name: "MediaCapture",
      status: {"Android": "stable"},
    },
    {
      name: "MediaCaptureBackgroundBlur",
      origin_trial_feature_name: "MediaCaptureBackgroundBlur",
      status: "experimental",
      implied_by: ["MediaCaptureCameraControls"],
      base_feature: "none",
    },
    {
      name: "MediaCaptureCameraControls",
      status: "experimental",
    },
    {
      name: "MediaCaptureConfigurationChange",
      origin_trial_feature_name: "MediaCaptureBackgroundBlur",
      status: "experimental",
      implied_by: ["MediaCaptureBackgroundBlur"],
      base_feature: "none",
    },
    {
      name: "MediaCaptureVoiceIsolation",
      status: "experimental",
    },
    // Set to reflect the MediaCastOverlayButton feature.
    {
      name: "MediaCastOverlayButton",
      base_feature: "none",
      public: true,
    },
    {
      name: "MediaControlsExpandGesture",
      base_feature: "none",
      public: true,
    },
    {
      name: "MediaControlsOverlayPlayButton",
      public: true,
      settable_from_internals: true,
      status: {"Android": "stable"},
      base_feature: "none",
    },
    {
      name: "MediaElementVolumeGreaterThanOne",
    },
    // Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
    {
      name: "MediaEngagementBypassAutoplayPolicies",
      base_feature: "none",
      public: true,
    },
    {
      name: "MediaLatencyHint",
      status: "test",
    },
    {
      name: "MediaPlaybackWhileNotVisiblePermissionPolicy",
      status: "test",
    },
    {
      name: "MediaPreviewsOptOut",
      base_feature: "none",
      origin_trial_feature_name: "MediaPreviewsOptOutPersistent",
      origin_trial_allows_third_party: true,
    },
    {
      name: "MediaQueryNavigationControls",
    },
    {
      // This uses media::VideoEncoder implementation in MediaRecorder API
      // instead of using MediaRecorder own video encoder implementation.
      name: "MediaRecorderUseMediaVideoEncoder",
    },
    {
      name: "MediaSession",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "MediaSessionChapterInformation",
      status: "stable",
    },
    {
      name: "MediaSessionEnterPictureInPicture",
      public: true,
      status: "stable",
    },
    {
      name: "MediaSourceExperimental",
      status: "experimental",
    },
    {
      name: "MediaSourceExtensionsForWebCodecs",
      status: "experimental",
      base_feature: "none",
      origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
    },
    {
      name: "MediaSourceNewAbortAndDuration",
      status: "experimental",
    },
    {
      name: "MediaStreamTrackTransfer",
      status: "test",
      base_feature: "none",
    },
    {
      name: "MediaStreamTrackWebSpeech",
    },
    {
      name: "MessagePortCloseEvent",
      status: "test",
    },
    // This is a killswitch for <meta http-equiv="refresh"> no
    // longer accepting fractions, landed around M125.
    // It can be removed in M127 if there are no problems.
    {
      name: "MetaRefreshNoFractional",
      status: "stable",
    },
    {
      // If enabled, meter elements will render with a fallback style when
      // appearance is set to none.
      name: "MeterAppearanceNoneFallbackStyle",
      status: "stable",
    },
    // This is enabled by default on Windows only. The only part that's
    // "experimental" is the support on other platforms.
    {
      name: "MiddleClickAutoscroll",
      status: "test",
    },
    // Killswitch. Remove after 1 or 2 stable releases.
    {
      name: "MinimimalResourceRequestPrepBeforeCacheLookup",
      status: "stable",
    },
    {
      name: "MobileLayoutTheme",
    },
    {
      name: "ModifyParagraphCrossEditingoundary",
      status: "stable",
    },
    {
      name: "MojoJS",
      status: "test",
      is_protected_feature: true,
    },
    // MojoJSTest is used exclusively in testing environments, whereas MojoJS
    // may also be used elsewhere.
    {
      name: "MojoJSTest",
      status: "test",
      base_feature: "none",
      is_protected_feature: true,
    },
    // crbug.com/269917: Make mouse event targets agnostic to mousedown event
    // cancellation when the pointer is dragged out of an iframe.
    {
      name: "MouseDragFromIframeOnCancelledMouseDown",
      status: "stable",
    },
    // crbug.com/40078978: Allow mouse-drag text selection even when mousemove
    // event is cancelled.
    {
      name: "MouseDragOnCancelledMouseMove",
      status: "stable",
    },
    // Move the selection to the last position in the list item. See
    // https://crbug.com/331841851
    {
      name: "MoveEndingSelectionToListChild",
      status: "stable",
    },
    {
      name: "MoveToParagraphStartOrEndSkipsNonEditable",
      status: "stable",
    },
    {
      name: "MultiSelectDeselectWhenOnlyOption",
      status: "test",
    },
    {
      // https://chromestatus.com/feature/6270155647352832
      name: "MultiSmoothScrollIntoView",
      status: "stable",
    },
    // crbug.com/1446498: This feature is being used for the deprecation of
    // Mutation Events.
    {
      name: "MutationEvents",
      origin_trial_feature_name: "MutationEvents",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
      public: true,
    },
    // crbug.com/1446498: This feature is just used as part of an "early trial"
    // of disabling Mutation Events in Canary/Dev/Beta. If this feature is
    // enabled *and* MutationEvents is disabled, then a special console error
    // message is used to give more information.
    {
      name: "MutationEventsSpecialTrialMessage",
    },
    {
      name: "NavigateEventCommitBehavior",
      status: "experimental",
    },
    {
      name: "NavigateEventSourceElement",
      status: "experimental",
    },
    {
      name: "NavigationActivation",
      status: "stable",
    },
    {
      name: "NavigationId",
      status: "experimental",
      origin_trial_feature_name: "SoftNavigationHeuristics",
    },
    {
      name: "NavigatorContentUtils",
      // Android does not yet support NavigatorContentUtils.
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "NestedViewTransition",
      status: "experimental",
    },
    {
      name: "NetInfoConstantType",
    },
    {
      name: "NetInfoDownlinkMax",
      public: true,
      // Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now
      status: {
        "Android": "stable",
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "default": "experimental",
      },
      base_feature: "none",
    },
    {
      // This is a killswitch for the behavior of Element::GetFocusableArea
      // on delegatesFocus shadow hosts. This flag can be removed in M127 if
      // things are stable.
      name: "NewGetFocusableAreaBehavior",
      status: "stable",
    },
    {
      name: "NoIdleEncodingForWebTests",
      status: "test",
    },
    // Doesn't increase the end offset on getting the range for a new line
    // character. See https://crbug.com/326888905
    {
      name: "NoIncreasingEndOffsetOnSplittingTextNodes",
      status: "stable",
    },
    // Makes enter/leave Mouse and Pointer Events non-composed as per
    // corresponding specifications.
    {
      name: "NonComposedEnterLeaveEvents",
      public: true,
      status: "stable",
    },
    // Doesn't insert empty blockquotes on outdenting a blockquote. See
    // https://crbug.com/323960902
    {
      name: "NonEmptyBlockquotesOnOutdenting",
      status: "stable",
    },
    {
      // Input event data for textarea should not be null for certain
      // inputTypes.
      // https://issues.chromium.org/issues/40737336
      name: "NonNullInputEventDataForTextArea",
      status: "stable"
    },
    {
      // TODO(crbug.com/1426629): This feature enables the deprecated value
      // slider-vertical. Disable this feature to stop parsing or allowing these
      // values.
      // https://drafts.csswg.org/css-ui-4/#appearance-switching
      name: "NonStandardAppearanceValueSliderVertical",
      status: "stable",
    },
    {
      name: "NotificationConstructor",
      // Android won't be able to reliably support non-persistent notifications, the
      // intended behavior for which is in flux by itself.
      status: {"Android": "", "default": "stable"},
    },
    // NotificationContentImage is not available in all platforms
    // The Notification Center on Mac OS X does not support content images.
    {
      name: "NotificationContentImage",
      public: true,
      status: {"Mac": "test", "default": "stable"},
      base_feature: "none",
    },
    {
      name: "Notifications",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "NotificationTriggers",
      origin_trial_feature_name: "NotificationTriggers",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "ObservableAPI",
      status: "experimental",
      public: true,
    },
    {
      name: "OffMainThreadCSSPaint",
      status: "stable",
    },
    {
      name: "OffscreenCanvasCommit",
      status: "experimental",
    },
    {
      name: "OmitBlurEventOnElementRemoval",
      status: "test"
    },
    {
      name: "OnDeviceChange",
      // Android does not yet support SystemMonitor.
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "OnDeviceWebSpeechAvailable",
    },
    {
      name: "OrientationEvent",
      status: {"Android": "stable"},
    },
    {
      name: "OriginIsolationHeader",
      status: "stable",
      base_feature: "none",
    },
    {
      name: "OriginPolicy",
      status: "experimental",
    },

    // Define a sample API for testing integration with the Origin Trials
    // Framework. The sample API is used in both unit and web tests for the
    // Origin Trials Framework. Do not change this flag to stable, as it exists
    // solely to generate code used by the sample API implementation.
    {
      name: "OriginTrialsSampleAPI",
      base_feature: "none",
      origin_trial_feature_name: "Frobulate",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIBrowserReadWrite",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateBrowserReadWrite",
      browser_process_read_write_access: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    // TODO(yashard): Add tests for this feature.
    {
      name: "OriginTrialsSampleAPIDependent",
      depends_on: ["OriginTrialsSampleAPI"],
      base_feature: "none",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIDeprecation",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateDeprecation",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIExpiryGracePeriod",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateExpiryGracePeriod",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIExpiryGracePeriodThirdParty",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateExpiryGracePeriodThirdParty",
      origin_trial_allows_third_party: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIImplied",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateImplied",
      implied_by: ["OriginTrialsSampleAPI", "OriginTrialsSampleAPIInvalidOS"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIInvalidOS",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateInvalidOS",
      origin_trial_os: ["invalid"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPINavigation",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateNavigation",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentExpiryGracePeriod",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentExpiryGracePeriod",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentFeature",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistent",
      origin_trial_allows_third_party: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentInvalidOS",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentInvalidOS",
      origin_trial_allows_third_party: true,
      origin_trial_os: ["invalid"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentThirdPartyDeprecationFeature",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentThirdPartyDeprecation",
      origin_trial_allows_third_party: true,
      origin_trial_type: "deprecation",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIThirdParty",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateThirdParty",
      origin_trial_allows_third_party: true,
    },
    {
      name: "OverscrollCustomization",
      status: "experimental",
    },
    // The following are developer opt-outs and opt-ins for page freezing. If
    // neither is specified then heuristics will be applied to determine whether
    // the page is eligible.
    {
      name: "PageFreezeOptIn",
      base_feature: "none",
      origin_trial_feature_name: "PageFreezeOptIn",
    },
    {
      name: "PageFreezeOptOut",
      base_feature: "none",
      origin_trial_feature_name: "PageFreezeOptOut",
    },
    // Support for page margin boxes.
    // https://www.w3.org/TR/css-page-3/#margin-boxes
    {
      name: "PageMarginBoxes",
      status: "experimental",
    },
    {
      name: "PagePopup",
      // Android does not have support for PagePopup
      status: {"Android": "", "iOS": "", "default": "stable"},
    },
    {
      name: "PageRevealEvent",
      status: "stable",
    },
    {
      name: "PageSwapEvent",
      status: "stable",
    },
    {
      name: "PaintHighlightsForFirstLetter",
      status: "stable",
    },
    {
      name: "PaintHoldingForIframes",
      status: "stable",
    },
    {
      name: "PaintHoldingForLocalIframes",
      status: "stable",
    },
    {
      name: "PaintUnderInvalidationChecking",
      settable_from_internals: true,
    },
    {
      // PARAKEET ad serving runtime flag/JS API.
      name: "Parakeet",
      origin_trial_feature_name: "Parakeet",
    },
    {
      name: "PartitionedPopins",
      status: "experimental",
    },
    // This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
    {
      name: "PasswordReveal",
    },
    {
      name: "PasswordStrongLabel",
      status: "experimental",
    },
    {
      name: "PaymentApp",
      depends_on: ["PaymentRequest"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PaymentInstruments",
      depends_on: ["PaymentApp"],
    },
    {
      // https://chromestatus.com/feature/5198846820352000
      name: "PaymentLinkDetection",
      status: "experimental",
    },
    {
      name: "PaymentMethodChangeEvent",
      depends_on: ["PaymentRequest"],
      status: "stable",
    },
    // PaymentRequest is enabled by default on Android
    {
      name: "PaymentRequest",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PercentBasedScrolling",
      base_feature: "none",
      public: true,
      settable_from_internals: true,
    },
    {
      name: "PerformanceManagerInstrumentation",
      base_feature: "none",
      public: true,
    },
    {
      // Enables performance.mark('mark_feature_usage'): crbug.com/1517170
      name: "PerformanceMarkFeatureUsage",
      status: "experimental"
    },
    {
      name: "PerformanceNavigateSystemEntropy",
      status: "experimental",
    },
    {
      name: "PeriodicBackgroundSync",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PerMethodCanMakePaymentQuota",
      origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
      status: "experimental",
      base_feature: "none",
    },
    {
      // Tracking bug for the implementation: https://crbug.com/1462930
      name: "PermissionElement",
      origin_trial_feature_name: "PermissionElement",
      origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
      status: "experimental",
      public: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "Permissions",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PermissionsRequestRevoke",
      status: "experimental",
    },
    // This is a reverse OT used for a phased deprecation.
    // https://crbug.com/918374
    {
      name: "PNaCl",
      base_feature: "none",
      origin_trial_feature_name: "PNaCl",
    },
    {
      name: "PointerCaptureLostOnRemovalDuringCapture",
      status: "stable",
    },
    {
      name: "PointerEventDeviceId",
      status: "stable",
    },
    // Coalesced/predicted event targets in untrusted events.
    // See https://crbug.com/353538500
    {
      name: "PointerEventTargetsInEventLists",
      status: "experimental",
    },
    // This is a killswitch for the behavior of <dialog popover autofocus>,
    // which landed in M130 and can be removed in M132.
    {
      name: "PopoverDialogNewFocusBehavior",
      status: "stable",
    },
    {
      name: "PositionOutsideTabSpanCheckSiblingNode",
      status: "stable",
    },
    {
      name: "PreciseMemoryInfo",
      base_feature: "none",
      public: true,
    },
    // Adds a web setting to disable CSS ScrollbarColor, ScrollbarWidth, and
    // legacy ::-webkit-scrollbar* pseudo element styling.
    {
      name: "PreferDefaultScrollbarStyles",
    },
    // Prefer not using composited scrolling. Composited scrolling will still
    // be used if there are other reasons forcing compositing. For consistency,
    // any code calling Settings::GetPreferCompositingToLCDTextEnabled() should
    // ensure that this flag overrides the setting.
    {
      name: "PreferNonCompositedScrolling",
      settable_from_internals: true,
    },
    {
      name: "PrefersReducedData",
      status: "experimental",
    },
    // This feature is deprecated and we are evangelizing affected sites.
    // A deprecation trial is underway, starting in M125.
    // See https://crbug.com/40352864 for current status
    {
      name: "PrefixedVideoFullscreen",
      status: "test",
      origin_trial_feature_name: "DeprecatePrefixedVideoFullscreen",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
    },
    {
      // Attempt to set up paint properties for ancestors when pre-painting a
      // missed descendant, so that paint effects like transforms aren't lost.
      name: "PrePaintAncestorsOfMissedOOF",
      status: "stable",
    },
    {
      // Used to allow chrome://flags to turn off prerendering. (Without using
      // the user-facing preloading settings page to turn off other
      // preloading.) See https://crbug.com/1494471.
      //
      // It also has some feature params defined throughout the codebase.
      name: "Prerender2",
      status: "stable",
    },
    {
      name: "Presentation",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // When enabled, styling for the content within heading will be
      // preserved after merge.
      name: "PreserveFollowingBlockStylesDuringBlockMerge",
      status: "stable",
    },
    {
      // When enabled, prevents undo to be applied if the enclosing block
      // is not editable
      name: "PreventUndoIfNotEditable",
      status: "stable"
    },
    {
      // Controls whether filtering IDs can be specified for Private Aggregation
      // contributions. If disabled, any IDs will be ignored.
      name: "PrivateAggregationApiFilteringIds",
      status: "stable",
    },
    {
      name: "PrivateAggregationAuctionReportBuyerDebugModeConfig",
      status: "stable",
    },
    {
      name: "PrivateNetworkAccessNonSecureContextsAllowed",
      origin_trial_feature_name: "PrivateNetworkAccessNonSecureContextsAllowed",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PrivateNetworkAccessNullIpAddress",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PrivateNetworkAccessPermissionPrompt",
      origin_trial_feature_name: "PrivateNetworkAccessPermissionPrompt",
      origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
      status: "stable",
      public: true,
      base_feature: "none",
    },
    {
      name: "PrivateStateTokens",
      // status: "test",
      base_feature: "none",
      origin_trial_feature_name: "TrustTokens",
      origin_trial_allows_third_party: true,
      public: true,
    },
    {
      // Always allow trust token issuance (so long as the base::Feature
      // is enabled). Used for testing; circumvents a runtime check that,
      // if this RuntimeEnabledFeature is not present, guarantees the origin
      // trial is enabled.
      name: "PrivateStateTokensAlwaysAllowIssuance",
      public: true,
      status: "test",
      base_feature: "none",
    },
    // Protected memory varariant of the sample API for testing integration with
    // the Origin Trials Framework. This is used only in unit tests.
    // Do not change this flag to stable, as it exists
    // solely to generate code used by the sample API implementation.
    {
      name: "ProtectedOriginTrialsSampleAPI",
      base_feature: "none",
      origin_trial_feature_name: "Frobulate",
      is_protected_feature: "true",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    // TODO(yashard): Add tests for this feature.
    {
      name: "ProtectedOriginTrialsSampleAPIDependent",
      depends_on: ["ProtectedOriginTrialsSampleAPI"],
      base_feature: "none",
      is_protected_feature: "true",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "ProtectedOriginTrialsSampleAPIImplied",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateImplied",
      implied_by: ["ProtectedOriginTrialsSampleAPI"],
      is_protected_feature: "true",
    },
    {
      // Allowing pseudo elements to have focus.
      name: "PseudoElementsFocusable",
      status: "experimental",
    },
    {
      name: "PushMessaging",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PushMessagingSubscriptionChange",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "QuickIntensiveWakeUpThrottlingAfterLoading",
      status: "stable",
    },
    {
      name: "QuotaChange",
      status: "experimental",
    },
    {
      name: "RasterInducingScroll",
      status: "test",
    },
    {
      name: "ReadableStreamAsyncIterable",
      status: "stable",
    },
    // If enabled, the Accept-Language header will be reduced.
    {
      name: "ReduceAcceptLanguage",
      base_feature: "none",
      origin_trial_feature_name: "ReduceAcceptLanguage"
    },
    {
      name: "ReduceCookieIPCs",
      status: "stable",
    },
    {
      // If enabled, the deviceModel will be reduced to "K" and the
      // androidVersion will be reduced to a static "10" string in android
      // User-Agent string.
      name: "ReduceUserAgentAndroidVersionDeviceModel",
      depends_on: ["ReduceUserAgentMinorVersion"],
      status: {"Android": "stable"},
    },
    // If enabled, the minor version of the User-Agent string will be reduced.
    // This User-Agent Reduction feature has been enabled starting from M101,
    // but we still keep this flag for future phase tests.
    {
      name: "ReduceUserAgentMinorVersion",
      status: "stable",
    },
    {
      // If enabled, the platform and oscpu of the User-Agent string will be
      // reduced.
      name: "ReduceUserAgentPlatformOsCpu",
      depends_on: ["ReduceUserAgentMinorVersion"],
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "RegionCapture",
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "RelOpenerBcgDependencyHint",
    },
    {
      name: "RemotePlayback",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "RemotePlaybackBackend",
      settable_from_internals: true,
      status: {
        "Android": "stable",
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "default": "experimental"},
    },
    {
      // See https://issues.chromium.org/40805258
      name: "RemoveCollapsedPlaceholder",
      status: "stable",
    },
    {
      name: "RemoveDanglingMarkupInTarget",
      status: "stable",
    },
    {
      name: "RemoveDataUrlInSvgUse",
      status: "stable",
    },
    {
      name: "RemoveMobileViewportDoubleTap",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    // Remove a node if it's selected fully even though it has children. See
    // https://crbug.com/331074432
    {
      name: "RemoveNodeHavingChildrenIfFullySelected",
      status: "stable",
    },
    {
      // See https://issues.chromium.org/issues/41311101
      name: "RemoveVisibleSelectionInDOMSelection",
      status: "test",
    },
    {
      // See https://github.com/whatwg/html/issues/10034
      name: "RenderBlockingInlineModuleScript",
      status: "stable",
    },
    {
      name: "RenderBlockingStatus",
      status: "stable",
    },
    {
      // The renderpriority attribute feature.
      // https://github.com/WICG/display-locking/blob/main/explainers/update-rendering.md
      name: "RenderPriorityAttribute",
    },
    {
      name: "ReportEventTimingAtVisibilityChange",
      status: "experimental",
    },
    {
      // TODO(crbug.com/1500633): Remove this flag when the new CursorAnchorInfo
      // mojo pipe is launched.
      name: "ReportVisibleLineBounds",
      status: {
        "Android": "stable",
        "default": "",
      }
    },
    {
      name: "ResourceTimingContentType",
      status: "experimental",
    },
    {
      name: "ResourceTimingUseCORSForBodySizes",
      status: "test",
    },
    {
      name: "RestrictGamepadAccess",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "ReuseShapeResultsByFonts",
      status: "stable",
    },
    {
      // New behavior when line breaker rewinds floats. crbug.com/1499290
      name: "RewindFloats",
      status: "stable",
    },
    {
      name: "RtcAudioJitterBufferMaxPackets",
      origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "RTCDataChannelPriority",
      status: "experimental",
    },
    {
      name: "RTCEncodedAudioFrameAbsCaptureTime",
      status: "experimental",
    },
    {
      name: "RTCEncodedFrameSetMetadata",
      status: "experimental",
      origin_trial_feature_name: "RTCEncodedFrameSetMetadata",
    },
    {
      name: "RTCEncodedVideoFrameAdditionalMetadata",
      status: "experimental",
    },
    // Enables the use of jitterBufferTarget attribute in WebRTC.
    // Spec: https://w3c.github.io/webrtc-extensions/#dom-rtcrtpreceiver-jitterbuffertarget
    {
      name: "RTCJitterBufferTarget",
      status: "stable",
    },
    // Legacy callback-based getStats() has limited availability unless this
    // Deprecation Trial is enabled.
    // TODO(https://crbug.com/822696): Remove when origin trial ends.
    {
      name: "RTCLegacyCallbackBasedGetStats",
      origin_trial_feature_name: "RTCLegacyCallbackBasedGetStats",
      status: "experimental",
      base_feature: "none",
    },
    // Enables the use of |RTCRtpEncodingParameters.codec|
    {
      name: "RTCRtpEncodingParametersCodec",
      status: "stable",
    },
    // Enables the use of |RTCRtpTransceiver::getHeaderExtensionsToNegotiate|,
    // |RTCRtpTransceiver::setHeaderExtensionsToNegotiate|, and
    // |RTCRtpTransceiver::getNegotiatedHeaderExtensions|.
    {
      name: "RTCRtpHeaderExtensionControl",
      status: "stable",
    },
    {
      name: "RTCRtpScriptTransform",
      status: "experimental",
    },
    {
      name: "RTCRtpTransport",
      status: "test",
    },
    {
      name: "RTCStatsRelativePacketArrivalDelay",
      origin_trial_feature_name: "RTCStatsRelativePacketArrivalDelay",
      status: "experimental",
      base_feature: "none",
    },
    // Enables the use of SVC scalability mode in WebRTC.
    // Spec: https://w3c.github.io/webrtc-svc/
    {
      name: "RTCSvcScalabilityMode",
      status: "stable",
    },
    {
      // crbug.com/324111880
      name: "RubyLineBreakable",
      status: "stable",
    },
    {
      // crbug.com/340041662
      name: "RubyLineEdgeAlignment",
      status: "stable",
      depends_on: ["RubyLineBreakable"],
    },
    {
      // crbug.com/324111880
      name: "RubyShortHeuristics",
      status: "stable",
    },
    {
      name: "SanitizerAPI",
      status: "experimental",
    },
    {
      name: "SchedulerYield",
      status: "stable",
    },
    {
      // https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
      name: "ScopedCustomElementRegistry",
      status: "experimental",
    },
    // WebSpeech API with both speech recognition and synthesis functionality
    // is not fully enabled on all platforms.
    {
      name: "ScriptedSpeechRecognition",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "ScriptedSpeechSynthesis",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "ScrollbarColor",
      status: "stable",
    },
    {
      name: "ScrollbarWidth",
      status: "stable",
    },
    {
      name: "ScrollEndEvents",
      status: "stable",
    },
    // TODO(355460994): Remove after M129.
    // scroll into root frame didn't take scrollbar and borders into account,
    // while this is fixed, to avoid any web compat issues we have this killswitch.
    {
      name: "ScrollIntoViewRootFrameViewportBugFix",
      status: "stable",
    },
    // Killswitch. Remove after M126 or M127 stable.
    {
      name: "ScrollNodeForOverflowHidden",
      status: "stable",
    },
    {
      name: "ScrollTimeline",
      status: "stable",
      implied_by: ["AnimationWorklet", "ScrollTimelineCurrentTime"]
    },
    {
      // Separate flag for crbug.com/1426506 (getCurrentTime API change) which
      // is expected to land after the initial launch of ScrollTimeline.
      name: "ScrollTimelineCurrentTime",
      status: "experimental"
    },
    // Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
    // as per the spec, matching other Web engines.
    //
    // This flag can't be removed until the Android min SDK version is 28
    // (i.e., 'P') or later.  See AWSettings.setScrollTopLeftInteropEnabled
    // and its caller.
    {
      name: "ScrollTopLeftInterop",
      status: "stable",
    },
    {
      name: "SearchTextHighlightPseudo",
      status: "test",
    },
    // SecurePaymentConfirmation has shipped on some platforms, but its
    // availability is controlled by the browser process (via the
    // SecurePaymentConfirmationBrowser feature), as it requires browser
    // support to function. See //content/public/common/content_features.cc
    //
    // The status is set to 'test' here to enable some WPT tests that only
    // require blink-side support to function.
    {
      name: "SecurePaymentConfirmation",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "SecurePaymentConfirmationDebug",
      base_feature: "none",
      public: true,
    },
    {
      name: "SecurePaymentConfirmationNetworkAndIssuerIcons",
      status: "experimental",
    },
    {
      name: "SecurePaymentConfirmationOptOut",
      origin_trial_feature_name: "SecurePaymentConfirmationOptOut",
      origin_trial_allows_third_party: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // Implement Selection API across shadow DOM
      // See https://w3c.github.io/selection-api/
      name: "SelectionAcrossShadowDOM",
      status: "experimental",
    },
    {
      // selection.isCollapsed should return false if anchor and focus nodes
      // are different, including in shadow tree.
      // https://crbug.com/40400558
      name: "SelectionIsCollapsedShadowDOMSupport",
      status: "experimental",
    },
    {
      // Maintain author-defined ::selection highlight colors, even if they
      // match the text color.
      name: "SelectionRespectsColors",
      status: "stable",
    },
    {
      // Sets the minimum target size of <option> in <select> to 24x24 CSS
      // pixels to meet Accessibility standards.
      // https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
      name: "SelectOptionAccessibilityTargetSize",
      status: "stable",
    },
    {
      // Makes the HTML parser allow most tags inside of <select> instead of
      // only <option>, <optgroup>, and <hr>.
      // https://github.com/whatwg/html/issues/10310
      name: "SelectParserRelaxation",
      status: "experimental",
    },
    {
      // This flag is a performance optimization which reorganizes some code
      // for handling <select>'s popup in order to avoid expensive calls to
      // InternalPopupMenu::UpdateFromElement. Added in M130, should be safe to
      // remove in M133.
      name: "SelectPopupLessUpdates",
      status: "stable",
    },
    {
      // If enabled, the type to search in a select element will ignore accents.
      // This should land in M128, and can be cleaned up (assuming no problems)
      // after M130.
      // https://crbug.com/349089079
      name: "SelectTypeToSearchIgnoreAccents",
      status: "stable",
    },
    {
      name: "SendBeaconThrowForBlobWithNonSimpleType",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "SensorExtraClasses",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "Serial",
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "SerializeViewTransitionStateInSPA",
    },
    {
      name: "SerialPortConnected",
      status: {"Android": "", "default": "experimental"},
      base_feature: "none",
    },
    {
      name: "ServiceWorkerClientLifecycleState",
      status: "experimental",
    },
    {
      name: "ServiceWorkerStaticRouter",
      base_feature: "none",
      origin_trial_feature_name: "ServiceWorkerStaticRouter",
      public: true,
    },
    {
      name: "ServiceWorkerStaticRouterTimingInfo",
    },
    {
      name: "SetSequentialFocusStartingPoint",
      status: "experimental",
    },
    {
      // Reference Target allows IDREF attributes to refer inside Shadow DOM.
      // crbug.com/346835896
      name: "ShadowRootReferenceTarget",
      status: "test",
    },
    {
      // crbug.com/360716751
      name: "ShapeOutsideClippedImageFix",
      status: "stable",
    },
    {
      // crbug.com/359616076, crbug.com/360158400, and crbug.com/360903551.
      name: "ShapeOutsideWritingModeFix",
      status: "stable",
    },
    {
      // crbug.com/329677645
      name: "ShapeResultCachedPreviousSafeToBreakOffset",
      status: "stable",
    },
    {
      name: "SharedArrayBuffer",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedArrayBufferOnDesktop",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedArrayBufferUnrestrictedAccessAllowed",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedAutofill",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "SharedStorageAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      name: "SharedStorageAPIM118",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedStorageAPIM125",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedWorker",
      public: true,
      // Android does not yet support SharedWorker. crbug.com/154571
      status: {"Android": "", "default": "stable"},
      base_feature: "none",
    },
    {
      // Makes select.showPicker() and input.showPicker() consume user
      // activation in order to prevent abuse. Shipping in M127, should be safe
      // to remove in M131.
      name: "ShowPickerConsumeUserActivation",
      status: "stable"
    },
    {
      // crbug.com/40501131
      name: "SidewaysWritingModes",
      status: "experimental",
    },
    {
      name: "SignatureBasedIntegrity",
      origin_trial_feature_name: "SignatureBasedIntegrity",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "SiteInitiatedMirroring",
      status: "experimental",
    },
    {
      name: "SkipAd",
      depends_on: ["MediaSession"],
      status: "stable",
    },
    {
      // If enabled, HTMLPreloadScanner will be skipped.
      name: "SkipPreloadScanning",
      origin_trial_feature_name: "SkipPreloadScanning",
      base_feature: "SkipPreloadScanning",
    },
    {
      // Skips the browser touch event filter, ensuring that events that reach
      // the queue and would otherwise be filtered out will instead be passed
      // onto the renderer compositor process as long as the page hasn't timed
      // out. If skip_filtering_process is browser_and_renderer, also skip the
      // renderer cc touch event filter, ensuring that events will be passed
      // onto the renderer main thread.
      name: "SkipTouchEventFilter",
      status: "stable",
    },
    {
      // Skips calling update type if the HTMLInputElement is created by parser.
      // This flag can be removed in M127 if no issues reported.
      name: "SkipUpdateTypeForHTMLInputElementCreatedByParser",
      status: "stable",
    },
    {
      name: "SmartCard",
      status: {"Android": "", "default": "test"},
    },
    {
      name: "SmartZoom",
      depends_on: ["AccessibilityPageZoom"],
      base_feature: "none",
      public: true,
      status: {"Android": "test"},
    },
    {
      name: "SmilAutoSuspendOnLag",
      status: "stable",
    },
    {
      // Used to enable the code for detecting soft navigations through task
      // attribution. Set to stable as this generates an enabled-by-default
      // base::Feature for a field-trial remote shutoff. Needs to be a runtime
      // feature so that the Soft Navigation Heuristics Origin Trial can depend
      // on it.
      name: "SoftNavigationDetection",
      status: "stable",
    },
    {
      name: "SoftNavigationHeuristics",
      status: "experimental",
      depends_on: ["NavigationId","SoftNavigationDetection"],
      origin_trial_allows_third_party: true,
      origin_trial_feature_name: "SoftNavigationHeuristics",
    },
    {
      name: "SoftNavigationHeuristicsExposeFPAndFCP",
    },
    {
      name: "SpeakerSelection",
      status: "experimental",
    },
    {
      name: "SpeculationRulesPointerDownHeuristics",
      base_feature_status: "enabled",
    },
    {
      name: "SpeculationRulesPointerHoverHeuristics",
      base_feature_status: "enabled",
    },
    // This feature exists solely to be the target of implied_by for features
    // that are part of this trial but which may also be enabled another way.
    // Otherwise, runtime-enabled features can be added to the origin trial
    // with the following:
    //   origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
    //   origin_trial_allows_third_party: true,
    {
      name: "SpeculationRulesPrefetchFuture",
      base_feature: "none",
      origin_trial_feature_name: "SpeculationRulesPrefetchFuture",
      origin_trial_allows_third_party: true,
    },
    {
      name: "SpeculationRulesPrefetchWithSubresources",
    },
    {
      name: "SrcsetMaxDensity",
    },
    // Used as argument in attribute of stable-release functions/interfaces
    // where a runtime-enabled feature name is required for correct IDL syntax.
    // This is a global flag; do not change its status.
    {
      name: "StableBlinkFeatures",
      status: "stable",
      base_feature: "none",
    },
    {
      // See https://github.com/w3c/csswg-drafts/issues/9398
      name: "StandardizedBrowserZoom",
      status: "stable",
      public: true,
    },
    {
      name: "StandardizedBrowserZoomOptOut",
      origin_trial_feature_name: "DisableStandardizedBrowserZoom",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
    },
    {
      name: "StaticAnimationOptimization",
      status: "experimental",
    },
    {
      name: "StorageAccessHeader",
      origin_trial_feature_name: "StorageAccessHeader",
      status: "experimental"
    },
    {
      name: "StorageBuckets",
      status: "stable",
    },
    {
      // Gates the `durability()` method on a storage bucket and the property in
      // the options struct.
      name: "StorageBucketsDurability",
      status: "experimental",
    },
    {
      // Gates the `locks()` method on a storage bucket.
      name: "StorageBucketsLocks",
      status: "experimental",
    },
    {
      name: "StrictMimeTypesForWorkers",
      status: "experimental",
    },
    {
      // Adds the appearance:base-select CSS value which makes <select>
      // rendering using alternate content in the UA shadowroot which is
      // stylable.
      name: "StylableSelect",
      status: "experimental",
      // :open is used in the UA stylesheet for StylableSelect, so this feature
      // will not work properly without CSSPseudoOpenClosed.
      // SelectParserRelaxation is needed to allow more content in <select>
      // than just <option>s etc.
      depends_on: ["CSSPseudoOpenClosed", "SelectParserRelaxation"],
    },
    {
      name: "StylusHandwriting",
      base_feature: "none",
    },
    {
      name: "SvgContextPaint",
      status: "stable",
    },
    {
      name: "SvgCrossOriginAttribute",
      status: "stable",
    },
    {
      name: "SvgFilterUserSpaceViewportForNonSvg",
      status: "stable",
    },
    {
      name: "SvgGradientColorInterpolationLinearRgbSupport",
      status: "stable",
    },
    {
      name: "SvgNoPixelSnappingScaleAdjustment",
      status: "stable",
    },
    {
      // Feature for optimizing SVG transform changes. This is a kill switch in
      // case we encounter issues with these optimizations.
      name: "SvgTransformOptimization",
      status: "stable",
    },
    {
      name: "SynthesizedKeyboardEventsForAccessibilityActions",
      status: "experimental",
    },
    {
      // This is used for emoji variation selectors support in system
      // fallback matching. This is a workaround solution that helps to
      // avoid incorrect font matching due to lack of cmap format 14
      // subtable in system emoji fonts on various platforms.
      // This should be eventually removed when the custom emoji font
      // is shipped with Chrome or when system emoji fonts will have
      // cmap format 14 subtable.
      name: "SystemFallbackEmojiVSSupport",
      status: "test",
    },
    {
      name: "SystemWakeLock",
      status: "experimental",
    },
    // For unit tests.
    {
      // This is for testing copied_from_base_feature_if.
      // This is set in base/test/test_suite.cc.
      name: "TestBlinkFeatureDefault",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },

    {
      name: "TestFeature",
      base_feature: "none",
      browser_process_read_write_access: true,
    },
    // For unit tests.
    {
      name: "TestFeatureDependent",
      depends_on: ["TestFeatureImplied"],
      base_feature: "none",
    },
    // For unit tests.
    {
      name: "TestFeatureImplied",
      implied_by: ["TestFeature"],
      base_feature: "none",
    },
    // For unit tests.
    {
      name: "TestFeatureProtected",
      base_feature: "none",
      is_protected_feature: true,
    },
    // For unit tests.
    {
      name: "TestFeatureProtectedDependent",
      depends_on: ["TestFeatureProtectedImplied"],
      base_feature: "none",
      is_protected_feature: true,
    },
    // For unit tests.
    {
      name: "TestFeatureProtectedImplied",
      implied_by: ["TestFeatureProtected"],
      base_feature: "none",
      is_protected_feature: true,
    },
    // For unit tests.
    {
      name: "TestFeatureStable",
      status: "stable",
    },
    {
      name: "TextDetector",
      status: "experimental",
    },
    {
      // crbug.com/325517313
      name: "TextDiffSplitFix",
      status: "stable",
    },
    {
      name: "TextFragmentAPI",
      status: "experimental",
    },
    {
      name: "TextFragmentIdentifiers",
      origin_trial_feature_name: "TextFragmentIdentifiers",
      public: true,
      status: "stable",
      base_feature: "TextFragmentAnchor",
    },
    {
      name: "TextFragmentTapOpensContextMenu",
      status: {"Android": "stable"},
    },
    {
      name: "TextInputNotAlwaysDirAuto",
      status: "stable",
    },
    {
      name: "TextMetricsBaselines",
      status: "stable",
    },
    {
      // New implementation of text-size-adjust that applies during style rather
      // than via the text autosizer. This also includes changes such as
      // directly using percentage values without heuristics, and fully
      // disabling automatic size adjustments when non-auto values are used.
      // See: https://crbug.com/340389272.
      name: "TextSizeAdjustImprovements",
      status: "experimental",
    },
    {
      // Support for the timeline-scope property.
      //
      // https://drafts.csswg.org/scroll-animations-1/#timeline-scope
      name: "TimelineScope",
      status: "stable",
      depends_on: ["ScrollTimeline"]
    },
    {
      name: "TimerThrottlingForBackgroundTabs",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "TimeZoneChangeEvent",
      status: "experimental",
    },
    {
      name: "TopicsAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      name: "TopicsDocumentAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      name: "TopLevelTpcd",
      origin_trial_feature_name: "TopLevelTpcd",
      origin_trial_type: "deprecation",
      status: "experimental",
      base_feature: "none",
    },
    // This feature allows touch dragging and a context menu to occur
    // simultaneously, with the assumption that the menu is non-modal.  Without
    // this feature, a long-press touch gesture can start either a drag or a
    // context-menu in Blink, not both (more precisely, a context menu is shown
    // only if a drag cannot be started).
    {
      name: "TouchDragAndContextMenu",
      implied_by: ["TouchDragOnShortPress"],
      base_feature: "none",
      public: true,
    },
    // This feature makes touch dragging to occur at the short-press gesture,
    // which occurs right before the long-press gesture.  This feature assumes
    // that TouchDragAndContextMenu is enabled.
    {
      name: "TouchDragOnShortPress",
    },
    // Many websites disable mouse support when touch APIs are available.  We'd
    // like to enable this always but can't until more websites fix this bug.
    // Chromium sets this conditionally (eg. based on the presence of a
    // touchscreen) in ApplyWebPreferences. "Touch events" themselves are always
    // enabled since they're a feature always supported by Chrome.
    {
      name: "TouchEventFeatureDetection",
      origin_trial_feature_name: "ForceTouchEventFeatureDetectionForInspector",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    // Set to reflect the kTouchTextEditingRedesign feature.
    {
      name: "TouchTextEditingRedesign",
      base_feature: "none",
    },
    {
      name: "Tpcd",
      origin_trial_feature_name: "Tpcd",
      origin_trial_allows_third_party: true,
      origin_trial_type: "deprecation",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "TransferableRTCDataChannel",
      status: "stable",
    },
    // This is conditionally set if the platform supports translation.
    {
      name: "TranslateService",
    },
    {
      name: "TranslationAPI",
      status: "test",
      base_feature: "EnableTranslationAPI",
    },
    {
      name: "TranslationAPIEntryPoint",
      status: "test",
      implied_by: ["TranslationAPI", "LanguageDetectionAPI"],
    },
    {
      name: "TrustedTypeBeforePolicyCreationEvent",
      status: "experimental",
    },
    {
      name: "TrustedTypesFromLiteral",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "TrustedTypesUseCodeLike",
      status: "experimental",
    },
    {
      // Unblock queued blocking touchmove after the main thread handles the
      // touchstart and the first touchmove and they didn't call
      // preventDefault(), instead of waiting for the browser to send
      // touchscrollstarted.
      name: "UnblockTouchMoveEarlier",
      status: "stable",
    },
    {
      name: "UnclosedFormControlIsInvalid",
      status: "experimental",
    },
    {
      name: "UnexposedTaskIds",
    },
    {
      // Skip CSS animation events on unowned CSS animations:
      // https://drafts.csswg.org/css-animations-2/#event-dispatch
      name: "UnownedAnimationsSkipCSSEvents",
      status: "stable",
    },
    {
      name: "UnrestrictedMeasureUserAgentSpecificMemory",
    },
    // This is a reverse OT used for a phased deprecation, on desktop
    // https://crbug.com/1071424
    {
      name: "UnrestrictedSharedArrayBuffer",
      base_feature: "none",
      origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
      origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos"],
    },
    // Enables using policy-controlled feature "usb-unrestricted" to allow
    // isolated context to access protected USB interface classes and to
    // bypass the USB blocklist.
    {
      name: "UnrestrictedUsb",
      status: "stable",
      depends_on: ["WebUSB"],
    },
    {
      name: "URLPatternCompareComponent",
      status: "experimental",
    },
    {
      name: "URLSearchParamsHasAndDeleteMultipleArgs",
      status: "stable",
    },
    {
      name: "UseBeginFramePresentationFeedback",
      status: {
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
      },
    },
    {
      name: "UserActivationSameOriginVisibility",
      base_feature: "none",
      public: true,
    },
    {
      name: "UseUndoStepElementDispatchBeforeInput",
      status: "stable",
    },
    {
      name: "V8IdleTasks",
      base_feature: "none",
      public: true,
    },
    {
      // crbug.com/356190942
      name: "VerticalInputRangeKeyOperationFix",
      status: "stable",
    },
    {
      // Whether a video element should automatically play fullscreen unless
      // 'playsinline' is set.
      name: "VideoAutoFullscreen",
      settable_from_internals: true,
    },
    {
      name: "VideoFullscreenOrientationLock",
    },
    {
      name: "VideoRotateToFullscreen",
    },
    {
      name: "VideoTrackGenerator",
      status: "test",
    },
    {
      name: "VideoTrackGeneratorInWindow",
      status: "test",
    },
    {
      name: "VideoTrackGeneratorInWorker",
    },
    {
      // This is a kill switch for a fix where viewport changes did not update
      // the text autosizer, see: crbug.com/359910401.
      name: "ViewportChangesUpdateTextAutosizing",
      status: "stable",
    },
    {
      name: "ViewportHeightClientHintHeader",
      status: "stable",
    },
    {
      name: "ViewportSegments",
      status: "experimental",
      public: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      origin_trial_feature_name: "FoldableAPIs",
    },
    {
      name: "ViewTransitionDisableSnapBrowserControlsOnHidden",
      status: "stable",
    },
    {
      // If enabled, ViewTransition API is supported for navigations including
      // cross-document transitions.
      // See https://drafts.csswg.org/css-view-transitions-1/.
      name: "ViewTransitionOnNavigation",
      status: "stable",
    },
    {
      name: "ViewTransitionOnNavigationForIframes",
      status: "stable",
    },
    {
      name: "ViewTransitionTreeScopedNames",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/5089552511533056
      name: "ViewTransitionTypes",
      status: "stable",
    },
    {
      name: "VisibilityCollapseColumn",
    },
    {
      name: "VisualViewportOnScrollEnd",
      status: "stable",
    },
    {
      // The "WakeLock" feature was originally implied_by "ScreenWakeLock" and
      // "SystemWakeLock". The former was removed after being promoted to
      // stable, but we need to keep this feature around for code and IDLs that
      // should work with both screen and system wake locks.
      name: "WakeLock",
      status: "stable",
      implied_by: ["SystemWakeLock"],
    },
    {
      // When enabled, this will issue a warning to the console any time
      // rendering is forced withing content-visibility subtrees (both
      // content-visibility: auto and content-visibility: hidden).
      name: "WarnOnContentVisibilityRenderAccess",
    },
    {
      name: "WebAnimationsSVG",
      status: "experimental",
    },
    {
      name: "WebAppInstallation",
      status: "experimental",
    },
    {
      name: "WebAppLaunchQueue",
      // This is not going into origin trial, "origin_trial_feature_name" is
      // required for using the "implied_by" behaviour.
      origin_trial_feature_name: "WebAppLaunchQueue",
      implied_by: ["FileHandling"],
      base_feature: "none",
    },
    {
      name: "WebAppScopeExtensions",
      origin_trial_feature_name: "WebAppScopeExtensions",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      status: "experimental",
      base_feature: "none",
    },
    {
      name:"WebAppsLockScreen",
      status:"experimental",
    },
    {
      name: "WebAppTabStrip",
      status: {
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "default": "experimental"
      },
      base_feature: "DesktopPWAsTabStrip",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "WebAppTabStripCustomizations",
      status: {
        "ChromeOS_Ash": "stable",
        "ChromeOS_Lacros": "stable",
        "default": "experimental"
      },
      base_feature: "DesktopPWAsTabStripCustomizations",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "WebAppTranslations",
      status: "experimental",
      base_feature: "WebAppEnableTranslations",
    },
    {
      // This flag enables the Manifest parser to handle URL Handlers.
      // Also enabled when blink::features::kWebAppEnableUrlHandlers is
      // overridden on the command line (or via chrome://flags).
      name: "WebAppUrlHandling",
      status: "experimental",
      base_feature: "none",
      origin_trial_feature_name: "WebAppUrlHandling",
      origin_trial_os: ["win", "mac", "linux"],
    },
    {
      // WebAssembly JS Promise Integration,
      // https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration
      name: "WebAssemblyJSPromiseIntegration",
      origin_trial_feature_name: "WebAssemblyJSPromiseIntegration",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebAssemblyJSStringBuiltins",
      origin_trial_feature_name: "WebAssemblyJSStringBuiltins",
      status: "experimental",
      base_feature: "none",
    },
    // WebAuth is disabled on Android versions prior to N (7.0) due to lack of
    // supporting APIs, see runtime_features.cc.
    {
      name: "WebAuth",
      status: "stable",
    },
    // When enabled adds the authenticator attachment used for registration and
    // authentication to the public key credential response.
    {
      name: "WebAuthAuthenticatorAttachment",
      status: "test",
    },
    // https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-attestationformats
    {
      name: "WebAuthenticationAttestationFormats",
      status: "experimental",
      origin_trial_feature_name: "WebAuthnAttestationFormats",
      origin_trial_os: ["android"],
      origin_trial_allows_third_party: true,
    },
    // Enables the PublicKeyCredential.getClientCapabilities() static method.
    // https://w3c.github.io/webauthn/#sctn-getClientCapabilities
    {
      name: "WebAuthenticationClientCapabilities",
      status: "experimental",
    },
    // Methods for deserializing WebAuthn requests from JSON/serializing
    // responses into JSON.
    // https://w3c.github.io/webauthn/#dom-publickeycredential-tojson
    // https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON
    // https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON
    {
      name: "WebAuthenticationJSONSerialization",
      status: "stable",
    },
    {
      name: "WebAuthenticationLargeBlobExtension",
      status: "stable",
    },
    // https://w3c.github.io/webauthn/#prf-extension
    {
      name: "WebAuthenticationPRF",
      status: "stable",
      base_feature: "WebAuthenticationPRFExtension",
    },
    {
      name: "WebAuthenticationRemoteDesktopSupport",
      base_feature: "none",
      public: true,
    },
    // https://w3c.github.io/webauthn/#sctn-supplemental-public-keys-extension
    {
      name: "WebAuthenticationSupplementalPubKeys",
      status: "experimental",
    },
    // WebBluetooth is enabled by default on Android, ChromeOS, macOS and
    // Windows.
    {
      name: "WebBluetooth",
      public: true,
      status: {
        "Android": "stable",
        "ChromeOS_Ash": "stable", "ChromeOS_Lacros": "stable",
        "Mac": "stable",
        "Win": "stable",
        "default": "experimental",
      },
      base_feature: "none",
    },
    {
      name: "WebBluetoothGetDevices",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebBluetoothScanning",
      status: "experimental",
    },
    {
      name: "WebBluetoothWatchAdvertisements",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebCodecsCopyToRGB",
      status: "stable",
    },
    {
      name: "WebCodecsHBDFormats",
      status: "stable",
    },
    {
      name: "WebCodecsVideoEncoderBuffers",
      status: "experimental",
    },
    {
      name: "WebCryptoCurve25519",
      status: "experimental",
    },
    {
      name: "WebFontResizeLCP",
      status: "experimental",
    },
    {
      name: "WebGLDeveloperExtensions",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      // Draft WebGL extensions are deliberately not enabled by experimental web
      // platform features.
      name: "WebGLDraftExtensions",
      base_feature: "none",
      public: true,
    },
    {
      name: "WebGLDrawingBufferStorage",
      status: "stable",
    },
    {
      name: "WebGLImageChromium",
      base_feature: "none",
      public: true,
    },
    {
      name: "WebGPUAdapterInfoAttribute",
      status: "stable",
    },
    {
      // WebGPU developer features are deliberately not enabled by experimental
      // web platform features.
      name: "WebGPUDeveloperFeatures",
      base_feature: "none",
      public: true,
    },
    {
      // WebGPU experimental features are meant for features that would
      // eventually land in the WebGPU spec.
      name: "WebGPUExperimentalFeatures",
      status: "experimental",
      public: true,
    },
    {
      name: "WebGPUHDR",
      status: "stable",
    },
    {
      // Using subgroup related features in WebGPU.
      // https://chromestatus.com/feature/5126409856221184
      name: "WebGPUSubgroupsFeatures",
      status: "experimental",
      origin_trial_feature_name: "WebGPUSubgroupsFeatures",
      base_feature: "none",
      // Subgroups related features are also enabled if experimental
      // WebGPU is enabled.
      implied_by: ["WebGPUExperimentalFeatures"],
    },
    {
      name: "WebHID",
      status: {"Android": "", "default": "stable"},
    },
    {
      // It is only enabled in extension environment for now.
      name: "WebHIDOnServiceWorkers",
      depends_on: ["WebHID"],
      base_feature: "none",
      public: true,
    },
    {
      name: "WebIdentityDigitalCredentials",
      origin_trial_feature_name: "WebIdentityDigitalCredentials",
      origin_trial_os: ["android"],
      origin_trial_allows_third_party: true,
      depends_on: ["FedCm"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    // Kill switch for making BigInt handling in WebIDL use ToBigInt.
    {
      name: "WebIDLBigIntUsesToBigInt",
      status: "stable",
    },
    {
      name: "WebNFC",
      public: true,
      status: {"Android": "stable", "default": "test"},
      base_feature: "none",
    },
    {
      name: "WebOTP",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "WebOTPAssertionFeaturePolicy",
      depends_on: ["WebOTP"],
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // https://wicg.github.io/web-preferences-api/
      name: "WebPreferences",
      status: "experimental",
    },
    {
      name: "WebPrinting",
      status: {"Android": "", "default": "test"},
    },
    {
      name: "WebSerialBluetooth",
      status: "stable",
      base_feature: "none",
    },
    // WebShare is enabled by default on Android.
    {
      name: "WebShare",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "WebSocketStream",
      status: "stable",
    },
    {
      name: "WebTransportCustomCertificates",
      origin_trial_feature_name: "WebTransportCustomCertificates",
      status: "stable",
      base_feature: "none",
    },
    {
      // Note: enabling this without setting WebTransportCongestionControl to
      // either BBRv1 or BBRv2 will produce poor bandwidth estimates.
      name: "WebTransportStats",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebUSB",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "WebUSBOnDedicatedWorkers",
      status: "stable",
      depends_on: ["WebUSB"],
    },
    {
      // It is only enabled in extension environment for now.
      name: "WebUSBOnServiceWorkers",
      depends_on: ["WebUSB"],
      base_feature: "none",
      public: true,
    },
    {
      name: "WebViewXRequestedWithDeprecation",
      origin_trial_feature_name: "WebViewXRequestedWithDeprecation",
      origin_trial_allows_insecure: true,
      origin_trial_allows_third_party: true,
      origin_trial_os: ["android"],
      origin_trial_type: "deprecation",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebVTTRegions",
      status: "experimental",
    },
    {
      name: "WebXR",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "WebXREnabledFeatures",
      depends_on: ["WebXR"],
      status: "stable",
    },
    {
      name: "WebXRFrameRate",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRFrontFacing",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRHandInput",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRHitTestEntityTypes",
      depends_on: ["WebXR"],
      status: "experimental",
    },
    {
      name: "WebXRImageTracking",
      depends_on: ["WebXR"],
      origin_trial_feature_name: "WebXRImageTracking",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRLayers",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRPlaneDetection",
      depends_on: ["WebXR"],
      origin_trial_feature_name: "WebXRPlaneDetection",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRPoseMotionData",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebXRSpecParity",
      depends_on: ["WebXR"],
      public: true,
      status: "experimental",
    },
    // If enabled, window.default[Ss]tatus will be supported. This is disabled
    // by default, and is here to allow this behavior to be re-enabled via Finch
    // in case of problems. This flag should be removed by Q1 2023, assuming
    // no problems are encountered.
    {
      name: "WindowDefaultStatus",
    },
    // Flag guard for change to XML parser to merge adjacent CDATA sections.
    // See https://crrev.com/c/4790343.
    {
      name: "XMLParserMergeAdjacentCDataSections",
      status: "stable",
    },
    {
      // If enabled, the `getDisplayMedia()` family of APIs will ask for NV12
      // frames, which should trigger a zero-copy path in the tab capture code.
      name: "ZeroCopyTabCapture",
    },
  ],
}