1{ 2 // http://dev.chromium.org/blink/runtime-enabled-features 3 // 4 // This list is used to generate runtime_enabled_features.h/cc which contains 5 // a class that stores static enablers for all experimental features. 6 7 parameters: { 8 // Each feature can be assigned a "status". The "status" can be either 9 // one of the values in the |valid_values| list or a dictionary of 10 // the platforms listed in |valid_keys| to |valid_values|. 11 // Use "default" as the key if you want to specify the status of 12 // the platforms other than the ones declared in the dictionary. 13 // ** Omitting "default" means the feature is not enabled on 14 // the platforms not listed in the status dictionary 15 // 16 // Definition of each status: 17 // * status=stable: Enable this in all Blink configurations. We are 18 // committed to these APIs indefinitely. 19 // * status=experimental: In-progress features, Web Developers might play 20 // with, but are not on by default in stable. 21 // * status=test: Enabled in ContentShell for testing, otherwise off. 22 // Features without a status are not enabled anywhere by default. 23 // 24 // Example of the dictionary value use: 25 // { 26 // name: "ExampleFeature", 27 // status: {"Android": "stable", "ChromeOS": "experimental"}, 28 // } 29 // "ExampleFeature" will be stable on Android, experimental on ChromeOS 30 // and not enabled on any other platform 31 // 32 // "stable" features listed here should be rare, as anything which we've 33 // shipped stable can have its runtime flag removed soon after. 34 status: { 35 valid_values: ["stable", "experimental", "test"], 36 valid_keys: ["Android", "Win", "ChromeOS", "Mac"] 37 }, 38 39 // "implied_by" or "depends_on" specifies relationship to other features: 40 // * implied_by: ["feature1","feature2",...] 41 // The feature is automatically enabled if any implied_by features is 42 // enabled; 43 // * depends_on: ["feature1","feature2",...] 44 // The feature is enabled only if all depends_on features are enabled. 45 // Only one of "implied_by" and "depends_on" can be specified. 46 implied_by: { 47 default: [], 48 valid_type: "list", 49 }, 50 51 // *DO NOT* specify features that depend on origin trial features. 52 // It is NOT supported. As a workaround, you can either specify the same 53 // |origin_trial_feature_name| for the feature or add the OT feature to 54 // the |implied_by| list. 55 // TODO(https://crbug.com/954679): Add support for origin trial features in 'depends_on' list 56 depends_on: { 57 default: [], 58 valid_type: "list", 59 }, 60 61 // origin_trial_feature_name: "FEATURE_NAME" is used to integrate the 62 // feature with the Origin Trials framework. The framework allows the 63 // feature to be enabled at runtime on a per-page basis through a signed 64 // token for the corresponding feature name. Declaring the 65 // origin_trial_feature_name will modify the generation of the static 66 // methods in runtime_enabled_features.h/cpp. The static method then allows 67 // the feature implementation to check if the trial is enabled for the 68 // current context. 69 origin_trial_feature_name: { 70 }, 71 // origin_trial_os specifies the platforms where the trial is available. 72 // The default is empty, meaning all platforms. 73 origin_trial_os: { 74 default: [], 75 valid_type: "list", 76 }, 77 // origin_trial_type specifies the unique type of the trial, when not the 78 // usual trial for a new experimental feature. 79 origin_trial_type: { 80 default: "", 81 valid_type: "str", 82 valid_values: ["deprecation", "intervention", ""], 83 }, 84 // origin_trial_allows_insecure specifies whether the trial can be enabled 85 // in an insecure context, with default being false. This can only be set 86 // to true for a "deprecation" type trial. 87 origin_trial_allows_insecure: { 88 valid_type: "bool", 89 }, 90 91 // origin_trial_allows_third_party specifies whether the trial can be enabled 92 // from third party origins, with default being false. 93 origin_trial_allows_third_party: { 94 valid_type: "bool", 95 }, 96 97 // settable_from_internals specifies whether a feature can be set from 98 // internals.runtimeFlags, with the default being false. 99 settable_from_internals: { 100 valid_type: "bool", 101 }, 102 103 // Feature policy IDL extended attribute (see crrev.com/2247923004). 104 feature_policy: { 105 }, 106 }, 107 108 data: [ 109 { 110 name: "Accelerated2dCanvas", 111 settable_from_internals: true, 112 status: "stable", 113 }, 114 { 115 name: "AcceleratedSmallCanvases", 116 status: "stable", 117 }, 118 { 119 name: "AccessibilityExposeDisplayNone", 120 status: "test", 121 }, 122 { 123 name: "AccessibilityExposeHTMLElement", 124 }, 125 { 126 name: "AccessibilityExposeIgnoredNodes", 127 }, 128 { 129 name: "AccessibilityObjectModel", 130 status: "experimental", 131 }, 132 { 133 name: "AccessibilityUseAXPositionForDocumentMarkers", 134 status: "test", 135 }, 136 { 137 name: "AddEventListenerAbortSignal", 138 status: "experimental", 139 }, 140 { 141 name: "AddressSpace", 142 status: "experimental", 143 implied_by: ["CorsRFC1918"], 144 }, 145 { 146 name: "AdTagging", 147 status: "test", 148 }, 149 { 150 // Deprecated, see UserActivationPostMessageTransfer. 151 name: "AllowActivationDelegationAttr", 152 }, 153 { 154 name: "AllowContentInitiatedDataUrlNavigations", 155 }, 156 { 157 name: "AllowSyncXHRInPageDismissal", 158 origin_trial_feature_name: "AllowSyncXHRInPageDismissal", 159 }, 160 { 161 name: "AndroidDownloadableFontsMatching", 162 }, 163 { 164 name: "AnimationWorklet", 165 status: "experimental", 166 }, 167 { 168 name: "AOMAriaProperties", 169 status: "stable", 170 }, 171 { 172 name: "AOMAriaRelationshipProperties", 173 status: "experimental", 174 }, 175 { 176 // Force disabled if blink::features::kAppCache is disabled, and this 177 // will override any origin trial setting. 178 // Disabled if blink::features::kAppCacheRequireOriginTrial is enabled, 179 // but can be turned back on by the origin trial. 180 // Otherwise, on by default. 181 name: "AppCache", 182 status: "stable", 183 origin_trial_feature_name: "AppCache", 184 }, 185 { 186 name: "AudioOutputDevices", 187 // Android does not yet support switching of audio output devices 188 status: {"Android": "", "default": "stable"}, 189 }, 190 { 191 name: "AudioVideoTracks", 192 status: "experimental", 193 }, 194 { 195 name: "AudioWorkletRealtimeThread", 196 status: "experimental", 197 }, 198 { 199 name: "AutoLazyLoadOnReloads", 200 depends_on: ["LazyFrameLoading"], 201 }, 202 { 203 name: "AutomaticLazyFrameLoading", 204 depends_on: ["LazyFrameLoading"], 205 status: "stable", 206 }, 207 { 208 name: "AutomaticLazyImageLoading", 209 depends_on: ["LazyImageLoading"], 210 status: "stable", 211 }, 212 { 213 name: "AutomationControlled", 214 settable_from_internals: true, 215 }, 216 { 217 name: "AutoPictureInPicture", 218 depends_on: ["PictureInPictureAPI"], 219 origin_trial_feature_name: "AutoPictureInPicture", 220 status: "experimental", 221 }, 222 { 223 // Flag set by the media::kAutoplayIgnoreWebAudio feature flag. 224 name: "AutoplayIgnoresWebAudio", 225 settable_from_internals: true, 226 }, 227 { 228 name: "AzimuthAltitude", 229 status: "stable", 230 }, 231 { 232 name: "BackForwardCache", 233 }, 234 { 235 name: "BackForwardCacheExperimentHTTPHeader", 236 origin_trial_feature_name: "BackForwardCacheExperimentHTTPHeader", 237 status: "experimental", 238 }, 239 { 240 name: "BackgroundFetch", 241 status: "stable", 242 }, 243 { 244 name: "BackgroundVideoTrackOptimization", 245 status: "stable", 246 }, 247 { 248 name: "Badging", 249 status: "stable", 250 }, 251 { 252 name: "BarcodeDetector", 253 status: { 254 // Built-in barcode detection APIs are only available from some 255 // platforms. See //services/shape_detection. 256 "Android": "stable", 257 "ChromeOS": "stable", 258 "Mac": "stable", 259 "default": "test", 260 }, 261 }, 262 { 263 // https://github.com/chrishtr/battery-savings/blob/master/explainer.md 264 name: "BatterySavingsMeta", 265 origin_trial_feature_name: "BatterySavingsMeta", 266 status: "experimental", 267 }, 268 { 269 // https://github.com/WICG/display-locking/blob/master/explainer-beforematch.md 270 name: "BeforeMatchEvent", 271 origin_trial_feature_name: "BeforeMatchEvent", 272 status: "experimental", 273 }, 274 { 275 name: "BidiCaretAffinity", 276 }, 277 { 278 name: "BlinkRuntimeCallStats", 279 }, 280 { 281 name: "BlockCredentialedSubresources", 282 status: "stable", 283 }, 284 { 285 name: "BlockHTMLParserOnStyleSheets", 286 }, 287 { 288 name: "BlockingDownloadsInSandbox", 289 status: "stable", 290 }, 291 { 292 name: "BlockingFocusWithoutUserActivation", 293 status: "experimental", 294 }, 295 { 296 name: "BrowserVerifiedUserActivationKeyboard", 297 }, 298 { 299 name: "BrowserVerifiedUserActivationMouse", 300 }, 301 { 302 name: "CacheInlineScriptCode" 303 }, 304 { 305 name: "CacheStorageCodeCacheHint", 306 origin_trial_feature_name: "CacheStorageCodeCacheHint", 307 status: "experimental", 308 }, 309 { 310 name: "Canvas2dContextLostRestored", 311 status: "experimental", 312 }, 313 { 314 name: "Canvas2dImageChromium", 315 }, 316 { 317 name: "Canvas2dScrollPathIntoView", 318 status: "experimental", 319 }, 320 { 321 name: "CanvasColorManagement", 322 status: "experimental", 323 }, 324 { 325 name: "CanvasHitRegion", 326 status: "experimental", 327 }, 328 { 329 name: "CanvasImageSmoothing", 330 status: "experimental", 331 }, 332 { 333 name: "CaptureTimeInCsrc", 334 status: "stable", 335 }, 336 { 337 name: "ClickPointerEvent", 338 status: "experimental", 339 }, 340 { 341 name: "ClickRetargetting", 342 status: "experimental", 343 }, 344 { 345 name: "ClipboardSvg", 346 status: "experimental", 347 }, 348 { 349 name: "CompositeAfterPaint", 350 }, 351 { 352 name: "CompositeBGColorAnimation", 353 }, 354 { 355 name: "CompositedSelectionUpdate", 356 status: {"Android": "stable"}, 357 }, 358 { 359 name: "CompositeRelativeKeyframes", 360 status: "experimental", 361 }, 362 { 363 name: "CompositeSVG", 364 status: "test" 365 }, 366 { 367 name: "CompositingOptimizations", 368 status: "experimental" 369 }, 370 { 371 name: "ComputedAccessibilityInfo", 372 status: "experimental", 373 }, 374 { 375 name: "ConsolidatedMovementXY", 376 }, 377 { 378 name: "ContactsManager", 379 status: {"Android": "stable", "default": "test"}, 380 }, 381 { 382 name: "ContactsManagerExtraProperties", 383 status: {"Android": "stable", "default": "test"}, 384 }, 385 { 386 name: "ContentIndex", 387 status: {"Android": "stable", "default": "experimental"}, 388 }, 389 { 390 name: "ContextMenu", 391 status: "experimental", 392 }, 393 { 394 name: "ConversionMeasurement", 395 origin_trial_feature_name: "ConversionMeasurement", 396 origin_trial_allows_third_party: true, 397 status: "experimental", 398 depends_on: ["ConversionMeasurementInfraSupport"], 399 }, 400 { 401 // Feature to explicitly disable/enable the Conversion 402 // Measurement API when there is not browser process side infra. 403 name: "ConversionMeasurementInfraSupport", 404 }, 405 { 406 name: "CookieDeprecationMessages", 407 status: "experimental", 408 }, 409 { 410 name: "CookieStoreDocument", 411 status: "stable", 412 }, 413 { 414 name: "CookieStoreWorker", 415 status: "stable", 416 }, 417 { 418 name: "CookiesWithoutSameSiteMustBeSecure", 419 status: "test", 420 }, 421 { 422 name: "CooperativeScheduling" 423 }, 424 { 425 name: "CorsRFC1918", 426 }, 427 { 428 name: "CrossOriginIsolation", 429 status: "stable", 430 }, 431 { 432 name: "CrossOriginOpenerPolicyReporting", 433 origin_trial_feature_name: "CrossOriginOpenerPolicyReporting", 434 origin_trial_allows_third_party: true, 435 status: "experimental", 436 }, 437 { 438 name: "CSS3Text", 439 status: "experimental", 440 }, 441 { 442 name: "CSSAspectRatioProperty", 443 status: "stable", 444 }, 445 { 446 // https://drafts.csswg.org/css-counter-styles-3 447 name: "CSSAtRuleCounterStyle", 448 }, 449 { 450 name: "CSSCalcAsInt", 451 status: "test", 452 }, 453 { 454 // When the color-scheme is supported via the CSS color-scheme property 455 // (CSSColorScheme) or the meta tag (MetaColorScheme), the only UA 456 // rendering change is for the canvas background and the :root element 457 // color property. Enabling this runtime flag will enable dark UA 458 // rendering for form controls, scrollbars, etc. 459 name: "CSSColorSchemeUARendering", 460 }, 461 { 462 // The main content-visibility feature. 463 // https://drafts.csswg.org/css-contain/#content-visibility 464 name: "CSSContentVisibility", 465 status: "stable", 466 }, 467 { 468 // The content-visibility: hidden-matchable feature. This is a planned 469 // follow-up to the main CSSContentVisibility feature, thus it is gated 470 // by a different flag. 471 // https://wicg.github.io/display-locking/ 472 name: "CSSContentVisibilityHiddenMatchable", 473 origin_trial_feature_name: "BeforeMatchEvent", 474 status: "experimental" 475 }, 476 { 477 name: "CSSFocusVisible", 478 status: "stable", 479 }, 480 { 481 name: "CSSFoldables", 482 status: "experimental", 483 }, 484 { 485 // Experimental @font-face descriptor advance-override. 486 // Not standardized yet, and subject to changes. 487 name: "CSSFontFaceAdvanceOverride", 488 status: "test", 489 depends_on: ["CSSFontMetricsOverride"], 490 }, 491 { 492 // Experimental @font-face descriptor advance-proportional-override. 493 // Not standardized yet, and subject to changes. 494 name: "CSSFontFaceAdvanceProportionalOverride", 495 status: "test", 496 depends_on: ["CSSFontMetricsOverride"], 497 }, 498 { 499 // @font-face descriptors ascent-override, descent-override and 500 // line-gap-override. 501 // https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc 502 name: "CSSFontMetricsOverride", 503 status: "stable", 504 }, 505 { 506 name: "CSSFontSizeAdjust", 507 status: "experimental", 508 }, 509 { 510 // This needs to be kept as a runtime flag as long as we need to forcibly 511 // disable it for WebView on Android versions older than P. See 512 // https://crrev.com/f311a84728272e30979432e8474089b3db3c67df 513 name: "CSSHexAlphaColor", 514 status: "stable", 515 }, 516 { 517 name: "CSSIndependentTransformProperties", 518 status: "experimental", 519 }, 520 { 521 // Change ScopedStyleResolve and StyleEngine to use the already stored 522 // StyleSheetCollection to find @keyframes rules instead of creating their 523 // own hashmaps, so that we can save memory when there are web components 524 // with @keyframes rules in their stylesheets. 525 name: "CSSKeyframesMemoryReduction", 526 status: "test", 527 }, 528 { 529 name: "CSSLayoutAPI", 530 status: "experimental", 531 }, 532 { 533 name: "CSSLogical", 534 status: "experimental", 535 }, 536 { 537 name: "CSSLogicalOverflow", 538 status: "test", 539 }, 540 { 541 name: "CSSMarkerNestedPseudoElement", 542 status: "experimental", 543 }, 544 { 545 name: "CSSMarkerPseudoElement", 546 status: "stable", 547 implied_by: ["CSSMarkerNestedPseudoElement"], 548 }, 549 // Enables dependency support for the MatchedPropertiesCache. 550 { 551 name: "CSSMatchedPropertiesCacheDependencies", 552 }, 553 { 554 name: "CSSMathDepth", 555 status: "experimental", 556 implied_by: ["MathMLCore"], 557 }, 558 { 559 name: "CSSMathShift", 560 status: "experimental", 561 implied_by: ["MathMLCore"], 562 }, 563 { 564 name: "CSSMathStyle", 565 status: "experimental", 566 implied_by: ["MathMLCore"], 567 }, 568 { 569 name: "CSSMathVariant", 570 status: "experimental", 571 implied_by: ["MathMLCore"], 572 }, 573 { 574 name: "CSSModules", 575 status: "experimental", 576 }, 577 { 578 name: "CSSOffsetPathRay", 579 status: "experimental", 580 }, 581 { 582 name: "CSSOffsetPathRayContain", 583 status: "experimental", 584 }, 585 { 586 name: "CSSOffsetPositionAnchor", 587 status: "experimental", 588 }, 589 { 590 name: "CSSPaintAPIArguments", 591 status: "experimental", 592 }, 593 { 594 name: "CSSPictureInPicture", 595 status: "experimental", 596 depends_on: ["PictureInPictureAPI"], 597 }, 598 { 599 name: "CSSPseudoIs", 600 status: "stable", 601 }, 602 { 603 name: "CSSPseudoWhere", 604 status: "stable", 605 }, 606 { 607 // Perform partial layout invalidation on web font loading. 608 // See https://crbug.com/441925 and https://bit.ly/35JjPmq for details. 609 name: "CSSReducedFontLoadingLayoutInvalidations", 610 status: "stable", 611 }, 612 // Scrollbar styling. 613 // https://drafts.csswg.org/css-scrollbars/ 614 { 615 name: "CSSScrollbars", 616 status: "test", 617 }, 618 // Support for declarative parts of scroll-animations-1, i.e. 619 // the animation-timeline property and the @scroll-timeline rule. 620 // 621 // https://drafts.csswg.org/scroll-animations-1/#animation-timeline 622 // https://drafts.csswg.org/scroll-animations-1/#scroll-timeline-at-rule 623 { 624 name: "CSSScrollTimeline", 625 status: "experimental", 626 }, 627 { 628 name: "CSSSnapSize", 629 status: "experimental", 630 }, 631 // Make system color keywords compute to themselves. 632 // https://github.com/w3c/csswg-drafts/issues/3847 633 { 634 name: "CSSSystemColorComputeToSelf", 635 status: "experimental", 636 }, 637 { 638 // Support for ::target-text pseudo element as specified in 639 // https://drafts.csswg.org/css-pseudo/#selectordef-target-text 640 name: "CSSTargetTextPseudoElement", 641 status: "test", 642 }, 643 // Support for @property rules. 644 { 645 name: "CSSVariables2AtProperty", 646 status: "stable", 647 }, 648 // Support for registered custom properties with <image> syntax. 649 { 650 name: "CSSVariables2ImageValues", 651 status: "test", 652 }, 653 // Support for registered custom properties with <transform-list> and 654 // <transform-function> syntax. 655 { 656 name: "CSSVariables2TransformValues", 657 status: "test", 658 }, 659 { 660 name: "CustomElementDefaultStyle", 661 status: "experimental", 662 }, 663 // TODO(937746): Web Components v0 is disabled by default, and will be 664 // removed after M87. 665 { 666 name: "CustomElementsV0", 667 status: "test", 668 }, 669 { 670 name: "CustomStatePseudoClass", 671 status: "experimental", 672 }, 673 { 674 name: "Database", 675 status: "stable", 676 }, 677 { 678 name: "DeclarativeShadowDOM", 679 origin_trial_feature_name: "DeclarativeShadowDOM", 680 status: "experimental", 681 }, 682 { 683 name: "DecodeJpeg420ImagesToYUV", 684 status: "test", 685 }, 686 { 687 name: "DecodeLossyWebPImagesToYUV", 688 status: "test", 689 }, 690 { 691 name: "DelayAsyncScriptExecutionUntilFinishedParsing", 692 }, 693 { 694 name: "DelayAsyncScriptExecutionUntilFirstPaintOrFinishedParsing", 695 }, 696 { 697 name: "DelegatedInkTrails", 698 status: "experimental", 699 }, 700 { 701 name: "DesktopCaptureDisableLocalEchoControl", 702 status: "experimental", 703 }, 704 { 705 name: "DigitalGoods", 706 origin_trial_feature_name: "DigitalGoods", 707 origin_trial_os: ["android"], 708 status: { 709 "Android": "experimental", 710 "ChromeOS": "experimental", 711 // crbug.com/1143079: Web tests cannot differentiate ChromeOS and Linux, 712 // so enable the API on all platforms for testing. 713 "default": "test" 714 }, 715 }, 716 { 717 name: "DirectSockets", 718 status: "test", 719 }, 720 { 721 name: "DisableHardwareNoiseSuppression", 722 origin_trial_feature_name: "DisableHardwareNoiseSuppression", 723 status: "experimental", 724 }, 725 { 726 // Disable composited layer squashing in pre-CompositeAfterPaint for 727 // testing. 728 name: "DisableLayerSquashing", 729 }, 730 { 731 name: "DisallowDocumentAccess", 732 status: "experimental", 733 }, 734 { 735 name: "DisplayCutoutAPI", 736 settable_from_internals: true, 737 }, 738 { 739 name: "DocumentCookie", 740 }, 741 { 742 name: "DocumentDomain", 743 }, 744 { 745 name: "DocumentPolicy", 746 origin_trial_feature_name: "DocumentPolicy", 747 status: "stable", 748 }, 749 { 750 name: "DocumentPolicyNegotiation", 751 origin_trial_feature_name: "DocumentPolicyNegotiation", 752 status: "experimental", 753 depends_on: ['DocumentPolicy'] 754 }, 755 { 756 name: "DocumentWrite", 757 }, 758 { 759 name: "EditContext", 760 settable_from_internals: true, 761 status: "test", 762 }, 763 { 764 // http://crbug.com/707656 content editable in LayoutNG. 765 name: "EditingNG", 766 status: "experimental", 767 }, 768 { 769 name: "EncryptedMediaEncryptionSchemeQuery", 770 status: "stable", 771 }, 772 { 773 name: "EncryptedMediaHdcpPolicyCheck", 774 status: "stable", 775 }, 776 { 777 name: "EncryptedMediaPersistentUsageRecordSession", 778 status: "stable", 779 }, 780 { 781 name: "EnterKeyHintAttribute", 782 status: "stable", 783 }, 784 { 785 name: "EventTiming", 786 status: "stable", 787 }, 788 { 789 name: "ExecCommandInJavaScript", 790 status: "test", 791 }, 792 { 793 name: "ExpensiveBackgroundTimerThrottling", 794 status: "stable", 795 }, 796 { 797 name: "ExperimentalContentSecurityPolicyFeatures", 798 status: "experimental", 799 }, 800 // Enables navigator.scheduling.isFramePending, allowing long-running JS to 801 // be able to yield itself when a display update is scheduled. 802 { 803 name: "ExperimentalIsFramePending", 804 status: "experimental" 805 }, 806 // Enables navigator.scheduling.isInputPending, allowing long-running JS to 807 // be able to yield itself when user input is queued (crbug.com/910421). 808 { 809 name: "ExperimentalIsInputPending", 810 origin_trial_feature_name: "ExperimentalIsInputPending", 811 status: "stable" 812 }, 813 // Enables a DOM-exposed interface to profile client JS. 814 // https://github.com/WICG/js-self-profiling 815 { 816 name: "ExperimentalJSProfiler", 817 origin_trial_feature_name: "ExperimentalJSProfiler", 818 status: "experimental" 819 }, 820 // Enables a set of features intended to help improve web developer 821 // productivity, by restricting the use of potentially problematic web- 822 // platform behaviors, as well as adding new high-level APIs for common 823 // development patterns. 824 { 825 name: "ExperimentalProductivityFeatures", 826 status: "experimental" 827 }, 828 { 829 name: "ExtendedTextMetrics", 830 status: "experimental", 831 }, 832 { 833 name: "ExtraWebGLVideoTextureMetadata", 834 }, 835 { 836 name: "FaceDetector", 837 status: "experimental", 838 }, 839 { 840 name: "FeaturePolicyForClientHints", 841 status: "stable", 842 }, 843 { 844 name: "FeaturePolicyForSandbox", 845 status: "experimental", 846 }, 847 { 848 name: "FeaturePolicyReporting", 849 implied_by: ["ExperimentalProductivityFeatures"], 850 origin_trial_feature_name: "FeaturePolicyReporting", 851 status: "experimental" 852 }, 853 { 854 name: "FeaturePolicyVibrateFeature" 855 }, 856 { 857 name: "FetchUploadStreaming", 858 origin_trial_feature_name: "FetchUploadStreaming", 859 status: "experimental", 860 }, 861 { 862 // Also enabled when blink::features::kFileHandlingAPI is overridden 863 // on the command line (or via chrome://flags). 864 name: "FileHandling", 865 depends_on: ["NativeFileSystem"], 866 status: {"Android": "test", "default": "experimental"}, 867 origin_trial_feature_name: "FileHandling", 868 origin_trial_os: ["win", "mac", "linux", "chromeos"], 869 }, 870 { 871 name: "FileSystem", 872 status: "stable", 873 }, 874 { 875 name: "FlexAspectRatio", 876 status: "stable", 877 }, 878 { 879 name: "FocuslessSpatialNavigation", 880 settable_from_internals: true, 881 }, 882 { 883 name: "FontAccess", 884 origin_trial_feature_name: "FontAccess", 885 // No status because this blink runtime feature doesn't work by itself. 886 // It's controlled by the corresponding Chromium feature which needs to 887 // be enabled to make the whole feature work. 888 }, 889 { 890 name: "FontAccessChooser", 891 // TODO(crbug.com/1000486): Add when the Origin Trial dependency bug is fixed. 892 // depends_on: ["FontAccess"], 893 status: "experimental", 894 }, 895 { 896 name: "FontSrcLocalMatching", 897 // No status, as the web platform runtime enabled feature is controlled by 898 // a Chromium level feature. 899 }, 900 // For simulating Android's overlay fullscreen video in web tests on Linux. 901 { 902 name: "ForcedColors", 903 // No status because this blink runtime feature doesn't work by itself. 904 // It's controlled by the corresponding Chromium feature which needs to 905 // be enabled to make the whole feature work. 906 }, 907 { 908 name: "ForceDeferScriptIntervention", 909 }, 910 { 911 // This is used in tests to perform memory measurement without 912 // waiting for GC. 913 name:"ForceEagerMeasureMemory", 914 }, 915 { 916 name: "ForceLoadAtTop", 917 origin_trial_feature_name: "ForceLoadAtTop", 918 }, 919 { 920 name: "ForceOverlayFullscreenVideo", 921 }, 922 { 923 name: "ForceSynchronousHTMLParsing", 924 }, 925 { 926 name: "ForceTallerSelectPopup", 927 status: {"ChromeOS": "stable"}, 928 }, 929 { 930 name: "FractionalScrollOffsets", 931 }, 932 { 933 name: "FreezeFramesOnVisibility", 934 status: "experimental", 935 }, 936 { 937 name: "GamepadButtonAxisEvents", 938 status: "experimental", 939 }, 940 { 941 name: "GetCurrentBrowsingContextMedia", 942 depends_on: ["GetDisplayMedia"], 943 status: {"Android": "", "default": "test"}, 944 }, 945 { 946 name: "GetDisplayMedia", 947 status: { 948 "Android": "experimental", 949 "default": "stable", 950 }, 951 }, 952 { 953 name: "GroupEffect", 954 status: "test", 955 }, 956 { 957 name: "HrefTranslate", 958 depends_on: ["TranslateService"], 959 origin_trial_feature_name: "HrefTranslate", 960 status: "stable", 961 }, 962 // TODO(937746): Web Components v0 is disabled by default, and will be 963 // removed after M87. 964 { 965 name: "HTMLImports", 966 status: "test", 967 }, 968 { 969 name: "IDBObserver", 970 status: "experimental", 971 }, 972 { 973 name: "IDBPutAll", 974 status: "experimental", 975 }, 976 { 977 name: "IDBRelaxedDurability", 978 status: "stable", 979 }, 980 { 981 name: "IdleDetection", 982 origin_trial_feature_name: "IdleDetection", 983 status: "experimental", 984 }, 985 { 986 name: "IgnoreCrossOriginWindowWhenNamedAccessOnWindow", 987 status: "experimental", 988 }, 989 { 990 name: "ImageOrientation", 991 status: "stable", 992 }, 993 { 994 name: "ImplicitRootScroller", 995 settable_from_internals: true, 996 }, 997 { 998 name: "ImportMaps", 999 implied_by: ["ExperimentalProductivityFeatures"], 1000 }, 1001 { 1002 name: "InertAttribute", 1003 status: "experimental", 1004 }, 1005 { 1006 name: "InputMultipleFieldsUI", 1007 // No plan to support complex UI for date/time INPUT types on Android. 1008 status: {"Android": "test", "default": "stable"}, 1009 }, 1010 { 1011 name: "InstalledApp", 1012 status: "stable", 1013 }, 1014 { 1015 name: "InterestCohortAPI", 1016 origin_trial_feature_name: "InterestCohortAPI", 1017 }, 1018 { 1019 name: "IntersectionObserverDocumentScrollingElementRoot", 1020 status: "stable", 1021 }, 1022 { 1023 // Launched by default. TODO(mythria): cleanup virtual tests and 1024 // other hooks in blink. 1025 name: "IsolatedCodeCache", 1026 status: "stable", 1027 }, 1028 { 1029 name: "KeyboardFocusableScrollers", 1030 status: "experimental", 1031 }, 1032 { 1033 name: "LangAttributeAwareFormControlUI", 1034 }, 1035 { 1036 name: "LangClientHintHeader", 1037 status: "experimental", 1038 }, 1039 { 1040 // LayoutNG has been enabled in M76, but we still keep this flag for 1041 // testing. See web_tests/FlagExpectations/disable-layout-ng for more 1042 // details about running web tests with LayoutNG disabled. This flag also 1043 // provides a convenient way for testing legacy layout code path in blink 1044 // unit tests. 1045 name: "LayoutNG", 1046 implied_by: ["LayoutNGGrid", "BidiCaretAffinity", "LayoutNGTable"], 1047 status: "stable", 1048 }, 1049 { 1050 name: "LayoutNGBlockFragmentation", 1051 implied_by: ["LayoutNGPrinting"], 1052 }, 1053 { 1054 name: "LayoutNGFieldset", 1055 depends_on: ["LayoutNG"], 1056 status: "stable", 1057 }, 1058 { 1059 name: "LayoutNGForControls", 1060 depends_on: ["LayoutNG"], 1061 status: "stable", 1062 }, 1063 { 1064 name: "LayoutNGFragmentItem", 1065 implied_by: ["LayoutNGBlockFragmentation", "LayoutNGFragmentTraversal", "EditingNG"], 1066 status: "stable", 1067 }, 1068 { 1069 // Traverse the fragment tree when painting and hit-testing, instead of 1070 // the layout object tree. 1071 name: "LayoutNGFragmentTraversal", 1072 implied_by: ["LayoutNGBlockFragmentation"], 1073 }, 1074 { 1075 name: "LayoutNGGrid", 1076 }, 1077 { 1078 name: "LayoutNGLayoutOverflow", 1079 depends_on: ["LayoutNG", "LayoutNGFragmentItem"], 1080 status: "stable", 1081 }, 1082 { 1083 name: "LayoutNGPrinting", 1084 }, 1085 { 1086 name: "LayoutNGTable", 1087 }, 1088 { 1089 name: "LayoutNGTextControl", 1090 depends_on: ["EditingNG"], 1091 status: "experimental", 1092 }, 1093 { 1094 name: "LayoutNGWebkitBox", 1095 status: "stable", 1096 }, 1097 { 1098 name: "LazyFrameLoading", 1099 status: "stable", 1100 }, 1101 { 1102 name: "LazyFrameVisibleLoadTimeMetrics", 1103 }, 1104 { 1105 name: "LazyImageLoading", 1106 status: "stable", 1107 }, 1108 { 1109 name: "LazyImageVisibleLoadTimeMetrics", 1110 }, 1111 { 1112 name: "LazyInitializeMediaControls", 1113 // This is enabled by features::kLazyInitializeMediaControls. 1114 }, 1115 { 1116 name: "LegacyWindowsDWriteFontFallback", 1117 // Enabled by features::kLegacyWindowsDWriteFontFallback; 1118 }, 1119 { 1120 // TODO(crbug.com/1087043): Remove this once the feature has 1121 // landed and no compat issues are reported. 1122 name: "LinkDisabledNewSpecBehavior", 1123 status: "stable", 1124 }, 1125 { 1126 name:"ManualSlotting", 1127 status:"stable", 1128 }, 1129 { 1130 name: "MathMLCore", 1131 status:"experimental", 1132 depends_on: ["LayoutNG"], 1133 }, 1134 { 1135 name:"MeasureMemory", 1136 origin_trial_feature_name: "MeasureMemory", 1137 status:"experimental", 1138 }, 1139 { 1140 name: "MediaCapabilitiesDynamicRange", 1141 status: "test", 1142 }, 1143 { 1144 name: "MediaCapabilitiesEncodingInfo", 1145 status: "experimental", 1146 }, 1147 { 1148 name: "MediaCapabilitiesEncryptedMedia", 1149 status: "stable", 1150 }, 1151 { 1152 name: "MediaCapabilitiesSpatialAudio", 1153 status: "test", 1154 }, 1155 { 1156 name: "MediaCapture", 1157 status: {"Android": "stable"}, 1158 }, 1159 { 1160 name: "MediaCaptureDepthVideoKind", 1161 status: "experimental", 1162 }, 1163 { 1164 name: "MediaCapturePanTilt", 1165 status: "stable", 1166 }, 1167 // Set to reflect the MediaCastOverlayButton feature. 1168 { 1169 name: "MediaCastOverlayButton", 1170 }, 1171 { 1172 name: "MediaControlsExpandGesture" 1173 }, 1174 { 1175 name: "MediaControlsOverlayPlayButton", 1176 settable_from_internals: true, 1177 status: {"Android": "stable"}, 1178 }, 1179 { 1180 name: "MediaControlsUseCutOutByDefault", 1181 status: "stable", 1182 }, 1183 { 1184 name: "MediaDocumentDownloadButton", 1185 }, 1186 { 1187 name: "MediaElementVolumeGreaterThanOne", 1188 }, 1189 // Set to reflect the kMediaEngagementBypassAutoplayPolicies feature. 1190 { 1191 name: "MediaEngagementBypassAutoplayPolicies", 1192 }, 1193 // Media Feeds: https://wicg.github.io/media-feeds/ 1194 // Set to reflect the kMediaFeeds feature. 1195 { 1196 name: "MediaFeeds", 1197 status: "experimental", 1198 }, 1199 { 1200 name: "MediaLatencyHint", 1201 status: "test", 1202 }, 1203 { 1204 name: "MediaPreservesPitch", 1205 status: "stable", 1206 }, 1207 { 1208 name: "MediaQueryNavigationControls", 1209 }, 1210 { 1211 name: "MediaSession", 1212 status: "stable", 1213 }, 1214 { 1215 name: "MediaSessionPosition", 1216 status: "stable", 1217 }, 1218 { 1219 name: "MediaSourceExperimental", 1220 status: "experimental", 1221 }, 1222 { 1223 name: "MediaSourceInWorkers", 1224 status: "experimental", 1225 }, 1226 { 1227 name: "MediaSourceNewAbortAndDuration", 1228 status: "experimental", 1229 }, 1230 { 1231 // This is used in cases of mixed specification of stable and 1232 // experimental MediaSource features, such as in the IDL for an interface 1233 // constructor where exposure of the constructor in Window vs other 1234 // contexts can vary in stable vs experimental. 1235 name: "MediaSourceStable", 1236 status: "stable", 1237 }, 1238 { 1239 name: "MediaStreamInsertableStreams", 1240 status: "experimental", 1241 }, 1242 // This is enabled by default on Windows only. The only part that's 1243 // "experimental" is the support on other platforms. 1244 { 1245 name: "MiddleClickAutoscroll", 1246 status: "test", 1247 }, 1248 { 1249 1250 name: "MobileLayoutTheme", 1251 }, 1252 { 1253 name: "ModuleServiceWorker", 1254 status: "test", 1255 }, 1256 { 1257 name: "ModuleSharedWorker", 1258 status: "stable", 1259 }, 1260 { 1261 name: "MojoJS", 1262 status: "test", 1263 }, 1264 // MojoJSTest is used exclusively in testing environments, whereas MojoJS 1265 // may also be used elsewhere. 1266 { 1267 name: "MojoJSTest", 1268 status: "test", 1269 }, 1270 { 1271 // When enabled, iframes are not capturing mouse events by default. 1272 name: "MouseSubframeNoImplicitCapture", 1273 }, 1274 { 1275 // Named pages for pagination (the "page" CSS property). 1276 name: "NamedPages", 1277 status: "stable", 1278 }, 1279 { 1280 // Also enabled when blink::features::kNativeFileSystemAPI is overridden 1281 // on the command line (or via chrome://flags). 1282 name: "NativeFileSystem", 1283 status: {"Android": "test", "default": "stable"}, 1284 // TODO(mek): Remove origin trial integration. 1285 origin_trial_feature_name: "NativeFileSystem2", 1286 origin_trial_os: ["win", "mac", "linux", "chromeos"], 1287 }, 1288 { 1289 name: "NativeIO", 1290 status: "experimental", 1291 }, 1292 { 1293 name: "NavigatorContentUtils", 1294 // Android does not yet support NavigatorContentUtils. 1295 status: {"Android": "", "default": "stable"}, 1296 }, 1297 { 1298 // Allows the navigator.language and navigator.languages APIs in insecure 1299 // contexts, which https://github.com/WICG/lang-client-hint proposes that 1300 // we deprecate. 1301 name: "NavigatorLanguageInInsecureContext", 1302 settable_from_internals: true, 1303 status: "stable", 1304 }, 1305 { 1306 name: "NetInfoDownlinkMax", 1307 // Only Android, ChromeOS support NetInfo downlinkMax, type and ontypechange now 1308 status: {"Android": "stable", "ChromeOS": "stable", "default": "experimental"}, 1309 }, 1310 { 1311 name: "NeverSlowMode", 1312 }, 1313 { 1314 name: "NewCanvas2DAPI", 1315 status: "experimental", 1316 }, 1317 // Not a web exposed feature, enabled from the command line. 1318 { 1319 name: "NewRemotePlaybackPipeline", 1320 }, 1321 { 1322 name: "NoIdleEncodingForWebTests", 1323 status: "test", 1324 }, 1325 { 1326 name: "NotificationConstructor", 1327 // Android won't be able to reliably support non-persistent notifications, the 1328 // intended behavior for which is in flux by itself. 1329 status: {"Android": "", "default": "stable"}, 1330 }, 1331 // NotificationContentImage is not available in all platforms 1332 // The Notification Center on Mac OS X does not support content images. 1333 { 1334 name: "NotificationContentImage", 1335 status: {"Mac": "test", "default": "stable"}, 1336 }, 1337 { 1338 name: "Notifications", 1339 status: "stable", 1340 }, 1341 { 1342 name: "NotificationTriggers", 1343 origin_trial_feature_name: "NotificationTriggers", 1344 status: "experimental", 1345 }, 1346 { 1347 name: "OffMainThreadCSSPaint", 1348 status: "stable", 1349 }, 1350 { 1351 name: "OffscreenCanvasCommit", 1352 status: "experimental", 1353 }, 1354 { 1355 name: "OnDeviceChange", 1356 // Android does not yet support SystemMonitor. 1357 status: {"Android": "", "default": "stable"}, 1358 }, 1359 { 1360 name: "OrientationEvent", 1361 status: {"Android": "stable"}, 1362 }, 1363 { 1364 name: "OriginIsolationHeader", 1365 origin_trial_feature_name: "OriginIsolationHeader", 1366 status: "experimental", 1367 }, 1368 { 1369 name: "OriginPolicy", 1370 status: "experimental", 1371 }, 1372 1373 // Define a sample API for testing integration with the Origin Trials 1374 // Framework. The sample API is used in both unit and web tests for the 1375 // Origin Trials Framework. Do not change this flag to stable, as it exists 1376 // solely to generate code used by the sample API implementation. 1377 { 1378 name: "OriginTrialsSampleAPI", 1379 origin_trial_feature_name: "Frobulate", 1380 }, 1381 // As above. Do not change this flag to stable, as it exists solely to 1382 // generate code used by the origin trials sample API implementation. 1383 // TODO(yashard): Add tests for this feature. 1384 { 1385 name: "OriginTrialsSampleAPIDependent", 1386 depends_on: ["OriginTrialsSampleAPI"], 1387 }, 1388 // As above. Do not change this flag to stable, as it exists solely to 1389 // generate code used by the origin trials sample API implementation. 1390 { 1391 name: "OriginTrialsSampleAPIDeprecation", 1392 origin_trial_feature_name: "FrobulateDeprecation", 1393 origin_trial_type: "deprecation", 1394 origin_trial_allows_insecure: true, 1395 }, 1396 // As above. Do not change this flag to stable, as it exists solely to 1397 // generate code used by the origin trials sample API implementation. 1398 { 1399 name: "OriginTrialsSampleAPIImplied", 1400 origin_trial_feature_name: "FrobulateImplied", 1401 implied_by: ["OriginTrialsSampleAPI", "OriginTrialsSampleAPIInvalidOS"], 1402 }, 1403 // As above. Do not change this flag to stable, as it exists solely to 1404 // generate code used by the origin trials sample API implementation. 1405 { 1406 name: "OriginTrialsSampleAPIInvalidOS", 1407 origin_trial_feature_name: "FrobulateInvalidOS", 1408 origin_trial_os: ["invalid"], 1409 }, 1410 // As above. Do not change this flag to stable, as it exists solely to 1411 // generate code used by the origin trials sample API implementation. 1412 { 1413 name: "OriginTrialsSampleAPINavigation", 1414 origin_trial_feature_name: "FrobulateNavigation", 1415 }, 1416 // As above. Do not change this flag to stable, as it exists solely to 1417 // generate code used by the origin trials sample API implementation. 1418 { 1419 name: "OriginTrialsSampleAPIThirdParty", 1420 origin_trial_feature_name: "FrobulateThirdParty", 1421 origin_trial_allows_third_party: true, 1422 }, 1423 { 1424 name: "OverflowClip", 1425 status: "test", 1426 }, 1427 { 1428 name: "OverscrollCustomization", 1429 settable_from_internals: true, 1430 status: "experimental", 1431 }, 1432 // The following are developer opt-outs and opt-ins for page freezing. If 1433 // neither is specified then heuristics will be applied to determine whether 1434 // the page is eligible. 1435 { 1436 name: "PageFreezeOptIn", 1437 origin_trial_feature_name: "PageFreezeOptIn", 1438 }, 1439 { 1440 name: "PageFreezeOptOut", 1441 origin_trial_feature_name: "PageFreezeOptOut", 1442 }, 1443 { 1444 name: "PagePopup", 1445 // Android does not have support for PagePopup 1446 status: {"Android": "", "default": "stable"}, 1447 }, 1448 { 1449 name: "PaintUnderInvalidationChecking", 1450 settable_from_internals: true, 1451 }, 1452 { 1453 name: "ParentNodeReplaceChildren", 1454 status: "stable", 1455 }, 1456 { 1457 // This flag enables the Manifest parser to handle URL Protocols. 1458 name: "ParseUrlProtocolHandler", 1459 status: "test", 1460 }, 1461 { 1462 name: "PassPaintVisualRectToCompositor", 1463 }, 1464 // This is to add an option to enable the Reveal button on password inputs while waiting ::reveal gets standardized. 1465 { 1466 name: "PasswordReveal", 1467 }, 1468 { 1469 name: "PaymentApp", 1470 status: "experimental", 1471 }, 1472 { 1473 name: "PaymentHandlerChangePaymentMethod", 1474 status: "stable", 1475 }, 1476 { 1477 name: "PaymentHandlerHandlesShippingAndContact", 1478 status: "stable", 1479 }, 1480 { 1481 name: "PaymentHandlerMinimalUI", 1482 status: "experimental", 1483 }, 1484 { 1485 name: "PaymentMethodChangeEvent", 1486 status: "stable", 1487 }, 1488 // PaymentRequest is enabled by default on Android 1489 { 1490 name: "PaymentRequest", 1491 status: "experimental", 1492 }, 1493 { 1494 name: "PaymentRequestMerchantValidationEvent", 1495 status: "experimental", 1496 }, 1497 { 1498 name: "PaymentRetry", 1499 status: "stable", 1500 }, 1501 { 1502 name: "PercentBasedScrolling", 1503 settable_from_internals: true, 1504 }, 1505 { 1506 name: "PerformanceManagerInstrumentation", 1507 }, 1508 { 1509 name: "PeriodicBackgroundSync", 1510 status: "stable", 1511 }, 1512 { 1513 name: "PerMethodCanMakePaymentQuota", 1514 origin_trial_feature_name: "PerMethodCanMakePaymentQuota", 1515 status: "experimental", 1516 }, 1517 { 1518 name: "PermissionDelegation", 1519 status: "test", 1520 }, 1521 { 1522 name: "Permissions", 1523 status: "stable", 1524 }, 1525 { 1526 name: "PermissionsPolicyHeader", 1527 status: "stable" 1528 }, 1529 { 1530 name: "PermissionsRequestRevoke", 1531 status: "experimental", 1532 }, 1533 { 1534 name: "PictureInPicture", 1535 settable_from_internals: true, 1536 }, 1537 // Picture-in-Picture API is disabled by default on Android. 1538 { 1539 name: "PictureInPictureAPI", 1540 status: {"Android": "", "default": "stable"}, 1541 }, 1542 { 1543 name: "PictureInPictureV2", 1544 depends_on: ["PictureInPictureAPI"], 1545 settable_from_internals: true, 1546 }, 1547 // This is a reverse OT used for a phased deprecation. 1548 // https://crbug.com/918374 1549 { 1550 name: "PNaCl", 1551 origin_trial_feature_name: "PNaCl", 1552 }, 1553 { 1554 name: "PointerLockOptions", 1555 origin_trial_feature_name: "PointerLockOptions", 1556 status: 'experimental', 1557 }, 1558 { 1559 name: "PointerRawUpdate", 1560 status: "stable", 1561 }, 1562 { 1563 name: "Portals", 1564 // Portals must be enabled by blink::features::kPortals as we require the 1565 // support of the browser process to enable the feature. Enabling this 1566 // feature specifically within blink has no effect. An experimental/test 1567 // status can only be set here if the default of blink::features::kPortals 1568 // allows for it. 1569 status: {"Android": "experimental"}, 1570 origin_trial_feature_name: "Portals", 1571 origin_trial_os: ["android"], 1572 }, 1573 { 1574 name: "PreciseMemoryInfo", 1575 }, 1576 // Prefer not using composited scrolling. Composited scrolling will still 1577 // be used if there are other reasons forcing compositing. For consistency, 1578 // any code calling Settings::GetPreferCompositingToLCDTextEnabled() should 1579 // ensure that this flag overrides the setting. 1580 { 1581 name: "PreferNonCompositedScrolling", 1582 settable_from_internals: true, 1583 }, 1584 { 1585 name: "PrefersContrast", 1586 depends_on: ["ForcedColors"], 1587 }, 1588 { 1589 name: 'PrefersReducedData', 1590 status: 'experimental', 1591 }, 1592 // This feature is deprecated and we are evangelizing affected sites. 1593 // See https://crbug.com/346236 for current status. 1594 { 1595 name: "PrefixedVideoFullscreen", 1596 status: "stable", 1597 }, 1598 { 1599 name: "Presentation", 1600 status: "stable", 1601 }, 1602 { 1603 name: "PriorityHints", 1604 origin_trial_feature_name: "PriorityHints", 1605 status: "experimental", 1606 }, 1607 { 1608 name: "PushMessaging", 1609 status: "stable", 1610 }, 1611 { 1612 name: "PushMessagingSubscriptionChange", 1613 status: "experimental", 1614 }, 1615 { 1616 name: "QuicTransport", 1617 origin_trial_feature_name: "QuicTransport", 1618 status: "experimental", 1619 }, 1620 { 1621 name: "QuotaChange", 1622 status: "experimental", 1623 }, 1624 { 1625 // Enabled when blink::features::kRawClipboard is enabled. 1626 name: "RawClipboard", 1627 }, 1628 { 1629 name: "ReadableByteStream", 1630 }, 1631 { 1632 name: "RemotePlayback", 1633 status: "stable", 1634 }, 1635 { 1636 name: "RemotePlaybackBackend", 1637 settable_from_internals: true, 1638 // Tracking bug for the implementation: https://crbug.com/728609 1639 status: {"Android": "stable", "default": ""}, 1640 }, 1641 { 1642 // See https://crbug.com/1012063 1643 name: "RequestVideoFrameCallback", 1644 status: "stable", 1645 }, 1646 { 1647 name: "ResizeObserverUpdates", 1648 status: "stable", 1649 }, 1650 { 1651 name: "RestrictAutomaticLazyFrameLoadingToDataSaver", 1652 depends_on: ["AutomaticLazyFrameLoading"], 1653 status: "stable", 1654 }, 1655 { 1656 name: "RestrictAutomaticLazyImageLoadingToDataSaver", 1657 depends_on: ["AutomaticLazyImageLoading"], 1658 status: "stable", 1659 }, 1660 { 1661 name: "RestrictGamepadAccess", 1662 status: "experimental", 1663 }, 1664 { 1665 name: "RTCAdaptivePtime", 1666 origin_trial_feature_name: "RTCAdaptivePtime", 1667 status: "experimental", 1668 }, 1669 { 1670 name: "RtcAudioJitterBufferMaxPackets", 1671 origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets", 1672 status: "experimental", 1673 }, 1674 { 1675 name: "RtcAudioJitterBufferRtxHandling", 1676 origin_trial_feature_name: "RtcAudioJitterBufferRtxHandling", 1677 status: "experimental", 1678 }, 1679 // Enables the use of the RTCIceTransport with extensions. 1680 { 1681 name: "RTCIceTransportExtension", 1682 origin_trial_feature_name: "RTCQuicTransport", 1683 status: "experimental", 1684 }, 1685 // Enables the use of the Insertable Streams legacy API. 1686 // TODO(https://crbug.com/1119801): Remove when the origin trial ends. 1687 { 1688 name: "RTCInsertableStreams", 1689 origin_trial_feature_name: "RTCInsertableStreams", 1690 status: "experimental", 1691 }, 1692 // Enables the use of the RTCQuicTransport object. 1693 { 1694 name: "RTCQuicTransport", 1695 origin_trial_feature_name: "RTCQuicTransport", 1696 status: "experimental", 1697 }, 1698 // Enables the use of |RTCRtpTransceiver::stop()| 1699 { 1700 name: "RTCRtpTransceiverStop", 1701 status: "stable", 1702 }, 1703 { 1704 name: "RTCStatsRelativePacketArrivalDelay", 1705 origin_trial_feature_name: "RTCStatsRelativePacketArrivalDelay", 1706 status: "experimental", 1707 }, 1708 // Enables the use of SVC scalability mode in WebRTC. 1709 // Spec: https://w3c.github.io/webrtc-svc/ 1710 { 1711 name: "RTCSvcScalabilityMode", 1712 status: "experimental", 1713 }, 1714 // Enables the use of |RTCConfiguration::sdpSemantics| to override the 1715 // default SDP semantics at RTCPeerConnection construction. 1716 { 1717 name: "RTCUnifiedPlan", 1718 status: "stable", 1719 }, 1720 // Overrides the default SDP semantics to be Unified Plan at 1721 // RTCPeerConnection construction (unless otherwise specified). 1722 { 1723 name: "RTCUnifiedPlanByDefault", 1724 }, 1725 { 1726 name: "SameSiteByDefaultCookies", 1727 status: "test", 1728 }, 1729 { 1730 name: "SanitizerAPI", 1731 status: "test", 1732 }, 1733 { 1734 name: "ScreenWakeLock", 1735 status: "stable", 1736 }, 1737 // WebSpeech API with both speech recognition and synthesis functionality 1738 // is not fully enabled on all platforms. 1739 { 1740 name: "ScriptedSpeechRecognition", 1741 status: "stable", 1742 }, 1743 { 1744 name: "ScriptedSpeechSynthesis", 1745 status: "stable", 1746 }, 1747 { 1748 name: "ScrollbarGutter", 1749 status: "experimental", 1750 }, 1751 { 1752 name: "ScrollbarWidth", 1753 status: "test", 1754 }, 1755 { 1756 name: "ScrollCustomization", 1757 }, 1758 { 1759 name: "ScrollSnapAfterLayout", 1760 status: "stable", 1761 }, 1762 { 1763 name: "ScrollTimeline", 1764 status: "experimental", 1765 implied_by: ['AnimationWorklet', 'CSSScrollTimeline'] 1766 }, 1767 // Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left 1768 // as per the spec, matching other Web engines. 1769 { 1770 name: "ScrollTopLeftInterop", 1771 status: "stable", 1772 }, 1773 { 1774 name: "ScrollUnification", 1775 }, 1776 { 1777 name: "SecurePaymentConfirmation", 1778 origin_trial_feature_name: "SecurePaymentConfirmation", 1779 origin_trial_os: ["mac"], 1780 status: "experimental", 1781 }, 1782 { 1783 name: "SecurePaymentConfirmationDebug", 1784 }, 1785 { 1786 name: "SendBeaconThrowForBlobWithNonSimpleType", 1787 status: "stable", 1788 }, 1789 { 1790 name: "SendMouseEventsDisabledFormControls", 1791 status: "experimental", 1792 }, 1793 { 1794 name: "SensorExtraClasses", 1795 status: "experimental", 1796 }, 1797 { 1798 name: "Serial", 1799 origin_trial_feature_name: "Serial", 1800 status: {"Android": "", "default": "experimental"}, 1801 }, 1802 { 1803 name: "ServiceWorkerClientLifecycleState", 1804 status: "experimental", 1805 }, 1806 { 1807 name: "ServiceWorkerFetchEventWorkerTiming", 1808 status: "experimental", 1809 }, 1810 // TODO(937746): Web Components v0 is disabled by default, and will be 1811 // removed after M87. 1812 { 1813 name: "ShadowDOMV0", 1814 status: "test", 1815 }, 1816 { 1817 name: "SharedArrayBuffer", 1818 status: "stable", 1819 }, 1820 { 1821 name: "SharedWorker", 1822 // Android does not yet support SharedWorker. crbug.com/154571 1823 status: {"Android": "", "default": "stable"}, 1824 }, 1825 { 1826 name: "SignatureBasedIntegrity", 1827 origin_trial_feature_name: "SignatureBasedIntegrity", 1828 status: "experimental", 1829 }, 1830 { 1831 name: "SignedExchangePrefetchCacheForNavigations", 1832 status: "experimental", 1833 }, 1834 { 1835 name: "SignedExchangeSubresourcePrefetch", 1836 origin_trial_feature_name: "SignedExchangeSubresourcePrefetch", 1837 status: "experimental", 1838 }, 1839 { 1840 name: "SkipAd", 1841 depends_on: ["MediaSession"], 1842 origin_trial_feature_name: "SkipAd", 1843 status: "experimental", 1844 }, 1845 { 1846 name: "SkipTouchEventFilter", 1847 settable_from_internals: true, 1848 }, 1849 { 1850 name: "SrcsetMaxDensity", 1851 }, 1852 // Used as argument in attribute of stable-release functions/interfaces 1853 // where a runtime-enabled feature name is required for correct IDL syntax. 1854 // This is a global flag; do not change its status. 1855 { 1856 name: "StableBlinkFeatures", 1857 status: "stable", 1858 }, 1859 { 1860 // Enabled when blink::features::kStorageAccessAPI is enabled. 1861 name: "StorageAccessAPI", 1862 status: "test", 1863 }, 1864 { 1865 name: "StrictMimeTypesForWorkers", 1866 status: "experimental" 1867 }, 1868 { 1869 name: "SubresourceWebBundles", 1870 origin_trial_feature_name: "SubresourceWebBundles", 1871 origin_trial_allows_third_party: true, 1872 status: "test" 1873 }, 1874 { 1875 name: "SurfaceEmbeddingFeatures", 1876 status: "stable", 1877 }, 1878 { 1879 name: "SystemWakeLock", 1880 status: "experimental", 1881 }, 1882 { 1883 name: "TableCellNewPercents", 1884 depends_on: ["LayoutNG"], 1885 status: "stable", 1886 }, 1887 { 1888 // TODO(crbug.com/898942): Remove this in Chrome 95. 1889 name: "TargetBlankImpliesNoOpener", 1890 status: "stable", 1891 }, 1892 // For unit tests. 1893 { 1894 name: "TestFeature", 1895 }, 1896 // For unit tests. 1897 { 1898 name: "TestFeatureDependent", 1899 depends_on: ["TestFeatureImplied"], 1900 }, 1901 // For unit tests. 1902 { 1903 name: "TestFeatureImplied", 1904 implied_by: ["TestFeature"], 1905 }, 1906 { 1907 name: "TextDetector", 1908 status: "experimental", 1909 }, 1910 { 1911 name: "TextFragmentIdentifiers", 1912 origin_trial_feature_name: "TextFragmentIdentifiers", 1913 status: "stable", 1914 }, 1915 { 1916 name: "ThirdPartyOriginTrials", 1917 status: "stable", 1918 }, 1919 { 1920 name: "TimerThrottlingForBackgroundTabs", 1921 status: "stable", 1922 }, 1923 { 1924 name: "TimerThrottlingForHiddenFrames", 1925 status: "stable", 1926 }, 1927 { 1928 name: "TimeZoneChangeEvent", 1929 status: "experimental", 1930 }, 1931 // Many websites disable mouse support when touch APIs are available. We'd 1932 // like to enable this always but can't until more websites fix this bug. 1933 // Chromium sets this conditionally (eg. based on the presence of a 1934 // touchscreen) in ApplyWebPreferences. "Touch events" themselves are always 1935 // enabled since they're a feature always supported by Chrome. 1936 { 1937 name: "TouchEventFeatureDetection", 1938 origin_trial_feature_name: "ForceTouchEventFeatureDetectionForInspector", 1939 status: "stable", 1940 }, 1941 { 1942 name: "TransferableStreams", 1943 status: "stable", 1944 origin_trial_feature_name: "RTCInsertableStreams", 1945 implied_by: ["RTCInsertableStreams"], 1946 }, 1947 // When enabled, enforces new interoperable semantics for 3D transforms. 1948 // See crbug.com/1008483. 1949 { 1950 name: "TransformInterop", 1951 }, 1952 // This is conditionally set if the platform supports translation. 1953 { 1954 name: "TranslateService" 1955 }, 1956 { 1957 name: "TrustedDOMTypes", 1958 status: "stable", 1959 }, 1960 { 1961 name: "TrustedTypeBeforePolicyCreationEvent", 1962 status: "experimental", 1963 }, 1964 { 1965 name: "TrustedTypesUseCodeLike", 1966 status: "experimental", 1967 }, 1968 { 1969 name: "TrustTokens", 1970 origin_trial_feature_name: "TrustTokens", 1971 origin_trial_allows_third_party: true, 1972 status: "test", 1973 }, 1974 { 1975 // Always allow trust token issuance (so long as the base::Feature 1976 // is enabled). Used for testing; circumvents a runtime check that, 1977 // if this RuntimeEnabledFeature is not present, guarantees the origin 1978 // trial is enabled. 1979 name: "TrustTokensAlwaysAllowIssuance", 1980 status: "test", 1981 }, 1982 { 1983 name: "UnclosedFormControlIsInvalid", 1984 status: "experimental", 1985 }, 1986 { 1987 name: "UnderlineOffsetThickness", 1988 status: "stable", 1989 }, 1990 { 1991 name: "UnoptimizedImagePolicies", 1992 status: "experimental", 1993 origin_trial_feature_name: "UnoptimizedImagePolicies", 1994 implied_by: ["ExperimentalProductivityFeatures"] 1995 }, 1996 { 1997 name: "UnsizedMediaPolicy", 1998 status: "experimental", 1999 origin_trial_feature_name: "UnsizedMediaPolicy", 2000 implied_by: ["ExperimentalProductivityFeatures"] 2001 }, 2002 { 2003 name: "UserActivationSameOriginVisibility", 2004 }, 2005 { 2006 name: "UserAgentClientHint", 2007 status: "experimental", 2008 }, 2009 { 2010 name: "V8IdleTasks", 2011 }, 2012 { 2013 // Whether a video element should automatically play fullscreen unless 2014 // 'playsinline' is set. 2015 name: "VideoAutoFullscreen", 2016 settable_from_internals: true, 2017 }, 2018 { 2019 name: "VideoFullscreenOrientationLock", 2020 }, 2021 { 2022 name: "VideoPlaybackQuality", 2023 status: "stable", 2024 }, 2025 { 2026 name: "VideoRotateToFullscreen", 2027 }, 2028 { 2029 name: "VideoWakeLockOptimisationHiddenMuted", 2030 status: "stable", 2031 }, 2032 { 2033 name: "VirtualKeyboard", 2034 status: "test", 2035 }, 2036 { 2037 name: "VisibilityCollapseColumn", 2038 }, 2039 { 2040 name: "VisibilityStateEntry", 2041 status: "experimental", 2042 }, 2043 { 2044 name: "WakeLock", 2045 origin_trial_feature_name: "WakeLock", 2046 implied_by: ['ScreenWakeLock', 'SystemWakeLock'], 2047 }, 2048 { 2049 name: "WebAnimationsAPI", 2050 status: "stable", 2051 implied_by: ['AnimationWorklet'] 2052 }, 2053 { 2054 name: "WebAnimationsSVG", 2055 status: "experimental", 2056 }, 2057 { 2058 name: "WebAppManifestDisplayOverride", 2059 }, 2060 { 2061 name: "WebAppWindowControlsOverlay", 2062 }, 2063 { 2064 name: "WebAssemblySimd", 2065 origin_trial_feature_name: "WebAssemblySimd", 2066 status: "experimental", 2067 }, 2068 { 2069 name: "WebAssemblyThreads", 2070 origin_trial_feature_name: "WebAssemblyThreads", 2071 status: "experimental", 2072 }, 2073 // WebAuth is disabled on Android versions prior to N (7.0) due to lack of 2074 // supporting APIs, see runtime_features.cc. 2075 { 2076 name: "WebAuth", 2077 status: "stable", 2078 }, 2079 { 2080 name: "WebAuthenticationGetAssertionFeaturePolicy", 2081 status: "experimental", 2082 }, 2083 { 2084 name: "WebAuthenticationLargeBlobExtension", 2085 status: "experimental", 2086 }, 2087 { 2088 name: "WebAuthenticationResidentKeyRequirement", 2089 status: "experimental", 2090 }, 2091 // WebBluetooth is enabled by default on Android, ChromeOS and Mac. 2092 // It is also supported in Windows 10 which is handled in runtime_features.cc 2093 { 2094 name: "WebBluetooth", 2095 status: { 2096 "Android": "stable", 2097 "ChromeOS": "stable", 2098 "Mac": "stable", 2099 "default": "experimental", 2100 }, 2101 }, 2102 { 2103 name: "WebBluetoothGetDevices", 2104 status: "experimental", 2105 }, 2106 { 2107 name: "WebBluetoothRemoteCharacteristicNewWriteValue", 2108 status: { 2109 "Android": "stable", 2110 "ChromeOS": "stable", 2111 "Mac": "stable", 2112 "default": "experimental", 2113 }, 2114 }, 2115 { 2116 name: "WebBluetoothScanning", 2117 status: "experimental", 2118 }, 2119 { 2120 name: "WebBluetoothWatchAdvertisements", 2121 status: "experimental", 2122 }, 2123 { 2124 name: "WebCodecs", 2125 status: "experimental", 2126 origin_trial_feature_name: "WebCodecs" 2127 }, 2128 { 2129 name: "WebCryptoCurve25519", 2130 status: "experimental", 2131 }, 2132 { 2133 name: "WebGLDraftExtensions", 2134 status: "experimental", 2135 }, 2136 { 2137 name: "WebGLImageChromium", 2138 }, 2139 // WebGPU adds a large attack surface area to the GPU process and allows 2140 // running arbitrary programs on the GPU (compute shaders), which may 2141 // perform arbitrary read/writes of GPU memory if not properly sandboxed. 2142 // That's why it is not enabled as part of the 2143 // --enable-experimental-web-platform-features flag. 2144 { 2145 name: "WebGPU", 2146 }, 2147 { 2148 name: "WebHID", 2149 origin_trial_feature_name: "WebHID", 2150 status: {"Android": "", "default": "experimental"}, 2151 }, 2152 { 2153 name: "WebID", 2154 }, 2155 { 2156 name: "WebNFC", 2157 origin_trial_feature_name: "WebNFC", 2158 origin_trial_os: ["android"], 2159 status: "experimental", 2160 }, 2161 { 2162 name: "WebOTP", 2163 status: {"default": "experimental", "Android": "stable"}, 2164 }, 2165 { 2166 name: "WebScheduler", 2167 origin_trial_feature_name: "WebScheduler", 2168 status: "experimental", 2169 }, 2170 // WebShare is enabled by default on Android. 2171 { 2172 name: "WebShare", 2173 status: "test", 2174 }, 2175 { 2176 name: "WebSocketStream", 2177 status: "experimental", 2178 }, 2179 { 2180 name: "WebUSB", 2181 status: "stable", 2182 }, 2183 { 2184 name: "WebUSBOnDedicatedWorkers", 2185 status: "stable", 2186 depends_on: ["WebUSB"], 2187 }, 2188 { 2189 name: "WebVTTRegions", 2190 status: "experimental", 2191 }, 2192 { 2193 name: "WebXR", 2194 status: "stable", 2195 }, 2196 { 2197 name: "WebXRAnchors", 2198 depends_on: ["WebXRARModule", "WebXRHitTest"], 2199 status: "stable" 2200 }, 2201 { 2202 name: "WebXRARModule", 2203 depends_on: ["WebXR"], 2204 status: "stable", 2205 }, 2206 { 2207 name: "WebXRCameraAccess", 2208 depends_on: ["WebXRARModule"], 2209 status: "experimental", 2210 }, 2211 { 2212 name: "WebXRDepth", 2213 origin_trial_feature_name: "WebXRDepth", 2214 depends_on: ["WebXRARModule"], 2215 status: "experimental", 2216 }, 2217 { 2218 name: "WebXRHitTest", 2219 depends_on: ["WebXRARModule"], 2220 status: "stable", 2221 }, 2222 { 2223 name: "WebXRHitTestEntityTypes", 2224 depends_on: ["WebXRHitTest"], 2225 status: "experimental" 2226 }, 2227 { 2228 name: "WebXRImageTracking", 2229 depends_on: ["WebXRARModule"], 2230 status: "experimental", 2231 }, 2232 { 2233 name: "WebXRLightEstimation", 2234 origin_trial_feature_name: "WebXRLightEstimation", 2235 depends_on: ["WebXRARModule"], 2236 status: "experimental", 2237 }, 2238 { 2239 name: "WebXRMultiGpu", 2240 depends_on: ["WebXR"], 2241 // Enabled when blink::features::kWebXrMultiGpu is enabled. 2242 status: "stable", 2243 }, 2244 { 2245 name: "WebXRPlaneDetection", 2246 depends_on: ["WebXRARModule"], 2247 status: "experimental", 2248 }, 2249 { 2250 name: "WebXRViewportScale", 2251 depends_on: ["WebXRARModule"], 2252 status: "experimental", 2253 }, 2254 { 2255 name: "WheelEventRegions", 2256 }, 2257 // Extends window placement functionality for multi-screen devices. Also 2258 // exposes requisite information about displays connected to the device. 2259 { 2260 name: "WindowPlacement", 2261 origin_trial_feature_name: "WindowPlacement", 2262 status: "experimental", 2263 }, 2264 { 2265 name: "WindowSegments", 2266 status: "experimental", 2267 }, 2268 { 2269 name: "XSLT", 2270 status: "stable", 2271 }, 2272 ], 2273} 2274