chrome-devtools-frontend 1.0.1380117 → 1.0.1386602

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 (595) hide show
  1. package/.stylelintrc.json +2 -1
  2. package/config/gni/devtools_grd_files.gni +25 -4
  3. package/config/gni/devtools_image_files.gni +2 -0
  4. package/docs/README.md +4 -0
  5. package/docs/contributing/issues.md +13 -10
  6. package/docs/get_the_code.md +4 -1
  7. package/docs/policy/README.md +6 -0
  8. package/docs/policy/slow-close.md +52 -0
  9. package/docs/styleguide/ux/README.md +1 -0
  10. package/docs/styleguide/ux/numbers.md +106 -0
  11. package/front_end/Images/src/cookie_off.svg +3 -0
  12. package/front_end/Images/src/domain.svg +3 -0
  13. package/front_end/core/common/Color.ts +3 -3
  14. package/front_end/core/common/SettingRegistration.ts +7 -0
  15. package/front_end/core/host/AidaClient.ts +3 -3
  16. package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -1
  17. package/front_end/core/host/UserMetrics.ts +0 -8
  18. package/front_end/core/i18n/locales/af.json +1031 -887
  19. package/front_end/core/i18n/locales/am.json +1036 -892
  20. package/front_end/core/i18n/locales/ar.json +1039 -895
  21. package/front_end/core/i18n/locales/as.json +1032 -888
  22. package/front_end/core/i18n/locales/az.json +1034 -890
  23. package/front_end/core/i18n/locales/be.json +1031 -887
  24. package/front_end/core/i18n/locales/bg.json +1031 -887
  25. package/front_end/core/i18n/locales/bn.json +1033 -889
  26. package/front_end/core/i18n/locales/bs.json +1036 -892
  27. package/front_end/core/i18n/locales/ca.json +1031 -887
  28. package/front_end/core/i18n/locales/cs.json +1030 -886
  29. package/front_end/core/i18n/locales/cy.json +1032 -888
  30. package/front_end/core/i18n/locales/da.json +1031 -887
  31. package/front_end/core/i18n/locales/de.json +1033 -889
  32. package/front_end/core/i18n/locales/el.json +1031 -887
  33. package/front_end/core/i18n/locales/en-GB.json +1033 -889
  34. package/front_end/core/i18n/locales/es-419.json +1029 -885
  35. package/front_end/core/i18n/locales/es.json +1032 -888
  36. package/front_end/core/i18n/locales/et.json +1033 -889
  37. package/front_end/core/i18n/locales/eu.json +1031 -887
  38. package/front_end/core/i18n/locales/fa.json +1035 -891
  39. package/front_end/core/i18n/locales/fi.json +1035 -891
  40. package/front_end/core/i18n/locales/fil.json +1034 -890
  41. package/front_end/core/i18n/locales/fr-CA.json +1031 -887
  42. package/front_end/core/i18n/locales/fr.json +1049 -905
  43. package/front_end/core/i18n/locales/gl.json +1032 -888
  44. package/front_end/core/i18n/locales/gu.json +1035 -891
  45. package/front_end/core/i18n/locales/he.json +1031 -887
  46. package/front_end/core/i18n/locales/hi.json +1034 -890
  47. package/front_end/core/i18n/locales/hr.json +1031 -887
  48. package/front_end/core/i18n/locales/hu.json +1033 -889
  49. package/front_end/core/i18n/locales/hy.json +1046 -902
  50. package/front_end/core/i18n/locales/id.json +1023 -879
  51. package/front_end/core/i18n/locales/is.json +1032 -888
  52. package/front_end/core/i18n/locales/it.json +1031 -887
  53. package/front_end/core/i18n/locales/ja.json +1042 -898
  54. package/front_end/core/i18n/locales/ka.json +1034 -890
  55. package/front_end/core/i18n/locales/kk.json +1035 -891
  56. package/front_end/core/i18n/locales/km.json +1035 -891
  57. package/front_end/core/i18n/locales/kn.json +1036 -892
  58. package/front_end/core/i18n/locales/ko.json +1031 -887
  59. package/front_end/core/i18n/locales/ky.json +1032 -888
  60. package/front_end/core/i18n/locales/lo.json +1030 -886
  61. package/front_end/core/i18n/locales/lt.json +1032 -888
  62. package/front_end/core/i18n/locales/lv.json +1032 -888
  63. package/front_end/core/i18n/locales/mk.json +1032 -888
  64. package/front_end/core/i18n/locales/ml.json +1033 -889
  65. package/front_end/core/i18n/locales/mn.json +1034 -890
  66. package/front_end/core/i18n/locales/mr.json +1035 -891
  67. package/front_end/core/i18n/locales/ms.json +1033 -889
  68. package/front_end/core/i18n/locales/my.json +1033 -889
  69. package/front_end/core/i18n/locales/ne.json +1036 -892
  70. package/front_end/core/i18n/locales/nl.json +1033 -889
  71. package/front_end/core/i18n/locales/no.json +1036 -892
  72. package/front_end/core/i18n/locales/or.json +1043 -899
  73. package/front_end/core/i18n/locales/pa.json +1030 -886
  74. package/front_end/core/i18n/locales/pl.json +1032 -888
  75. package/front_end/core/i18n/locales/pt-PT.json +1033 -889
  76. package/front_end/core/i18n/locales/pt.json +1033 -889
  77. package/front_end/core/i18n/locales/ro.json +1029 -885
  78. package/front_end/core/i18n/locales/ru.json +1026 -882
  79. package/front_end/core/i18n/locales/si.json +1031 -887
  80. package/front_end/core/i18n/locales/sk.json +1033 -889
  81. package/front_end/core/i18n/locales/sl.json +1031 -887
  82. package/front_end/core/i18n/locales/sq.json +1061 -917
  83. package/front_end/core/i18n/locales/sr-Latn.json +1033 -889
  84. package/front_end/core/i18n/locales/sr.json +1033 -889
  85. package/front_end/core/i18n/locales/sv.json +1031 -887
  86. package/front_end/core/i18n/locales/sw.json +1033 -889
  87. package/front_end/core/i18n/locales/ta.json +1058 -914
  88. package/front_end/core/i18n/locales/te.json +1037 -893
  89. package/front_end/core/i18n/locales/th.json +1032 -888
  90. package/front_end/core/i18n/locales/tr.json +1031 -887
  91. package/front_end/core/i18n/locales/uk.json +1030 -886
  92. package/front_end/core/i18n/locales/ur.json +1031 -887
  93. package/front_end/core/i18n/locales/uz.json +1023 -879
  94. package/front_end/core/i18n/locales/vi.json +1032 -888
  95. package/front_end/core/i18n/locales/zh-HK.json +1032 -888
  96. package/front_end/core/i18n/locales/zh-TW.json +1032 -888
  97. package/front_end/core/i18n/locales/zh.json +1033 -889
  98. package/front_end/core/i18n/locales/zu.json +1032 -888
  99. package/front_end/core/root/Runtime.ts +0 -1
  100. package/front_end/core/sdk/NetworkManager.test.ts +50 -0
  101. package/front_end/core/sdk/NetworkManager.ts +6 -4
  102. package/front_end/core/sdk/SourceMap.test.ts +5 -5
  103. package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +7 -2
  104. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
  105. package/front_end/core/sdk/SourceMapScopes.test.ts +112 -45
  106. package/front_end/core/sdk/SourceMapScopes.ts +39 -14
  107. package/front_end/core/sdk/SourceMapScopesInfo.test.ts +51 -50
  108. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  109. package/front_end/core/sdk/sdk-meta.ts +27 -0
  110. package/front_end/devtools_compatibility.js +0 -1
  111. package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
  112. package/front_end/entrypoints/inspector_main/renderingOptions.css +1 -1
  113. package/front_end/entrypoints/main/ExecutionContextSelector.test.ts +13 -3
  114. package/front_end/entrypoints/main/ExecutionContextSelector.ts +23 -1
  115. package/front_end/entrypoints/main/MainImpl.ts +0 -5
  116. package/front_end/generated/Deprecation.ts +0 -15
  117. package/front_end/generated/InspectorBackendCommands.js +1 -1
  118. package/front_end/generated/SupportedCSSProperties.js +0 -40
  119. package/front_end/generated/protocol.ts +1 -0
  120. package/front_end/models/bindings/IgnoreListManager.ts +25 -2
  121. package/front_end/models/crux-manager/CrUXManager.test.ts +25 -6
  122. package/front_end/models/crux-manager/CrUXManager.ts +23 -4
  123. package/front_end/models/extensions/ExtensionServer.test.ts +14 -0
  124. package/front_end/models/extensions/ExtensionServer.ts +28 -15
  125. package/front_end/models/issues_manager/CookieIssue.ts +79 -2
  126. package/front_end/models/issues_manager/IssuesManager.ts +1 -1
  127. package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
  128. package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
  129. package/front_end/models/javascript_metadata/NativeFunctions.js +14 -4
  130. package/front_end/models/persistence/EditFileSystemView.ts +2 -2
  131. package/front_end/models/persistence/editFileSystemView.css +6 -3
  132. package/front_end/models/persistence/workspaceSettingsTab.css +2 -2
  133. package/front_end/models/trace/extras/Metadata.test.ts +35 -2
  134. package/front_end/models/trace/extras/Metadata.ts +24 -5
  135. package/front_end/models/trace/extras/TraceTree.ts +28 -18
  136. package/front_end/models/trace/extras/URLForEntry.ts +6 -5
  137. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +12 -0
  138. package/front_end/models/trace/helpers/Timing.ts +8 -0
  139. package/front_end/models/trace/insights/CLSCulprits.ts +11 -3
  140. package/front_end/models/trace/insights/DocumentLatency.ts +16 -3
  141. package/front_end/models/trace/insights/FontDisplay.ts +10 -3
  142. package/front_end/models/trace/insights/ImageDelivery.test.ts +98 -0
  143. package/front_end/models/trace/insights/ImageDelivery.ts +183 -0
  144. package/front_end/models/trace/insights/InteractionToNextPaint.ts +9 -3
  145. package/front_end/models/trace/insights/LCPDiscovery.ts +24 -3
  146. package/front_end/models/trace/insights/LCPPhases.ts +25 -3
  147. package/front_end/models/trace/insights/Models.ts +1 -0
  148. package/front_end/models/trace/insights/RenderBlocking.ts +10 -2
  149. package/front_end/models/trace/insights/SlowCSSSelector.ts +10 -3
  150. package/front_end/models/trace/insights/ThirdParties.ts +11 -3
  151. package/front_end/models/trace/insights/Viewport.ts +16 -3
  152. package/front_end/models/trace/insights/types.ts +13 -2
  153. package/front_end/models/trace/types/File.ts +7 -0
  154. package/front_end/models/trace/types/TraceEvents.ts +9 -2
  155. package/front_end/panels/animation/AnimationTimeline.ts +2 -4
  156. package/front_end/panels/application/ApplicationPanelSidebar.test.ts +0 -5
  157. package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -21
  158. package/front_end/panels/application/IndexedDBViews.ts +4 -1
  159. package/front_end/panels/application/ServiceWorkerCacheViews.ts +4 -1
  160. package/front_end/panels/application/StorageView.test.ts +1 -1
  161. package/front_end/panels/application/resourcesSidebar.css +1 -1
  162. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +1 -1
  163. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
  164. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -1
  165. package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +1 -1
  166. package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +1 -1
  167. package/front_end/panels/console/ConsoleViewMessage.test.ts +25 -0
  168. package/front_end/panels/console/ConsoleViewMessage.ts +23 -0
  169. package/front_end/panels/coverage/CoverageListView.ts +1 -1
  170. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  171. package/front_end/panels/elements/ClassesPaneWidget.ts +1 -1
  172. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +3 -2
  173. package/front_end/panels/elements/ElementStatePaneWidget.ts +7 -2
  174. package/front_end/panels/elements/ElementsSidebarPane.ts +3 -3
  175. package/front_end/panels/elements/ElementsTreeElement.ts +1 -0
  176. package/front_end/panels/elements/LayersWidget.ts +1 -1
  177. package/front_end/panels/elements/PropertyMatchers.test.ts +7 -0
  178. package/front_end/panels/elements/PropertyMatchers.ts +3 -0
  179. package/front_end/panels/elements/classesPaneWidget.css +1 -1
  180. package/front_end/panels/emulation/DeviceModeView.ts +1 -1
  181. package/front_end/panels/emulation/DeviceModeWrapper.ts +1 -1
  182. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
  183. package/front_end/panels/freestyler/AiAgent.test.ts +319 -50
  184. package/front_end/panels/freestyler/AiAgent.ts +193 -141
  185. package/front_end/panels/freestyler/AiHistoryStorage.test.ts +159 -0
  186. package/front_end/panels/freestyler/AiHistoryStorage.ts +73 -0
  187. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +14 -15
  188. package/front_end/panels/freestyler/DrJonesFileAgent.ts +3 -14
  189. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +14 -13
  190. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +3 -3
  191. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +38 -36
  192. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +3 -14
  193. package/front_end/panels/freestyler/FreestylerAgent.test.ts +195 -14
  194. package/front_end/panels/freestyler/FreestylerAgent.ts +13 -18
  195. package/front_end/panels/freestyler/FreestylerPanel.test.ts +71 -0
  196. package/front_end/panels/freestyler/FreestylerPanel.ts +99 -74
  197. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +128 -29
  198. package/front_end/panels/freestyler/components/UserActionRow.ts +1 -0
  199. package/front_end/panels/freestyler/components/freestylerChatUi.css +21 -1
  200. package/front_end/panels/freestyler/components/userActionRow.css +2 -1
  201. package/front_end/panels/freestyler/freestyler.ts +1 -0
  202. package/front_end/panels/issues/IssueAggregator.test.ts +50 -0
  203. package/front_end/panels/issues/IssueAggregator.ts +10 -10
  204. package/front_end/panels/issues/issuesTree.css +1 -1
  205. package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -1
  206. package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
  207. package/front_end/panels/layer_viewer/PaintProfilerView.ts +1 -1
  208. package/front_end/panels/layers/LayersPanel.ts +1 -1
  209. package/front_end/panels/lighthouse/lighthouseStartView.css +1 -1
  210. package/front_end/panels/media/TickingFlameChart.ts +1 -1
  211. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +1 -1
  212. package/front_end/panels/network/BlockedURLsPane.ts +1 -1
  213. package/front_end/panels/network/NetworkDataGridNode.ts +1 -0
  214. package/front_end/panels/network/NetworkLogView.test.ts +1 -1
  215. package/front_end/panels/network/NetworkPanel.ts +40 -32
  216. package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -1
  217. package/front_end/panels/profiler/HeapProfileView.ts +9 -9
  218. package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -1
  219. package/front_end/panels/profiler/IsolateSelector.ts +1 -1
  220. package/front_end/panels/profiler/LiveHeapProfileView.ts +3 -1
  221. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +3 -3
  222. package/front_end/panels/profiler/ProfileView.ts +2 -2
  223. package/front_end/panels/profiler/profileLauncherView.css +1 -1
  224. package/front_end/panels/profiler/profilesSidebarTree.css +1 -1
  225. package/front_end/panels/recorder/recorderController.css +1 -1
  226. package/front_end/panels/security/CookieControlsTreeElement.ts +18 -0
  227. package/front_end/panels/security/CookieControlsView.test.ts +29 -0
  228. package/front_end/panels/security/CookieControlsView.ts +265 -0
  229. package/front_end/panels/security/CookieReportView.test.ts +157 -0
  230. package/front_end/panels/security/CookieReportView.ts +208 -12
  231. package/front_end/panels/security/SecurityPanel.ts +5 -3
  232. package/front_end/panels/security/SecurityPanelSidebar.ts +6 -1
  233. package/front_end/panels/security/cookieControlsView.css +101 -0
  234. package/front_end/panels/security/cookieReportView.css +26 -3
  235. package/front_end/panels/security/security.ts +4 -0
  236. package/front_end/panels/security/sidebar.css +1 -1
  237. package/front_end/panels/settings/KeybindsSettingsTab.ts +3 -2
  238. package/front_end/panels/settings/SettingsScreen.ts +5 -1
  239. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +1 -1
  240. package/front_end/panels/settings/keybindsSettingsTab.css +6 -1
  241. package/front_end/panels/settings/settings-meta.ts +3 -1
  242. package/front_end/panels/settings/settingsScreen.css +10 -0
  243. package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
  244. package/front_end/panels/sources/NavigatorView.ts +1 -0
  245. package/front_end/panels/sources/navigatorTree.css +1 -1
  246. package/front_end/panels/sources/sourcesPanel.css +2 -2
  247. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -7
  248. package/front_end/panels/timeline/AppenderUtils.ts +1 -1
  249. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +38 -41
  250. package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -13
  251. package/front_end/panels/timeline/InteractionsTrackAppender.ts +3 -4
  252. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -12
  253. package/front_end/panels/timeline/ServerTimingsTrackAppender.ts +1 -10
  254. package/front_end/panels/timeline/ThreadAppender.ts +9 -12
  255. package/front_end/panels/timeline/TimelineController.ts +1 -1
  256. package/front_end/panels/timeline/TimelineDetailsView.test.ts +3 -2
  257. package/front_end/panels/timeline/TimelineDetailsView.ts +18 -17
  258. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +55 -36
  259. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -1
  260. package/front_end/panels/timeline/TimelineFlameChartView.ts +33 -14
  261. package/front_end/panels/timeline/TimelineHistoryManager.test.ts +20 -15
  262. package/front_end/panels/timeline/TimelineHistoryManager.ts +46 -58
  263. package/front_end/panels/timeline/TimelineLayersView.ts +1 -1
  264. package/front_end/panels/timeline/TimelineLoader.ts +16 -0
  265. package/front_end/panels/timeline/TimelineMiniMap.ts +2 -2
  266. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  267. package/front_end/panels/timeline/TimelinePanel.ts +145 -28
  268. package/front_end/panels/timeline/TimelineTreeView.ts +65 -16
  269. package/front_end/panels/timeline/TimelineUIUtils.ts +44 -0
  270. package/front_end/panels/timeline/TimingsTrackAppender.ts +6 -13
  271. package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -0
  272. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +6 -1
  273. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +12 -0
  274. package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -18
  275. package/front_end/panels/timeline/components/Sidebar.ts +1 -4
  276. package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +1 -1
  277. package/front_end/panels/timeline/components/SidebarInsightsTab.ts +1 -1
  278. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +21 -35
  279. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +16 -9
  280. package/front_end/panels/timeline/components/TimelineSummary.test.ts +75 -0
  281. package/front_end/panels/timeline/components/TimelineSummary.ts +101 -0
  282. package/front_end/panels/timeline/components/Utils.test.ts +49 -0
  283. package/front_end/panels/timeline/components/Utils.ts +2 -2
  284. package/front_end/panels/timeline/components/components.ts +2 -0
  285. package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +84 -0
  286. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +291 -0
  287. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +17 -41
  288. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +28 -46
  289. package/front_end/panels/timeline/components/insights/EventRef.ts +70 -2
  290. package/front_end/panels/timeline/components/insights/FontDisplay.ts +28 -46
  291. package/front_end/panels/timeline/components/insights/Helpers.ts +5 -208
  292. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +142 -0
  293. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +30 -53
  294. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +36 -75
  295. package/front_end/panels/timeline/components/insights/LCPPhases.ts +15 -49
  296. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +27 -44
  297. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -197
  298. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +51 -74
  299. package/front_end/panels/timeline/components/insights/Table.ts +6 -5
  300. package/front_end/panels/timeline/components/insights/ThirdParties.ts +41 -61
  301. package/front_end/panels/timeline/components/insights/Viewport.ts +20 -31
  302. package/front_end/panels/timeline/components/insights/{sidebarInsight.css → baseInsightComponent.css} +9 -9
  303. package/front_end/panels/timeline/components/insights/insights.ts +4 -0
  304. package/front_end/panels/timeline/components/insights/types.ts +0 -7
  305. package/front_end/panels/timeline/components/liveMetricsView.css +5 -5
  306. package/front_end/panels/timeline/components/timelineSummary.css +67 -0
  307. package/front_end/panels/timeline/docs/flame_chart_migration.md +1 -1
  308. package/front_end/panels/timeline/fixtures/traces/README.md +4 -0
  309. package/front_end/panels/timeline/fixtures/traces/image-delivery.json.gz +0 -0
  310. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +22 -0
  311. package/front_end/panels/timeline/timeline-meta.ts +1 -1
  312. package/front_end/panels/timeline/timelineFlamechartPopover.css +14 -4
  313. package/front_end/panels/timeline/timelineHistoryManager.css +7 -3
  314. package/front_end/panels/timeline/timelinePanel.css +0 -1
  315. package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +5 -5
  316. package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +5 -6
  317. package/front_end/panels/timeline/track_appenders/LayoutShiftsTrackAppender.test.ts +11 -2
  318. package/front_end/panels/timeline/track_appenders/ServerTimingsTrackAppender.test.ts +0 -9
  319. package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +37 -44
  320. package/front_end/panels/timeline/track_appenders/TimingsTrackAppender.test.ts +44 -30
  321. package/front_end/panels/timeline/utils/EntryName.ts +1 -2
  322. package/front_end/panels/timeline/utils/Helpers.ts +19 -0
  323. package/front_end/panels/timeline/utils/IgnoreList.test.ts +52 -0
  324. package/front_end/panels/timeline/utils/IgnoreList.ts +68 -7
  325. package/front_end/panels/timeline/utils/SourceMapsResolver.ts +2 -0
  326. package/front_end/panels/webauthn/webauthnPane.css +1 -1
  327. package/front_end/panels/whats_new/ReleaseNote.test.ts +90 -0
  328. package/front_end/panels/whats_new/ReleaseNoteText.ts +52 -0
  329. package/front_end/panels/whats_new/ReleaseNoteView.ts +157 -0
  330. package/front_end/panels/whats_new/WhatsNewImpl.ts +102 -0
  331. package/front_end/panels/whats_new/releaseNoteView.css +121 -0
  332. package/front_end/panels/whats_new/resources/WNDT.md +6 -0
  333. package/front_end/panels/whats_new/resources/whatsnew.avif +0 -0
  334. package/front_end/panels/whats_new/whats_new-meta.ts +142 -0
  335. package/front_end/panels/whats_new/whats_new.ts +13 -0
  336. package/front_end/services/puppeteer/PuppeteerConnection.ts +4 -3
  337. package/front_end/testing/EnvironmentHelpers.ts +1 -2
  338. package/front_end/testing/SourceMapEncoder.ts +27 -11
  339. package/front_end/testing/TraceHelpers.ts +2 -1
  340. package/front_end/testing/TraceLoader.ts +6 -2
  341. package/front_end/third_party/lighthouse/README.chromium +2 -2
  342. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1380 -1369
  343. package/front_end/third_party/lighthouse/locales/ar-XB.json +88 -85
  344. package/front_end/third_party/lighthouse/locales/ar.json +98 -95
  345. package/front_end/third_party/lighthouse/locales/bg.json +88 -85
  346. package/front_end/third_party/lighthouse/locales/ca.json +91 -88
  347. package/front_end/third_party/lighthouse/locales/cs.json +91 -88
  348. package/front_end/third_party/lighthouse/locales/da.json +94 -91
  349. package/front_end/third_party/lighthouse/locales/de.json +92 -89
  350. package/front_end/third_party/lighthouse/locales/el.json +92 -89
  351. package/front_end/third_party/lighthouse/locales/en-GB.json +89 -86
  352. package/front_end/third_party/lighthouse/locales/en-US.json +23 -20
  353. package/front_end/third_party/lighthouse/locales/en-XA.json +88 -85
  354. package/front_end/third_party/lighthouse/locales/en-XL.json +23 -20
  355. package/front_end/third_party/lighthouse/locales/es-419.json +92 -89
  356. package/front_end/third_party/lighthouse/locales/es.json +91 -88
  357. package/front_end/third_party/lighthouse/locales/fi.json +92 -89
  358. package/front_end/third_party/lighthouse/locales/fil.json +93 -90
  359. package/front_end/third_party/lighthouse/locales/fr.json +94 -91
  360. package/front_end/third_party/lighthouse/locales/he.json +97 -94
  361. package/front_end/third_party/lighthouse/locales/hi.json +92 -89
  362. package/front_end/third_party/lighthouse/locales/hr.json +90 -87
  363. package/front_end/third_party/lighthouse/locales/hu.json +90 -87
  364. package/front_end/third_party/lighthouse/locales/id.json +91 -88
  365. package/front_end/third_party/lighthouse/locales/it.json +90 -87
  366. package/front_end/third_party/lighthouse/locales/ja.json +90 -87
  367. package/front_end/third_party/lighthouse/locales/ko.json +90 -87
  368. package/front_end/third_party/lighthouse/locales/lt.json +90 -87
  369. package/front_end/third_party/lighthouse/locales/lv.json +91 -88
  370. package/front_end/third_party/lighthouse/locales/nl.json +90 -87
  371. package/front_end/third_party/lighthouse/locales/no.json +92 -89
  372. package/front_end/third_party/lighthouse/locales/pl.json +90 -87
  373. package/front_end/third_party/lighthouse/locales/pt-PT.json +111 -108
  374. package/front_end/third_party/lighthouse/locales/pt.json +97 -94
  375. package/front_end/third_party/lighthouse/locales/ro.json +94 -91
  376. package/front_end/third_party/lighthouse/locales/ru.json +93 -90
  377. package/front_end/third_party/lighthouse/locales/sk.json +93 -90
  378. package/front_end/third_party/lighthouse/locales/sl.json +91 -88
  379. package/front_end/third_party/lighthouse/locales/sr-Latn.json +91 -88
  380. package/front_end/third_party/lighthouse/locales/sr.json +91 -88
  381. package/front_end/third_party/lighthouse/locales/sv.json +92 -89
  382. package/front_end/third_party/lighthouse/locales/ta.json +101 -98
  383. package/front_end/third_party/lighthouse/locales/te.json +92 -89
  384. package/front_end/third_party/lighthouse/locales/th.json +95 -92
  385. package/front_end/third_party/lighthouse/locales/tr.json +91 -88
  386. package/front_end/third_party/lighthouse/locales/uk.json +93 -90
  387. package/front_end/third_party/lighthouse/locales/vi.json +95 -92
  388. package/front_end/third_party/lighthouse/locales/zh-HK.json +92 -89
  389. package/front_end/third_party/lighthouse/locales/zh-TW.json +98 -95
  390. package/front_end/third_party/lighthouse/locales/zh.json +96 -93
  391. package/front_end/third_party/puppeteer/README.chromium +2 -2
  392. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +8 -0
  393. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  394. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  395. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  396. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +3 -1
  397. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  398. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts +1 -0
  399. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  400. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js +1 -0
  401. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/HTTPRequest.js.map +1 -1
  402. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +4 -0
  403. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  404. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  405. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +1 -0
  406. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  407. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +3 -0
  408. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  409. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -2
  410. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  411. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +10 -4
  412. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  413. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  414. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
  415. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
  416. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +2 -0
  417. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  418. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +7 -0
  419. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  420. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  421. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  422. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +3 -0
  423. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  424. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts +1 -2
  425. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
  426. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js +4 -4
  427. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPResponse.js.map +1 -1
  428. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  429. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js +24 -12
  430. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
  431. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +1 -0
  432. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  433. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +3 -0
  434. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  435. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +5 -0
  436. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  437. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts +30 -0
  438. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
  439. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js +8 -0
  440. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DownloadBehavior.js.map +1 -0
  441. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts +1 -0
  442. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/common.d.ts.map +1 -1
  443. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  444. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  445. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  446. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  447. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +2 -2
  448. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  449. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  450. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  451. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  452. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  453. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +49 -0
  454. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +118 -88
  455. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +8 -0
  456. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  457. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  458. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  459. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +3 -1
  460. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  461. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts +1 -0
  462. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  463. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js +1 -0
  464. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/HTTPRequest.js.map +1 -1
  465. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +4 -0
  466. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  467. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  468. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +1 -0
  469. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  470. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +3 -0
  471. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  472. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -2
  473. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  474. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +10 -4
  475. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  476. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  477. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
  478. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
  479. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +2 -0
  480. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  481. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +7 -0
  482. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  483. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  484. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  485. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +3 -0
  486. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  487. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts +1 -2
  488. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
  489. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js +4 -4
  490. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPResponse.js.map +1 -1
  491. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  492. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js +24 -12
  493. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
  494. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +1 -0
  495. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  496. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +3 -0
  497. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  498. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +5 -0
  499. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  500. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts +30 -0
  501. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.d.ts.map +1 -0
  502. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js +7 -0
  503. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DownloadBehavior.js.map +1 -0
  504. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts +1 -0
  505. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/common.d.ts.map +1 -1
  506. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  507. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  508. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  509. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +2 -2
  510. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  511. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  512. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  513. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  514. package/front_end/third_party/puppeteer/package/lib/types.d.ts +49 -0
  515. package/front_end/third_party/puppeteer/package/package.json +3 -3
  516. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +8 -0
  517. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +3 -1
  518. package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +1 -0
  519. package/front_end/third_party/puppeteer/package/src/api/Page.ts +5 -0
  520. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +4 -0
  521. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +11 -3
  522. package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
  523. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +11 -0
  524. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +4 -0
  525. package/front_end/third_party/puppeteer/package/src/cdp/HTTPResponse.ts +3 -5
  526. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +34 -17
  527. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +4 -0
  528. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +5 -0
  529. package/front_end/third_party/puppeteer/package/src/common/DownloadBehavior.ts +31 -0
  530. package/front_end/third_party/puppeteer/package/src/common/common.ts +1 -0
  531. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  532. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +2 -0
  533. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  534. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
  535. package/front_end/ui/components/data_grid/DataGridControllerIntegrator.ts +4 -1
  536. package/front_end/ui/components/dialogs/ButtonDialog.test.ts +78 -0
  537. package/front_end/ui/components/dialogs/ButtonDialog.ts +131 -0
  538. package/front_end/ui/components/dialogs/Dialog.test.ts +43 -0
  539. package/front_end/ui/components/dialogs/Dialog.ts +64 -2
  540. package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +15 -1
  541. package/front_end/ui/components/dialogs/ShortcutDialog.ts +28 -20
  542. package/front_end/ui/components/dialogs/buttonDialog.css +9 -0
  543. package/front_end/ui/components/dialogs/dialog.css +15 -0
  544. package/front_end/ui/components/dialogs/dialogs.ts +2 -0
  545. package/front_end/ui/components/dialogs/shortcutDialog.css +34 -6
  546. package/front_end/ui/components/docs/dialog/button_dialog.html +28 -0
  547. package/front_end/ui/components/docs/dialog/button_dialog.ts +29 -0
  548. package/front_end/ui/components/docs/performance_panel/basic.ts +1 -1
  549. package/front_end/ui/components/docs/performance_panel/timeline_history_manager.ts +6 -4
  550. package/front_end/ui/components/floating_button/FloatingButton.ts +3 -2
  551. package/front_end/ui/components/icon_button/fileSourceIcon.css +7 -3
  552. package/front_end/ui/components/issue_counter/IssueCounter.ts +15 -2
  553. package/front_end/ui/components/legacy_wrapper/LegacyWrapper.ts +1 -1
  554. package/front_end/ui/components/markdown_view/MarkdownView.ts +15 -0
  555. package/front_end/ui/components/markdown_view/markdownView.css +1 -1
  556. package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +24 -18
  557. package/front_end/ui/components/switch/SwitchImpl.ts +2 -2
  558. package/front_end/ui/legacy/Infobar.ts +6 -0
  559. package/front_end/ui/legacy/InspectorView.ts +40 -0
  560. package/front_end/ui/legacy/ListWidget.ts +4 -2
  561. package/front_end/ui/legacy/ThrottledWidget.ts +2 -2
  562. package/front_end/ui/legacy/Toolbar.ts +3 -3
  563. package/front_end/ui/legacy/UIUtils.ts +8 -6
  564. package/front_end/ui/legacy/Widget.ts +32 -0
  565. package/front_end/ui/legacy/components/data_grid/DataGrid.test.ts +6 -9
  566. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +35 -34
  567. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
  568. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +2 -2
  569. package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +1 -1
  570. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +32 -25
  571. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +18 -4
  572. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +80 -39
  573. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +4 -4
  574. package/front_end/ui/legacy/components/utils/jsUtils.css +8 -0
  575. package/front_end/ui/legacy/filter.css +1 -1
  576. package/front_end/ui/legacy/inspectorCommon.css +1 -1
  577. package/front_end/ui/legacy/listWidget.css +4 -1
  578. package/front_end/ui/legacy/reportView.css +1 -1
  579. package/front_end/ui/legacy/toolbar.css +3 -6
  580. package/front_end/ui/legacy/treeoutline.css +3 -1
  581. package/front_end/ui/visual_logging/KnownContextValues.ts +12 -1
  582. package/front_end/ui/visual_logging/LoggingDriver.test.ts +27 -1
  583. package/front_end/ui/visual_logging/LoggingDriver.ts +7 -4
  584. package/package.json +2 -3
  585. package/scripts/build/wasm-as.py +1 -1
  586. package/scripts/freestyler/auto_freestyler.js +12 -4
  587. package/scripts/freestyler/to_tsv.mjs +40 -0
  588. package/scripts/tools/update_goldens.py +11 -13
  589. package/front_end/panels/timeline/components/insights/SidebarInsight.test.ts +0 -72
  590. package/front_end/ui/components/docs/two_states_counter/basic.html +0 -27
  591. package/front_end/ui/components/docs/two_states_counter/basic.ts +0 -45
  592. package/front_end/ui/components/two_states_counter/TwoStatesCounter.test.ts +0 -73
  593. package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +0 -104
  594. package/front_end/ui/components/two_states_counter/twoStatesCounter.css +0 -37
  595. package/front_end/ui/components/two_states_counter/two_states_counter.ts +0 -9
@@ -56,13 +56,13 @@
56
56
  margin-top: 0;
57
57
  }
58
58
 
59
- .scripts-debug-toolbar-drawer > [is="dt-checkbox"] {
59
+ .scripts-debug-toolbar-drawer > dt-checkbox {
60
60
  display: none;
61
61
  padding-left: 3px;
62
62
  height: 28px;
63
63
  }
64
64
 
65
- .scripts-debug-toolbar-drawer.expanded > [is="dt-checkbox"] {
65
+ .scripts-debug-toolbar-drawer.expanded > dt-checkbox {
66
66
  display: flex;
67
67
  }
68
68
 
@@ -7,10 +7,9 @@ import * as Trace from '../../models/trace/trace.js';
7
7
  import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
8
8
  import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
9
9
 
10
- import {addDecorationToEvent, buildGroupStyle, buildTrackHeader, getFormattedTime} from './AppenderUtils.js';
10
+ import {addDecorationToEvent, buildGroupStyle, buildTrackHeader} from './AppenderUtils.js';
11
11
  import {
12
12
  type CompatibilityTracksAppender,
13
- type HighlightedEntryInfo,
14
13
  type TrackAppender,
15
14
  type TrackAppenderName,
16
15
  VisualLoggingTrackName,
@@ -75,9 +74,4 @@ export class AnimationsTrackAppender implements TrackAppender {
75
74
  const {displayName} = event.args.data.beginEvent.args.data;
76
75
  return displayName || event.name;
77
76
  }
78
-
79
- highlightedEntryInfo(event: Trace.Types.Events.SyntheticAnimationPair): HighlightedEntryInfo {
80
- const title = this.titleForEvent(event);
81
- return {title, formattedTime: getFormattedTime(event.dur)};
82
- }
83
77
  }
@@ -81,7 +81,7 @@ export function buildTrackHeader(
81
81
  * Returns the time info shown when an event is hovered in the timeline.
82
82
  * @param totalTime the total time of the hovered event.
83
83
  * @param selfTime the self time of the hovered event.
84
- * @returns the formatted time string for highlightedEntryInfo
84
+ * @returns the formatted time string for popoverInfo
85
85
  */
86
86
  export function getFormattedTime(
87
87
  totalTime?: Trace.Types.Timing.MicroSeconds, selfTime?: Trace.Types.Timing.MicroSeconds): string {
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
+ import * as Platform from '../../core/platform/platform.js';
6
7
  import * as Root from '../../core/root/root.js';
7
8
  import * as Trace from '../../models/trace/trace.js';
8
9
  import type * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
@@ -25,11 +26,12 @@ import {
25
26
  import {TimingsTrackAppender} from './TimingsTrackAppender.js';
26
27
  import * as TimelineUtils from './utils/utils.js';
27
28
 
28
- export type HighlightedEntryInfo = {
29
+ export type PopoverInfo = {
29
30
  title: string,
30
31
  formattedTime: string,
31
- warningElements?: HTMLSpanElement[],
32
- additionalElement?: HTMLElement,
32
+ url: string|null,
33
+ warningElements: HTMLSpanElement[],
34
+ additionalElements: HTMLElement[],
33
35
  };
34
36
 
35
37
  let showPostMessageEvents: boolean|undefined;
@@ -124,9 +126,9 @@ export interface TrackAppender {
124
126
  */
125
127
  titleForEvent?(event: Trace.Types.Events.Event): string;
126
128
  /**
127
- * Returns the info shown when an event in the timeline is hovered.
129
+ * Updates the standard popover (AKA tooltip) some appender specific details.
128
130
  */
129
- highlightedEntryInfo?(event: Trace.Types.Events.Event): Partial<HighlightedEntryInfo>;
131
+ setPopoverInfo?(event: Trace.Types.Events.Event, info: PopoverInfo): void;
130
132
  /**
131
133
  * Returns the a callback function to draw an event to overrides the normal rectangle draw operation.
132
134
  */
@@ -645,47 +647,42 @@ export class CompatibilityTracksAppender {
645
647
  /**
646
648
  * Returns the info shown when an event in the timeline is hovered.
647
649
  */
648
- highlightedEntryInfo(event: Trace.Types.Events.Event, level: number): HighlightedEntryInfo {
650
+ popoverInfo(event: Trace.Types.Events.Event, level: number): PopoverInfo {
649
651
  const track = this.#trackForLevel.get(level);
650
652
  if (!track) {
651
653
  throw new Error('Track not found for level');
652
654
  }
653
655
 
654
- // Add any warnings information to the tooltip. Done here to avoid duplicating this call in every appender.
655
- // By doing this here, we ensure that any warnings that are
656
- // added to the WarningsHandler are automatically used and added
657
- // to the tooltip.
658
- const warningElements: HTMLSpanElement[] =
659
- TimelineComponents.DetailsView.buildWarningElementsForEvent(event, this.#parsedTrace);
660
-
661
- let title = this.titleForEvent(event, level);
662
- let formattedTime = getFormattedTime(event.dur);
663
- let additionalElement;
664
-
665
- // If the track defines a custom highlight, call it and use its values.
666
- if (track.highlightedEntryInfo) {
667
- const {
668
- title: customTitle,
669
- formattedTime: customFormattedTime,
670
- warningElements: extraWarningElements,
671
- additionalElement: element,
672
- } = track.highlightedEntryInfo(event);
673
- if (customTitle) {
674
- title = customTitle;
675
- }
676
- if (customFormattedTime) {
677
- formattedTime = customFormattedTime;
678
- }
679
- if (extraWarningElements) {
680
- warningElements.push(...extraWarningElements);
681
- }
682
- additionalElement = element;
683
- }
684
- return {
685
- title,
686
- formattedTime,
687
- warningElements,
688
- additionalElement,
656
+ // Defaults here, though tracks may chose to redefine title/formattedTime
657
+ const info: PopoverInfo = {
658
+ title: this.titleForEvent(event, level),
659
+ formattedTime: getFormattedTime(event.dur),
660
+ warningElements: TimelineComponents.DetailsView.buildWarningElementsForEvent(event, this.#parsedTrace),
661
+ additionalElements: [],
662
+ url: null,
689
663
  };
664
+
665
+ // If the track defines its own popoverInfo(), it'll update values within
666
+ if (track.setPopoverInfo) {
667
+ track.setPopoverInfo(event, info);
668
+ }
669
+
670
+ // If there's a url associated, add into additionalElements
671
+ const url = URL.parse(
672
+ info.url ?? TimelineUtils.SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(this.#parsedTrace, event) ??
673
+ '');
674
+ if (url) {
675
+ const MAX_PATH_LENGTH = 45;
676
+ const MAX_ORIGIN_LENGTH = 30;
677
+ const path = Platform.StringUtilities.trimMiddle(url.href.replace(url.origin, ''), MAX_PATH_LENGTH);
678
+ const origin =
679
+ Platform.StringUtilities.trimEndWithMaxLength(url.origin.replace('https://', ''), MAX_ORIGIN_LENGTH);
680
+ const urlElems = document.createElement('div');
681
+ urlElems.createChild('span', 'popoverinfo-url-path').textContent = path;
682
+ urlElems.createChild('span', 'popoverinfo-url-origin').textContent = `(${origin})`;
683
+ info.additionalElements.push(urlElems);
684
+ }
685
+
686
+ return info;
690
687
  }
691
688
  }
@@ -5,10 +5,9 @@ import * as i18n from '../../core/i18n/i18n.js';
5
5
  import * as Trace from '../../models/trace/trace.js';
6
6
  import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
7
7
 
8
- import {buildGroupStyle, buildTrackHeader, getFormattedTime} from './AppenderUtils.js';
8
+ import {buildGroupStyle, buildTrackHeader} from './AppenderUtils.js';
9
9
  import {
10
10
  type CompatibilityTracksAppender,
11
- type HighlightedEntryInfo,
12
11
  type TrackAppender,
13
12
  type TrackAppenderName,
14
13
  VisualLoggingTrackName,
@@ -100,17 +99,9 @@ export class ExtensionTrackAppender implements TrackAppender {
100
99
  }
101
100
 
102
101
  titleForEvent(event: Trace.Types.Events.Event): string {
102
+ if (Trace.Types.Extensions.isSyntheticExtensionEntry(event) && event.args.tooltipText) {
103
+ return event.args.tooltipText;
104
+ }
103
105
  return event.name;
104
106
  }
105
-
106
- /**
107
- * Returns the info shown when an event added by this appender
108
- * is hovered in the timeline.
109
- */
110
- highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
111
- const title = Trace.Types.Extensions.isSyntheticExtensionEntry(event) && event.args.tooltipText ?
112
- event.args.tooltipText :
113
- this.titleForEvent(event);
114
- return {title, formattedTime: getFormattedTime(event.dur)};
115
- }
116
107
  }
@@ -9,7 +9,7 @@ import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
9
9
  import {buildGroupStyle, buildTrackHeader} from './AppenderUtils.js';
10
10
  import {
11
11
  type CompatibilityTracksAppender,
12
- type HighlightedEntryInfo,
12
+ type PopoverInfo,
13
13
  type TrackAppender,
14
14
  type TrackAppenderName,
15
15
  VisualLoggingTrackName,
@@ -148,12 +148,11 @@ export class InteractionsTrackAppender implements TrackAppender {
148
148
  return this.#colorGenerator.colorForID(idForColorGeneration);
149
149
  }
150
150
 
151
- highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
151
+ setPopoverInfo(event: Trace.Types.Events.Event, info: PopoverInfo): void {
152
152
  if (Trace.Types.Events.isSyntheticInteraction(event)) {
153
153
  const breakdown = new Components.InteractionBreakdown.InteractionBreakdown();
154
154
  breakdown.entry = event;
155
- return {title: '', formattedTime: '', additionalElement: breakdown};
155
+ info.additionalElements.push(breakdown);
156
156
  }
157
- return {title: '', formattedTime: ''};
158
157
  }
159
158
  }
@@ -13,7 +13,7 @@ import {buildGroupStyle, buildTrackHeader} from './AppenderUtils.js';
13
13
  import {
14
14
  type CompatibilityTracksAppender,
15
15
  type DrawOverride,
16
- type HighlightedEntryInfo,
16
+ type PopoverInfo,
17
17
  type TrackAppender,
18
18
  type TrackAppenderName,
19
19
  VisualLoggingTrackName,
@@ -143,31 +143,25 @@ export class LayoutShiftsTrackAppender implements TrackAppender {
143
143
  return '';
144
144
  }
145
145
 
146
- /**
147
- * Returns the info shown when an event added by this appender
148
- * is hovered in the timeline.
149
- */
150
- highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
146
+ setPopoverInfo(event: Trace.Types.Events.Event, info: PopoverInfo): void {
151
147
  const score = Trace.Types.Events.isLayoutShift(event) ? event.args.data?.weighted_score_delta ?? 0 :
152
148
  Trace.Types.Events.isSyntheticLayoutShiftCluster(event) ? event.clusterCumulativeScore :
153
149
  -1;
154
- const title = Trace.Types.Events.isLayoutShift(event) ? i18nString(UIStrings.layoutShift) :
150
+ // Score isn't a duration, but the UI works anyhow.
151
+ info.formattedTime = score.toFixed(4);
152
+ info.title = Trace.Types.Events.isLayoutShift(event) ? i18nString(UIStrings.layoutShift) :
155
153
  Trace.Types.Events.isSyntheticLayoutShiftCluster(event) ? i18nString(UIStrings.layoutShiftCluster) :
156
154
  event.name;
157
155
 
158
- let additionalElement;
159
156
  if (Trace.Types.Events.isSyntheticLayoutShift(event)) {
160
157
  // Screenshots are max 500x500 naturally, but on a laptop in dock-to-right, 500px tall usually doesn't fit.
161
158
  // In the future, we may investigate a way to dynamically scale this tooltip content per available space.
162
159
  const maxSize = new UI.Geometry.Size(510, 400);
163
160
  const vizElem = LayoutShiftsTrackAppender.createShiftViz(event, this.#parsedTrace, maxSize);
164
161
  if (vizElem) {
165
- additionalElement = vizElem;
162
+ info.additionalElements.push(vizElem);
166
163
  }
167
164
  }
168
-
169
- // Score isn't a duration, but the UI works anyhow.
170
- return {title, formattedTime: score.toFixed(4), additionalElement};
171
165
  }
172
166
 
173
167
  getDrawOverride(event: Trace.Types.Events.Event): DrawOverride|undefined {
@@ -6,10 +6,9 @@ import * as Root from '../../core/root/root.js';
6
6
  import type * as Trace from '../../models/trace/trace.js';
7
7
  import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
8
8
 
9
- import {buildGroupStyle, buildTrackHeader, getFormattedTime} from './AppenderUtils.js';
9
+ import {buildGroupStyle, buildTrackHeader} from './AppenderUtils.js';
10
10
  import {
11
11
  type CompatibilityTracksAppender,
12
- type HighlightedEntryInfo,
13
12
  type TrackAppender,
14
13
  type TrackAppenderName,
15
14
  VisualLoggingTrackName,
@@ -90,12 +89,4 @@ export class ServerTimingsTrackAppender implements TrackAppender {
90
89
  titleForEvent(event: Trace.Types.Events.Event): string {
91
90
  return event.name;
92
91
  }
93
-
94
- /**
95
- * Returns the info shown when an event added by this appender
96
- * is hovered in the timeline.
97
- */
98
- highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
99
- return {title: event.name, formattedTime: getFormattedTime(event.dur)};
100
- }
101
92
  }
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  type CompatibilityTracksAppender,
21
21
  entryIsVisibleInTimeline,
22
- type HighlightedEntryInfo,
22
+ type PopoverInfo,
23
23
  type TrackAppender,
24
24
  type TrackAppenderName,
25
25
  VisualLoggingTrackName,
@@ -29,10 +29,11 @@ import * as Utils from './utils/utils.js';
29
29
 
30
30
  const UIStrings = {
31
31
  /**
32
- *@description Text shown for an entry in the flame chart that is ignored because it matches
32
+ * @description Text shown for an entry in the flame chart that is ignored because it matches
33
33
  * a predefined ignore list.
34
+ * @example {/analytics\.js$} rule
34
35
  */
35
- onIgnoreList: 'On ignore list',
36
+ onIgnoreList: 'On ignore list ({rule})',
36
37
  /**
37
38
  * @description Refers to the "Main frame", meaning the top level frame. See https://www.w3.org/TR/html401/present/frames.html
38
39
  * @example{example.com} PH1
@@ -571,26 +572,22 @@ export class ThreadAppender implements TrackAppender {
571
572
  */
572
573
  titleForEvent(entry: Trace.Types.Events.Event): string {
573
574
  if (Utils.IgnoreList.isIgnoreListedEntry(entry)) {
574
- return i18nString(UIStrings.onIgnoreList);
575
+ const rule = Utils.IgnoreList.getIgnoredReasonString(entry);
576
+ return i18nString(UIStrings.onIgnoreList, {rule});
575
577
  }
576
578
  return Utils.EntryName.nameForEntry(entry, this.#parsedTrace);
577
579
  }
578
580
 
579
- /**
580
- * Returns the info shown when an event added by this appender
581
- * is hovered in the timeline.
582
- */
583
- highlightedEntryInfo(event: Trace.Types.Events.Event): HighlightedEntryInfo {
584
- let title = this.titleForEvent(event);
581
+ setPopoverInfo(event: Trace.Types.Events.Event, info: PopoverInfo): void {
585
582
  if (Trace.Types.Events.isParseHTML(event)) {
586
583
  const startLine = event.args['beginData']['startLine'];
587
584
  const endLine = event.args['endData'] && event.args['endData']['endLine'];
588
585
  const eventURL = event.args['beginData']['url'] as Platform.DevToolsPath.UrlString;
589
586
  const url = Bindings.ResourceUtils.displayNameForURL(eventURL);
590
587
  const range = (endLine !== -1 || endLine === startLine) ? `${startLine}...${endLine}` : startLine;
591
- title += ` - ${url} [${range}]`;
588
+ info.title += ` - ${url} [${range}]`;
592
589
  }
593
590
  const selfTime = this.#parsedTrace.Renderer.entryToNode.get(event)?.selfTime;
594
- return {title, formattedTime: getFormattedTime(event.dur, selfTime)};
591
+ info.formattedTime = getFormattedTime(event.dur, selfTime);
595
592
  }
596
593
  }
@@ -155,10 +155,10 @@ export class TimelineController implements Trace.TracingManager.TracingManagerCl
155
155
 
156
156
  this.client.loadingStarted();
157
157
  await this.waitForTracingToStop();
158
- await this.allSourcesFinished();
159
158
 
160
159
  // Now we re-enable throttling again to maintain the setting being persistent.
161
160
  throttlingManager.setCPUThrottlingRate(rateDuringRecording);
161
+ await this.allSourcesFinished();
162
162
 
163
163
  await LiveMetrics.LiveMetrics.instance().enable();
164
164
  }
@@ -122,7 +122,8 @@ describeWithEnvironment('TimelineDetailsView', function() {
122
122
  );
123
123
  await detailsView.setSelection(selection);
124
124
  const detailsContentElement = detailsView.getDetailsContentElementForTest();
125
- const title = detailsContentElement.querySelector<HTMLElement>('.timeline-details-chip-title');
126
- assert.strictEqual(title?.innerText, 'Range: 0 ms 5.39 s');
125
+ const component = detailsContentElement.querySelector<HTMLElement>('devtools-performance-timeline-summary');
126
+ const range = component?.shadowRoot?.querySelector<HTMLElement>('.summary-range');
127
+ assert.strictEqual(range?.innerText, 'Range: 0 ms – 5.39 s');
127
128
  });
128
129
  });
@@ -27,8 +27,8 @@ import {
27
27
  type TimelineSelection,
28
28
  } from './TimelineSelection.js';
29
29
  import {TimelineSelectorStatsView} from './TimelineSelectorStatsView.js';
30
- import {BottomUpTimelineTreeView, CallTreeTimelineTreeView, type TimelineTreeView} from './TimelineTreeView.js';
31
- import {TimelineDetailsContentHelper, TimelineUIUtils} from './TimelineUIUtils.js';
30
+ import {BottomUpTimelineTreeView, CallTreeTimelineTreeView, TimelineTreeView} from './TimelineTreeView.js';
31
+ import {TimelineUIUtils} from './TimelineUIUtils.js';
32
32
 
33
33
  const UIStrings = {
34
34
  /**
@@ -55,12 +55,6 @@ const UIStrings = {
55
55
  *@description Title of the Layers tool
56
56
  */
57
57
  layers: 'Layers',
58
- /**
59
- *@description Text in Timeline Details View of the Performance panel
60
- *@example {1ms} PH1
61
- *@example {10ms} PH2
62
- */
63
- rangeSS: 'Range: {PH1} – {PH2}',
64
58
  /**
65
59
  *@description Title of the selector stats tab
66
60
  */
@@ -68,7 +62,8 @@ const UIStrings = {
68
62
  };
69
63
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/TimelineDetailsView.ts', UIStrings);
70
64
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
71
- export class TimelineDetailsView extends UI.Widget.VBox {
65
+ export class TimelineDetailsView extends
66
+ Common.ObjectWrapper.eventMixin<TimelineTreeView.EventTypes, typeof UI.Widget.VBox>(UI.Widget.VBox) {
72
67
  private readonly detailsLinkifier: Components.Linkifier.Linkifier;
73
68
  private tabbedPane: UI.TabbedPane.TabbedPane;
74
69
  private readonly defaultDetailsWidget: UI.Widget.VBox;
@@ -126,6 +121,12 @@ export class TimelineDetailsView extends UI.Widget.VBox {
126
121
  this.appendTab(Tab.EventLog, i18nString(UIStrings.eventLog), eventsView);
127
122
  this.rangeDetailViews.set(Tab.EventLog, eventsView);
128
123
 
124
+ this.rangeDetailViews.values().forEach(view => {
125
+ view.addEventListener(
126
+ TimelineTreeView.Events.TREE_ROW_HOVERED,
127
+ node => this.dispatchEventToListeners(TimelineTreeView.Events.TREE_ROW_HOVERED, node.data));
128
+ });
129
+
129
130
  this.#networkRequestDetails =
130
131
  new TimelineComponents.NetworkRequestDetails.NetworkRequestDetails(this.detailsLinkifier);
131
132
 
@@ -153,6 +154,12 @@ export class TimelineDetailsView extends UI.Widget.VBox {
153
154
  return this.defaultDetailsContentElement;
154
155
  }
155
156
 
157
+ revealEventInTreeView(event: Trace.Types.Events.Event|null): void {
158
+ if (this.tabbedPane.visibleView instanceof TimelineTreeView) {
159
+ this.tabbedPane.visibleView.highlightEventInTree(event);
160
+ }
161
+ }
162
+
156
163
  async #onTraceBoundsChange(event: TraceBounds.TraceBounds.StateChangedEvent): Promise<void> {
157
164
  if (event.updateType === 'MINIMAP_BOUNDS') {
158
165
  // If new minimap bounds are set, we might need to update the selected entry summary because
@@ -475,14 +482,8 @@ export class TimelineDetailsView extends UI.Widget.VBox {
475
482
  const aggregatedStats = TimelineUIUtils.statsForTimeRange(this.#selectedEvents, startTime, endTime);
476
483
  const startOffset = startTime - minBoundsMilli;
477
484
  const endOffset = endTime - minBoundsMilli;
478
-
479
- const contentHelper = new TimelineDetailsContentHelper(null, null);
480
- contentHelper.addSection(i18nString(
481
- UIStrings.rangeSS,
482
- {PH1: i18n.TimeUtilities.millisToString(startOffset), PH2: i18n.TimeUtilities.millisToString(endOffset)}));
483
- const pieChart = TimelineUIUtils.generatePieChart(aggregatedStats);
484
- contentHelper.appendElementRow('', pieChart);
485
- this.setContent(contentHelper.fragment);
485
+ const summaryDetails = TimelineUIUtils.generateSummaryDetails(aggregatedStats, startOffset, endOffset);
486
+ this.setContent(summaryDetails);
486
487
 
487
488
  // Find all recalculate style events data from range
488
489
  const isSelectorStatsEnabled =
@@ -184,6 +184,22 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
184
184
  });
185
185
  Utils.ImageCache.emitter.addEventListener(
186
186
  'screenshot-loaded', () => this.dispatchEventToListeners(Events.DATA_CHANGED));
187
+
188
+ Common.Settings.Settings.instance()
189
+ .moduleSetting('skip-stack-frames-pattern')
190
+ .addChangeListener(this.#onIgnoreListChanged.bind(this));
191
+ Common.Settings.Settings.instance()
192
+ .moduleSetting('skip-content-scripts')
193
+ .addChangeListener(this.#onIgnoreListChanged.bind(this));
194
+ Common.Settings.Settings.instance()
195
+ .moduleSetting('automatically-ignore-list-known-third-party-scripts')
196
+ .addChangeListener(this.#onIgnoreListChanged.bind(this));
197
+ Common.Settings.Settings.instance()
198
+ .moduleSetting('enable-ignore-listing')
199
+ .addChangeListener(this.#onIgnoreListChanged.bind(this));
200
+ Common.Settings.Settings.instance()
201
+ .moduleSetting('skip-anonymous-scripts')
202
+ .addChangeListener(this.#onIgnoreListChanged.bind(this));
187
203
  }
188
204
 
189
205
  hasTrackConfigurationMode(): boolean {
@@ -292,16 +308,14 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
292
308
  if (Utils.IgnoreList.isIgnoreListedEntry(entry)) {
293
309
  contextMenu.defaultSection().appendItem(i18nString(UIStrings.removeScriptFromIgnoreList), () => {
294
310
  Bindings.IgnoreListManager.IgnoreListManager.instance().unIgnoreListURL(url);
295
- this.timelineData(/* rebuild= */ true);
296
- this.dispatchEventToListeners(Events.DATA_CHANGED);
311
+ this.#onIgnoreListChanged();
297
312
  }, {
298
313
  jslogContext: 'remove-from-ignore-list',
299
314
  });
300
315
  } else {
301
316
  contextMenu.defaultSection().appendItem(i18nString(UIStrings.addScriptToIgnoreList), () => {
302
317
  Bindings.IgnoreListManager.IgnoreListManager.instance().ignoreListURL(url);
303
- this.timelineData(/* rebuild= */ true);
304
- this.dispatchEventToListeners(Events.DATA_CHANGED);
318
+ this.#onIgnoreListChanged();
305
319
  }, {
306
320
  jslogContext: 'add-to-ignore-list',
307
321
  });
@@ -310,6 +324,11 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
310
324
  return contextMenu;
311
325
  }
312
326
 
327
+ #onIgnoreListChanged(): void {
328
+ this.timelineData(/* rebuild= */ true);
329
+ this.dispatchEventToListeners(Events.DATA_CHANGED);
330
+ }
331
+
313
332
  entryHasAnnotations(entryIndex: number): boolean {
314
333
  const event = this.eventByIndex(entryIndex);
315
334
  if (!event) {
@@ -734,11 +753,11 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
734
753
  return this.entryTypeByLevel[level];
735
754
  }
736
755
 
737
- prepareHighlightedEntryInfo(entryIndex: number): Element|null {
756
+ preparePopoverElement(entryIndex: number): Element|null {
738
757
  let time = '';
739
758
  let title;
740
759
  let warningElements: Element[] = [];
741
- let nameSpanTimelineInfoTime = 'timeline-info-time';
760
+ let timeElementClassName = 'popoverinfo-time';
742
761
  const additionalContent: HTMLElement[] = [];
743
762
 
744
763
  const entryType = this.#entryTypeForIndex(entryIndex);
@@ -749,14 +768,16 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
749
768
  const event = (this.entryData[entryIndex] as Trace.Types.Events.Event);
750
769
  const timelineData = (this.timelineDataInternal as PerfUI.FlameChart.FlameChartTimelineData);
751
770
  const eventLevel = timelineData.entryLevels[entryIndex];
752
- const highlightedEntryInfo = this.compatibilityTracksAppender.highlightedEntryInfo(event, eventLevel);
753
- title = highlightedEntryInfo.title;
754
- time = highlightedEntryInfo.formattedTime;
755
- warningElements = highlightedEntryInfo.warningElements || warningElements;
756
- if (highlightedEntryInfo.additionalElement) {
757
- additionalContent.push(highlightedEntryInfo.additionalElement);
771
+ const popoverInfo = this.compatibilityTracksAppender.popoverInfo(event, eventLevel);
772
+ title = popoverInfo.title;
773
+ time = popoverInfo.formattedTime;
774
+ warningElements = popoverInfo.warningElements || warningElements;
775
+ if (popoverInfo.additionalElements?.length) {
776
+ additionalContent.push(...popoverInfo.additionalElements);
758
777
  }
759
778
 
779
+ this.dispatchEventToListeners(Events.FLAME_CHART_ITEM_HOVERED, event);
780
+
760
781
  } else if (entryType === EntryType.FRAME) {
761
782
  const frame = (this.entryData[entryIndex] as Trace.Types.Events.LegacyTimelineFrame);
762
783
  time =
@@ -765,40 +786,35 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
765
786
  if (frame.idle) {
766
787
  title = i18nString(UIStrings.idleFrame);
767
788
  } else if (frame.dropped) {
768
- if (frame.isPartial) {
769
- title = i18nString(UIStrings.partiallyPresentedFrame);
770
- } else {
771
- title = i18nString(UIStrings.droppedFrame);
772
- }
773
- nameSpanTimelineInfoTime = 'timeline-info-warning';
789
+ title = frame.isPartial ? i18nString(UIStrings.partiallyPresentedFrame) : i18nString(UIStrings.droppedFrame);
790
+ timeElementClassName = 'popoverinfo-warning';
774
791
  } else {
775
792
  title = i18nString(UIStrings.frame);
776
793
  }
777
794
  } else {
795
+ this.dispatchEventToListeners(Events.FLAME_CHART_ITEM_HOVERED, null);
778
796
  return null;
779
797
  }
780
798
 
781
- const element = document.createElement('div');
782
- const root = UI.UIUtils.createShadowRootWithCoreStyles(element, {
799
+ const popoverElement = document.createElement('div');
800
+ const root = UI.UIUtils.createShadowRootWithCoreStyles(popoverElement, {
783
801
  cssFile: [timelineFlamechartPopoverStyles],
784
802
  delegatesFocus: undefined,
785
803
  });
786
- const contents = root.createChild('div', 'timeline-flamechart-popover');
787
- contents.createChild('span', nameSpanTimelineInfoTime).textContent = time;
788
- contents.createChild('span', 'timeline-info-title').textContent = title;
789
- if (warningElements) {
790
- for (const warningElement of warningElements) {
791
- warningElement.classList.add('timeline-info-warning');
792
- contents.appendChild(warningElement);
793
- }
804
+ const popoverContents = root.createChild('div', 'timeline-flamechart-popover');
805
+ popoverContents.createChild('span', timeElementClassName).textContent = time;
806
+ popoverContents.createChild('span', 'popoverinfo-title').textContent = title;
807
+ for (const warningElement of warningElements) {
808
+ warningElement.classList.add('popoverinfo-warning');
809
+ popoverContents.appendChild(warningElement);
794
810
  }
795
811
  for (const elem of additionalContent) {
796
- contents.appendChild(elem);
812
+ popoverContents.appendChild(elem);
797
813
  }
798
- return element;
814
+ return popoverElement;
799
815
  }
800
816
 
801
- prepareHighlightedHiddenEntriesArrowInfo(entryIndex: number): Element|null {
817
+ preparePopoverForCollapsedArrow(entryIndex: number): Element|null {
802
818
  const element = document.createElement('div');
803
819
  const root = UI.UIUtils.createShadowRootWithCoreStyles(element, {
804
820
  cssFile: [timelineFlamechartPopoverStyles],
@@ -813,7 +829,7 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
813
829
  return null;
814
830
  }
815
831
  const contents = root.createChild('div', 'timeline-flamechart-popover');
816
- contents.createChild('span', 'timeline-info-title').textContent = hiddenEntriesAmount + ' hidden';
832
+ contents.createChild('span', 'popoverinfo-title').textContent = hiddenEntriesAmount + ' hidden';
817
833
 
818
834
  return element;
819
835
  }
@@ -900,12 +916,12 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
900
916
 
901
917
  private drawFrame(
902
918
  entryIndex: number, context: CanvasRenderingContext2D, barX: number, barY: number, barWidth: number,
903
- barHeight: number): void {
919
+ barHeight: number, transformColor: (color: string) => string): void {
904
920
  const hPadding = 1;
905
921
  const frame = this.entryData[entryIndex] as Trace.Types.Events.LegacyTimelineFrame;
906
922
  barX += hPadding;
907
923
  barWidth -= 2 * hPadding;
908
- context.fillStyle = this.entryColor(entryIndex);
924
+ context.fillStyle = transformColor(this.entryColor(entryIndex));
909
925
 
910
926
  if (frame.dropped) {
911
927
  if (frame.isPartial) {
@@ -960,11 +976,12 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
960
976
 
961
977
  decorateEntry(
962
978
  entryIndex: number, context: CanvasRenderingContext2D, text: string|null, barX: number, barY: number,
963
- barWidth: number, barHeight: number, unclippedBarX: number, timeToPixelRatio: number): boolean {
979
+ barWidth: number, barHeight: number, unclippedBarX: number, timeToPixelRatio: number,
980
+ transformColor: (color: string) => string): boolean {
964
981
  const entryType = this.#entryTypeForIndex(entryIndex);
965
982
 
966
983
  if (entryType === EntryType.FRAME) {
967
- this.drawFrame(entryIndex, context, barX, barY, barWidth, barHeight);
984
+ this.drawFrame(entryIndex, context, barX, barY, barWidth, barHeight, transformColor);
968
985
  return true;
969
986
  }
970
987
 
@@ -1304,10 +1321,12 @@ export const InstantEventVisibleDurationMs = Trace.Types.Timing.MilliSeconds(0.0
1304
1321
 
1305
1322
  export const enum Events {
1306
1323
  DATA_CHANGED = 'DataChanged',
1324
+ FLAME_CHART_ITEM_HOVERED = 'FlameChartItemHovered',
1307
1325
  }
1308
1326
 
1309
1327
  export type EventTypes = {
1310
1328
  [Events.DATA_CHANGED]: void,
1329
+ [Events.FLAME_CHART_ITEM_HOVERED]: Trace.Types.Events.Event|null,
1311
1330
  };
1312
1331
 
1313
1332
  // an entry is a trace event, they are classified into "entry types"
@@ -402,7 +402,7 @@ export class TimelineFlameChartNetworkDataProvider implements PerfUI.FlameChart.
402
402
  return this.#networkTrackAppender?.webSocketIdToLevel.has(levelIndex) || false;
403
403
  }
404
404
 
405
- prepareHighlightedEntryInfo(index: number): Element|null {
405
+ preparePopoverElement(index: number): Element|null {
406
406
  const event = this.#events[index];
407
407
  if (Trace.Types.Events.isSyntheticNetworkRequest(event)) {
408
408
  const element = document.createElement('div');