chromium/third_party/blink/renderer/core/frame/settings.json5

{
  // Defines properties which are available on the Settings object.
  //
  // Please think carefully before adding a new Setting.  Some questions to
  // consider are:
  // - Should this be a RuntimeEnabledFeature instead? Settings are for things
  //   which we support either values of at runtime.  Features are set at renderer
  //   process startup and are never changed. Features also tend to be set to a
  //   value based on the platform or the stability of the code in question, where
  //   as settings both codepaths need to be stable.
  // - How will you ensure test coverage of all relevant values of your setting?
  // - Is the default value appropriate for other platforms or ports which may
  //   not be aware of your setting?
  // - Can your setting result in behavior differences observable to web
  //   developers?
  // - Should this setting ideally be removed in the future?  If so please file
  //   a bug and reference it in the comments for your setting.
  //
  // One reason to add a Setting is to manage the risk associated with adding a
  // new feature.  For example, we may choose to ship a new UI behavior or
  // performance optimization to ChromeOS users first (in order to gather feedback
  // and metrics on its use from the wild) before attempting to ship it to
  // Windows.
  //
  // FIXME: Add support for global settings.
  // FIXME: Add support for custom getters/setters.

  // Valid parameters for data entries below.
  parameters: {
    type: {
      default: "bool",
      valid_type: "str",  // The string value should be a C++ type name
    },
    // List of files containing the definitions of the types in 'type'.
    include_paths: {
      default: [],
      valid_type: "list",
    },
    // The initial value. Can be a boolean, integer or string representing the
    // value.
    // Can be set per platform using an object with keys being any of the
    // platforms listed in valid_keys below. The 'default' key will cover any
    // platforms that has not been explicitly specified and should always be
    // present.
    initial: {
      valid_keys: ["Android", "Win", "ChromeOS_Ash", "ChromeOS_Lacros", "Mac", "Linux"],
    },
    invalidate: {
      default: [],
      valid_type: "list",
      // See SettingsDelegate::ChangeType for valid values (without "k"),
    },
  },

  data: [
    {
      name: "defaultTextEncodingName",
      type: "String",
    },

    // Do not hide chars typed in password fields immediately, but let the last char stay
    // visible for N seconds, configured by the passwordEchoDurationInSeconds setting
    // FIXME: Enable automatically if passwordEchoDurationInSeconds is set to a positive value.
    {
      name: "passwordEchoEnabled",
      initial: false,
    },

    // Configure how long the last char should say visible in seconds.
    {
      name: "passwordEchoDurationInSeconds",
      initial: 1,
      type: "double",
    },

    // Sets the magnification value for validation message timer.  If the
    // magnification value is N, a validation message disappears automatically after
    // <message length> * N / 1000 seconds.  If N is equal to or less than 0, a
    // validation message doesn't disappears automaticaly.
    {
      name: "validationMessageTimerMagnification",
      initial: 50,
      type: "int",
    },

    // Sets the minimum font-size in CSS px. That means the minimum font-size is
    // applied before applying the device scale factor or page zoom.
    {
      name: "minimumFontSize",
      initial: 0,
      invalidate: ["Style"],
      type: "int",
    },

    // Sets the minimum font-size in CSS px, but only applies to relative font
    // units like 'small', em, and percentage sizes.
    {
      name: "minimumLogicalFontSize",
      initial: 0,
      invalidate: ["Style"],
      type: "int",
    },
    {
      name: "defaultFontSize",
      initial: 0,
      invalidate: ["Style"],
      type: "int",
    },
    {
      name: "defaultFixedFontSize",
      initial: 0,
      invalidate: ["Style"],
      type: "int",
    },

    {
      name: "editingBehaviorType",
      // NOTEs
      //  1) EditingMacBehavior comprises builds on Mac;
      //  2) EditingWindowsBehavior comprises builds on Windows;
      //  3) EditingUnixBehavior comprises all unix-based systems, but
      //     Darwin/MacOS/Android (and then abusing the terminology);
      //  4) EditingAndroidBehavior comprises Android builds.
      // 99) MacEditingBehavior is used a fallback.
      initial: {
        "Mac": "mojom::blink::EditingBehavior::kEditingMacBehavior",
        "Win": "mojom::blink::EditingBehavior::kEditingWindowsBehavior",
        "Android": "mojom::blink::EditingBehavior::kEditingAndroidBehavior",
        "ChromeOS_Ash": "mojom::blink::EditingBehavior::kEditingChromeOSBehavior",
        "ChromeOS_Lacros": "mojom::blink::EditingBehavior::kEditingChromeOSBehavior",
        "default": "mojom::blink::EditingBehavior::kEditingUnixBehavior",
      },
      type: "mojom::EditingBehavior",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },

    {
      name: "localStorageEnabled",
      initial: false,
    },
    {
      name: "allowUniversalAccessFromFileURLs",
      initial: true,
      invalidate: ["UniversalAccess"],
    },
    {
      name: "allowFileAccessFromFileURLs",
      initial: true,
    },
    {
      name: "supportsMultipleWindows",
      initial: true,
    },
    {
      name: "javaScriptCanAccessClipboard",
      initial: false,
    },
    {
      name: "shouldPrintBackgrounds",
      initial: false,
    },
    {
      name: "shouldClearDocumentBackground",
      initial: true,
    },
    {
      name: "HighlightAds",
      initial: false,
      invalidate: ["HighlightAds"],
    },
    {
      name: "textAreasAreResizable",
      initial: false,
      invalidate: ["Style"],
    },
    {
      name: "acceleratedCompositingEnabled",
      initial: false,
      invalidate: ["AcceleratedCompositing"],
    },

    {
      name: "allowScriptsToCloseWindows",
      initial: false,
    },

    // FIXME: This should really be disabled by default as it makes platforms that
    // don't support the feature download files they can't use by.
    // Leaving enabled for now to not change existing behavior.
    {
      name: "downloadableBinaryFontsEnabled",
      initial: true,
    },

    {
      name: "LCDTextPreference",
      type: "LCDTextPreference",
      include_paths: [
        "third_party/blink/renderer/platform/graphics/lcd_text_preference.h"
      ],
      initial: "LCDTextPreference::kStronglyPreferred",
      invalidate: ["AcceleratedCompositing"],
    },

    {
      name: "webGL1Enabled",
      initial: true,
    },

    {
      name: "webGL2Enabled",
      initial: true,
    },

    {
      name: "webGLErrorsToConsoleEnabled",
      initial: true,
    },
    {
      name: "antialiased2dCanvasEnabled",
      initial: true,
    },
    {
      name: "antialiasedClips2dCanvasEnabled",
      initial: true,
    },
    {
      name: "accelerated2dCanvasMSAASampleCount",
      initial: 0,
      type: "int",
    },

    {
      name: "hyperlinkAuditingEnabled",
      initial: false,
    },
    {
      name: "allowRunningOfInsecureContent",
      initial: true,
    },

    {
      name: "pictureInPictureEnabled",
      initial: true,
    },

    {
      name: "webAppScope",
      type: "String",
    },

    {
      name: "presentationRequiresUserGesture",
      initial: true,
    },

    {
      name: "embeddedMediaExperienceEnabled",
      initial: false,
    },

    // This is true when the page is being displayed in a 3D context (eg, a VR
    // headset).
    {
      name: "immersiveModeEnabled",
      initial: false,
    },

    // Only affects main thread scrolling
    {
      name: "scrollAnimatorEnabled",
      initial: true,
    },

    // Used in web tests for gesture tap highlights. Makes the highlights square
    // (rather than rounded) to make it possible to reftest the results.
    {
      name: "mockGestureTapHighlightsEnabled",
      initial: false,
    },

    // This value indicates the number of simultaneous multi-touch points supported
    // by the currently connected screen/digitizer that supports the most points.
    // From Pointer Events spec:
    //   http://www.w3.org/TR/pointerevents///widl-Navigator-maxTouchPoints
    {
      name: "maxTouchPoints",
      initial: 0,
      type: "int",
    },

    // Determines whether WebViewClient::didTapMultipleTargets will be used for
    // touch disambiguation.
    {
      name: "multiTargetTapNotificationEnabled",
      initial: true,
    },

    // Determines whether the barrel on stylus input should be used for selecting
    // text and dragging.
    {
      name: "barrelButtonForDragEnabled",
      initial: false,
    },

    {
      name: "syncXHRInDocumentsEnabled",
      initial: true,
    },
    {
      name: "targetBlankImpliesNoOpenerEnabledWillBeRemoved",
      initial: true,
    },
    {
      name: "allowNonEmptyNavigatorPlugins",
      initial: false,
    },
    {
      name: "cookieEnabled",
      initial: true,
    },
    {
      name: "navigateOnDragDrop",
      initial: true,
    },
    {
      name: "DOMPasteAllowed",
      initial: false,
    },

    {
      name: "allowCustomScrollbarInMainFrame",
      initial: true,
    },
    {
      name: "placeRTLScrollbarsOnLeftSideInMainFrame",
      initial: false,
      invalidate: ["ScrollbarLayout"],
    },
    {
      name: "webSecurityEnabled",
      initial: true,
    },

    // Special keyboard navigation mode intented for platforms with no
    // proper mouse or touch support, such as a TV controller with a remote.
    {
      name: "spatialNavigationEnabled",
      initial: false,
    },

    // This setting adds a means to enable/disable touch initiated drag & drop. If
    // enabled, the user can initiate drag using long press.
    // crbug.com/304894 tracks removal once it's been enabled on all platforms.
    {
      name: "touchDragDropEnabled",
      initial: false,
    },

    // Fires a contextmenu event when a touch-drag ends, which by default shows
    // a context-menu.  When implementation issues have been resolved, this
    // should be merged to touchDragDropEnabled.  See crbug.com/1126473.
    {
      name: "touchDragEndContextMenu",
      initial: false,
    },

    // Some apps could have a default video poster if it is not set.
    {
      name: "defaultVideoPosterURL",
      type: "String",
    },

    {
      name: "smartInsertDeleteEnabled",
      initial: false,
    },
    {
      name: "selectTrailingWhitespaceEnabled",
      initial: {"Win": true, "default": false},
    },

    {
      name: "selectionIncludesAltImageText",
      initial: false,
    },

    {
      name: "selectionStrategy",
      initial: "SelectionStrategy::kCharacter",
      type: "SelectionStrategy",
      include_paths: [
        "third_party/blink/renderer/core/editing/selection_strategy.h"
      ],
    },

    //////////////// Settings used by Android WebView below ////////////////

    // This quirk is to maintain compatibility with Android apps built on
    // the Android SDK prior to and including version 18.
    // Presumably, this can be removed any time after 2015.
    // See http://crbug.com/282130.
    {
      name: "viewportMetaZeroValuesQuirk",
      initial: false,
    },

    // Another Android SDK <= 18 quirk, removable 2015.
    // See http://crbug.com/295287
    {
      name: "ignoreMainFrameOverflowHiddenQuirk",
      initial: false,
    },

    // Yet another Android SDK <= 18 quirk, removable 2015.
    // See http://crbug.com/305236
    {
      name: "reportScreenSizeInPhysicalPixelsQuirk",
      initial: false,
    },

    // One more Android SDK <= 18 quirk, removable 2015.
    // See http://crbug.com/306548
    {
      name: "viewportMetaMergeContentQuirk",
      initial: false,
    },

    // This quirk is to maintain compatibility with Android apps.
    // It will be possible to remove it once WebSettings.{get|set}UseWideViewPort
    // API function will be removed.
    // See http://crbug.com/288037.
    {
      name: "wideViewportQuirkEnabled",
      initial: false,
    },

    // Used by the android_webview to support a horizontal height auto-sizing
    // mode.
    {
      name: "forceZeroLayoutHeight",
      initial: false,
      invalidate: ["ViewportDescription"],
    },

    {
      name: "mainFrameClipsContent",
      initial: true,
      invalidate: ["ViewportPaintProperties"],
    },

    // For android.webkit.WebSettings.setUseWideViewport()
    // http://developer.android.com/reference/android/webkit/WebSettings.html//setUseWideViewPort(boolean)
    {
      name: "useWideViewport",
      initial: true,
      invalidate: ["ViewportDescription"],
    },

    // For android.webkit.WebSettings.setLoadWithOverviewMode()
    // http://developer.android.com/reference/android/webkit/WebSettings.html//setLoadWithOverviewMode(boolean)
    {
      name: "loadWithOverviewMode",
      initial: true,
      invalidate: ["ViewportDescription"],
    },

    // Used by android_webview to support legacy apps that inject script into a top-level initial empty
    // document and expect it to persist on navigation, even though the origin is unique. Note that this
    // behavior violates the requirements described by [Initialising a new Document object] in
    // https://html.spec.whatwg.org/multipage/browsers.html//navigating-across-documents.
    {
      name: "shouldReuseGlobalForUnownedMainFrame",
      initial: false,
    },

    //////////////// End of settings used by Android WebView ////////////////


    // Touch based text selection and editing on desktop.
    // crbug.com/304873 tracks removal once it's been enabled on all platforms.
    {
      name: "touchEditingEnabled",
      initial: false,
    },

    // The rubber-band overscroll effect is implemented in Blink and is being moved
    // to the compositor thread. This will be set to true and eventually removed.
    // crbug.com/133097
    {
      name: "rubberBandingOnCompositorThread",
      initial: false,
    },

    // The current state of caret browsing mode.
    {
      name: "caretBrowsingEnabled",
      initial: false,
      invalidate: ["Style"],
    },

    // Font scale factor for accessibility, applied as part of text autosizing.
    {
      name: "accessibilityFontScaleFactor",
      initial: "1.0",
      invalidate: ["TextAutosizing"],
      type: "double",
    },

    // Font weight adjustment for accessibility, set at OS-level.
    {
      name: "accessibilityFontWeightAdjustment",
      initial: "0",
      type: "int",
    },

    // Text size contrast factor for accessibility, applied as part of page zoom.
    {
      name: "accessibilityTextSizeContrastFactor",
      initial: "0",
      type: "int",
    },

    // Only used by web tests and inspector emulation.
    {
      name: "mediaTypeOverride",
      initial: "\"\"",
      invalidate: ["MediaQuery"],
      type: "String",
    },
    {
      name: "displayModeOverride",
      initial: "blink::mojom::DisplayMode::kUndefined",
      invalidate: ["MediaQuery"],
      type: "blink::mojom::DisplayMode",
      include_paths: [
        "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
      ],
    },

    // Only used by web tests.
    {
      name: "windowShowState",
      initial: "ui::WindowShowState::SHOW_STATE_DEFAULT",
      invalidate: ["MediaQuery"],
      type: "ui::WindowShowState",
      include_paths: ["ui/base/ui_base_types.h"],
    },

    // Only used by web tests.
    {
      name: "resizable",
      initial: true,
      invalidate: ["MediaQuery"],
      type: "bool",
    },

    // loadsImagesAutomatically only suppresses the network load of
    // the image URL. A cached image will still be rendered if requested.
    {
      name: "loadsImagesAutomatically",
      initial: false,
      invalidate: ["ImageLoading"],
    },
    {
      name: "imagesEnabled",
      initial: true,
      invalidate: ["ImageLoading"],
    },
    {
      name: "imageAnimationPolicy",
      initial: "mojom::blink::ImageAnimationPolicy::kImageAnimationPolicyAllowed",
      type: "mojom::blink::ImageAnimationPolicy",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },

    // Html preload scanning is a fast, early scan of HTML documents to find loadable
    // resources before the parser advances to them. If it is disabled, resources will
    // be loaded later.
    {
      name: "doHtmlPreloadScanning",
      initial: true,
    },

    {
      name: "pluginsEnabled",
      initial: false,
      invalidate: ["Plugins"],
    },

    {
      name: "viewportEnabled",
      initial: false,
      invalidate: ["ViewportDescription"],
    },
    {
      name: "viewportMetaEnabled",
      initial: false,
      invalidate: ["ViewportDescription"],
    },

    // When true, Blink will use the content width and viewport size to set the
    // minimum scale factor such that the user can't zoom out into the area
    // beyond the content.
    {
      name: "shrinksViewportContentToFit",
      initial: false,
    },

    {
      name: "dnsPrefetchingEnabled",
      initial: false,
      invalidate: ["DNSPrefetching"],
    },

    // Clients that execute script should call ExecutionContext::canExecuteScripts()
    // instead of this function. ExecutionContext::canExecuteScripts() checks the
    // HTML sandbox, plugin sandboxing, and other important details.
    {
      name: "scriptEnabled",
      initial: false,
      invalidate: ["MediaQuery"],
    },

    {
      name: "parserScriptingFlagPolicy",
      initial: "ParserScriptingFlagPolicy::kOnlyIfScriptIsEnabled",
      type: "ParserScriptingFlagPolicy",
      include_paths: [
        "third_party/blink/renderer/core/html/parser/parser_scripting_flag_policy.h"
      ],
    },

    // Forces Android Overlay Scrollbar for mobile emulator.
    {
      name: "forceAndroidOverlayScrollbar",
      initial: false,
      invalidate: ["ScrollbarLayout"],
    },

    // Set the timeout seconds of the network-quiet timers in IdlenessDetector.
    // Used by embedders who want to change the timeout time in order to run web contents
    // on various embedded devices and changeable network bandwidths in different regions.
    {
      name: "NetworkQuietTimeout",
      initial: "0.5",
      type: "double",
    },

    // Forces initialization of main world, even if no scripts will be executed.
    // Used by inspector to report all contexts.
    {
      name: "forceMainWorldInitialization",
      initial: false,
      invalidate: ["DOMWorlds"],
    },

    // Forces TouchEventFeatureDetection conditional feature for all main
    // worlds in the page. Used by inspector to emulate touch on devices
    // which don't support it naturally.
    {
      name: "forceTouchEventFeatureDetectionForInspector",
      initial: false,
    },

    // Compensates for poor text legibility on mobile devices. This value is
    // multiplied by the font scale factor when performing text autosizing of
    // websites that do not set an explicit viewport description.
    {
      name: "deviceScaleAdjustment",
      initial: "1.0",
      invalidate: ["TextAutosizing"],
      type: "double",
    },

    // This value is set to false if the platform does not support fullscreen.
    // When set to false all the requests to enter fullscreen will return an error
    // (fullscreenerror or webkitfullscreenerror) as specified in the standard:
    // http://fullscreen.spec.whatwg.org///dom-element-requestfullscreen
    {
      name: "fullscreenSupported",
      initial: true,
    },

    // V8 supports different types of caching. Used by V8 bindings.
    {
      name: "v8CacheOptions",
      initial: "mojom::blink::V8CacheOptions::kDefault",
      type: "mojom::blink::V8CacheOptions",
      include_paths: [
        "third_party/blink/public/mojom/v8_cache_options.mojom-blink.h"
      ],
    },

    // These values are bit fields for the properties of available pointing devices
    // and may take on multiple values (e.g. laptop with touchpad and touchscreen
    // has pointerType coarse *and* fine).
    {
      name: "availablePointerTypes",
      initial: "ui::POINTER_TYPE_NONE",
      invalidate: ["MediaQuery"],
      type: "int",
      include_paths: ["ui/base/pointer/pointer_device.h"],
    },
    {
      name: "availableHoverTypes",
      initial: "ui::HOVER_TYPE_NONE",
      invalidate: ["MediaQuery"],
      type: "int",
      include_paths: ["ui/base/pointer/pointer_device.h"],
    },

    // These values specify properties of the user's primary pointing device only.
    {
      name: "primaryPointerType",
      initial: "mojom::blink::PointerType::kPointerNone",
      invalidate: ["MediaQuery"],
      type: "blink::mojom::PointerType",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },
    {
      name: "primaryHoverType",
      initial: "mojom::blink::HoverType::kHoverNone",
      invalidate: ["MediaQuery"],
      type: "mojom::blink::HoverType",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },

    // The ability of the output device to modify the appearance of content once
    // it has been rendered:
    // kSlowType: E-ink screens or severely under-powered devices.
    // kFastType: Computer screens.
    {
      name: "outputDeviceUpdateAbilityType",
      initial: "mojom::blink::OutputDeviceUpdateAbilityType::kFastType",
      invalidate: ["MediaQuery"],
      type: "mojom::blink::OutputDeviceUpdateAbilityType",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },

    // If true, the value in password fields is exposed to assistive technologies.
    {
      name: "accessibilityPasswordValuesEnabled",
      initial: false,
    },

    // If true, context menu will be shown on mouse up instead of mouse down.
    // Typically enabled on Windows to match platform convention.
    {
      name: "showContextMenuOnMouseUp",
      initial: false,
    },

    // If true, context menu will be shown on any long press event.
    // Used on Android to prevent a context menu from being shown in certain situations
    // (i.e. long pressing an empty div)
    {
      name: "alwaysShowContextMenuOnTouch",
      initial: true,
    },

    {
      name: "disableReadingFromCanvas",
      initial: false,
    },
    {
      name: "strictMixedContentChecking",
      initial: false,
    },
    {
      name: "strictMixedContentCheckingForPlugin",
      initial: false,
    },
    {
      name: "strictPowerfulFeatureRestrictions",
      initial: false,
    },
    {
      name: "strictlyBlockBlockableMixedContent",
      initial: false,
    },
    {
      name: "allowGeolocationOnInsecureOrigins",
      initial: false,
    },
    {
      name: "logDnsPrefetchAndPreconnect",
      initial: false,
    },
    {
      name: "logPreload",
      initial: false,
    },
    {
      name: "smoothScrollForFindEnabled",
      initial: false,
    },

    // These values specify the UA intial viewport style.
    // It is dynamically set by the inspector for mobile emulation and can be
    // used by content embedders to specify custom style on certain platforms.
    {
      name: "viewportStyle",
      initial: "mojom::blink::ViewportStyle::kDefault",
      invalidate: ["ViewportStyle"],
      type: "mojom::blink::ViewportStyle",
      include_paths: [
        "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h"
      ],
    },

    // Automatic track selection is performed based on user preference for track kind specified
    // by this setting.
    {
      name: "textTrackKindUserPreference",
      initial: "TextTrackKindUserPreference::kDefault",
      invalidate: ["TextTrackKindUserPreference"],
      type: "TextTrackKindUserPreference",
      include_paths: [
        "third_party/blink/renderer/core/html/track/text_track_kind_user_preference.h"
      ],
    },

    // User style overrides for captions and subtitles
    {
      name: "textTrackBackgroundColor",
      type: "String",
    },
    {
      name: "textTrackFontFamily",
      type: "String",
    },
    {
      name: "textTrackFontStyle",
      type: "String",
    },
    {
      name: "textTrackFontVariant",
      type: "String",
    },
    {
      name: "textTrackTextColor",
      type: "String",
    },
    {
      name: "textTrackTextShadow",
      type: "String",
    },
    {
      name: "textTrackTextSize",
      type: "String",
    },
    {
      name: "textTrackWindowColor",
      type: "String",
    },
    {
      name: "textTrackWindowRadius",
      type: "String",
    },

    // Margin for title-safe placement of cues with overscan, gives top and bottom margin size as
    // percentage of video element height (for horizontal text) into which cues will not be placed.
    {
      name: "textTrackMarginPercentage",
      initial: 0,
      type: "double",
    },

    // Do we want to try to save screen real estate in the media player by hiding
    // the volume slider / mute button?
    {
      name: "preferHiddenVolumeControls",
      initial: false,
    },

    // Whether to disallow network fetches for parser blocking scripts in the main
    // frame inserted via document.write, for users on 2G or connections that are
    // effectively 2G.
    {
      name: "disallowFetchForDocWrittenScriptsInMainFrameIfEffectively2G",
      initial: false,
    },

    // Whether to disallow network fetches for parser blocking scripts in the main
    // frame inserted via document.write, for users on slow connections.
    {
      name: "disallowFetchForDocWrittenScriptsInMainFrameOnSlowConnections",
      initial: true,
    },

    // Whether to disallow network fetches for parser blocking scripts in the main
    // frame inserted via document.write, regardless of connection type.
    {
      name: "disallowFetchForDocWrittenScriptsInMainFrame",
      initial: false,
    },

    // Whether to invalidate device-dependent media queries and restore scroll positions
    // on frame resize assuming device rotation.
    {
      name: "mainFrameResizesAreOrientationChanges",
      initial: false,
    },

    {
      name: "hideScrollbars",
      initial: false,
      invalidate: ["ViewportPaintProperties"],
    },

    // Spellchecking is enabled by default for elements that do not specify it explicitly
    // using the "spellcheck" attribute.
    {
      name: "spellCheckEnabledByDefault",
      initial: true,
    },

    // Whether download UI should be hidden for the current page content.
    {
      name: "hideDownloadUI",
      initial: false,
    },

    // Whether the frame is a presentation receiver and should expose
    // `navigator.presentation.receiver`.
    {
      name: "presentationReceiver",
      initial: false,
    },

    // Whether Blink should show media controls when `controls` attribute is used.
    {
      name: "mediaControlsEnabled",
      initial: true,
      invalidate: ["MediaControls"],
    },

    // Whether we should not update selection attributes when mutating selection range.
    // TODO(changwan): remove this flag when we no longer support Android M.
    {
      name: "doNotUpdateSelectionOnMutatingSelectionRange",
      initial: false,
    },

    // Defines the autoplay policy to use.
    {
      name: "autoplayPolicy",
      type: "AutoplayPolicy::Type",
      include_paths: ["third_party/blink/renderer/core/html/media/autoplay_policy.h"],
      initial: "AutoplayPolicy::Type::kNoUserGestureRequired",
    },

    // `getDisplayMedia()`'s transient activation requirement can be bypassed via
    // `ScreenCaptureWithoutGestureAllowedForOrigins` policy.
    {
      name: "requireTransientActivationForGetDisplayMedia",
      initial: true,
    },

    // `show{OpenFile|SaveFile|Directory}Picker()`'s transient activation
    // requirement can be bypassed via
    // `FileOrDirectoryPickerWithoutGestureAllowedForOrigins` policy.
    {
      name: "requireTransientActivationForShowFileOrDirectoryPicker",
      initial: true,
    },

    //
    // Dark mode
    //
    {
      name: "forceDarkModeEnabled",
      initial: false,
      invalidate: ["ColorScheme", "Style", "Paint"],
    },

    {
      name: "navigatorPlatformOverride",
      type: "String",
    },
    {
      name: "lowPriorityIframesThreshold",
      initial: "WebEffectiveConnectionType::kTypeUnknown",
      type: "WebEffectiveConnectionType",
      include_paths: [
        "third_party/blink/public/platform/web_effective_connection_type.h"
      ],
    },
    {
      name: "shouldProtectAgainstIpcFlooding",
      initial: true,
    },

    {
      name: "lazyLoadEnabled",
      initial: true,
    },
    //
    // Lazy loading frame margins (distance from viewport) for different effective connection types.
    //
    {
      name: "lazyLoadingFrameMarginPxUnknown",
      initial: 4000,
      type: "int",
    },
    {
      name: "lazyLoadingFrameMarginPxOffline",
      initial: 8000,
      type: "int",
    },
    {
      name: "lazyLoadingFrameMarginPxSlow2G",
      initial: 8000,
      type: "int",
    },
    {
      name: "lazyLoadingFrameMarginPx2G",
      initial: 6000,
      type: "int",
    },
    {
      name: "lazyLoadingFrameMarginPx3G",
      initial: 3500,
      type: "int",
    },
    {
      name: "lazyLoadingFrameMarginPx4G",
      initial: 2500,
      type: "int",
    },

    //
    // Lazy loading image margins for different effective connection types.
    //
    {
      name: "lazyLoadingImageMarginPxUnknown",
      initial: 3000,
      type: "int",
    },
    {
      name: "lazyLoadingImageMarginPxOffline",
      initial: 8000,
      type: "int",
    },
    {
      name: "lazyLoadingImageMarginPxSlow2G",
      initial: 8000,
      type: "int",
    },
    {
      name: "lazyLoadingImageMarginPx2G",
      initial: 6000,
      type: "int",
    },
    {
      name: "lazyLoadingImageMarginPx3G",
      initial: 2500,
      type: "int",
    },
    {
      name: "lazyLoadingImageMarginPx4G",
      initial: 1250,
      type: "int",
    },

    // The forced colors state for the web content. The forced colors state
    // is used to evaluate the forced-colors media query, as well as determining
    // when to apply system color overrides to author specified styles.
    {
      name: "inForcedColors",
      initial: false,
      type: "bool",
    },

    {
      name: "isForcedColorsDisabled",
      initial: false,
      invalidate: ["ForcedColors"],
      type: "bool",
    },

    // The preferred color scheme set by the user's browser settings. The
    // variable follows the browser's color mode setting unless a browser theme
    // (custom or not) is defined, in which case the color scheme is set to the
    // default value. This value is used to evaluate the used color scheme in
    // non overlay root scrollbars.
    {
      name: "preferredRootScrollbarColorScheme",
      initial: "mojom::blink::PreferredColorScheme::kLight",
      invalidate: ["Paint"],
      type: "mojom::blink::PreferredColorScheme",
      include_paths: [
        "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-shared.h"
      ],
    },

    // Preferred color scheme from the OS/application passed to the renderer for
    // evaluating the prefers-color-scheme media query.
    {
      name: "preferredColorScheme",
      initial: "mojom::blink::PreferredColorScheme::kLight",
      invalidate: ["ColorScheme"],
      type: "mojom::blink::PreferredColorScheme",
      include_paths: [
        "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-shared.h"
      ],
    },

    // Preferred contrast from the OS/application passed to the renderer for
    // evaluating the prefers-contrast media query.
    {
      name: "preferredContrast",
      initial: "mojom::blink::PreferredContrast::kNoPreference",
      invalidate: ["MediaQuery"],
      type: "mojom::blink::PreferredContrast",
      include_paths: [
        "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-shared.h"
      ],
    },

    // Preferred motion-reduction setting from the OS/application passed to the
    // renderer for evaluating the prefers-reduced-motion media query.
    {
      name: "prefersReducedMotion",
      initial: false,
      invalidate: ["MediaQuery"],
    },

    // Preferred transparency-reduction setting from the OS/application passed to the
    // renderer for evaluating the prefers-reduced-transparency media query.
    {
      name: "prefersReducedTransparency",
      initial: false,
      invalidate: ["MediaQuery"],
    },

    // inverted-colors setting from the OS/application passed to the
    // renderer for evaluating the inverted-colors media query.
    {
      name: "invertedColors",
      initial: false,
      invalidate: ["MediaQuery"],
    },
    {
      name: "DontSendKeyEventsToJavascript",
      initial: false,
    },
    // Navigation controls from the application passed to the renderer for
    // evaluating the navigation-controls media query.
    {
      name: "navigationControls",
      initial: "NavigationControls::kNone",
      invalidate: ["MediaQuery"],
      type: "NavigationControls",
      include_paths: [
        "third_party/blink/public/common/css/navigation_controls.h"
      ],
    },
    {
      name: "accessibilityAlwaysShowFocus",
      initial: false,
      invalidate: ["Style"],
    },
    // aria-modal="true" on some platforms requires the accessibility tree to
    // be pruned so no other background content is exposed to assistive
    // technology.
    // https://www.w3.org/TR/core-aam-1.1/#ariaModalTrue
    {
      name: "ariaModalPrunesAXTree",
      initial: false,
    },
    // The AXMenuList class provides a fake implementation of the
    // select element pop-up menu, which is required on platforms like
    // Mac and Android that use a native pop-up. On other platforms you
    // can set this flag to false and expose the actual pop-up menu
    // instead of letting AXMenuList handle it.
    {
      name: "useAXMenuList",
      initial: true,
    },
    {
      name: "selectionClipboardBufferAvailable",
      initial: false,
    },
    {
      name: "accessibilityIncludeSvgGElement",
      initial: false,
    },
    {
      name: "bypassCSP",
      initial: false,
    },
    // Enables automatic adjustments of text size on mobile. This enables the
    // text autosizer, and controls whether text-size-adjust can apply.
    {
      name: "textAutosizingEnabled",
      initial: false,
      invalidate: ["TextAutosizing"],
    },
    // Only set by web tests, and only used if textAutosizingEnabled is true.
    {
      name: "textAutosizingWindowSizeOverride",
      invalidate: ["TextAutosizing"],
      type: "gfx::Size",
      include_paths: ["ui/gfx/geometry/size.h"],
    },
    {
      name: "WebXRImmersiveArAllowed",
      initial: true,
      type: "bool",
    },
    {
      name: "modalContextMenu",
      initial: true,
      type: "bool",
    },
    {
      // This number determines how small we are willing to reduce the page
      // content in order to accommodate the widest piece of content. If the
      // page would have to be reduced smaller to make the widest line fit, we
      // just clip instead.
      name: "printingMaximumShrinkFactor",
      initial: 1.5,
      type: "float",
    },
    {
      name: "prefersDefaultScrollbarStyles",
      initial: false,
      invalidate: ["Style"],
      type: "bool",
    },
    // SubApps APIs transient activation requirement can be bypassed via
    // `SubAppsAPIsAllowedWithoutGestureAndAuthorizationForOrigins` policy.
    {
      name: "requireTransientActivationAndAuthorizationForSubAppsAPI",
      initial: true,
    },
  ],
}