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
@@ -26,6 +26,7 @@ import * as UI from '../../../ui/legacy/legacy.js';
26
26
  import * as LitHtml from '../../../ui/lit-html/lit-html.js';
27
27
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
28
28
  import * as MobileThrottling from '../../mobile_throttling/mobile_throttling.js';
29
+ import {md} from '../utils/Helpers.js';
29
30
 
30
31
  import liveMetricsViewStyles from './liveMetricsView.css.js';
31
32
  import type {MetricCardData} from './MetricCard.js';
@@ -166,14 +167,10 @@ const UIStrings = {
166
167
  */
167
168
  percentDevices: '{PH1}% mobile, {PH2}% desktop',
168
169
  /**
169
- * @description Text block explaining how to simulate different mobile and desktop devices. The placeholder at the end will be a link with the text "simulate different devices" translated separately.
170
- * @example {simulate different devices} PH1
170
+ * @description Text block explaining how to simulate different mobile and desktop devices.
171
171
  */
172
- useDeviceToolbar: 'Use the device toolbar to {PH1}.',
173
- /**
174
- * @description Text for a link that is inserted inside a larger text block that explains how to simulate different mobile and desktop devices.
175
- */
176
- simulateDifferentDevices: 'simulate different devices',
172
+ useDeviceToolbar:
173
+ 'Use the [device toolbar](https://developer.chrome.com/docs/devtools/device-mode) and configure throttling to simulate real user environments and identify more performance issues.',
177
174
  /**
178
175
  * @description Text label for a checkbox that controls if the network cache is disabled.
179
176
  */
@@ -232,10 +229,6 @@ const UIStrings = {
232
229
  * @description Tooltip for a button that will remove everything from the currently selected log.
233
230
  */
234
231
  clearCurrentLog: 'Clear the current log',
235
- /**
236
- * @description Title for a section that contains more information about real user environments. This message is meant to prompt the user to understand the conditions experienced by real users.
237
- */
238
- realUserEnvironments: 'Real user environments',
239
232
  /**
240
233
  * @description Title for a page load phase that measures the time between when the page load starts and the time when the first byte of the initial document is downloaded.
241
234
  */
@@ -625,10 +618,6 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
625
618
  #renderRecordingSettings(): LitHtml.LitTemplate {
626
619
  const fieldEnabled = CrUXManager.CrUXManager.instance().getConfigSetting().get().enabled;
627
620
 
628
- const deviceLinkEl = UI.XLink.XLink.create(
629
- 'https://developer.chrome.com/docs/devtools/device-mode', i18nString(UIStrings.simulateDifferentDevices));
630
- const deviceMessage = i18n.i18n.getFormatLocalizedString(str_, UIStrings.useDeviceToolbar, {PH1: deviceLinkEl});
631
-
632
621
  const deviceRecEl = document.createElement('span');
633
622
  deviceRecEl.classList.add('environment-rec');
634
623
  deviceRecEl.textContent = this.#getDeviceRec() || i18nString(UIStrings.notEnoughData);
@@ -640,9 +629,8 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
640
629
  // clang-format off
641
630
  return html`
642
631
  <h3 class="card-title">${i18nString(UIStrings.environmentSettings)}</h3>
643
- <div class="device-toolbar-description">${deviceMessage}</div>
632
+ <div class="device-toolbar-description">${md(i18nString(UIStrings.useDeviceToolbar))}</div>
644
633
  ${fieldEnabled ? html`
645
- <div class="environment-recs-title">${i18nString(UIStrings.realUserEnvironments)}</div>
646
634
  <ul class="environment-recs-list">
647
635
  <li>${i18n.i18n.getFormatLocalizedString(str_, UIStrings.device, {PH1: deviceRecEl})}</li>
648
636
  <li>${i18n.i18n.getFormatLocalizedString(str_, UIStrings.network, {PH1: networkRecEl})}</li>
@@ -872,8 +860,15 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
872
860
  PH1: dateEl,
873
861
  });
874
862
 
863
+ const warnings = this.#cruxPageResult?.warnings || [];
864
+
875
865
  return html`
876
- <div class="field-data-message">${message}</div>
866
+ <div class="field-data-message">
867
+ <div>${message}</div>
868
+ ${warnings.map(warning => html`
869
+ <div class="field-data-warning">${warning}</div>
870
+ `)}
871
+ </div>
877
872
  `;
878
873
  }
879
874
 
@@ -7,16 +7,13 @@ import * as Root from '../../../core/root/root.js';
7
7
  import type * as Trace from '../../../models/trace/trace.js';
8
8
  import * as Adorners from '../../../ui/components/adorners/adorners.js';
9
9
  import * as UI from '../../../ui/legacy/legacy.js';
10
- import type * as Overlays from '../overlays/overlays.js';
11
10
 
12
11
  import {SidebarAnnotationsTab} from './SidebarAnnotationsTab.js';
13
12
  import {SidebarInsightsTab} from './SidebarInsightsTab.js';
14
13
 
15
14
  export interface ActiveInsight {
16
- name: string;
15
+ model: Trace.Insights.Types.InsightModel<{}>;
17
16
  insightSetKey: string;
18
- overlays: Overlays.Overlays.TimelineOverlay[];
19
- relatedEvents: Trace.Types.Events.Event[];
20
17
  }
21
18
 
22
19
  export class RemoveAnnotation extends Event {
@@ -127,7 +127,7 @@ describeWithEnvironment('SidebarAnnotationsTab', () => {
127
127
  assert.isNotNull(component.shadowRoot);
128
128
 
129
129
  const label = component.shadowRoot.querySelector<HTMLElement>('.annotation-identifier');
130
- assert.strictEqual(label?.innerText, 'private-aggregation-test.js (shared-sto…');
130
+ assert.strictEqual(label?.innerText, 'private-aggregation-test.js (shared-storage-demo-content-producer.web.app)');
131
131
  });
132
132
 
133
133
  it('dispatches RemoveAnnotation Events when delete annotation button is clicked', async function() {
@@ -43,7 +43,7 @@ export class SidebarInsightsTab extends HTMLElement {
43
43
  #parsedTrace: Trace.Handlers.Types.ParsedTrace|null = null;
44
44
  #insights: Trace.Insights.Types.TraceInsightSets|null = null;
45
45
  #activeInsight: ActiveInsight|null = null;
46
- #selectedCategory = Insights.Types.Category.ALL;
46
+ #selectedCategory = Trace.Insights.Types.InsightCategory.ALL;
47
47
  /**
48
48
  * When a trace has sets of insights, we show an accordion with each
49
49
  * set within. A set can be specific to a single navigation, or include the
@@ -3,43 +3,24 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as Root from '../../../core/root/root.js';
6
+ import * as Trace from '../../../models/trace/trace.js';
6
7
  import {getCleanTextContentFromElements, renderElementIntoDOM} from '../../../testing/DOMHelpers.js';
7
8
  import {describeWithEnvironment} from '../../../testing/EnvironmentHelpers.js';
8
9
  import {TraceLoader} from '../../../testing/TraceLoader.js';
9
10
  import * as Coordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
10
11
 
11
12
  import * as Components from './components.js';
12
- import * as InsightComponents from './insights/insights.js';
13
+ import type * as InsightComponents from './insights/insights.js';
14
+
15
+ type BaseInsightComponent =
16
+ InsightComponents.BaseInsightComponent.BaseInsightComponent<Trace.Insights.Types.InsightModel<{}>>;
13
17
 
14
18
  const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
15
19
 
16
20
  function getUserVisibleInsights(component: Components.SidebarSingleInsightSet.SidebarSingleInsightSet):
17
- InsightComponents.SidebarInsight.SidebarInsight[] {
21
+ BaseInsightComponent[] {
18
22
  assert.isOk(component.shadowRoot);
19
- const insightWrappers = [...component.shadowRoot.querySelectorAll<HTMLDivElement>('[data-single-insight-wrapper]')];
20
-
21
- // We have to jump through some hoops here => each insight is rendered in its
22
- // own component, but within it they all use the
23
- // devtools-performance-sidebar-insight component to render the header +
24
- // body.
25
- // So we first have to find the specific insight component (e.g.
26
- // devtools-performance-render-blocking), then look inside its shadow dom for
27
- // the devtools-performance-sidebar-insight component.
28
- // If you are here debugging something, I highly recommend loading up
29
- // DevTools and inspecting the DOM in the Insights sidebar. It will be much
30
- // easier!
31
- const userVisibleInsightComponents =
32
- insightWrappers
33
- .map(div => {
34
- const component = div.querySelector('[data-insight-name]');
35
- assert.instanceOf(component, HTMLElement);
36
- const insightComponent =
37
- component.shadowRoot?.querySelector<InsightComponents.SidebarInsight.SidebarInsight>(
38
- 'devtools-performance-sidebar-insight');
39
- return insightComponent ?? null;
40
- })
41
- .filter(x => x !== null);
42
- return userVisibleInsightComponents;
23
+ return [...component.shadowRoot.querySelectorAll<BaseInsightComponent>('[data-insight-name]')];
43
24
  }
44
25
 
45
26
  describeWithEnvironment('SidebarSingleInsightSet', () => {
@@ -59,7 +40,7 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
59
40
  parsedTrace,
60
41
  insights,
61
42
  insightSetKey: navigationId,
62
- activeCategory: InsightComponents.Types.Category.ALL,
43
+ activeCategory: Trace.Insights.Types.InsightCategory.ALL,
63
44
  activeInsight: null,
64
45
  };
65
46
  await coordinator.done();
@@ -86,7 +67,7 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
86
67
  parsedTrace,
87
68
  insights,
88
69
  insightSetKey: firstNavigation,
89
- activeCategory: InsightComponents.Types.Category.ALL,
70
+ activeCategory: Trace.Insights.Types.InsightCategory.ALL,
90
71
  activeInsight: null,
91
72
  };
92
73
  await coordinator.done();
@@ -98,6 +79,7 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
98
79
  'LCP by phase',
99
80
  'LCP request discovery',
100
81
  'Layout shift culprits',
82
+ 'Improve image delivery',
101
83
  'Third parties',
102
84
  ]);
103
85
  });
@@ -115,7 +97,7 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
115
97
  parsedTrace,
116
98
  insights,
117
99
  insightSetKey: firstNavigation,
118
- activeCategory: InsightComponents.Types.Category.ALL,
100
+ activeCategory: Trace.Insights.Types.InsightCategory.ALL,
119
101
  activeInsight: null,
120
102
  };
121
103
  await coordinator.done();
@@ -127,6 +109,7 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
127
109
  'LCP by phase',
128
110
  'LCP request discovery',
129
111
  'Layout shift culprits',
112
+ 'Improve image delivery',
130
113
  'Font display',
131
114
  'Third parties',
132
115
  ]);
@@ -142,26 +125,29 @@ describeWithEnvironment('SidebarSingleInsightSet', () => {
142
125
  const navigationId = '8463DF94CD61B265B664E7F768183DE3';
143
126
  assert.isTrue(insights.has(navigationId));
144
127
 
128
+ const model = insights.get(navigationId)?.model.LCPPhases;
129
+ if (!model) {
130
+ throw new Error('missing LCPPhases model');
131
+ }
132
+
145
133
  const component = new Components.SidebarSingleInsightSet.SidebarSingleInsightSet();
146
134
  renderElementIntoDOM(component);
147
135
  component.data = {
148
136
  parsedTrace,
149
137
  insights,
150
138
  insightSetKey: navigationId,
151
- activeCategory: InsightComponents.Types.Category.ALL,
139
+ activeCategory: Trace.Insights.Types.InsightCategory.ALL,
152
140
  activeInsight: {
153
- name: 'lcp-by-phase',
141
+ model,
154
142
  insightSetKey: navigationId,
155
- overlays: [],
156
- relatedEvents: [],
157
143
  },
158
144
  };
159
145
  await coordinator.done();
160
146
 
161
147
  const expandedInsight = getUserVisibleInsights(component).find(insight => {
162
- return 'insightExpanded' in insight.dataset;
148
+ return insight.selected;
163
149
  });
164
150
  assert.isOk(expandedInsight);
165
- assert.strictEqual(expandedInsight.dataset.insightTitle, 'LCP by phase');
151
+ assert.strictEqual(expandedInsight.model?.title, 'LCP by phase');
166
152
  });
167
153
  });
@@ -8,6 +8,7 @@ import * as Trace from '../../../models/trace/trace.js';
8
8
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
9
9
  import * as LitHtml from '../../../ui/lit-html/lit-html.js';
10
10
 
11
+ import {shouldRenderForCategory} from './insights/Helpers.js';
11
12
  import * as Insights from './insights/insights.js';
12
13
  import type {ActiveInsight} from './Sidebar.js';
13
14
  import styles from './sidebarSingleInsightSet.css.js';
@@ -31,7 +32,7 @@ export interface SidebarSingleInsightSetData {
31
32
  parsedTrace: Trace.Handlers.Types.ParsedTrace|null;
32
33
  insights: Trace.Insights.Types.TraceInsightSets|null;
33
34
  insightSetKey: Trace.Types.Events.NavigationId|null;
34
- activeCategory: Insights.Types.Category;
35
+ activeCategory: Trace.Insights.Types.InsightCategory;
35
36
  activeInsight: ActiveInsight|null;
36
37
  }
37
38
 
@@ -55,6 +56,7 @@ const INSIGHT_NAME_TO_COMPONENT = {
55
56
  LCPDiscovery: Insights.LCPDiscovery.LCPDiscovery,
56
57
  CLSCulprits: Insights.CLSCulprits.CLSCulprits,
57
58
  RenderBlocking: Insights.RenderBlocking.RenderBlocking,
59
+ ImageDelivery: Insights.ImageDelivery.ImageDelivery,
58
60
  DocumentLatency: Insights.DocumentLatency.DocumentLatency,
59
61
  FontDisplay: Insights.FontDisplay.FontDisplay,
60
62
  Viewport: Insights.Viewport.Viewport,
@@ -70,7 +72,7 @@ export class SidebarSingleInsightSet extends HTMLElement {
70
72
  parsedTrace: null,
71
73
  insights: null,
72
74
  insightSetKey: null,
73
- activeCategory: Insights.Types.Category.ALL,
75
+ activeCategory: Trace.Insights.Types.InsightCategory.ALL,
74
76
  activeInsight: null,
75
77
  };
76
78
 
@@ -84,7 +86,7 @@ export class SidebarSingleInsightSet extends HTMLElement {
84
86
  }
85
87
 
86
88
  #metricIsVisible(label: 'LCP'|'CLS'|'INP'): boolean {
87
- if (this.#data.activeCategory === Insights.Types.Category.ALL) {
89
+ if (this.#data.activeCategory === Trace.Insights.Types.InsightCategory.ALL) {
88
90
  return true;
89
91
  }
90
92
  return label === this.#data.activeCategory;
@@ -197,14 +199,14 @@ export class SidebarSingleInsightSet extends HTMLElement {
197
199
  insightSets: Trace.Insights.Types.TraceInsightSets|null,
198
200
  parsedTrace: Trace.Handlers.Types.ParsedTrace|null,
199
201
  insightSetKey: string,
200
- ): LitHtml.TemplateResult {
202
+ ): LitHtml.LitTemplate {
201
203
  const includeExperimental = Root.Runtime.experiments.isEnabled(
202
204
  Root.Runtime.ExperimentName.TIMELINE_EXPERIMENTAL_INSIGHTS,
203
205
  );
204
206
 
205
207
  const models = insightSets?.get(insightSetKey)?.model;
206
208
  if (!models) {
207
- return html``;
209
+ return LitHtml.nothing;
208
210
  }
209
211
 
210
212
  const components: LitHtml.TemplateResult[] = [];
@@ -213,14 +215,19 @@ export class SidebarSingleInsightSet extends HTMLElement {
213
215
  continue;
214
216
  }
215
217
 
218
+ const model = models[name as keyof typeof models];
219
+ if (!model || !model.shouldShow ||
220
+ !shouldRenderForCategory({activeCategory: this.#data.activeCategory, insightCategory: model.category})) {
221
+ continue;
222
+ }
223
+
216
224
  // clang-format off
217
- const component = html`<div data-single-insight-wrapper>
225
+ const component = html`<div>
218
226
  <${componentClass.litTagName}
219
- .model=${models[name as keyof typeof models]}
227
+ .selected=${this.#data.activeInsight?.model === model}
228
+ .model=${model}
220
229
  .parsedTrace=${parsedTrace}
221
230
  .insightSetKey=${insightSetKey}
222
- .activeInsight=${this.#data.activeInsight}
223
- .activeCategory=${this.#data.activeCategory}>
224
231
  </${componentClass.litTagName}>
225
232
  </div>`;
226
233
  // clang-format on
@@ -0,0 +1,75 @@
1
+ // Copyright 2024 The Chromium Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import {describeWithMockConnection} from '../../../testing/MockConnection.js';
6
+
7
+ import * as TimelineComponents from './components.js';
8
+
9
+ describeWithMockConnection('TimelineSummary', () => {
10
+ it('correctly renders categories', async function() {
11
+ const categories: TimelineComponents.TimelineSummary.CategoryData[] = [
12
+ {title: 'System', value: 100, color: 'blue'},
13
+ {title: 'Scripting', value: 5, color: 'red'},
14
+ {title: 'Painting', value: 2, color: 'green'},
15
+ {title: 'Loading', value: 1, color: 'white'},
16
+ {title: 'Rendering', value: 0, color: 'black'},
17
+ ];
18
+
19
+ const summary = new TimelineComponents.TimelineSummary.TimelineSummary();
20
+ summary.data = {
21
+ rangeStart: 0,
22
+ rangeEnd: 110,
23
+ total: 110,
24
+ categories,
25
+ };
26
+
27
+ categories.push({title: 'Total', value: 110, color: 'yellow'});
28
+
29
+ assert.isNotNull(summary.shadowRoot);
30
+ const range = summary.shadowRoot.querySelector('.summary-range');
31
+ assert.include(range?.textContent, 'Range: ');
32
+
33
+ const categorySummaries = summary.shadowRoot.querySelector('.category-summary');
34
+ const rows = categorySummaries?.querySelectorAll('.category-row') || [];
35
+ for (let i = 0; i < rows.length; i++) {
36
+ const swatch = rows[i].querySelector('.category-swatch');
37
+ assert.isNotNull(swatch);
38
+ const name = rows[i].querySelector('.category-name');
39
+ assert.include(name?.textContent, categories[i]?.title);
40
+ const value = rows[i].querySelector('.category-value');
41
+ assert.include(value?.textContent, categories[i]?.value.toString());
42
+ }
43
+ });
44
+ it('no categories should just render Total', async function() {
45
+ const categories: TimelineComponents.TimelineSummary.CategoryData[] = [];
46
+
47
+ const summary = new TimelineComponents.TimelineSummary.TimelineSummary();
48
+ summary.data = {
49
+ rangeStart: 0,
50
+ rangeEnd: 110,
51
+ total: 110,
52
+ categories,
53
+ };
54
+
55
+ categories.push({title: 'Total', value: 110, color: 'grey'});
56
+
57
+ assert.isNotNull(summary.shadowRoot);
58
+ const range = summary.shadowRoot.querySelector('.summary-range');
59
+ assert.include(range?.textContent, 'Range: ');
60
+
61
+ const categorySummaries = summary.shadowRoot.querySelector('.category-summary');
62
+ // Should just have the "Total" row.
63
+ const rows = categorySummaries?.querySelectorAll('.category-row') || [];
64
+ assert.isTrue(rows.length === 1);
65
+
66
+ const swatch = rows[0].querySelector('.category-swatch');
67
+ assert.isNotNull(swatch);
68
+
69
+ const name = rows[0].querySelector('.category-name');
70
+ assert.include(name?.textContent, 'Total');
71
+
72
+ const value = rows[0].querySelector('.category-value');
73
+ assert.include(value?.textContent, (110).toString());
74
+ });
75
+ });
@@ -0,0 +1,101 @@
1
+ // Copyright (c) 2024 The Chromium Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as i18n from '../../../core/i18n/i18n.js';
6
+ import * as LitHtml from '../../../ui/lit-html/lit-html.js';
7
+
8
+ import timelineSummaryStyles from './timelineSummary.css.js';
9
+
10
+ const {render, html} = LitHtml;
11
+
12
+ const UIStrings = {
13
+ /**
14
+ *@description Text for total
15
+ */
16
+ total: 'Total',
17
+ /**
18
+ *@description Range in Timeline Details View's Summary
19
+ *@example {1ms} PH1
20
+ *@example {10ms} PH2
21
+ */
22
+ rangeSS: 'Range: {PH1} – {PH2}',
23
+ };
24
+ const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/TimelineSummary.ts', UIStrings);
25
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
26
+
27
+ export interface CategoryData {
28
+ value: number;
29
+ color: string;
30
+ title: string;
31
+ }
32
+
33
+ export interface SummaryTableData {
34
+ total: number;
35
+ rangeStart: number;
36
+ rangeEnd: number;
37
+ categories: CategoryData[];
38
+ }
39
+
40
+ export class TimelineSummary extends HTMLElement {
41
+ readonly #shadow = this.attachShadow({mode: 'open'});
42
+ #rangeStart = 0;
43
+ #rangeEnd = 0;
44
+ #total = 0;
45
+ #categories: CategoryData[] = [];
46
+
47
+ connectedCallback(): void {
48
+ this.#shadow.adoptedStyleSheets = [timelineSummaryStyles];
49
+ }
50
+
51
+ set data(data: SummaryTableData) {
52
+ this.#total = data.total;
53
+ this.#categories = data.categories;
54
+ this.#rangeStart = data.rangeStart;
55
+ this.#rangeEnd = data.rangeEnd;
56
+ this.#render();
57
+ }
58
+
59
+ #render(): void {
60
+ // clang-format off
61
+ const output = html`
62
+ <div class="timeline-summary">
63
+ <div class="summary-range">${i18nString(UIStrings.rangeSS, {PH1: i18n.TimeUtilities.millisToString(this.#rangeStart), PH2: i18n.TimeUtilities.millisToString(this.#rangeEnd)})}</div>
64
+ <div class="category-summary">
65
+ ${this.#categories.map(category => {
66
+ return html`
67
+ <div class="category-row">
68
+ <div class="category-swatch" style="background-color: ${category.color};"></div>
69
+ <div class="category-name">${category.title}</div>
70
+ <div class="category-value">
71
+ ${i18n.TimeUtilities.preciseMillisToString(category.value)}
72
+ <div class="background-bar-container">
73
+ <div class="background-bar" style='width: ${(category.value * 100 / this.#total).toFixed(1)}%;'></div>
74
+ </div>
75
+ </div>
76
+ </div>`;
77
+ })}
78
+ <div class="category-row">
79
+ <div class="category-swatch"></div>
80
+ <div class="category-name">${i18nString(UIStrings.total)}</div>
81
+ <div class="category-value">
82
+ ${i18n.TimeUtilities.preciseMillisToString(this.#total)}
83
+ <div class="background-bar-container">
84
+ <div class="background-bar"></div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </div>`;
90
+ // clang-format on
91
+ render(output, this.#shadow, {host: this});
92
+ }
93
+ }
94
+
95
+ customElements.define('devtools-performance-timeline-summary', TimelineSummary);
96
+
97
+ declare global {
98
+ interface HTMLElementTagNameMap {
99
+ 'devtools-performance-timeline-summary': TimelineSummary;
100
+ }
101
+ }
@@ -2,8 +2,10 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as Protocol from '../../../generated/protocol.js';
5
6
  import type * as Trace from '../../../models/trace/trace.js';
6
7
  import {describeWithEnvironment} from '../../../testing/EnvironmentHelpers.js';
8
+ import {TraceLoader} from '../../../testing/TraceLoader.js';
7
9
 
8
10
  import * as Utils from './Utils.js';
9
11
 
@@ -62,4 +64,51 @@ describeWithEnvironment('Utils', () => {
62
64
  assert.deepStrictEqual(NumberWithUnit.parse('100 s]('), null);
63
65
  });
64
66
  });
67
+
68
+ describe('networkResourceCategory', function() {
69
+ const {networkResourceCategory, NetworkCategory} = Utils;
70
+ const {ResourceType} = Protocol.Network;
71
+ const getCategory = networkResourceCategory;
72
+ let req: Trace.Types.Events.SyntheticNetworkRequest|undefined;
73
+
74
+ before(async function() {
75
+ const events = await TraceLoader.fixtureContents(this, 'load-simple.json.gz');
76
+ const {parsedTrace} = await TraceLoader.executeTraceEngineOnFileContents(events);
77
+ req = parsedTrace.NetworkRequests.byId.get('2648544.35');
78
+ });
79
+
80
+ function tweakRequest(
81
+ mimeType: string, resourceType: Protocol.Network.ResourceType = Protocol.Network.ResourceType.Other):
82
+ Trace.Types.Events.SyntheticNetworkRequest {
83
+ assert.exists(req);
84
+ req.args.data.mimeType = mimeType;
85
+ req.args.data.resourceType = resourceType;
86
+ return req;
87
+ }
88
+
89
+ it('uses resource type when available', () => {
90
+ assert.strictEqual(getCategory(tweakRequest('text/html', ResourceType.Document)), NetworkCategory.DOC);
91
+ assert.strictEqual(getCategory(tweakRequest('text/css', ResourceType.Stylesheet)), NetworkCategory.CSS);
92
+ assert.strictEqual(getCategory(tweakRequest('image/png', ResourceType.Image)), NetworkCategory.IMG);
93
+ assert.strictEqual(getCategory(tweakRequest('video/webm', ResourceType.Media)), NetworkCategory.MEDIA);
94
+ assert.strictEqual(getCategory(tweakRequest('font/woff2', ResourceType.Font)), NetworkCategory.FONT);
95
+ assert.strictEqual(getCategory(tweakRequest('text/javascript', ResourceType.Script)), NetworkCategory.JS);
96
+ assert.strictEqual(getCategory(tweakRequest('something/unknown', ResourceType.WebSocket)), NetworkCategory.JS);
97
+ assert.strictEqual(getCategory(tweakRequest('something/unknown', ResourceType.Other)), NetworkCategory.OTHER);
98
+ });
99
+
100
+ it('falls back to mime type for older traces', () => {
101
+ assert.strictEqual(getCategory(tweakRequest('text/html')), NetworkCategory.DOC);
102
+ assert.strictEqual(getCategory(tweakRequest('text/css')), NetworkCategory.CSS);
103
+ assert.strictEqual(getCategory(tweakRequest('image/png')), NetworkCategory.IMG);
104
+ assert.strictEqual(getCategory(tweakRequest('video/webm')), NetworkCategory.MEDIA);
105
+ assert.strictEqual(getCategory(tweakRequest('font/woff2')), NetworkCategory.FONT);
106
+ assert.strictEqual(getCategory(tweakRequest('text/javascript')), NetworkCategory.JS);
107
+ assert.strictEqual(getCategory(tweakRequest('application/javascript')), NetworkCategory.JS);
108
+ assert.strictEqual(getCategory(tweakRequest('application/wasm')), NetworkCategory.WASM);
109
+ assert.strictEqual(getCategory(tweakRequest('application/x-font-woff')), NetworkCategory.FONT);
110
+ assert.strictEqual(getCategory(tweakRequest('application/font-woff2')), NetworkCategory.FONT);
111
+ assert.strictEqual(getCategory(tweakRequest('something/unknown')), NetworkCategory.OTHER);
112
+ });
113
+ });
65
114
  });
@@ -62,13 +62,13 @@ export function networkResourceCategory(request: Trace.Types.Events.SyntheticNet
62
62
 
63
63
  // Traces before Feb 2024 don't have `resourceType`.
64
64
  // We'll keep mimeType logic for a couple years to avoid grey network requests for last year's traces.
65
- return mimeType.startsWith('text/') ? NetworkCategory.DOC :
66
- mimeType.endsWith('/css') ? NetworkCategory.CSS :
65
+ return mimeType.endsWith('/css') ? NetworkCategory.CSS :
67
66
  mimeType.endsWith('javascript') ? NetworkCategory.JS :
68
67
  mimeType.startsWith('image/') ? NetworkCategory.IMG :
69
68
  mimeType.startsWith('audio/') || mimeType.startsWith('video/') ? NetworkCategory.MEDIA :
70
69
  mimeType.startsWith('font/') || mimeType.includes('font-') ? NetworkCategory.FONT :
71
70
  mimeType === 'application/wasm' ? NetworkCategory.WASM :
71
+ mimeType.startsWith('text/') ? NetworkCategory.DOC :
72
72
  // Ultimate fallback:
73
73
  NetworkCategory.OTHER;
74
74
  }
@@ -19,6 +19,7 @@ import * as Sidebar from './Sidebar.js';
19
19
  import * as SidebarAnnotationsTab from './SidebarAnnotationsTab.js';
20
20
  import * as SidebarInsightsTab from './SidebarInsightsTab.js';
21
21
  import * as SidebarSingleInsightSet from './SidebarSingleInsightSet.js';
22
+ import * as TimelineSummary from './TimelineSummary.js';
22
23
  import * as Utils from './Utils.js';
23
24
 
24
25
  export {
@@ -39,5 +40,6 @@ export {
39
40
  SidebarAnnotationsTab,
40
41
  SidebarInsightsTab,
41
42
  SidebarSingleInsightSet,
43
+ TimelineSummary,
42
44
  Utils,
43
45
  };