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
@@ -7,7 +7,13 @@ import * as Handlers from '../handlers/handlers.js';
7
7
  import * as Helpers from '../helpers/helpers.js';
8
8
  import * as Types from '../types/types.js';
9
9
 
10
- import {type InsightModel, type InsightSetContext, InsightWarning, type RequiredData} from './types.js';
10
+ import {
11
+ InsightCategory,
12
+ type InsightModel,
13
+ type InsightSetContext,
14
+ InsightWarning,
15
+ type RequiredData,
16
+ } from './types.js';
11
17
 
12
18
  const UIStrings = {
13
19
  /**
@@ -110,8 +116,24 @@ function breakdownPhases(
110
116
  };
111
117
  }
112
118
 
113
- function finalize(partialModel: Omit<LCPPhasesInsightModel, 'title'|'description'>): LCPPhasesInsightModel {
114
- return {title: i18nString(UIStrings.title), description: i18nString(UIStrings.description), ...partialModel};
119
+ function finalize(partialModel: Omit<LCPPhasesInsightModel, 'title'|'description'|'category'|'shouldShow'>):
120
+ LCPPhasesInsightModel {
121
+ const relatedEvents = [];
122
+ if (partialModel.lcpEvent) {
123
+ relatedEvents.push(partialModel.lcpEvent);
124
+ }
125
+ if (partialModel.lcpRequest) {
126
+ relatedEvents.push(partialModel.lcpRequest);
127
+ }
128
+ return {
129
+ title: i18nString(UIStrings.title),
130
+ description: i18nString(UIStrings.description),
131
+ category: InsightCategory.LCP,
132
+ // TODO: should move the component's "getPhaseData" to model.
133
+ shouldShow: Boolean(partialModel.phases) && (partialModel.lcpMs ?? 0) > 0,
134
+ ...partialModel,
135
+ relatedEvents,
136
+ };
115
137
  }
116
138
 
117
139
  export function generateInsight(
@@ -5,6 +5,7 @@
5
5
  export * as CLSCulprits from './CLSCulprits.js';
6
6
  export * as DocumentLatency from './DocumentLatency.js';
7
7
  export * as FontDisplay from './FontDisplay.js';
8
+ export * as ImageDelivery from './ImageDelivery.js';
8
9
  export * as InteractionToNextPaint from './InteractionToNextPaint.js';
9
10
  export * as LCPDiscovery from './LCPDiscovery.js';
10
11
  export * as LCPPhases from './LCPPhases.js';
@@ -10,6 +10,7 @@ import type * as Lantern from '../lantern/lantern.js';
10
10
  import type * as Types from '../types/types.js';
11
11
 
12
12
  import {
13
+ InsightCategory,
13
14
  type InsightModel,
14
15
  type InsightSetContext,
15
16
  type InsightSetContextWithNavigation,
@@ -150,8 +151,15 @@ function computeSavings(
150
151
  return {metricSavings, requestIdToWastedMs};
151
152
  }
152
153
 
153
- function finalize(partialModel: Omit<RenderBlockingInsightModel, 'title'|'description'>): RenderBlockingInsightModel {
154
- return {title: i18nString(UIStrings.title), description: i18nString(UIStrings.description), ...partialModel};
154
+ function finalize(partialModel: Omit<RenderBlockingInsightModel, 'title'|'description'|'category'|'shouldShow'>):
155
+ RenderBlockingInsightModel {
156
+ return {
157
+ title: i18nString(UIStrings.title),
158
+ description: i18nString(UIStrings.description),
159
+ category: InsightCategory.LCP,
160
+ shouldShow: partialModel.renderBlockingRequests.length > 0,
161
+ ...partialModel,
162
+ };
155
163
  }
156
164
 
157
165
  export function generateInsight(
@@ -7,7 +7,7 @@ import * as Helpers from '../helpers/helpers.js';
7
7
  import {type SelectorTiming, SelectorTimingsKey} from '../types/TraceEvents.js';
8
8
  import * as Types from '../types/types.js';
9
9
 
10
- import type {InsightModel, InsightSetContext, RequiredData} from './types.js';
10
+ import {InsightCategory, type InsightModel, type InsightSetContext, type RequiredData} from './types.js';
11
11
 
12
12
  const UIStrings = {
13
13
  /**
@@ -68,8 +68,15 @@ function aggregateSelectorStats(
68
68
  return [...selectorMap.values()];
69
69
  }
70
70
 
71
- function finalize(partialModel: Omit<SlowCSSSelectorInsightModel, 'title'|'description'>): SlowCSSSelectorInsightModel {
72
- return {title: i18nString(UIStrings.title), description: i18nString(UIStrings.description), ...partialModel};
71
+ function finalize(partialModel: Omit<SlowCSSSelectorInsightModel, 'title'|'description'|'category'|'shouldShow'>):
72
+ SlowCSSSelectorInsightModel {
73
+ return {
74
+ title: i18nString(UIStrings.title),
75
+ description: i18nString(UIStrings.description),
76
+ category: InsightCategory.ALL,
77
+ shouldShow: partialModel.topElapsedMs.length !== 0 && partialModel.topMatchAttempts.length !== 0,
78
+ ...partialModel,
79
+ };
73
80
  }
74
81
 
75
82
  export function generateInsight(
@@ -9,7 +9,7 @@ import type * as Handlers from '../handlers/handlers.js';
9
9
  import * as Helpers from '../helpers/helpers.js';
10
10
  import type * as Types from '../types/types.js';
11
11
 
12
- import type {InsightModel, InsightSetContext, RequiredData} from './types.js';
12
+ import {InsightCategory, type InsightModel, type InsightSetContext, type RequiredData} from './types.js';
13
13
 
14
14
  const UIStrings = {
15
15
  /** Title of an insight that provides details about the code on a web page that the user doesn't control (referred to as "third-party code"). */
@@ -52,8 +52,16 @@ function getRelatedEvents(
52
52
  return events;
53
53
  }
54
54
 
55
- function finalize(partialModel: Omit<ThirdPartiesInsightModel, 'title'|'description'>): ThirdPartiesInsightModel {
56
- return {title: i18nString(UIStrings.title), description: i18nString(UIStrings.description), ...partialModel};
55
+ function finalize(partialModel: Omit<ThirdPartiesInsightModel, 'title'|'description'|'category'|'shouldShow'>):
56
+ ThirdPartiesInsightModel {
57
+ return {
58
+ title: i18nString(UIStrings.title),
59
+ description: i18nString(UIStrings.description),
60
+ category: InsightCategory.ALL,
61
+ shouldShow:
62
+ Boolean([...partialModel.summaryByEntity.entries()].find(kv => kv[0] !== partialModel.firstPartyEntity)),
63
+ ...partialModel,
64
+ };
57
65
  }
58
66
 
59
67
  export function generateInsight(
@@ -6,7 +6,13 @@ import * as i18n from '../../../core/i18n/i18n.js';
6
6
  import * as Helpers from '../helpers/helpers.js';
7
7
  import type * as Types from '../types/types.js';
8
8
 
9
- import {type InsightModel, type InsightSetContext, InsightWarning, type RequiredData} from './types.js';
9
+ import {
10
+ InsightCategory,
11
+ type InsightModel,
12
+ type InsightSetContext,
13
+ InsightWarning,
14
+ type RequiredData,
15
+ } from './types.js';
10
16
 
11
17
  const UIStrings = {
12
18
  /** Title of an insight that provides details about if the page's viewport is optimized for mobile viewing. */
@@ -30,8 +36,15 @@ export type ViewportInsightModel = InsightModel<{
30
36
  viewportEvent?: Types.Events.ParseMetaViewport,
31
37
  }>;
32
38
 
33
- function finalize(partialModel: Omit<ViewportInsightModel, 'title'|'description'>): ViewportInsightModel {
34
- return {title: i18nString(UIStrings.title), description: i18nString(UIStrings.description), ...partialModel};
39
+ function finalize(partialModel: Omit<ViewportInsightModel, 'title'|'description'|'category'|'shouldShow'>):
40
+ ViewportInsightModel {
41
+ return {
42
+ title: i18nString(UIStrings.title),
43
+ description: i18nString(UIStrings.description),
44
+ category: InsightCategory.INP,
45
+ shouldShow: partialModel.mobileOptimized === false,
46
+ ...partialModel,
47
+ };
35
48
  }
36
49
 
37
50
  export function generateInsight(
@@ -2,6 +2,7 @@
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 type * as Common from '../../../core/common/common.js';
5
6
  import type * as Handlers from '../handlers/handlers.js';
6
7
  import type * as Lantern from '../lantern/lantern.js';
7
8
  import type * as Types from '../types/types.js';
@@ -53,9 +54,19 @@ export interface MetricSavings {
53
54
  /* eslint-enable @typescript-eslint/naming-convention */
54
55
  }
55
56
 
57
+ export enum InsightCategory {
58
+ ALL = 'All',
59
+ INP = 'INP',
60
+ LCP = 'LCP',
61
+ CLS = 'CLS',
62
+ }
63
+
56
64
  export type InsightModel<R extends Record<string, unknown>> = R&{
57
- title: string,
58
- description: string,
65
+ title: Common.UIString.LocalizedString,
66
+ description: Common.UIString.LocalizedString,
67
+ category: InsightCategory,
68
+ /** True if there is anything of interest to display to the user. */
69
+ shouldShow: boolean,
59
70
  relatedEvents?: Types.Events.Event[],
60
71
  warnings?: InsightWarning[],
61
72
  metricSavings?: MetricSavings,
@@ -1,6 +1,8 @@
1
1
  // Copyright 2023 The Chromium Authors. All rights reserved.
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
+
5
+ import type * as SDK from '../../../core/sdk/sdk.js';
4
6
  import type * as Protocol from '../../../generated/protocol.js';
5
7
 
6
8
  import type {TraceWindowMicroSeconds} from './Timing.js';
@@ -177,7 +179,12 @@ export interface Modifications {
177
179
  export interface MetaData {
178
180
  source?: 'DevTools';
179
181
  startTime?: string;
182
+ emulatedDeviceTitle?: string;
183
+ // Only set if network throttling is active.
180
184
  networkThrottling?: string;
185
+ // Only set if network throttling is active.
186
+ networkThrottlingConditions?: Omit<SDK.NetworkManager.Conditions, 'title'>;
187
+ // Only set if CPU throttling is active.
181
188
  cpuThrottling?: number;
182
189
  hardwareConcurrency?: number;
183
190
  dataOrigin?: DataOrigin;
@@ -677,7 +677,10 @@ export interface MarkerEvent extends Event {
677
677
  }
678
678
 
679
679
  export function isMarkerEvent(event: Event): event is MarkerEvent {
680
- return markerTypeGuards.some(fn => fn(event));
680
+ if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {
681
+ return markerTypeGuards.some(fn => fn(event));
682
+ }
683
+ return false;
681
684
  }
682
685
 
683
686
  const pageLoadEventTypeGuards = [
@@ -686,7 +689,10 @@ const pageLoadEventTypeGuards = [
686
689
  ];
687
690
 
688
691
  export function eventIsPageLoadEvent(event: Event): event is PageLoadEvent {
689
- return pageLoadEventTypeGuards.some(fn => fn(event));
692
+ if (event.ph === Phase.INSTANT || event.ph === Phase.MARK) {
693
+ return pageLoadEventTypeGuards.some(fn => fn(event));
694
+ }
695
+ return false;
690
696
  }
691
697
 
692
698
  export interface LargestContentfulPaintCandidate extends Mark {
@@ -2635,6 +2641,7 @@ export function isJSInvocationEvent(event: Event): boolean {
2635
2641
  switch (event.name) {
2636
2642
  case Name.RUN_MICROTASKS:
2637
2643
  case Name.FUNCTION_CALL:
2644
+ // TODO(paulirish): Define types for these Evaluate* events
2638
2645
  case Name.EVALUATE_SCRIPT:
2639
2646
  case Name.EVALUATE_MODULE:
2640
2647
  case Name.EVENT_DISPATCH:
@@ -860,7 +860,7 @@ export class AnimationTimeline extends UI.Widget.VBox implements
860
860
  this.#pauseButton.setEnabled(false);
861
861
  }
862
862
  } else {
863
- this.setDuration(Math.max(500, group.finiteDuration() + 100));
863
+ this.setDuration(group.finiteDuration());
864
864
  this.#playbackRateButtons.forEach(button => {
865
865
  button.removeAttribute('disabled');
866
866
  });
@@ -966,7 +966,7 @@ export class AnimationTimeline extends UI.Widget.VBox implements
966
966
  lastDraw = gridWidth;
967
967
  const label = UI.UIUtils.createSVGChild(this.#grid, 'text', 'animation-timeline-grid-label');
968
968
  label.textContent = isScrollDriven ? `${time.toFixed(0)}px` : i18n.TimeUtilities.millisToString(time);
969
- label.setAttribute('x', (gridWidth + 10).toString());
969
+ label.setAttribute('x', (gridWidth + 12).toString());
970
970
  label.setAttribute('y', '16');
971
971
  }
972
972
  }
@@ -1053,8 +1053,6 @@ export class AnimationTimeline extends UI.Widget.VBox implements
1053
1053
  this.setCurrentTimeText(this.#scrubberCurrentTime());
1054
1054
  if (this.#scrubberPlayer.playState.toString() === 'pending' || this.#scrubberPlayer.playState === 'running') {
1055
1055
  this.element.window().requestAnimationFrame(this.updateScrubber.bind(this));
1056
- } else if (this.#scrubberPlayer.playState === 'finished') {
1057
- this.clearCurrentTimeText();
1058
1056
  }
1059
1057
  }
1060
1058
 
@@ -4,7 +4,6 @@
4
4
 
5
5
  import type * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
- import * as Root from '../../core/root/root.js';
8
7
  import * as SDK from '../../core/sdk/sdk.js';
9
8
  import * as Protocol from '../../generated/protocol.js';
10
9
  import {createTarget, stubNoopSettings} from '../../testing/EnvironmentHelpers.js';
@@ -196,8 +195,6 @@ describeWithMockConnection('ApplicationPanelSidebar', () => {
196
195
  });
197
196
 
198
197
  it('shows extension storage based on added models', async () => {
199
- Root.Runtime.experiments.enableForTest(Root.Runtime.ExperimentName.EXTENSION_STORAGE_VIEWER);
200
-
201
198
  for (const useTreeView of [false, true]) {
202
199
  Application.ResourcesPanel.ResourcesPanel.instance({forceNew: true});
203
200
  const sidebar = await Application.ResourcesPanel.ResourcesPanel.showAndGetSidebar();
@@ -241,8 +238,6 @@ describeWithMockConnection('ApplicationPanelSidebar', () => {
241
238
  });
242
239
 
243
240
  it('does not add extension storage if already added by another model', async () => {
244
- Root.Runtime.experiments.enableForTest(Root.Runtime.ExperimentName.EXTENSION_STORAGE_VIEWER);
245
-
246
241
  Application.ResourcesPanel.ResourcesPanel.instance({forceNew: true});
247
242
  const sidebar = await Application.ResourcesPanel.ResourcesPanel.showAndGetSidebar();
248
243
 
@@ -36,7 +36,6 @@ import * as Common from '../../core/common/common.js';
36
36
  import * as Host from '../../core/host/host.js';
37
37
  import * as i18n from '../../core/i18n/i18n.js';
38
38
  import * as Platform from '../../core/platform/platform.js';
39
- import * as Root from '../../core/root/root.js';
40
39
  import * as SDK from '../../core/sdk/sdk.js';
41
40
  import * as Protocol from '../../generated/protocol.js';
42
41
  import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
@@ -281,7 +280,7 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
281
280
  serviceWorkersTreeElement: ServiceWorkersTreeElement;
282
281
  localStorageListTreeElement: ExpandableApplicationPanelTreeElement;
283
282
  sessionStorageListTreeElement: ExpandableApplicationPanelTreeElement;
284
- extensionStorageListTreeElement: ExpandableApplicationPanelTreeElement|undefined;
283
+ extensionStorageListTreeElement: ExpandableApplicationPanelTreeElement;
285
284
  indexedDBListTreeElement: IndexedDBTreeElement;
286
285
  interestGroupTreeElement: InterestGroupTreeElement;
287
286
  cookieListTreeElement: ExpandableApplicationPanelTreeElement;
@@ -364,17 +363,15 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
364
363
 
365
364
  storageTreeElement.appendChild(this.sessionStorageListTreeElement);
366
365
 
367
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.EXTENSION_STORAGE_VIEWER)) {
368
- this.extensionStorageListTreeElement =
369
- new ExpandableApplicationPanelTreeElement(panel, i18nString(UIStrings.extensionStorage), 'extension-storage');
370
- this.extensionStorageListTreeElement.setLink(
371
- 'https://developer.chrome.com/docs/extensions/reference/api/storage/?utm_source=devtools' as
372
- Platform.DevToolsPath.UrlString);
373
- const extensionStorageIcon = IconButton.Icon.create('table');
374
- this.extensionStorageListTreeElement.setLeadingIcons([extensionStorageIcon]);
366
+ this.extensionStorageListTreeElement =
367
+ new ExpandableApplicationPanelTreeElement(panel, i18nString(UIStrings.extensionStorage), 'extension-storage');
368
+ this.extensionStorageListTreeElement.setLink(
369
+ 'https://developer.chrome.com/docs/extensions/reference/api/storage/?utm_source=devtools' as
370
+ Platform.DevToolsPath.UrlString);
371
+ const extensionStorageIcon = IconButton.Icon.create('table');
372
+ this.extensionStorageListTreeElement.setLeadingIcons([extensionStorageIcon]);
375
373
 
376
- storageTreeElement.appendChild(this.extensionStorageListTreeElement);
377
- }
374
+ storageTreeElement.appendChild(this.extensionStorageListTreeElement);
378
375
 
379
376
  this.indexedDBListTreeElement = new IndexedDBTreeElement(panel);
380
377
  this.indexedDBListTreeElement.setLink(
@@ -472,14 +469,12 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
472
469
  },
473
470
  {scoped: true});
474
471
 
475
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.EXTENSION_STORAGE_VIEWER)) {
476
- SDK.TargetManager.TargetManager.instance().observeModels(
477
- ExtensionStorageModel, {
478
- modelAdded: (model: ExtensionStorageModel) => this.extensionStorageModelAdded(model),
479
- modelRemoved: (model: ExtensionStorageModel) => this.extensionStorageModelRemoved(model),
480
- },
481
- {scoped: true});
482
- }
472
+ SDK.TargetManager.TargetManager.instance().observeModels(
473
+ ExtensionStorageModel, {
474
+ modelAdded: (model: ExtensionStorageModel) => this.extensionStorageModelAdded(model),
475
+ modelRemoved: (model: ExtensionStorageModel) => this.extensionStorageModelRemoved(model),
476
+ },
477
+ {scoped: true});
483
478
 
484
479
  SDK.TargetManager.TargetManager.instance().observeModels(
485
480
  IndexedDBModel, {
@@ -1190,7 +1185,6 @@ export class ManifestChildTreeElement extends ApplicationPanelTreeElement {
1190
1185
  (this.parent as AppManifestTreeElement)?.showManifestView();
1191
1186
  this.#sectionElement.scrollIntoView();
1192
1187
  UI.ARIAUtils.alert(i18nString(UIStrings.onInvokeAlert, {PH1: this.listItemElement.title}));
1193
- Host.userMetrics.manifestSectionSelected(this.listItemElement.title);
1194
1188
  }
1195
1189
  // direct focus to the corresponding element
1196
1190
  onInvokeElementKeydown(event: KeyboardEvent): void {
@@ -473,7 +473,10 @@ export class IDBDataView extends UI.View.SimpleView {
473
473
  this.updateData(true);
474
474
  }
475
475
 
476
- update(objectStore: ObjectStore, index: Index|null): void {
476
+ override update(objectStore: ObjectStore|null = null, index: Index|null = null): void {
477
+ if (!objectStore) {
478
+ return;
479
+ }
477
480
  this.objectStore = objectStore;
478
481
  this.index = index;
479
482
 
@@ -285,7 +285,10 @@ export class ServiceWorkerCacheView extends UI.View.SimpleView {
285
285
  node.remove();
286
286
  }
287
287
 
288
- update(cache: SDK.ServiceWorkerCacheModel.Cache): void {
288
+ override update(cache: SDK.ServiceWorkerCacheModel.Cache|null = null): void {
289
+ if (!cache) {
290
+ return;
291
+ }
289
292
  this.cache = cache;
290
293
  this.resetDataGrid();
291
294
  void this.updateData(true);
@@ -73,7 +73,7 @@ describeWithMockConnection('StorageView', () => {
73
73
  const container = view.element.shadowRoot?.querySelector('.clear-storage-header') || null;
74
74
  assert.instanceOf(container, HTMLDivElement);
75
75
  const customQuotaCheckbox =
76
- container.shadowRoot!.querySelector('.quota-override-row span')!.shadowRoot!.querySelector(
76
+ container.shadowRoot!.querySelector('.quota-override-row dt-checkbox')!.shadowRoot!.querySelector(
77
77
  '[title="Simulate custom storage quota"]');
78
78
  assert.instanceOf(customQuotaCheckbox, HTMLInputElement);
79
79
  customQuotaCheckbox.checked = true;
@@ -6,7 +6,7 @@
6
6
 
7
7
  .tree-outline {
8
8
  li.storage-group-list-item,
9
- li.storage-group-list-item:not(:has(span[is="dt-checkbox"])) {
9
+ li.storage-group-list-item:not(:has(dt-checkbox)) {
10
10
  padding: 0 var(--sys-size-8) 0 var(--sys-size-3);
11
11
 
12
12
  &::before {
@@ -249,7 +249,7 @@ export abstract class CategorizedBreakpointsSidebarPane extends UI.Widget.VBox {
249
249
  return null;
250
250
  }
251
251
 
252
- private update(): void {
252
+ override update(): void {
253
253
  const target = UI.Context.Context.instance().flavor(SDK.Target.Target);
254
254
  const debuggerModel = target ? target.model(SDK.DebuggerModel.DebuggerModel) : null;
255
255
  const details = debuggerModel ? debuggerModel.debuggerPausedDetails() : null;
@@ -349,7 +349,7 @@ export class DOMBreakpointsSidebarPane extends UI.Widget.VBox implements
349
349
  this.update();
350
350
  }
351
351
 
352
- private update(): void {
352
+ override update(): void {
353
353
  const details = UI.Context.Context.instance().flavor(SDK.DebuggerModel.DebuggerPausedDetails);
354
354
  if (this.#highlightedBreakpoint) {
355
355
  const oldHighlightedBreakpoint = this.#highlightedBreakpoint;
@@ -372,7 +372,7 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
372
372
  this.update();
373
373
  }
374
374
 
375
- private update(): void {
375
+ override update(): void {
376
376
  const isEmpty = this.#breakpoints.length === 0;
377
377
  this.#list.element.classList.toggle('hidden', isEmpty);
378
378
  this.#emptyElement.classList.toggle('hidden', !isEmpty);
@@ -44,6 +44,6 @@
44
44
  z-index: -1;
45
45
  }
46
46
 
47
- .source-code[is="dt-checkbox"] {
47
+ dt-checkbox.source-code {
48
48
  max-width: 100%;
49
49
  }
@@ -40,7 +40,7 @@
40
40
  background-color: var(--sys-color-tonal-container);
41
41
  }
42
42
 
43
- .breakpoint-entry [is="dt-checkbox"] {
43
+ .breakpoint-entry dt-checkbox {
44
44
  max-width: 100%;
45
45
  }
46
46
 
@@ -16,10 +16,35 @@ import {describeWithMockConnection} from '../../testing/MockConnection.js';
16
16
  import * as Components from '../../ui/legacy/components/utils/utils.js';
17
17
  import * as UI from '../../ui/legacy/legacy.js';
18
18
 
19
+ import * as Console from './console.js';
19
20
  // The css files aren't exported by the bundle, so we need to import it directly.
20
21
  // eslint-disable-next-line rulesdir/es_modules_import
21
22
  import consoleViewStyles from './consoleView.css.js';
22
23
 
24
+ describe('ConsoleViewMessage', () => {
25
+ describe('concatErrorDescriptionAndIssueSummary', () => {
26
+ const {concatErrorDescriptionAndIssueSummary} = Console.ConsoleViewMessage;
27
+
28
+ it('correctly appends the issue summary in case of single line error descriptions', () => {
29
+ assert.strictEqual(
30
+ concatErrorDescriptionAndIssueSummary(
31
+ 'TypeError: Failed to fetch',
32
+ 'Access blocked by CORS policy: Cross origin requests are not allowed by request mode.'),
33
+ 'TypeError: Failed to fetch. Access blocked by CORS policy: Cross origin requests are not allowed by request mode.',
34
+ );
35
+ });
36
+
37
+ it('correctly inserts the issue summary in case of multi-line error descriptions', () => {
38
+ assert.strictEqual(
39
+ concatErrorDescriptionAndIssueSummary(
40
+ 'TypeError: Failed to fetch\n at (index):25:5',
41
+ 'Access blocked by CORS policy: Cross origin requests are not allowed by request mode.'),
42
+ 'TypeError: Failed to fetch. Access blocked by CORS policy: Cross origin requests are not allowed by request mode.\n at (index):25:5',
43
+ );
44
+ });
45
+ });
46
+ });
47
+
23
48
  describeWithMockConnection('ConsoleViewMessage', () => {
24
49
  describe('anchor rendering', () => {
25
50
  it('links to the top frame for normal console message', () => {
@@ -221,6 +221,24 @@ export const getMessageForElement = (element: Element): ConsoleViewMessage|undef
221
221
  return elementToMessage.get(element);
222
222
  };
223
223
 
224
+ /**
225
+ * Combines the error description (essentially the `Error#stack` property value)
226
+ * with the `issueSummary`.
227
+ *
228
+ * @param description the `description` property of the `Error` remote object.
229
+ * @param issueSummary the optional `issueSummary` of the `exceptionMetaData`.
230
+ * @returns the enriched description.
231
+ * @see https://goo.gle/devtools-reduce-network-noise-design
232
+ */
233
+ export const concatErrorDescriptionAndIssueSummary = (description: string, issueSummary: string): string => {
234
+ // Insert the issue summary right after the error message.
235
+ const pos = description.indexOf('\n');
236
+ const prefix = pos === -1 ? description : description.substring(0, pos);
237
+ const suffix = pos === -1 ? '' : description.substring(pos);
238
+ description = `${prefix}. ${issueSummary}${suffix}`;
239
+ return description;
240
+ };
241
+
224
242
  // This value reflects the 18px min-height of .console-message, plus the
225
243
  // 1px border of .console-message-wrapper. Keep in sync with consoleView.css.
226
244
  const defaultConsoleRowHeight = 19;
@@ -1704,6 +1722,11 @@ export class ConsoleViewMessage implements ConsoleViewportElement {
1704
1722
  return null;
1705
1723
  }
1706
1724
 
1725
+ const issueSummary = exceptionDetails?.exceptionMetaData?.issueSummary;
1726
+ if (typeof issueSummary === 'string') {
1727
+ string = concatErrorDescriptionAndIssueSummary(string, issueSummary);
1728
+ }
1729
+
1707
1730
  const linkInfos = parseSourcePositionsFromErrorStack(runtimeModel, string);
1708
1731
  if (!linkInfos?.length) {
1709
1732
  return null;
@@ -195,7 +195,7 @@ export class CoverageListView extends UI.Widget.VBox {
195
195
  this.setDefaultFocusedChild(dataGridWidget);
196
196
  }
197
197
 
198
- update(coverageInfo: URLCoverageInfo[]): void {
198
+ override update(coverageInfo: URLCoverageInfo[] = []): void {
199
199
  let hadUpdates = false;
200
200
  const maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size()), 0);
201
201
  const rootNode = this.dataGrid.rootNode();
@@ -145,7 +145,7 @@ export class DeveloperResourcesListView extends UI.Widget.VBox {
145
145
  }
146
146
  }
147
147
 
148
- update(items: Iterable<SDK.PageResourceLoader.PageResource>): void {
148
+ override update(items: Iterable<SDK.PageResourceLoader.PageResource> = []): void {
149
149
  let hadUpdates = false;
150
150
  const rootNode = this.dataGrid.rootNode();
151
151
  for (const item of items) {
@@ -157,7 +157,7 @@ export class ClassesPaneWidget extends UI.Widget.Widget {
157
157
  this.registerCSSFiles([classesPaneWidgetStyles]);
158
158
  }
159
159
 
160
- private update(): void {
160
+ override update(): void {
161
161
  if (!this.isShowing()) {
162
162
  return;
163
163
  }
@@ -29,6 +29,7 @@ describeWithMockConnection('ElementStatePaneWidget', () => {
29
29
  'in-range',
30
30
  'out-of-range',
31
31
  'visited',
32
+ 'link',
32
33
  'checked',
33
34
  'indeterminate',
34
35
  'placeholder-shown',
@@ -292,14 +293,14 @@ describeWithMockConnection('ElementStatePaneWidget', () => {
292
293
  it('Shows the specific pseudo-classes for a and area with href', async () => {
293
294
  await assertExpectedPseudoClasses(
294
295
  'a',
295
- ['visited', 'read-write'],
296
+ ['visited', 'link', 'read-write'],
296
297
  false,
297
298
  ['href', 'www.google.com'],
298
299
  );
299
300
 
300
301
  await assertExpectedPseudoClasses(
301
302
  'area',
302
- ['visited', 'read-write'],
303
+ ['visited', 'link', 'read-write'],
303
304
  false,
304
305
  ['href', 'www.google.com'],
305
306
  );