chrome-devtools-frontend 1.0.1376716 → 1.0.1380117

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 (434) hide show
  1. package/config/gni/devtools_grd_files.gni +15 -7
  2. package/config/gni/devtools_image_files.gni +2 -0
  3. package/front_end/Images/src/animation.svg +3 -0
  4. package/front_end/Images/src/brush-2.svg +3 -0
  5. package/front_end/core/common/SettingRegistration.ts +1 -1
  6. package/front_end/core/host/AidaClient.ts +1 -0
  7. package/front_end/core/host/InspectorFrontendHost.ts +4 -0
  8. package/front_end/core/i18n/ByteUtilities.test.ts +34 -0
  9. package/front_end/core/i18n/ByteUtilities.ts +65 -0
  10. package/front_end/core/i18n/NumberFormatter.ts +75 -0
  11. package/front_end/core/i18n/i18n.ts +4 -0
  12. package/front_end/core/i18n/time-utilities.test.ts +20 -2
  13. package/front_end/core/i18n/time-utilities.ts +125 -86
  14. package/front_end/core/platform/NumberUtilities.test.ts +3 -26
  15. package/front_end/core/platform/NumberUtilities.ts +0 -20
  16. package/front_end/core/root/Runtime.ts +6 -3
  17. package/front_end/core/sdk/CPUThrottlingManager.ts +4 -0
  18. package/front_end/core/sdk/CSSContainerQuery.test.ts +10 -16
  19. package/front_end/core/sdk/CSSContainerQuery.ts +3 -15
  20. package/front_end/core/sdk/CSSMatchedStyles.test.ts +4 -0
  21. package/front_end/core/sdk/CSSMatchedStyles.ts +5 -5
  22. package/front_end/core/sdk/CSSModel.ts +18 -0
  23. package/front_end/core/sdk/CSSPropertyParser.test.ts +16 -1
  24. package/front_end/core/sdk/CSSPropertyParser.ts +2 -2
  25. package/front_end/core/sdk/sdk-meta.ts +8 -0
  26. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +3 -3
  27. package/front_end/generated/ARIAProperties.js +4 -0
  28. package/front_end/generated/InspectorBackendCommands.js +8 -6
  29. package/front_end/generated/SupportedCSSProperties.js +17 -4
  30. package/front_end/generated/protocol-mapping.d.ts +15 -1
  31. package/front_end/generated/protocol-proxy-api.d.ts +14 -1
  32. package/front_end/generated/protocol.ts +26 -2
  33. package/front_end/models/extensions/ExtensionAPI.ts +9 -1
  34. package/front_end/models/heap_snapshot_model/HeapSnapshotModel.ts +2 -0
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +8 -21
  36. package/front_end/models/live-metrics/web-vitals-injected/{rollup.config.js → rollup.config.mjs} +1 -1
  37. package/front_end/models/persistence/EditFileSystemView.ts +19 -9
  38. package/front_end/models/persistence/WorkspaceSettingsTab.ts +50 -54
  39. package/front_end/models/persistence/editFileSystemView.css +35 -15
  40. package/front_end/models/persistence/workspaceSettingsTab.css +21 -87
  41. package/front_end/models/timeline_model/timeline_model.ts +0 -6
  42. package/front_end/models/trace/Processor.test.ts +18 -17
  43. package/front_end/models/trace/Processor.ts +10 -14
  44. package/front_end/models/trace/README.md +0 -1
  45. package/front_end/models/{timeline_model → trace/extras}/TimelineJSProfile.ts +19 -29
  46. package/front_end/models/{timeline_model/TimelineModelFilter.test.ts → trace/extras/TraceFilter.test.ts} +15 -17
  47. package/front_end/models/trace/extras/TraceFilter.ts +62 -0
  48. package/front_end/models/{timeline_model/TimelineProfileTree.test.ts → trace/extras/TraceTree.test.ts} +44 -43
  49. package/front_end/models/{timeline_model/TimelineProfileTree.ts → trace/extras/TraceTree.ts} +65 -59
  50. package/front_end/models/trace/extras/extras.ts +3 -0
  51. package/front_end/models/trace/handlers/AnimationHandler.ts +0 -8
  52. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -11
  53. package/front_end/models/trace/handlers/FramesHandler.test.ts +1 -6
  54. package/front_end/models/trace/handlers/FramesHandler.ts +1 -14
  55. package/front_end/models/trace/handlers/GPUHandler.test.ts +0 -2
  56. package/front_end/models/trace/handlers/GPUHandler.ts +1 -25
  57. package/front_end/models/trace/handlers/ImagePaintingHandler.ts +3 -0
  58. package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +0 -1
  59. package/front_end/models/trace/handlers/InitiatorsHandler.ts +0 -20
  60. package/front_end/models/trace/handlers/InvalidationsHandler.test.ts +0 -1
  61. package/front_end/models/trace/handlers/InvalidationsHandler.ts +0 -18
  62. package/front_end/models/trace/handlers/LargestImagePaintHandler.test.ts +2 -2
  63. package/front_end/models/trace/handlers/LargestImagePaintHandler.ts +63 -3
  64. package/front_end/models/trace/handlers/LargestTextPaintHandler.ts +3 -0
  65. package/front_end/models/trace/handlers/LayerTreeHandler.test.ts +0 -2
  66. package/front_end/models/trace/handlers/LayerTreeHandler.ts +1 -18
  67. package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +0 -3
  68. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -20
  69. package/front_end/models/trace/handlers/MemoryHandler.test.ts +0 -1
  70. package/front_end/models/trace/handlers/MemoryHandler.ts +3 -0
  71. package/front_end/models/trace/handlers/MetaHandler.test.ts +1 -32
  72. package/front_end/models/trace/handlers/MetaHandler.ts +2 -30
  73. package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +0 -26
  74. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +4 -23
  75. package/front_end/models/trace/handlers/PageFramesHandler.ts +3 -0
  76. package/front_end/models/trace/handlers/RendererHandler.test.ts +0 -4
  77. package/front_end/models/trace/handlers/RendererHandler.ts +1 -24
  78. package/front_end/models/trace/handlers/SamplesHandler.test.ts +0 -5
  79. package/front_end/models/trace/handlers/SamplesHandler.ts +0 -26
  80. package/front_end/models/trace/handlers/ScreenshotsHandler.test.ts +0 -1
  81. package/front_end/models/trace/handlers/SelectorStatsHandler.ts +3 -0
  82. package/front_end/models/trace/handlers/ServerTimingsHandler.ts +1 -16
  83. package/front_end/models/trace/handlers/Threads.test.ts +1 -2
  84. package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -27
  85. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +16 -25
  86. package/front_end/models/trace/handlers/UserTimingsHandler.ts +0 -17
  87. package/front_end/models/trace/handlers/WorkersHandler.test.ts +0 -1
  88. package/front_end/models/trace/handlers/WorkersHandler.ts +0 -23
  89. package/front_end/models/trace/handlers/types.ts +1 -8
  90. package/front_end/models/trace/insights/{CumulativeLayoutShift.test.ts → CLSCulprits.test.ts} +21 -21
  91. package/front_end/models/trace/insights/{CumulativeLayoutShift.ts → CLSCulprits.ts} +24 -5
  92. package/front_end/models/trace/insights/Common.ts +5 -55
  93. package/front_end/models/trace/insights/DocumentLatency.test.ts +2 -2
  94. package/front_end/models/trace/insights/DocumentLatency.ts +26 -6
  95. package/front_end/models/trace/insights/FontDisplay.ts +24 -5
  96. package/front_end/models/trace/insights/InteractionToNextPaint.test.ts +1 -1
  97. package/front_end/models/trace/insights/InteractionToNextPaint.ts +26 -6
  98. package/front_end/models/trace/insights/LCPDiscovery.test.ts +58 -0
  99. package/front_end/models/trace/insights/LCPDiscovery.ts +101 -0
  100. package/front_end/models/trace/insights/{LargestContentfulPaint.test.ts → LCPPhases.test.ts} +6 -28
  101. package/front_end/models/trace/insights/{LargestContentfulPaint.ts → LCPPhases.ts} +37 -38
  102. package/front_end/models/trace/insights/{InsightRunners.ts → Models.ts} +4 -3
  103. package/front_end/models/trace/insights/RenderBlocking.test.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +33 -28
  105. package/front_end/models/trace/insights/SlowCSSSelector.ts +26 -5
  106. package/front_end/models/trace/insights/{ThirdPartyWeb.test.ts → ThirdParties.test.ts} +3 -3
  107. package/front_end/models/trace/insights/{ThirdPartyWeb.ts → ThirdParties.ts} +24 -5
  108. package/front_end/models/trace/insights/Viewport.test.ts +1 -1
  109. package/front_end/models/trace/insights/Viewport.ts +27 -9
  110. package/front_end/models/trace/insights/insights.ts +1 -1
  111. package/front_end/models/trace/insights/types.ts +11 -9
  112. package/front_end/models/trace/types/TraceEvents.ts +51 -22
  113. package/front_end/panels/application/SharedStorageItemsView.test.ts +3 -3
  114. package/front_end/panels/application/SharedStorageItemsView.ts +5 -3
  115. package/front_end/panels/application/StorageView.ts +3 -3
  116. package/front_end/panels/application/components/StorageMetadataView.ts +1 -2
  117. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +34 -31
  118. package/front_end/panels/coverage/CoverageView.ts +3 -3
  119. package/front_end/panels/elements/ComputedStyleModel.ts +9 -2
  120. package/front_end/panels/elements/ComputedStyleWidget.test.ts +72 -0
  121. package/front_end/panels/elements/ComputedStyleWidget.ts +12 -0
  122. package/front_end/panels/elements/ElementStatePaneWidget.test.ts +84 -30
  123. package/front_end/panels/elements/ElementStatePaneWidget.ts +42 -24
  124. package/front_end/panels/elements/ElementsTreeElement.ts +24 -11
  125. package/front_end/panels/elements/MetricsSidebarPane.ts +12 -7
  126. package/front_end/panels/elements/PropertyMatchers.ts +3 -0
  127. package/front_end/panels/elements/StylePropertiesSection.ts +15 -6
  128. package/front_end/panels/elements/StylePropertyTreeElement.test.ts +3 -1
  129. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -3
  130. package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
  131. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -18
  132. package/front_end/panels/freestyler/AiAgent.test.ts +58 -1
  133. package/front_end/panels/freestyler/AiAgent.ts +58 -3
  134. package/front_end/panels/freestyler/DrJonesFileAgent.test.ts +99 -23
  135. package/front_end/panels/freestyler/DrJonesFileAgent.ts +53 -20
  136. package/front_end/panels/freestyler/DrJonesNetworkAgent.test.ts +15 -7
  137. package/front_end/panels/freestyler/DrJonesNetworkAgent.ts +36 -15
  138. package/front_end/panels/freestyler/DrJonesPerformanceAgent.test.ts +6 -6
  139. package/front_end/panels/freestyler/DrJonesPerformanceAgent.ts +48 -8
  140. package/front_end/panels/freestyler/FreestylerAgent.test.ts +15 -14
  141. package/front_end/panels/freestyler/FreestylerAgent.ts +52 -8
  142. package/front_end/panels/freestyler/FreestylerPanel.test.ts +539 -39
  143. package/front_end/panels/freestyler/FreestylerPanel.ts +349 -215
  144. package/front_end/panels/freestyler/components/FreestylerChatUi.test.ts +126 -34
  145. package/front_end/panels/freestyler/components/FreestylerChatUi.ts +320 -268
  146. package/front_end/panels/freestyler/components/UserActionRow.ts +156 -47
  147. package/front_end/panels/freestyler/components/freestylerChatUi.css +69 -34
  148. package/front_end/panels/freestyler/components/userActionRow.css +40 -67
  149. package/front_end/panels/freestyler/freestyler-meta.ts +3 -11
  150. package/front_end/panels/issues/components/HideIssuesMenu.ts +2 -11
  151. package/front_end/panels/layer_viewer/LayerDetailsView.ts +1 -2
  152. package/front_end/panels/layer_viewer/PaintProfilerView.ts +5 -5
  153. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +46 -0
  154. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +26 -17
  155. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +25 -19
  156. package/front_end/panels/network/BinaryResourceView.ts +6 -7
  157. package/front_end/panels/network/EventSourceMessagesView.ts +1 -1
  158. package/front_end/panels/network/NetworkDataGridNode.ts +3 -3
  159. package/front_end/panels/network/NetworkLogView.ts +7 -8
  160. package/front_end/panels/network/RequestTimingView.test.ts +35 -1
  161. package/front_end/panels/network/RequestTimingView.ts +96 -0
  162. package/front_end/panels/network/ResourceWebSocketFrameView.ts +2 -2
  163. package/front_end/panels/network/networkTimingTable.css +2 -1
  164. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  165. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  166. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  167. package/front_end/panels/profiler/HeapTimelineOverview.ts +12 -12
  168. package/front_end/panels/profiler/IsolateSelector.ts +3 -4
  169. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +1 -1
  170. package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +7 -6
  171. package/front_end/panels/profiler/ProfileView.ts +1 -1
  172. package/front_end/panels/recorder/components/RecordingView.ts +2 -2
  173. package/front_end/panels/recorder/injected/{rollup.config.js → rollup.config.mjs} +1 -1
  174. package/front_end/panels/recorder/recorderController.css +0 -4
  175. package/front_end/panels/security/CookieReportTreeElement.ts +1 -9
  176. package/front_end/panels/security/CookieReportView.ts +120 -0
  177. package/front_end/panels/security/SecurityPanel.ts +8 -2
  178. package/front_end/panels/security/cookieReportView.css +46 -0
  179. package/front_end/panels/security/sidebar.css +1 -2
  180. package/front_end/panels/sensors/LocationsSettingsTab.ts +26 -11
  181. package/front_end/panels/sensors/locationsSettingsTab.css +18 -18
  182. package/front_end/panels/settings/AISettingsTab.ts +6 -15
  183. package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
  184. package/front_end/panels/settings/SettingsScreen.ts +61 -56
  185. package/front_end/panels/settings/aiSettingsTab.css +3 -14
  186. package/front_end/panels/settings/components/SyncSection.ts +1 -2
  187. package/front_end/panels/settings/components/syncSection.css +0 -10
  188. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +3 -1
  189. package/front_end/panels/settings/keybindsSettingsTab.css +7 -10
  190. package/front_end/panels/settings/settingsScreen.css +27 -125
  191. package/front_end/panels/sources/DebuggerPlugin.ts +9 -4
  192. package/front_end/panels/sources/NavigatorView.ts +11 -13
  193. package/front_end/panels/timeline/ActiveFilters.ts +3 -4
  194. package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -2
  195. package/front_end/panels/timeline/CountersGraph.ts +2 -4
  196. package/front_end/panels/timeline/EventsTimelineTreeView.ts +7 -8
  197. package/front_end/panels/timeline/README.md +2 -1
  198. package/front_end/panels/timeline/TimelineController.ts +14 -4
  199. package/front_end/panels/timeline/TimelineEventOverview.ts +3 -4
  200. package/front_end/panels/timeline/TimelineFilters.ts +3 -4
  201. package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +1 -1
  202. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -10
  203. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +1 -2
  204. package/front_end/panels/timeline/TimelineFlameChartView.ts +21 -12
  205. package/front_end/panels/timeline/TimelineLoader.test.ts +1 -2
  206. package/front_end/panels/timeline/TimelineLoader.ts +3 -4
  207. package/front_end/panels/timeline/TimelineMiniMap.ts +10 -0
  208. package/front_end/panels/timeline/TimelinePanel.ts +20 -8
  209. package/front_end/panels/timeline/TimelineTreeView.test.ts +12 -13
  210. package/front_end/panels/timeline/TimelineTreeView.ts +35 -40
  211. package/front_end/panels/timeline/TimelineUIUtils.test.ts +2 -2
  212. package/front_end/panels/timeline/TimelineUIUtils.ts +12 -14
  213. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +6 -7
  214. package/front_end/panels/timeline/components/LiveMetricsView.test.ts +3 -3
  215. package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -26
  216. package/front_end/panels/timeline/components/MetricCard.test.ts +1 -1
  217. package/front_end/panels/timeline/components/MetricCard.ts +46 -0
  218. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +3 -4
  219. package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +2 -0
  220. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +41 -36
  221. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +19 -33
  222. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +29 -40
  223. package/front_end/panels/timeline/components/insights/FontDisplay.ts +17 -23
  224. package/front_end/panels/timeline/components/insights/Helpers.ts +12 -16
  225. package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +14 -26
  226. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +25 -37
  227. package/front_end/panels/timeline/components/insights/LCPPhases.ts +20 -47
  228. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +19 -28
  229. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
  230. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +18 -31
  231. package/front_end/panels/timeline/components/insights/Table.ts +5 -3
  232. package/front_end/panels/timeline/components/insights/ThirdParties.ts +18 -25
  233. package/front_end/panels/timeline/components/insights/Viewport.ts +14 -25
  234. package/front_end/panels/timeline/components/liveMetricsView.css +5 -13
  235. package/front_end/panels/timeline/components/metricCard.css +11 -0
  236. package/front_end/panels/timeline/components/sidebarInsightsTab.css +1 -1
  237. package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +5 -5
  238. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +13 -12
  239. package/front_end/panels/timeline/timelineFlameChartView.css +1 -1
  240. package/front_end/panels/timeline/utils/AICallTree.test.ts +105 -0
  241. package/front_end/panels/timeline/utils/AICallTree.ts +25 -24
  242. package/front_end/testing/EnvironmentHelpers.ts +5 -18
  243. package/front_end/testing/InsightHelpers.ts +4 -4
  244. package/front_end/testing/TraceHelpers.ts +1 -1
  245. package/front_end/third_party/puppeteer/README.chromium +2 -2
  246. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +2 -3
  247. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts +14 -3
  250. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js +16 -2
  252. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts +34 -5
  254. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js +51 -2
  256. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Input.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js +10 -8
  259. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/ElementHandle.js.map +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts +14 -4
  264. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +57 -23
  266. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js +13 -10
  270. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ElementHandle.js.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts +15 -4
  272. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.d.ts.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js +55 -26
  274. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Input.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts +0 -8
  276. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js +2 -11
  278. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/CallbackRegistry.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +2 -1
  280. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js +5 -2
  282. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConsoleMessage.js.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +7 -0
  284. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
  286. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -1
  288. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +5 -3
  289. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +0 -3
  293. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  296. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  298. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  300. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  301. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  303. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts +14 -0
  304. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  305. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js +18 -0
  306. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/incremental-id-generator.js.map +1 -0
  307. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +51 -10
  308. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +215 -97
  309. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +2 -3
  310. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  311. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  312. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts +14 -3
  313. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  314. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js +16 -2
  315. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  316. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +34 -5
  317. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  318. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js +51 -2
  319. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.js.map +1 -1
  320. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.d.ts.map +1 -1
  321. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js +10 -8
  322. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/ElementHandle.js.map +1 -1
  323. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  324. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  325. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  326. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts +14 -4
  327. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  328. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +57 -23
  329. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  330. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts +1 -1
  331. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.d.ts.map +1 -1
  332. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js +13 -10
  333. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ElementHandle.js.map +1 -1
  334. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts +15 -4
  335. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.d.ts.map +1 -1
  336. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js +55 -26
  337. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Input.js.map +1 -1
  338. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts +0 -8
  339. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.d.ts.map +1 -1
  340. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js +1 -9
  341. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/CallbackRegistry.js.map +1 -1
  342. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +2 -1
  343. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -1
  344. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +5 -2
  345. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js.map +1 -1
  346. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +7 -0
  347. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  348. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
  349. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
  350. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -1
  351. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +5 -3
  352. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -1
  353. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +1 -1
  354. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
  355. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +0 -3
  356. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
  357. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  358. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  359. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  360. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  361. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  362. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  363. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  364. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts +14 -0
  365. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.d.ts.map +1 -0
  366. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js +15 -0
  367. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/incremental-id-generator.js.map +1 -0
  368. package/front_end/third_party/puppeteer/package/lib/types.d.ts +51 -10
  369. package/front_end/third_party/puppeteer/package/package.json +4 -4
  370. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +2 -3
  371. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +21 -3
  372. package/front_end/third_party/puppeteer/package/src/api/Input.ts +57 -8
  373. package/front_end/third_party/puppeteer/package/src/bidi/ElementHandle.ts +9 -7
  374. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +1 -0
  375. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +72 -31
  376. package/front_end/third_party/puppeteer/package/src/cdp/ElementHandle.ts +14 -9
  377. package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +71 -26
  378. package/front_end/third_party/puppeteer/package/src/common/CallbackRegistry.ts +1 -15
  379. package/front_end/third_party/puppeteer/package/src/common/ConsoleMessage.ts +8 -1
  380. package/front_end/third_party/puppeteer/package/src/common/Errors.ts +7 -0
  381. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +9 -9
  382. package/front_end/third_party/puppeteer/package/src/environment.ts +1 -4
  383. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  384. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  385. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  386. package/front_end/third_party/puppeteer/package/src/util/incremental-id-generator.ts +20 -0
  387. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +1 -0
  388. package/front_end/ui/components/buttons/Button.test.ts +14 -0
  389. package/front_end/ui/components/buttons/Button.ts +27 -4
  390. package/front_end/ui/components/cards/card.css +7 -4
  391. package/front_end/ui/components/dialogs/Dialog.ts +2 -4
  392. package/front_end/ui/components/dialogs/ShortcutDialog.ts +15 -13
  393. package/front_end/ui/components/dialogs/dialog.css +2 -6
  394. package/front_end/ui/components/dialogs/shortcutDialog.css +33 -41
  395. package/front_end/ui/components/docs/freestyler/basic.ts +6 -8
  396. package/front_end/ui/components/docs/freestyler/empty_state.ts +6 -8
  397. package/front_end/ui/components/docs/performance_panel/track_example.html +1 -1
  398. package/front_end/ui/components/markdown_view/MarkdownView.test.ts +39 -17
  399. package/front_end/ui/components/markdown_view/MarkdownView.ts +77 -14
  400. package/front_end/ui/components/markdown_view/markdownView.css +15 -0
  401. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -2
  402. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  403. package/front_end/ui/legacy/InplaceEditor.ts +18 -14
  404. package/front_end/ui/legacy/TabbedPane.ts +0 -14
  405. package/front_end/ui/legacy/UIUtils.ts +0 -7
  406. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +7 -2
  407. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  408. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +20 -11
  409. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.test.ts +19 -0
  410. package/front_end/ui/legacy/components/inline_editor/LinkSwatch.ts +1 -1
  411. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +1 -1
  412. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +5 -22
  413. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +129 -100
  414. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +4 -2
  415. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.test.ts +9 -4
  416. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewCalculator.ts +6 -6
  417. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +22 -4
  418. package/front_end/ui/legacy/components/perf_ui/flameChart.css +0 -2
  419. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.test.ts +49 -0
  420. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +23 -46
  421. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  422. package/front_end/ui/legacy/components/utils/ImagePreview.ts +1 -1
  423. package/front_end/ui/legacy/textPrompt.css +1 -1
  424. package/front_end/ui/legacy/toolbar.css +4 -5
  425. package/front_end/ui/visual_logging/KnownContextValues.ts +174 -0
  426. package/front_end/ui/visual_logging/LoggingConfig.ts +6 -2
  427. package/package.json +7 -6
  428. package/scripts/build/ninja/bundle.gni +3 -3
  429. package/scripts/build/{rollup.config.js → rollup.config.mjs} +4 -4
  430. package/scripts/devtools_paths.py +8 -4
  431. package/scripts/eslint_rules/tests/check_test_definitions_test.js +8 -3
  432. package/scripts/tools/update_goldens_v2.py +1 -1
  433. package/front_end/models/timeline_model/TimelineModelFilter.ts +0 -61
  434. /package/front_end/Images/{rollup.config.js → rollup.config.mjs} +0 -0
@@ -18,6 +18,7 @@ const render = LitHtml.render;
18
18
  export interface MarkdownViewData {
19
19
  tokens: Marked.Marked.Token[];
20
20
  renderer?: MarkdownLitRenderer;
21
+ animationEnabled?: boolean;
21
22
  }
22
23
 
23
24
  export class MarkdownView extends HTMLElement {
@@ -25,6 +26,8 @@ export class MarkdownView extends HTMLElement {
25
26
 
26
27
  #tokenData: readonly Marked.Marked.Token[] = [];
27
28
  #renderer = new MarkdownLitRenderer();
29
+ #animationEnabled = false;
30
+ #isAnimating = false;
28
31
 
29
32
  connectedCallback(): void {
30
33
  this.#shadow.adoptedStyleSheets = [markdownViewStyles];
@@ -35,11 +38,53 @@ export class MarkdownView extends HTMLElement {
35
38
  if (data.renderer) {
36
39
  this.#renderer = data.renderer;
37
40
  }
41
+
42
+ if (data.animationEnabled) {
43
+ this.#animationEnabled = true;
44
+ this.#renderer.setCustomClasses({
45
+ paragraph: 'pending',
46
+ heading: 'pending',
47
+ list_item: 'pending',
48
+ });
49
+ } else {
50
+ this.#animationEnabled = false;
51
+ this.#renderer.setCustomClasses({});
52
+ }
53
+
38
54
  this.#update();
39
55
  }
40
56
 
57
+ #animate(): void {
58
+ if (this.#isAnimating) {
59
+ return;
60
+ }
61
+
62
+ this.#isAnimating = true;
63
+ const reveal = (): void => {
64
+ const pendingElement = this.#shadow.querySelector('.pending');
65
+ if (!pendingElement) {
66
+ this.#isAnimating = false;
67
+ return;
68
+ }
69
+
70
+ pendingElement.addEventListener('animationend', () => {
71
+ pendingElement.classList.remove('animating');
72
+ reveal();
73
+ }, {once: true});
74
+
75
+ pendingElement.classList.remove('pending');
76
+ pendingElement.classList.add('animating');
77
+ };
78
+
79
+ reveal();
80
+ }
81
+
41
82
  #update(): void {
42
83
  this.#render();
84
+
85
+ if (this.#animationEnabled) {
86
+ this.#animate();
87
+ }
43
88
  }
44
89
 
45
90
  #render(): void {
@@ -66,6 +111,18 @@ declare global {
66
111
  * Default renderer is used for the IssuesPanel and allows only well-known images and links to be embedded.
67
112
  */
68
113
  export class MarkdownLitRenderer {
114
+ #customClasses: Record<string, string> = {};
115
+
116
+ setCustomClasses(customClasses: Record<Marked.Marked.Token['type'], string>): void {
117
+ this.#customClasses = customClasses;
118
+ }
119
+
120
+ #customClassMapForToken(type: Marked.Marked.Token['type']): LitHtml.Directive.DirectiveResult {
121
+ return LitHtml.Directives.classMap({
122
+ [this.#customClasses[type]]: this.#customClasses[type],
123
+ });
124
+ }
125
+
69
126
  renderChildTokens(token: Marked.Marked.Token): LitHtml.TemplateResult[] {
70
127
  if ('tokens' in token && token.tokens) {
71
128
  return token.tokens.map(token => this.renderToken(token));
@@ -102,25 +159,27 @@ export class MarkdownLitRenderer {
102
159
  }
103
160
 
104
161
  renderHeading(heading: Marked.Marked.Tokens.Heading): LitHtml.TemplateResult {
162
+ const customClass = this.#customClassMapForToken('heading');
105
163
  switch (heading.depth) {
106
164
  case 1:
107
- return html`<h1>${this.renderText(heading)}</h1>`;
165
+ return html`<h1 class=${customClass}>${this.renderText(heading)}</h1>`;
108
166
  case 2:
109
- return html`<h2>${this.renderText(heading)}</h2>`;
167
+ return html`<h2 class=${customClass}>${this.renderText(heading)}</h2>`;
110
168
  case 3:
111
- return html`<h3>${this.renderText(heading)}</h3>`;
169
+ return html`<h3 class=${customClass}>${this.renderText(heading)}</h3>`;
112
170
  case 4:
113
- return html`<h4>${this.renderText(heading)}</h4>`;
171
+ return html`<h4 class=${customClass}>${this.renderText(heading)}</h4>`;
114
172
  case 5:
115
- return html`<h5>${this.renderText(heading)}</h5>`;
173
+ return html`<h5 class=${customClass}>${this.renderText(heading)}</h5>`;
116
174
  default:
117
- return html`<h6>${this.renderText(heading)}</h6>`;
175
+ return html`<h6 class=${customClass}>${this.renderText(heading)}</h6>`;
118
176
  }
119
177
  }
120
178
 
121
179
  renderCodeBlock(token: Marked.Marked.Tokens.Code): LitHtml.TemplateResult {
122
180
  // clang-format off
123
181
  return html`<devtools-code-block
182
+ class=${this.#customClassMapForToken('code')}
124
183
  .code=${this.unescape(token.text)}
125
184
  .codeLang=${token.lang || ''}>
126
185
  </devtools-code-block>`;
@@ -130,29 +189,33 @@ export class MarkdownLitRenderer {
130
189
  templateForToken(token: Marked.Marked.MarkedToken): LitHtml.TemplateResult|null {
131
190
  switch (token.type) {
132
191
  case 'paragraph':
133
- return html`<p>${this.renderChildTokens(token)}</p>`;
192
+ return html`<p class=${this.#customClassMapForToken('paragraph')}>${this.renderChildTokens(token)}</p>`;
134
193
  case 'list':
135
- return html`<ul>${token.items.map(token => {
194
+ return html`<ul class=${this.#customClassMapForToken('list')}>${token.items.map(token => {
136
195
  return this.renderToken(token);
137
196
  })}</ul>`;
138
197
  case 'list_item':
139
- return html`<li>${this.renderChildTokens(token)}</li>`;
198
+ return html`<li class=${this.#customClassMapForToken('list_item')}>${this.renderChildTokens(token)}</li>`;
140
199
  case 'text':
141
200
  return this.renderText(token);
142
201
  case 'codespan':
143
- return html`<code>${this.unescape(token.text)}</code>`;
202
+ return html`<code class=${this.#customClassMapForToken('codespan')}>${this.unescape(token.text)}</code>`;
144
203
  case 'code':
145
204
  return this.renderCodeBlock(token);
146
205
  case 'space':
147
206
  return html``;
148
207
  case 'link':
149
- return html`<devtools-markdown-link .data=${{
208
+ return html`<devtools-markdown-link
209
+ class=${this.#customClassMapForToken('link')}
210
+ .data=${{
150
211
  key:
151
212
  token.href, title: token.text,
152
213
  }
153
214
  }></devtools-markdown-link>`;
154
215
  case 'image':
155
- return html`<devtools-markdown-image .data=${{
216
+ return html`<devtools-markdown-image
217
+ class=${this.#customClassMapForToken('image')}
218
+ .data=${{
156
219
  key:
157
220
  token.href, title: token.text,
158
221
  }
@@ -160,9 +223,9 @@ export class MarkdownLitRenderer {
160
223
  case 'heading':
161
224
  return this.renderHeading(token);
162
225
  case 'strong':
163
- return html`<strong>${this.renderText(token)}</strong>`;
226
+ return html`<strong class=${this.#customClassMapForToken('strong')}>${this.renderText(token)}</strong>`;
164
227
  case 'em':
165
- return html`<em>${this.renderText(token)}</em>`;
228
+ return html`<em class=${this.#customClassMapForToken('em')}>${this.renderText(token)}</em>`;
166
229
  default:
167
230
  return null;
168
231
  }
@@ -8,6 +8,21 @@
8
8
  --code-background-color: var(--sys-color-surface4);
9
9
  }
10
10
 
11
+ @keyframes typing {
12
+ from { width: 0; }
13
+ to { width: 100%; }
14
+ }
15
+
16
+ .animating {
17
+ overflow: hidden;
18
+ white-space: nowrap;
19
+ animation: typing 0.3s steps(40, end);
20
+ }
21
+
22
+ .pending {
23
+ display: none !important; /* stylelint-disable-line declaration-no-important */
24
+ }
25
+
11
26
  .message {
12
27
  line-height: 18px;
13
28
  font-size: 12px;
@@ -69,7 +69,8 @@ export class SettingCheckbox extends HTMLElement {
69
69
  }
70
70
 
71
71
  const learnMore = this.#setting.learnMore();
72
- if (learnMore) {
72
+ if (learnMore && learnMore.url) {
73
+ const url = learnMore.url;
73
74
  const data: Buttons.Button.ButtonData = {
74
75
  iconName: 'help',
75
76
  variant: Buttons.Button.Variant.ICON,
@@ -78,7 +79,7 @@ export class SettingCheckbox extends HTMLElement {
78
79
  title: i18nString(UIStrings.learnMore),
79
80
  };
80
81
  const handleClick = (event: MouseEvent): void => {
81
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(learnMore.url);
82
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(url);
82
83
  event.consume();
83
84
  };
84
85
  return html`<devtools-button
@@ -553,11 +553,11 @@ export class ContextMenu extends SubMenu {
553
553
  }
554
554
 
555
555
  private innerShow(): void {
556
- const menuObject = this.buildMenuDescriptors();
557
-
558
556
  if (!this.eventTarget) {
559
557
  return;
560
558
  }
559
+
560
+ const menuObject = this.buildMenuDescriptors();
561
561
  const ownerDocument = (this.eventTarget as HTMLElement).ownerDocument;
562
562
  if (this.useSoftMenu || ContextMenu.useSoftMenu ||
563
563
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.isHostedMode()) {
@@ -12,7 +12,7 @@ let inplaceEditorInstance: InplaceEditor<unknown>|null = null;
12
12
 
13
13
  export class InplaceEditor<T> {
14
14
  private focusRestorer?: ElementFocusRestorer;
15
- static startEditing<T>(element: Element, config?: Config<T>): Controller|null {
15
+ static startEditing<T>(element: Element, config: Config<T>): Controller|null {
16
16
  if (!inplaceEditorInstance) {
17
17
  inplaceEditorInstance = new InplaceEditor();
18
18
  }
@@ -76,12 +76,11 @@ export class InplaceEditor<T> {
76
76
  }
77
77
  }
78
78
 
79
- startEditing(element: Element, inputConfig?: Config<T>): Controller|null {
79
+ startEditing(element: Element, config: Config<T>): Controller|null {
80
80
  if (!markBeingEdited(element, true)) {
81
81
  return null;
82
82
  }
83
83
 
84
- const config = inputConfig || new Config(function() {}, function() {});
85
84
  const editingContext: EditingContext<T> = {element, config, oldRole: null, oldTabIndex: null, oldText: null};
86
85
  const committedCallback = config.commitHandler;
87
86
  const cancelledCallback = config.cancelHandler;
@@ -95,7 +94,7 @@ export class InplaceEditor<T> {
95
94
  editingContext.oldText = this.editorContent(editingContext);
96
95
 
97
96
  function blurEventListener(e?: Event): void {
98
- if (config.blurHandler && !config.blurHandler(element, e)) {
97
+ if (!config.blurHandler(element, e)) {
99
98
  return;
100
99
  }
101
100
  editingCommitted.call(element);
@@ -125,7 +124,7 @@ export class InplaceEditor<T> {
125
124
  function editingCommitted(this: Element): void {
126
125
  cleanUpAfterEditing();
127
126
 
128
- committedCallback(this, self.editorContent(editingContext), editingContext.oldText || '', context, moveDirection);
127
+ committedCallback(this, self.editorContent(editingContext), editingContext.oldText, context, moveDirection);
129
128
  element.dispatchEvent(new Event('change'));
130
129
  }
131
130
 
@@ -188,23 +187,28 @@ export class InplaceEditor<T> {
188
187
  }
189
188
  }
190
189
 
191
- export type CommitHandler<T> = (arg0: Element, arg1: string, arg2: string, arg3: T, arg4: string) => void;
192
- export type CancelHandler<T> = (arg0: Element, arg1: T) => void;
193
- export type BlurHandler = (arg0: Element, arg1?: Event|undefined) => boolean;
190
+ export type CommitHandler<T> =
191
+ (element: Element, newText: string, oldText: string|null, context: T, moveDirection: string) => void;
192
+ export type CancelHandler<T> = (element: Element, context: T) => void;
193
+ export type BlurHandler = (element: Element, event?: Event) => boolean;
194
194
 
195
- export class Config<T = undefined> {
195
+ export class Config<T> {
196
196
  commitHandler: CommitHandler<T>;
197
197
  cancelHandler: CancelHandler<T>;
198
198
  context: T;
199
- blurHandler: BlurHandler|undefined;
200
- pasteHandler!: EventHandler|null;
201
- postKeydownFinishHandler!: EventHandler|null;
199
+ blurHandler: BlurHandler;
200
+ pasteHandler?: EventHandler;
201
+ postKeydownFinishHandler?: EventHandler;
202
202
 
203
203
  constructor(
204
- commitHandler: CommitHandler<T>, cancelHandler: CancelHandler<T>, context?: T, blurHandler?: BlurHandler) {
204
+ commitHandler: CommitHandler<T>,
205
+ cancelHandler: CancelHandler<T>,
206
+ context: T,
207
+ blurHandler: BlurHandler = () => true,
208
+ ) {
205
209
  this.commitHandler = commitHandler;
206
210
  this.cancelHandler = cancelHandler;
207
- this.context = context as T;
211
+ this.context = context;
208
212
  this.blurHandler = blurHandler;
209
213
  }
210
214
 
@@ -1214,7 +1214,6 @@ export class TabbedPaneTab {
1214
1214
  tabElement.classList.add('measuring');
1215
1215
  } else {
1216
1216
  tabElement.addEventListener('click', this.tabClicked.bind(this), false);
1217
- tabElement.addEventListener('keydown', this.tabKeyDown.bind(this), false);
1218
1217
  tabElement.addEventListener('auxclick', this.tabClicked.bind(this), false);
1219
1218
  tabElement.addEventListener('mousedown', this.tabMouseDown.bind(this), false);
1220
1219
  tabElement.addEventListener('mouseup', this.tabMouseUp.bind(this), false);
@@ -1265,19 +1264,6 @@ export class TabbedPaneTab {
1265
1264
  element?.parentElement?.classList.contains('tabbed-pane-close-button') || false;
1266
1265
  }
1267
1266
 
1268
- private tabKeyDown(ev: Event): void {
1269
- const event = ev as KeyboardEvent;
1270
- switch (event.key) {
1271
- case 'Enter':
1272
- case ' ':
1273
- if (this.isCloseIconClicked(event.target as HTMLElement)) {
1274
- this.closeTabs([this.id]);
1275
- ev.consume(true);
1276
- return;
1277
- }
1278
- }
1279
- }
1280
-
1281
1267
  private tabClicked(ev: Event): void {
1282
1268
  const event = (ev as MouseEvent);
1283
1269
  const middleButton = event.button === 1;
@@ -1100,13 +1100,6 @@ export function createTextButton(text: string, clickHandler?: ((arg0: Event) =>
1100
1100
  button.variant = opts?.variant ? opts.variant : Buttons.Button.Variant.OUTLINED;
1101
1101
  if (clickHandler) {
1102
1102
  button.addEventListener('click', clickHandler);
1103
- button.addEventListener('keydown', (event: KeyboardEvent): void => {
1104
- if (event.key === 'Enter' || event.key === 'Space') {
1105
- // Make sure we don't propagate 'Enter' or 'Space' key events to parents,
1106
- // so that these get turned into 'click' events properly.
1107
- event.stopImmediatePropagation();
1108
- }
1109
- });
1110
1103
  }
1111
1104
  if (opts?.jslogContext) {
1112
1105
  button.setAttribute('jslog', `${VisualLogging.action().track({click: true}).context(opts.jslogContext)}`);
@@ -35,7 +35,6 @@
35
35
  import * as Common from '../../../../core/common/common.js';
36
36
  import * as i18n from '../../../../core/i18n/i18n.js';
37
37
  import * as Platform from '../../../../core/platform/platform.js';
38
- import * as Root from '../../../../core/root/root.js';
39
38
  import * as SDK from '../../../../core/sdk/sdk.js';
40
39
  import * as Protocol from '../../../../generated/protocol.js';
41
40
  import * as IssuesManager from '../../../../models/issues_manager/issues_manager.js';
@@ -237,7 +236,8 @@ export class CookiesTable extends UI.Widget.VBox {
237
236
  },
238
237
  ] as DataGrid.DataGrid.ColumnDescriptor[];
239
238
 
240
- if (Root.Runtime.experiments.isEnabled('experimental-cookie-features')) {
239
+ const config = Common.Settings.Settings.instance().getHostConfig();
240
+ if (config.devToolsEnableOriginBoundCookies?.schemeBindingEnabled) {
241
241
  const additionalColumns = [
242
242
  {
243
243
  id: SDK.Cookie.Attribute.SOURCE_SCHEME,
@@ -247,6 +247,11 @@ export class CookiesTable extends UI.Widget.VBox {
247
247
  weight: 7,
248
248
  editable,
249
249
  },
250
+ ] as DataGrid.DataGrid.ColumnDescriptor[];
251
+ columns.push(...additionalColumns);
252
+ }
253
+ if (config.devToolsEnableOriginBoundCookies?.portBindingEnabled) {
254
+ const additionalColumns = [
250
255
  {
251
256
  id: SDK.Cookie.Attribute.SOURCE_PORT,
252
257
  title: 'SourcePort',
@@ -666,11 +666,16 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
666
666
  }
667
667
 
668
668
  private startEditingConfig(_element: Element): UI.InplaceEditor.Config<any> {
669
- return new UI.InplaceEditor.Config(this.editingCommitted.bind(this), this.editingCancelled.bind(this));
669
+ return new UI.InplaceEditor.Config(this.editingCommitted.bind(this), this.editingCancelled.bind(this), undefined);
670
670
  }
671
671
 
672
672
  private editingCommitted(
673
- element: Element, newText: any, oldText: any, context: string|undefined, moveDirection: string): void {
673
+ element: Element,
674
+ newText: any,
675
+ _oldText: string|boolean|null,
676
+ _context: string|undefined,
677
+ moveDirection: string,
678
+ ): void {
674
679
  const columnId = this.columnIdFromNode(element);
675
680
  if (!columnId) {
676
681
  this.editingCancelled(element);
@@ -681,8 +686,7 @@ export class DataGridImpl<T> extends Common.ObjectWrapper.ObjectWrapper<EventTyp
681
686
  if (!this.editingNode) {
682
687
  return;
683
688
  }
684
- const valueBeforeEditing =
685
- (this.editingNode.data[columnId] === null ? '' : this.editingNode.data[columnId] as string | boolean);
689
+ const valueBeforeEditing = this.editingNode.data[columnId];
686
690
  const currentEditingNode = this.editingNode;
687
691
 
688
692
  function moveToNextIfNeeded(this: DataGridImpl<T>, wasChange: boolean): void {
@@ -14,7 +14,15 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
14
14
  DataGridImpl)<ViewportDataGridNode<T>> {
15
15
  private readonly onScrollBound: (event: Event|null) => void;
16
16
  private visibleNodes: ViewportDataGridNode<T>[];
17
- stickToBottom: boolean;
17
+ /** A datagrid preference to express that the grid represents an updating log of rows (eg Network panel request log, websocket messages).
18
+ * If `true`, the datagrid will mostly keep the scroll at the bottom, so new items are visible.
19
+ * If the data is sorted descending (eg Performance Call Tree, heap snapshot), keep the default of `false`.
20
+ */
21
+ enableAutoScrollToBottom: boolean = false;
22
+ /** When true, the datagrid will manipulate the scrollTop to focus on the bottom, mostly so new additions are visible.
23
+ * Some actions will unset this, like revealing or expanding a particular node.
24
+ * Only matters if enableAutoScrollToBottom is true. */
25
+ keepScrollingToBottom: boolean = false;
18
26
  private updateIsFromUser: boolean;
19
27
  private lastScrollTop: number;
20
28
  private firstVisibleIsStriped: boolean;
@@ -29,7 +37,6 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
29
37
  this.visibleNodes = [];
30
38
  this.inline = false;
31
39
 
32
- this.stickToBottom = false;
33
40
  this.updateIsFromUser = false;
34
41
  this.lastScrollTop = 0;
35
42
  this.firstVisibleIsStriped = false;
@@ -60,15 +67,15 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
60
67
  }
61
68
 
62
69
  override onResize(): void {
63
- if (this.stickToBottom) {
70
+ if (this.keepScrollingToBottom) {
64
71
  this.scrollContainer.scrollTop = this.scrollContainer.scrollHeight - this.scrollContainer.clientHeight;
65
72
  }
66
73
  this.scheduleUpdate();
67
74
  super.onResize();
68
75
  }
69
76
 
70
- setStickToBottom(stick: boolean): void {
71
- this.stickToBottom = stick;
77
+ setEnableAutoScrollToBottom(stick: boolean): void {
78
+ this.keepScrollingToBottom = this.enableAutoScrollToBottom = stick;
72
79
  }
73
80
 
74
81
  private onScroll(_event: Event|null): void {
@@ -131,8 +138,10 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
131
138
  bottomPadding += nodes[i].nodeSelfHeight();
132
139
  }
133
140
 
134
- // enable stick-to-bottom if the last item is visible
135
- this.stickToBottom = end === nodes.length;
141
+ if (this.enableAutoScrollToBottom) {
142
+ // If we're scrolled to the very end, keep the scroll viewport focused to the end (as new items arrive)
143
+ this.keepScrollingToBottom = end === nodes.length;
144
+ }
136
145
 
137
146
  return {
138
147
  topPadding,
@@ -157,7 +166,7 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
157
166
  let scrollTop: number = this.scrollContainer.scrollTop;
158
167
  const currentScrollTop = scrollTop;
159
168
  const maxScrollTop = Math.max(0, this.contentHeight() - clientHeight);
160
- if (!this.updateIsFromUser && this.stickToBottom) {
169
+ if (!this.updateIsFromUser && this.keepScrollingToBottom) {
161
170
  scrollTop = maxScrollTop;
162
171
  }
163
172
  this.updateIsFromUser = false;
@@ -185,7 +194,7 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
185
194
  const nodes = (this.rootNode() as ViewportDataGridNode<T>).flatChildren();
186
195
  const index = nodes.indexOf(visibleNodes[0]);
187
196
  this.updateStripesClass(Boolean(index % 2));
188
- if (this.stickToBottom && index !== -1 && Boolean(index % 2) !== this.firstVisibleIsStriped) {
197
+ if (this.keepScrollingToBottom && index !== -1 && Boolean(index % 2) !== this.firstVisibleIsStriped) {
189
198
  offset += 1;
190
199
  }
191
200
  }
@@ -233,7 +242,7 @@ export class ViewportDataGrid<T> extends Common.ObjectWrapper.eventMixin<EventTy
233
242
  const visibleHeight = this.scrollContainer.offsetHeight - this.headerHeightInScroller();
234
243
  if (scrollTop > fromY) {
235
244
  scrollTop = fromY;
236
- this.stickToBottom = false;
245
+ this.keepScrollingToBottom = false;
237
246
  } else if (scrollTop + visibleHeight < toY) {
238
247
  scrollTop = toY - visibleHeight;
239
248
  }
@@ -410,7 +419,7 @@ export class ViewportDataGridNode<T> extends DataGridNode<ViewportDataGridNode<T
410
419
  if (this.expanded) {
411
420
  return;
412
421
  }
413
- (this.dataGrid as ViewportDataGrid<T>).stickToBottom = false;
422
+ (this.dataGrid as ViewportDataGrid<T>).keepScrollingToBottom = false;
414
423
  this.clearFlatNodes();
415
424
  super.expand();
416
425
  (this.dataGrid as ViewportDataGrid<T>).scheduleUpdateStructure();
@@ -34,6 +34,25 @@ describeWithLocale('CSSVarSwatch', () => {
34
34
  assert.instanceOf(component, HTMLElement, 'The swatch is an instance of HTMLElement');
35
35
  });
36
36
 
37
+ it('renders a var function with empty computed value', () => {
38
+ const component = new InlineEditor.LinkSwatch.CSSVarSwatch();
39
+ renderElementIntoDOM(component);
40
+ component.data = {
41
+ variableName: '--test',
42
+ computedValue: '',
43
+ fromFallback: false,
44
+ fallbackText: null,
45
+ onLinkActivate: () => {},
46
+ };
47
+
48
+ assertVarSwatch(component, {
49
+ valueTooltip: '',
50
+ linkTooltip: '',
51
+ isDefined: true,
52
+ varText: '--test',
53
+ });
54
+ });
55
+
37
56
  it('renders a var function without fallback', () => {
38
57
  const component = new InlineEditor.LinkSwatch.CSSVarSwatch();
39
58
  renderElementIntoDOM(component);
@@ -118,7 +118,7 @@ export class CSSVarSwatch extends HTMLElement {
118
118
  protected render(data: CSSVarSwatchRenderData): void {
119
119
  const {variableName, fromFallback, computedValue, onLinkActivate} = data;
120
120
 
121
- const isDefined = Boolean(computedValue) && !fromFallback;
121
+ const isDefined = computedValue !== null && !fromFallback;
122
122
  const title = isDefined ? computedValue ?? '' : i18nString(UIStrings.sIsNotDefined, {PH1: variableName});
123
123
 
124
124
  this.#link = new BaseLinkSwatch();
@@ -1715,7 +1715,7 @@ export class ExpandableTextPropertyValue extends ObjectPropertyValue {
1715
1715
  this.maxDisplayableTextLength = 10000000;
1716
1716
 
1717
1717
  const byteCount = Platform.StringUtilities.countWtf8Bytes(text);
1718
- const totalBytesText = Platform.NumberUtilities.bytesToString(byteCount);
1718
+ const totalBytesText = i18n.ByteUtilities.bytesToString(byteCount);
1719
1719
  if (this.text.length < this.maxDisplayableTextLength) {
1720
1720
  this.expandElementText = i18nString(UIStrings.showMoreS, {PH1: totalBytesText});
1721
1721
  this.expandElement.setAttribute('data-text', this.expandElementText);
@@ -32,7 +32,6 @@ import * as Common from '../../../../core/common/common.js';
32
32
  import * as i18n from '../../../../core/i18n/i18n.js';
33
33
  import * as Platform from '../../../../core/platform/platform.js';
34
34
  import * as Root from '../../../../core/root/root.js';
35
- import type * as TimelineModel from '../../../../models/timeline_model/timeline_model.js';
36
35
  import * as Trace from '../../../../models/trace/trace.js';
37
36
  import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
38
37
  import * as Buttons from '../../../components/buttons/buttons.js';
@@ -2174,16 +2173,6 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2174
2173
 
2175
2174
  const {markerIndices, colorBuckets, titleIndices} = this.getDrawableData(context, timelineData);
2176
2175
 
2177
- context.save();
2178
- this.forEachGroupInViewport((offset, index, group, isFirst, groupHeight) => {
2179
- if (this.isGroupFocused(index)) {
2180
- context.fillStyle =
2181
- ThemeSupport.ThemeSupport.instance().getComputedValue('--selected-group-background', this.contentElement);
2182
- context.fillRect(0, offset, canvasWidth, groupHeight - group.style.padding);
2183
- }
2184
- });
2185
- context.restore();
2186
-
2187
2176
  const groups = this.rawTimelineData?.groups || [];
2188
2177
  const trackIndex = groups.findIndex(g => g.name.includes('Main'));
2189
2178
  const group = groups.at(trackIndex);
@@ -2678,14 +2667,9 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
2678
2667
  if (this.isGroupCollapsible(index) && !group.expanded || group.style.shareHeaderLine) {
2679
2668
  // In edit mode, we draw an extra rectangle for the save icon.
2680
2669
  const labelBackgroundWidth = this.labelWidthForGroup(context, group);
2681
- if (this.isGroupFocused(index)) {
2682
- context.fillStyle =
2683
- ThemeSupport.ThemeSupport.instance().getComputedValue('--selected-group-background', this.contentElement);
2684
- } else {
2685
- const parsedColor = Common.Color.parse(group.style.backgroundColor);
2686
- if (parsedColor) {
2687
- context.fillStyle = (parsedColor.setAlpha(0.8).asString() as string);
2688
- }
2670
+ const parsedColor = Common.Color.parse(group.style.backgroundColor);
2671
+ if (parsedColor) {
2672
+ context.fillStyle = (parsedColor.setAlpha(0.8).asString() as string);
2689
2673
  }
2690
2674
  context.fillRect(
2691
2675
  iconsWidth + HEADER_LEFT_PADDING, offset + HEADER_LABEL_Y_PADDING, labelBackgroundWidth,
@@ -4145,9 +4129,8 @@ export interface FlameChartDataProvider {
4145
4129
  customizedContextMenu?
4146
4130
  (event: MouseEvent, eventIndex: number, groupIndex: number): UI.ContextMenu.ContextMenu|undefined;
4147
4131
 
4148
- search?
4149
- (visibleWindow: Trace.Types.Timing.TraceWindowMicroSeconds,
4150
- filter?: TimelineModel.TimelineModelFilter.TimelineModelFilter): DataProviderSearchResult[];
4132
+ search?(visibleWindow: Trace.Types.Timing.TraceWindowMicroSeconds, filter?: Trace.Extras.TraceFilter.TraceFilter):
4133
+ DataProviderSearchResult[];
4151
4134
 
4152
4135
  // The following three functions are used for the flame chart entry customization.
4153
4136
  modifyTree?(action: FilterAction, entryIndex: number): void;