blob: e6c29b1b15b0fa3105e18f57e1afffc0af6d49d5 [file] [log] [blame]
{
// 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"
},
initial: {},
invalidate: {},
},
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",
},
// Number of pixels below which 2D canvas is rendered in software
// even if hardware acceleration is enabled.
// Hardware acceleration is useful for large canvases where it can avoid the
// pixel bandwidth between the CPU and GPU. But GPU acceleration comes at
// a price - extra back-buffer and texture copy. Small canvases are also
// widely used for stylized fonts. Anti-aliasing text in hardware at that
// scale is generally slower. So below a certain size it is better to
// draw canvas in software.
{
name: "minimumAccelerated2dCanvasSize",
initial: "129*128",
type: "int",
},
{
name: "minimumFontSize",
initial: 0,
invalidate: "Style",
type: "int",
},
{
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",
initial: "EditingBehaviorTypeForPlatform()",
type: "EditingBehaviorType",
},
{
name: "localStorageEnabled",
initial: false,
},
{
name: "allowUniversalAccessFromFileURLs",
initial: true,
},
{
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: "offlineWebApplicationCacheEnabled",
initial: true,
},
{
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: "xssAuditorEnabled",
initial: false,
},
{
name: "preferCompositingToLCDTextEnabled",
initial: false,
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,
invalidate: "MediaControls",
},
{
name: "scrollAnimatorEnabled",
initial: true,
},
// Used to disable threaded, compositor scrolling for testing purposes.
// crbug.com/410974 tracks removal once alternative solutions for selective
// main thread scrolling are supported.
{
name: "threadedScrollingEnabled",
initial: true,
invalidate: "Style",
},
// 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,
},
{
name: "shouldRespectImageOrientation",
initial: false,
},
// Limited use by features which behave differently depending on the input
// devices available. For example, the pointer and hover media queries.
// Note that we need to be careful when basing behavior or UI on this -
// just because a device is present doesn't mean the user cares about it
// or uses it (i.e. Chromebook Pixel users generally don't want to give up
// screen real estate just because they happen to have a touchscreen).
{
name: "deviceSupportsTouch",
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",
},
// Whether touch gestures should be "fuzzed" to nearest touch targets.
// It's expected that this is enabled everywhere by default, but it may be
// disabled for testing purposes as the algorithm is not yet perfect.
// crbug.com/304895 tracks removal once we're satisfied with the algorithm.
{
name: "touchAdjustmentEnabled",
initial: true,
},
// 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: "cookieEnabled",
initial: true,
},
{
name: "navigateOnDragDrop",
initial: true,
},
{
name: "DOMPasteAllowed",
initial: false,
},
{
name: "allowCustomScrollbarInMainFrame",
initial: true,
},
{
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,
},
// Some apps could have a default video poster if it is not set.
{
name: "defaultVideoPosterURL",
type: "String",
},
{
name: "smartInsertDeleteEnabled",
initial: false,
},
{
name: "selectTrailingWhitespaceEnabled",
initial: "kDefaultSelectTrailingWhitespaceEnabled",
},
{
name: "selectionIncludesAltImageText",
initial: false,
},
{
name: "selectionStrategy",
initial: "SelectionStrategy::kCharacter",
type: "SelectionStrategy",
},
//////////////// Settings used by Android WebView below ////////////////
{
name: "useLegacyBackgroundSizeShorthandBehavior",
initial: false,
},
// 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,
},
// 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,
},
// If true, scrollers will use overlay scrollbars. These do not take up any
// layout width, are drawn using solid color quads by the compositor, and fade away
// after a timeout.
{
name: "useSolidColorScrollbars",
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,
},
// Font scale factor for accessibility, applied as part of text autosizing.
{
name: "accessibilityFontScaleFactor",
initial: "1.0",
invalidate: "TextAutosizing",
type: "double",
},
// Only used by web tests and inspector emulation.
{
name: "mediaTypeOverride",
initial: "\"\"",
invalidate: "MediaQuery",
type: "String",
},
{
name: "displayModeOverride",
initial: "kWebDisplayModeUndefined",
invalidate: "MediaQuery",
type: "WebDisplayMode",
},
// 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: "kImageAnimationPolicyAllowed",
type: "ImageAnimationPolicy",
},
// 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,
},
// Forces Android Overlay Scrollbar for mobile emulator.
{
name: "forceAndroidOverlayScrollbar",
initial: false,
},
// 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: "kV8CacheOptionsDefault",
type: "V8CacheOptions",
},
// 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: "kPointerTypeNone",
invalidate: "MediaQuery",
type: "int",
},
{
name: "availableHoverTypes",
initial: "kHoverTypeNone",
invalidate: "MediaQuery",
type: "int",
},
// These values specify properties of the user's primary pointing device only.
{
name: "primaryPointerType",
initial: "kPointerTypeNone",
invalidate: "MediaQuery",
type: "PointerType",
},
{
name: "primaryHoverType",
initial: "kHoverTypeNone",
invalidate: "MediaQuery",
type: "HoverType",
},
// If true, the value in password fields is exposed to assistive technologies.
{
name: "accessibilityPasswordValuesEnabled",
initial: false,
},
// If true, static text nodes expose inline text box children.
{
name: "inlineTextBoxAccessibilityEnabled",
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: "WebViewportStyle::kDefault",
invalidate: "ViewportRule",
type: "WebViewportStyle",
},
// 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",
},
// 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",
},
// 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",
},
{
name: "historyEntryRequiresUserGesture",
initial: false,
},
// 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 data saver holdback for Web APIs is enabled. If enabled, data saver appears
// as disabled to the web consumers even if it has been actually enabled by the user.
{
name: "dataSaverHoldbackWebApi",
initial: false,
},
// Whether to invalidate device-dependent media queries and restore scroll positions
// on frame resize assuming device rotation.
{
name: "mainFrameResizesAreOrientationChanges",
initial: false,
},
// Ability to override the default 'passive' value in AddEventListenerOptions. This
// is useful to demonstrate the power of passive event listeners. This can be removed
// when there is greater adoption, interventions to force it on and associated devtools
// to enable it have been shipped.
{
name: "passiveListenerDefault",
initial: "PassiveListenerDefault::kFalse",
type: "PassiveListenerDefault",
},
// Some platforms have media subsystems which are too buggy to allow preloading
// of content by default. See http://crbug.com/612909 for details.
{
name: "forcePreloadNoneForMediaElements",
initial: false,
},
{
name: "hideScrollbars",
initial: false,
invalidate: "ViewportScrollbar",
},
// 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",
initial: "AutoplayPolicy::Type::kNoUserGestureRequired",
},
//
// High contrast mode
//
{
name: "highContrastMode",
initial: "HighContrastMode::kOff",
type: "HighContrastMode",
},
{
name: "highContrastGrayscale",
initial: false,
},
{
name: "highContrastContrast",
initial: 0,
type: "double",
},
{
name: "highContrastImagePolicy",
initial: "HighContrastImagePolicy::kFilterAll",
type: "HighContrastImagePolicy",
},
{
name: "mediaDownloadInProductHelpEnabled",
initial: false,
},
{
name: "navigatorPlatformOverride",
type: "String",
},
{
name: "lowPriorityIframesThreshold",
initial: "WebEffectiveConnectionType::kTypeUnknown",
type: "WebEffectiveConnectionType",
},
{
name: "shouldProtectAgainstIpcFlooding",
initial: true,
},
{
name: "lazyLoadEnabled",
initial: false,
},
//
// Lazy frame loading distance-from-viewport thresholds for different effective connection types.
//
{
name: "lazyFrameLoadingDistanceThresholdPxUnknown",
initial: 800,
type: "int",
},
{
name: "lazyFrameLoadingDistanceThresholdPxOffline",
initial: 800,
type: "int",
},
{
name: "lazyFrameLoadingDistanceThresholdPxSlow2G",
initial: 800,
type: "int",
},
{
name: "lazyFrameLoadingDistanceThresholdPx2G",
initial: 800,
type: "int",
},
{
name: "lazyFrameLoadingDistanceThresholdPx3G",
initial: 800,
type: "int",
},
{
name: "lazyFrameLoadingDistanceThresholdPx4G",
initial: 800,
type: "int",
},
//
// Lazy image loading distance-from-viewport thresholds for different effective connection types.
//
{
name: "lazyImageLoadingDistanceThresholdPxUnknown",
initial: 800,
type: "int",
},
{
name: "lazyImageLoadingDistanceThresholdPxOffline",
initial: 800,
type: "int",
},
{
name: "lazyImageLoadingDistanceThresholdPxSlow2G",
initial: 800,
type: "int",
},
{
name: "lazyImageLoadingDistanceThresholdPx2G",
initial: 800,
type: "int",
},
{
name: "lazyImageLoadingDistanceThresholdPx3G",
initial: 800,
type: "int",
},
{
name: "lazyImageLoadingDistanceThresholdPx4G",
initial: 800,
type: "int",
},
// Preferred color scheme from the OS/application passed to the renderer for
// evaluating the prefers-color-scheme media query.
{
name: "preferredColorScheme",
initial: "WebColorScheme::kNoPreference",
invalidate: "MediaQuery",
type: "WebColorScheme",
},
// 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",
},
],
}