blob: 933992ed0788a2b694e4d591bade474514a0d0a9 [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.
//
// "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"],
},
// "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.
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: "AsyncClipboard",
status: "experimental",
},
{
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: "BackgroundVideoTrackOptimization",
status: "stable",
},
{
name: "BlinkRuntimeCallStats",
},
{
name: "BlockCredentialedSubresources",
status: "stable",
},
{
name: "BroadcastChannel",
status: "stable",
},
{
name: "Budget",
status: "stable",
},
{
name: "BudgetQuery",
origin_trial_feature_name: "BudgetQuery",
status: "experimental",
},
{
name: "Canvas2dFixedRenderingMode",
status: "test",
},
{
name: "Canvas2dImageChromium",
},
{
name: "ClickRetargetting",
status: "experimental",
},
{
name: "ClientHints",
status: "stable",
},
{
name: "ClientHintsPersistent",
status: "experimental",
},
{
name: "ClientPlaceholdersForServerLoFi",
},
{
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: "CompositorTouchAction",
status: "test",
},
{
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: "CSSAdditiveAnimations",
depends_on: ["StackedCSSPropertyAnimations"],
status: "experimental",
},
{
name: "CSSApplyAtRules",
status: "experimental",
},
{
name: "CSSBackdropFilter",
status: "experimental",
},
{
name: "CSSDisplayContents",
status: "experimental",
},
{
name: "CSSFontSizeAdjust",
status: "experimental",
},
{
name: "CSSHexAlphaColor",
status: "stable",
},
{
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: "stable",
},
{
name: "CSSPaintAPI",
depends_on: ["Worklet"],
status: "experimental",
},
{
name: "CSSPaintAPIArguments",
depends_on: ["CSSPaintAPI"],
status: "experimental",
},
{
name: "CSSScrollBoundaryBehavior",
status: "experimental",
},
{
name: "CSSScrollSnapPoints",
status: "test",
},
{
name: "CSSSnapSize",
status: "experimental",
},
{
name: "CSSStickyPosition",
status: "stable",
},
{
name: "CSSTransformBox",
status: "experimental",
},
{
name: "CSSTypedOM",
status: "experimental",
},
{
name: "CSSVariableFonts",
status: "stable",
},
{
name: "CSSVariables2",
status: "experimental",
},
{
name: "CSSViewport",
status: "experimental",
},
{
name: "CustomElementsBuiltin",
status: "test",
},
{
name: "CustomSchemeHandler",
depends_on: ["NavigatorContentUtils"],
status: "experimental",
},
{
name: "Database",
status: "stable",
},
{
name: "DecodeToYUV",
status: "experimental",
},
// Remove this flag once we can remove /deep/ at M63.
{
name: "DeepCombinatorInCSSDynamicProfile",
status: "test",
},
{
name: "DeprecationReporting",
status: "experimental",
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
},
{
name: "DeviceMemoryHeader",
status: "stable",
},
{
name: "DisplayList2dCanvas",
status: "stable",
},
{
name: "DisplayNoneIFrameCreatesNoLayoutObject",
status: "experimental",
},
{
name: "DocumentCookie",
},
{
name: "DocumentDomain",
},
{
name: "DocumentWrite",
},
{
name: "DOMConvenienceAPI",
status: "stable",
},
{
name: "EmbedderCSPEnforcement",
status: "stable",
},
{
name: "EncryptedMediaHdcpPolicyCheck",
status: "test",
},
{
name: "ExecCommandInJavaScript",
status: "test",
},
{
name: "ExpensiveBackgroundTimerThrottling",
status: "stable",
},
{
name: "ExperimentalCanvasFeatures",
status: "test",
},
{
name: "ExperimentalContentSecurityPolicyFeatures",
status: "experimental",
},
{
name: "ExperimentalV8Extras",
status: "experimental",
},
{
name: "FastMobileScrolling",
},
{
name: "FeaturePolicy",
status: "stable",
},
{
name: "FeaturePolicyExperimentalFeatures",
},
{
name: "FeaturePolicyForEncryptedMedia",
status: "experimental"
},
{
name: "FetchRequestCache",
status: "experimental",
},
{
name: "FileSystem",
status: "stable",
},
{
name: "FontCacheScaling",
status: "test",
},
{
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: "FramesTimingFunction",
status: "experimental",
},
{
name: "FullscreenUnprefixed",
settable_from_internals: true,
status: "experimental",
},
{
name: "GamepadExtensions",
origin_trial_feature_name: "WebVR1.1M62",
status: "test",
},
{
name: "GeometryInterfaces",
implied_by: ["CompositorWorker"],
status: "stable",
},
{
name: "GetMatchedCSSRules",
},
{
name: "GetUserMedia",
status: "stable",
},
{
name: "HeapCompaction",
status: "stable",
},
{
name: "HideNonceContentAttribute",
status: "stable",
},
// https://crbug.com/523952 for testing disabling the feature.
{
name: "HTMLImportsStyleApplication",
status: "stable",
},
{
name: "IDBObserver",
status: "experimental",
},
{
name: "IdleTimeColdModeSpellChecking",
status: "test",
},
{
name: "ImageCapture",
status: "stable",
},
{
name: "ImageOrientation",
status: "test",
},
{
name: "InertAttribute",
status: "experimental",
},
{
name: "InputEvent",
status: "stable",
},
{
name: "InputModeAttribute",
status: "experimental",
},
{
name: "InputMultipleFieldsUI",
status: "stable",
},
{
name: "InstalledApp",
origin_trial_feature_name: "InstalledApp",
status: "experimental",
},
{
name: "JSImageDecode",
status: "test",
},
{
name: "KeyboardLock",
status: "test",
},
{
name: "LangAttributeAwareFormControlUI",
},
{
name: "LayoutNG",
},
{
name: "LayoutNGFragmentCaching",
},
{
name: "LayoutNGPaintFragments",
},
{
name: "LazyInitializeMediaControls",
// This is enabled by features::kLazyInitializeMediaControls.
},
{
name: "LazyParseCSS",
status: "experimental",
},
{
name: "LinkServiceWorker",
origin_trial_feature_name: "ForeignFetch",
status: "experimental",
},
{
name: "LoadingWithMojo",
},
{
name: "LongTaskObserver",
status: "stable",
},
{
name: "LongTaskV2",
},
{
name: "MediaCapabilities",
status: "test",
},
{
name: "MediaCapture",
},
{
name: "MediaCaptureDepth",
status: "experimental",
},
{
name: "MediaCaptureDepthVideoKind",
status: "experimental",
},
{
name: "MediaCaptureFromCanvas",
status: "stable",
},
{
name: "MediaCaptureFromVideo",
status: "stable",
},
// Set to reflect the MediaCastOverlayButton feature.
{
name: "MediaCastOverlayButton",
},
{
name: "MediaControlsOverlayPlayButton",
settable_from_internals: true,
},
{
name: "MediaDocumentDownloadButton",
},
// Set to reflect the kMediaEngagementBypassAutoplayPolicies feature.
{
name: "MediaEngagementBypassAutoplayPolicies",
},
{
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: "stable",
},
{
name: "ModuleScriptsDynamicImport",
},
{
name: "MojoBlobs",
},
{
name: "MojoJS",
status: "test",
},
// MojoJSTest is used exclusively in testing environments, whereas MojoJS
// may also be used elsewhere.
{
name: "MojoJSTest",
status: "test",
},
{
name: "MultipleColorStopPositions",
status: "experimental",
},
{
name: "NavigatorContentUtils",
},
{
name: "NavigatorDeviceMemory",
status: "experimental",
},
{
name: "NetInfoDownlink",
status: "stable",
},
{
name: "NetInfoDownlinkMax",
status: "stable",
},
{
name: "NetInfoEffectiveType",
status: "stable",
},
{
name: "NetInfoRtt",
status: "stable",
},
{
name: "NetworkService",
},
// 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: "NullableDocumentDomain",
status: "experimental",
},
{
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: "OutOfBlinkCORS",
},
{
name: "OverflowIconsForMediaControls",
},
{
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: "PaymentDetailsModifierData",
status: "stable",
},
// PaymentRequest is enabled by default on Android
{
name: "PaymentRequest",
status: "experimental",
},
{
name: "PaymentRequestBasicCard",
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: "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: "PreloadDefaultIsMetadata",
status: "experimental",
},
{
name: "Presentation",
status: "stable",
},
{
name: "PresentationReceiver",
status: "stable",
},
{
name: "PrintBrowser",
},
{
name: "PushMessaging",
status: "stable",
},
{
name: "ReducedReferrerGranularity",
},
{
name: "RemotePlayback",
status: "stable",
},
// Whether or not the Remote Playback API backend is implemented.
// Not web-exposed, set per platform. For LayoutTests, disabled by
// default.
{
name: "RemotePlaybackBackend",
settable_from_internals: true,
},
{
name: "RenderingPipelineThrottling",
status: "stable",
},
{
name: "RenderingPipelineThrottlingLoadingIframes",
status: "stable",
},
{
name: "RenderUnicodeControlCharacters",
status: "stable",
},
{
name: "ReportingObserver",
status: "experimental",
},
{
name: "ResizeObserver",
status: "experimental",
},
{
name: "ResourceLoadScheduler",
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: "stable",
},
{
name: "SendBeaconThrowForBlobWithNonSimpleType",
status: "stable",
},
{
name: "SendMouseEventsDisabledFormControls",
status: "experimental",
},
{
name: "Sensor",
origin_trial_feature_name: "GenericSensor",
status: "experimental",
},
{
name: "SensorExtraClasses",
depends_on: ["Sensor"],
status: "experimental",
},
{
name: "ServerTiming",
status: "experimental",
},
{
name: "ServiceWorkerScriptStreaming",
},
{
name: "SetRootScroller",
status: "experimental",
},
// Introduced this flag as stable so web developers can test their sites
// without native Shadow DOM v0 support
{
name: "ShadowDOMV0",
status: "stable",
},
{
name: "ShadowPiercingDescendantCombinator",
status: "experimental",
},
// Remove this flag once we can remove ::shadow at M63.
{
name: "ShadowPseudoElementInCSSDynamicProfile",
status: "test",
},
{
name: "ShapeDetection",
status: "experimental",
},
{
name: "SharedArrayBuffer",
status: "stable",
},
{
name: "SharedWorker",
status: "stable",
},
{
name: "SignatureBasedIntegrity",
status: "experimental",
},
{
name: "SkipCompositingSmallScrollers",
},
{
name: "SlimmingPaintStrictCullRectClipping",
},
{
name: "SlimmingPaintV175",
implied_by: ["SlimmingPaintV2"],
},
{
name: "SlimmingPaintV2",
},
{
name: "SMIL",
status: "stable",
},
{
name: "SmoothScrollJSIntervention",
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",
},
{
name: "StackedCSSPropertyAnimations",
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",
origin_trial_feature_name: "ForceTouchEventFeatureDetectionForInspector",
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: "TurnOff2DAndOpacityCompositorAnimations",
},
{
name: "UnclosedFormControlIsInvalid",
status: "experimental",
},
{
name: "UpdateHoverPostLayout",
status: "stable",
},
{
name: "V8ContextSnapshot",
status: "test",
},
{
name: "V8IdleTasks",
},
{
name: "ValidationBubbleInRenderer",
status: "stable",
},
{
name: "VibrateRequiresUserGesture",
status: "stable",
},
{
name: "VideoFullscreenDetection",
},
{
name: "VideoFullscreenOrientationLock",
},
{
name: "VideoRotateToFullscreen",
},
{
name: "VisibilityCollapseColumn",
status: "experimental",
},
{
name: "VisibilityCollapseRow",
status: "stable",
},
{
name: "VisualViewportAPI",
status: "stable",
},
{
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",
},
// WebShare is enabled by default on Android.
{
name: "WebShare",
status: "experimental",
},
{
name: "WebUSB",
status: "stable",
},
{
name: "WebVR",
origin_trial_feature_name: "WebVR1.1M62",
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: "WorkStealingInScriptRunner",
status: "experimental",
},
{
name: "XSLT",
status: "stable",
},
],
}