chrome-devtools-frontend 1.0.1362775 → 1.0.1367881

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.stylelintrc.json +2 -1
  3. package/config/gni/devtools_grd_files.gni +14 -2
  4. package/config/gni/devtools_image_files.gni +2 -1
  5. package/docs/contributing/issues.md +15 -0
  6. package/extensions/cxx_debugging/src/ExtensionOptions.ts +0 -1
  7. package/extensions/cxx_debugging/third_party/llvm/README.chromium +1 -1
  8. package/front_end/.eslintrc.js +0 -5
  9. package/front_end/Images/src/button-magic.svg +3 -0
  10. package/front_end/Images/src/performance-panel-delete-annotation.svg +32 -0
  11. package/front_end/Images/src/performance-panel-diagram.svg +19 -14
  12. package/front_end/Images/src/performance-panel-entry-label.svg +9 -16
  13. package/front_end/Images/src/performance-panel-time-range.svg +2 -8
  14. package/front_end/core/common/AppProvider.ts +1 -1
  15. package/front_end/core/common/Object.ts +2 -7
  16. package/front_end/core/common/SettingRegistration.ts +1 -1
  17. package/front_end/core/common/Settings.ts +1 -1
  18. package/front_end/core/host/AidaClient.ts +7 -1
  19. package/front_end/core/host/InspectorFrontendHost.ts +1 -1
  20. package/front_end/core/host/ResourceLoader.ts +1 -1
  21. package/front_end/core/host/UserMetrics.ts +14 -2
  22. package/front_end/core/i18n/time-utilities.ts +7 -1
  23. package/front_end/core/platform/ArrayUtilities.ts +1 -0
  24. package/front_end/core/platform/DevToolsPath.ts +1 -1
  25. package/front_end/core/platform/Timing.ts +1 -1
  26. package/front_end/core/platform/UIString.ts +1 -1
  27. package/front_end/core/platform/UserVisibleError.ts +1 -1
  28. package/front_end/core/root/Runtime.ts +11 -2
  29. package/front_end/core/sdk/AccessibilityModel.ts +3 -4
  30. package/front_end/core/sdk/CPUProfilerModel.ts +3 -4
  31. package/front_end/core/sdk/CSSContainerQuery.ts +3 -3
  32. package/front_end/core/sdk/CSSLayer.ts +2 -2
  33. package/front_end/core/sdk/CSSMatchedStyles.test.ts +1 -0
  34. package/front_end/core/sdk/CSSMatchedStyles.ts +10 -2
  35. package/front_end/core/sdk/CSSMedia.ts +2 -2
  36. package/front_end/core/sdk/CSSMetadata.ts +21 -0
  37. package/front_end/core/sdk/CSSModel.ts +1 -0
  38. package/front_end/core/sdk/CSSProperty.ts +2 -2
  39. package/front_end/core/sdk/CSSQuery.ts +2 -2
  40. package/front_end/core/sdk/CSSRule.ts +2 -2
  41. package/front_end/core/sdk/CSSScope.ts +2 -2
  42. package/front_end/core/sdk/CSSStyleDeclaration.ts +3 -3
  43. package/front_end/core/sdk/CSSStyleSheetHeader.ts +4 -4
  44. package/front_end/core/sdk/CSSSupports.ts +2 -2
  45. package/front_end/core/sdk/CookieModel.ts +1 -1
  46. package/front_end/core/sdk/DOMDebuggerModel.ts +1 -1
  47. package/front_end/core/sdk/DebuggerModel.ts +9 -3
  48. package/front_end/core/sdk/EnhancedTracesParser.test.ts +1 -5
  49. package/front_end/core/sdk/EnhancedTracesParser.ts +2 -6
  50. package/front_end/core/sdk/EventBreakpointsModel.ts +1 -2
  51. package/front_end/core/sdk/FrameAssociated.ts +1 -1
  52. package/front_end/core/sdk/FrameManager.ts +9 -7
  53. package/front_end/core/sdk/HeapProfilerModel.ts +3 -4
  54. package/front_end/core/sdk/IsolateManager.ts +2 -3
  55. package/front_end/core/sdk/LayerTreeBase.ts +2 -2
  56. package/front_end/core/sdk/NetworkManager.ts +1 -1
  57. package/front_end/core/sdk/OverlayModel.ts +2 -2
  58. package/front_end/core/sdk/OverlayPersistentHighlighter.ts +1 -1
  59. package/front_end/core/sdk/PageLoad.ts +1 -1
  60. package/front_end/core/sdk/PageResourceLoader.ts +1 -1
  61. package/front_end/core/sdk/RemoteObject.ts +3 -3
  62. package/front_end/core/sdk/Resource.ts +2 -2
  63. package/front_end/core/sdk/ResourceTreeModel.ts +1 -1
  64. package/front_end/core/sdk/SDKModel.ts +1 -1
  65. package/front_end/core/sdk/Script.ts +5 -5
  66. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +5 -7
  67. package/front_end/core/sdk/SourceMap.ts +1 -1
  68. package/front_end/core/sdk/SourceMapManager.ts +1 -1
  69. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
  70. package/front_end/core/sdk/SourceMapScopesInfo.ts +2 -2
  71. package/front_end/core/sdk/Target.ts +3 -2
  72. package/front_end/core/sdk/TargetManager.ts +4 -1
  73. package/front_end/core/sdk/WebAuthnModel.ts +20 -0
  74. package/front_end/core/sdk/sdk-meta.ts +7 -0
  75. package/front_end/devtools_compatibility.js +3 -3
  76. package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +1 -1
  77. package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +1 -1
  78. package/front_end/entrypoints/formatter_worker/IdentityFormatter.ts +1 -1
  79. package/front_end/entrypoints/formatter_worker/JSONFormatter.ts +1 -1
  80. package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +1 -1
  81. package/front_end/entrypoints/heap_snapshot_worker/AllocationProfile.ts +1 -1
  82. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +12 -12
  83. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
  84. package/front_end/entrypoints/main/MainImpl.ts +11 -1
  85. package/front_end/generated/InspectorBackendCommands.js +5 -3
  86. package/front_end/generated/SupportedCSSProperties.js +20 -14
  87. package/front_end/generated/protocol-mapping.d.ts +10 -0
  88. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  89. package/front_end/generated/protocol.ts +32 -1
  90. package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +4 -2
  91. package/front_end/models/bindings/CSSWorkspaceBinding.ts +2 -2
  92. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -2
  93. package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +1 -1
  94. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
  95. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
  96. package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
  97. package/front_end/models/bindings/IgnoreListManager.test.ts +49 -12
  98. package/front_end/models/bindings/IgnoreListManager.ts +79 -5
  99. package/front_end/models/bindings/ResourceMapping.ts +1 -1
  100. package/front_end/models/bindings/StylesSourceMapping.ts +11 -6
  101. package/front_end/models/breakpoints/BreakpointManager.test.ts +1 -1
  102. package/front_end/models/extensions/ExtensionPanel.ts +1 -1
  103. package/front_end/models/extensions/ExtensionServer.test.ts +1 -1
  104. package/front_end/models/extensions/ExtensionServer.ts +1 -1
  105. package/front_end/models/extensions/ExtensionView.ts +1 -1
  106. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +1 -1
  107. package/front_end/models/extensions/RecorderPluginManager.ts +1 -1
  108. package/front_end/models/har/Importer.ts +1 -1
  109. package/front_end/models/issues_manager/AttributionReportingIssue.ts +1 -1
  110. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -2
  111. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +1 -1
  112. package/front_end/models/issues_manager/CorsIssue.ts +1 -1
  113. package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
  114. package/front_end/models/issues_manager/Issue.ts +1 -1
  115. package/front_end/models/issues_manager/IssueResolver.ts +2 -2
  116. package/front_end/models/issues_manager/IssuesManager.ts +1 -1
  117. package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
  118. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  119. package/front_end/models/issues_manager/PropertyRuleIssue.ts +1 -1
  120. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  121. package/front_end/models/issues_manager/RelatedIssue.ts +1 -1
  122. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +3 -3
  123. package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +1 -1
  124. package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +1 -1
  125. package/front_end/models/javascript_metadata/NativeFunctions.js +69 -61
  126. package/front_end/models/live-metrics/LiveMetrics.ts +41 -34
  127. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +1 -1
  128. package/front_end/models/persistence/EditFileSystemView.ts +1 -1
  129. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +2 -3
  130. package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -3
  131. package/front_end/models/persistence/WorkspaceSettingsTab.ts +2 -2
  132. package/front_end/models/text_utils/ContentProvider.ts +3 -3
  133. package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
  134. package/front_end/models/text_utils/TextUtils.ts +1 -1
  135. package/front_end/models/text_utils/WasmDisassembly.ts +1 -1
  136. package/front_end/models/timeline_model/TimelineProfileTree.test.ts +21 -21
  137. package/front_end/models/timeline_model/TimelineProfileTree.ts +1 -1
  138. package/front_end/models/trace/ModelImpl.test.ts +1 -1
  139. package/front_end/models/trace/ModelImpl.ts +10 -27
  140. package/front_end/models/trace/Processor.test.ts +16 -15
  141. package/front_end/models/trace/Processor.ts +33 -9
  142. package/front_end/models/trace/extras/FilmStrip.ts +2 -2
  143. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +2 -2
  144. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +10 -1
  145. package/front_end/models/trace/handlers/MetaHandler.ts +4 -0
  146. package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +1 -1
  147. package/front_end/models/trace/handlers/RendererHandler.test.ts +1 -1
  148. package/front_end/models/trace/handlers/SamplesHandler.test.ts +2 -2
  149. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +5 -4
  150. package/front_end/models/trace/handlers/ScreenshotsHandler.ts +7 -5
  151. package/front_end/models/trace/handlers/Threads.ts +2 -2
  152. package/front_end/models/trace/handlers/WarningsHandler.ts +1 -1
  153. package/front_end/models/trace/helpers/Network.ts +20 -2
  154. package/front_end/models/trace/helpers/SyntheticEvents.test.ts +1 -1
  155. package/front_end/models/trace/helpers/Trace.test.ts +34 -3
  156. package/front_end/models/trace/helpers/Trace.ts +12 -0
  157. package/front_end/models/trace/helpers/TreeHelpers.test.ts +52 -0
  158. package/front_end/models/trace/helpers/TreeHelpers.ts +80 -1
  159. package/front_end/models/trace/insights/Common.ts +1 -1
  160. package/front_end/models/trace/insights/CumulativeLayoutShift.test.ts +24 -2
  161. package/front_end/models/trace/insights/CumulativeLayoutShift.ts +102 -27
  162. package/front_end/models/trace/insights/DocumentLatency.test.ts +22 -11
  163. package/front_end/models/trace/insights/DocumentLatency.ts +9 -6
  164. package/front_end/models/trace/insights/FontDisplay.ts +5 -1
  165. package/front_end/models/trace/insights/InteractionToNextPaint.ts +4 -3
  166. package/front_end/models/trace/insights/LargestContentfulPaint.test.ts +9 -1
  167. package/front_end/models/trace/insights/LargestContentfulPaint.ts +26 -6
  168. package/front_end/models/trace/insights/RenderBlocking.test.ts +10 -16
  169. package/front_end/models/trace/insights/RenderBlocking.ts +6 -4
  170. package/front_end/models/trace/insights/SlowCSSSelector.ts +3 -1
  171. package/front_end/models/trace/insights/ThirdPartyWeb.ts +15 -2
  172. package/front_end/models/trace/insights/Viewport.ts +1 -0
  173. package/front_end/models/trace/insights/types.ts +14 -11
  174. package/front_end/models/trace/lantern/graph/BaseNode.ts +2 -2
  175. package/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +4 -3
  176. package/front_end/models/trace/lantern/simulation/TCPConnection.ts +1 -1
  177. package/front_end/models/trace/lantern/testing/MetricTestUtils.ts +1 -1
  178. package/front_end/models/trace/root-causes/LayoutShift.ts +3 -20
  179. package/front_end/models/trace/types/Extensions.ts +3 -7
  180. package/front_end/models/trace/types/File.ts +2 -8
  181. package/front_end/models/trace/types/TraceEvents.ts +10 -4
  182. package/front_end/models/workspace/UISourceCode.test.ts +3 -3
  183. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  184. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
  185. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  186. package/front_end/panels/animation/AnimationModel.ts +1 -1
  187. package/front_end/panels/animation/AnimationTimeline.ts +1 -1
  188. package/front_end/panels/animation/AnimationUI.ts +1 -1
  189. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +90 -0
  190. package/front_end/panels/application/ApplicationPanelSidebar.ts +123 -20
  191. package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
  192. package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
  193. package/front_end/panels/application/BounceTrackingMitigationsTreeElement.ts +1 -1
  194. package/front_end/panels/application/DOMStorageItemsView.ts +4 -2
  195. package/front_end/panels/application/ExtensionStorageItemsView.test.ts +89 -0
  196. package/front_end/panels/application/ExtensionStorageItemsView.ts +219 -0
  197. package/front_end/panels/application/ExtensionStorageModel.test.ts +12 -0
  198. package/front_end/panels/application/ExtensionStorageModel.ts +56 -13
  199. package/front_end/panels/application/IndexedDBViews.ts +14 -19
  200. package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
  201. package/front_end/panels/application/PreloadingTreeElement.ts +1 -1
  202. package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
  203. package/front_end/panels/application/ResourcesPanel.ts +18 -1
  204. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +1 -1
  205. package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
  206. package/front_end/panels/application/SharedStorageTreeElement.ts +2 -2
  207. package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
  208. package/front_end/panels/application/TrustTokensTreeElement.ts +1 -1
  209. package/front_end/panels/application/application.ts +2 -0
  210. package/front_end/panels/application/components/BackForwardCacheView.ts +76 -72
  211. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +32 -29
  212. package/front_end/panels/application/components/EndpointsGrid.ts +5 -4
  213. package/front_end/panels/application/components/FrameDetailsView.ts +110 -127
  214. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +11 -11
  215. package/front_end/panels/application/components/OriginTrialTreeView.ts +36 -34
  216. package/front_end/panels/application/components/PermissionsPolicySection.ts +31 -33
  217. package/front_end/panels/application/components/ProtocolHandlersView.ts +15 -14
  218. package/front_end/panels/application/components/ReportsGrid.ts +11 -9
  219. package/front_end/panels/application/components/ServiceWorkerRouterView.ts +0 -1
  220. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +11 -11
  221. package/front_end/panels/application/components/SharedStorageMetadataView.ts +16 -14
  222. package/front_end/panels/application/components/StackTrace.ts +18 -17
  223. package/front_end/panels/application/components/StorageMetadataView.ts +19 -18
  224. package/front_end/panels/application/components/TrustTokensView.ts +17 -16
  225. package/front_end/panels/application/preloading/PreloadingView.ts +14 -11
  226. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +7 -6
  227. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +42 -45
  228. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +13 -11
  229. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +11 -9
  230. package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +5 -4
  231. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -0
  232. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +10 -8
  233. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +20 -16
  234. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +50 -57
  235. package/front_end/panels/application/resourcesSidebar.css +0 -3
  236. package/front_end/panels/autofill/AutofillView.ts +19 -14
  237. package/front_end/panels/console/ConsoleFilter.ts +1 -1
  238. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  239. package/front_end/panels/console/ConsoleViewMessage.ts +2 -2
  240. package/front_end/panels/console/consoleView.css +4 -3
  241. package/front_end/panels/coverage/CoverageDecorationManager.ts +1 -1
  242. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  243. package/front_end/panels/css_overview/CSSOverviewController.ts +2 -2
  244. package/front_end/panels/css_overview/CSSOverviewModel.ts +2 -3
  245. package/front_end/panels/css_overview/CSSOverviewPanel.ts +5 -7
  246. package/front_end/panels/css_overview/components/CSSOverviewStartView.ts +12 -10
  247. package/front_end/panels/elements/AccessibilityTreeUtils.ts +9 -4
  248. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +3 -3
  249. package/front_end/panels/elements/ComputedStyleWidget.ts +6 -4
  250. package/front_end/panels/elements/ElementsPanel.ts +7 -6
  251. package/front_end/panels/elements/ElementsTreeElement.ts +35 -0
  252. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  253. package/front_end/panels/elements/PropertyMatchers.test.ts +57 -0
  254. package/front_end/panels/elements/PropertyMatchers.ts +78 -1
  255. package/front_end/panels/elements/StyleEditorWidget.ts +2 -2
  256. package/front_end/panels/elements/StylePropertiesSection.test.ts +1 -0
  257. package/front_end/panels/elements/StylePropertyHighlighter.test.ts +1 -0
  258. package/front_end/panels/elements/StylePropertyHighlighter.ts +2 -2
  259. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +36 -3
  260. package/front_end/panels/elements/StylePropertyTreeElement.ts +72 -26
  261. package/front_end/panels/elements/StylesSidebarPane.test.ts +2 -0
  262. package/front_end/panels/elements/TopLayerContainer.ts +1 -2
  263. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +8 -7
  264. package/front_end/panels/elements/components/AdornerSettingsPane.ts +3 -4
  265. package/front_end/panels/elements/components/AnchorFunctionLinkSwatch.ts +8 -7
  266. package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
  267. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
  268. package/front_end/panels/elements/components/CSSQuery.ts +0 -1
  269. package/front_end/panels/elements/components/CSSVariableValueView.ts +1 -3
  270. package/front_end/panels/elements/components/ComputedStyleProperty.ts +0 -1
  271. package/front_end/panels/elements/components/ComputedStyleTrace.ts +0 -1
  272. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +15 -11
  273. package/front_end/panels/elements/components/ElementsBreadcrumbsUtils.ts +1 -1
  274. package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +6 -4
  275. package/front_end/panels/elements/components/LayoutPane.ts +8 -7
  276. package/front_end/panels/elements/components/QueryContainer.test.ts +2 -3
  277. package/front_end/panels/elements/components/QueryContainer.ts +10 -9
  278. package/front_end/panels/elements/components/StylePropertyEditor.ts +4 -4
  279. package/front_end/panels/elements/components/computedStyleProperty.css +2 -1
  280. package/front_end/panels/elements/components/cssPropertyDocsView.css +3 -2
  281. package/front_end/panels/elements/elementsTreeOutline.css +17 -0
  282. package/front_end/panels/elements/stylesSidebarPane.css +2 -2
  283. package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
  284. package/front_end/panels/emulation/components/DeviceSizeInputElement.ts +3 -1
  285. package/front_end/panels/explain/components/ConsoleInsight.ts +47 -46
  286. package/front_end/panels/explain/components/consoleInsight.css +0 -9
  287. package/front_end/panels/freestyler/AiAgent.ts +8 -2
  288. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +201 -0
  289. package/front_end/panels/freestyler/DrJonesFileAgent.ts +196 -0
  290. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +1 -1
  291. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +34 -31
  292. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +195 -0
  293. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +193 -0
  294. package/front_end/panels/freestyler/FreestylerAgent.test.ts +177 -12
  295. package/front_end/panels/freestyler/FreestylerAgent.ts +83 -8
  296. package/front_end/panels/freestyler/FreestylerEvaluateAction.test.ts +21 -1
  297. package/front_end/panels/freestyler/FreestylerEvaluateAction.ts +3 -0
  298. package/front_end/panels/freestyler/FreestylerPanel.test.ts +16 -2
  299. package/front_end/panels/freestyler/FreestylerPanel.ts +126 -15
  300. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +21 -2
  301. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +294 -145
  302. package/front_end/panels/freestyler/components/ProvideFeedback.ts +16 -13
  303. package/front_end/panels/freestyler/components/freestylerChatUi.css +78 -26
  304. package/front_end/panels/freestyler/freestyler-meta.ts +64 -9
  305. package/front_end/panels/freestyler/freestyler.ts +2 -0
  306. package/front_end/panels/issues/AffectedResourcesView.ts +2 -2
  307. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +5 -4
  308. package/front_end/panels/issues/CorsIssueDetailsView.ts +6 -6
  309. package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
  310. package/front_end/panels/issues/IssueView.ts +2 -2
  311. package/front_end/panels/issues/components/ElementsPanelLink.ts +3 -1
  312. package/front_end/panels/issues/components/HideIssuesMenu.ts +6 -5
  313. package/front_end/panels/lighthouse/LighthouseController.ts +2 -2
  314. package/front_end/panels/lighthouse/LighthousePanel.ts +1 -1
  315. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +2 -6
  316. package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
  317. package/front_end/panels/lighthouse/LighthouseStatusView.ts +1 -1
  318. package/front_end/panels/lighthouse/LighthouseTimespanView.ts +1 -1
  319. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +8 -2
  320. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -6
  321. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.test.ts +11 -0
  322. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +26 -31
  323. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +5 -5
  324. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +11 -14
  325. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -3
  326. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +5 -4
  327. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +0 -1
  328. package/front_end/panels/media/EventDisplayTable.ts +1 -1
  329. package/front_end/panels/media/EventTimelineView.ts +1 -1
  330. package/front_end/panels/media/PlayerDetailView.ts +3 -3
  331. package/front_end/panels/media/PlayerListView.ts +2 -2
  332. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +23 -29
  333. package/front_end/panels/network/NetworkConfigView.ts +1 -2
  334. package/front_end/panels/network/NetworkDataGridNode.ts +4 -153
  335. package/front_end/panels/network/NetworkFrameGrouper.ts +1 -1
  336. package/front_end/panels/network/NetworkItemView.ts +1 -1
  337. package/front_end/panels/network/NetworkLogView.ts +1 -1
  338. package/front_end/panels/network/NetworkLogViewColumns.ts +4 -6
  339. package/front_end/panels/network/NetworkWaterfallColumn.ts +5 -8
  340. package/front_end/panels/network/RequestBinaryResponseView.test.ts +69 -0
  341. package/front_end/panels/network/RequestBinaryResponseView.ts +67 -0
  342. package/front_end/panels/network/RequestResponseView.test.ts +28 -1
  343. package/front_end/panels/network/RequestResponseView.ts +14 -7
  344. package/front_end/panels/network/components/EditableSpan.ts +0 -1
  345. package/front_end/panels/network/components/HeaderSectionRow.test.ts +1 -1
  346. package/front_end/panels/network/components/HeaderSectionRow.ts +22 -21
  347. package/front_end/panels/network/components/RequestHeaderSection.ts +7 -7
  348. package/front_end/panels/network/components/RequestHeadersView.ts +25 -26
  349. package/front_end/panels/network/components/RequestTrustTokensView.ts +32 -35
  350. package/front_end/panels/network/components/ResponseHeaderSection.ts +8 -10
  351. package/front_end/panels/network/components/WebBundleInfoView.ts +13 -11
  352. package/front_end/panels/network/network.ts +2 -0
  353. package/front_end/panels/network/networkConfigView.css +12 -5
  354. package/front_end/panels/network/networkLogView.css +4 -15
  355. package/front_end/panels/network/requestHTMLView.css +1 -0
  356. package/front_end/panels/profiler/BottomUpProfileDataGrid.ts +3 -3
  357. package/front_end/panels/profiler/HeapProfileView.ts +1 -1
  358. package/front_end/panels/profiler/HeapProfilerPanel.ts +2 -2
  359. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +3 -3
  360. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +3 -3
  361. package/front_end/panels/profiler/HeapSnapshotProxy.ts +1 -1
  362. package/front_end/panels/profiler/ProfileLauncherView.ts +3 -3
  363. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +4 -2
  364. package/front_end/panels/protocol_monitor/components/JSONEditor.ts +22 -15
  365. package/front_end/panels/protocol_monitor/components/Toolbar.ts +4 -4
  366. package/front_end/panels/recorder/RecorderController.ts +39 -43
  367. package/front_end/panels/recorder/components/ControlButton.ts +1 -1
  368. package/front_end/panels/recorder/components/CreateRecordingView.ts +15 -15
  369. package/front_end/panels/recorder/components/ExtensionView.ts +9 -8
  370. package/front_end/panels/recorder/components/RecordingListView.ts +15 -13
  371. package/front_end/panels/recorder/components/RecordingView.ts +92 -84
  372. package/front_end/panels/recorder/components/ReplaySection.ts +6 -6
  373. package/front_end/panels/recorder/components/SelectButton.ts +21 -20
  374. package/front_end/panels/recorder/components/StartView.ts +14 -18
  375. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  376. package/front_end/panels/recorder/components/StepView.ts +20 -20
  377. package/front_end/panels/recorder/components/TimelineSection.ts +3 -2
  378. package/front_end/panels/recorder/converters/ExtensionConverter.ts +2 -2
  379. package/front_end/panels/recorder/converters/JSONConverter.ts +1 -1
  380. package/front_end/panels/recorder/converters/LighthouseConverter.ts +1 -1
  381. package/front_end/panels/recorder/converters/PuppeteerConverter.ts +1 -1
  382. package/front_end/panels/recorder/converters/PuppeteerReplayConverter.ts +1 -1
  383. package/front_end/panels/recorder/injected/RecordingClient.ts +7 -10
  384. package/front_end/panels/recorder/injected/SelectorComputer.ts +5 -5
  385. package/front_end/panels/recorder/injected/SelectorPicker.ts +2 -2
  386. package/front_end/panels/recorder/injected/Step.ts +1 -1
  387. package/front_end/panels/recorder/injected/injected.ts +1 -1
  388. package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +1 -1
  389. package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +6 -7
  390. package/front_end/panels/recorder/injected/selectors/TextSelector.ts +3 -5
  391. package/front_end/panels/recorder/injected/util.ts +1 -1
  392. package/front_end/panels/recorder/models/RecordingPlayer.ts +1 -1
  393. package/front_end/panels/recorder/models/RecordingSettings.ts +1 -4
  394. package/front_end/panels/recorder/models/RecordingStorage.ts +1 -1
  395. package/front_end/panels/recorder/models/SDKUtils.ts +3 -2
  396. package/front_end/panels/recorder/models/ScreenshotUtils.ts +1 -1
  397. package/front_end/panels/recorder/models/Section.ts +2 -2
  398. package/front_end/panels/search/SearchResultsPane.ts +1 -2
  399. package/front_end/panels/search/SearchView.ts +1 -1
  400. package/front_end/panels/security/OriginTreeElement.ts +1 -1
  401. package/front_end/panels/security/SecurityAndPrivacyPanelSidebar.ts +1 -1
  402. package/front_end/panels/security/SecurityPanelSidebarTreeElement.ts +1 -1
  403. package/front_end/panels/sensors/SensorsView.ts +16 -0
  404. package/front_end/panels/sensors/sensors.css +16 -0
  405. package/front_end/panels/settings/AISettingsTab.test.ts +41 -11
  406. package/front_end/panels/settings/AISettingsTab.ts +103 -58
  407. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +9 -0
  408. package/front_end/panels/settings/SettingsScreen.ts +1 -1
  409. package/front_end/panels/settings/components/SyncSection.ts +18 -13
  410. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +33 -30
  411. package/front_end/panels/settings/settings-meta.ts +2 -2
  412. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  413. package/front_end/panels/sources/EditingLocationHistoryManager.ts +2 -2
  414. package/front_end/panels/sources/GoToLineQuickOpen.ts +1 -1
  415. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +1 -1
  416. package/front_end/panels/sources/OutlineQuickOpen.ts +1 -1
  417. package/front_end/panels/sources/SourcesNavigator.test.ts +1 -0
  418. package/front_end/panels/sources/SourcesPanel.ts +7 -0
  419. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  420. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  421. package/front_end/panels/sources/components/BreakpointsView.ts +25 -26
  422. package/front_end/panels/sources/components/HeadersView.ts +17 -15
  423. package/front_end/panels/timeline/AnimationsTrackAppender.ts +18 -3
  424. package/front_end/panels/timeline/AnnotationHelpers.ts +1 -1
  425. package/front_end/panels/timeline/AppenderUtils.ts +1 -1
  426. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +27 -10
  427. package/front_end/panels/timeline/CountersGraph.ts +1 -1
  428. package/front_end/panels/timeline/EntriesFilter.test.ts +68 -0
  429. package/front_end/panels/timeline/EntriesFilter.ts +13 -0
  430. package/front_end/panels/timeline/EventsTimelineTreeView.ts +1 -1
  431. package/front_end/panels/timeline/InteractionsTrackAppender.ts +10 -0
  432. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +135 -1
  433. package/front_end/panels/timeline/ModificationsManager.test.ts +160 -0
  434. package/front_end/panels/timeline/ModificationsManager.ts +31 -0
  435. package/front_end/panels/timeline/TimelineDetailsView.test.ts +4 -2
  436. package/front_end/panels/timeline/TimelineDetailsView.ts +34 -12
  437. package/front_end/panels/timeline/TimelineEventOverview.ts +1 -0
  438. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +53 -0
  439. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +50 -20
  440. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +57 -0
  441. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +18 -0
  442. package/front_end/panels/timeline/TimelineFlameChartView.ts +90 -29
  443. package/front_end/panels/timeline/TimelineHistoryManager.ts +3 -1
  444. package/front_end/panels/timeline/TimelineLoader.ts +1 -1
  445. package/front_end/panels/timeline/TimelinePanel.ts +49 -37
  446. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +16 -12
  447. package/front_end/panels/timeline/TimelineTreeView.test.ts +9 -9
  448. package/front_end/panels/timeline/TimelineTreeView.ts +1 -1
  449. package/front_end/panels/timeline/TimelineUIUtils.ts +116 -41
  450. package/front_end/panels/timeline/TimingsTrackAppender.ts +1 -1
  451. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +2 -3
  452. package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +8 -7
  453. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +28 -27
  454. package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -2
  455. package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +13 -11
  456. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +217 -87
  457. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +194 -69
  458. package/front_end/panels/timeline/components/LiveMetricsView.ts +327 -141
  459. package/front_end/panels/timeline/components/MetricCard.test.ts +8 -8
  460. package/front_end/panels/timeline/components/MetricCard.ts +6 -4
  461. package/front_end/panels/timeline/components/MetricCompareStrings.ts +1 -1
  462. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +16 -13
  463. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +12 -10
  464. package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +35 -2
  465. package/front_end/panels/timeline/components/NetworkThrottlingSelector.ts +30 -13
  466. package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +74 -0
  467. package/front_end/panels/timeline/components/RelatedInsightChips.ts +92 -0
  468. package/front_end/panels/timeline/components/Sidebar.test.ts +74 -0
  469. package/front_end/panels/timeline/components/Sidebar.ts +32 -13
  470. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +66 -0
  471. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +108 -39
  472. package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +11 -1
  473. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +70 -37
  474. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +59 -1
  475. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +90 -34
  476. package/front_end/panels/timeline/components/Utils.test.ts +65 -0
  477. package/front_end/panels/timeline/components/Utils.ts +117 -0
  478. package/front_end/panels/timeline/components/components.ts +2 -0
  479. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +67 -53
  480. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +98 -14
  481. package/front_end/panels/timeline/components/insights/EventRef.ts +92 -0
  482. package/front_end/panels/timeline/components/insights/FontDisplay.ts +24 -13
  483. package/front_end/panels/timeline/components/insights/Helpers.ts +48 -43
  484. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +20 -18
  485. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +93 -48
  486. package/front_end/panels/timeline/components/insights/LCPPhases.ts +28 -9
  487. package/front_end/panels/timeline/components/insights/NodeLink.ts +3 -1
  488. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +33 -25
  489. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +92 -15
  490. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +26 -39
  491. package/front_end/panels/timeline/components/insights/Table.ts +12 -9
  492. package/front_end/panels/timeline/components/insights/ThirdParties.ts +20 -12
  493. package/front_end/panels/timeline/components/insights/Viewport.ts +23 -20
  494. package/front_end/panels/timeline/components/insights/insights.ts +2 -0
  495. package/front_end/panels/timeline/components/insights/sidebarInsight.css +54 -9
  496. package/front_end/panels/timeline/components/insights/table.css +9 -1
  497. package/front_end/panels/timeline/components/layoutShiftDetails.css +22 -20
  498. package/front_end/panels/timeline/components/liveMetricsView.css +46 -16
  499. package/front_end/panels/timeline/components/networkRequestDetails.css +2 -1
  500. package/front_end/panels/timeline/components/relatedInsightChips.css +45 -0
  501. package/front_end/panels/timeline/components/sidebarInsightsTab.css +24 -6
  502. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +18 -4
  503. package/front_end/panels/timeline/extensions/ExtensionUI.ts +4 -1
  504. package/front_end/panels/timeline/fixtures/traces/basic.json.gz +0 -0
  505. package/front_end/panels/timeline/fixtures/traces/many-redirects.json.gz +0 -0
  506. package/front_end/panels/timeline/fixtures/traces/missing-url.json.gz +0 -0
  507. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +40 -51
  508. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +87 -39
  509. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +13 -11
  510. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +24 -32
  511. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +23 -24
  512. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.test.ts +42 -0
  513. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +25 -19
  514. package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +0 -14
  515. package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +16 -13
  516. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +59 -20
  517. package/front_end/panels/timeline/timelineFlameChartView.css +3 -2
  518. package/front_end/panels/timeline/timelineFlamechartPopover.css +19 -0
  519. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  520. package/front_end/panels/timeline/timelinePanel.css +2 -10
  521. package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +7 -7
  522. package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +1 -1
  523. package/front_end/panels/timeline/utils/Helpers.test.ts +38 -0
  524. package/front_end/panels/timeline/utils/Helpers.ts +94 -0
  525. package/front_end/panels/timeline/utils/ImageCache.test.ts +106 -0
  526. package/front_end/panels/timeline/utils/ImageCache.ts +55 -0
  527. package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +13 -1
  528. package/front_end/panels/timeline/utils/SourceMapsResolver.ts +11 -2
  529. package/front_end/panels/timeline/utils/utils.ts +4 -0
  530. package/front_end/panels/utils/utils.ts +1 -1
  531. package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +1 -1
  532. package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +3 -9
  533. package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -4
  534. package/front_end/panels/webauthn/WebauthnPane.ts +24 -3
  535. package/front_end/testing/EnvironmentHelpers.ts +19 -4
  536. package/front_end/testing/ExtensionHelpers.ts +1 -1
  537. package/front_end/testing/LanguagePluginHelpers.ts +1 -1
  538. package/front_end/testing/MockConnection.ts +1 -1
  539. package/front_end/testing/MockIssuesManager.ts +1 -1
  540. package/front_end/testing/MockScopeChain.ts +1 -1
  541. package/front_end/testing/MutationHelpers.test.ts +6 -8
  542. package/front_end/testing/TraceHelpers.ts +3 -1
  543. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  544. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  545. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  546. package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
  547. package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
  548. package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
  549. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +11 -3
  550. package/front_end/third_party/codemirror.next/package.json +5 -5
  551. package/front_end/third_party/i18n/localized-string-set.ts +1 -1
  552. package/front_end/third_party/puppeteer/README.chromium +2 -2
  553. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  554. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  555. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  556. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  557. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +9 -9
  558. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  559. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +84 -84
  560. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  561. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  562. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  563. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  564. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +1 -2
  565. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  566. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  567. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  568. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  569. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  570. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  571. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Navigation.js.map +1 -1
  572. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  573. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.js.map +1 -1
  574. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.d.ts.map +1 -1
  575. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Request.js.map +1 -1
  576. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.d.ts.map +1 -1
  577. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Session.js.map +1 -1
  578. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  579. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
  580. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
  581. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserPrompt.js.map +1 -1
  582. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  583. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +7 -4
  584. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  585. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  586. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +2 -3
  587. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  588. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
  589. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
  590. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts +2 -0
  591. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts.map +1 -1
  592. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js +17 -0
  593. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js.map +1 -1
  594. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  595. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  596. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts.map +1 -1
  597. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js +1 -2
  598. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js.map +1 -1
  599. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
  600. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +1 -1
  601. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
  602. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  603. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  604. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  605. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  606. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  607. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  608. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PQuerySelector.js +1 -1
  609. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PQuerySelector.js.map +1 -1
  610. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  611. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  612. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ScreenRecorder.js.map +1 -1
  613. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
  614. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
  615. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  616. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +2 -1
  617. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +114 -97
  618. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  619. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  620. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  621. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  622. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +9 -9
  623. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  624. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +82 -83
  625. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  626. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  627. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  628. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  629. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +2 -3
  630. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  631. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  632. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  633. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  634. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  635. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.d.ts.map +1 -1
  636. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Navigation.js.map +1 -1
  637. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  638. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.js.map +1 -1
  639. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.d.ts.map +1 -1
  640. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Request.js.map +1 -1
  641. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.d.ts.map +1 -1
  642. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Session.js.map +1 -1
  643. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  644. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
  645. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.d.ts.map +1 -1
  646. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserPrompt.js.map +1 -1
  647. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  648. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +7 -4
  649. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  650. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  651. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +3 -4
  652. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  653. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.d.ts.map +1 -1
  654. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
  655. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts +2 -0
  656. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts.map +1 -1
  657. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js +17 -0
  658. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js.map +1 -1
  659. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  660. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  661. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -1
  662. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +1 -2
  663. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js.map +1 -1
  664. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
  665. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +1 -1
  666. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
  667. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  668. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  669. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  670. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  671. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  672. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  673. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PQuerySelector.js +1 -1
  674. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PQuerySelector.js.map +1 -1
  675. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  676. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ScreenRecorder.js.map +1 -1
  677. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
  678. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
  679. package/front_end/third_party/puppeteer/package/lib/types.d.ts +2 -1
  680. package/front_end/third_party/puppeteer/package/package.json +2 -2
  681. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +1 -1
  682. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +1 -1
  683. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +89 -89
  684. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -1
  685. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +6 -2
  686. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +1 -1
  687. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +1 -1
  688. package/front_end/third_party/puppeteer/package/src/bidi/core/Navigation.ts +1 -1
  689. package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +2 -2
  690. package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +1 -1
  691. package/front_end/third_party/puppeteer/package/src/bidi/core/Session.ts +1 -1
  692. package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -1
  693. package/front_end/third_party/puppeteer/package/src/bidi/core/UserPrompt.ts +1 -1
  694. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +9 -5
  695. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +7 -3
  696. package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +1 -1
  697. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +22 -1
  698. package/front_end/third_party/puppeteer/package/src/cdp/IsolatedWorld.ts +1 -1
  699. package/front_end/third_party/puppeteer/package/src/common/QueryHandler.ts +1 -3
  700. package/front_end/third_party/puppeteer/package/src/common/util.ts +2 -1
  701. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  702. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  703. package/front_end/third_party/puppeteer/package/src/injected/PQuerySelector.ts +1 -1
  704. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +1 -1
  705. package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
  706. package/front_end/third_party/puppeteer/puppeteer.ts +1 -1
  707. package/front_end/ui/components/buttons/Button.ts +18 -17
  708. package/front_end/ui/components/buttons/button.css +0 -4
  709. package/front_end/ui/components/cards/Card.test.ts +66 -0
  710. package/front_end/ui/components/cards/Card.ts +57 -0
  711. package/front_end/ui/components/cards/card.css +32 -0
  712. package/front_end/ui/components/cards/cards.ts +9 -0
  713. package/front_end/ui/components/chrome_link/ChromeLink.test.ts +5 -3
  714. package/front_end/ui/components/chrome_link/ChromeLink.ts +3 -1
  715. package/front_end/ui/components/data_grid/DataGrid.test.ts +3 -1
  716. package/front_end/ui/components/data_grid/DataGrid.ts +25 -23
  717. package/front_end/ui/components/data_grid/DataGridContextMenuUtils.ts +2 -2
  718. package/front_end/ui/components/data_grid/DataGridController.ts +9 -5
  719. package/front_end/ui/components/data_grid/DataGridEvents.ts +1 -1
  720. package/front_end/ui/components/data_grid/DataGridRenderers.ts +7 -4
  721. package/front_end/ui/components/dialogs/Dialog.ts +4 -2
  722. package/front_end/ui/components/dialogs/IconDialog.ts +9 -7
  723. package/front_end/ui/components/dialogs/ShortcutDialog.ts +10 -8
  724. package/front_end/ui/components/diff_view/DiffView.ts +9 -8
  725. package/front_end/ui/components/docs/create_breadcrumbs.ts +3 -1
  726. package/front_end/ui/components/docs/expandable_list/basic.ts +4 -2
  727. package/front_end/ui/components/docs/floating_button/basic.html +26 -0
  728. package/front_end/ui/components/docs/floating_button/basic.ts +20 -0
  729. package/front_end/ui/components/docs/freestyler/basic.ts +5 -0
  730. package/front_end/ui/components/docs/freestyler/empty_state.ts +5 -0
  731. package/front_end/ui/components/docs/icon_dialog/basic.ts +5 -3
  732. package/front_end/ui/components/docs/panel_introduction_steps/basic.ts +7 -4
  733. package/front_end/ui/components/docs/performance_panel/flamechart.html +4 -0
  734. package/front_end/ui/components/docs/performance_panel/flamechart.ts +45 -0
  735. package/front_end/ui/components/docs/recorder_select_button/basic.ts +21 -18
  736. package/front_end/ui/components/docs/report/basic.ts +19 -23
  737. package/front_end/ui/components/docs/theme_colors/basic.ts +4 -2
  738. package/front_end/ui/components/docs/tree_outline/custom-renderers.ts +4 -2
  739. package/front_end/ui/components/expandable_list/ExpandableList.test.ts +5 -3
  740. package/front_end/ui/components/expandable_list/ExpandableList.ts +6 -4
  741. package/front_end/ui/components/floating_button/FloatingButton.ts +51 -0
  742. package/front_end/ui/components/floating_button/floatingButton.css +63 -0
  743. package/front_end/ui/components/floating_button/floating_button.ts +7 -0
  744. package/front_end/ui/components/helpers/helpers.test.ts +18 -14
  745. package/front_end/ui/components/icon_button/Icon.ts +2 -2
  746. package/front_end/ui/components/icon_button/IconButton.ts +15 -10
  747. package/front_end/ui/components/issue_counter/IssueCounter.ts +5 -1
  748. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +7 -4
  749. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +0 -1
  750. package/front_end/ui/components/linkifier/LinkifierImpl.ts +3 -1
  751. package/front_end/ui/components/markdown_view/CodeBlock.test.ts +7 -7
  752. package/front_end/ui/components/markdown_view/CodeBlock.ts +33 -41
  753. package/front_end/ui/components/markdown_view/MarkdownImage.ts +12 -9
  754. package/front_end/ui/components/markdown_view/MarkdownLink.ts +3 -1
  755. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +51 -3
  756. package/front_end/ui/components/markdown_view/MarkdownView.ts +39 -22
  757. package/front_end/ui/components/markdown_view/codeBlock.css +6 -28
  758. package/front_end/ui/components/markdown_view/markdownLink.css +1 -1
  759. package/front_end/ui/components/markdown_view/markdownView.css +4 -0
  760. package/front_end/ui/components/menus/Menu.ts +7 -5
  761. package/front_end/ui/components/menus/SelectMenu.test.ts +3 -1
  762. package/front_end/ui/components/menus/SelectMenu.ts +17 -15
  763. package/front_end/ui/components/panel_feedback/FeedbackButton.ts +5 -3
  764. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +8 -4
  765. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +6 -4
  766. package/front_end/ui/components/panel_introduction_steps/PanelIntroductionSteps.ts +3 -1
  767. package/front_end/ui/components/report_view/ReportView.test.ts +5 -3
  768. package/front_end/ui/components/report_view/ReportView.ts +9 -7
  769. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +8 -5
  770. package/front_end/ui/components/settings/SettingCheckbox.ts +14 -12
  771. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +7 -4
  772. package/front_end/ui/components/spinners/Spinner.ts +3 -1
  773. package/front_end/ui/components/split_view/SplitView.ts +3 -1
  774. package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +3 -1
  775. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +3 -2
  776. package/front_end/ui/components/survey_link/SurveyLink.ts +7 -3
  777. package/front_end/ui/components/switch/SwitchImpl.ts +3 -1
  778. package/front_end/ui/components/text_editor/TextEditorHistory.ts +2 -2
  779. package/front_end/ui/components/text_prompt/TextPrompt.ts +3 -1
  780. package/front_end/ui/components/tree_outline/TreeOutline.test.ts +8 -6
  781. package/front_end/ui/components/tree_outline/TreeOutline.ts +9 -8
  782. package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +5 -3
  783. package/front_end/ui/legacy/Context.ts +1 -1
  784. package/front_end/ui/legacy/Dialog.ts +2 -2
  785. package/front_end/ui/legacy/DockController.ts +2 -2
  786. package/front_end/ui/legacy/FilterBar.ts +1 -1
  787. package/front_end/ui/legacy/FilterSuggestionBuilder.ts +1 -1
  788. package/front_end/ui/legacy/GlassPane.ts +1 -1
  789. package/front_end/ui/legacy/Infobar.ts +1 -1
  790. package/front_end/ui/legacy/InspectorView.ts +5 -5
  791. package/front_end/ui/legacy/Panel.ts +1 -1
  792. package/front_end/ui/legacy/ShortcutRegistry.ts +1 -1
  793. package/front_end/ui/legacy/SplitWidget.test.ts +33 -1
  794. package/front_end/ui/legacy/SplitWidget.ts +62 -7
  795. package/front_end/ui/legacy/TabbedPane.ts +24 -0
  796. package/front_end/ui/legacy/Toolbar.test.ts +39 -0
  797. package/front_end/ui/legacy/Toolbar.ts +16 -17
  798. package/front_end/ui/legacy/UIUtils.ts +1 -1
  799. package/front_end/ui/legacy/View.ts +2 -2
  800. package/front_end/ui/legacy/ViewManager.ts +3 -2
  801. package/front_end/ui/legacy/ViewRegistration.ts +2 -2
  802. package/front_end/ui/legacy/Widget.ts +62 -14
  803. package/front_end/ui/legacy/XElement.ts +0 -1
  804. package/front_end/ui/legacy/XLink.test.ts +3 -1
  805. package/front_end/ui/legacy/XLink.ts +6 -4
  806. package/front_end/ui/legacy/checkboxTextLabel.css +4 -0
  807. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  808. package/front_end/ui/legacy/components/data_grid/DataGridWithPreview.ts +21 -10
  809. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +1 -1
  810. package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +10 -7
  811. package/front_end/ui/legacy/components/inline_editor/ColorMixSwatch.ts +3 -1
  812. package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +3 -1
  813. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +9 -9
  814. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +5 -4
  815. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
  816. package/front_end/ui/legacy/components/perf_ui/FilmStripView.test.ts +9 -9
  817. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +49 -13
  818. package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -0
  819. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +1 -1
  820. package/front_end/ui/legacy/inspectorCommon.css +0 -1
  821. package/front_end/ui/legacy/themeColors.css +10 -0
  822. package/front_end/ui/legacy/toolbar.css +4 -0
  823. package/front_end/ui/legacy/treeoutline.css +0 -3
  824. package/front_end/ui/lit-html/static.test.ts +8 -8
  825. package/front_end/ui/visual_logging/Debugging.ts +1 -1
  826. package/front_end/ui/visual_logging/KnownContextValues.ts +32 -3
  827. package/front_end/ui/visual_logging/LoggingDriver.ts +1 -1
  828. package/front_end/ui/visual_logging/LoggingEvents.ts +28 -28
  829. package/front_end/ui/visual_logging/LoggingState.ts +1 -1
  830. package/front_end/ui/visual_logging/NonDomState.ts +2 -2
  831. package/front_end/ui/visual_logging/visual_logging.ts +3 -1
  832. package/inspector_overlay/css_grid_label_helpers.test.ts +103 -0
  833. package/inspector_overlay/css_grid_label_helpers.ts +63 -12
  834. package/inspector_overlay/highlight_common.ts +2 -2
  835. package/inspector_overlay/highlight_container_query.ts +1 -2
  836. package/inspector_overlay/highlight_flex_common.test.ts +1 -1
  837. package/inspector_overlay/highlight_flex_common.ts +2 -3
  838. package/inspector_overlay/highlight_grid_common.ts +10 -4
  839. package/inspector_overlay/highlight_isolated_element.ts +1 -1
  840. package/inspector_overlay/highlight_scroll_snap.ts +1 -2
  841. package/inspector_overlay/testing/InspectorOverlayHelpers.ts +1 -1
  842. package/inspector_overlay/tool_highlight.ts +4 -8
  843. package/package.json +4 -3
  844. package/scripts/devtools_paths.js +9 -2
  845. package/scripts/eslint_rules/lib/avoid_assert_equal.js +34 -7
  846. package/scripts/eslint_rules/lib/html_tagged_template.js +55 -0
  847. package/scripts/eslint_rules/lib/inline_type_imports.js +22 -23
  848. package/scripts/eslint_rules/tests/avoid_assert_equal_test.js +61 -2
  849. package/scripts/eslint_rules/tests/html_tagged_template_test.js +96 -0
  850. package/scripts/eslint_rules/tests/inline_type_imports_test.js +5 -25
  851. package/scripts/freestyler/eval/index.js +83 -47
  852. package/scripts/protocol_typescript/protocol_dts_generator.ts +1 -1
  853. package/scripts/stylelint_rules/lib/use_theme_colors.js +2 -1
  854. package/scripts/stylelint_rules/tests/use_theme_colors_test.js +16 -0
  855. package/front_end/Images/src/spark.svg +0 -3
  856. package/front_end/panels/timeline/components/insights/lcpDiscovery.css +0 -13
  857. package/scripts/eslint_rules/lib/ban_literal_devtools_component_tag_names.js +0 -40
  858. package/scripts/eslint_rules/lib/check_component_naming.js +0 -214
  859. package/scripts/eslint_rules/tests/ban_literal_devtools_component_tag_names_test.js +0 -38
  860. package/scripts/eslint_rules/tests/check_component_naming_test.js +0 -246
@@ -6,16 +6,13 @@ import * as Platform from '../../../core/platform/platform.js';
6
6
  import * as Helpers from '../helpers/helpers.js';
7
7
  import * as Types from '../types/types.js';
8
8
 
9
- import {
10
- type InsightResult,
11
- type InsightSetContext,
12
- type RequiredData,
13
- } from './types.js';
9
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
14
10
 
15
11
  export type CLSInsightResult = InsightResult<{
16
- animationFailures?: readonly NoncompositedAnimationFailure[],
17
- shifts?: Map<Types.Events.LayoutShift, LayoutShiftRootCausesData>,
18
- clusters: Types.Events.SyntheticLayoutShiftCluster[],
12
+ animationFailures: readonly NoncompositedAnimationFailure[],
13
+ shifts: Map<Types.Events.SyntheticLayoutShift, LayoutShiftRootCausesData>,
14
+ clusters: Types.Events.SyntheticLayoutShiftCluster[],
15
+ worstCluster: Types.Events.SyntheticLayoutShiftCluster | undefined,
19
16
  }>;
20
17
 
21
18
  export function deps(): ['Meta', 'Animations', 'LayoutShifts', 'NetworkRequests'] {
@@ -23,12 +20,25 @@ export function deps(): ['Meta', 'Animations', 'LayoutShifts', 'NetworkRequests'
23
20
  }
24
21
 
25
22
  export const enum AnimationFailureReasons {
26
- UNSUPPORTED_CSS_PROPERTY = 'UNSUPPORTED_CSS_PROPERTY',
23
+ ACCELERATED_ANIMATIONS_DISABLED = 'ACCELERATED_ANIMATIONS_DISABLED',
24
+ EFFECT_SUPPRESSED_BY_DEVTOOLS = 'EFFECT_SUPPRESSED_BY_DEVTOOLS',
25
+ INVALID_ANIMATION_OR_EFFECT = 'INVALID_ANIMATION_OR_EFFECT',
26
+ EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS = 'EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS',
27
+ EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE = 'EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE',
28
+ TARGET_HAS_INVALID_COMPOSITING_STATE = 'TARGET_HAS_INVALID_COMPOSITING_STATE',
29
+ TARGET_HAS_INCOMPATIBLE_ANIMATIONS = 'TARGET_HAS_INCOMPATIBLE_ANIMATIONS',
30
+ TARGET_HAS_CSS_OFFSET = 'TARGET_HAS_CSS_OFFSET',
31
+ ANIMATION_AFFECTS_NON_CSS_PROPERTIES = 'ANIMATION_AFFECTS_NON_CSS_PROPERTIES',
32
+ TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET =
33
+ 'TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET',
27
34
  TRANSFROM_BOX_SIZE_DEPENDENT = 'TRANSFROM_BOX_SIZE_DEPENDENT',
28
- FILTER_MAY_MOVE_PIXELS = 'FILTER_MAY_MOVE_PIXELS',
29
- NON_REPLACE_COMPOSITE_MODE = 'NON_REPLACE_COMPOSITE_MODE',
30
- INCOMPATIBLE_ANIMATIONS = 'INCOMPATIBLE_ANIMATIONS',
31
- UNSUPPORTED_TIMING_PARAMS = 'UNSUPPORTED_TIMING_PARAMS',
35
+ FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS = 'FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS',
36
+ UNSUPPORTED_CSS_PROPERTY = 'UNSUPPORTED_CSS_PROPERTY',
37
+ MIXED_KEYFRAME_VALUE_TYPES = 'MIXED_KEYFRAME_VALUE_TYPES',
38
+ TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE = 'TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE',
39
+ ANIMATION_HAS_NO_VISIBLE_CHANGE = 'ANIMATION_HAS_NO_VISIBLE_CHANGE',
40
+ AFFECTS_IMPORTANT_PROPERTY = 'AFFECTS_IMPORTANT_PROPERTY',
41
+ SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY = 'SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY',
32
42
  }
33
43
 
34
44
  export interface NoncompositedAnimationFailure {
@@ -45,6 +55,10 @@ export interface NoncompositedAnimationFailure {
45
55
  * Unsupported properties.
46
56
  */
47
57
  unsupportedProperties?: Types.Events.Animation['args']['data']['unsupportedProperties'];
58
+ /**
59
+ * Animation event.
60
+ */
61
+ animation?: Types.Events.SyntheticAnimationPair;
48
62
  }
49
63
 
50
64
  /**
@@ -55,8 +69,45 @@ export interface NoncompositedAnimationFailure {
55
69
  */
56
70
  const ACTIONABLE_FAILURE_REASONS = [
57
71
  {
58
- flag: 1 << 13,
59
- failure: AnimationFailureReasons.UNSUPPORTED_CSS_PROPERTY,
72
+ flag: 1 << 0,
73
+ failure: AnimationFailureReasons.ACCELERATED_ANIMATIONS_DISABLED,
74
+ },
75
+ {
76
+ flag: 1 << 1,
77
+ failure: AnimationFailureReasons.EFFECT_SUPPRESSED_BY_DEVTOOLS,
78
+ },
79
+ {
80
+ flag: 1 << 2,
81
+ failure: AnimationFailureReasons.INVALID_ANIMATION_OR_EFFECT,
82
+ },
83
+ {
84
+ flag: 1 << 3,
85
+ failure: AnimationFailureReasons.EFFECT_HAS_UNSUPPORTED_TIMING_PARAMS,
86
+ },
87
+ {
88
+ flag: 1 << 4,
89
+ failure: AnimationFailureReasons.EFFECT_HAS_NON_REPLACE_COMPOSITE_MODE,
90
+ },
91
+ {
92
+ flag: 1 << 5,
93
+ failure: AnimationFailureReasons.TARGET_HAS_INVALID_COMPOSITING_STATE,
94
+ },
95
+ {
96
+ flag: 1 << 6,
97
+ failure: AnimationFailureReasons.TARGET_HAS_INCOMPATIBLE_ANIMATIONS,
98
+ },
99
+ {
100
+ flag: 1 << 7,
101
+ failure: AnimationFailureReasons.TARGET_HAS_CSS_OFFSET,
102
+ },
103
+ // The failure 1 << 8 is marked as obsolete in Blink
104
+ {
105
+ flag: 1 << 9,
106
+ failure: AnimationFailureReasons.ANIMATION_AFFECTS_NON_CSS_PROPERTIES,
107
+ },
108
+ {
109
+ flag: 1 << 10,
110
+ failure: AnimationFailureReasons.TRANSFORM_RELATED_PROPERTY_CANNOT_BE_ACCELERATED_ON_TARGET,
60
111
  },
61
112
  {
62
113
  flag: 1 << 11,
@@ -64,19 +115,32 @@ const ACTIONABLE_FAILURE_REASONS = [
64
115
  },
65
116
  {
66
117
  flag: 1 << 12,
67
- failure: AnimationFailureReasons.FILTER_MAY_MOVE_PIXELS,
118
+ failure: AnimationFailureReasons.FILTER_RELATED_PROPERTY_MAY_MOVE_PIXELS,
68
119
  },
69
120
  {
70
- flag: 1 << 4,
71
- failure: AnimationFailureReasons.NON_REPLACE_COMPOSITE_MODE,
121
+ flag: 1 << 13,
122
+ failure: AnimationFailureReasons.UNSUPPORTED_CSS_PROPERTY,
72
123
  },
124
+ // The failure 1 << 14 is marked as obsolete in Blink
73
125
  {
74
- flag: 1 << 6,
75
- failure: AnimationFailureReasons.INCOMPATIBLE_ANIMATIONS,
126
+ flag: 1 << 15,
127
+ failure: AnimationFailureReasons.MIXED_KEYFRAME_VALUE_TYPES,
76
128
  },
77
129
  {
78
- flag: 1 << 3,
79
- failure: AnimationFailureReasons.UNSUPPORTED_TIMING_PARAMS,
130
+ flag: 1 << 16,
131
+ failure: AnimationFailureReasons.TIMELINE_SOURCE_HAS_INVALID_COMPOSITING_STATE,
132
+ },
133
+ {
134
+ flag: 1 << 17,
135
+ failure: AnimationFailureReasons.ANIMATION_HAS_NO_VISIBLE_CHANGE,
136
+ },
137
+ {
138
+ flag: 1 << 18,
139
+ failure: AnimationFailureReasons.AFFECTS_IMPORTANT_PROPERTY,
140
+ },
141
+ {
142
+ flag: 1 << 19,
143
+ failure: AnimationFailureReasons.SVG_TARGET_HAS_INDEPENDENT_TRANSFORM_PROPERTY,
80
144
  },
81
145
  ];
82
146
 
@@ -95,10 +159,11 @@ function isInInvalidationWindow(event: Types.Events.Event, targetEvent: Types.Ev
95
159
  return eventEnd < targetEvent.ts && eventEnd >= targetEvent.ts - INVALIDATION_WINDOW;
96
160
  }
97
161
 
98
- export function getNonCompositedFailure(event: Types.Events.SyntheticAnimationPair): NoncompositedAnimationFailure[] {
162
+ export function getNonCompositedFailure(animationEvent: Types.Events.SyntheticAnimationPair):
163
+ NoncompositedAnimationFailure[] {
99
164
  const failures: NoncompositedAnimationFailure[] = [];
100
- const beginEvent = event.args.data.beginEvent;
101
- const instantEvents = event.args.data.instantEvents || [];
165
+ const beginEvent = animationEvent.args.data.beginEvent;
166
+ const instantEvents = animationEvent.args.data.instantEvents || [];
102
167
  /**
103
168
  * Animation events containing composite information are ASYNC_NESTABLE_INSTANT ('n').
104
169
  * An animation may also contain multiple 'n' events, so we look through those with useful non-composited data.
@@ -106,7 +171,7 @@ export function getNonCompositedFailure(event: Types.Events.SyntheticAnimationPa
106
171
  for (const event of instantEvents) {
107
172
  const failureMask = event.args.data.compositeFailed;
108
173
  const unsupportedProperties = event.args.data.unsupportedProperties;
109
- if (!failureMask || !unsupportedProperties) {
174
+ if (!failureMask) {
110
175
  continue;
111
176
  }
112
177
  const failureReasons =
@@ -115,6 +180,7 @@ export function getNonCompositedFailure(event: Types.Events.SyntheticAnimationPa
115
180
  name: beginEvent.args.data.displayName,
116
181
  failureReasons,
117
182
  unsupportedProperties,
183
+ animation: animationEvent,
118
184
  };
119
185
  failures.push(failure);
120
186
  }
@@ -311,11 +377,13 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
311
377
 
312
378
  const clusterKey = context.navigation ? context.navigationId : Types.Events.NO_NAVIGATION;
313
379
  const clusters = parsedTrace.LayoutShifts.clustersByNavigationId.get(clusterKey) ?? [];
380
+ const clustersByScore = clusters.toSorted((a, b) => b.clusterCumulativeScore - a.clusterCumulativeScore);
381
+ const worstCluster = clustersByScore.at(0);
314
382
  const layoutShifts = clusters.flatMap(cluster => cluster.events);
315
383
  const prePaintEvents = parsedTrace.LayoutShifts.prePaintEvents.filter(isWithinContext);
316
384
 
317
385
  // Get root causes.
318
- const rootCausesByShift = new Map<Types.Events.LayoutShift, LayoutShiftRootCausesData>();
386
+ const rootCausesByShift = new Map<Types.Events.SyntheticLayoutShift, LayoutShiftRootCausesData>();
319
387
  const shiftsByPrePaint = getShiftsByPrePaintEvents(layoutShifts, prePaintEvents);
320
388
 
321
389
  for (const shift of layoutShifts) {
@@ -328,9 +396,16 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
328
396
  const animationFailures =
329
397
  getNonCompositedFailureRootCauses(compositeAnimationEvents, prePaintEvents, shiftsByPrePaint, rootCausesByShift);
330
398
 
399
+ const relatedEvents: Types.Events.Event[] = [...layoutShifts];
400
+ if (worstCluster) {
401
+ relatedEvents.push(worstCluster);
402
+ }
403
+
331
404
  return {
405
+ relatedEvents,
332
406
  animationFailures,
333
407
  shifts: rootCausesByShift,
334
408
  clusters,
409
+ worstCluster,
335
410
  };
336
411
  }
@@ -23,19 +23,19 @@ describeWithEnvironment('DocumentLatency', function() {
23
23
  const insight =
24
24
  getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
25
25
  assert.strictEqual(insight.data?.redirectDuration, 1779);
26
- assert.deepEqual(insight.metricSavings, {FCP: 1779, LCP: 1779});
26
+ assert.deepEqual(insight.metricSavings, {FCP: 1779, LCP: 1779} as Trace.Insights.Types.MetricSavings);
27
27
  });
28
28
 
29
- it('reports no savings for server with low response time', async () => {
29
+ it('reports no savings for server with fast server response time', async () => {
30
30
  const {data, insights} = await processTrace(this, 'lantern/paul/trace.json.gz');
31
31
  const insight =
32
32
  getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
33
33
  assert.strictEqual(insight.data?.serverResponseTime, 43);
34
34
  assert(!insight.data?.serverResponseTooSlow);
35
- assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
35
+ assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
36
36
  });
37
37
 
38
- it('reports savings for server with high response time', async function() {
38
+ it('reports savings for server with slow server response time', async function() {
39
39
  const traceEvents = [...await TraceLoader.rawEvents(this, 'lantern/paul/trace.json.gz')];
40
40
  const processor = Trace.Processor.TraceProcessor.createWithAllHandlers();
41
41
 
@@ -46,11 +46,11 @@ describeWithEnvironment('DocumentLatency', function() {
46
46
  if (!mainRequestEvent.args.data.timing) {
47
47
  throw new Error('missing timing field');
48
48
  }
49
- mainRequestEvent.args.data.timing.receiveHeadersStart =
50
- Types.Timing.MilliSeconds(mainRequestEvent.args.data.timing.receiveHeadersStart + 1000);
49
+ mainRequestEvent.args.data.timing.receiveHeadersEnd =
50
+ Types.Timing.MilliSeconds(mainRequestEvent.args.data.timing.receiveHeadersEnd + 1000);
51
51
  traceEvents[mainRequestEventIndex] = mainRequestEvent;
52
52
 
53
- await processor.parse(traceEvents);
53
+ await processor.parse(traceEvents, {isCPUProfile: false, isFreshRecording: true});
54
54
  const data = processor.parsedTrace;
55
55
  if (!data) {
56
56
  throw new Error('missing parsedTrace');
@@ -61,7 +61,7 @@ describeWithEnvironment('DocumentLatency', function() {
61
61
  const insight = Trace.Insights.InsightRunners.DocumentLatency.generateInsight(data, context);
62
62
  assert.strictEqual(insight.data?.serverResponseTime, 1043);
63
63
  assert(insight.data?.serverResponseTooSlow);
64
- assert.deepEqual(insight.metricSavings, {FCP: 943, LCP: 943});
64
+ assert.deepEqual(insight.metricSavings, {FCP: 943, LCP: 943} as Trace.Insights.Types.MetricSavings);
65
65
  });
66
66
 
67
67
  it('reports no compression savings for compressed text', async () => {
@@ -69,7 +69,7 @@ describeWithEnvironment('DocumentLatency', function() {
69
69
  const insight =
70
70
  getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
71
71
  assert.strictEqual(insight.data?.uncompressedResponseBytes, 0);
72
- assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
72
+ assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
73
73
  });
74
74
 
75
75
  it('reports compression savings for uncompressed text', async function() {
@@ -84,7 +84,7 @@ describeWithEnvironment('DocumentLatency', function() {
84
84
  mainRequestEvent.args.data.headers = mainRequestEvent.args.data.headers?.filter(h => h.name !== 'content-encoding');
85
85
  traceEvents[mainRequestEventIndex] = mainRequestEvent;
86
86
 
87
- await processor.parse(traceEvents);
87
+ await processor.parse(traceEvents, {isCPUProfile: false, isFreshRecording: true});
88
88
  const data = processor.parsedTrace;
89
89
  if (!data) {
90
90
  throw new Error('missing parsedTrace');
@@ -94,6 +94,17 @@ describeWithEnvironment('DocumentLatency', function() {
94
94
  const context = createContextForNavigation(data, navigation, data.Meta.mainFrameId);
95
95
  const insight = Trace.Insights.InsightRunners.DocumentLatency.generateInsight(data, context);
96
96
  assert.strictEqual(insight.data?.uncompressedResponseBytes, 39799);
97
- assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0});
97
+ assert.deepEqual(insight.metricSavings, {FCP: 0, LCP: 0} as Trace.Insights.Types.MetricSavings);
98
+ });
99
+
100
+ it('reports savings for main document with many issues, many redirects', async () => {
101
+ const {data, insights} = await processTrace(this, 'many-redirects.json.gz');
102
+ const insight =
103
+ getInsightOrError('DocumentLatency', insights, getFirstOrError(data.Meta.navigationsByNavigationId.values()));
104
+ assert.strictEqual(insight.data?.redirectDuration, 6059);
105
+ assert.strictEqual(insight.data?.uncompressedResponseBytes, 111506);
106
+ assert.strictEqual(insight.data?.serverResponseTime, 2008);
107
+ assert(insight.data?.serverResponseTooSlow);
108
+ assert.deepEqual(insight.metricSavings, {FCP: 7967, LCP: 7967} as Trace.Insights.Types.MetricSavings);
98
109
  });
99
110
  });
@@ -2,9 +2,10 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as Helpers from '../helpers/helpers.js';
5
6
  import * as Types from '../types/types.js';
6
7
 
7
- import {type InsightResult, type InsightSetContext, type RequiredData} from './types.js';
8
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
8
9
 
9
10
  // Due to the way that DevTools throttling works we cannot see if server response took less than ~570ms.
10
11
  // We set our failure threshold to 600ms to avoid those false positives but we want devs to shoot for 100ms.
@@ -28,13 +29,14 @@ export function deps(): ['Meta', 'NetworkRequests'] {
28
29
  return ['Meta', 'NetworkRequests'];
29
30
  }
30
31
 
31
- function getServerTiming(request: Types.Events.SyntheticNetworkRequest): Types.Timing.MilliSeconds|null {
32
+ function getServerResponseTime(request: Types.Events.SyntheticNetworkRequest): Types.Timing.MilliSeconds|null {
32
33
  const timing = request.args.data.timing;
33
34
  if (!timing) {
34
35
  return null;
35
36
  }
36
37
 
37
- return Types.Timing.MilliSeconds(Math.round(timing.receiveHeadersStart - timing.sendEnd));
38
+ const ms = Helpers.Timing.microSecondsToMilliseconds(request.args.data.syntheticData.waiting);
39
+ return Math.round(ms) as Types.Timing.MilliSeconds;
38
40
  }
39
41
 
40
42
  function getCompressionSavings(request: Types.Events.SyntheticNetworkRequest): number {
@@ -113,7 +115,7 @@ export function generateInsight(
113
115
  throw new Error('missing document request');
114
116
  }
115
117
 
116
- const serverResponseTime = getServerTiming(documentRequest);
118
+ const serverResponseTime = getServerResponseTime(documentRequest);
117
119
  if (serverResponseTime === null) {
118
120
  throw new Error('missing document request timing');
119
121
  }
@@ -129,11 +131,12 @@ export function generateInsight(
129
131
  overallSavingsMs += redirectDuration;
130
132
 
131
133
  const metricSavings = {
132
- FCP: overallSavingsMs,
133
- LCP: overallSavingsMs,
134
+ FCP: overallSavingsMs as Types.Timing.MilliSeconds,
135
+ LCP: overallSavingsMs as Types.Timing.MilliSeconds,
134
136
  };
135
137
 
136
138
  return {
139
+ relatedEvents: [documentRequest],
137
140
  data: {
138
141
  serverResponseTime,
139
142
  serverResponseTooSlow,
@@ -6,7 +6,7 @@ import * as Platform from '../../../core/platform/platform.js';
6
6
  import * as Helpers from '../helpers/helpers.js';
7
7
  import * as Types from '../types/types.js';
8
8
 
9
- import {type InsightResult, type InsightSetContext, type RequiredData} from './types.js';
9
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
10
10
 
11
11
  export function deps(): ['Meta', 'NetworkRequests', 'LayoutShifts'] {
12
12
  return ['Meta', 'NetworkRequests', 'LayoutShifts'];
@@ -55,7 +55,11 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
55
55
 
56
56
  fonts.sort((a, b) => b.wastedTime - a.wastedTime);
57
57
 
58
+ const savings = Math.max(...fonts.map(f => f.wastedTime)) as Types.Timing.MilliSeconds;
59
+
58
60
  return {
61
+ relatedEvents: fonts.map(f => f.request),
59
62
  fonts,
63
+ metricSavings: {FCP: savings},
60
64
  };
61
65
  }
@@ -3,9 +3,9 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as Helpers from '../helpers/helpers.js';
6
- import {type SyntheticInteractionPair} from '../types/TraceEvents.js';
6
+ import type {SyntheticInteractionPair} from '../types/TraceEvents.js';
7
7
 
8
- import {type InsightResult, type InsightSetContext, type RequiredData} from './types.js';
8
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
9
9
 
10
10
  export function deps(): ['UserInteractions'] {
11
11
  return ['UserInteractions'];
@@ -17,7 +17,7 @@ export type INPInsightResult = InsightResult<{
17
17
  }>;
18
18
 
19
19
  export function generateInsight(parsedTrace: RequiredData<typeof deps>, context: InsightSetContext): INPInsightResult {
20
- const interactionEvents = parsedTrace.UserInteractions.interactionEvents.filter(event => {
20
+ const interactionEvents = parsedTrace.UserInteractions.interactionEventsWithNoNesting.filter(event => {
21
21
  return Helpers.Timing.eventIsInBounds(event, context.bounds);
22
22
  });
23
23
 
@@ -44,6 +44,7 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
44
44
  const highPercentileIndex = Math.min(9, Math.floor(normalizedInteractionEvents.length / 50));
45
45
 
46
46
  return {
47
+ relatedEvents: [normalizedInteractionEvents[0]],
47
48
  longestInteractionEvent: normalizedInteractionEvents[0],
48
49
  highPercentileInteractionEvent: normalizedInteractionEvents[highPercentileIndex],
49
50
  };
@@ -56,7 +56,7 @@ describeWithEnvironment('LargestContentfulPaint', function() {
56
56
  const {shouldIncreasePriorityHint, shouldPreloadImage, shouldRemoveLazyLoading} = insight;
57
57
 
58
58
  assert.strictEqual(shouldRemoveLazyLoading, false);
59
- assert.strictEqual(shouldPreloadImage, true);
59
+ assert.strictEqual(shouldPreloadImage, false);
60
60
  assert.strictEqual(shouldIncreasePriorityHint, true);
61
61
  });
62
62
 
@@ -92,4 +92,12 @@ describeWithEnvironment('LargestContentfulPaint', function() {
92
92
  assert.strictEqual(insight.warnings?.[0], 'NO_DOCUMENT_REQUEST');
93
93
  });
94
94
  });
95
+
96
+ it('can handle old traces with missing data and return null for breakdowns of the phases', async () => {
97
+ const {data, insights} = await processTrace(this, 'multiple-navigations.json.gz');
98
+ const firstNav = getFirstOrError(data.Meta.navigationsByNavigationId.values());
99
+ const insight = getInsightOrError('LargestContentfulPaint', insights, firstNav);
100
+ // This insight has invalid phase data, so we expect the value to be undefined.
101
+ assert.isUndefined(insight.phases);
102
+ });
95
103
  });
@@ -48,9 +48,18 @@ export type LCPInsightResult = InsightResult<{
48
48
  earliestDiscoveryTimeTs?: Types.Timing.MicroSeconds,
49
49
  }>;
50
50
 
51
+ function anyValuesNaN(...values: number[]): boolean {
52
+ return values.some(v => Number.isNaN(v));
53
+ }
54
+ /**
55
+ * Calculates the 4 phases of an LCP and the timings of each.
56
+ * Will return `null` if any required values were missing. We don't ever expect
57
+ * them to be missing on newer traces, but old trace files may lack some of the
58
+ * data we rely on, so we want to handle that case.
59
+ */
51
60
  function breakdownPhases(
52
61
  nav: Types.Events.NavigationStart, docRequest: Types.Events.SyntheticNetworkRequest,
53
- lcpMs: Types.Timing.MilliSeconds, lcpRequest: Types.Events.SyntheticNetworkRequest|null): LCPPhases {
62
+ lcpMs: Types.Timing.MilliSeconds, lcpRequest: Types.Events.SyntheticNetworkRequest|null): LCPPhases|null {
54
63
  const docReqTiming = docRequest.args.data.timing;
55
64
  if (!docReqTiming) {
56
65
  throw new Error('no timing for document request');
@@ -63,6 +72,9 @@ function breakdownPhases(
63
72
  let renderDelay = Types.Timing.MilliSeconds(lcpMs - ttfb);
64
73
 
65
74
  if (!lcpRequest) {
75
+ if (anyValuesNaN(ttfb, renderDelay)) {
76
+ return null;
77
+ }
66
78
  return {ttfb, renderDelay};
67
79
  }
68
80
 
@@ -75,6 +87,9 @@ function breakdownPhases(
75
87
  const loadDelay = Types.Timing.MilliSeconds(requestStart - ttfb);
76
88
  const loadTime = Types.Timing.MilliSeconds(requestEnd - requestStart);
77
89
  renderDelay = Types.Timing.MilliSeconds(lcpMs - requestEnd);
90
+ if (anyValuesNaN(ttfb, loadDelay, loadTime, renderDelay)) {
91
+ return null;
92
+ }
78
93
 
79
94
  return {
80
95
  ttfb,
@@ -121,14 +136,19 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
121
136
  lcpMs,
122
137
  lcpTs,
123
138
  lcpEvent,
124
- phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest),
139
+ phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest) ?? undefined,
125
140
  };
126
141
  }
127
142
 
143
+ const initiatorUrl = lcpRequest.args.data.initiator?.url;
144
+ // TODO(b/372319476): Explore using trace event HTMLDocumentParser::FetchQueuedPreloads to determine if the request
145
+ // is discovered by the preload scanner.
146
+ const initiatedByMainDoc =
147
+ lcpRequest?.args.data.initiator?.type === 'parser' && docRequest.args.data.url === initiatorUrl;
148
+ const imgPreloadedOrFoundInHTML = lcpRequest?.args.data.isLinkPreload || initiatedByMainDoc;
149
+
128
150
  const imageLoadingAttr = lcpEvent.args.data?.loadingAttr;
129
- const imagePreloaded = lcpRequest?.args.data.isLinkPreload || lcpRequest?.args.data.initiator?.type === 'preload';
130
151
  const imageFetchPriorityHint = lcpRequest?.args.data.fetchPriorityHint;
131
-
132
152
  // This is the earliest discovery time an LCP request could have - it's TTFB.
133
153
  const earliestDiscoveryTime = docRequest && docRequest.args.data.timing ?
134
154
  Helpers.Timing.secondsToMicroseconds(docRequest.args.data.timing.requestTime) +
@@ -139,10 +159,10 @@ export function generateInsight(parsedTrace: RequiredData<typeof deps>, context:
139
159
  lcpMs,
140
160
  lcpTs,
141
161
  lcpEvent,
142
- phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest),
162
+ phases: breakdownPhases(context.navigation, docRequest, lcpMs, lcpRequest) ?? undefined,
143
163
  shouldRemoveLazyLoading: imageLoadingAttr === 'lazy',
144
164
  shouldIncreasePriorityHint: imageFetchPriorityHint !== 'high',
145
- shouldPreloadImage: !imagePreloaded,
165
+ shouldPreloadImage: !imgPreloadedOrFoundInHTML,
146
166
  lcpRequest,
147
167
  earliestDiscoveryTimeTs: earliestDiscoveryTime ? Types.Timing.MicroSeconds(earliestDiscoveryTime) : undefined,
148
168
  };
@@ -106,6 +106,9 @@ describeWithEnvironment('RenderBlockingRequests', function() {
106
106
  ]);
107
107
  });
108
108
 
109
+ // TODO(crbug.com/372674229): when swapping to 'provided' instead of 'simulated', all these test traces give
110
+ // uninteresting results. must get new traces.
111
+
109
112
  it('estimates savings with Lantern (image LCP)', async () => {
110
113
  const {data, insights} = await processTrace(this, 'lantern/render-blocking/trace.json.gz');
111
114
  assert.strictEqual(insights.size, 1);
@@ -113,19 +116,16 @@ describeWithEnvironment('RenderBlockingRequests', function() {
113
116
  getInsightOrError('RenderBlocking', insights, data.Meta.navigationsByNavigationId.values().next().value);
114
117
 
115
118
  assert.deepStrictEqual(insight.metricSavings, {
116
- FCP: 2250,
119
+ FCP: 0,
117
120
  LCP: 0,
118
- });
121
+ } as Trace.Insights.Types.MetricSavings);
119
122
 
120
123
  assert.exists(insight.requestIdToWastedMs);
121
124
  const urlToWastedMs = [...insight.requestIdToWastedMs].map(([requestId, wastedMs]) => {
122
125
  const url = insight.renderBlockingRequests.find(r => r.args.data.requestId === requestId)?.args.data.url;
123
126
  return [url, wastedMs];
124
127
  });
125
- assert.deepStrictEqual(urlToWastedMs, [
126
- ['http://localhost:50049/style.css', 2254],
127
- ['http://localhost:50049/script.js', 304],
128
- ]);
128
+ assert.deepStrictEqual(urlToWastedMs, []);
129
129
  });
130
130
 
131
131
  it('estimates savings with Lantern (text LCP)', async () => {
@@ -135,20 +135,14 @@ describeWithEnvironment('RenderBlockingRequests', function() {
135
135
  getInsightOrError('RenderBlocking', insights, data.Meta.navigationsByNavigationId.values().next().value);
136
136
 
137
137
  assert.deepStrictEqual(insight.metricSavings, {
138
- FCP: 13,
139
- LCP: 13,
140
- });
138
+ FCP: 0,
139
+ LCP: 0,
140
+ } as Trace.Insights.Types.MetricSavings);
141
141
  assert.exists(insight.requestIdToWastedMs);
142
142
  const urlToWastedMs = [...insight.requestIdToWastedMs].map(([requestId, wastedMs]) => {
143
143
  const url = insight.renderBlockingRequests.find(r => r.args.data.requestId === requestId)?.args.data.url;
144
144
  return [url, wastedMs];
145
145
  });
146
- assert.deepStrictEqual(urlToWastedMs, [
147
- ['http://[::]:8000/typescript-angular/node_modules/todomvc-common/base.css', 153],
148
- ['http://[::]:8000/typescript-angular/node_modules/todomvc-app-css/index.css', 303],
149
- ['http://[::]:8000/typescript-angular/node_modules/todomvc-common/base.js', 303],
150
- ['http://[::]:8000/typescript-angular/node_modules/angular/angular.js', 303],
151
- ['http://[::]:8000/typescript-angular/js/Application.js', 303],
152
- ]);
146
+ assert.deepStrictEqual(urlToWastedMs, []);
153
147
  });
154
148
  });
@@ -52,7 +52,8 @@ function getNodesAndTimingByRequestId(nodeTimings: Lantern.Simulation.Result['no
52
52
  return requestIdToNode;
53
53
  }
54
54
 
55
- function estimateSavingsWithGraphs(deferredIds: Set<string>, lanternContext: LanternContext): number {
55
+ function estimateSavingsWithGraphs(
56
+ deferredIds: Set<string>, lanternContext: LanternContext): Types.Timing.MilliSeconds {
56
57
  const simulator = lanternContext.simulator;
57
58
  const fcpGraph = lanternContext.metrics.firstContentfulPaint.optimisticGraph;
58
59
  const {nodeTimings} = lanternContext.simulator.simulate(fcpGraph);
@@ -80,7 +81,7 @@ function estimateSavingsWithGraphs(deferredIds: Set<string>, lanternContext: Lan
80
81
  minimalFCPGraph.request.transferSize = safeTransferSize + totalChildNetworkBytes;
81
82
  const estimateAfterInline = simulator.simulate(minimalFCPGraph).timeInMs;
82
83
  minimalFCPGraph.request.transferSize = originalTransferSize;
83
- return Math.round(Math.max(estimateBeforeInline - estimateAfterInline, 0));
84
+ return Math.round(Math.max(estimateBeforeInline - estimateAfterInline, 0)) as Types.Timing.MilliSeconds;
84
85
  }
85
86
 
86
87
  function hasImageLCP(parsedTrace: RequiredData<typeof deps>, context: InsightSetContextWithNavigation): boolean {
@@ -113,7 +114,7 @@ function computeSavings(
113
114
  const nodesAndTimingsByRequestId =
114
115
  getNodesAndTimingByRequestId(context.lantern.metrics.firstContentfulPaint.optimisticEstimate.nodeTimings);
115
116
 
116
- const metricSavings = {FCP: 0, LCP: 0};
117
+ const metricSavings = {FCP: 0 as Types.Timing.MilliSeconds, LCP: 0 as Types.Timing.MilliSeconds};
117
118
  const requestIdToWastedMs = new Map<string, number>();
118
119
  const deferredNodeIds = new Set<string>();
119
120
  for (const request of renderBlockingRequests) {
@@ -173,7 +174,7 @@ export function generateInsight(
173
174
  continue;
174
175
  }
175
176
 
176
- if (req.args.data.renderBlocking !== 'blocking' && req.args.data.renderBlocking !== 'in_body_parser_blocking') {
177
+ if (!Helpers.Network.isSyntheticNetworkRequestEventRenderBlocking(req)) {
177
178
  continue;
178
179
  }
179
180
 
@@ -211,6 +212,7 @@ export function generateInsight(
211
212
  });
212
213
 
213
214
  return {
215
+ relatedEvents: renderBlockingRequests,
214
216
  renderBlockingRequests,
215
217
  ...savings,
216
218
  };
@@ -6,7 +6,7 @@ import * as Helpers from '../helpers/helpers.js';
6
6
  import {type SelectorTiming, SelectorTimingsKey} from '../types/TraceEvents.js';
7
7
  import * as Types from '../types/types.js';
8
8
 
9
- import {type InsightResult, type InsightSetContext, type RequiredData} from './types.js';
9
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
10
10
 
11
11
  export function deps(): ['SelectorStats'] {
12
12
  return ['SelectorStats'];
@@ -82,6 +82,8 @@ export function generateInsight(
82
82
  });
83
83
 
84
84
  return {
85
+ // TODO: should we identify UpdateLayout events as linked to this insight?
86
+ relatedEvents: [],
85
87
  totalElapsedMs: Types.Timing.MilliSeconds(totalElapsedUs / 1000.0),
86
88
  totalMatchAttempts,
87
89
  totalMatchCount,
@@ -8,7 +8,7 @@ import type * as Handlers from '../handlers/handlers.js';
8
8
  import * as Helpers from '../helpers/helpers.js';
9
9
  import * as Types from '../types/types.js';
10
10
 
11
- import {type InsightResult, type InsightSetContext, type RequiredData} from './types.js';
11
+ import type {InsightResult, InsightSetContext, RequiredData} from './types.js';
12
12
 
13
13
  export function deps(): ['Meta', 'NetworkRequests', 'Renderer', 'ImagePainting'] {
14
14
  return ['Meta', 'NetworkRequests', 'Renderer', 'ImagePainting'];
@@ -184,6 +184,18 @@ function getSummaries(
184
184
  return {byEntity, byRequest, requestsByEntity};
185
185
  }
186
186
 
187
+ function getRelatedEvents(summaries: SummaryMaps, firstPartyEntity: Entity|undefined): Types.Events.Event[] {
188
+ const events = [];
189
+
190
+ for (const [entity, requests] of summaries.requestsByEntity.entries()) {
191
+ if (entity !== firstPartyEntity) {
192
+ events.push(...requests);
193
+ }
194
+ }
195
+
196
+ return events;
197
+ }
198
+
187
199
  export function generateInsight(
188
200
  parsedTrace: RequiredData<typeof deps>, context: InsightSetContext): ThirdPartyWebInsightResult {
189
201
  const networkRequests = parsedTrace.NetworkRequests.byTime.filter(event => {
@@ -212,11 +224,12 @@ export function generateInsight(
212
224
  // TODO(crbug.com/352244718): re-work to still collect main thread activity if no request is present
213
225
  const summaries = getSummaries(networkRequests, entityByRequest, selfTimeByUrl);
214
226
 
215
- const firstPartyUrl = context.navigation?.args.data?.url ?? parsedTrace.Meta.mainFrameURL;
227
+ const firstPartyUrl = context.navigation?.args.data?.documentLoaderURL ?? parsedTrace.Meta.mainFrameURL;
216
228
  const firstPartyEntity =
217
229
  ThirdPartyWeb.ThirdPartyWeb.getEntity(firstPartyUrl) || makeUpEntity(madeUpEntityCache, firstPartyUrl);
218
230
 
219
231
  return {
232
+ relatedEvents: getRelatedEvents(summaries, firstPartyEntity),
220
233
  entityByRequest,
221
234
  requestsByEntity: summaries.requestsByEntity,
222
235
  summaryByRequest: summaries.byRequest,