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
@@ -2,17 +2,30 @@
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 i18n from '../../../core/i18n/i18n.js';
5
6
  import * as Platform from '../../../core/platform/platform.js';
6
7
  import * as WindowBoundsService from '../../../services/window_bounds/window_bounds.js';
7
8
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
8
9
  import * as Coordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
9
10
  import * as LitHtml from '../../../ui/lit-html/lit-html.js';
10
11
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
12
+ import * as Buttons from '../buttons/buttons.js';
11
13
 
12
14
  import dialogStyles from './dialog.css.js';
13
15
 
14
16
  const {html} = LitHtml;
15
17
 
18
+ const UIStrings = {
19
+
20
+ /**
21
+ * @description Title of close button for the shortcuts dialog.
22
+ */
23
+ close: 'Close',
24
+ };
25
+
26
+ const str_ = i18n.i18n.registerUIStrings('ui/components/dialogs/Dialog.ts', UIStrings);
27
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
28
+
16
29
  const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
17
30
 
18
31
  const IS_DIALOG_SUPPORTED = 'HTMLDialogElement' in globalThis;
@@ -45,7 +58,7 @@ interface DialogData {
45
58
  origin: DialogOrigin;
46
59
  position: DialogVerticalPosition;
47
60
  /**
48
- * Horizontal alignment of the dialg with respect to its origin.
61
+ * Horizontal alignment of the dialog with respect to its origin.
49
62
  * Center by default.
50
63
  */
51
64
  horizontalAlignment: DialogHorizontalAlignment;
@@ -80,6 +93,14 @@ interface DialogData {
80
93
  * content. Defaults to true.
81
94
  */
82
95
  closeOnScroll: boolean;
96
+ /**
97
+ * Whether render a closed button, when it is clicked, close the dialog. Defaults to false.
98
+ */
99
+ closeButton: boolean;
100
+ /**
101
+ * The string used in the header row of the dialog.
102
+ */
103
+ dialogTitle: string;
83
104
  /**
84
105
  * Specifies a context for the visual element.
85
106
  */
@@ -106,6 +127,8 @@ export class Dialog extends HTMLElement {
106
127
  windowBoundsService: WindowBoundsService.WindowBoundsService.WindowBoundsServiceImpl.instance(),
107
128
  closeOnESC: true,
108
129
  closeOnScroll: true,
130
+ closeButton: false,
131
+ dialogTitle: '',
109
132
  jslogContext: '',
110
133
  };
111
134
 
@@ -211,6 +234,16 @@ export class Dialog extends HTMLElement {
211
234
  this.#onStateChange();
212
235
  }
213
236
 
237
+ set closeButton(closeButton: boolean) {
238
+ this.#props.closeButton = closeButton;
239
+ this.#onStateChange();
240
+ }
241
+
242
+ set dialogTitle(dialogTitle: string) {
243
+ this.#props.dialogTitle = dialogTitle;
244
+ this.#onStateChange();
245
+ }
246
+
214
247
  set jslogContext(jslogContext: string) {
215
248
  this.#props.jslogContext = jslogContext;
216
249
  this.#onStateChange();
@@ -664,6 +697,32 @@ export class Dialog extends HTMLElement {
664
697
  return this.#dialogClientRect;
665
698
  }
666
699
 
700
+ #renderHeaderRow(): LitHtml.TemplateResult|null {
701
+ // If the title is empty and close button is false, let's skip the header row.
702
+ if (!this.#props.dialogTitle && !this.#props.closeButton) {
703
+ return null;
704
+ }
705
+ // Disabled until https://crbug.com/1079231 is fixed.
706
+ // clang-format off
707
+ return html`
708
+ <div class="dialog-header">
709
+ <span class="dialog-header-text">${this.#props.dialogTitle}</span>
710
+ ${this.#props.closeButton ? html`
711
+ <devtools-button
712
+ @click=${this.#closeDialog}
713
+ .data=${{
714
+ variant: Buttons.Button.Variant.TOOLBAR,
715
+ iconName: 'cross',
716
+ title: i18nString(UIStrings.close),
717
+ } as Buttons.Button.ButtonData}
718
+ jslog=${VisualLogging.close().track({click: true})}
719
+ ></devtools-button>
720
+ ` : LitHtml.nothing}
721
+ </div>
722
+ `;
723
+ // clang-format on
724
+ }
725
+
667
726
  #render(): void {
668
727
  if (!ComponentHelpers.ScheduledRender.isScheduledRender(this)) {
669
728
  throw new Error('Dialog render was not scheduled');
@@ -686,7 +745,10 @@ export class Dialog extends HTMLElement {
686
745
  <dialog @click=${this.#handlePointerEvent} @pointermove=${this.#handlePointerEvent} @cancel=${this.#onCancel}
687
746
  jslog=${VisualLogging.dialog(this.#props.jslogContext).track({resize: true, keydown: 'Escape'}).parent('mapped')}>
688
747
  <div id="content">
689
- <slot></slot>
748
+ ${this.#renderHeaderRow()}
749
+ <div class='dialog-content'>
750
+ <slot></slot>
751
+ </div>
690
752
  </div>
691
753
  </dialog>
692
754
  `, this.#shadow, { host: this });
@@ -13,8 +13,11 @@ import * as Dialogs from './dialogs.js';
13
13
  const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
14
14
 
15
15
  describeWithLocale('ShortcutDialog', () => {
16
- async function getShortcutDialog(open?: boolean) {
16
+ async function getShortcutDialog(open?: boolean, prependedElement?: HTMLElement) {
17
17
  const shortcutDialog = new Dialogs.ShortcutDialog.ShortcutDialog();
18
+ if (prependedElement) {
19
+ shortcutDialog.prependElement(prependedElement);
20
+ }
18
21
  shortcutDialog.data = {shortcuts: [{title: 'Shortcut Title', bindings: ['Ctrl+E']}], open};
19
22
  Helpers.renderElementIntoDOM(shortcutDialog);
20
23
  await coordinator.done();
@@ -45,4 +48,15 @@ describeWithLocale('ShortcutDialog', () => {
45
48
 
46
49
  assert.isFalse(dialog.hasAttribute('open'));
47
50
  });
51
+
52
+ it('prepends provived element to the dialog content', async () => {
53
+ const prependedElement = document.createElement('div');
54
+ prependedElement.classList.add('prepended-element');
55
+
56
+ const shortcutDialog = await getShortcutDialog(true, prependedElement);
57
+ const dialog = getDialogFromShortcutDialog(shortcutDialog);
58
+ const prependedElementInShortcutDialog = dialog.querySelector('div.prepended-element');
59
+
60
+ assert.instanceOf(prependedElementInShortcutDialog, HTMLDivElement);
61
+ });
48
62
  });
@@ -69,6 +69,7 @@ export class ShortcutDialog extends HTMLElement {
69
69
  #showButton: Buttons.Button.Button|null = null;
70
70
  #shortcuts: Shortcut[] = [];
71
71
  #openOnRender = false;
72
+ #prependedElement: HTMLElement|null = null;
72
73
 
73
74
  connectedCallback(): void {
74
75
  this.#shadow.adoptedStyleSheets = [shortcutDialogStyles];
@@ -107,6 +108,10 @@ export class ShortcutDialog extends HTMLElement {
107
108
  return binding.split(/[\s+]+/).map(word => word.trim()); // Split on one or more spaces or + symbols
108
109
  }
109
110
 
111
+ prependElement(element: HTMLElement): void {
112
+ this.#prependedElement = element;
113
+ }
114
+
110
115
  #render(): void {
111
116
  if (!ComponentHelpers.ScheduledRender.isScheduledRender(this)) {
112
117
  throw new Error('Shortcut dialog render was not scheduled');
@@ -142,32 +147,35 @@ export class ShortcutDialog extends HTMLElement {
142
147
  this.#dialog = node as DialogElement;
143
148
  })}
144
149
  >
145
- <div class="keybinds-category-header">
146
- <span class="keybinds-category-header-text">${i18nString(UIStrings.dialogTitle)}</span>
147
- <devtools-button
148
- @click=${this.#closeDialog}
149
- .data=${{
150
- variant: Buttons.Button.Variant.TOOLBAR,
151
- iconName: 'cross',
152
- title: i18nString(UIStrings.close),
153
- } as Buttons.Button.ButtonData}
150
+ <div class="keybinds-category-header">
151
+ <span class="keybinds-category-header-text">${i18nString(UIStrings.dialogTitle)}</span>
152
+ <devtools-button
153
+ @click=${this.#closeDialog}
154
+ .data=${{
155
+ variant: Buttons.Button.Variant.TOOLBAR,
156
+ iconName: 'cross',
157
+ title: i18nString(UIStrings.close),
158
+ } as Buttons.Button.ButtonData}
154
159
  jslog=${VisualLogging.close().track({click: true})}
155
- ></devtools-button>
156
- </div>
160
+ ></devtools-button>
161
+ </div>
162
+ ${(this.#prependedElement) ? html`${this.#prependedElement}` : LitHtml.nothing}
157
163
  <ul class="keybinds-list">
158
164
  ${this.#shortcuts.map(shortcut =>
159
165
  html`
160
166
  <li class="keybinds-list-item">
161
- <div>${shortcut.title}</div>
162
- ${shortcut.bindings.map(binding => {
163
- return html`
164
- <div class="keys-container">
165
- ${this.#getKeysFromBinding(binding).map(key => html`
166
- <span class="keybinds-key">${key}</span>
167
- `)}
167
+ <div class="keybinds-list-title">${shortcut.title}</div>
168
+ <div class="shortcuts-for-actions">
169
+ ${shortcut.bindings.map(binding => {
170
+ return html`
171
+ <div class="keys-container">
172
+ ${this.#getKeysFromBinding(binding).map(key => html`
173
+ <span class="keybinds-key">${key}</span>
174
+ `)}
175
+ </div>
176
+ `;
177
+ })}
168
178
  </div>
169
- `;
170
- })}
171
179
  </li>`,
172
180
  )}
173
181
  </ul>
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Copyright 2024 The Chromium Authors. All rights reserved.
3
+ * Use of this source code is governed by a BSD-style license that can be
4
+ * found in the LICENSE file.
5
+ */
6
+
7
+ :host {
8
+ white-space: nowrap;
9
+ }
@@ -50,6 +50,21 @@ dialog:focus-visible {
50
50
  clip-path: polygon(var(--content-clip-path));
51
51
  }
52
52
 
53
+ .dialog-header {
54
+ display: flex;
55
+ justify-content: space-between;
56
+ align-items: center;
57
+ padding: var(--sys-size-5) var(--sys-size-5) var(--sys-size-5) var(--sys-size-8);
58
+ }
59
+
60
+ .dialog-header-text {
61
+ font: var(--sys-typescale-body2-medium);
62
+ }
63
+
64
+ .dialog-content {
65
+ padding: 0 var(--sys-size-8);
66
+ }
67
+
53
68
  @keyframes slideIn {
54
69
  from {
55
70
  transform: translateY(var(--dialog-offset-y));
@@ -2,11 +2,13 @@
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 ButtonDialog from './ButtonDialog.js';
5
6
  import * as Dialog from './Dialog.js';
6
7
  import * as IconDialog from './IconDialog.js';
7
8
  import * as ShortcutDialog from './ShortcutDialog.js';
8
9
 
9
10
  export {
11
+ ButtonDialog,
10
12
  Dialog,
11
13
  IconDialog,
12
14
  ShortcutDialog,
@@ -13,7 +13,7 @@
13
13
  display: flex;
14
14
  justify-content: space-between;
15
15
  align-items: center;
16
- padding: var(--sys-size-4) var(--sys-size-6) var(--sys-size-6) var(--sys-size-8);
16
+ padding: 0 var(--sys-size-6) var(--sys-size-5) var(--sys-size-8);
17
17
  }
18
18
 
19
19
  .keybinds-category-header-text {
@@ -24,16 +24,30 @@
24
24
  .keybinds-list {
25
25
  display: flex;
26
26
  flex-direction: column;
27
- gap: var(--sys-size-4);
28
27
  margin: 0;
29
- padding: 0 var(--sys-size-8);
28
+ padding: 0 var(--sys-size-8) var(--sys-size-3) var(--sys-size-8);
30
29
  }
31
30
 
32
31
  .keybinds-list-item {
33
- display: flex;
34
- align-items: center;
32
+ display: grid;
33
+ align-items: baseline;
35
34
  justify-content: space-between;
36
- gap: 30px;
35
+ grid-template-rows: 1fr;
36
+ grid-template-columns: 1fr var(--sys-size-11) 1fr;
37
+ border-bottom: var(--sys-size-1) solid var(--sys-color-divider);
38
+ padding: var(--sys-size-4) 0;
39
+
40
+ &:last-of-type {
41
+ border-bottom: unset;
42
+ }
43
+
44
+ .keybinds-list-title {
45
+ grid-row: 1/1;
46
+ }
47
+
48
+ .shortcuts-for-actions {
49
+ grid-area: auto / 3 / auto / span 1;
50
+ }
37
51
  }
38
52
 
39
53
  .keybinds-list-text {
@@ -50,6 +64,20 @@
50
64
  gap: var(--sys-size-3);
51
65
  }
52
66
 
67
+ .shortcuts-for-actions {
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: flex-end;
71
+ gap: var(--sys-size-3);
72
+ }
73
+
74
+ .nav-radio-buttons {
75
+ display: flex;
76
+ flex-direction: column;
77
+ padding: 0 var(--sys-size-8);
78
+ gap: var(--sys-size-3);
79
+ }
80
+
53
81
  .keybinds-key {
54
82
  display: flex;
55
83
  align-items: center;
@@ -0,0 +1,28 @@
1
+ <!--
2
+ Copyright 2024 The Chromium Authors. All rights reserved.
3
+ Use of this source code is governed by a BSD-style license that can be
4
+ found in the LICENSE file.
5
+ -->
6
+ <!DOCTYPE html>
7
+ <html>
8
+ <head>
9
+ <meta charset="UTF-8" />
10
+ <meta name="viewport" content="width=device-width" />
11
+ <title>Button dialog - basic example</title>
12
+ <style>
13
+ #container {
14
+ width: 800px;
15
+ height: 400px;
16
+ margin: 0 auto;
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ }
21
+ </style>
22
+ </head>
23
+
24
+ <body>
25
+ <div id="container"></div>
26
+ <script src="./button_dialog.js" type="module"></script>
27
+ </body>
28
+ </html>
@@ -0,0 +1,29 @@
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 * as FrontendHelpers from '../../../../testing/EnvironmentHelpers.js'; // eslint-disable-line rulesdir/es_modules_import
6
+ import * as Buttons from '../../buttons/buttons.js';
7
+ import * as Dialogs from '../../dialogs/dialogs.js';
8
+ import * as ComponentHelpers from '../../helpers/helpers.js';
9
+
10
+ await ComponentHelpers.ComponentServerSetup.setup();
11
+ await FrontendHelpers.initializeGlobalVars();
12
+
13
+ const buttonDialog = new Dialogs.ButtonDialog.ButtonDialog();
14
+ buttonDialog.data = {
15
+ openOnRender: false,
16
+ variant: Buttons.Button.Variant.TOOLBAR,
17
+ iconName: 'help',
18
+ position: Dialogs.Dialog.DialogVerticalPosition.AUTO,
19
+ horizontalAlignment: Dialogs.Dialog.DialogHorizontalAlignment.AUTO,
20
+ closeOnESC: true,
21
+ closeOnScroll: false,
22
+ closeButton: true,
23
+ dialogTitle: 'Button dialog example',
24
+ };
25
+ const div = document.createElement('div');
26
+ div.createChild('div').innerHTML = 'Hello, World';
27
+ div.createChild('div').innerHTML = 'This is a super long content. This is a super long content';
28
+ buttonDialog.appendChild(div);
29
+ document.getElementById('container')?.appendChild(buttonDialog);
@@ -94,7 +94,7 @@ UI.ActionRegistration.registerActionExtension({
94
94
 
95
95
  const actionRegistry = UI.ActionRegistry.ActionRegistry.instance();
96
96
  UI.ShortcutRegistry.ShortcutRegistry.instance({forceNew: true, actionRegistry});
97
- Common.Settings.settingForTest('flamechart-mouse-wheel-action').set('zoom');
97
+ Common.Settings.settingForTest('flamechart-selected-navigation').set('classic');
98
98
  const params = new URLSearchParams(window.location.search);
99
99
  const traceFileName = params.get('trace');
100
100
  const cpuprofileName = params.get('cpuprofile');
@@ -26,7 +26,8 @@ UI.ActionRegistration.registerActionExtension({
26
26
  },
27
27
  });
28
28
 
29
- const {parsedTrace: parsedTrace1} = await TraceLoader.TraceLoader.traceEngine(null, 'multiple-navigations.json.gz');
29
+ const {parsedTrace: parsedTrace1, metadata: metadata1} =
30
+ await TraceLoader.TraceLoader.traceEngine(null, 'multiple-navigations.json.gz');
30
31
  TraceLoader.TraceLoader.initTraceBoundsManager(parsedTrace1);
31
32
 
32
33
  new Timeline.TimelineHistoryManager.TimelineHistoryManager().addRecording({
@@ -36,10 +37,11 @@ new Timeline.TimelineHistoryManager.TimelineHistoryManager().addRecording({
36
37
  },
37
38
  filmStripForPreview: Trace.Extras.FilmStrip.fromParsedTrace(parsedTrace1),
38
39
  parsedTrace: parsedTrace1,
39
- startTime: null,
40
+ metadata: metadata1,
40
41
  });
41
42
 
42
- const {parsedTrace: parsedTrace2} = await TraceLoader.TraceLoader.traceEngine(null, 'web-dev.json.gz');
43
+ const {parsedTrace: parsedTrace2, metadata: metadata2} =
44
+ await TraceLoader.TraceLoader.traceEngine(null, 'web-dev.json.gz');
43
45
  TraceLoader.TraceLoader.initTraceBoundsManager(parsedTrace2);
44
46
  const container = document.querySelector('.container');
45
47
  if (!container) {
@@ -53,6 +55,6 @@ new Timeline.TimelineHistoryManager.TimelineHistoryManager().addRecording({
53
55
  },
54
56
  filmStripForPreview: Trace.Extras.FilmStrip.fromParsedTrace(parsedTrace2),
55
57
  parsedTrace: parsedTrace2,
56
- startTime: null,
58
+ metadata: metadata2,
57
59
  });
58
60
  await Timeline.TimelineHistoryManager.DropDown.show([0, 1], 1, container);
@@ -8,10 +8,11 @@ import * as LitHtml from '../../lit-html/lit-html.js';
8
8
 
9
9
  import floatingButtonStyles from './floatingButton.css.js';
10
10
 
11
- const {html} = LitHtml;
11
+ const {html, Directives: {ifDefined}} = LitHtml;
12
12
 
13
13
  interface FloatingButtonData {
14
14
  iconName: string;
15
+ title?: string;
15
16
  disabled?: boolean;
16
17
  }
17
18
 
@@ -36,7 +37,7 @@ export class FloatingButton extends HTMLElement {
36
37
  #render(): void {
37
38
  // Disabled until https://crbug.com/1079231 is fixed.
38
39
  // clang-format off
39
- LitHtml.render(html`<button class="floating-button" .disabled=${Boolean(this.#data.disabled)}><devtools-icon class="icon" name=${this.#data.iconName}></devtools-icon></button>`, this.#shadow, {host: this});
40
+ LitHtml.render(html`<button class="floating-button" title=${ifDefined(this.#data.title)} .disabled=${Boolean(this.#data.disabled)}><devtools-icon class="icon" name=${this.#data.iconName}></devtools-icon></button>`, this.#shadow, {host: this});
40
41
  // clang-format on
41
42
  }
42
43
  }
@@ -5,20 +5,24 @@
5
5
  */
6
6
 
7
7
  :host {
8
+ devtools-icon.document {
9
+ color: var(--override-file-source-icon-color, var(--icon-default));
10
+ }
11
+
8
12
  devtools-icon.script,
9
13
  devtools-icon.sm-script,
10
14
  devtools-icon.snippet {
11
- color: var(--icon-file-script);
15
+ color: var(--override-file-source-icon-color, var(--icon-file-script));
12
16
  }
13
17
 
14
18
  devtools-icon.stylesheet,
15
19
  devtools-icon.sm-stylesheet {
16
- color: var(--icon-file-styles);
20
+ color: var(--override-file-source-icon-color, var(--icon-file-styles));
17
21
  }
18
22
 
19
23
  devtools-icon.image,
20
24
  devtools-icon.font {
21
- color: var(--icon-file-image);
25
+ color: var(--override-file-source-icon-color, var(--icon-file-image));
22
26
  }
23
27
 
24
28
  devtools-icon.dot::before {
@@ -67,7 +67,20 @@ export interface IssueCounterData {
67
67
  compact?: boolean;
68
68
  }
69
69
 
70
- const listFormat = new Intl.ListFormat(navigator.language, {type: 'unit', style: 'short'});
70
+ // Lazily instantiate the formatter as the constructor takes 50ms+
71
+ // TODO: move me and others like me to i18n module
72
+ const listFormatter = (function defineFormatter() {
73
+ let intlListFormat: Intl.ListFormat;
74
+ return {
75
+ format(...args: Parameters<Intl.ListFormat['format']>): ReturnType<Intl.ListFormat['format']> {
76
+ if (!intlListFormat) {
77
+ const opts: Intl.ListFormatOptions = {type: 'unit', style: 'short'};
78
+ intlListFormat = new Intl.ListFormat(i18n.DevToolsLocale.DevToolsLocale.instance().locale, opts);
79
+ }
80
+ return intlListFormat.format(...args);
81
+ },
82
+ };
83
+ })();
71
84
 
72
85
  export function getIssueCountsEnumeration(
73
86
  issuesManager: IssuesManager.IssuesManager.IssuesManager, omitEmpty: boolean = true): string {
@@ -81,7 +94,7 @@ export function getIssueCountsEnumeration(
81
94
  i18nString(UIStrings.breakingChanges, {issueCount: counts[1]}),
82
95
  i18nString(UIStrings.possibleImprovements, {issueCount: counts[2]}),
83
96
  ];
84
- return listFormat.format(phrases.filter((_, i) => omitEmpty ? counts[i] > 0 : true));
97
+ return listFormatter.format(phrases.filter((_, i) => omitEmpty ? counts[i] > 0 : true));
85
98
  }
86
99
 
87
100
  export class IssueCounter extends HTMLElement {
@@ -47,7 +47,7 @@ legacyWrapper<T extends Constructor<UI.Widget.Widget>, Component extends Wrappab
47
47
  this.#component.willHide();
48
48
  }
49
49
 
50
- async doUpdate(): Promise<void> {
50
+ override async doUpdate(): Promise<void> {
51
51
  await this.#component.render();
52
52
  }
53
53
 
@@ -54,6 +54,21 @@ export class MarkdownView extends HTMLElement {
54
54
  this.#update();
55
55
  }
56
56
 
57
+ finishAnimations(): void {
58
+ const animatingElements = this.#shadow.querySelectorAll('.animating');
59
+ for (const element of animatingElements) {
60
+ element.classList.remove('animating');
61
+ }
62
+
63
+ const pendingElements = this.#shadow.querySelectorAll('.pending');
64
+ for (const element of pendingElements) {
65
+ element.classList.remove('pending');
66
+ }
67
+ this.#isAnimating = false;
68
+ this.#animationEnabled = false;
69
+ this.#renderer.setCustomClasses({});
70
+ }
71
+
57
72
  #animate(): void {
58
73
  if (this.#isAnimating) {
59
74
  return;
@@ -16,7 +16,7 @@
16
16
  .animating {
17
17
  overflow: hidden;
18
18
  white-space: nowrap;
19
- animation: typing 0.3s steps(40, end);
19
+ animation: typing 0.4s steps(40, end);
20
20
  }
21
21
 
22
22
  .pending {
@@ -133,10 +133,10 @@ export class RenderCoordinator extends EventTarget {
133
133
  if (!callback) {
134
134
  throw new Error('Read called with label but no callback');
135
135
  }
136
- return this.#enqueueHandler(callback, ACTION.READ, labelOrCallback);
136
+ return this.#enqueueHandler(ACTION.READ, labelOrCallback, callback) as Promise<T>;
137
137
  }
138
138
 
139
- return this.#enqueueHandler(labelOrCallback, ACTION.READ, UNNAMED_READ);
139
+ return this.#enqueueHandler(ACTION.READ, UNNAMED_READ, labelOrCallback) as Promise<T>;
140
140
  }
141
141
 
142
142
  // Schedules a 'write' job which is being executed within an animation frame
@@ -150,10 +150,14 @@ export class RenderCoordinator extends EventTarget {
150
150
  if (!callback) {
151
151
  throw new Error('Write called with label but no callback');
152
152
  }
153
- return this.#enqueueHandler(callback, ACTION.WRITE, labelOrCallback);
153
+ return this.#enqueueHandler(ACTION.WRITE, labelOrCallback, callback) as Promise<T>;
154
154
  }
155
155
 
156
- return this.#enqueueHandler(labelOrCallback, ACTION.WRITE, UNNAMED_WRITE);
156
+ return this.#enqueueHandler(ACTION.WRITE, UNNAMED_WRITE, labelOrCallback) as Promise<T>;
157
+ }
158
+
159
+ findPendingWrite(label: string): Promise<void>|undefined {
160
+ return this.#enqueueHandler(ACTION.WRITE, label);
157
161
  }
158
162
 
159
163
  takeRecords(): CoordinatorLogEntry[] {
@@ -177,13 +181,13 @@ export class RenderCoordinator extends EventTarget {
177
181
  if (!callback) {
178
182
  throw new Error('Scroll called with label but no callback');
179
183
  }
180
- return this.#enqueueHandler(callback, ACTION.READ, labelOrCallback);
184
+ return this.#enqueueHandler(ACTION.READ, labelOrCallback, callback) as Promise<T>;
181
185
  }
182
186
 
183
- return this.#enqueueHandler(labelOrCallback, ACTION.READ, UNNAMED_SCROLL);
187
+ return this.#enqueueHandler(ACTION.READ, UNNAMED_SCROLL, labelOrCallback) as Promise<T>;
184
188
  }
185
189
 
186
- #enqueueHandler<T>(callback: CoordinatorCallback<T>, action: ACTION, label: string): Promise<T> {
190
+ #enqueueHandler<T>(action: ACTION, label: string, callback?: CoordinatorCallback<T>): Promise<T>|undefined {
187
191
  const hasName = ![UNNAMED_READ, UNNAMED_WRITE, UNNAMED_SCROLL].includes(label);
188
192
  label = `${action === ACTION.READ ? '[Read]' : '[Write]'}: ${label}`;
189
193
 
@@ -202,18 +206,20 @@ export class RenderCoordinator extends EventTarget {
202
206
  }
203
207
 
204
208
  let workItem = hasName ? workItems.find(w => w.label === label) as WorkItem<T>| undefined : undefined;
205
- if (!workItem) {
206
- workItem = new WorkItem<T>(label, callback);
207
- workItems.push(workItem);
208
- } else {
209
- // We are always using the latest handler, so that we don't end up with a
210
- // stale results. We are reusing the promise to avoid blocking the first invocation, when
211
- // it is being "overridden" by another one.
212
- workItem.handler = callback;
213
- }
209
+ if (callback) {
210
+ if (!workItem) {
211
+ workItem = new WorkItem<T>(label, callback);
212
+ workItems.push(workItem);
213
+ } else {
214
+ // We are always using the latest handler, so that we don't end up with a
215
+ // stale results. We are reusing the promise to avoid blocking the first invocation, when
216
+ // it is being "overridden" by another one.
217
+ workItem.handler = callback;
218
+ }
214
219
 
215
- this.#scheduleWork();
216
- return workItem.promise;
220
+ this.#scheduleWork();
221
+ }
222
+ return workItem?.promise;
217
223
  }
218
224
 
219
225
  #scheduleWork(): void {
@@ -65,12 +65,12 @@ export class Switch extends HTMLElement {
65
65
  /* eslint-disable rulesdir/inject_checkbox_styles */
66
66
  // clang-format off
67
67
  LitHtml.render(html`
68
- <label role="button">
68
+ <label role="button" jslog=${jslog || LitHtml.nothing}>
69
69
  <input type="checkbox"
70
70
  @change=${this.#handleChange}
71
71
  ?disabled=${this.#disabled}
72
72
  .checked=${this.#checked}
73
- jslog=${jslog || LitHtml.nothing}>
73
+ >
74
74
  <span class="slider" @click=${(ev: Event) => ev.stopPropagation()}></span>
75
75
  </label>
76
76
  `, this.#shadow, {host: this});