1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/no_destructor.h"
#include "components/page_load_metrics/browser/observers/use_counter_page_load_metrics_observer.h"
// This file defines a mapping of WebFeature use counters and CSS sample IDs
// to the corresponding WebDXFeature use counters.
using WebFeature = blink::mojom::WebFeature;
using WebDXFeature = blink::mojom::WebDXFeature;
using CSSSampleId = blink::mojom::CSSSampleId;
using WebDXFeature = blink::mojom::WebDXFeature;
const base::flat_map<blink::mojom::WebFeature, blink::mojom::WebDXFeature>&
UseCounterMetricsRecorder::GetWebFeatureToWebDXFeatureMap() {
static const base::NoDestructor<
const base::flat_map<WebFeature, WebDXFeature>>
kMap{{
{WebFeature::kViewTransition, WebDXFeature::kViewTransitions},
{WebFeature::kValidPopoverAttribute, WebDXFeature::kPopover},
{WebFeature::kCSSSubgridLayout, WebDXFeature::kSubgrid},
{WebFeature::kCSSCascadeLayers, WebDXFeature::kCascadeLayers},
// If the compression or decompression stream constructors were
// invoked, WebDXFeature::count that as the CompressionStreams WebDX
// feature being used.
{WebFeature::kCompressionStreamConstructor,
WebDXFeature::kCompressionStreams},
{WebFeature::kDecompressionStreamConstructor,
WebDXFeature::kCompressionStreams},
{WebFeature::kAVIFImage, WebDXFeature::kAvif},
{WebFeature::kBlockingAttributeRenderToken,
WebDXFeature::kBlockingRender},
{WebFeature::kV8BroadcastChannel_Constructor,
WebDXFeature::kBroadcastChannel},
{WebFeature::kCanvasRenderingContext2DContextLostEvent,
WebDXFeature::kCanvasContextLost},
{WebFeature::kCSSCascadeLayers, WebDXFeature::kCascadeLayers},
{WebFeature::kPressureObserver_Constructor,
WebDXFeature::kComputePressure},
{WebFeature::kAdoptedStyleSheets,
WebDXFeature::kConstructedStylesheets},
{WebFeature::kCSSAtRuleContainer, WebDXFeature::kContainerQueries},
{WebFeature::kCSSStyleContainerQuery,
WebDXFeature::kContainerStyleQueries},
{WebFeature::kCSSAtRuleCounterStyle, WebDXFeature::kCounterStyle},
{WebFeature::kCreateCSSModuleScript, WebDXFeature::kCssModules},
{WebFeature::kStreamingDeclarativeShadowDOM,
WebDXFeature::kDeclarativeShadowDom},
{WebFeature::kShowPickerSelect, WebDXFeature::kShowPickerSelect},
{WebFeature::kHTMLDetailsElementNameAttribute,
WebDXFeature::kDetailsName},
{WebFeature::kHTMLFencedFrameElement, WebDXFeature::kFencedframe},
{WebFeature::kHTMLUnsafeMethods, WebDXFeature::kParseHtmlUnsafe},
{WebFeature::kCloseWatcherScriptConstructor,
WebDXFeature::kClosewatcher},
{WebFeature::kHTMLSearchElement, WebDXFeature::kSearch},
{WebFeature::kDialogElement, WebDXFeature::kDialog},
{WebFeature::kV8DocumentPictureInPicture_RequestWindow_Method,
WebDXFeature::kDocumentPictureInPicture},
{WebFeature::kFlexGapSpecified, WebDXFeature::kFlexboxGap},
{WebFeature::kCSSFlexibleBox, WebDXFeature::kFlexbox},
{WebFeature::kCSSSelectorPseudoFocusVisible,
WebDXFeature::kFocusVisible},
{WebFeature::kCSSGridLayout, WebDXFeature::kGrid},
{WebFeature::kCSSSelectorPseudoHas, WebDXFeature::kHas},
{WebFeature::kCSSSelectorPseudoHasSlotted, WebDXFeature::kHasSlotted},
{WebFeature::kIdleDetectionStart, WebDXFeature::kIdleDetection},
{WebFeature::kImportMap, WebDXFeature::kImportMaps},
{WebFeature::kIntersectionObserverV2,
WebDXFeature::kIntersectionObserverV2},
{WebFeature::kIntersectionObserver_Constructor,
WebDXFeature::kIntersectionObserver},
{WebFeature::kCSSSelectorPseudoIs, WebDXFeature::kIs},
{WebFeature::kPrepareModuleScript, WebDXFeature::kJsModules},
{WebFeature::kInstantiateModuleScript, WebDXFeature::kJsModules},
{WebFeature::kV8MediaSession_Metadata_AttributeSetter,
WebDXFeature::kMediaSession},
{WebFeature::kOffscreenCanvas, WebDXFeature::kOffscreenCanvas},
{WebFeature::kV8StorageManager_GetDirectory_Method,
WebDXFeature::kOriginPrivateFileSystem},
{WebFeature::kV8Window_FetchLater_Method, WebDXFeature::kFetchlater},
{WebFeature::kV8Window_ShowOpenFilePicker_Method,
WebDXFeature::kFileSystemAccess},
{WebFeature::kV8Window_ShowSaveFilePicker_Method,
WebDXFeature::kFileSystemAccess},
{WebFeature::kV8Window_ShowDirectoryPicker_Method,
WebDXFeature::kFileSystemAccess},
{WebFeature::kV8HTMLVideoElement_RequestPictureInPicture_Method,
WebDXFeature::kPictureInPicture},
{WebFeature::kV8HTMLVideoElement_GetVideoPlaybackQuality_Method,
WebDXFeature::kMediaPlaybackQuality},
{WebFeature::kV8Window_QueryLocalFonts_Method,
WebDXFeature::kLocalFonts},
{WebFeature::kElementRequestPointerLock, WebDXFeature::kPointerLock},
{WebFeature::kCSSRelativeColor, WebDXFeature::kRelativeColor},
{WebFeature::kCSSAtRuleScope, WebDXFeature::kScope},
{WebFeature::kScrollend, WebDXFeature::kScrollend},
{WebFeature::kTextFragmentAnchor,
WebDXFeature::kScrollToTextFragment},
{WebFeature::kV8HTMLInputElement_ShowPicker_Method,
WebDXFeature::kShowPickerInput},
{WebFeature::kHTMLSlotElement, WebDXFeature::kSlot},
{WebFeature::kV8SpeechRecognition_Start_Method,
WebDXFeature::kSpeechRecognition},
{WebFeature::kV8SpeechSynthesis_Speak_Method,
WebDXFeature::kSpeechSynthesis},
{WebFeature::kStorageAccessAPI_HasStorageAccess_Method,
WebDXFeature::kStorageAccess},
{WebFeature::kStorageAccessAPI_requestStorageAccess_Method,
WebDXFeature::kStorageAccess},
{WebFeature::kStorageAccessAPI_requestStorageAccessFor_Method,
WebDXFeature::kStorageAccess},
{WebFeature::kStorageAccessAPI_requestStorageAccess_BeyondCookies,
WebDXFeature::kNonCookieStorageAccess},
{WebFeature::kStorageAccessAPI_hasUnpartitionedCookieAccess,
WebDXFeature::kNonCookieStorageAccess},
{WebFeature::kStorageBucketsOpen, WebDXFeature::kStorageBuckets},
{WebFeature::kCSSSelectorTargetText, WebDXFeature::kTargetText},
{WebFeature::kHTMLTemplateElement, WebDXFeature::kTemplate},
{WebFeature::kTextWrapBalance, WebDXFeature::kTextWrapBalance},
{WebFeature::kTextWrapPretty, WebDXFeature::kTextWrapPretty},
{WebFeature::kCSSSelectorUserValid, WebDXFeature::kUserPseudos},
{WebFeature::kCSSSelectorUserInvalid, WebDXFeature::kUserPseudos},
{WebFeature::kWebCodecs, WebDXFeature::kWebcodecs},
{WebFeature::kHidDeviceOpen, WebDXFeature::kWebhid},
{WebFeature::kV8LockManager_Request_Method, WebDXFeature::kWebLocks},
{WebFeature::kWebPImage, WebDXFeature::kWebp},
{WebFeature::kWebTransport, WebDXFeature::kWebtransport},
{WebFeature::kUsbDeviceOpen, WebDXFeature::kWebusb},
{WebFeature::kVTTCue, WebDXFeature::kWebvtt},
{WebFeature::kCSSSelectorPseudoWhere, WebDXFeature::kWhere},
{WebFeature::kDataListElement, WebDXFeature::kDatalist},
{WebFeature::kCSSSelectorPseudoDir, WebDXFeature::kDirPseudo},
{WebFeature::kHiddenUntilFoundAttribute,
WebDXFeature::kHiddenUntilFound},
{WebFeature::kAbortSignalAny, WebDXFeature::kAbortsignalAny},
{WebFeature::kAttributionReportingAPIAll,
WebDXFeature::kAttributionReporting},
{WebFeature::kNavigationAPI, WebDXFeature::kNavigation},
{WebFeature::kMathMLMathElement, WebDXFeature::kMathml},
{WebFeature::kCanvasRenderingContext2DConicGradient,
WebDXFeature::kCanvasCreateconicgradient},
{WebFeature::kCanvasRenderingContext2DReset,
WebDXFeature::kCanvasReset},
{WebFeature::kCanvasRenderingContext2DRoundRect,
WebDXFeature::kCanvasRoundrect},
{WebFeature::kCookieStoreAPI, WebDXFeature::kCookieStore},
{WebFeature::kCSSColorMixFunction, WebDXFeature::kColorMix},
{WebFeature::kImageSet, WebDXFeature::kImageSet},
{WebFeature::kStructuredCloneMethod, WebDXFeature::kStructuredClone},
{WebFeature::kSlotAssignNode, WebDXFeature::kSlotAssign},
{WebFeature::kDeviceMotionSecureOrigin,
WebDXFeature::kDeviceOrientationEvents},
{WebFeature::kDeviceOrientationAbsoluteSecureOrigin,
WebDXFeature::kDeviceOrientationEvents},
{WebFeature::kDeviceOrientationSecureOrigin,
WebDXFeature::kDeviceOrientationEvents},
{WebFeature::kGamepadButtons, WebDXFeature::kGamepad},
{WebFeature::kWakeLockAcquireScreenLock,
WebDXFeature::kScreenWakeLock},
{WebFeature::kWakeLockAcquireSystemLock,
WebDXFeature::kScreenWakeLock},
{WebFeature::kWebBluetoothRemoteServerConnect,
WebDXFeature::kWebBluetooth},
{WebFeature::kWebNfcNdefReaderScan, WebDXFeature::kWebNfc},
{WebFeature::kWebGPURequestAdapter, WebDXFeature::kWebgpu},
{WebFeature::kSerialPortOpen, WebDXFeature::kSerial},
{WebFeature::kModuleDedicatedWorker, WebDXFeature::kJsModulesWorkers},
{WebFeature::kModuleSharedWorker,
WebDXFeature::kJsModulesSharedWorkers},
{WebFeature::kCssDisplayPropertyMultipleValues,
WebDXFeature::kTwoValueDisplay},
{WebFeature::kTwoValuedOverflow, WebDXFeature::kOverflowShorthand},
{WebFeature::kKeyboardApiGetLayoutMap, WebDXFeature::kKeyboardMap},
{WebFeature::kSchedulerPostTask, WebDXFeature::kScheduler},
{WebFeature::kSchedulerYield, WebDXFeature::kScheduler},
{WebFeature::kTaskControllerConstructor, WebDXFeature::kScheduler},
{WebFeature::kTaskControllerSetPriority, WebDXFeature::kScheduler},
{WebFeature::kTaskSignalPriority, WebDXFeature::kScheduler},
{WebFeature::kKeyboardApiLock, WebDXFeature::kKeyboardLock},
{WebFeature::kAsyncClipboardAPIRead, WebDXFeature::kAsyncClipboard},
{WebFeature::kAsyncClipboardAPIWrite, WebDXFeature::kAsyncClipboard},
{WebFeature::kAsyncClipboardAPIReadText,
WebDXFeature::kAsyncClipboard},
{WebFeature::kAsyncClipboardAPIWriteText,
WebDXFeature::kAsyncClipboard},
{WebFeature::kHtmlClipboardApiUnsanitizedRead,
WebDXFeature::kClipboardUnsanitizedFormats},
{WebFeature::kClipboardCustomFormatRead,
WebDXFeature::kClipboardCustomFormat},
{WebFeature::kClipboardCustomFormatWrite,
WebDXFeature::kClipboardCustomFormat},
{WebFeature::kClipboardSvgRead, WebDXFeature::kClipboardSvg},
{WebFeature::kClipboardSvgWrite, WebDXFeature::kClipboardSvg},
{WebFeature::kV8ClipboardItem_Supports_Method,
WebDXFeature::kClipboardSupports},
{WebFeature::kV8AbortController_Constructor, WebDXFeature::kAborting},
{WebFeature::kV8AbortSignal_Abort_Method, WebDXFeature::kAborting},
{WebFeature::kAbortSignalTimeout, WebDXFeature::kAborting},
{WebFeature::kEditContext, WebDXFeature::kEditContext},
{WebFeature::kInertAttribute, WebDXFeature::kInert},
{WebFeature::kSegmenter, WebDXFeature::kIntlSegmenter},
{WebFeature::kEyeDropperOpen, WebDXFeature::kEyedropper},
{WebFeature::kElementCheckVisibility, WebDXFeature::kCheckVisibility},
{WebFeature::kElementGetHTML, WebDXFeature::kGethtml},
{WebFeature::kHTMLCanvasElement, WebDXFeature::kCanvas},
{WebFeature::kCanvasUseColorSpace,
WebDXFeature::kCanvas2DColorManagement},
{WebFeature::kCSSAtRuleStartingStyle, WebDXFeature::kStartingStyle},
{WebFeature::kCaretPositionFromPoint,
WebDXFeature::kDocumentCaretpositionfrompoint},
{WebFeature::kMeasureMemory, WebDXFeature::kMeasureMemory},
{WebFeature::kMediaQueryRangeSyntax,
WebDXFeature::kMediaQueryRangeSyntax},
{WebFeature::kCSSRegisterProperty,
WebDXFeature::kRegisteredCustomProperties},
{WebFeature::kCSSAtRuleProperty,
WebDXFeature::kRegisteredCustomProperties},
{WebFeature::kAccelerometerConstructor, WebDXFeature::kAccelerometer},
{WebFeature::kLinearAccelerationSensorConstructor,
WebDXFeature::kAccelerometer},
{WebFeature::kGravitySensorConstructor, WebDXFeature::kAccelerometer},
{WebFeature::kV8AudioContext_Constructor, WebDXFeature::kWebAudio},
{WebFeature::kV8OfflineAudioContext_Constructor,
WebDXFeature::kOfflineAudioContext},
{WebFeature::kAudioWorkletNodeConstructor,
WebDXFeature::kAudioWorklet},
{WebFeature::kMIDIPortOpen, WebDXFeature::kWebMidi},
{WebFeature::kV8HTMLVideoElement_RequestVideoFrameCallback_Method,
WebDXFeature::kRequestVideoFrameCallback},
{WebFeature::kSvgContextFillOrStroke,
WebDXFeature::kContextFillStroke},
{WebFeature::kHasCapUnits, WebDXFeature::kCap},
{WebFeature::kHasRcapUnits, WebDXFeature::kRcap},
{WebFeature::kHasIcUnits, WebDXFeature::kIc},
{WebFeature::kHasRicUnits, WebDXFeature::kRic},
{WebFeature::kHasLhUnits, WebDXFeature::kLh},
{WebFeature::kHasRlhUnits, WebDXFeature::kRlh},
{WebFeature::kCSSNesting, WebDXFeature::kNesting},
{WebFeature::kCSSSelectorNthChildOfSelector,
WebDXFeature::kNthChildOf},
{WebFeature::kForcedColorsMediaFeature, WebDXFeature::kForcedColors},
{WebFeature::kCSSTrigFunctions, WebDXFeature::kTrigFunctions},
{WebFeature::kCSSColorGradientColorSpace,
WebDXFeature::kGradientInterpolation},
{WebFeature::kCSSCalcConstants, WebDXFeature::kCalcConstants},
{WebFeature::kHasChUnits, WebDXFeature::kCh},
{WebFeature::kHasRchUnits, WebDXFeature::kRch},
{WebFeature::kHasRexUnits, WebDXFeature::kRex},
{WebFeature::kCSSColorFunction, WebDXFeature::kColorFunction},
{WebFeature::kCSSColor_SpaceOkLxx, WebDXFeature::kOklab},
{WebFeature::kCSSColor_SpaceLxx, WebDXFeature::kLab},
{WebFeature::kCSSColor_SpaceHwb, WebDXFeature::kHwb},
{WebFeature::kCSSKeywordRevert, WebDXFeature::kRevertValue},
{WebFeature::kPrefersContrastMediaFeature,
WebDXFeature::kPrefersContrast},
{WebFeature::kPrefersReducedTransparencyMediaFeature,
WebDXFeature::kPrefersReducedTransparency},
{WebFeature::kCSSRoundModRemFunctions, WebDXFeature::kRoundModRem},
{WebFeature::kCSSExponentialFunctions, WebDXFeature::kExpFunctions},
{WebFeature::kCSSLinearEasing, WebDXFeature::kLinearEasing},
{WebFeature::kOverflowMediaQuery, WebDXFeature::kOverflow},
{WebFeature::kHasSpellingOrGrammarErrorPseudoElement,
WebDXFeature::kSpellingGrammarError},
{WebFeature::kDynamicRangeMediaQuery, WebDXFeature::kDynamicRange},
{WebFeature::kHasMarkerPseudoElement, WebDXFeature::kMarker},
{WebFeature::kDisplayModeMediaQuery, WebDXFeature::kDisplayMode},
{WebFeature::kCSSWordBreakAutoPhrase,
WebDXFeature::kWordBreakAutoPhrase},
{WebFeature::kCSSSelectorPseudoModal, WebDXFeature::kModal},
{WebFeature::kUpdateMediaQuery, WebDXFeature::kUpdate},
{WebFeature::kCSSSelectorPseudoFileSelectorButton,
WebDXFeature::kFileSelectorButton},
{WebFeature::kClipPathGeometryBox, WebDXFeature::kClipPathBoxes},
{WebFeature::kActiveViewTransitionPseudo,
WebDXFeature::kActiveViewTransition},
{WebFeature::kSnapEvent, WebDXFeature::kScrollSnapEvents},
{WebFeature::kScrollTimelineConstructor,
WebDXFeature::kScrollDrivenAnimations},
{WebFeature::kViewTimelineConstructor,
WebDXFeature::kScrollDrivenAnimations},
{WebFeature::kScrollFunctionTimeline,
WebDXFeature::kScrollDrivenAnimations},
{WebFeature::kViewFunctionTimeline,
WebDXFeature::kScrollDrivenAnimations},
{WebFeature::kHighlightAPIRegisterHighlight,
WebDXFeature::kHighlight},
{WebFeature::kV8Element_Animate_Method, WebDXFeature::kWebAnimations},
{WebFeature::kV8Document_GetAnimations_Method,
WebDXFeature::kWebAnimations},
{WebFeature::kV8ShadowRoot_GetAnimations_Method,
WebDXFeature::kWebAnimations},
{WebFeature::kV8Element_GetAnimations_Method,
WebDXFeature::kWebAnimations},
{WebFeature::kV8Animation_Constructor, WebDXFeature::kWebAnimations},
{WebFeature::kCSSAtRuleViewTransition,
WebDXFeature::kCrossDocumentViewTransitions},
{WebFeature::kCSSCalcSizeFunction, WebDXFeature::kCalcSize},
{WebFeature::kLongAnimationFrameObserver,
WebDXFeature::kLongAnimationFrames},
{WebFeature::kLongAnimationFrameRequested,
WebDXFeature::kLongAnimationFrames},
{WebFeature::kVisibilityStateObserver,
WebDXFeature::kPageVisibilityState},
{WebFeature::kFedCm, WebDXFeature::kFedcm},
{WebFeature::kWebOTP, WebDXFeature::kWebOtp},
{WebFeature::kPreservesPitch, WebDXFeature::kPreservesPitch},
{WebFeature::kV8HTMLMediaElement_Remote_AttributeGetter,
WebDXFeature::kRemotePlayback},
{WebFeature::kVerticalFormControls,
WebDXFeature::kVerticalFormControls},
{WebFeature::kNavigatorPdfViewerEnabled, WebDXFeature::kPdfViewer},
{WebFeature::kReferrerPolicyHeader, WebDXFeature::kReferrerPolicy},
{WebFeature::kHTMLAnchorElementReferrerPolicyAttribute,
WebDXFeature::kReferrerPolicy},
{WebFeature::kHTMLElementWritingSuggestions,
WebDXFeature::kWritingsuggestions},
{WebFeature::kHTMLIFrameElementReferrerPolicyAttribute,
WebDXFeature::kReferrerPolicy},
{WebFeature::kHTMLImageElementReferrerPolicyAttribute,
WebDXFeature::kReferrerPolicy},
{WebFeature::kHTMLLinkElementReferrerPolicyAttribute,
WebDXFeature::kReferrerPolicy},
{WebFeature::kV8Ink_RequestPresenter_Method, WebDXFeature::kInk},
{WebFeature::kVirtualKeyboardHide, WebDXFeature::kVirtualKeyboard},
{WebFeature::kVirtualKeyboardOverlayPolicy,
WebDXFeature::kVirtualKeyboard},
{WebFeature::kVirtualKeyboardShow, WebDXFeature::kVirtualKeyboard},
{WebFeature::kDurationFormat, WebDXFeature::kIntlDurationFormat},
{WebFeature::kWebAppWindowControlsOverlay,
WebDXFeature::kWindowControlsOverlay},
{WebFeature::kPriorityHints, WebDXFeature::kFetchPriority},
{WebFeature::kBarPropLocationbar, WebDXFeature::kBarprop},
{WebFeature::kBarPropMenubar, WebDXFeature::kBarprop},
{WebFeature::kBarPropPersonalbar, WebDXFeature::kBarprop},
{WebFeature::kBarPropScrollbars, WebDXFeature::kBarprop},
{WebFeature::kBarPropStatusbar, WebDXFeature::kBarprop},
{WebFeature::kBarPropToolbar, WebDXFeature::kBarprop},
{WebFeature::kDocumentBeforeUnloadRegistered,
WebDXFeature::kBeforeunload},
{WebFeature::kLayoutShiftExplicitlyRequested,
WebDXFeature::kLayoutInstability},
{WebFeature::kJSSelfProfiling, WebDXFeature::kProfiler},
{WebFeature::kZstdContentEncoding, WebDXFeature::kZstd},
{WebFeature::kColumnPseudoElement, WebDXFeature::kColumnPseudo},
{WebFeature::kScrollButtonPseudoElement,
WebDXFeature::kScrollButtons},
{WebFeature::kScrollMarkerPseudoElement,
WebDXFeature::kScrollMarkers},
{WebFeature::kPopoverTypeHint, WebDXFeature::kPopoverHint},
{WebFeature::kFileHandlingLaunch, WebDXFeature::kAppFileHandlers},
{WebFeature::kWebAppManifestProtocolHandlers,
WebDXFeature::kAppProtocolHandlers},
{WebFeature::kBadgeSetWithoutNotificationPermissionInBrowserWindow,
WebDXFeature::kBadging},
{WebFeature::kBadgeSetWithoutNotificationPermissionInAppWindow,
WebDXFeature::kBadging},
{WebFeature::kBadgeSetWithoutNotificationPermissionInWorker,
WebDXFeature::kBadging},
{WebFeature::kBeforeInstallPromptEvent,
WebDXFeature::kBeforeinstallprompt},
{WebFeature::kBeforeInstallPromptEventUserChoice,
WebDXFeature::kBeforeinstallprompt},
{WebFeature::kBeforeInstallPromptEventPreventDefault,
WebDXFeature::kBeforeinstallprompt},
{WebFeature::kBeforeInstallPromptEventPrompt,
WebDXFeature::kBeforeinstallprompt},
{WebFeature::kV8BeforeInstallPromptEvent_Platforms_AttributeGetter,
WebDXFeature::kBeforeinstallprompt},
{WebFeature::kWebAppManifestLaunchHandler,
WebDXFeature::kAppLaunchHandler},
{WebFeature::kCSSFunctions, WebDXFeature::kFunction},
{WebFeature::kSelectionGetComposedRanges,
WebDXFeature::kComposedRanges},
{WebFeature::kSharedDictionaryUsed,
WebDXFeature::kCompressionDictionaryTransport},
{WebFeature::kHttp3, WebDXFeature::kHttp3},
{WebFeature::kSpeculationRules, WebDXFeature::kSpeculationRules},
{WebFeature::kElementCapture, WebDXFeature::kElementCapture},
{WebFeature::kRegionCapture, WebDXFeature::kRegionCapture},
{WebFeature::kUnprefixedRequestAnimationFrame,
WebDXFeature::kRequestAnimationFrame},
{WebFeature::kAnonymousIframe, WebDXFeature::kIframeCredentialless},
{WebFeature::kV8URLPattern_Constructor, WebDXFeature::kUrlpattern},
{WebFeature::kV8URLPattern_Test_Method, WebDXFeature::kUrlpattern},
{WebFeature::kV8URLPattern_Exec_Method, WebDXFeature::kUrlpattern},
{WebFeature::kV8URLPattern_CompareComponent_Method,
WebDXFeature::kUrlpattern},
{WebFeature::kV8AuthenticatorAttestationResponse_GetPublicKey_Method,
WebDXFeature::kWebauthnPublicKeyEasy},
{WebFeature::kDisplayNames, WebDXFeature::kIntlDisplayNames},
{WebFeature::kCSSSelectorPseudoState, WebDXFeature::kState},
{WebFeature::kV8Window_GetScreenDetails_Method,
WebDXFeature::kWindowManagement},
{WebFeature::kCSSLightDark, WebDXFeature::kLightDark},
{WebFeature::kV8Window_RequestIdleCallback_Method,
WebDXFeature::kRequestidlecallback},
{WebFeature::kClearSiteData, WebDXFeature::kClearSiteData},
{WebFeature::kClientHintsUA, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUABitness, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAFormFactors, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAFullVersion, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAFullVersionList,
WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAMobile, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAModel, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAPlatform, WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAPlatformVersion,
WebDXFeature::kUaClientHints},
{WebFeature::kClientHintsUAWoW64, WebDXFeature::kUaClientHints},
{WebFeature::kNavigatorUAData_GetHighEntropyValues,
WebDXFeature::kUaClientHints},
{WebFeature::kNavigatorUAData_Mobile, WebDXFeature::kUaClientHints},
{WebFeature::kNavigatorUAData_Platform, WebDXFeature::kUaClientHints},
{WebFeature::kNavigatorUAData_Brands, WebDXFeature::kUaClientHints},
{WebFeature::kNavigatorUAData_toJSON, WebDXFeature::kUaClientHints},
{WebFeature::kSelectElementAppearanceBaseSelect,
WebDXFeature::kCustomizableSelect},
// Add new features above this line.
}};
return *kMap;
}
const base::flat_map<blink::mojom::CSSSampleId, blink::mojom::WebDXFeature>&
UseCounterMetricsRecorder::GetCSSProperties2WebDXFeatureMap() {
static constexpr WebDXFeature logical_properties =
WebDXFeature::kLogicalProperties;
static const base::NoDestructor<
const base::flat_map<CSSSampleId, WebDXFeature>>
kMap{{
{CSSSampleId::kAccentColor, WebDXFeature::kAccentColor},
{CSSSampleId::kAnchorName, WebDXFeature::kAnchorPositioning},
{CSSSampleId::kAnimationComposition,
WebDXFeature::kAnimationComposition},
{CSSSampleId::kAppearance, WebDXFeature::kAppearance},
{CSSSampleId::kAspectRatio, WebDXFeature::kAspectRatio},
{CSSSampleId::kBackdropFilter, WebDXFeature::kBackdropFilter},
{CSSSampleId::kBorderImage, WebDXFeature::kBorderImage},
{CSSSampleId::kColorScheme, WebDXFeature::kColorScheme},
{CSSSampleId::kContainIntrinsicSize,
WebDXFeature::kContainIntrinsicSize},
{CSSSampleId::kFieldSizing, WebDXFeature::kFieldSizing},
{CSSSampleId::kFontOpticalSizing, WebDXFeature::kFontOpticalSizing},
{CSSSampleId::kFontPalette, WebDXFeature::kFontPalette},
{CSSSampleId::kFontSizeAdjust, WebDXFeature::kFontSizeAdjust},
{CSSSampleId::kFontSynthesisSmallCaps,
WebDXFeature::kFontSynthesisSmallCaps},
{CSSSampleId::kFontSynthesisStyle, WebDXFeature::kFontSynthesisStyle},
{CSSSampleId::kFontSynthesisWeight,
WebDXFeature::kFontSynthesisWeight},
{CSSSampleId::kFontSynthesis, WebDXFeature::kFontSynthesis},
{CSSSampleId::kFontVariantAlternates,
WebDXFeature::kFontVariantAlternates},
{CSSSampleId::kFontVariantEmoji, WebDXFeature::kFontVariantEmoji},
{CSSSampleId::kHyphens, WebDXFeature::kHyphens},
{CSSSampleId::kScrollbarColor, WebDXFeature::kScrollbarColor},
{CSSSampleId::kScrollbarGutter, WebDXFeature::kScrollbarGutter},
{CSSSampleId::kScrollbarWidth, WebDXFeature::kScrollbarWidth},
{CSSSampleId::kScrollSnapType, WebDXFeature::kScrollSnap},
{CSSSampleId::kScrollInitialTarget,
WebDXFeature::kScrollInitialTarget},
{CSSSampleId::kTextBox, WebDXFeature::kTextBox},
{CSSSampleId::kTextBoxEdge, WebDXFeature::kTextBox},
{CSSSampleId::kTextBoxTrim, WebDXFeature::kTextBox},
{CSSSampleId::kTextIndent, WebDXFeature::kTextIndent},
{CSSSampleId::kTextSpacingTrim, WebDXFeature::kTextSpacingTrim},
{CSSSampleId::kTextUnderlineOffset,
WebDXFeature::kTextUnderlineOffset},
{CSSSampleId::kTransitionBehavior, WebDXFeature::kTransitionBehavior},
{CSSSampleId::kTranslate, WebDXFeature::kIndividualTransforms},
{CSSSampleId::kRotate, WebDXFeature::kIndividualTransforms},
{CSSSampleId::kScale, WebDXFeature::kIndividualTransforms},
{CSSSampleId::kWillChange, WebDXFeature::kWillChange},
{CSSSampleId::kMaskImage, WebDXFeature::kMasks},
{CSSSampleId::kMaskClip, WebDXFeature::kMasks},
{CSSSampleId::kMaskSize, WebDXFeature::kMasks},
{CSSSampleId::kMaskOrigin, WebDXFeature::kMasks},
{CSSSampleId::kMaskRepeat, WebDXFeature::kMasks},
{CSSSampleId::kMaskComposite, WebDXFeature::kMasks},
{CSSSampleId::kMaskPosition, WebDXFeature::kMasks},
{CSSSampleId::kMaskMode, WebDXFeature::kMasks},
{CSSSampleId::kMask, WebDXFeature::kMasks},
{CSSSampleId::kPaintOrder, WebDXFeature::kPaintOrder},
{CSSSampleId::kBackgroundClip, WebDXFeature::kBackgroundClipText},
{CSSSampleId::kContainIntrinsicInlineSize,
WebDXFeature::kContainInlineSize},
{CSSSampleId::kOverlay, WebDXFeature::kOverlay},
{CSSSampleId::kContentVisibility, WebDXFeature::kContentVisibility},
{CSSSampleId::kCounterSet, WebDXFeature::kCounterSet},
{CSSSampleId::kObjectViewBox, WebDXFeature::kObjectViewBox},
{CSSSampleId::kForcedColorAdjust, WebDXFeature::kForcedColors},
{CSSSampleId::kWhiteSpaceCollapse, WebDXFeature::kWhiteSpaceCollapse},
{CSSSampleId::kImageOrientation, WebDXFeature::kImageOrientation},
// https://drafts.csswg.org/css-logical-1/
{CSSSampleId::kBlockSize, logical_properties},
{CSSSampleId::kInlineSize, logical_properties},
{CSSSampleId::kMinBlockSize, logical_properties},
{CSSSampleId::kMaxBlockSize, logical_properties},
{CSSSampleId::kMinInlineSize, logical_properties},
{CSSSampleId::kMaxInlineSize, logical_properties},
{CSSSampleId::kMarginBlockStart, logical_properties},
{CSSSampleId::kMarginBlockEnd, logical_properties},
{CSSSampleId::kMarginInlineStart, logical_properties},
{CSSSampleId::kMarginInlineEnd, logical_properties},
{CSSSampleId::kInsetBlockStart, logical_properties},
{CSSSampleId::kInsetBlockEnd, logical_properties},
{CSSSampleId::kInsetInlineStart, logical_properties},
{CSSSampleId::kInsetInlineEnd, logical_properties},
{CSSSampleId::kPaddingBlockStart, logical_properties},
{CSSSampleId::kPaddingBlockEnd, logical_properties},
{CSSSampleId::kPaddingInlineStart, logical_properties},
{CSSSampleId::kPaddingInlineEnd, logical_properties},
{CSSSampleId::kBorderBlockStartWidth, logical_properties},
{CSSSampleId::kBorderBlockEndWidth, logical_properties},
{CSSSampleId::kBorderInlineStartWidth, logical_properties},
{CSSSampleId::kBorderInlineEndWidth, logical_properties},
{CSSSampleId::kBorderBlockStartStyle, logical_properties},
{CSSSampleId::kBorderBlockEndStyle, logical_properties},
{CSSSampleId::kBorderInlineStartStyle, logical_properties},
{CSSSampleId::kBorderInlineEndStyle, logical_properties},
{CSSSampleId::kBorderBlockStartColor, logical_properties},
{CSSSampleId::kBorderBlockEndColor, logical_properties},
{CSSSampleId::kBorderInlineStartColor, logical_properties},
{CSSSampleId::kBorderInlineEndColor, logical_properties},
{CSSSampleId::kBorderStartStartRadius, logical_properties},
{CSSSampleId::kBorderEndEndRadius, logical_properties},
{CSSSampleId::kBorderStartEndRadius, logical_properties},
{CSSSampleId::kBorderEndStartRadius, logical_properties},
{CSSSampleId::kFontVariantPosition,
WebDXFeature::kFontVariantPosition},
{CSSSampleId::kTextEmphasis, WebDXFeature::kTextEmphasis},
{CSSSampleId::kTextWrap, WebDXFeature::kTextWrap},
{CSSSampleId::kTextWrapStyle, WebDXFeature::kTextWrapStyle},
{CSSSampleId::kOffsetPath, WebDXFeature::kMotionPath},
{CSSSampleId::kOutline, WebDXFeature::kOutline},
{CSSSampleId::kTransformBox, WebDXFeature::kTransformBox},
{CSSSampleId::kRubyAlign, WebDXFeature::kRubyAlign},
{CSSSampleId::kRubyPosition, WebDXFeature::kRubyPosition},
{CSSSampleId::kInitialLetter, WebDXFeature::kInitialLetter},
{CSSSampleId::kHyphenateCharacter, WebDXFeature::kHyphenateCharacter},
{CSSSampleId::kHyphenateLimitChars,
WebDXFeature::kHyphenateLimitChars},
{CSSSampleId::kQuotes, WebDXFeature::kQuotes},
{CSSSampleId::kBaselineSource, WebDXFeature::kBaselineSource},
{CSSSampleId::kClipPath, WebDXFeature::kClipPath},
{CSSSampleId::kBoxDecorationBreak, WebDXFeature::kBoxDecorationBreak},
{CSSSampleId::kPageOrientation, WebDXFeature::kPageOrientation},
{CSSSampleId::kScrollTimeline, WebDXFeature::kScrollDrivenAnimations},
{CSSSampleId::kScrollTimelineName,
WebDXFeature::kScrollDrivenAnimations},
{CSSSampleId::kViewTimeline, WebDXFeature::kScrollDrivenAnimations},
{CSSSampleId::kViewTimelineName,
WebDXFeature::kScrollDrivenAnimations},
{CSSSampleId::kInterpolateSize, WebDXFeature::kInterpolateSize},
{CSSSampleId::kViewTransitionClass,
WebDXFeature::kViewTransitionClass},
{CSSSampleId::kScrollMarkerGroup, WebDXFeature::kScrollMarkers},
{CSSSampleId::kInteractivity, WebDXFeature::kInteractivity},
{CSSSampleId::kReadingFlow, WebDXFeature::kReadingFlow},
{CSSSampleId::kPrintColorAdjust, WebDXFeature::kPrintColorAdjust},
{CSSSampleId::kLineBreak, WebDXFeature::kLineBreak},
// Add new features above this line.
}};
return *kMap;
}
const base::flat_map<blink::mojom::CSSSampleId, blink::mojom::WebDXFeature>&
UseCounterMetricsRecorder::GetAnimatedCSSProperties2WebDXFeatureMap() {
static const base::NoDestructor<
const base::flat_map<CSSSampleId, WebDXFeature>>
kMap{{
// TODO(jstenback): This animated kFontPalette is being investigated.
// Uncomment this once that's resolved, or replace this with something
// else that matches the resolution of the investigation
// {CSSSampleId::kFontPalette, WebDXFeature::kFontPaletteAnimation}
{CSSSampleId::kDisplay, WebDXFeature::kDisplayAnimation},
// Add new features above this line.
}};
return *kMap;
}
|