blob: 5aa28302599e709025c0b1a6fd60ee50c0ad4d36 [file] [log] [blame]
{
// http://dev.chromium.org/blink/runtime-enabled-features
//
// This list is used to generate RuntimeEnabledFeatures.h/cpp which contains
// a class that stores static enablers for all experimental features.
parameters: {
// Each feature can be assigned a "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.
// status=test -> Enabled in ContentShell for testing, otherwise off.
// Features without a status are not enabled anywhere by default.
status: {
valid_values: ["stable", "experimental", "test"],
},
// "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;
// depends_on: ["feature1","feature2",...] -> The feature is enabled only if all depends_on features are enabled.
// Only one of "implied_by" and "depends_on" can be specified.
//
// "stable" features listed here should be rare, as anything which we've shipped stable
// can have its runtime flag removed soon after.
implied_by: {
default: [],
valid_type: "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 cause a static
// method to be generated in OriginTrials.h/cpp. This static method allows the
// feature implementation to check if it is enabled for the current context.
origin_trial_feature_name: {
},
origin_trial_os: {
default: [],
valid_type: "list",
},
// settable_from_internals specifies whether a feature can be set from internals.runtimeFlags, with the default
// being false.
settable_from_internals: {
valid_type: "bool",
},
// Set to true to have customised {feature}Enabled() method implementation.
custom: {
valid_type: "bool",
},
// Feature policy IDL extended attribute (see crrev.com/2247923004).
feature_policy: {
},
},
data: [
{
name: "Accelerated2dCanvas",
settable_from_internals: true,
status: "stable",
},
{
name: "AccessibilityObjectModel",
status: "experimental",
},
{
name: "AllowContentInitiatedDataUrlNavigations",
status: "stable",
},
{
name: "AudioOutputDevices",
status: "stable",
},
{
name: "AudioVideoTracks",
status: "experimental",
},
{
name: "AudioWorklet",
status: "experimental",
},
{
name: "AutoplayMutedVideos",
settable_from_internals: true,
},
{
name: "Auxclick",
status: "stable",
},
{
name: "BackgroundFetch",
status: "experimental",
},
{
name: "BackgroundSync",
status: "stable",
},
{
name: "BackgroundVideoTrackOptimization",
status: "stable",
},
{
name: "BackspaceDefaultHandler",
status: "test",
},
{
name: "BlockCredentialedSubresources",
status: "stable",
},
{
name: "BlockLegacySubresources",
status: "stable",
},
{
name: "BroadcastChannel",
status: "stable",
},
{
name: "Budget",
status: "stable",
},
{
name: "BudgetQuery",
origin_trial_feature_name: "BudgetQuery",
status: "experimental",
},
{
name: "CanMakePayment",
status: "stable",
},
{
name: "Canvas2dFixedRenderingMode",
status: "test",
},
{
name: "Canvas2dImageChromium",
status: "experimental",
},
{
name: "ClickRetargetting",
status: "experimental",
},
{
name: "ClientHints",
status: "stable",
},
{
name: "CoalescedEvents",
status: "stable",
},
{
name: "ColorCanvasExtensions",
},
{
name: "ColorCorrectRendering",
status: "experimental",
},
{
name: "CompositedSelectionUpdate",
},
{
name: "CompositeOpaqueFixedPosition",
settable_from_internals: true,
status: "test",
},
{
name: "CompositeOpaqueScrollers",
settable_from_internals: true,
status: "stable",
},
{
name: "CompositorWorker",
status: "experimental",
},
{
name: "ComputedAccessibilityInfo",
status: "experimental",
},
{
name: "ConicGradient",
status: "experimental",
},
{
name: "ContextMenu",
status: "experimental",
},
{
name: "CorsRFC1918",
status: "test",
},
{
name: "CSS3Text",
status: "experimental",
},
{
name: "CSS3TextDecorations",
status: "stable",
},
{
name: "CSSAdditiveAnimations",
depends_on: ["StackedCSSPropertyAnimations"],
status: "experimental",
},
{
name: "CSSApplyAtRules",
status: "experimental",
},
{
name: "CSSBackdropFilter",
status: "experimental",
},
{
name: "CSSContainment",
status: "stable",
},
{
name: "CSSDisplayContents",
status: "experimental",
},
{
name: "CSSFontDisplay",
status: "stable",
},
{
name: "CSSFontSizeAdjust",
status: "experimental",
},
{
name: "CSSGridLayout",
settable_from_internals: true,
status: "stable",
},
{
name: "CSSHexAlphaColor",
status: "experimental",
},
{
name: "CSSHyphens",
status: "stable",
},
{
name: "CSSInBodyDoesNotBlockPaint",
status: "experimental",
},
{
name: "CSSIndependentTransformProperties",
status: "experimental",
},
{
name: "CSSLineBreak",
status: "test",
},
{
name: "CSSMaskSourceType",
status: "experimental",
},
{
name: "CSSOffsetPathRay",
status: "experimental",
},
{
name: "CSSOffsetPathRayContain",
status: "experimental",
},
{
name: "CSSOffsetPositionAnchor",
status: "experimental",
},
{
name: "CSSOMSmoothScroll",
status: "experimental",
},
{
name: "CSSPaintAPI",
depends_on: ["Worklet"],
status: "experimental",
},
{
name: "CSSPaintAPIArguments",
depends_on: ["CSSPaintAPI"],
status: "experimental",
},
{
name: "CSSScrollSnapPoints",
status: "test",
},
{
name: "CSSSelectorsFocusWithin",
status: "stable",
},
{
name: "CSSSnapSize",
status: "experimental",
},
{
name: "CSSStickyPosition",
status: "stable",
},
{
name: "CSSTransformBox",
status: "experimental",
},
{
name: "CSSTypedOM",
status: "experimental",
},
{
name: "CSSVariableFonts",
status: "experimental",
},
{
name: "CSSVariables2",
status: "experimental",
},
{
name: "CSSViewport",
status: "experimental",
},
{
name: "CustomElementsBuiltin",
status: "test",
},
{
name: "CustomElementsV1",
status: "stable",
},
{
name: "CustomSchemeHandler",
depends_on: ["NavigatorContentUtils"],
status: "experimental",
},
{
name: "Database",
status: "stable",
},
{
name: "DecodeToYUV",
status: "experimental",
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
},
{
name: "DeviceRAMHeader",
status: "test",
},
{
name: "DisplayList2dCanvas",
status: "stable",
},
{
name: "DisplayNoneIFrameCreatesNoLayoutObject",
status: "experimental",
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
name: "DocumentWrite",
},
{
name: "DocumentWriteEvaluator",
},
{
name: "DOMConvenienceAPI",
status: "stable",
},
{
name: "DurableStorage",
status: "stable",
},
{
name: "EmbedderCSPEnforcement",
status: "experimental",
},
{
name: "ExecCommandInJavaScript",
status: "test",
},
{
name: "ExpensiveBackgroundTimerThrottling",
status: "experimental",
},
{
name: "ExperimentalCanvasFeatures",
status: "test",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
},
{
name: "ExperimentalV8Extras",
status: "experimental",
},
{
name: "FastMobileScrolling",
},
{
name: "FeaturePolicy",
status: "stable",
},
{
name: "FeaturePolicyExperimentalFeatures",
},
{
name:"FetchRequestCache",
status: "experimental",
},
{
name: "FileAPIBlobClose",
status: "experimental",
},
{
name: "FileSystem",
status: "stable",
},
{
name: "FontCacheScaling",
status: "test",
},
// See crbug.com/585250.
{
name: "ForceDisable2dCanvasCopyOnWrite",
},
{
name: "ForceDisplayList2dCanvas",
},
// For simulating Android's overlay fullscreen video in layout tests on Linux.
{
name: "ForceOverlayFullscreenVideo",
},
{
name: "ForceTallerSelectPopup",
},
{
name: "ForeignFetch",
origin_trial_feature_name: "ForeignFetch",
status: "experimental",
},
{
name: "FractionalScrollOffsets",
},
{
name: "FramebustingNeedsSameOriginOrUserGesture",
settable_from_internals: true,
status: "experimental",
},
{
name: "FrameTimingSupport",
status: "experimental",
},
{
name: "FullscreenUnprefixed",
settable_from_internals: true,
status: "test",
},
{
name: "GamepadExtensions",
origin_trial_feature_name: "WebVR1.1",
status: "test",
},
{
name: "GeometryInterfaces",
implied_by: ["CompositorWorker"],
status: "experimental",
},
{
name: "GetUserMedia",
status: "stable",
},
{
name: "GlobalCacheStorage",
status: "stable",
},
{
name: "HeapCompaction",
status: "stable",
},
{
name: "HideNonceContentAttribute",
status: "experimental",
},
{
name: "IDBObserver",
status: "experimental",
},
{
name: "IdleTimeColdModeSpellChecking",
depends_on: ["IdleTimeSpellChecking"],
status: "test",
},
{
name: "IdleTimeSpellChecking",
status: "test",
},
{
name: "ImageCapture",
status: "stable",
},
{
name: "ImageOrientation",
status: "test",
},
{
name: "InertAttribute",
status: "experimental",
},
{
name: "InertTopControls",
status: "stable",
},
{
name: "InputEvent",
status: "stable",
},
{
name: "InputModeAttribute",
status: "experimental",
},
{
name: "InputMultipleFieldsUI",
status: "stable",
},
{
name: "InstalledApp",
origin_trial_feature_name: "InstalledApp",
status: "experimental",
},
{
name: "IntersectionObserver",
status: "stable",
},
{
name: "JSImageDecode",
status: "test",
},
{
name: "KeyboardLock",
status: "test",
},
{
name: "LangAttributeAwareFormControlUI",
},
{
name: "LayoutNG",
},
{
name: "LazyParseCSS",
status: "experimental",
},
{
name: "LinkServiceWorker",
origin_trial_feature_name: "ForeignFetch",
status: "experimental",
},
{
name: "LoadingWithMojo",
},
{
name: "LocationHardReload",
},
{
name: "LongTaskObserver",
status: "stable",
},
{
name: "MediaCapabilities",
status: "test",
},
{
name: "MediaCapture",
},
{
name: "MediaCaptureDepth",
status: "experimental",
},
{
name: "MediaCaptureFromCanvas",
status: "stable",
},
{
name: "MediaCaptureFromVideo",
status: "experimental",
},
{
name: "MediaControlsOverlayPlayButton",
settable_from_internals: true,
},
{
name: "MediaDocumentDownloadButton",
},
{
name: "MediaQueryShape",
status: "experimental",
},
// MediaSession is enabled by default on Android only.
// TODO(rbyers): Add parameter to specify platform.
{
name: "MediaSession",
status: "test",
},
{
name: "MediaSourceExperimental",
status: "experimental",
},
{
name: "MediaSourceNewAbortAndDuration",
status: "experimental",
},
{
name: "MediaStreamSpeech",
status: "experimental",
},
{
name: "MediaStreamTrackContentHint",
status: "experimental",
},
{
name: "MediaTrackApplyConstraints",
implied_by: ["ImageCapture"],
status: "experimental",
},
{
name: "MediaTrackCapabilities",
implied_by: ["ImageCapture"],
status: "experimental",
},
{
name: "MemoryInfoInWorkers",
status: "experimental",
},
// This is enabled by default on Windows only. The only part that's
// "experimental" is the support on other platforms.
{
name: "MiddleClickAutoscroll",
status: "test",
},
{
name: "MobileLayoutTheme",
},
{
name: "ModuleScripts",
status: "experimental",
},
{
name: "MojoBlobs",
},
{
name: "MojoJS",
status: "test",
},
{
name: "MultipleColorStopPositions",
status: "experimental",
},
{
name: "NavigatorContentUtils",
},
{
name: "NetInfoDownlink",
status: "experimental",
},
{
name: "NetInfoDownlinkMax",
status: "stable",
},
{
name: "NetInfoEffectiveType",
status: "experimental",
},
{
name: "NetInfoRtt",
status: "experimental",
},
{
name: "NetworkInformation",
status: "stable",
},
// Not a web exposed feature, enabled from the command line.
{
name: "NewRemotePlaybackPipeline",
},
{
name: "NotificationBadge",
status: "stable",
},
{
name: "NotificationConstructor",
status: "stable",
},
// NotificationContentImage is not available in all platforms
{
name: "NotificationContentImage",
status: "test",
},
{
name: "NotificationInlineReplies",
status: "experimental",
},
{
name: "Notifications",
status: "stable",
},
{
name: "OffMainThreadFetch",
},
{
name: "OnDeviceChange",
status: "stable",
},
{
name: "OrientationEvent",
},
{
name: "OriginTrials",
status: "stable",
},
// Define a sample API for testing integration with the Origin Trials Framework.
// The sample API is used in both unit and layout 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",
origin_trial_feature_name: "Frobulate",
},
{
name: "OverlayScrollbars",
settable_from_internals: true,
},
{
name: "PagePopup",
status: "stable",
},
{
name: "PaintUnderInvalidationChecking",
settable_from_internals: true,
},
{
name: "PassiveDocumentEventListeners",
status: "stable",
},
{
name: "PassPaintVisualRectToCompositor",
},
{
name: "PaymentApp",
status: "experimental",
},
{
name: "PaymentDetailsError",
status: "stable",
},
{
name: "PaymentDetailsModifierData",
status: "experimental",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
status: "experimental",
},
{
name: "PaymentRequestBasicCard",
status: "stable",
},
{
name: "PaymentRequestPayerName",
status: "stable",
},
{
name: "PerformanceNavigationTiming2",
status: "stable",
},
{
name: "PerformanceObserver",
status: "stable",
},
{
name: "PerformancePaintTiming",
status: "stable",
},
{
name: "PermissionDelegation",
status: "test",
},
{
name: "Permissions",
status: "stable",
},
{
name: "PermissionsRequestRevoke",
status: "experimental",
},
{
name: "PointerEvent",
status: "stable",
},
{
name: "PreciseMemoryInfo",
},
{
name: "PreferredImageRasterBounds",
settable_from_internals: true,
},
// This feature is deprecated and we are evangelizing affected sites.
// See https://crbug.com/346236 for current status.
{
name: "PrefixedVideoFullscreen",
status: "stable",
},
{
name: "Presentation",
status: "stable",
},
{
name: "PresentationReceiver",
status: "stable",
},
{
name: "PrintBrowser",
},
{
name: "PushMessaging",
status: "stable",
},
{
name: "ReducedReferrerGranularity",
},
{
name: "RemotePlayback",
status: "stable",
},
{
name: "RenderingPipelineThrottling",
status: "stable",
},
{
name: "RenderingPipelineThrottlingLoadingIframes",
status: "stable",
},
{
name: "RenderUnicodeControlCharacters",
status: "stable",
},
{
name: "ResizeObserver",
status: "experimental",
},
{
name: "RestrictCanRequestURLCharacterSet",
status: "stable",
},
// Handles frame scrolling via the root PaintLayer instead of the FrameView.
// crbug.com/417782 tracks enabling this by default.
{
name: "RootLayerScrolling",
},
{
name: "RTCRtpSender",
status: "experimental",
},
{
name: "ScriptedSpeech",
status: "stable",
},
// Scrolls to compensate for layout movements (bit.ly/scroll-anchoring).
{
name: "ScrollAnchoring",
settable_from_internals: true,
status: "experimental",
},
{
name: "ScrollCustomization",
},
// Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
// as per the spec, matching other Web engines.
{
name: "ScrollTopLeftInterop",
status: "experimental",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
status: "stable",
},
{
name: "SendMouseEventsDisabledFormControls",
status: "experimental",
},
{
name: "Sensor",
status: "experimental",
},
{
name: "ServerTiming",
status: "experimental",
},
{
name: "ServiceWorkerNavigationPreload",
status: "stable",
},
{
name: "SetRootScroller",
status: "experimental",
},
{
name: "ShadowPiercingDescendantCombinator",
status: "experimental",
},
{
name: "ShapeDetection",
status: "experimental",
},
{
name: "SharedArrayBuffer",
status: "stable",
},
{
name: "SharedWorker",
status: "stable",
},
{
name: "SlimmingPaintInvalidation",
implied_by: ["SlimmingPaintV2"],
status: "stable",
},
{
name: "SlimmingPaintStrictCullRectClipping",
},
{
name: "SlimmingPaintV2",
},
{
name: "smil",
status: "stable",
},
{
name: "SmoothScrollJSIntervention",
status: "experimental",
},
// 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",
},
{
name: "StackedCSSPropertyAnimations",
status: "experimental",
},
{
name: "StorageEstimate",
status: "stable",
},
{
name: "StyleSharing",
status: "experimental",
},
{
name: "Suborigins",
status: "experimental",
},
{
name: "TimerThrottlingForBackgroundTabs",
status: "stable",
},
{
name: "TimerThrottlingForHiddenFrames",
status: "stable",
},
{
name: "TopNavByUserActivationInSandbox",
status: "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",
status: "stable",
},
// This is set conditionally in SetRuntimeFeaturesDefaultsAndUpdateFromArgs
// and will eventually go away when the touchpad/wheel scroll latching is
// enabled on all platforms (http://crbug.com/526463).
{
name: "TouchpadAndWheelScrollLatching",
},
{
name: "TrustedEventsDefaultAction",
status: "stable",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
},
{
name: "V8IdleTasks",
},
{
name: "VibrateRequiresUserGesture",
status: "stable",
},
{
name: "VideoFullscreenDetection",
},
{
name: "VideoFullscreenOrientationLock",
},
{
name: "VideoRotateToFullscreen",
},
{
name: "VisualViewportAPI",
status: "experimental",
},
{
name: "WakeLock",
status: "experimental",
},
{
name: "WebAnimationsAPI",
status: "experimental",
},
{
name: "WebAnimationsSVG",
status: "experimental",
},
{
name: "WebAssemblyStreaming",
status: "experimental",
},
{
name: "WebAuth",
status: "experimental",
},
// WebBluetooth is enabled by default on Android, ChromeOS and Mac.
{
name: "WebBluetooth",
status: "experimental",
},
{
name: "WebFontsCacheAwareTimeoutAdaptation",
status: "experimental",
},
{
name: "WebFontsInterventionTrigger",
},
{
name: "WebFontsInterventionV2With2G",
},
{
name: "WebFontsInterventionV2With3G",
},
{
name: "WebFontsInterventionV2WithSlow2G",
},
{
name: "WebGLDraftExtensions",
status: "experimental",
},
{
name: "WebGLImageChromium",
},
{
name: "WebNFC",
status: "experimental",
},
{
name: "WebShare",
origin_trial_feature_name: "WebShare",
origin_trial_os: ["android"],
status: "experimental",
},
{
name: "WebUSB",
status: "stable",
},
{
name: "WebVR",
origin_trial_feature_name: "WebVR1.1",
status: "test",
},
{
name: "WebVRExperimentalRendering",
// Don't mark this as depends_on: ["WebVR"], we want to be able to turn
// it on for just origin trial sites where the dependency is unset.
// We also need it for tests since the default mode requires re-entrant
// mojo event handling, and the Javascript mocks don't support that.
status: "test",
},
{
name: "WebVTTRegions",
status: "experimental",
},
{
name: "Worklet",
status: "experimental",
},
{
name: "XSLT",
status: "stable",
},
],
}