// From https://github.com/chromium/chromium/blob/d1987ba98386e8a455c0b983650dfd9687d14636/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, experimental
    // on Windows and not enabled on any other platform.
    //
    // Note that the Android status key implies Chrome for Android and WebView.
    //
    // "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", "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. Please inform developers they must embed the token in HTML.
    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. Please inform developers they must embed the token in HTML.
    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::ProtectedMemory<bool> value or just a regular bool
    // value.
    is_protected_feature: {
      default: false,
      value_type: "bool",
    }
  },

  data: [
    {
      // crbug.com/439682405
      name: "AbortByPlaceholderLayout",
      status: "stable",
    },
    {
      // This flag changes about:blank to dark in dark mode on user action.
      name: "AboutBlankPageRespectsDarkModeOnUserAction",
      status: "stable",
    },
    {
      name: "Accelerated2dCanvas",
      settable_from_internals: true,
      status: "stable",
    },
    {
      name: "AcceleratedSmallCanvases",
      status: "stable",
    },
    {
      name: "AccessibilityAriaVirtualContent",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "AccessibilityCustomElementRoleNone",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "AccessibilityExposeDisplayNone",
      status: "test",
    },
    {
      // If the author did not define aria-actions, surface button and link
      // children inside option and menuitem elements as implicit actions.
      name: "AccessibilityImplicitActions",
      status: "experimental",
    },
    {
      // Use a minimum role of group on elements that are keyboard-focusable.
      // See https://w3c.github.io/html-aam/#minimum-role.
      name: "AccessibilityMinRoleTabbable",
    },
    {
      name: "AccessibilityOSLevelBoldText",
      status: "experimental",
      public: true,
    },
    {
      // Enforce no accessible name on objects that have a role where names are
      // prohibited (listed in https://w3c.github.io/aria/#namefromprohibited):
      // log a friendly error in the developer console, and trigger a DCHECK().
      // The incorrect markup situation will be repaired, and the name will
      // be exposed as a description instead.
      // TODO(crbug.com/350528330,
      // https://github.com/web-platform-tests/interop-accessibility/issues/133,
      // https://github.com/w3c/accname/issues/240,
      // https://github.com/w3c/accname/issues/241): If community feedback is
      // positive, and WPT + accname testable statements are updated to allow
      // this, then add status: test.
      name: "AccessibilityProhibitedNames",
    },
    {
      name: "AccessibilitySerializationSizeMetrics",
      status: "experimental",
    },
    {
      name: "AccessibilityUseAXPositionForDocumentMarkers",
      base_feature: "none",
      public: true,
    },
    {
      // https://chromestatus.com/feature/5113389252739072
      // https://issues.chromium.org/issues/41119923
      name: "AccessKeyLabel",
      status: "experimental",
    },
    {
      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,
    },
    // Fix for crbug.com/403358869
    {
      name: "AdjustDOMOffsetToLayoutOffsetForSecureText",
      status: "stable",
    },
    // 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: "AIPageContentPaidContentAnnotation",
      status: "stable"
    },
    // In AIPageContentAgent::ComputeHitTestableNodesInViewport, the hit test
    // may hit the same node multiple times, which causes issues with computing
    // the final z-order of page elements. This flag will filter those
    // duplicate results first before doing any further processing.
    {
      name: "AIPageContentZOrderEarlyFiltering",
      status: "stable"
    },
    {
      name: "AIPromptAPI",
      public: true,
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
      origin_trial_feature_name: "AIPromptAPIMultimodalInput",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
      implied_by: ["AIPromptAPIMultimodalInput"],
    },
    {
      // Extension access to "AIPromptAPI".
      name: "AIPromptAPIForExtension",
      public: true,
      status: {
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "ChromeOS": "stable",
        "default": "",
      },
    },
    {
      name: "AIPromptAPIForWorkers",
      public: true,
    },
    {
      name: "AIPromptAPIMultimodalInput",
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
      origin_trial_feature_name: "AIPromptAPIMultimodalInput",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      // Gates access to the responseConstraint enhancement for "AIPromptAPI".
      // This feature alone does not expose any "AIPromptAPI" feature access.
      name: "AIPromptAPIStructuredOutput",
      status: "stable",
    },
    {
      // Gates access to the tool use (function calling) enhancement for
      // "AIPromptAPI". This feature alone does not expose any "AIPromptAPI"
      // feature access.
      name: "AIPromptAPIToolUse",
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
    },
    {
      name: "AIProofreadingAPI",
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
      origin_trial_feature_name: "AIProofreaderAPI",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "AIRewriterAPI",
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
      origin_trial_feature_name: "AIRewriterAPI",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "AIRewriterAPIForWorkers",
      public: true,
    },
    {
      name: "AISummarizationAPI",
      status: {
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "ChromeOS": "stable",
        "default": "",
      },
    },
    {
      name: "AISummarizationAPIForWorkers",
      public: true,
    },
    {
      name: "AIWriterAPI",
      status: {
        "Win": "experimental",
        "Mac": "experimental",
        "Linux": "experimental",
        "ChromeOS": "experimental",
        "default": "",
      },
      origin_trial_feature_name: "AIWriterAPI",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "AIWriterAPIForWorkers",
      public: true,
    },
    {
      name: "AlignZoomToCenter",
      status: "stable",
    },
    {
      name: "AllowContentInitiatedDataUrlNavigations",
      base_feature: "none",
    },
    {
      name: "AllowPreloadingWithCSPMetaTag",
      status: "experimental",
    },
    {
      name: "AllowSameSiteNoneCookiesInSandbox",
      base_feature: "none",

      // No status because this blink runtime feature doesn't work by itself.
      // It's controlled by the corresponding Chromium feature,
      // net::features::kAllowSameSiteNoneCookiesInSandbox, which needs to be
      // enabled to make the whole feature work.
    },
    {
      // https://crbug.com/40681200
      name: "AllowSkippingEditingBoundaryToMergeEnd",
      status: "stable",
    },
    {
      name: "AllowSvgUseToReferenceExternalDocumentRoot",
      status: "stable",
    },
    {
      name: "AllowSyntheticTimingForCanvasCapture",
      base_feature: "none",
      status: {
        "Mac": "stable",
        "default": ""
      }
    },
    {
      name: "AllowURNsInIframes",
      base_feature: "none",
    },
    {
      // Enables the new behavior for this spec change:
      // https://github.com/whatwg/html/pull/11457
      // https://issues.chromium.org/issues/433545121
      // https://chromestatus.com/feature/5179013869993984
      name: "AncestorRevealingNewSpec",
      status: "stable",
    },
    {
      // Kill switch for https://crbug.com/415834974 which changes anchor
      // positioning adjustments to occur even in cases where there is no
      // scrollable overflow.
      name: "AnchorPositionAdjustmentWithoutOverflow",
      status: "stable",
    },
    {
      // Switch for https://crbug.com/445371140 which changes the initial value
      // for position-visibility to 'anchors-visible' per current spec.
      name: "AnchorsVisibleInitialValue",
      status: "stable",
    },
    {
      name: "AndroidDownloadableFontsMatching",
      base_feature: "none",
      public: true,
    },
    {
      // https://chromestatus.com/feature/5083257285378048
      name: "AnimationProgressAPI",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/web-animations-2/#triggers
      name: "AnimationTrigger",
      status: "experimental",
      implied_by: ["EventTrigger", "TimelineTrigger"],
    },
    {
      name: "AnimationWorklet",
    },
    {
      name: "AnonymousIframe",
      status: "stable",
    },
    {
      name: "AOMAriaRelationshipProperties",
      public: true,
      status: "stable",
    },
    {
      name: "AOMAriaRelationshipPropertiesAriaOwns",
      public: true,
      status: "experimental",
      depends_on: ["AOMAriaRelationshipProperties"],
    },
    {
      // appearance:base for in-page form controls.
      // https://drafts.csswg.org/css-forms-1/
      // https://issues.chromium.org/issues/450139531
      // https://chromestatus.com/feature/5104958101913600
      name: "AppearanceBase",
      status: "experimental",
    },
    {
      name: "ApproximateGeolocationPermission",
      // This feature is controlled by the kApproximateGeolocationPermission
      // base::Feature in the browser process.
      base_feature: "none",
    },
    {
      name: "AppTitle",
      status: "experimental",
      origin_trial_feature_name: "AppTitle",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      base_feature: "WebAppEnableAppTitle",
    },
    {
      name: "AriaActions",
      status: "experimental",
    },
    {
      name: "AriaNotify",
      status: {"Android": "stable", "Win": "stable", "Mac": "stable", "Linux": "stable"},
      implied_by: ["AriaNotifyV2"],
    },
    {
      name: "AriaNotifyV2",
      status: {"Android": "test", "Win": "test", "Mac": "test", "Linux": "test"},
    },
    {
      name: "AriaRowColIndexText",
      status: "stable",
    },
    {
      // Fix Asymmetric word navigation behavior on Windows when punctuation follows whitespace
      // See https://crbug.com/40252703
      name: "AsymmetricWordBoundaryFix",
      status: "stable",
    },
    {
      // When enabled, perform async IPCs from CookieJar::SetCookie to the
      // network service.
      name: "AsyncSetCookie",
      status: "stable",
    },
    {
      name: "AttributionReporting",
      status: "stable",
      base_feature: "none",
      public: true,
    },
    {
      // AudioContext.playoutStats interface.
      // https://chromestatus.com/feature/5172818344148992
      name: "AudioContextPlayoutStats",
      origin_trial_feature_name: "AudioContextPlayoutStats",
      status: "experimental",
    },
    {
      name: "AudioContextSetSinkId",
      status: "stable",
    },
    {
      name: "AudioOutputDevices",
      // Android support for switching audio output devices is not stable
      status: {"Android": "", "default": "stable"},
      public: true,
      base_feature: "none"
    },
    {
      name: "AudioVideoTracks",
      status: "experimental",
    },
    {
      name: "AuthenticatorPasswordsOnlyImmediateRequests",
      base_feature: "none",
      public: true,
    },
    {
      name: "AutoDarkMode",
      base_feature: "none",
      origin_trial_feature_name: "AutoDarkMode",
    },
    {
      name: "Autofill",
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "AutomationControlled",
      base_feature: "none",
      public: true,
      settable_from_internals: true,
    },
    {
      name: "AutoPictureInPictureVideoHeuristics",
      status: "experimental",
    },
    {
      name: "AvoidForcedLayoutOnInvisibleDocumentClose",
      status: "test",
    },
    { // If the start and end positions are the same in MoveParagraph,
      // there is no need to collapse the whitespace between them.
      // https://crbug.com/406053617
      name: "AvoidNormalizingVisiblePositionsWhenStartEqualsEnd",
      status: "stable",
    },
    {
      // Killswitch for https://crbug.com/40947850.
      name: "BackdropRootForClipPathWithBackdropFilter",
      status: "stable",
    },
    // When enabled, enforces new interoperable semantics for 3D transforms.
    // See crbug.com/1008483.
    {
      name: "BackfaceVisibilityInterop",
    },
    {
      name: "BackForwardCache",
      base_feature: "none",
      public: true,
    },
    {
      name: "BackForwardCacheExperimentHTTPHeader",
      origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "BackForwardCacheNotRestoredReasons",
      status: "stable",
      origin_trial_feature_name: "BackForwardCacheNotRestoredReasons",
      base_feature: "BackForwardCacheSendNotRestoredReasons",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "BackForwardCacheRestorationPerformanceEntry",
      status: "experimental",
    },
    {
      name: "BackForwardCacheUpdateNotRestoredReasonsName",
      status: "stable",
    },
    {
      name: "BackgroundClipTextDecoration",
      status: "stable",
    },
    {
      name: "BackgroundFetch",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    // A developer opt-out for background page freezing.
    {
      name: "BackgroundPageFreezeOptOut",
      base_feature: "none",
      origin_trial_feature_name: "BackgroundPageFreezeOptOut",
      origin_trial_type: "deprecation",
    },
    {
      name: "BarcodeDetector",
      status: {
        // Built-in barcode detection APIs are only available from some
        // platforms. See //services/shape_detection.
        "Android": "stable",
        "ChromeOS": "stable",
        "Mac": "stable",
        "default": "test",
      },
    },
    {
      name: "BidiCaretAffinity",
    },
    {
      name: "BlinkExtensionChromeOS",
      browser_process_read_write_access: true,
    },
    {
      name: "BlinkExtensionChromeOSKiosk",
      depends_on: ["BlinkExtensionChromeOS"],
      browser_process_read_write_access: true,
    },
    {
      name: "BlinkExtensionWebView",
      public: true,
    },
    {
      name: "BlinkExtensionWebViewMediaIntegrity",
      public: true,
    },
    {
      name: "BlinkLifecycleScriptForbidden",
    },
    {
      name: "BlinkRuntimeCallStats",
    },
    {
      // https://chromestatus.com/feature/4830298126417920
      name: "BlobBytes",
      status: "stable",
    },
    {
      name: "BlockingFocusWithoutUserActivation",
      status: "experimental",
    },
    // https://chromestatus.com/feature/5176753681203200
    {
      name: "BorderRadiusCorrectionCoverageFactor",
      status: "test",
    },
    // https://crbug.com/415304289: 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: "stable",
    },
    {
      name: "BrowserInitiatedAutomaticPictureInPicture",
      public: true,
      status: "experimental",
    },
    {
      name: "BrowserVerifiedUserActivationKeyboard",
      base_feature: "none",
      public: true,
    },
    {
      name: "BrowserVerifiedUserActivationMouse",
      base_feature: "none",
      public: true,
    },
    {
      name: "BufferedBytesConsumerLimitSize",
      status: "stable",
    },
    {
      // Bypasses the enforcement of the Page Embedded Permission Control
      // security checks. This flag is disabled by default and should only be
      // enabled in automated tests in order to allow them to avoid needing to
      // wait until the PEPC is validated and also to use JS-initiated clicks.
      name: "BypassPepcSecurityForTesting",
    },
    {
      // Enables RFC 7234-compliant Cache-Control header parsing, removing RFC
      // 2616 separators that are not valid in RFC 7234.
      // https://crbug.com/42050325
      name: "CacheControlRFC7234Parsing",
      status: "experimental",
    },
    {
      // Enables metrics collection comparing RFC 7234 vs RFC 2616 Cache-Control
      // parsing. Performs double parsing on every Cache-Control header to
      // measure behavioral differences. Can be disabled as a kill switch if
      // performance issues arise.
      // https://crbug.com/42050325
      name: "CacheControlRFC7234ParsingMetrics",
      status: "experimental",
    },
    {
      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",
    },
    {
      // https://github.com/WICG/html-in-canvas/blob/main/README.md
      // Note the API name has changed to `drawElementImage`.
      name: "CanvasDrawElement",
      status: "test",
    },
    {
      // Remove the restriction that drawElementImage can only draw immediate children
      // of the canvas, and allow drawing canvas descendants.
      name: "CanvasDrawElementInSubtree",
      depends_on: ["CanvasDrawElement"],
    },
    {
      name: "CanvasFloatingPoint",
      status: "stable",
    },
    {
      // Canvas2D API for specifying HDR headroom for drawing operations.
      // https:/crbug.com/428575083, https://github.com/whatwg/html/issues/11165
      name: "CanvasGlobalHDRHeadroom",
      status: "experimental",
    },
    {
      // https://crbug.com/394052224
      name: "CanvasGradientCSSColor4",
      status: "experimental",
    },
    {
      name: "CanvasHDR",
      status: "experimental",
    },
    {
      // crbug.com/389726691.
      name: "CanvasTextMemoryPressure",
      status: "stable",
    },
    {
      // crbug.com/450531794.
      name: "CanvasTextSwitchFrameOnFinalize",
      status: "stable",
    },
    {
      // crbug.com/450531794.
      name: "CanvasTextTexImage2DFix",
      status: "stable",
    },
    {
      // Canvas2D API for specifying HDR tone mapping behavior.
      // https:/crbug.com/448552449, https://github.com/whatwg/html/issues/11424
      name: "CanvasToneMapping",
      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",
      status: {"Android": "", "default": "stable"}
    },
    {
      name: "CapturedSurfaceResolution",
      status: { "Win": "stable", "Mac": "stable", "ChromeOS": "stable", "default": ""},
    },
    {
      name: "CaptureHandle",
      depends_on: ["GetDisplayMedia"],
      status: {"Android": "", "default": "stable"},
    },
    {
      // crbug.com/446475645
      name: "CaretPositionFromPointTextareaFix",
      status: "stable",
    },
    {
      // Changes the caret's affinity to upstream, preventing spaces
      // from appearing in the previous line when typing at the start
      // of a wrapped line. See https://crbug.com/40677155
      name: "CaretWithTextAffinityUpstream",
      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",
    },
    {
      // If focus is not at canonical position then spellcheck should be deactivated.
      // crbug.com/396485529
      name: "CheckForCanonicalPositionInIdleSpellCheck",
      status: "stable",
    },
    {
      name: "CheckVisibilityExtraProperties",
      status: "stable",
    },
    {
      // Set currentTarget to null after dispatch for EventTarget.
      // This was added in M142 and can be removed after M144.
      // https://issues.chromium.org/issues/346766786
      name: "ClearCurrentTargetAfterDispatch",
      status: "stable",
    },
    {
      // Determine clearing of target and relatedTarget by checking
      // if the top node is in shadow tree.
      // This was added in M142 and can be removed after M144.
      // https://issues.chromium.org/issues/373655918
      // https://issues.chromium.org/issues/40253359
      name: "ClearTargetOnlyIfInShadowTree",
      status: "stable",
    },
    {
      // Allows top-level sites to restrict collection of high-entropy UA client
      // hints (from 3Ps, or itself) via the getHighEntropyValues API.
      // crbug.com/385161047
      name: "ClientHintUAHighEntropyValuesPermissionPolicy",
      status: "stable",
    },
    {
      // Enables clipboardchange event API for listening for changes to the
      // system clipboard
      // https://chromestatus.com/feature/5085102657503232
      name: "ClipboardChangeEvent",
      origin_trial_feature_name: "ClipboardChangeEvent",
      status: "stable",
    },
    // This ensures that clipboard event fires on a target node which is
    // focused in case no visible selection is present.
    // crbug.com/40735783
    {
      name: "ClipboardEventTargetCanBeFocusedElement",
      status: "stable",
    },
    {
      // Allows usecounter in `ClipboardItem`
      name: "ClipboardItemGetTypeCounter",
      status: "stable",
    },
    {
      // Support ClipboardItemData of Promise<DOMString> type according to spec
      // https://w3c.github.io/clipboard-apis/#typedefdef-clipboarditemdata
      name: "ClipboardItemWithDOMStringSupport",
      status: "stable",
    },
    {
      // TODO(crbug.com/440374239): Disabled due to https://crbug.com/440374239.
      name: "ClipElementVisibleBoundsInLocalRoot",
    },
    {
      name: "ClipPathNestedRasterOptimization",
      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: "CollapseZeroWidthSpaceWhenReuseItem",
      status: "stable",
    },
    {
      name: "CollectWidthAndHeightAsPresentationAttributesForUse",
      status: "stable",
    },
    {
      name: "CollectWidthAndHeightAsStylesForNestedSvg",
      status: "stable",
    },
    // Enable the display-p3-linear color space in CSS.
    // https://chromestatus.com/feature/5162372125818880
    {
      name: "ColorSpaceDisplayP3Linear",
      status: "stable",
    },
    // Enable the srgb-linear and display-p3-linear color spaces in
    // PredefinedColorSpace.
    // https://chromestatus.com/feature/5122501071994880
    {
      name: "ColorSpacePredefinedLinearSpaces",
      status: "experimental",
    },
    // Enable the rec2100-linear color space in CSS and PredefinedColorSpace.
    // https://chromestatus.com/feature/5204024772788224
    {
      name: "ColorSpaceRec2100Linear",
      status: "experimental",
    },
    {
      // Makes the command event not composed. Launched in M141.
      // https://github.com/whatwg/html/pull/11255
      // https://issues.chromium.org/issues/414826954
      name: "CommandEventNotComposed",
      status: "stable",
    },
    {
      // Return the current target from composedPath() while
      // dispatching.
      // This was added in M142 and can be removed after M144.
      // https://issues.chromium.org/issues/444932649
      // https://issues.chromium.org/issues/346766786
      name: "ComposedPathReturnTargetBeingDispatched",
      status: "stable",
    },
    {
      name: "CompositeBGColorAnimation",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "CompositeBoxShadowAnimation",
    },
    {
      name: "CompositeClipPathAnimation",
      status: "experimental",
      public: true,
    },
    {
      name: "CompositedAnimationsCancelledAsynchronously",
      status: "stable"
    },
    {
      name: "CompositedSelectionUpdate",
      public: true,
      status: {"Android": "stable"},
      base_feature: "none",
    },
    {
      name: "CompositingDecisionAtAnimationPhaseBoundaries"
    },
    {
      name: "CompositionForegroundMarkers",
      status: {
        "Android": "stable",
        "default": "",
      }
    },
    {
      // When enabled, EventTriggers[1] will function via cc::EventTrigger
      // objects that live on the compositor thread.
      // [1] https://drafts.csswg.org/css-animations-2/#event-triggers
      name: "CompositorEventTrigger"
    },
    {
      // When enabled, TimelineTriggers[1] will function via cc::TimelineTrigger
      // objects that live on the compositor thread.
      // [1] https://drafts.csswg.org/css-animations-2/#timeline-triggers
      name: "CompositorTimelineTrigger",
    },
    {
      name: "CompressionDictionaryTransport",
      base_feature: "none",
      public: true,
    },
    {
      name: "ComputedAccessibilityInfo",
      status: "experimental",
    },
    {
      name: "ComputeInlineContentsSafeRetarget",
      status: "stable",
    },
    {
      name: "ComputePressure",
      status: {
        "Android": "",
        "default": "stable",
      }
    },
    {
      name: "ComputePressureOwnContributionEstimate",
      status: {
        "Android": "",
        "default": "experimental",
      }
    },
    {
      // Fix for https://crbug.com/40659076. When enabled, queryCommandState for
      // 'subscript' or 'superscript' with a caret selection will consider
      // ancestor <sub> or <sup> elements, matching the behavior for range
      // selections.
      name: "ConsiderSubOrSuperScriptAncestorAlignForCaretSelection",
      status: "stable"
    },
    {
      name: "ContactsManager",
      status:  {"Android": "stable", "default": "test"},
    },
    {
      name: "ContactsManagerExtraProperties",
      status:  {"Android": "stable", "default": "test"},
    },
    {
      name: "ContainerTiming",
      status: "experimental",
    },
    {
      name: "ContentIndex",
      status:  {"Android": "stable", "default": "experimental"},
    },
    {
      name: "ContextMenu",
      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: "stable",
    },
    {
      // Experimental support for requesting SecurityInfo
      // in WebRequest API for controlled frames.
      name: "ControlledFrameWebRequestSecurityInfo",
      status: "test",
      depends_on: ["ControlledFrame"],
    },
    {
      name: "CookieDeprecationFacilitatedTesting",
      base_feature: "none",
    },
    {
      // Enables setting the `maxAge` option when creating a cookie in the
      // Cookie Store API.
      name: "CookieStoreAPIMaxAge",
      status: "experimental",
    },
    {
      name: "CoopRestrictProperties",
      origin_trial_feature_name: "CoopRestrictProperties",
      base_feature: "none",
    },
    {
      // Corrects the handling of <form> elements nested within <template> tags
      // in HTML parsing. See https://crbug.com/352896478 for details.
      name: "CorrectTemplateFormParsing",
      status: "experimental"
    },
    {
      name: "CorsRFC1918",
    },
    {
      // CPU Performance API, work in progress.
      // https://chromestatus.com/feature/5189864286978048
      // https://github.com/explainers-by-googlers/cpu-performance
      name: "CpuPerformance",
      status: "experimental"
    },
    {
      name: "CrashReportingStorageAPI",
      status: "experimental",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      origin_trial_feature_name: "CrashReportingStorageAPI",
    },
    {
      name: "CreateInlineContentsExcludeOutOfFlow",
      status: "stable",
    },
    {
      // When enabled, allowlisting script urls and scripts used in eval via
      // hashes will be supported in script-src. This is a no-op if the
      // network::features::kCSPScriptSrcHashesInV1 flag is off, since it
      // controls parsing in the network service.
      // See crbug.com/392657736 for details.
      name: "CSPHashesV1",
      base_feature: "none",
      origin_trial_feature_name: "CSPExtendedScriptSrcHashes",
      origin_trial_os: ["win", "linux", "mac", "android", "chromeos"],
      status: "experimental",
      public: true,
    },
    {
      name: "CSPReportHash",
      status: "stable",
    },
    {
      // The AccentColor And AccentColorText CSS system color keywords
      name: "CSSAccentColorKeyword",
      status: "experimental",
    },
    {
      // Allows using counter() and counters() in alt text (after / in content property).
      name: "CSSAltCounter",
      status: "stable",
    },
    {
      // An update of anchor positioning (primarily how scrolling affects
      // layout, but includes other inter-connected changes).
      name: "CSSAnchorUpdate",
      status: "stable",
    },
    {
      // Let transforms affect anchor() and anchor-size() functions.
      name: "CSSAnchorWithTransforms",
      status: "stable",
    },
    {
      // Whether <image> values are allowed as counter style <symbol>
      name: "CSSAtRuleCounterStyleImageSymbols",
    },
    {
      // https://drafts.csswg.org/css-counter-styles/#counter-style-speak-as
      name: "CSSAtRuleCounterStyleSpeakAsDescriptor",
      status: "test",
    },
    // https://chromestatus.com/feature/5459864205393920
    {
      // https://chromestatus.com/feature/5125388091260928
      name: "CSSBorderShape",
      status: "experimental",
    },
    {
      // Support CSS Values Level 4 calc simplification and serialization
      // as specified in the specs below.
      // https://drafts.csswg.org/css-values-4/#calc-simplification
      // https://drafts.csswg.org/css-values-4/#calc-serialize
      name: "CSSCalcSimplificationAndSerialization",
    },
    {
      // https://chromestatus.com/feature/5082469066604544
      name: "CSSCaretAnimation",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/6106160780017664
      name: "CSSCaretShape",
      status: "stable",
    },
    {
      // Support case-sensitive attribute selector modifier
      // https://drafts.csswg.org/selectors-4/#attribute-case
      name: "CSSCaseSensitiveSelector",
      status: "test",
    },
    {
      // In the cases where it is impossible or impractical to determine the
      // measure of the “0” glyph, it must be assumed to be 0.5em wide by 1em
      // tall. Thus, the ch unit falls back to 0.5em in the general case, and to
      // 1em when it would be typeset upright (i.e. writing-mode is vertical-rl or
      // vertical-lr and text-orientation is upright).
      // https://drafts.csswg.org/css-values-4/#ch
      // See crbug.com/416145497 for more details.
      name: "CSSChUnitSpecCompliantFallback",
      status: "stable",
    },
    {
      name: "CSSColorContrast",
      status: "experimental",
    },
    {
      name: "CSSColorTypedOM",
      status: "experimental",
    },
    {
      // https://github.com/w3c/csswg-drafts/issues/12090#issuecomment-3204775586
      name: "CSSContainerNameNotTreeScoped",
      status: "experimental",
    },
    // https://drafts.csswg.org/css-values-5/#progress
    // container-progress()
    {
      name: "CSSContainerProgressNotation",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/css-conditional-5/#typedef-style-range
      name: "CSSContainerStyleQueriesRange",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-borders-4/#corner-shaping
      name: "CSSCornerShapeInsetBoxShadowFollowsContour",
      status: "test",
    },
    {
      // https://drafts.csswg.org/css-borders-4/#corner-shaping
      name: "CSSCornersShorthand",
      status: "experimental",
    },
    {
      // Unprefixed cross-fade() (in addition to the existing -webkit-cross-fade()).
      // https://drafts.csswg.org/css-images-4/#cross-fade-function
      name: "CSSCrossFade",
      status: "experimental",
    },
    {
      name: "CSSCustomMedia",
      status: "test",
    },
    {
      name: "CSSDynamicRangeLimit",
      status: "stable",
    },
    {
      // Include custom properties in CSSComputedStyleDeclaration::item/length.
      // https://crbug.com/949807
      name: "CSSEnumeratedCustomProperties",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-anchor-position-2/#anchored
      name: "CSSFallbackContainerQueries",
      status: "stable",
    },
    {
      // crbug.com/417306102
      name: "CssFitWidthText",
      status: "experimental",
    },
    {
      name: "CSSFontSizeAdjust",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-mixins-1/#function-rule
      name: "CSSFunctions",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/5157805733183488
      name: "CSSGapDecoration",
      status: "experimental",
    },
    {
      // https://chromestatus.com/feature/5157805733183488
      name: "CSSGridGapSuppression",
      status: "experimental",
      depends_on: ["CSSGapDecoration"],
    },
    {
      // This needs to be kept as a runtime flag as long as we need to forcibly
      // disable it for WebView on Android versions older than P. See
      // https://crrev.com/f311a84728272e30979432e8474089b3db3c67df
      name: "CSSHexAlphaColor",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-values-5/#ident
      name: "CSSIdentFunction",
      status: "test",
    },
    {
      // The inherit() function works like var(), except that it grabs
      // the computed value of the specified property from the parent style
      // instead of the current style.
      //
      // https://drafts.csswg.org/css-values-5/#inherit-notation
      name: "CSSInheritFunction",
      status: "experimental",
    },
    {
      // CSS if() function for custom properties. Flag is used only for media
      // queries support in conditions.
      // https://drafts.csswg.org/css-values-5/#if-notation.
      name: "CSSInlineIfForMediaQueries",
      status: "stable",
    },
    {
      // CSS if() function for custom properties. Flag is used only for style
      // queries support in conditions.
      // https://drafts.csswg.org/css-values-5/#if-notation.
      name: "CSSInlineIfForStyleQueries",
      status: "stable",
    },
    {
      // CSS if() function for custom properties. Flag is used only for supports
      // queries support in conditions.
      // https://drafts.csswg.org/css-values-5/#if-notation.
      name: "CSSInlineIfForSupportsQueries",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/6289894144212992
      name: "CSSKeyframesRuleLength",
      status: "stable",
    },
    {
      name: "CSSLayoutAPI",
      status: "experimental",
    },
    {
      name: "CSSLetterAndWordSpacingPercentage",
      status: "experimental",
    },
    {
      name: "CSSLineClamp",
      status: "experimental",
    },
    {
      name: "CSSLineClampLineBreakingEllipsis",
      depends_on: ["CSSLineClamp"],
    },
    {
      // Implements `counter-increment` and `counter-set` for the non-<li>
      // elements and the reversed ordered lists.
      //
      // https://crbug.com/40682542
      name: "CSSListCounterAccounting",
      status: "experimental",
    },
    {
      // Allows pseudo-element selectors within logical combination pseudo-
      // classes, e.g. :is(div::before).
      //
      // https://crbug.com/444386484
      name: "CSSLogicalCombinationPseudo",
    },
    {
      name: "CSSMarkerNestedPseudoElement",
      status: "stable",
    },
    {
      name: "CSSMasonryLayout",
      status: "experimental",
      public: true,
    },
    // https://drafts.csswg.org/css-values-5/#progress
    // media-progress()
    {
      name: "CSSMediaProgressNotation",
      status: "experimental",
    },
    {
      name: "CSSMixins",
      status: "experimental",
    },
    {
      name: "CSSNestedPseudoElements",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/5261280285949952
      name: "CSSOverscrollGestures",
      status: "test",
    },
    {
      name: "CSSPaintAPIArguments",
      status: "experimental",
    },
    {
      // Ignore the stylesheet encoding when parsing URLs, always using UTF-8.
      // See crbug.com/1485525.
      name: "CSSParserIgnoreCharsetForURLs",
    },
    {
      name: "CSSPositionAnchorNone",
      status: "stable",
    },
    {
      name: "CSSPositionStickyStaticScrollPosition",
      status: "test",
    },
    // https://drafts.csswg.org/css-values-5/#progress
    // progress()
    {
      name: "CSSProgressNotation",
      status: "stable",
    },
    {
      // For ::column pseudo-element for fragment styling.
      // https://github.com/flackr/carousel/blob/main/fragmentation/README.md
      name: "CSSPseudoColumn",
      status: "stable",
    },
    {
      name: "CSSPseudoElementInterface",
      status: "experimental",
    },
    {
      // Enables the :has-slotted pseudo-selector.
      // https://chromestatus.com/feature/5134941143433216
      name: "CSSPseudoHasSlotted",
      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: "stable",
      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: "stable",
      depends_on: ["PseudoElementsFocusable"],
    },
    {
      name: "CSSRandomFunction",
      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",
    },
    {
      name: "CSSRevertRule",
      status: "experimental",
    },
    {
      name: "CSSRubyOverhang",
      status: "experimental",
    },
    {
      name: "CSSSafePrintableInset",
      status: "experimental",
    },
    {
      // The '&' pseudo-class effectively behaves like :where(:scope)
      // when used in @scope rules.
      name: "CSSScopeifiedParentPseudoClass",
      status: "stable",
    },
    {
      // The "@import scope(...)" syntax.
      // https://github.com/w3c/csswg-drafts/issues/7348
      name: "CSSScopeImport",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/css-conditional-5/#scrolled
      name: "CSSScrolledContainerQueries",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2#scroll-initial-target
      name: "CSSScrollInitialTarget",
      status: "stable",
    },
    {
      // https://github.com/w3c/csswg-drafts/issues/12122
      name: "CSSScrollMarkerGroupModes",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/css-overflow-5/#active-before-after-scroll-markers
      // :target-before and :target-after pseudo classes for scroll markers.
      name: "CSSScrollMarkerTargetBeforeAfter",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchange
      name: "CSSScrollSnapChangeEvent",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#scrollsnapchanging
      name: "CSSScrollSnapChangingEvent",
      status: "stable",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#snapevent-interface
      name: "CSSScrollSnapEventConstructorExposed",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/css-scroll-snap-2/#snap-events
      name: "CSSScrollSnapEvents",
      status: "stable",
      implied_by: ["CSSScrollSnapChangeEvent", "CSSScrollSnapChangingEvent"],
    },
    {
      // scroll-target-group property
      // https://drafts.csswg.org/css-overflow-5/#scroll-target-group
      name: "CSSScrollTargetGroup",
      status: "stable",
    },
    {
      // scroll-target-group property sets aria-current=true on :target-current html scroll marker.
      name: "CSSScrollTargetGroupAriaCurrent",
      status: "experimental",
    },
    {
      name: "CSSSelectorFragmentAnchor",
      status: "experimental",
      base_feature: "CssSelectorFragmentAnchor",
    },
    {
      name: "CSSSupportsAtRuleFunction",
      status: "experimental",
    },
    {
      name: "CSSSupportsForImportRules",
      status: "stable",
    },
    {
      // Allows the CSS "accent-color" property to support the system accent color as the default option.
      name: "CSSSystemAccentColor",
      status: {
        "ChromeOS": "stable",
        "Mac": "stable",
        "Win": "stable",
        "default": "experimental",
      },
    },
    {
      // https://issues.chromium.org/40787216: CSS `text-align: match-parent` value
      name: "CSSTextAlignMatchParent",
      status: "experimental",
    },
    {
      // crbug.com/40321528
      name: "CssTextJustify",
      status: "test",
    },
    {
      // crbug.com/1463890, crbug.com/1463891: CSS `text-spacing` shorthand
      name: "CSSTextSpacing",
      status: "test",
    },
    {
      // https://issues.chromium.org/41297237: CSS `text-transform: full-width` value
      name: "CSSTextTransformFullWidth",
      status: "experimental",
    },
    {
      // 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",
    },
    {
      name: "CSSTypedArithmetic",
      status: "stable",
    },
    // Support for `user-select:contain`.
    {
      name: "CSSUserSelectContain",
      status: "test",
    },
    {
      name: "CSSVideoDynamicRangeMediaQueries",
      status: "experimental",
    },
    {
      // https://chromestatus.com/feature/4850737974345728
      name: "CSSViewTransitionAutoName",
      status: "experimental",
    },
    {
      // appearance:base-select for <select multiple> and <select size=n>
      // https://issues.chromium.org/issues/357649033
      name: "CustomizableSelectInPage",
      status: "experimental",
      depends_on: ["SelectMobileDesktopParity"],
    },
    {
      // appearance:base-select for <select multiple size=1> with a picker.
      name: "CustomizableSelectMultiplePopup",
      status: "experimental",
      depends_on: ["CustomizableSelectInPage"],
    },
    // see crbug.com/341313078
    {
      name: "CustomScrollbarApplyMinimumThumbLength",
      status: "stable",
    },
    {
      // https://chromestatus.com/feature/5134293578285056
      name: "Database",
    },
    // https://crbug.com/448174611
    {
      name: "DeclarativeCSSModules",
      status: "experimental",
    },
    {
      // https://crbug.com/393631108
      name: "DecoupleComputedBorderWidthFromStyle",
      public: true,
      status: "experimental",
    },
    {
      // https://crbug.com/393631108
      name: "DecoupleResolvedColumnRuleWidthFromStyle",
      public: true,
      status: "experimental",
    },
    {
      // Killswitch for https://crbug.com/400317114 fix.
      // This lands in M142, and the flag can be removed in M144.
      name: "DelegatesFocusTextControlInputFix",
      status: "stable",
    },
    {
      name: "DeprecateCursorMovementIterator",
      status: "stable",
    },
    // This allows pages to opt out of the unload deprecation. Enabling this
    // allows unload event handers to be used in the frame regardless of any
    // Permissions-Policy setting.
    // https://crbug.com/1432116
    {
      name: "DeprecateUnloadOptOut",
      origin_trial_feature_name: "DeprecateUnloadOptOut",
      origin_trial_type: "deprecation",
      origin_trial_allows_third_party: true,
      origin_trial_allows_insecure: true,
    },
    {
      name: "DesktopCaptureDisableLocalEchoControl",
      status: "experimental",
    },
    {
      name: "DesktopPWAsAdditionalWindowingControls",
      status: "test",
    },
    {
      name: "DesktopPWAsSubApps",
      status: "test",
    },
    {
      name: "DeviceAttributes",
      status: {
        "ChromeOS": "stable",
        "default": "experimental",
      },
    },
    {
      name: "DeviceAttributesPermissionPolicy",
      status: "stable",
    },
    {
      name: "DeviceBoundSessionCredentials",
      origin_trial_feature_name: "DeviceBoundSessionCredentials",
      origin_trial_os: ["win", "linux", "mac"],
      status: "experimental",
      // Killswitch is net::features::kDeviceBoundSessions
      base_feature: "none",
    },
    {
      name: "DeviceBoundSessionCredentials2",
      origin_trial_feature_name: "DeviceBoundSessionCredentials2",
      origin_trial_os: ["win", "linux", "mac"],
      status: "experimental",
      // Killswitch is net::features::kDeviceBoundSessions
      base_feature: "none",
    },
    {
      name: "DeviceOrientationRequestPermission",
      status: "experimental",
    },
    {
      name: "DevicePosture",
      status: "stable",
    },
    {
      // This feature makes the <dialog> element close properly when its "open"
      // attribute is removed. https://github.com/whatwg/html/issues/5802 and
      // https://github.com/whatwg/html/pull/10124.
      name: "DialogCloseWhenOpenRemoved",
      status: "experimental",
    },
    {
      name: "DialogNewFocusBehavior",
      status: "experimental",
    },
    {
      name: "DigitalGoods",
      origin_trial_feature_name: "DigitalGoodsV2",
      origin_trial_os: ["android", "chromeos"],
      public: true,
      status: {
        "Android": "stable",
        "ChromeOS": "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": "stable",
        // crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux,
        // so enable the API on all platforms for testing.
        "default": "test"
      },
    },
    {
      name: "DirectSockets",
      public: true,
      status: "stable",
    },
    {
      // Experimental support for the Direct Sockets API in Service Workers.
      // https://github.com/WICG/direct-sockets
      name: "DirectSocketsInServiceWorkers",
      status: "test",
      depends_on: ["DirectSockets"],
    },
    {
      // Experimental support for the Direct Sockets API in Shared Workers.
      // https://github.com/WICG/direct-sockets
      name: "DirectSocketsInSharedWorkers",
      status: "test",
      depends_on: ["DirectSockets"],
    },
    {
      name: "DisableDifferentOriginSubframeDialogSuppression",
      base_feature: "none",
      origin_trial_feature_name: "DisableDifferentOriginSubframeDialogSuppression",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
    },
    {
      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",
    },
    {
      // Disables removeFormat command on Plaintext-only content editable div
      name: "DisableRemoveFormatForPlainTextOnlyEditableDiv",
      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,
    },
    {
      // https://chromestatus.com/feature/5067126381215744
      name: "DocumentActiveViewTransition",
      status: "stable",
    },
    {
      name: "DocumentCookie",
    },
    {
      name: "DocumentDomain",
    },
    {
      // Enables DocumentIsolationPolicy.
      // See https://https://github.com/WICG/document-isolation-policy.
      name: "DocumentIsolationPolicy",
      status: "experimental",
      origin_trial_feature_name: "DocumentIsolationPolicy",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      base_feature: "none",
    },
    {
      // Fix iframe unload events not firing during document.open()
      // https://crbug.com/40947017
      // Lands in M144; remove this flag in M146 after the milestone rolls.
      name: "DocumentOpenIframeUnloadEvents",
      status: "stable",
    },
    {
      name: "DocumentOpenOriginAliasRemoval",
      status: "experimental",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "DocumentOpenSandboxInheritanceRemoval",
      status: "stable",
      copied_from_base_feature_if: "overridden",
    },
    // https://chromestatus.com/feature/5111042975465472
    // document.patch, <template patchfor> etc.
    {
      name: "DocumentPatching",
      status: {
        "default": "test",
      },
    },
    {
      name: "DocumentPictureInPictureAPI",
      status: {
        "Android": "",
        "default": "stable",
      },
    },
    // Enables `preferInitialWindowPlacement` Document PiP option to skip
    // re-using the previous pip window bounds.
    {
      name: "DocumentPictureInPicturePreferInitialPlacement",
      status: {
        "Android": "",
        "default": "stable",
      },
    },
    // Enables propagating user activation from a document picture-in-picture
    // window up to its opener window and vice versa.
    {
      name: "DocumentPictureInPictureUserActivation",
      status: {
        "Android": "",
        "default": "stable",
      },
    },
    // Enables the ability to use Document Policy header to control feature
    // DocumentDomain.
    {
      name: "DocumentPolicyDocumentDomain",
      status: "experimental",
    },
    // Enables the ability to use Document Policy header to control feature
    // ExpectNoLinkedResources.
    {
      name: "DocumentPolicyExpectNoLinkedResources",
      status: "stable",
    },
    // Enables the ability to use Document Policy header to control feature
    // IncludeJSCallStacksInCrashReports. https://chromestatus.com/feature/4731248572628992
    {
      name: "DocumentPolicyIncludeJSCallStacksInCrashReports",
      status: "stable",
    },
    {
      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
    // NetworkEfficiencyGuardrails. https://chromestatus.com/feature/5156240166223872
    {
      name: "DocumentPolicyNetworkEfficiencyGuardrails",
      status: "experimental",
    },
    // Enables the ability to use Document Policy header to control feature
    // SyncXHR.
    {
      name: "DocumentPolicySyncXHR",
      status: "experimental",
    },
    {
      name: "DocumentWrite",
    },
    {
      name: "DOMPartsAPI",
      status: "experimental",
      implied_by: ["DOMPartsAPIMinimal"],
    },
    {
      name: "DOMPartsAPIMinimal",
    },
    {
      // Enable drag and drop delegation to child frames in HTMLPlugInElements
      // (object/embed elements). Fixes drag and drop from text inputs/textareas
      // to elements inside object frames.
      name: "DragAndDropPluginElementSupport",
      status: "stable",
    },
    {
      // See https://crbug.com/379170477
      name: "EditContextHandleTextOrSelectionUpdateDuringComposition",
      status: "test",
      settable_from_internals: true
    },
    {
      name: "EditEmojiUnicode11",
      status: "stable",
    },
    {
      public: true,
      name: "ElementCapture",
      status: {"Android": "experimental", "iOS": "", "default": "stable"},
    },
    {
      name: "ElementInnerTextHandleFirstLineStyle",
      status: "stable",
    },
    {
      // ElementInternals.type allows web authors to create autonomous
      // custom elements that inherit specific behaviors from native
      // HTML elements, while maintaining the ability to use shadow DOM
      // and custom rendering.
      // crbug.com/422947646
      // https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/ElementInternalsType/explainer.md
      name: "ElementInternalsDotType",
      status: "experimental",
    },
    {
      // crbug.com/447267214
      name: "EmojiJustification",
      status: "stable",
    },
    {
      name: "EmphasisMarkShapeCache",
      status: "stable",
    },
    {
      name: "EndpointInclusiveCommitStyles",
      status: "stable",
    },
    {
      name: "EnforceAnonymityExposure",
      status: "stable",
    },
    {
      // See: crbug.com/40771555
      name: "EnterInOpenShadowRoots",
      status: "stable",
    },
    // When enabled, the LCP algorithm ignores image entropy for the first
    // video frame. See crbug.com/434659232.
    {
      name: "EntropyIgnoredForFirstVideoFrameLCP",
      status: "experimental",
    },
    {
      // See crbug.com/453919401 for more details.
      name: "EquivalentEncompassRounding",
      status: "stable",
    },
    {
      // `event.pseudoTarget` property to represent pseudo-elements in events. Returns `CSSPseudoElement` or null.
      name: "EventPseudoTargetProperty",
      status: "experimental",
      depends_on: ["CSSPseudoElementInterface"],
    },
    {
      // See: crbug.com/40887145
      "name": "EventTargetStringIdentifierUsesQuotes",
      "status": "stable",
    },
    {

      // Kill-switch for https://chromestatus.com/feature/5153386492198912
      // Added in M144, can be removed in M146.
      name: "EventTimingInteractionCount",
      status: "stable",
    },
    {
      name: "EventTimingTargetSelector",
      status: "experimental",
    },
    {
      // https://drafts.csswg.org/web-animations-2/#triggers
      name: "EventTrigger",
      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: "ExposeCSSFontFeatureValuesRule",
      status: "stable",
    },
    {
      name: "ExposeRenderTimeNonTaoDelayedImage",
    },
    {
      name: "ExtendedTextMetrics",
      origin_trial_feature_name: "ExtendedTextMetrics",
      origin_trial_allows_third_party: true,
      status: "experimental",
    },
    {
      // Kill-switch for crbug.com/40434449.
      // Added in M139, and it can be removed in M141.
      name: "ExternalPopupMenuClickEvent",
      status: "stable",
    },
    {
      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": "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: "FastPositionIterator",
      // Not enabled due to a RTL issue. crbug.com/1421016.
    },
    {
      name: "FedCm",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "FedCmAutofill",
      implied_by: ["FedCmDelegation"],
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "FedCmDelegation",
      depends_on: ["FedCm"],
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "FedCmErrorAttribute",
      depends_on: ["FedCm"],
      public: true,
      base_feature: "none",
    },
    {
      name: "FedCmIdPRegistration",
      depends_on: ["FedCm"],
      public: true,
      status: "test",
      base_feature: "none",
    },
    {
      name: "FedCmLightweightMode",
      depends_on: ["FedCm"],
      status: "test",
      public: true,
      base_feature: "none",
    },
    {
      name: "FedCmMultipleIdentityProviders",
      depends_on: ["FedCm"],
      status: "stable",
      base_feature: "none",
      public: true,
      origin_trial_feature_name: "FedCmMultipleIdentityProviders",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      origin_trial_allows_third_party: true,
    },
    {
      name: "FedCmNonStringToken",
      depends_on: ["FedCm"],
      public: true,
      base_feature: "none",
      status: "stable",
    },
    {
      name: "FencedFrames",
      base_feature: "none",
      // This helps enable and expose the <fencedframe> element, but note that
      // blink::features::kFencedFrames must be enabled as well, as we require
      // the support of the browser process to fully enable the feature.
      // Enabling this runtime enabled feature alone has no effect.
      public: true,
      status: "stable",
    },
    {
      name: "FencedFramesAPIChanges",
      // Various new IDL attributes on the <fencedframe> element (such as
      // `config`, `sandbox`, and `allow`).
      base_feature_status: "enabled",
      copied_from_base_feature_if: "enabled_or_overridden",
      status: "stable",
    },
    {
      name: "FencedFramesDefaultMode",
      base_feature_status: "disabled",
      copied_from_base_feature_if: "enabled_or_overridden",
      public: true,
    },
    {
      // Allows fenced frames to access unpartioned data via Shared Storage in
      // exchange for disabling untrusted network access. This is the Blink
      // counterpart of the base::Feature with the same name. Because local
      // unpartitioned data access requires browser and renderer process
      // coordination, the value of this flag is strictly controlled by the
      // base::Feature variant, and setting this flag does nothing.
      name: "FencedFramesLocalUnpartitionedDataAccess",
      base_feature: "none",
      public: true,
    },
    {
      // Add Request.bytes() and Response.bytes()
      // https://chromestatus.com/feature/5239268180754432
      name: "FetchBodyBytes",
      status: "stable",
    },
    {
      // The Blink runtime-enabled feature name for the API's IDL.
      // https://chromestatus.com/feature/4654499737632768
      name: "FetchLaterAPI",
      status: "stable",
    },
    {
      // The retry ability for Fetch keepalive requests.
      // https://chromestatus.com/feature/5181984581877760
      name: "FetchRetry",
      origin_trial_feature_name: "FetchRetry",
      origin_trial_allows_third_party: true,
      status: "experimental",
      base_feature: "FetchRetry",
      // 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": "experimental",
        "default": "",
      }
    },
    {
      // Non-OPFS File System Access API.
      name: "FileSystemAccessLocal",
      status: {"default": "stable"},
    },
    {
      name: "FileSystemAccessLockingScheme",
      status: "stable",
    },
    {
      // OPFS File System Access API.
      name: "FileSystemAccessOriginPrivate",
      status: "stable",
    },
    {
      // When enabled, calling remove() on a FileSystemAccessHandle will also
      // update the permission grants for the associated path. Restored after
      // next write to the path.
      // See crbug.com/421690393.
      name: "FileSystemAccessRevokeReadOnRemove",
      depends_on: ["FileSystemAccessWriteMode"],
      status: "stable",
    },
    {
      // Controls the internal write-only mode for various FileSystemAccess API.
      // This covers mostly content layer and does not expose any write mode to
      // user visible APIs.
      // This flag is part of crbug.com/421690393 and crbug.com/328458680.
      name: "FileSystemAccessWriteMode",
      status: "stable",
    },
    {
      // The FileSystemObserver interface for the File System Access API.
      // See https://crbug.com/1019297.
      name: "FileSystemObserver",
      depends_on: ["FileSystemAccess"],
      status: {
        "Android": "experimental",
        "iOS": "experimental",
        "default": "stable",
      },
    },
    {
      // The unobserve function of the FileSystemObserver.
      // See https://crbug.com/321980469.
      name: "FileSystemObserverUnobserve",
      status: "experimental",
    },
    {
      // crbug.com/438220615
      name: "FindAcrossParagraphsInTextarea",
      status: "stable",
    },
    {
      name: "FindFirstMisspellingEndWhenNonEditable",
      status: "stable",
    },
    {
      name: "FirstLineOnListItem",
      status: "stable",
    },
    {
      name: "FirstLineTextMetrics",
      status: "stable",
    },
    {
      // crbug.com/411739501
      name: "FixNextPositionCalculationInInsertList",
      status: "stable",
    },
    {
      // Fix for strikethrough toggle not working in empty
      // contenteditable. See https://crbug.com/427915243
      name: "FixStrikethroughToggleInEmptyContentEditable",
      status: "stable",
    },
    {
      name: "Fledge",
      status: "stable",
      base_feature: "none",
      public: true,
    },
    {
      // Enables deal support within auctions.
      name: "FledgeAuctionDealSupport",
      status: "test",
    },
    {
      name: "FledgeBiddingAndAuctionServerAPI",
      origin_trial_feature_name: "FledgeBiddingAndAuctionServer",
      origin_trial_allows_third_party: true,
      base_feature: "none",
      status: "stable",
    },
    {
      name: "FledgeBiddingAndAuctionServerAPIMultiSeller",
      status: "stable",
    },
    {
      name: "FledgeClickiness",
      status: "test",
    },
    {
      name: "FledgeCustomMaxAuctionAdComponents",
      status: "stable",
    },
    {
      // Enables using a 'deprecatedRenderURLReplacements' field within the
      // Protected Audience ad auction config.
      name: "FledgeDeprecatedRenderURLReplacements",
      public: true,
      status: "stable",
    },
    {
      name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
      status: "stable",
    },
    {
      // Feature flag to control removal, in case we run into unexpected
      // breakage.
      //
      // TODO(crbug.com/384481095): Remove in a few milestones, along with the
      // implementation code.
      name: "FledgeDirectFromSellerSignalsWebBundles",
    },
    {
      name: "FledgeMultiBid",
      public: true,
      status: "stable",
    },
    {
      // Enables the private model training API in Protected Audience.
      // https://github.com/WICG/turtledove/blob/main/PA_private_model_training.md
      name: "FledgePrivateModelTraining",
      status: "test",
    },
    {
      // Enables real time reporting API in Protected Audience.
      // https://github.com/WICG/turtledove/blob/main/PA_real_time_monitoring.md
      name: "FledgeRealTimeReporting",
      public: true,
      status: "stable",
    },
    {
      // Enables the ability to set seller nonces on the header response and
      // use bidNonce in bids.
      name: "FledgeSellerNonce",
      status: "stable",
    },
    {
      // Enables having `executionMode` in the auctionConfig to use for seller scripts.
      name: "FledgeSellerScriptExecutionMode",
      status: "test",
    },
    {
      name: "FledgeTrustedSignalsKVv1CreativeScanning",
      status: "test",
    },
    {
      name: "FledgeTrustedSignalsKVv2ContextualData",
      depends_on: ["FledgeTrustedSignalsKVv2Support"],
      status: "test",
    },
    {
      name: "FledgeTrustedSignalsKVv2Support",
      status: "stable",
    },
    {
      name: "FlexWrapBalance",
      status: "experimental",
    },
    {
      name: "FluentOverlayScrollbars",
      // The associated base feature is defined in
      // ui/native_theme/features/native_theme_features.cc.
      base_feature: "none",
    },
    {
      name: "FluentScrollbars",
      // The associated base feature is defined in
      // ui/native_theme/features/native_theme_features.cc.
      base_feature: "none",
    },
    {
      // https://open-ui.org/components/scoped-focusgroup.explainer/
      name: "Focusgroup",
      status: "experimental",
      origin_trial_feature_name: "Focusgroup",
    },
    {
      // 2-D grid navigation functionality of focusgroup is considered out of
      // scope for the initial implementation.
      // crbug.com/445992558
      name: "FocusgroupGrid",
      depends_on: ["Focusgroup"],
      status: "experimental",
    },
    {
      name: "FontAccess",
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "FontFallbackForTabSize",
      status: "stable",
    },
    {
      name: "FontFamilyPostscriptMatchingCTMigration",
    },
    {
      name: "FontFamilyStyleMatchingCTMigration",
    },
    {
      // crbug.com/40398871
      name: "FontFeatureSettingsDescriptor",
      status: "stable",
    },
    {
      // crbug.com/41170551
      name: "FontLanguageOverride",
      status: "stable",
    },
    {
      name: "FontMatchAliasesAsLastResort",
      status: "stable",
    },
    {
      name: "FontSrcLocalMatching",
      base_feature: "none",
      // No status, as the web platform runtime enabled feature is controlled by
      // a Chromium level feature.
    },
    {
      // crbug.com/393391746
      name: "FontStyleObliqueZeroDegreeAsNormal",
      status: "stable",
    },
    {
      // crbug.com/40398871
      name: "FontVariationSettingsDescriptor",
      status: "stable",
    },
    {
      // TODO(crbug.com/1231644): This flag is being kept (even though the
      // feature has shipped) until there are settings to allow users to
      // customize the feature.
      name: "ForcedColors",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // This is used in tests to perform memory measurement without
      // waiting for GC.
      name:"ForceEagerMeasureMemory",
    },
    {
      // https://github.com/flackr/reduce-motion/blob/main/explainer.md
      name: "ForceReduceMotion",
    },
    {
      // The FormControlRange interface allows web authors to create
      // Range-like objects of the value of <textarea> and <input>
      // elements.
      // crbug.com/421421332
      // https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/FormControlRange/explainer.md
      name: "FormControlRange",
      status: "test",
    },
    {
      // TODO(crbug.com/1419161): Remove this feature after M113 has been stable
      // for a few weeks or more. This is a kill switch that, when enabled, goes
      // back to the old behavior, which was to restore the state for <input>
      // and <select> even when they had `autocomplete=off`.
      name: "FormControlRestoreStateIfAutocompleteOff",
    },
    {
      name: "FractionalScrollOffsets",
      base_feature: "none",
      public: true,
    },
    {
      name: "FreezeFramesOnVisibility",
      status: "experimental",
    },
    {
      name: "GamepadMultitouch",
      status: "experimental",
      public: true,
    },
    {
      name: "GamepadWindowEventHandlers",
      status: "stable",
    },
    {
      // Tracking bug for the implementation: https://crbug.com/430204832
      name: "GeolocationElement",
      status: "experimental",
      public: true,
    },
    {
      name: "GetAllScreensMedia",
      depends_on: ["GetDisplayMedia"],
      public: true,
      status: {
        "ChromeOS": "stable",
        "default": "test",
      },
    },
    {
      name: "GetComputedStyleOutsideFlatTree",
      status: "stable",
    },
    {
      name: "GetDisplayMedia",
      public: true,
      status: {
        "Android": "experimental",
        "default": "stable",
      },
      base_feature: "none",
    },
    {
      name: "GetDisplayMediaRequiresUserActivation",
      depends_on: ["GetDisplayMedia"],
      status: "experimental",
    },
    // When a Web application calls getDisplayMedia() and asks for audio,
    // allow a hint to be provided as to whether the Web application is
    // interested in audio being among the options offered to the user
    // on window display surfaces.
    //
    // https://www.w3.org/TR/screen-capture/#dom-displaymediastreamoptions-windowaudio
    {
      name: "GetDisplayMediaWindowAudioCapture",
      status: "stable",
      browser_process_read_write_access: true,
    },
    {
      // To filter only elements in the HTML namespace when calling
      // getElementsByName().
      // This was added in M141 and can be removed after M143.
      // https://issues.chromium.org/issues/40502558
      name: "GetElementsByNameOnlyHTMLElements",
      status: "stable",
    },
    {
      name: "GetUserMediaEchoCancellationModes",
      status: "stable",
    },
    {
      name: "GroupEffect",
      status: "test",
    },
    {
      // Enables Skipping children for invisible select elements containing
      // non-editable node while calculating end of paragraph.
      name: "HandleDeletionAtStartAndEndBoundaryContainingHiddenElement",
      status: "stable",
    },
    {
      name: "HandleDisconnectedSelectionDuringDOMChanges",
      status: "stable",
    },
    {
      name: "HandleShadowDOMInSubstringUtil",
      status: "stable",
    },
    {
      name: "HandwritingRecognition",
      status: {
        "ChromeOS": "stable",
        "default": "experimental",
      },
    },
    {
      name: "HasUAVisualTransition",
      status: "stable",
    },
    // TODO(crbug.com/333628468): Enables the `headingoffset` and
    // `headingreset` attributes, which allow for alternate styles of building
    // structured headings. This is being actively prototyped, starting ~M136.
    // For more see https://github.com/whatwg/html/issues/5033
    {
      name: "HeadingOffset",
      status: "experimental",
    },
    {
      name: "HighlightByLayoutObject",
      status: "stable",
    },
    {
      name: "HighlightPointerEvents",
    },
    {
      name: "HighlightsFromPoint",
      status: "stable",
    },
    {
      // Moved from status stable to test due to https://crbug.com/456164629.
      name: "HitTestBorderRadiusForStackingContext",
      status: "test",
    },
    {
      name: "HrefTranslate",
      depends_on: ["TranslateService"],
      origin_trial_feature_name: "HrefTranslate",
      status: "stable",
      base_feature: "none",
    },
    {
      name: "HstsTopLevelNavigationsOnly",
      status: "experimental",
      base_feature: "none",
    },
    // The `anchor` attribute, supported by both anchor positioning and the
    // popover API.
    {
      name: "HTMLAnchorAttribute",
      status: "experimental",
    },
    // Additional default command/commandfor actions that aren't part of v1 of
    // commands. When this flag is disabled only v1 actions (popover and dialog
    // defaults) will work.
    {
      name: "HTMLCommandActionsV2",
      status: "test",
    },
    // Adds support for scroll commands such as 'page-up' and 'page-block-end'.
    // https://github.com/danielsakhapov/declarative-scroll-commands-for-html-explainer
    {
      name: "HTMLCommandForScrollCommands",
      status: "experimental",
    },
    // Adds support for the 'request-close' command.
    // https://open-ui.org/components/invokers.explainer/
    {
      name: "HTMLCommandRequestClose",
      status: "stable",
    },
    {
      name: "HTMLElementScrollParent",
      status: "experimental",
    },
    // Return a natural width/height of zero from
    // HTMLImageElement.naturalWidth/Height for SVG images that don't have a
    // natural width/height set.
    {
      name: "HTMLImageElementActualNaturalSize",
      status: "test",
    },
    // Adds support for the `interestfor` attribute. See crbug.com/326681249.
    // https://open-ui.org/components/interest-invokers.explainer/
    // This shipped in M142 and the flag can be removed in M144.
    {
      name: "HTMLInterestForAttribute",
      status: "stable",
    },
    // Adds support for the `::interest-hint` pseudo element, which is a sub-
    // feature of the HTMLInterestForAttribute feature.
    // https://open-ui.org/components/interest-invokers.explainer/
    {
      name: "HTMLInterestForInterestHintPseudo",
      status: "experimental",
      depends_on: ["HTMLInterestForAttribute"],
    },
    {
      // Prevents the HTMLLinkElement processing model from being invoked when
      // attributes are processed but their value doesn't change. See
      // https://crbug.com/41436016.
      name: "HTMLLinkElementAttributeValueChanges",
      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",
    },
    {
      name: "HTMLParserYieldByUserTiming",
      status: "test",
    },
    {
      // When enabled, specifies visual affordances for printing such as headers,
      // footers and page numbers, to be PDF annotations.
      // See section 14.8.2.2.1 here for info:
      // https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf
      name: "HTMLPrintingArtifactAnnotations",
      status: "stable",
    },
    {
      name: "ICUCapitalization",
      status: "experimental",
    },
    {
      name: "IgnoreLetterSpacingInCursiveScripts",
      status: "stable",
    },
    {
      name: "ImageDataPixelFormat",
      status: "stable",
    },
    {
      name: "ImageDocumentUseLayoutWidth",
      status: "stable",
    },
    {
      name: "ImplicitRootScroller",
      public: true,
      settable_from_internals: true,
      status: {"Android": "stable"},
      base_feature: "none",
    },
    {
      // Improved retargeting behavior of ToggleEvent.source and
      // CommandEvent.source to match Event.relatedTarget.
      // crbug.com/420639769
      // Enabled in M142, can be removed in M144.
      name: "ImprovedSourceRetargeting",
      status: "stable",
    },
    {
      name: "IncomingCallNotifications",
      origin_trial_feature_name: "IncomingCallNotifications",
      origin_trial_os: [ "win" ],
      base_feature: "IncomingCallNotifications",
    },
    {
      name: "IndexedDbGetAllRecords",
      status: "stable",
    },
    {
      name: "InertElementNonEditable",
      status: "stable",
    },
    {
      // If a painting bug no longer reproduces with this feature enabled, then
      // the bug is caused by incorrect cull rects.
      name: "InfiniteCullRect",
    },
    {
      name: "InheritUserModifyWithoutContenteditable",
      status: "stable",
    },
    {
      // 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",
    },
    {
      // Enable DataTransfer propagation to input events for insertFromPaste,
      // insertFromDrop, and insertReplacementText operations on content-editables.
      name: "InputEventDataTransferForInsertCmd",
      status: "stable",
    },
    {
      // The HTML parser inserts a </select> end tag before inserting <input>
      // when parsing inside of a <select> tag. We want to allow <input> inside
      // <select>, but it isn't web compatible enough. This flag allows <input>
      // inside <select> but only if there is another open tag in between the
      // <input> and the <select>, like <select><div><input>.
      // For now, this flag also makes <input> close <select> like it used to
      // when the <input> is put directly within an <option> or <optgroup>.
      name: "InputInSelect",
      status: "experimental",
    },
    {
      name: "InputMultipleFieldsUI",
      // No plan to support complex UI for date/time INPUT types on Android and
      // iOS.
      status: {"Android": "test", "iOS": "test", "default": "stable"},
    },
    // Insert a blockquote before a outer block after creating the blockquote
    // when indenting a node whose outer block is a blockquote. See
    // https://crbug.com/327665597
    {
      name: "InsertBlockquoteBeforeOuterBlock",
      status: "stable",
    },
    {
      // crbug.com/1420675
      name: "InsertLineBreakIfPhrasingContent",
      status: "stable",
    },
    {
      name: "InstalledApp",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "InstallElement",
      status: "experimental"
    },
    {
      name: "InstallOnDeviceSpeechRecognition",
      status: "stable",
    },
    {
      name: "IntegrityPolicyScript",
      status: "stable",
      base_feature: "none",
      public: true,
    },
    {
      // Adds `!important` to `[inert] {interactivity: auto}` in the UA
      // stylesheet. Resolved in the CSSWG here:
      // https://github.com/w3c/csswg-drafts/issues/12049#issuecomment-3303716541
      // This killswitch is shipping in M142, and can ge removed in M144.
      name: "InteractivityInertImportant",
      status: "stable",
    },
    {
      name: "InterestGroupsInSharedStorageWorklet",
      public: true,
      status: "stable",
    },
    {
      // If enabled, BeginMainFrame will always be requested when there are
      // active IntersectionObservers and also active composited animations.
      name: "IntersectionObserverCompositedAnimationsForceMainFrames",
      status: "stable",
    },
    {
      name: "InvertedColors",
      status: "experimental",
    },
    {
      name: "InvisibleSVGAnimationThrottling",
      status: "stable",
    },
    {
      name: "JavaScriptCompileHintsPerFunctionMagicRuntime",
      status: "experimental",
      origin_trial_feature_name: "JavaScriptCompileHintsPerFunctionMagic",
    },
    {
      name: "JavaScriptSourcePhaseImports",
    },
    {
      name: "KeyboardAccessibleTooltip",
      status: "experimental",
      base_feature: "none",
    },
    {
      // Fixes a bug after find-in-page tries to return focus to
      // the page. This change shipped in M142, and this flag can
      // be removed in M144.
      name: "KeyboardFocusabilityAfterFindInPage",
      status: "stable",
    },
    {
      name: "LangAttributeAwareFormControlUI",
      settable_from_internals: true,
    },
    {
      name: "LanguageDetectionAPI",
      status: {
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "ChromeOS": "stable",
        "Android": "test",
        "default": "",
      },
      origin_trial_feature_name: "LanguageDetectionAPI",
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "LanguageDetectionAPIForWorkers",
      public: true,
    },
    {
      name: "LayoutFlexNewRowAlgorithm",
      status: "stable",
    },
    {
      name: "LayoutIgnoreMarginsForSticky",
    },
    {
      name: "LayoutImageEmptyNaturalSizeBeforeSizeAvailable",
      status: "stable",
    },
    {
      name: "LayoutTableCellAlignmentSafe",
      status: "stable",
    },
    {
      // Allow triggering the word suggestion from left click.
      // From crbug.com/433209485
      name: "LeftClickToHandleSuggestion",
      status: {
        "Android": "stable"
      }
    },
    {
      // Makes light dismiss for popovers and dialogs use the click event
      // instead of pointerdown and pointerup in order to fix light dismiss
      // bugs for touch inputs.
      // https://issues.chromium.org/issues/408010435
      name: "LightDismissFromClick",
      status: "experimental",
    },
    {
      // Speculative fix for renderer hangs in crbug.com/447174988
      name: "LimitTriggerAttachmentUpdates"
    },
    {
      // Improves the logic for removing focus from a currently focused <a>
      // element when its href attribute is removed by considering other ways
      // that an <a> may be focusable. Shipped in M142, should be safe to
      // remove in M144.
      // https://issues.chromium.org/issues/443585794
      name: "LinkBlurImprovement",
      status: "stable",
    },
    {
      name: "ListOwnerMustHaveCSSBox",
      status: "stable",
    },
    {
      // Reverse origin trial allowing Local Network Access requests on
      // non-secure contexts (but still requiring a permission grant from the
      // user).
      name: "LocalNetworkAccessNonSecureContextAllowed",
      origin_trial_feature_name: "LocalNetworkAccessNonSecureContextAllowed",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      status: "experimental",
      base_feature: "none",
      // No status because this blink runtime feature doesn't work by itself.
      // It's controlled by network::features::kLocalNetworkAccessChecks which
      // needs to be enabled to make the whole feature work (see
      // crbug.com/394009026).
    },
    {
      name: "LocalNetworkAccessPermissionPolicy",
      base_feature: "none",
      // No status because this blink runtime feature doesn't work by itself.
      // It's controlled by network::features::kLocalNetworkAccessChecks which
      // needs to be enabled to make the whole feature work (see
      // crbug.com/394009026).
    },
    {
      name: "LocalNetworkAccessWebRTC",
      base_feature: "none",
      // No status because this feature is controlled by
      // network::features::kLocalNetworkAccessChecks and
      // network::features::kLocalNetworkAccessChecksWebRTC.
    },
    {
      name: "LockedMode",
      status: "test",
      // Enabled by features::kLockedMode.
      public: true,
    },
    {
      // Enable sourceCharPosition for the invoke-type resolve-promise
      // https://issues.chromium.org/issues/381529126
      name: "LongAnimationFrameSourceCharPosition",
      status: "experimental",
    },
    {
      // Enable retrieving sourceLine and sourceColumn in LoAF implementation.
      // https://issues.chromium.org/issues/391417815
      name: "LongAnimationFrameSourceLineColumn",
      status: "test",
      implied_by: ["LongAnimationFrameSourceLineColumnInterface"],
    },
    {
      // Add sourceLine and sourceColumn to PerformanceScriptTiming
      // https://issues.chromium.org/issues/391417815
      name: "LongAnimationFrameSourceLineColumnInterface",
      status: "test",
    },
    {
      // 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: "MacCharacterFallbackCache",
      status: "stable",
    },
    {
      name: "MacDisableCtrlHomeEnd",
      status: "stable",
    },
    {
      name: "MachineLearningNeuralNetwork",
      // Enabled by webnn::mojom::features::kWebMachineLearningNeuralNetwork.
      base_feature: "none",
    },
    {
      // Enables macOS system-level clipboard permission checking using
      // NSPasteboard.accessBehavior API (available on macOS 15.4+).
      // This allows web applications to respect user's clipboard privacy
      // settings in System Settings > Privacy & Security > Clipboard.
      name: "MacSystemClipboardPermissionCheck",
      status: {"Mac": "stable", "default": ""},
    },
    {
      name: "ManagedConfiguration",
      status: "stable",
    },
    {
      name: "MaskDeserializationTimeForCrossOriginMessages",
      status: "stable",
    },
    {
      // Enables mirroring for stretchy and large MathML operators when
      // the text direction is right to left.
      name: "MathMLOperatorRTLMirroring",
      status: "experimental",
    },
    {
      // Enables MathML ancestor context preservation during copy-paste
      // serialization. When enabled, copying partial MathML content includes
      // the containing <math> element to preserve semantic context and
      // namespace declarations.
      name: "MathMLSerializationOnCopy",
      status: "stable",
    },
    {
      // Enables skipping <mtr> wrapping during ancestor wrapping in
      // serialization. When enabled duplicate <mtr> wrapping are absent.
      name: "MathMLSkipMtrTagInAncestorWrapping",
      status: "stable",
    },
    {
      name:"MeasureMemory",
      status:"stable",
    },
    {
      name: "MediaCapabilitiesEncodingInfo",
      status: "experimental",
    },
    {
      name: "MediaCapabilitiesSpatialAudio",
      status: "test",
    },
    {
      name: "MediaCapture",
      status: {"Android": "stable"},
    },
    {
      name: "MediaCaptureBackgroundBlur",
      origin_trial_feature_name: "MediaCaptureBackgroundBlur",
      status: "experimental",
      implied_by: ["MediaCaptureCameraControls"],
      base_feature: "none",
    },
    {
      name: "MediaCaptureCameraControls",
      status: "experimental",
    },
    {
      name: "MediaCaptureConfigurationChange",
      origin_trial_feature_name: "MediaCaptureBackgroundBlur",
      status: "experimental",
      implied_by: ["MediaCaptureBackgroundBlur"],
      base_feature: "none",
    },
    {
      name: "MediaCaptureVoiceIsolation",
      status: "experimental",
    },
    {
      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",
      origin_trial_feature_name: "MediaPlaybackWhileNotVisiblePermissionPolicy",
    },
    {
      name: "MediaQueryNavigationControls",
    },
    {
      name: "MediaSession",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "MediaSessionChapterInformation",
      status: "stable",
    },
    {
      name: "MediaSourceExperimental",
      status: "experimental",
    },
    {
      name: "MediaSourceExtensionsForWebCodecs",
      status: "experimental",
      base_feature: "none",
      origin_trial_feature_name: "MediaSourceExtensionsForWebCodecs",
    },
    {
      name: "MediaStreamTrackTransfer",
      status: "test",
      base_feature: "none",
    },
    {
      name: "MediaStreamTrackWebSpeech",
      status: {
        "Linux": "stable",
        "Mac": "stable",
        "Win": "stable",
        "default": "experimental",
      },
    },
    {
      // This feature helps to add memory consumer to NGShapeCache, so that
      // the cached shape results would be cleared once exceeding the memory limit.
      name: "MemoryConsumerForNGShapeCache",
      status: "test",
    },
    {
      name: "MenuElements",
      status: "experimental",
    },
    {
      name: "MessagePortCloseEvent",
      status: "test",
    },
    // This is enabled by default on Windows only. The only part that's
    // "experimental" is the support on other platforms.
    {
      name: "MiddleClickAutoscroll",
      status: "test",
    },
    // Killswitch for crbug.com/40062462 fix.
    {
      name: "MixedContentAutoupgradesUseIsMixedContentRestrictedInFrame",
      status: "stable",
    },
    {
      name: "MobileLayoutTheme",
    },
    {
      name: "ModifyParagraphCrossEditingoundary",
      status: "stable",
    },
    // ModulePreloadReferrer enables modulepreload to send proper referrer
    // headers as specified in the HTML spec. Behind a flag for safer rollout.
    // https://crbug.com/441933555
    {
      name: "ModulePreloadReferrer",
      status: "experimental",
    },
    {
      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,
    },
    // Move the selection to the last position in the list item. See
    // https://crbug.com/331841851
    {
      name: "MoveEndingSelectionToListChild",
      status: "stable",
    },
    {
      name: "MoveToParagraphStartOrEndSkipsNonEditable",
      status: "stable",
    },
    {
      // Multicast in Direct Sockets API.
      // https://github.com/WICG/direct-sockets/blob/main/docs/multicast-explainer.md
      name: "MulticastInDirectSockets",
      status: "stable",
      depends_on: ["DirectSockets"]
    },
    {
      name: "MulticolColumnWrapping",
      status: "experimental",
    },
    {
      name: "NavigateEventCanTransition",
    },
    {
      name: "NavigateEventCommitBehavior",
      status: "stable",
    },
    {
      name: "NavigateEventPopstateLimitations",
      status: "stable",
    },
    {
      name: "NavigateEventSourceElement",
      status: "stable",
    },
    {
      name: "NavigationId",
      status: "experimental",
      origin_trial_feature_name: "SoftNavigationHeuristics",
      implied_by: ["SoftNavigationHeuristics"],
    },
    {
      name: "NavigationTransitionDestination",
      status: "experimental",
    },
    {
      name: "NavigatorContentUtils",
      // Android does not yet support NavigatorContentUtils.
      status: {"Android": "", "default": "stable"},
    },
    {
      name: "NestedViewTransition",
      status: "stable",
    },
    {
      name: "NetInfoConstantType",
    },
    {
      name: "NetInfoDownlinkMax",
      public: true,
      // Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now
      status: {
        "Android": "stable",
        "ChromeOS": "stable",
        "default": "experimental",
      },
      base_feature: "none",
    },
    {
      // This turns off all font antialiasing for tests unless it is
      // explicitly required and enabled using the
      // "--enable-font-antialiasing" flag like in the case of
      // "virtual/text-antialias/" virtual test suite.
      // crbug.com/339041663
      name: "NoFontAntialiasing",
      status: "test",
    },
    {
      name: "NoIdleEncodingForWebTests",
      status: "test",
    },
    // Doesn't insert empty blockquotes on outdenting a blockquote. See
    // https://crbug.com/323960902
    {
      name: "NonEmptyBlockquotesOnOutdenting",
      status: "stable",
    },
    {
      name: "NonEmptyVisibleTextSelectionForTextFragment",
      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: "NumberInputFullWidthChars",
      status: "stable",
    },
    {
      name: "OffMainThreadCSSPaint",
      status: "stable",
    },
    {
      name: "OffscreenCanvasGetContextAttributes",
      status: "stable",
    },
    {
      name: "OffsetParentNewSpecBehaviorForFixedPosition",
      status: "stable",
    },
    {
      name: "OmitBlurEventOnElementRemoval",
      status: "test"
    },
    {
      name: "OnDeviceWebSpeechAvailable",
      status: "stable",
    },
    {
      // Restrict popover invoker lookup to the same TreeScope as the element.
      // This will be shipped in M142, and it can be removed in M144.
      // See https://issues.chromium.org/issues/443031270.
      name: "OpenPopoverInvokerRestrictToSameTreeScope",
      status: "stable",
    },
    {
      name: "OrientationEvent",
      status: {"Android": "stable"},
    },
    {
      name: "OriginAPI",
      status: "experimental",
    },
    {
      // Originating elements are implicit anchors for pseudo elements.
      // This is a spec change since anchor positioning was shipped in Blink.
      // https://issues.chromium.org/issues/408223892
      name: "OriginatingElementIsImplicitAnchor",
      depends_on: ["CSSPositionAnchorNone"],
      status: "stable",
    },
    {
      name: "OriginIsolationHeader",
      status: "stable",
      base_feature: "none",
    },
    {
      name: "OriginPolicy",
      status: "experimental",
    },
    // Define a sample API for testing integration with the Origin Trials
    // Framework. The sample API is used in both unit and web tests for the
    // Origin Trials Framework. Do not change this flag to stable, as it exists
    // solely to generate code used by the sample API implementation.
    {
      name: "OriginTrialsSampleAPI",
      base_feature: "none",
      origin_trial_feature_name: "Frobulate",
      public: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIBrowserReadWrite",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateBrowserReadWrite",
      browser_process_read_write_access: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    // TODO(yashard): Add tests for this feature.
    {
      name: "OriginTrialsSampleAPIDependent",
      depends_on: ["OriginTrialsSampleAPI"],
      base_feature: "none",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIDeprecation",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateDeprecation",
      origin_trial_type: "deprecation",
      origin_trial_allows_insecure: true,
      public: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIExpiryGracePeriod",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateExpiryGracePeriod",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIExpiryGracePeriodThirdParty",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateExpiryGracePeriodThirdParty",
      origin_trial_allows_third_party: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIImplied",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateImplied",
      implied_by: ["OriginTrialsSampleAPI", "OriginTrialsSampleAPIInvalidOS"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIInvalidOS",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateInvalidOS",
      origin_trial_os: ["invalid"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPINavigation",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateNavigation",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentExpiryGracePeriod",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentExpiryGracePeriod",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentFeature",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistent",
      origin_trial_allows_third_party: true,
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentInvalidOS",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentInvalidOS",
      origin_trial_allows_third_party: true,
      origin_trial_os: ["invalid"],
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIPersistentThirdPartyDeprecationFeature",
      base_feature: "none",
      origin_trial_feature_name: "FrobulatePersistentThirdPartyDeprecation",
      origin_trial_allows_third_party: true,
      origin_trial_type: "deprecation",
    },
    // As above. Do not change this flag to stable, as it exists solely to
    // generate code used by the origin trials sample API implementation.
    {
      name: "OriginTrialsSampleAPIThirdParty",
      base_feature: "none",
      origin_trial_feature_name: "FrobulateThirdParty",
      origin_trial_allows_third_party: true,
    },
    {
      name: "OutlineDrawAutoStyleZeroWidth",
      status: "stable",
    },
    {
      name: "OverscrollCustomization",
      status: "experimental",
    },
    {
      name: "PagePopup",
      // Android does not have support for PagePopup
      status: {"Android": "", "iOS": "", "default": "stable"},
    },
    {
      name: "PagePopupCopyPaste",
      depends_on: ["PagePopup"],
      status: "stable",
    },
    {
      name: "PageRevealEvent",
      status: "stable",
    },
    {
      name: "PageSwapEvent",
      status: "stable",
    },
    {
      name: "PaintHoldingForIframes",
      status: "stable",
    },
    {
      // Fix for https://crbug.com/40716515.
      // Killswitch M141.
      name: "PaintOffsetTranslationForBackdropFilterWithInlineElement",
      status: "stable",
    },
    {
      // Killswitch M142. Overrides the above to enable PaintOffsetTranslation
      // for all composited LayoutObjects.
      name: "PaintOffsetTranslationForComposited",
      status: "test",
    },
    {
      name: "PaintTimingMixin",
      status: "experimental",
    },
    {
      name: "PaintTimingRecordTimingForDetachedPaintedElements",
      status: "stable",
    },
    {
      name: "PaintUnderInvalidationChecking",
      settable_from_internals: true,
    },
    {
      // PARAKEET ad serving runtime flag/JS API.
      name: "Parakeet",
      origin_trial_feature_name: "Parakeet",
    },
    {
      name: "PartialCompletionNotAllowedInMoveParagraphs",
      status: "stable",
    },
    {
      name: "PartitionVisitedLinkDatabaseWithSelfLinks",
      status: {"iOS": "", "default": "stable"},
    },
    // This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized.
    {
      name: "PasswordReveal",
    },
    {
      name: "PaymentApp",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      // https://chromestatus.com/feature/5198846820352000
      name: "PaymentLinkDetection",
      status: "stable",
    },
    {
      name: "PaymentMethodChangeEvent",
      depends_on: ["PaymentRequest"],
      status: "stable",
    },
    // PaymentRequest is enabled by default on Android
    {
      name: "PaymentRequest",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PerformanceManagerInstrumentation",
      base_feature: "none",
      public: true,
    },
    {
      // Enables performance.mark('mark_feature_usage'): crbug.com/1517170
      name: "PerformanceMarkFeatureUsage",
      status: "experimental"
    },
    {
      name: "PerformanceNavigationTimingConfidence",
      origin_trial_feature_name: "PerformanceNavigationTimingConfidence",
      status: "experimental",
    },
    {
      name: "PeriodicBackgroundSync",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PerMethodCanMakePaymentQuota",
      origin_trial_feature_name: "PerMethodCanMakePaymentQuota",
      status: "experimental",
      base_feature: "none",
    },
    {
      // Tracking bug for the implementation: https://crbug.com/1462930
      name: "PermissionElement",
      origin_trial_feature_name: "PermissionElement",
      origin_trial_os: ["win", "mac", "linux", "fuchsia", "chromeos", "android"],
      status: "experimental",
      public: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      implied_by: ["InstallElement"],
    },
    {
      name: "Permissions",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PermissionsRequestRevoke",
      status: "experimental",
    },
    {
      // crbug.com/398955086
      name: "PlaceholderVisibility",
      status: "stable",
    },
    // This is a reverse OT used for a phased deprecation.
    // https://crbug.com/918374
    {
      name: "PNaCl",
      base_feature: "none",
      origin_trial_feature_name: "PNaCl",
      public: true,
    },
    {
      name: "PointerEventDeviceId",
      status: "stable",
    },
    {
      // Flag for enabling the pointer lock API on Android
      name: "PointerLockOnAndroid",
    },
    {
      // https://crbug.com/404479704
      name: "PointerRawUpdateOnlyInSecureContext",
      status: "stable",
    },
    {
      // Kill switch for removing *x-self*, *y-self* as valid values.
      // Enabling this flag will make *x-self* and *y-self* aliases of
      // *self-x* and *self-y* at parse time.
      // https://crbug.com/448642325
      name: "PositionAreaXYSelf",
    },
    {
      name: "PositionOutsideTabSpanCheckSiblingNode",
      status: "stable",
    },
    {
      // Kill switch for https://crbug.com/448173938 which changes position
      // visibility to ignore non-clipping ancestors.
      name: "PositionVisibilityIgnoreNonClipAncestors",
      status: "stable",
    },
    {
      name: "PotentialPermissionsPolicyReporting",
      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: "PreferredAudioOutputDevices",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
      origin_trial_feature_name: "PreferredAudioOutputDevices",
      origin_trial_allows_third_party: true,
      status: "experimental",
      public: true,
    },
    {
      name: "PrefersReducedData",
      status: "experimental",
    },
    {
      // Used to allow preloading data: URLs with link rel=preload.
      // https://crbug.com/348442535
      name: "PreloadLinkRelDataUrls",
      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",
    },
    {
      // Used to allow prerender cross-origin iframes with an opt-in response
      // header.
      // https://chromestatus.com/feature/5112398709129216
      // https://crbug.com/440387014
      name: "Prerender2CrossOriginIframes",
      origin_trial_feature_name: "Prerender2CrossOriginIframes",
    },
    {
      // Used to allow prerender activation by form submission.
      // See https://crbug.com/346555939.
      name: "PrerenderActivationByFormSubmission",
      origin_trial_feature_name: "PrerenderActivationByFormSubmission",
      status: "experimental",
    },
    {
      name: "PrerenderUntilScript",
      public: true,
      origin_trial_feature_name: "PrerenderUntilScript",
      status: "experimental",
    },
    {
      name: "Presentation",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // When enabled, preserves dropEffect in drag event set during dragover
      // events.
      name: "PreserveDropEffect",
      status: "test",
    },
    {
      // When enabled, prevents undo to be applied if the enclosing block
      // is not editable
      name: "PreventUndoIfNotEditable",
      status: "stable"
    },
    {
      // Controls the aggregate error reporting feature, which allows for
      // contributions to be made conditional on error conditions that can be
      // hit when using the API. This also defers contribution merging and
      // modifies the budgeting flow.
      // https://chromestatus.com/feature/5194896325214208
      name: "PrivateAggregationApiErrorReporting",
      status: "experimental",
    },
    {
      // Controls whether Private Aggregation's "maxContributions" field is
      // enabled for Shared Storage callers. If disabled, the field will be
      // ignored. https://chromestatus.com/feature/5189366316793856
      name: "PrivateAggregationApiMaxContributions",
      status: "stable",
    },
    {
      name: "PrivateNetworkAccessNullIpAddress",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "PrivateStateTokens",
      status: "stable",
      base_feature: "none",
      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",
    },
    // Promisify programmatic scroll methods in Element and Window.
    // https://crbug.com/41406914
    {
      name: "ProgrammaticScrollPromise",
    },
    {
      // Propagate overscroll-behavior from the root element rather than the
      // body element. crbug.com/41453796
      name: "PropagateOverscrollBehaviorFromRoot",
      status: "stable"
    },
    // 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: "stable",
    },
    {
      name: "PushMessageDataBytes",
      depends_on: ["PushMessaging"],
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PushMessaging",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "PushMessagingSubscriptionChange",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      // ChromeStatus: https://chromestatus.com/feature/6194847180128256
      name: "QuotaExceededErrorUpdate",
      status: "stable",
    },
    {
      name: "QuoteFirstLineStyle",
      status: "stable",
    },
    {
      name: "RasterInducingScroll",
      status: {
        "Linux": "stable",
        "Win": "stable",
        "default": "test",
      }
    },
    {
      // Enables support for a 'min' option in ReadableStream BYOBReader.read(),
      // allowing callers to specify the minimum number of bytes to be read into
      // the buffer before resolving the read request.
      // https://chromestatus.com/feature/6396991665602560
      name: "ReadableStreamBYOBReaderReadMinOption",
      status: "stable",
    },
    {
      name: "RecordSameDocumentPresentationTimeOnce",
      status: "stable",
    },
    // If enabled, both Accept-Language HTTP header and JavaScript getter will
    // be reduced.
    {
      name: "ReduceAcceptLanguage",
      base_feature: "none",
    },
    {
      // 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 platform version in User-Agent Data will be removed.
    // This feature is limited to Linux only.
    {
      name: "ReduceUserAgentDataLinuxPlatformVersion",
      status: {"Linux": "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"},
    },
    {
      public: true,
      name: "RegionCapture",
      status: {"Android": "experimental", "iOS": "", "default": "stable"},
    },
    {
      name: "RelatedWebsitePartitionAPI",
      base_feature: "none",

      // No status because this blink runtime feature doesn't work by itself.
      // It's controlled by the corresponding Chromium feature,
      // net::features::kRelatedWebsitePartitionAPI, which needs to be
      // enabled to make the whole feature work.
    },
    {
      // This flag allows more characters to be accepted as valid names in the
      // createElement and attribute related DOM APIs.
      // https://github.com/whatwg/dom/pull/1079
      // http://crbug.com/40228234
      // https://chromestatus.com/feature/6278918763708416
      name: "RelaxDOMValidNames",
      status: "stable",
    },
    {
      name: "RelOpenerBcgDependencyHint",
      status: "experimental",
    },
    {
      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"},
    },
    {
      // This feature acts as a kill switch for ISO-2022-JP auto-detection.
      // This will be shipped in M139, and it can be removed in M141.
      // See https://chromestatus.com/feature/6576566521561088.
      name: "RemoveCharsetAutoDetectionForISO2022JP",
      status: "stable",
    },
    // After paste operation removes the placeholder <br> tag
    // that gets inserted in contenteditable as placeholder for newline
    {
      name: "RemoveCollapsedPlaceholderForContentEditable",
      status: "stable"
    },
    {
      name: "RemoveDanglingMarkupInTarget",
      status: "stable",
    },
    {
      name: "RemoveDataUrlInSvgUse",
      status: "stable",
    },
    {
      // Fix for removeFormat command incorrectly preserving background-color
      // when removing styles from elements. Prevents background-color from being
      // re-applied to child elements during style removal.
      // See https://crbug.com/41438799
      name: "RemoveFormatFilterBackgroundColor",
      status: "stable",
    },
    {
      // See https://issues.chromium.org/issues/41474791
      name: "RemoveSelectionCanonicalizationInMoveParagraph",
      status: "stable",
    },
    {
      // See https://issues.chromium.org/issues/41311101
      name: "RemoveVisibleSelectionInDOMSelection",
      status: "test",
    },
    {
      // See https://github.com/whatwg/html/issues/11070
      // ChromeStatus: https://chromestatus.com/feature/5207202081800192
      name: "RenderBlockingFullFrameRate",
      copied_from_base_feature_if: "overridden",
      origin_trial_feature_name: "RenderBlockingFullFrameRate",
      status: "test",
    },
    {
      name: "RenderBlockingStatus",
      status: "stable",
    },
    {
      // The renderpriority attribute feature.
      // https://github.com/WICG/display-locking/blob/main/explainers/update-rendering.md
      name: "RenderPriorityAttribute",
    },
    {
      // See https://crbug.com/40896371 for details.
      name: "ReplacedElementCursorPositioningFix",
      status: "stable",
    },
    {
      name: "ReportFirstFrameTimeAsRenderTime",
      status: "test",
    },
    {
      name: "ReportLayoutShiftRectsInCssPixels",
      status: "experimental",
    },
    {
      name: "RequestMainFrameAfterFirstVideoFrame",
      status: "experimental",
    },
    {
      name: "ResolveVarStylesOnCopy",
      status: "stable",
    },
    {
      name: "ResourceTimingContentEncoding",
      status: "stable",
    },
    {
      name: "ResourceTimingContentType",
      status: "experimental",
    },
    {
      name: "ResourceTimingInitiator",
      status: "experimental",
    },
    {
      name: "ResourceTimingUseCORSForBodySizes",
      status: "test",
    },
    {
      name: "RespectOverscrollBehaviorForScrollBubbling",
      status: "stable",
    },
    {
      name: "ResponsiveIframes",
      status: "experimental",
    },
    {
      name: "RestrictGamepadAccess",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "RestrictOwnAudio",
      status: "stable",
    },
    {
      // Constrains text selections to stay within table cell boundaries
      // (e.g., triple-click paragraph selection)
      // See crbug.com/40852213.
      name: "RestrictTableCellSelectionToBoundary",
      status: "stable",
    },
    {
      // If enabled, makes the root scrollbars' foreground elements follow the
      // browser
      name: "RootScrollbarFollowsBrowserTheme",
      status: {"Linux": "test", "Win": "test"},
    },
    // Route matching, @route CSS rule, script type="routemap".
    // https://chromestatus.com/feature/4771962874363904
    {
      name: "RouteMatching",
      status: "test",
    },
    {
      name: "RtcAudioJitterBufferMaxPackets",
      origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "RTCDataChannelPriority",
      status: "experimental",
    },
    {
      name: "RTCEncodedFrameAudioLevel",
      status: "stable",
    },
    {
      name: "RTCEncodedFrameSetMetadata",
      status: "experimental",
      origin_trial_feature_name: "RTCEncodedFrameSetMetadata",
    },
    {
      name: "RTCEncodedFrameTimestamps",
      status: "stable",
    },
    {
      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",
    },
    {
      name: "RTCRtpScaleResolutionDownTo",
      status: "stable",
    },
    {
      name: "RTCRtpScriptTransform",
      status: "stable",
    },
    {
      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",
    },
    {
      // HTML event loop invoking 'Run snapshot post-layout state steps' from
      // the CSSOM View per spec proposal.
      name: "RunSnapshotPostLayoutStateSteps",
    },
    {
      // Spec: https://wicg.github.io/sanitizer-api/
      // Tracking bug: crbug.com/356601280
      name: "SanitizerAPI",
      status: "test",
    },
    {
      // https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
      // https://github.com/whatwg/html/issues/10854
      // Spec PRs:
      // https://github.com/whatwg/html/pull/10869
      // https://github.com/whatwg/dom/pull/1341
      name: "ScopedCustomElementRegistry",
    },
    {
      // https://github.com/WICG/view-transitions/blob/main/scoped-transitions.md
      name: "ScopedViewTransitions",
      status: "experimental"
    },
    {
      // https://github.com/w3c/window-management/issues/149
      name: "ScreenDetailedHdrHeadroom",
      status: "experimental",
    },
    {
      // crbug.com/406917902
      name: "ScriptBasedOnUnicodeBlock",
      status: "stable",
    },
    // 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",
    },
    {
      // crbug.com/378692756
      name: "ScriptRunIteratorCombiningMarkAlways",
      status: "stable",
    },
    {
      name: "ScriptRunIteratorCombiningMarks",
    },
    {
      name: "ScrollAnchorPriorityCandidateSubtree",
      status: "stable",
    },
    {
      name: "ScrollbarColor",
      status: "stable",
    },
    {
      name: "ScrollbarWidth",
      status: "stable",
    },
    {
      name: "ScrollIntoViewNearest",
      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",
    },
    // TODO(crbug.com/401443093): Remove after M141.
    {
      name: "ScrollIntoViewSelfScrollFix",
      status: "stable"
    },
    {
      // Separate flag for crbug.com/1426506 (getCurrentTime API change) which
      // is expected to land after the initial launch of ScrollTimeline.
      name: "ScrollTimelineCurrentTime",
      status: "experimental"
    },
    {
      // https://github.com/w3c/csswg-drafts/issues/9367#issuecomment-1854280461
      name: "ScrollTimelineNamedRangeScroll",
      status: "test",
    },
    // 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",
    },
    // Allows CSS styling of browser search results.
    // https://issues.chromium.org/issues/339298411
    // https://chromestatus.com/feature/5195073796177920
    {
      name: "SearchTextHighlightPseudo",
      status: "experimental",
    },
    // 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: "SecurePaymentConfirmationAvailabilityAPI",
      status: "stable",
    },
    {
      name: "SecurePaymentConfirmationBrowserBoundKeys",
      status: {
        "Android": "stable",
        "Mac": "experimental",
        "Win": "experimental",
        "iOS": "",
        "default": "test",
      },
    },
    {
      name: "SecurePaymentConfirmationDebug",
      base_feature: "none",
      public: true,
    },
    {
      name: "SecurePaymentConfirmationOptOut",
      origin_trial_feature_name: "SecurePaymentConfirmationOptOut",
      origin_trial_allows_third_party: true,
      status: "stable",
      base_feature: "none",
    },
    {
      // Implements new UX for SPC including new output states, payment
      // instrument details and payment entities logos.
      name: "SecurePaymentConfirmationUxRefresh",
      status: {
        "Android": "stable",
        "default": "test",
      },
    },
    {
      // SelectAudioOutput API
      // https://chromestatus.com/feature/5164535504437248
      name: "SelectAudioOutput",
      status: {
        "Android": "",
        "default": "test",
      },
    },
    {
      // Replicates old behavior which removes selectedness from option
      // elements when they are all removed from a select at the same time.
      // https://issues.chromium.org/issues/444330901
      // Enabled in M142, can be removed in M145.
      name: "SelectChildrenRemovedFix",
      status: "stable",
    },
    {
      // Prevents the <select> element from tracking <option>s inside a nested
      // <datalist>. Shipping in M144, should be safe to remove in M146.
      name: "SelectDisallowDatalist",
      status: "stable",
    },
    {
      // The selectedcontentelement attribute is for connecting select elements
      // to arbitrary <selectedcontent> elements.
      // https://github.com/openui/open-ui/issues/1063
      name: "SelectedcontentelementAttribute",
      status: "test",
    },
    {
      // See https://crbug.com/40664519
      // Disabled due to UI freeze issues, see https://crbug.com/448833953.
      name: "SelectionAndFocusedVisiblePositionMatch",
      status: "experimental",
    },
    {
      name: "SelectionCollapsedDirectionNone",
      status: "stable",
    },
    {
      // Killswitch M141.
      name: "SelectionHandleWithBottomClipped",
      status: "stable",
    },
    {
      // https://issues.chromium.org/issues/40502558
      name: "SelectionRemoveRangeNotFoundError",
      status: "experimental",
    },
    {
      // https://issues.chromium.org/issues/40502558
      name: "SelectionSetBaseAndExtentNonNullNode",
      status: "experimental",
      settable_from_internals: true,
    },
    {
      // Enables skipping user-select: none content
      // in DOMSelection::toString()
      name: "SelectionToStringSkipsUserSelectNone",
      status: "stable",
    },
    {
      // See https://crbug.com/395544401
      name: "SelectionUpdateToInitialSelectionInListify",
      status: "stable",
    },
    {
      // See https://chromestatus.com/feature/5203433409871872
      name: "SelectiveClipboardFormatRead",
      status: "test",
    },
    {
      // See https://chromestatus.com/feature/4811835974615040
      name: "SelectivePermissionsIntervention",
      status: "experimental",
    },
    {
      // Makes the logic to choose between ListBox (in-page) or MenuList
      // (dropdown) select element modes the same between mobile and desktop.
      // Without this flag, mobile will always use MenuList and desktop always
      // makes <select multiple> a ListBox.
      // https://chromestatus.com/feature/5412736871825408
      // https://issues.chromium.org/issues/439964654
      name: "SelectMobileDesktopParity",
      status: "stable",
    },
    {
      name: "SendBeaconThrowForBlobWithNonSimpleType",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "SensorExtraClasses",
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    {
      // Separate defer and module script execution into individual tasks
      // to comply with HTML spec requirement to "spin the event loop" between
      // each script execution. This prevents long tasks and improves responsiveness.
      // https://crbug.com/40894694
      name: "SeparateDeferModuleScriptTasks",
      status: "test",
    },
    {
      name: "Serial",
      status: "stable",
      base_feature: "WebSerialAPI",
    },
    {
      name: "SerializeViewTransitionStateInSPA",
    },
    {
      name: "SerialPortConnected",
      status: {"Android": "", "default": "experimental"},
      base_feature: "none",
    },
    {
      // Support for Service Worker background sync APIs in Dedicated Workers.
      // See https://chromestatus.com/feature/6497653025931264
      // See https://issues.chromium.org/issues/40364838
      name: "ServiceWorkerBackgroundSyncInDedicatedWorker",
      depends_on: ["ServiceWorkerInDedicatedWorker"],
    },
    {
      name: "ServiceWorkerClientLifecycleState",
      status: "experimental",
    },
    {
      // Support for Service Worker APIs in Dedicated Workers.
      // See https://chromestatus.com/feature/6497653025931264
      // See https://issues.chromium.org/issues/40364838
      name: "ServiceWorkerInDedicatedWorker",
    },
    {
      name: "ServiceWorkerStaticRouterTimingInfo",
      status: "stable",
    },
    {
      name: "SetSequentialFocusStartingPoint",
      status: "experimental",
    },
    {
      // Reference Target allows IDREF attributes to refer inside Shadow DOM.
      // crbug.com/346835896
      name: "ShadowRootReferenceTarget",
      status: "experimental",
      origin_trial_feature_name: "ShadowRootReferenceTarget"
    },
    {
      // If enabled, Reference Target will support aria-owns.
      // https://github.com/WICG/webcomponents/issues/1091
      name: "ShadowRootReferenceTargetAriaOwns",
    },

    {
      name: "SharedArrayBuffer",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedArrayBufferUnrestrictedAccessAllowed",
      base_feature: "none",
      public: true,
    },
    {
      name: "SharedStorageAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      name: "SharedStorageWebLocks",
      depends_on: ["SharedStorageAPI"],
      status: "stable",
    },
    {
      name: "SharedWorker",
      public: true,
      // Android does not yet support SharedWorker. crbug.com/154571
      status: {"Android": "", "default": "stable"},

      // Allow Android to run the origin trial.
      origin_trial_feature_name: "SharedWorkerOnAndroid",
      origin_trial_os: ["android"],
      origin_trial_allows_third_party: true,
    },
    {
      // If enabled, SharedWorker supports extendedLifetime
      // https://github.com/whatwg/html/issues/10997
      name: "SharedWorkerExtendedLifetime",
      status: "experimental",
      origin_trial_feature_name: "SharedWorkerExtendedLifetime",
      origin_trial_allows_third_party: true,
    },
    {
      name: "SideRelativeBackgroundPosition",
      status: "stable",
      public: true,
    },
    {
      name: "SignatureBasedInlineIntegrity",
      status: "experimental",
    },
    {
      name: "SkipAd",
      depends_on: ["MediaSession"],
      status: "stable",
    },
    {
      // If enabled, only call ResourceLoadObserver callbacks if the DevTools
      // panel is open.
      name: "SkipCallbacksWhenDevToolsNotOpen",
      status: "experimental",
    },
    {
      // Skip field disabled checks in DateTimeEditElement.
      // This will be shipped in M143, and it can be removed in M145.
      // See https://issues.chromium.org/issues/442293382.
      name: "SkipDateTimeFieldDisableChecks",
      status: "stable",
    },
    {
      name: "SkipOofItemForBreakCandidate",
      status: "stable",
    },
    {
      // 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",
    },
    // Fix for crbug.com/41393366
    {
      name: "SkipUnselectableContentInSerialization",
      status: "stable",
    },
    {
      name: "SmallerViewportUnits",
      status: "experimental",
    },
    {
      name: "SmartCard",
      status: {
        "Android": "",
        "ChromeOS": "stable",
        "default": "test",
      },
    },
    {
      name: "SmartZoom",
      base_feature: "none",
      public: true,
      status: {"Android": "test"},
    },
    {
      // 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: "SoftNavigationDetectionAdvancedPaintAttribution",
      depends_on: ["SoftNavigationDetection"],
    },
    {
      name: "SoftNavigationDetectionPrePaintBasedAttribution",
      status: "stable",
      depends_on: ["SoftNavigationDetection"],
    },
    {
      name: "SoftNavigationHeuristics",
      status: "experimental",
      origin_trial_allows_third_party: true,
      origin_trial_feature_name: "SoftNavigationHeuristics",
    },
    {
      // Whether spatial navigation should use cursor inheritance to exclude
      // nodes where cursor is inherited. Kill-switch that can be remove once
      // the change goes through a stable release.
      name: "SpatNavUsesCursorInheritance",
      status: "stable",
    },
    {
      name: "SpeakerSelection",
      status: "experimental",
    },
    // This is a flag that re-enables some deprecated/removed "special rules"
    // that apply to the styles of an <h1> element nested within <article>,
    // <aside>, <nav>, or <section>. It is disabled by default, and here as a
    // Finch killswitch only. This was shipped (disabled) in M140, and the flag
    // can be removed in M142.
    {
      name: "SpecialRulesForNestedH1Elements",
    },
    {
      name: "SpeculationRulesPrefetchWithSubresources",
    },
    {
      name: "SplitTextNotCleanupDummySpans",
      status: "stable",
    },
    // Kill switch for change to unify image-set and srcset selection logic.
    {
      name: "SrcsetSelectionMatchesImageSet",
      status: "stable",
    },
    // 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,
    },
    {
      // Preserves the sticky user activation state after a page navigates to
      // another same-origin page. https://crbug.com/433729626
      name: "StickyUserActivationAcrossSameOriginNavigation",
      status: "stable",
    },
    {
      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",
    },
    // Enforces that MIME types matched via *+json wildcards have HTTP token
    // compliant type and subtype (rejects invalid characters) in addition to
    // requiring a single slash.
    {
      name: "StrictJsonMimeTypeTokenValidation",
      status: "stable",
    },
    {
      name: "StrictMimeTypesForWorkers",
      status: "experimental",
    },
    {
      name: "StylusHandwriting",
      base_feature: "none",
    },
    {
      name: "Svg2Cascade",
      status: "stable",
    },
    {
      name: "SvgAnchorElementAttributes",
      status: "stable",
    },
    {
      name: "SvgAnchorElementDownloadAttribute",
      status: "stable",
    },
    {
      name: "SvgAvoidCullingElementsWithTransformOperations",
      status: "stable",
    },
    {
      // Treat SVG documents in <object>/<embed> as replaced elements
      // https://issues.chromium.org/41302806
      name: "SVGEmbeddedAsReplacedElement",
      status: "experimental",
    },
    {
      name: "SvgEnableTextDecorationCssStyling",
      status: "experimental",
    },
    {
      name: "SvgFallBackToContainerSize",
      status: "stable",
    },
    {
      name: "SvgFilterPaintsForHiddenContent",
      status: "stable",
    },
    {
      name: "SvgIgnoreNegativeEllipseRadii",
      status: "stable",
    },
    {
      // Disable "external" XSLT stylesheets in SVGImage.
      name: "SvgImageNoExternalXslt",
      status: "stable",
    },
    {
      name: "SvgInlineRootPixelSnappingScaleAdjustment",
      status: "test",
    },
    {
      name: "SvgNonScalingStrokePrecisionFix",
      status: "stable",
    },
    {
      name: "SvgPartitionSVGDocumentResourcesInMemoryCache",
      status: "stable",
    },
    {
      name: "SvgScriptElementAsyncAttribute",
      status: "stable",
    },
    {
      name: "SvgSizingWithPreserveAspectRatioNone",
      status: "experimental",
    },
    {
      name: "SvgSmilPruneInstanceTimes",
      status: "stable",
    },
    {
      name: "SvgTransformOnNestedSvgElement",
      status: "stable",
    },
    {
      name: "SynthesizedKeyboardEventsForAccessibilityActions",
      status: "experimental",
    },
    {
      name: "SystemDefaultAccentColors",
      status: "stable",
      base_feature: "none",

      // This feature is controlled by the corresponding Chromium feature
      // features::kUseSystemDefaultAccentColors.
    },
    {
      // 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: "stable",
    },
    {
      name: "SystemWakeLock",
      status: "experimental",
    },
    {
      name: "TableIsAutoFixedLayout",
      status: "test",
    },
    {
      name: "TabSizeAncestor",
      status: "stable",
    },
    {
      name: "TabSizeWithSpacing",
      status: "stable",
    },
    {
      name: "TabWidthNegativePosition",
      status: "stable",
    },
    {
      // When checking the shadow tree during invoke(),
      // use the invocationTargetInShadowTree saved before
      // calling the listener.
      // This was added in M142 and can be removed after M144.
      // https://issues.chromium.org/issues/41408360
      name: "TargetInShadowDeterminedBeforeListener",
      status: "stable",
    },
    // 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",
    },
    // This is a feature used for testing what happens when an origin trial
    // feature has browser-process read/write access. It should never be used
    // in production code.
    {
      name: "TestFeatureForBrowserProcessReadWriteAccessOriginTrial",
      origin_trial_feature_name: "TestFeatureForBrowserProcessReadWriteAccessOriginTrial",
      base_feature: "none",
      browser_process_read_write_access: true,
    },
    // 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",
    },
    {
      // crbug.com/442551790
      name: "TextareaLastLineRemovalFix",
      status: "stable",
    },
    {
      // crbug.com/414858401
      name: "TextareaLineEndingsAsBr",
      status: "stable",
    },
    {
      // crbug.com/414858401
      name: "TextareaMultipleIfcs",
      status: "stable",
      depends_on: ["TextareaLineEndingsAsBr"],
    },
    {
      name: "TextDetector",
      status: "experimental",
    },
    {
      // crbug.com/40812040
      name: "TextEmphasisLetterSpacing",
      status: "stable",
    },
    {
      // crbug.com/368657256
      name: "TextEmphasisPositionAuto",
      status: "experimental",
    },
    {
      name: "TextEmphasisPunctuationExceptions",
      status: "stable"
    },
    {
      // crbug.com/442481227
      name: "TextEmphasisWithRuby",
      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: "TextMetricsBaselines",
      status: "stable",
    },
    {
      // https://crbug.com/41492459
      name: "TextOverflowString",
      status: "test",
    },
    {
      // crbug.com/431660829
      name: "TextSpacingTrimFallback",
      status: "stable",
    },
    {
      // crbug.com/431660829
      name: "TextSpacingTrimFallback2",
      depends_on: ["TextSpacingTrimFallback"],
      status: "test",
    },
    {
      // crbug.com/440947112
      name: "TextSpacingTrimFallbackChws",
      depends_on: ["TextSpacingTrimFallback"],
      status: "stable",
    },
    {
      // crbug.com/331123676
      name: "TextSpacingTrimYuGothicUI",
      status: "stable",
    },
    // This feature is used to inform the renderer of a user bypass from the
    // browser process to disable third-party storage partitioning.
    {
      name: "ThirdPartyStoragePartitioningUserBypass",
      browser_process_read_write_access: true,
      base_feature: "none",
    },
    {
      name: "ThrottledHistoryAPIThrowsSecurityError",
      status: "test",
    },
    {
      // https://drafts.csswg.org/web-animations-2/#triggers
      name: "TimelineTrigger",
      status: "experimental",
    },
    {
      name: "TimerThrottlingForBackgroundTabs",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "TimestampBasedCLSTracking",
      status: "experimental"
    },
    {
      name: "TimeZoneChangeEvent",
      status: "experimental",
    },
    {
      name: "TopicsAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      name: "TopicsDocumentAPI",
      base_feature: "none",
      public: true,
      status: "stable",
    },
    {
      // This feature allows calling the Topics API via an image
      // attribute.
      name: "TopicsImgAPI",
      base_feature: "none",
      public: true,
      status: "experimental",
    },
    // 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).
    // This feature is enabled by default in Android, where
    // TouchDragOnShortPress is not shipped due to interactions with the OS that
    // caused issues in the behavior.
    // Please see https://issues.chromium.org/40823294
    {
      name: "TouchDragAndContextMenu",
      base_feature: "none",
      public: true,
    },
    // This feature enables drag and drop using touch input devices. Replaces
    // the old "--enable-touch-drag-drop" and "--disable-touch-drag-drop"
    // switches.
    // Enabled by default in Android, ChromeOS and Windows.
    {
      name: "TouchDragAndDrop",
      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.
    {
      name: "TouchDragOnShortPress",
      depends_on: ["TouchDragAndDrop"],
      status: {
        "Win": "stable",
      },
    },
    // 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: "TransferableRTCDataChannel",
      status: "stable",
    },
    // This is conditionally set if the platform supports translation.
    {
      name: "TranslateService",
    },
    {
      name: "TranslationAPI",
      status: {
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "ChromeOS": "stable",
        "default": "",
      },
      origin_trial_feature_name: "TranslationAPI",
      origin_trial_allows_third_party: true,
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "TranslationAPIForWorkers",
      public: true,
    },
    {
      // Traverse flat tree to find start and end of paragraph in delete
      // selection to handle slot distribution in details.
      // See https://crbug.com/413595949
      name: "TraverseFlatTreeToHandleSlots",
      status: "stable",
    },
    {
      // When enabled, treats the initial navigation to about:blank#fragment in
      // an MHTML document as a cross-document navigation.
      //
      // Although it appears to be a same-document fragment navigation, MHTML
      // loading replaces the initial empty document with a new committed
      // document that has an opaque origin.
      //
      // This feature acts as a kill switch for https://crbug.com/40580002.
      name: "TreatMhtmlInitialDocumentLoadsAsCrossDocument",
      status: "stable",
    },
    {
      name: "TrustedTypesFromLiteral",
      status: "experimental",
      base_feature: "none",
    },
    {
      // Adapt Trusted Types to its new spec, as part of HTML.
      // Tracking bug: 330516530
      name: "TrustedTypesHTML",
      status: "experimental",
    },
    {
      name: "TrustedTypesUseCodeLike",
      status: "experimental",
    },
    {
      name: "TwoPhaseViewTransition",
      status: "test",
    },
    {
      name: "UnclosedFormControlIsInvalid",
      status: "experimental",
    },
    {
      name: "UnencodedDigest",
      status: "stable",
    },
    {
      name: "UnexposedTaskIds",
    },
    // This is a kill switch for the unprefixed Web Speech API.
    {
      name: "UnprefixedSpeechRecognition",
      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"],
    },
    // If enabled, notify the associated DisplayCutoutHost of changes in
    // complex safe area constraint usage on the page.
    // Only Android may make use of this feature currently.
    {
      name: "UpdateComplexSafaAreaConstraints",
      status: {
        "Android": "stable",
        "default": "",
      }
    },
    // Fix for https://crbug.com/41329214.
    {
      name: "UpdateSelectionOnNodeInsertion"
    },
    // Fix for https://crbug.com/436624850
    // Ensures trivial_text_ is updated after fragment creation from text
    // by calling UpdateTrivialReplacementText()
    {
      name: "UpdateTrivalTextAfterFragmentCreationFromText",
      status: "stable",
    },
    {
      name: "URLPatternCompareComponent",
      status: "experimental",
    },
    {
      name: "URLPatternGenerate",
      status: "experimental",
    },
    {
      name: "URLSearchParamsHasAndDeleteMultipleArgs",
      status: "stable",
    },
    {
      name: "UseBeginFramePresentationFeedback",
      status: {
        "ChromeOS": "stable",
      },
    },
    {
      // Fix for https://crbug.com/454639396
      name: "UseBoundedSelectionOffsetsInEditContextDeleteOperations",
      status: "stable"
    },
    {
      // Android currently uses low-quality interpolation, while other platforms
      // default to medium-quality. This flag is for experimenting with changing
      // the value on Android. See: https://crbug.com/374315986.
      name: "UseLowQualityInterpolation",
      status: {
        "Android": "stable",
        "default": "",
      },
    },
    {
      // This flag uses the original DOM text for input when the password
      // echo is enabled to create the offset_map.
      name: "UseOriginalDomOffsetsForOffsetMap",
      status: "test",
    },
    {
      name: "UsePositionForPointInFlexibleBoxWithSingleChildElement",
      status: "stable",
    },
    {
      name: "UsePositionIfIsVisuallyEquivalentCandidate",
      status: "stable",
    },
    {
      name: "UserDefinedEntryPointTiming",
      status: "experimental",
    },
    {
      // Fix for https://crbug.com/421314614
      name: "UseSelectionInDOMTreeAnchorInExtendSelection",
      status: "stable"
    },
    {
      name: "UseShadowHostStyleCheckEditable",
      status: "stable",
    },
    {
      // Fix for https://crbug.com/354497121
      name: "UseSpecValuesInTextFormatUpdateEventStyles",
      status: "stable"
    },
    {
      name: "UseUndoStepElementDispatchBeforeInput",
      status: "stable",
    },
    {
      name: "V8IdleTasks",
      base_feature: "none",
      public: true,
    },
    {
      // Whether a video element should automatically play fullscreen unless
      // 'playsinline' is set.
      name: "VideoAutoFullscreen",
      settable_from_internals: true,
    },
    {
      name: "VideoFrameMetadataBackgroundBlur",
      status: "experimental",
    },
    {
      name: "VideoFrameMetadataRtpTimestamp",
      status: "experimental",
    },
    {
      name: "VideoFullscreenOrientationLock",
    },
    {
      name: "VideoRotateToFullscreen",
    },
    {
      name: "VideoTrackGenerator",
      status: "test",
    },
    {
      name: "VideoTrackGeneratorInWindow",
      status: "test",
    },
    {
      name: "VideoTrackGeneratorInWorker",
    },
    {
      name: "ViewportHeightClientHintHeader",
      status: "stable",
    },
    {
      name: "ViewportSegments",
      status: "stable",
    },
    {
      name: "ViewTransitionAsyncFinished",
      status: "stable",
    },
    {
      name: "ViewTransitionHoistBackdropFilterEffect",
      status: "stable",
    },
    {
      name: "ViewTransitionLongCallbackTimeoutForTesting",
      status: "test",
    },
    {
      name: "ViewTransitionUpdateLifecycleBeforeReady",
      status: "stable",
    },
    {
      name: "ViewTransitionWaitUntil",
      status: "stable",
    },
    {
      name: "VisibilityCollapseColumn",
    },
    {
      // 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",
    },
    {
      // https://chromestatus.com/feature/5183481574850560
      name: "WebAppInstallation",
      status: {"Android": "", "default": "test"},
      origin_trial_feature_name: "WebAppInstallation",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "WebAppLaunchQueue",
      status: "stable",
      base_feature: "none",
    },
    {
      name: "WebAppScopeExtensions",
      origin_trial_feature_name: "WebAppScopeExtensions",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      status: "experimental",
      base_feature: "none",
    },
    {
      name: "WebAppTabStrip",
      status: {
        "ChromeOS": "stable",
        "default": "experimental"
      },
      base_feature: "DesktopPWAsTabStrip",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "WebAppTabStripCustomizations",
      status: {
        "ChromeOS": "stable",
        "default": "experimental"
      },
      base_feature: "DesktopPWAsTabStripCustomizations",
      base_feature_status: "enabled",
      copied_from_base_feature_if: "overridden",
    },
    {
      name: "WebAppTranslations",
      status: "experimental",
      base_feature: "WebAppEnableTranslations",
    },
    {
      // https://chromestatus.com/feature/6024844719947776
      name: "WebAssemblyCustomDescriptors",
      origin_trial_feature_name: "WebAssemblyCustomDescriptors",
      status: "experimental",
      base_feature: "none",
    },
    {
      // 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",
    },
    {
      // https://chromestatus.com/feature/5077691662073856
      name: "WebAudioBypassOutputBuffering",
      status: {
        "Win": "stable",
        "ChromeOS": "stable",
        "Mac": "stable",
        "Linux": "stable",
      },
    },
    {
      // https://chromestatus.com/feature/5077691662073856
      // Allows an Enterprise Policy to override WebAudioBypassOutputBuffering
      name: "WebAudioBypassOutputBufferingOptOut",
      public: true,
    },
    {
      // https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-renderquantumsize
      name: "WebAudioConfigurableRenderQuantum",
    },
    // 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",
    },
    // Prototyping https://github.com/w3c/webauthn/issues/2144
    {
      name: "WebAuthenticationAmbient",
      status: "experimental",
      base_feature: "none",
      public: true,
    },
    // 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 providing a URL to retrieve a WebAuthn challenge.
    // https://chromestatus.com/feature/5109012922892288
    {
      name: "WebAuthenticationChallengeUrl",
      status: "experimental",
    },
    // https://w3c.github.io/webauthn/#dom-clientcapability-conditionalcreate
    {
      name: "WebAuthenticationConditionalCreate",
      status: "test",
      base_feature: "none",
      public: true,
    },
    // Prototyping https://github.com/w3c/webauthn/issues/2228
    {
      name: "WebAuthenticationImmediateGet",
      origin_trial_feature_name: "WebAuthenticationImmediateGet",
      origin_trial_os: ["win", "mac", "linux", "chromeos"],
      base_feature: "none",
      public: true,
    },
    {
      name: "WebAuthenticationRemoteDesktopSupport",
      base_feature: "none",
      public: true,
    },
    // https://w3c.github.io/webauthn/#sctn-supplemental-public-keys-extension
    {
      name: "WebAuthenticationSupplementalPubKeys",
      status: "experimental",
    },
    // Enables `uiMode` enumeration field in CredentialRequestOptions struct.
    // This is an alternate API shape for `WebAuthenticationImmediateGet`.
    // See https://github.com/w3c/webauthn/issues/2228.
    {
      name: "WebAuthenticationUiMode",
      status: "experimental",
    },
    // WebBluetooth is enabled by default on Android, ChromeOS, iOS, macOS and
    // Windows.
    {
      name: "WebBluetooth",
      public: true,
      status: {
        "Android": "stable",
        "ChromeOS": "stable",
        "iOS": "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: "WebCodecsVideoEncoderBuffers",
      status: "experimental",
    },
    {
      // Adding post-quantum algorithms (ML-DSA, ML-KEM) to WebCrypto.
      // Also adding ChaCha20-Poly1305 while we're at it.
      //
      // https://chromestatus.com/feature/5198951632470016
      name: "WebCryptoPQC",
    },
    {
      name: "WebFontResizeLCP",
    },
    {
      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,
    },
    {
      // Switch WebGL to use an experimental implementation where WebGL calls
      // are translated in Blink, via ANGLE, to WebGPU calls. Note that this
      // is not marked as "experimental" because it is not an incremental
      // addition like other experimental features but a code switch, so we
      // don't want to enable it when testing all "experimental Web platform
      // features".
      name: "WebGLOnWebGPU",
    },
    {
      // Launch feature flag for WebGPU Compatibility Mode
      // https://chromestatus.com/feature/6436406437871616
      name: "WebGPUCompatibilityMode",
      origin_trial_feature_name: "WebGPUCompatibilityMode",
      status: "experimental",
      // Also enabled as part of all experimental WebGPU features.
      implied_by: ["WebGPUExperimentalFeatures"],
    },
    {
      // 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,
    },
    {
      // https://chromestatus.com/feature/5110223547269120
      name: "WebGPUTextureComponentSwizzle",
      status: "stable",
    },
    {
      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",
      public: true,
      status: "stable",
      base_feature: "none",
    },
    {
      name: "WebIdentityDigitalCredentialsCreation",
      origin_trial_feature_name: "WebIdentityDigitalCredentialsCreation",
      origin_trial_allows_third_party: true,
      public: true,
      status: "experimental",
      base_feature: "none",
    },
    // Kill switch for making BigInt handling in WebIDL use ToBigInt.
    {
      name: "WebIDLBigIntUsesToBigInt",
      status: "stable",
    },
    {
      name: "WebMCP",
      status: "experimental",
    },
    {
      name: "WebMCPTesting",
      status: "experimental",
    },
    {
      name: "WebNFC",
      public: true,
      status: {"Android": "stable", "iOS": "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"},
    },
    // WebShare is enabled by default on Android (non-WebView), Win, ChromeOS, and Mac.
    // This is done in chrome/renderer/chrome_content_renderer_client.cc to prevent
    // making the API available to Linux and WebView. Ideally we would set the status
    // below to "stable" once we can do so without significant test expectation duplication.
    {
      name: "WebShare",
      public: true,
      status: "test",
    },
    {
      name: "WebSocketStream",
      status: "stable",
    },
    {
      name: "WebSpeechRecognitionContext",
      status: {
        "Win": "stable",
        "Mac": "stable",
        "Linux": "stable",
        "ChromeOS": "experimental",
        "default": "",
      },
    },
    {
      name: "WebTransportApplicationProtocol",
      status: "stable",
      base_feature: "none",
    },
    {
      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",
    },
    {
      // Fetches the WebUI code cache from the resource bundle asynchronously
      // on a worker thread.
      name: "WebUIBundledCodeCacheAsyncFetch",
      status: "experimental",
    },
    {
      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: "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: "WebXRGPUBinding",
      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: "WebXRLayersCommon",
      implied_by: ["WebXRLayers", "WebXRGPUBinding"],
      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",
    },
    {
      name: "WebXRVisibilityMask",
      depends_on: ["WebXR"],
      status: "stable",
    },
    {
      name: "WidthAndHeightAsPresentationAttributesOnNestedSvg",
      // Disabled due to web compat issues, see https://crbug.com/449170647.
      status: "experimental",
    },
    {
      name: "WidthAndHeightStylePropertiesOnUseAndSymbol",
      status: "experimental",
    },
    {
      name: "WindowControlsOverlay",
      status: { "Android": "test", "default": "stable" },
      base_feature: "AndroidWindowControlsOverlay",
    },
    // 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",
    },
    {
      name: "WordSpacingWhiteSpacePre",
      status: "stable",
    },
    {
      // Moving to the Rust parser requires deprecation of the niche feature
      // of synchronously including external entities.
      // https://crbug.com/455813733
      name: "XMLNoExternalEntities",
    },
    {
      name: "XMLParsingRust",
    },
    {
      name: "XMLSerializerConsistentDefaultNsDeclMatching",
      status: "test",
    },
    {
      // A feature flag that controls whether XSLT is supported by the browser.
      // crbug.com/435623334.
      name: "XSLT",
      status: "stable",
    },
    {
      // A feature flag that will be used for a "special trial" of disabling
      // XSLT on pre-stable channels only. If *either* this flag is disabled,
      // *or* the main "XSLT" flag is disabled, then XSLT will be disabled.
      // crbug.com/435623334.
      name: "XSLTSpecialTrial",
      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",
    }
  ],
}
