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
@@ -95,9 +95,13 @@ export class Infobar {
95
95
  buttonClass += ' primary-button';
96
96
  }
97
97
 
98
+ const buttonVariant = action.buttonVariant ?? Buttons.Button.Variant.OUTLINED;
99
+
98
100
  const button = createTextButton(action.text, actionCallback, {
99
101
  className: buttonClass,
100
102
  jslogContext: action.jslogContext,
103
+ variant: buttonVariant,
104
+ icon: action.icon,
101
105
  });
102
106
  if (action.highlight && !this.#firstFocusableElement) {
103
107
  this.#firstFocusableElement = button;
@@ -246,6 +250,8 @@ export interface InfobarAction {
246
250
  highlight: boolean;
247
251
  delegate: (() => void)|null;
248
252
  dismiss: boolean;
253
+ buttonVariant?: Buttons.Button.Variant;
254
+ icon?: string;
249
255
  jslogContext?: string;
250
256
  }
251
257
 
@@ -32,10 +32,12 @@ import * as Common from '../../core/common/common.js';
32
32
  import * as Host from '../../core/host/host.js';
33
33
  import * as i18n from '../../core/i18n/i18n.js';
34
34
  import * as Root from '../../core/root/root.js';
35
+ import * as Buttons from '../../ui/components/buttons/buttons.js';
35
36
  import * as IconButton from '../components/icon_button/icon_button.js';
36
37
  import * as VisualLogging from '../visual_logging/visual_logging.js';
37
38
 
38
39
  import type {ActionDelegate as ActionDelegateInterface} from './ActionRegistration.js';
40
+ import {ActionRegistry} from './ActionRegistry.js';
39
41
  import * as ARIAUtils from './ARIAUtils.js';
40
42
  import type {Context} from './Context.js';
41
43
  import type {ContextMenu} from './ContextMenu.js';
@@ -67,6 +69,10 @@ const UIStrings = {
67
69
  *@description The aria label for main tabbed pane that contains Panels
68
70
  */
69
71
  panels: 'Panels',
72
+ /**
73
+ *@description Title of an action that reloads the tab currently being debugged by DevTools
74
+ */
75
+ reloadDebuggedTab: 'Reload',
70
76
  /**
71
77
  *@description Title of an action that reloads the DevTools
72
78
  */
@@ -476,6 +482,36 @@ export class InspectorView extends VBox implements ViewLocationResolver {
476
482
  }
477
483
  }
478
484
 
485
+ displayDebuggedTabReloadRequiredWarning(message: string): void {
486
+ if (!this.reloadRequiredInfobar) {
487
+ const infobar = new Infobar(
488
+ InfobarType.INFO, message,
489
+ [
490
+ {
491
+ text: i18nString(UIStrings.reloadDebuggedTab),
492
+ highlight: true,
493
+ delegate: () => {
494
+ reloadDebuggedTab();
495
+ if (this.reloadRequiredInfobar) {
496
+ this.reloadRequiredInfobar.dispose();
497
+ }
498
+ },
499
+ dismiss: false,
500
+ buttonVariant: Buttons.Button.Variant.PRIMARY,
501
+ icon: 'refresh',
502
+ jslogContext: 'main.debug-reload',
503
+ },
504
+ ],
505
+ undefined, undefined, 'reload-required');
506
+ infobar.setParentView(this);
507
+ this.attachInfobar(infobar);
508
+ this.reloadRequiredInfobar = infobar;
509
+ infobar.setCloseCallback(() => {
510
+ delete this.reloadRequiredInfobar;
511
+ });
512
+ }
513
+ }
514
+
479
515
  displayReloadRequiredWarning(message: string): void {
480
516
  if (!this.reloadRequiredInfobar) {
481
517
  const infobar = new Infobar(
@@ -602,6 +638,10 @@ function reloadDevTools(): void {
602
638
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.reattach(() => window.location.reload());
603
639
  }
604
640
 
641
+ function reloadDebuggedTab(): void {
642
+ void ActionRegistry.instance().getAction('inspector-main.reload').execute();
643
+ }
644
+
605
645
  export class ActionDelegate implements ActionDelegateInterface {
606
646
  handleAction(context: Context, actionId: string): boolean {
607
647
  switch (actionId) {
@@ -199,8 +199,10 @@ export class ListWidget<T> extends VBox {
199
199
  this.element.focus();
200
200
  this.delegate.removeItemRequested(this.items[index], index);
201
201
  ARIAUtils.alert(i18nString(UIStrings.removedItem));
202
- // focus on the next item in the list, or the last item if we're removing the last item
203
- (this.elements[Math.min(index, this.elements.length - 1)] as HTMLElement).focus();
202
+ if (this.elements.length >= 1) {
203
+ // focus on the next item in the list, or the last item if we're removing the last item
204
+ (this.elements[Math.min(index, this.elements.length - 1)] as HTMLElement).focus();
205
+ }
204
206
  }
205
207
  }
206
208
 
@@ -16,11 +16,11 @@ export class ThrottledWidget extends VBox {
16
16
  this.updateWhenVisible = false;
17
17
  }
18
18
 
19
- protected doUpdate(): Promise<void> {
19
+ protected override doUpdate(): Promise<void> {
20
20
  return Promise.resolve();
21
21
  }
22
22
 
23
- update(): void {
23
+ override update(): void {
24
24
  this.updateWhenVisible = !this.isShowing();
25
25
  if (this.updateWhenVisible) {
26
26
  return;
@@ -1028,9 +1028,9 @@ export class ToolbarMenuButton extends ToolbarCombobox {
1028
1028
  useSoftMenu: this.useSoftMenu,
1029
1029
  x: this.element.getBoundingClientRect().left,
1030
1030
  y: this.element.getBoundingClientRect().top + this.element.offsetHeight,
1031
- // Without rAF, pointer events will be un-ignored too early, and a single click causes the
1032
- // context menu to be closed and immediately re-opened on Windows (https://crbug.com/339560549).
1033
- onSoftMenuClosed: () => requestAnimationFrame(() => this.element.removeAttribute('aria-expanded')),
1031
+ // Without adding a delay, pointer events will be un-ignored too early, and a single click causes
1032
+ // the context menu to be closed and immediately re-opened on Windows (https://crbug.com/339560549).
1033
+ onSoftMenuClosed: () => setTimeout(() => this.element.removeAttribute('aria-expanded'), 50),
1034
1034
  });
1035
1035
  this.contextMenuHandler(contextMenu);
1036
1036
  this.element.setAttribute('aria-expanded', 'true');
@@ -1091,12 +1091,15 @@ export function createTextButton(text: string, clickHandler?: ((arg0: Event) =>
1091
1091
  jslogContext?: string,
1092
1092
  variant?: Buttons.Button.Variant,
1093
1093
  title?: string,
1094
+ icon?: string,
1094
1095
  }): Buttons.Button.Button {
1095
1096
  const button = new Buttons.Button.Button();
1096
1097
  if (opts?.className) {
1097
1098
  button.className = opts.className;
1098
1099
  }
1100
+
1099
1101
  button.textContent = text;
1102
+ button.iconName = opts?.icon;
1100
1103
  button.variant = opts?.variant ? opts.variant : Buttons.Button.Variant.OUTLINED;
1101
1104
  if (clickHandler) {
1102
1105
  button.addEventListener('click', clickHandler);
@@ -1213,7 +1216,7 @@ export function setTitle(element: HTMLElement, title: string): void {
1213
1216
  Tooltip.install(element, title);
1214
1217
  }
1215
1218
 
1216
- export class CheckboxLabel extends HTMLSpanElement {
1219
+ export class CheckboxLabel extends HTMLElement {
1217
1220
  private readonly shadowRootInternal!: DocumentFragment;
1218
1221
  checkboxElement!: HTMLInputElement;
1219
1222
  textElement!: HTMLElement;
@@ -1234,10 +1237,7 @@ export class CheckboxLabel extends HTMLSpanElement {
1234
1237
 
1235
1238
  static create(title?: string, checked?: boolean, subtitle?: string, jslogContext?: string, small?: boolean):
1236
1239
  CheckboxLabel {
1237
- if (!CheckboxLabel.constructorInternal) {
1238
- CheckboxLabel.constructorInternal = registerCustomElement('span', 'dt-checkbox', CheckboxLabel);
1239
- }
1240
- const element = (CheckboxLabel.constructorInternal() as CheckboxLabel);
1240
+ const element = document.createElement('dt-checkbox') as CheckboxLabel;
1241
1241
  element.checkboxElement.checked = Boolean(checked);
1242
1242
  if (jslogContext) {
1243
1243
  element.checkboxElement.setAttribute(
@@ -1255,9 +1255,11 @@ export class CheckboxLabel extends HTMLSpanElement {
1255
1255
  }
1256
1256
 
1257
1257
  private static lastId = 0;
1258
- static constructorInternal: (() => Element)|null = null;
1259
1258
  }
1260
1259
 
1260
+ // Skip registerCustomElement flow as it's incompatible with Safari with this specific custom element.
1261
+ self.customElements.define('dt-checkbox', CheckboxLabel);
1262
+
1261
1263
  export class DevToolsIconLabel extends HTMLSpanElement {
1262
1264
  readonly #icon: IconButton.Icon.Icon;
1263
1265
 
@@ -33,6 +33,7 @@ import '../../core/dom_extension/dom_extension.js';
33
33
  import * as Platform from '../../core/platform/platform.js';
34
34
  import * as LitHtml from '../../ui/lit-html/lit-html.js';
35
35
  import * as Helpers from '../components/helpers/helpers.js';
36
+ import * as RenderCoordinator from '../components/render_coordinator/render_coordinator.js';
36
37
 
37
38
  import {Constraints, Size} from './Geometry.js';
38
39
  import * as ThemeSupport from './theme_support/theme_support.js';
@@ -109,6 +110,8 @@ function decrementWidgetCounter(parentElement: Element, childElement: Element):
109
110
  }
110
111
  }
111
112
 
113
+ let id = 0;
114
+
112
115
  export class Widget {
113
116
  readonly element: HTMLElement;
114
117
  contentElement: HTMLElement;
@@ -127,6 +130,7 @@ export class Widget {
127
130
  private constraintsInternal?: Constraints;
128
131
  private invalidationsRequested?: boolean;
129
132
  private externallyManaged?: boolean;
133
+ #id = `${this.constructor.name}_${id++}`;
130
134
  constructor(useShadowDom?: boolean, delegatesFocus?: boolean, element?: HTMLElement) {
131
135
  this.element = element || document.createElement('div');
132
136
  this.shadowRoot = this.element.shadowRoot || undefined;
@@ -665,6 +669,34 @@ export class Widget {
665
669
  assert(!this.parentWidgetInternal, 'Attempt to mark widget as externally managed after insertion to the DOM');
666
670
  this.externallyManaged = true;
667
671
  }
672
+
673
+ /**
674
+ * Called by the RenderCoordinator to perform an update.
675
+ * This is not meant to be called directly. Instead, use update() to schedule an asynchronous update.
676
+ *
677
+ * @returns A promise that resolves when the update is complete.
678
+ */
679
+ protected doUpdate(): Promise<void> {
680
+ return Promise.resolve();
681
+ }
682
+
683
+ /**
684
+ * Schedules an asynchronous update. The update will be deduplicated and executed with the animation frame.
685
+ */
686
+ update(): void {
687
+ void RenderCoordinator.RenderCoordinator.RenderCoordinator.instance().write(this.#id, () => this.doUpdate());
688
+ }
689
+
690
+ /**
691
+ * Returns a promise that resolves when the pending update is complete.
692
+ * Returns a resolved promise if there is no pending update.
693
+ ` *
694
+ * @returns A probleme that resolves when the pending update is complete.
695
+ */
696
+ pendingUpdate(): Promise<void> {
697
+ return RenderCoordinator.RenderCoordinator.RenderCoordinator.instance().findPendingWrite(this.#id) ||
698
+ Promise.resolve();
699
+ }
668
700
  }
669
701
 
670
702
  const storedScrollPositions = new WeakMap<Element, {
@@ -20,13 +20,11 @@ describeWithEnvironment('DataGrid', () => {
20
20
  let widget!: DataGrid.DataGrid.DataGridWidget<unknown>;
21
21
 
22
22
  const dataGridOptions: DataGrid.DataGrid.DataGridWidgetOptions<unknown> = {
23
- implParams: {
24
- displayName: 'testGrid',
25
- columns: [{
26
- id: 'test',
27
- sortable: false,
28
- }],
29
- },
23
+ displayName: 'testGrid',
24
+ columns: [{
25
+ id: 'test',
26
+ sortable: false,
27
+ }],
30
28
  nodes: [new DataGrid.DataGrid.DataGridNode({test: 'testNode'})],
31
29
  markAsRoot: true,
32
30
  };
@@ -34,6 +32,7 @@ describeWithEnvironment('DataGrid', () => {
34
32
  // clang-format off
35
33
  render(
36
34
  html`
35
+ <!-- @ts-ignore -->
37
36
  <devtools-data-grid-widget
38
37
  .options=${dataGridOptions}
39
38
  ${widgetRef(DataGrid.DataGrid.DataGridWidget, e => { widget = e; })}
@@ -42,8 +41,6 @@ describeWithEnvironment('DataGrid', () => {
42
41
  container, {host: this});
43
42
  // clang-format on
44
43
 
45
- await new Promise(resolve => setTimeout(resolve, 0));
46
-
47
44
  assert.exists(widget);
48
45
  // There is a single test row
49
46
  assert.strictEqual(widget.dataGrid.rootNode().children.length, 1);
@@ -1703,7 +1703,7 @@ export class DataGridNode<T> {
1703
1703
  return this.elementInternal as Element;
1704
1704
  }
1705
1705
 
1706
- protected createElement(): Element {
1706
+ protected createElement(): HTMLElement {
1707
1707
  this.elementInternal = document.createElement('tr');
1708
1708
  this.elementInternal.setAttribute(
1709
1709
  'jslog', `${VisualLogging.tableRow().track({keydown: 'ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Enter|Space'})}`);
@@ -1736,7 +1736,7 @@ export class DataGridNode<T> {
1736
1736
  return this.elementInternal;
1737
1737
  }
1738
1738
 
1739
- existingElement(): Element|null {
1739
+ existingElement(): HTMLElement|null {
1740
1740
  return this.elementInternal || null;
1741
1741
  }
1742
1742
 
@@ -2471,61 +2471,62 @@ export class DataGridWidget<T> extends UI.Widget.VBox {
2471
2471
  }
2472
2472
  }
2473
2473
 
2474
- export interface DataGridWidgetOptions<T> {
2475
- implParams: Parameters;
2476
- dataGridImpl?: DataGridImpl<T>;
2477
- markAsRoot?: boolean;
2478
- nodes: DataGridNode<T>[];
2479
- }
2474
+ export type DataGridWidgetOptions<T> = Parameters&{
2475
+ markAsRoot?: boolean,
2476
+ striped?: boolean, nodes: DataGridNode<T>[],
2477
+ };
2480
2478
 
2481
2479
  export class DataGridWidgetElement<T> extends UI.Widget.WidgetElement<DataGridWidget<T>> {
2482
2480
  #options: DataGridWidgetOptions<T>;
2481
+ widget?: DataGridWidget<T>;
2483
2482
 
2484
2483
  constructor() {
2485
2484
  super();
2486
2485
  // default values for options
2487
2486
  this.#options = {
2488
- implParams: {
2489
- displayName: 'dataGrid',
2490
- columns: [],
2491
- },
2487
+ displayName: 'dataGrid',
2488
+ columns: [],
2492
2489
  nodes: [],
2493
2490
  };
2494
2491
  }
2495
2492
 
2496
2493
  set options(options: DataGridWidgetOptions<T>) {
2497
2494
  this.#options = options;
2495
+ this.#updateGrid();
2498
2496
  }
2499
2497
 
2500
2498
  override createWidget(): DataGridWidget<T> {
2501
- const {
2502
- implParams,
2503
- markAsRoot,
2504
- nodes,
2505
- } = this.#options;
2499
+ const dataGridImpl = new DataGridImpl<T>(this.#options);
2506
2500
 
2507
- if (!this.#options.dataGridImpl) {
2508
- this.#options.dataGridImpl = new DataGridImpl<T>(implParams);
2509
- }
2501
+ // Translate existing DataGridImpl ("ObjectWrapper") events to DOM CustomEvents so clients can
2502
+ // use lit templates to bind listeners.
2503
+ dataGridImpl.addEventListener(Events.SELECTED_NODE, this.#selectedNode.bind(this));
2504
+ dataGridImpl.addEventListener(Events.DESELECTED_NODE, this.#deselectedNode.bind(this));
2505
+ dataGridImpl.addEventListener(Events.OPENED_NODE, this.#openedNode.bind(this));
2506
+ dataGridImpl.addEventListener(Events.SORTING_CHANGED, this.#sortingChanged.bind(this));
2507
+ dataGridImpl.addEventListener(Events.PADDING_CHANGED, this.#paddingChanged.bind(this));
2508
+ this.widget = dataGridImpl.asWidget(this);
2510
2509
 
2511
- this.#options.dataGridImpl.rootNode().removeChildren();
2512
- for (const node of nodes) {
2513
- this.#options.dataGridImpl.rootNode().appendChild(node);
2510
+ if (this.#options.markAsRoot) {
2511
+ this.widget.markAsRoot();
2514
2512
  }
2515
2513
 
2516
- // Translate existing DataGridImpl ("ObjectWrapper") events to DOM CustomEvents so clients can
2517
- // use lit templates to bind listeners.
2518
- this.#options.dataGridImpl.addEventListener(Events.SELECTED_NODE, this.#selectedNode.bind(this));
2519
- this.#options.dataGridImpl.addEventListener(Events.DESELECTED_NODE, this.#deselectedNode.bind(this));
2520
- this.#options.dataGridImpl.addEventListener(Events.OPENED_NODE, this.#openedNode.bind(this));
2521
- this.#options.dataGridImpl.addEventListener(Events.SORTING_CHANGED, this.#sortingChanged.bind(this));
2522
- this.#options.dataGridImpl.addEventListener(Events.PADDING_CHANGED, this.#paddingChanged.bind(this));
2523
- const widget = this.#options.dataGridImpl.asWidget(this);
2514
+ this.#updateGrid();
2515
+
2516
+ return this.widget;
2517
+ }
2524
2518
 
2525
- if (markAsRoot) {
2526
- widget.markAsRoot();
2519
+ #updateGrid(): void {
2520
+ if (this.widget) {
2521
+ this.widget.dataGrid.rootNode().removeChildren();
2522
+ for (const node of this.#options.nodes) {
2523
+ this.widget.dataGrid.rootNode().appendChild(node);
2524
+ }
2525
+
2526
+ if (this.#options.striped) {
2527
+ this.widget.dataGrid.setStriped(true);
2528
+ }
2527
2529
  }
2528
- return widget;
2529
2530
  }
2530
2531
 
2531
2532
  #selectedNode(event: Common.EventTarget.EventTargetEvent<DataGridNode<T>>): void {
@@ -270,7 +270,7 @@ export class ViewportDataGridNode<T> extends DataGridNode<ViewportDataGridNode<T
270
270
  this.isStripedInternal = false;
271
271
  }
272
272
 
273
- override element(): Element {
273
+ override element(): HTMLElement {
274
274
  const existingElement = this.existingElement();
275
275
  const element = existingElement || this.createElement();
276
276
  if (!existingElement || this.stale) {
@@ -221,7 +221,7 @@ export class ChartViewport extends UI.Widget.VBox {
221
221
  private onMouseWheel(e: Event): void {
222
222
  const wheelEvent = (e as WheelEvent);
223
223
  const doZoomInstead = wheelEvent.shiftKey !==
224
- (Common.Settings.Settings.instance().moduleSetting('flamechart-mouse-wheel-action').get() === 'zoom');
224
+ (Common.Settings.Settings.instance().moduleSetting('flamechart-selected-navigation').get() === 'classic');
225
225
  const panVertically = !doZoomInstead && (wheelEvent.deltaY || Math.abs(wheelEvent.deltaX) === 53);
226
226
  const panHorizontally = doZoomInstead && Math.abs(wheelEvent.deltaX) > Math.abs(wheelEvent.deltaY);
227
227
  if (panVertically) {
@@ -471,7 +471,7 @@ export class ChartViewport extends UI.Widget.VBox {
471
471
  });
472
472
  }
473
473
 
474
- private update(): void {
474
+ override update(): void {
475
475
  this.updateRangeSelectionOverlay();
476
476
  this.delegate.update();
477
477
  }
@@ -90,7 +90,7 @@ export class FilmStripView extends Common.ObjectWrapper.eventMixin<EventTypes, t
90
90
  return element;
91
91
  }
92
92
 
93
- update(): void {
93
+ override update(): void {
94
94
  const frames = this.#filmStrip?.frames;
95
95
  if (!frames || frames.length < 1) {
96
96
  return;
@@ -264,6 +264,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
264
264
  private chartViewport: ChartViewport;
265
265
  private dataProvider: FlameChartDataProvider;
266
266
  private candyStripePattern: CanvasPattern|null;
267
+ private candyStripePatternGray: CanvasPattern|null;
267
268
  private contextMenu?: UI.ContextMenu.ContextMenu;
268
269
  private viewportElement: HTMLElement;
269
270
  private canvas: HTMLCanvasElement;
@@ -281,14 +282,13 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
281
282
  private textPadding: number;
282
283
  private highlightedMarkerIndex: number;
283
284
  /**
284
- * Represents the index of the entry that the user's mouse cursor is over.
285
- * Note that this is updated as the user moves their cursor: they do not have
286
- * to click for this to be updated.
285
+ * The index of the entry that's hovered (typically), or focused because of searchResult or other reasons.focused via searchResults, or focused by other means.
286
+ * Updated as the cursor moves. Meanwhile `selectedEntryIndex` is the entry that's been clicked.
287
287
  **/
288
288
  private highlightedEntryIndex: number;
289
289
  /**
290
290
  * Represents the index of the entry that is selected. For an entry to be
291
- * selected, it has to be clicked by the user.
291
+ * selected, it has to be clicked by the user (generally).
292
292
  **/
293
293
  private selectedEntryIndex: number;
294
294
  private rawTimelineDataLength: number;
@@ -365,7 +365,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
365
365
 
366
366
  this.viewportElement = this.chartViewport.viewportElement;
367
367
  this.canvas = (this.viewportElement.createChild('canvas', 'fill') as HTMLCanvasElement);
368
- this.candyStripePattern = null;
368
+ this.candyStripePattern = this.candyStripePatternGray = null;
369
369
 
370
370
  this.canvas.tabIndex = 0;
371
371
  UI.ARIAUtils.setLabel(this.canvas, i18nString(UIStrings.flameChart));
@@ -600,7 +600,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
600
600
  this.dispatchEventToListeners(Events.ENTRY_HOVERED, -1);
601
601
  }
602
602
 
603
- private createCandyStripePattern(): CanvasPattern {
603
+ private createCandyStripePattern(color: string): CanvasPattern {
604
604
  // Set the candy stripe pattern to 17px so it repeats well.
605
605
  const size = 17;
606
606
  const candyStripeCanvas = document.createElement('canvas');
@@ -613,7 +613,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
613
613
  ctx.rotate(Math.PI * 0.25);
614
614
  ctx.translate(-size * 0.5, -size * 0.5);
615
615
 
616
- ctx.fillStyle = 'rgba(255, 0, 0, 0.8)';
616
+ ctx.fillStyle = color;
617
617
  for (let x = -size; x < size * 2; x += 3) {
618
618
  ctx.fillRect(x, -size, 1, size * 3);
619
619
  }
@@ -804,7 +804,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
804
804
  return null;
805
805
  }
806
806
  const element = document.createElement('div');
807
- element.createChild('span', 'timeline-info-title').textContent = iconTooltip;
807
+ element.createChild('span', 'popoverinfo-title').textContent = iconTooltip;
808
808
 
809
809
  return element;
810
810
  }
@@ -870,12 +870,11 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
870
870
  }
871
871
  const group = data.groups.at(this.selectedGroupIndex);
872
872
  // If the mouse is hovering over the hidden descendants arrow, get an element that shows how many children are hidden, otherwise an element with the event name and length
873
- const entryInfo = (isMouseOverRevealChildrenArrow && group) ?
874
- this.dataProvider.prepareHighlightedHiddenEntriesArrowInfo &&
875
- this.dataProvider.prepareHighlightedHiddenEntriesArrowInfo(entryIndex) :
876
- entryIndex !== null && this.dataProvider.prepareHighlightedEntryInfo(entryIndex);
877
- if (entryInfo) {
878
- this.popoverElement.appendChild(entryInfo);
873
+ const popoverElement = (isMouseOverRevealChildrenArrow && group) ?
874
+ this.dataProvider.preparePopoverForCollapsedArrow?.(entryIndex) :
875
+ entryIndex !== null && this.dataProvider.preparePopoverElement(entryIndex);
876
+ if (popoverElement) {
877
+ this.popoverElement.appendChild(popoverElement);
879
878
  this.updatePopoverOffset();
880
879
  }
881
880
  this.lastPopoverState = {
@@ -2311,8 +2310,12 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2311
2310
  // If the duration of the event is less than the start time to draw the candy stripes, then we have no stripes to draw.
2312
2311
  continue;
2313
2312
  }
2314
- if (!this.candyStripePattern) {
2315
- this.candyStripePattern = this.createCandyStripePattern();
2313
+ if (!this.candyStripePattern || !this.candyStripePatternGray) {
2314
+ const red = 'rgba(255, 0, 0, 0.8)';
2315
+ this.candyStripePattern = this.createCandyStripePattern(red);
2316
+ const parsedColor = Common.Color.parse(red);
2317
+ const dimmed = parsedColor?.asLegacyColor().grayscale().asString() ?? 'lightgrey';
2318
+ this.candyStripePatternGray = this.createCandyStripePattern(dimmed);
2316
2319
  }
2317
2320
 
2318
2321
  context.save();
@@ -2330,7 +2333,8 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2330
2333
  startX: barXStart,
2331
2334
  width: barXEnd - barXStart,
2332
2335
  });
2333
- context.fillStyle = this.candyStripePattern;
2336
+ context.fillStyle =
2337
+ this.#shouldDimEvent(entryIndex) ? this.candyStripePatternGray : this.candyStripePattern;
2334
2338
  context.fill();
2335
2339
  context.restore();
2336
2340
  break;
@@ -2359,7 +2363,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2359
2363
  context.rect(barX, barY, barWidth, barHeight);
2360
2364
  context.clip();
2361
2365
  context.beginPath();
2362
- context.fillStyle = 'red';
2366
+ context.fillStyle = this.#transformColor(entryIndex, 'red');
2363
2367
  context.moveTo(barX + barWidth - triangleWidth, barY);
2364
2368
  context.lineTo(barX + barWidth, barY);
2365
2369
  context.lineTo(barX + barWidth, barY + triangleHeight);
@@ -2877,13 +2881,14 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2877
2881
  }
2878
2882
  const unclippedBarX = this.chartViewport.timeToPosition(entryStartTime);
2879
2883
  if (this.dataProvider.decorateEntry(
2880
- entryIndex, context, text, barX, barY, barWidth, barHeight, unclippedBarX, timeToPixel)) {
2884
+ entryIndex, context, text, barX, barY, barWidth, barHeight, unclippedBarX, timeToPixel,
2885
+ color => this.#transformColor(entryIndex, color))) {
2881
2886
  continue;
2882
2887
  }
2883
2888
  if (!text || !text.length) {
2884
2889
  continue;
2885
2890
  }
2886
- context.fillStyle = this.dataProvider.textColor(entryIndex);
2891
+ context.fillStyle = this.#transformColor(entryIndex, this.dataProvider.textColor(entryIndex));
2887
2892
  context.fillText(text, barX + textPadding, barY + barHeight - this.textBaseline);
2888
2893
  }
2889
2894
 
@@ -3051,7 +3056,8 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
3051
3056
  context.fillStyle = color;
3052
3057
  context.fillRect(barX, y, barWidth, groupBarHeight - 1);
3053
3058
  this.dataProvider.decorateEntry(
3054
- entryIndex, context, '', barX, y, barWidth, groupBarHeight, unclippedBarX, timeToPixel);
3059
+ entryIndex, context, '', barX, y, barWidth, groupBarHeight, unclippedBarX, timeToPixel,
3060
+ color => this.#transformColor(entryIndex, color));
3055
3061
  continue;
3056
3062
  }
3057
3063
  range.append(new Common.SegmentedRange.Segment(barX, endBarX, color));
@@ -3875,7 +3881,7 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
3875
3881
  this.scheduleUpdate();
3876
3882
  }
3877
3883
 
3878
- update(): void {
3884
+ override update(): void {
3879
3885
  if (!this.timelineData()) {
3880
3886
  return;
3881
3887
  }
@@ -4093,9 +4099,9 @@ export interface FlameChartDataProvider {
4093
4099
 
4094
4100
  timelineData(rebuild?: boolean): FlameChartTimelineData|null;
4095
4101
 
4096
- prepareHighlightedEntryInfo(entryIndex: number): Element|null;
4102
+ preparePopoverElement(entryIndex: number): Element|null;
4097
4103
 
4098
- prepareHighlightedHiddenEntriesArrowInfo?(entryIndex: number): Element|null;
4104
+ preparePopoverForCollapsedArrow?(entryIndex: number): Element|null;
4099
4105
 
4100
4106
  canJumpToEntry(entryIndex: number): boolean;
4101
4107
 
@@ -4107,7 +4113,8 @@ export interface FlameChartDataProvider {
4107
4113
 
4108
4114
  decorateEntry(
4109
4115
  entryIndex: number, context: CanvasRenderingContext2D, text: string|null, barX: number, barY: number,
4110
- barWidth: number, barHeight: number, unclippedBarX: number, timeToPixelRatio: number): boolean;
4116
+ barWidth: number, barHeight: number, unclippedBarX: number, timeToPixelRatio: number,
4117
+ transformColor?: (color: string) => string): boolean;
4111
4118
 
4112
4119
  forceDecoration(entryIndex: number): boolean;
4113
4120
 
@@ -10,15 +10,24 @@ export class TimelineOverviewCalculator implements Calculator {
10
10
  #minimumBoundary: Trace.Types.Timing.MilliSeconds = Trace.Types.Timing.MilliSeconds(0);
11
11
  #maximumBoundary: Trace.Types.Timing.MilliSeconds = Trace.Types.Timing.MilliSeconds(100);
12
12
 
13
- private workingArea!: number;
13
+ #displayWidth: number = 0;
14
14
  private navStartTimes?: readonly Trace.Types.Events.NavigationStart[];
15
15
 
16
+ /**
17
+ * Given a timestamp, returns its x position in the minimap.
18
+ *
19
+ * @param time
20
+ * @returns position in pixel
21
+ */
16
22
  computePosition(time: Trace.Types.Timing.MilliSeconds): number {
17
- return (time - this.#minimumBoundary) / this.boundarySpan() * this.workingArea;
23
+ return (time - this.#minimumBoundary) / this.boundarySpan() * this.#displayWidth;
18
24
  }
19
25
 
20
26
  positionToTime(position: number): Trace.Types.Timing.MilliSeconds {
21
- return Trace.Types.Timing.MilliSeconds(position / this.workingArea * this.boundarySpan() + this.#minimumBoundary);
27
+ if (this.#displayWidth === 0) {
28
+ return Trace.Types.Timing.MilliSeconds(0);
29
+ }
30
+ return Trace.Types.Timing.MilliSeconds(position / this.#displayWidth * this.boundarySpan() + this.#minimumBoundary);
22
31
  }
23
32
 
24
33
  setBounds(minimumBoundary: Trace.Types.Timing.MilliSeconds, maximumBoundary: Trace.Types.Timing.MilliSeconds): void {
@@ -31,7 +40,7 @@ export class TimelineOverviewCalculator implements Calculator {
31
40
  }
32
41
 
33
42
  setDisplayWidth(clientWidth: number): void {
34
- this.workingArea = clientWidth;
43
+ this.#displayWidth = clientWidth;
35
44
  }
36
45
 
37
46
  reset(): void {
@@ -73,6 +82,11 @@ export class TimelineOverviewCalculator implements Calculator {
73
82
  return this.#minimumBoundary;
74
83
  }
75
84
 
85
+ /**
86
+ * This function returns the time different between min time and max time of current minimap.
87
+ *
88
+ * @returns the time range in milliseconds
89
+ */
76
90
  boundarySpan(): Trace.Types.Timing.MilliSeconds {
77
91
  return Trace.Types.Timing.MilliSeconds(this.#maximumBoundary - this.#minimumBoundary);
78
92
  }