chrome-devtools-frontend 1.0.1684555 → 1.0.1689415

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 (602) hide show
  1. package/.agents/skills/gerrit-cli/SKILL.md +29 -8
  2. package/.agents/skills/gerrit-cli/references/commands.md +51 -18
  3. package/.agents/skills/gerrit-cli/references/workflows.md +6 -6
  4. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +43 -70
  5. package/config/typescript/tsconfig.base.json +1 -0
  6. package/config/typescript/tsconfig.eslint.json +9 -0
  7. package/docs/contributing/issues.md +1 -1
  8. package/docs/styleguide/ux/writing.md +2 -2
  9. package/eslint.config.mjs +18 -10
  10. package/front_end/core/common/Base64.ts +1 -1
  11. package/front_end/core/common/Color.ts +28 -6
  12. package/front_end/core/common/ColorConverter.ts +12 -0
  13. package/front_end/core/common/Console.ts +2 -1
  14. package/front_end/core/common/Object.ts +2 -2
  15. package/front_end/core/common/ResourceType.ts +12 -13
  16. package/front_end/core/common/Revealer.ts +1 -1
  17. package/front_end/core/common/Settings.ts +2 -2
  18. package/front_end/core/common/TextDictionary.ts +2 -2
  19. package/front_end/core/common/Throttler.ts +1 -1
  20. package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -2
  21. package/front_end/core/host/UserMetrics.ts +51 -37
  22. package/front_end/core/host/host.ts +1 -1
  23. package/front_end/core/i18n/i18nImpl.ts +1 -1
  24. package/front_end/core/platform/HostRuntime.ts +3 -3
  25. package/front_end/core/platform/KeyboardUtilities.ts +1 -1
  26. package/front_end/core/protocol_client/InspectorBackend.ts +7 -6
  27. package/front_end/core/root/Runtime.ts +4 -2
  28. package/front_end/core/sdk/AnimationModel.ts +1 -1
  29. package/front_end/core/sdk/CPUThrottlingManager.ts +198 -0
  30. package/front_end/core/sdk/CSSMetadata.ts +11 -6
  31. package/front_end/core/sdk/CSSPropertyParser.ts +5 -3
  32. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +90 -59
  33. package/front_end/core/sdk/ConsoleModel.ts +1 -1
  34. package/front_end/core/sdk/DOMModel.ts +3 -3
  35. package/front_end/core/sdk/DebuggerModel.ts +1 -1
  36. package/front_end/core/sdk/EmulationModel.ts +5 -0
  37. package/front_end/core/sdk/LayerTreeBase.ts +1 -1
  38. package/front_end/core/sdk/NetworkManager.ts +1 -1
  39. package/front_end/core/sdk/README.md +40 -0
  40. package/front_end/core/sdk/RehydratingConnection.ts +1 -1
  41. package/front_end/core/sdk/RemoteObject.ts +1 -1
  42. package/front_end/core/sdk/ResourceTreeModel.ts +2 -2
  43. package/front_end/core/sdk/SDKModel.ts +1 -1
  44. package/front_end/core/sdk/SDKSettings.ts +6 -0
  45. package/front_end/core/sdk/Script.ts +2 -1
  46. package/front_end/core/sdk/SecurityOrigin.ts +48 -0
  47. package/front_end/core/sdk/ServiceWorkerManager.ts +75 -17
  48. package/front_end/core/sdk/sdk.ts +2 -0
  49. package/front_end/core/text_utils/ContentData.ts +1 -1
  50. package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +3 -1
  51. package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -1
  52. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +2 -2
  53. package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
  54. package/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.ts +1 -1
  55. package/front_end/entrypoints/inspector_main/InspectorMain.ts +1 -1
  56. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +1 -1
  57. package/front_end/entrypoints/inspector_main/nodeIcon.css +1 -1
  58. package/front_end/entrypoints/inspector_main/outermostTargetSelector.css +3 -3
  59. package/front_end/entrypoints/inspector_main/renderingOptions.css +3 -3
  60. package/front_end/entrypoints/js_app/js_app.ts +25 -9
  61. package/front_end/entrypoints/node_app/app/nodeConnectionsPanel.css +5 -5
  62. package/front_end/entrypoints/node_app/node_app.ts +1 -1
  63. package/front_end/generated/ARIAProperties.ts +39 -1
  64. package/front_end/generated/InspectorBackendCommands.ts +2 -1
  65. package/front_end/generated/SupportedCSSProperties.ts +60 -119
  66. package/front_end/generated/protocol-mapping.d.ts +9 -0
  67. package/front_end/generated/protocol-proxy-api.d.ts +7 -0
  68. package/front_end/generated/protocol.ts +12 -2
  69. package/front_end/models/ai_assistance/AiAgent2.ts +13 -7
  70. package/front_end/models/ai_assistance/AiConversation.ts +8 -17
  71. package/front_end/models/ai_assistance/AiHistoryStorage.ts +2 -2
  72. package/front_end/models/ai_assistance/AiUtils.ts +16 -0
  73. package/front_end/models/ai_assistance/EvaluateAction.ts +1 -1
  74. package/front_end/models/ai_assistance/README.md +1 -1
  75. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +2 -3
  76. package/front_end/models/ai_assistance/agents/AiAgent.ts +29 -6
  77. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +4 -3
  78. package/front_end/models/ai_assistance/agents/FileAgent.ts +2 -2
  79. package/front_end/models/ai_assistance/agents/NetworkAgent.ts +2 -2
  80. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1 -1
  81. package/front_end/models/ai_assistance/agents/StorageAgent.ts +7 -5
  82. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
  83. package/front_end/models/ai_assistance/agents/StylingAgent.ts +9 -7
  84. package/front_end/models/ai_assistance/ai_assistance.ts +8 -0
  85. package/front_end/models/ai_assistance/contexts/AccessibilityContext.ts +16 -1
  86. package/front_end/models/ai_assistance/contexts/FileContext.ts +6 -0
  87. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +150 -325
  88. package/front_end/models/ai_assistance/injected.ts +5 -3
  89. package/front_end/models/ai_assistance/performance/AIContext.ts +1 -1
  90. package/front_end/models/ai_assistance/skills/README.md +1 -1
  91. package/front_end/models/ai_assistance/skills/accessibility.md +19 -10
  92. package/front_end/models/ai_assistance/skills/network.md +13 -7
  93. package/front_end/models/ai_assistance/skills/performance.md +22 -16
  94. package/front_end/models/ai_assistance/skills/sources.md +13 -7
  95. package/front_end/models/ai_assistance/skills/storage.md +19 -18
  96. package/front_end/models/ai_assistance/skills/styling.md +30 -37
  97. package/front_end/models/ai_assistance/tools/CookieUtils.ts +120 -0
  98. package/front_end/models/ai_assistance/tools/DOMStorageUtils.ts +53 -4
  99. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +8 -32
  100. package/front_end/models/ai_assistance/tools/GetCookieValues.ts +146 -0
  101. package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +11 -9
  102. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +17 -5
  103. package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +12 -11
  104. package/front_end/models/ai_assistance/tools/GetInsightDetails.ts +11 -11
  105. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +3 -2
  106. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +3 -3
  107. package/front_end/models/ai_assistance/tools/GetResourceContent.ts +12 -12
  108. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +3 -2
  109. package/front_end/models/ai_assistance/tools/GetStorageBreakdown.ts +132 -0
  110. package/front_end/models/ai_assistance/tools/GetStorageValues.ts +17 -4
  111. package/front_end/models/ai_assistance/tools/GetStyles.ts +3 -3
  112. package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +9 -8
  113. package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +13 -14
  114. package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +12 -10
  115. package/front_end/models/ai_assistance/tools/ListCookies.ts +93 -0
  116. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +15 -6
  117. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +3 -3
  118. package/front_end/models/ai_assistance/tools/ListSources.ts +5 -3
  119. package/front_end/models/ai_assistance/tools/ListStorageKeys.ts +16 -4
  120. package/front_end/models/ai_assistance/tools/RecordPerformanceTrace.ts +3 -2
  121. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +4 -3
  122. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +9 -9
  123. package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +9 -8
  124. package/front_end/models/ai_assistance/tools/Tool.ts +21 -11
  125. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +41 -8
  126. package/front_end/models/badges/AiExplorerBadge.ts +3 -3
  127. package/front_end/models/badges/CodeWhispererBadge.ts +2 -2
  128. package/front_end/models/badges/DOMDetectiveBadge.ts +3 -3
  129. package/front_end/models/badges/SpeedsterBadge.ts +3 -3
  130. package/front_end/models/badges/StarterBadge.ts +4 -4
  131. package/front_end/models/bindings/CompilerScriptMapping.ts +11 -2
  132. package/front_end/models/bindings/ContentProviderBasedProject.ts +3 -2
  133. package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
  134. package/front_end/models/emulation/EmulatedDevices.ts +2 -2
  135. package/front_end/models/formatter/FormatterWorkerPool.ts +2 -2
  136. package/front_end/models/formatter/ScriptFormatter.ts +1 -2
  137. package/front_end/models/geometry/GeometryImpl.ts +2 -2
  138. package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +1 -1
  139. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +3 -2
  140. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
  141. package/front_end/models/issues_manager/GenericIssue.ts +18 -18
  142. package/front_end/models/issues_manager/StylesheetLoadingIssue.ts +1 -1
  143. package/front_end/models/javascript_metadata/{NativeFunctions.js → NativeFunctions.ts} +25 -9
  144. package/front_end/models/live-metrics/LiveMetrics.ts +9 -3
  145. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +58 -6
  146. package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +2 -62
  147. package/front_end/models/network_time_calculator/RequestTimeRanges.ts +2 -2
  148. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +5 -0
  149. package/front_end/models/persistence/IsolatedFileSystem.ts +1 -1
  150. package/front_end/models/persistence/NetworkPersistenceManager.ts +35 -6
  151. package/front_end/models/stack_trace/StackTraceImpl.ts +2 -2
  152. package/front_end/models/trace/LanternComputationData.ts +2 -3
  153. package/front_end/models/trace/extras/StackTraceForEvent.ts +3 -2
  154. package/front_end/models/trace/extras/ThirdParties.ts +9 -9
  155. package/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +7 -4
  156. package/front_end/models/trace/handlers/FramesHandler.ts +3 -3
  157. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +2 -2
  158. package/front_end/models/trace/handlers/SamplesHandler.ts +4 -2
  159. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +1 -1
  160. package/front_end/models/trace/handlers/WarningsHandler.ts +2 -2
  161. package/front_end/models/trace/helpers/Network.ts +3 -3
  162. package/front_end/models/trace/helpers/Trace.ts +1 -1
  163. package/front_end/models/trace/insights/CLSCulprits.ts +2 -1
  164. package/front_end/models/trace/insights/Cache.ts +3 -1
  165. package/front_end/models/trace/insights/CharacterSet.ts +3 -1
  166. package/front_end/models/trace/insights/DOMSize.ts +3 -1
  167. package/front_end/models/trace/insights/DocumentLatency.ts +3 -1
  168. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +3 -1
  169. package/front_end/models/trace/insights/FontDisplay.ts +2 -1
  170. package/front_end/models/trace/insights/ForcedReflow.ts +2 -1
  171. package/front_end/models/trace/insights/INPBreakdown.ts +3 -1
  172. package/front_end/models/trace/insights/ImageDelivery.ts +3 -1
  173. package/front_end/models/trace/insights/LCPBreakdown.ts +3 -1
  174. package/front_end/models/trace/insights/LCPDiscovery.ts +3 -1
  175. package/front_end/models/trace/insights/LegacyJavaScript.ts +3 -1
  176. package/front_end/models/trace/insights/ModernHTTP.ts +2 -1
  177. package/front_end/models/trace/insights/NetworkDependencyTree.ts +2 -1
  178. package/front_end/models/trace/insights/RenderBlocking.ts +5 -4
  179. package/front_end/models/trace/insights/SlowCSSSelector.ts +3 -1
  180. package/front_end/models/trace/insights/ThirdParties.ts +5 -3
  181. package/front_end/models/trace/insights/Viewport.ts +2 -1
  182. package/front_end/models/trace/lantern/simulation/Constants.ts +34 -2
  183. package/front_end/models/trace/lantern/simulation/DNSCache.ts +1 -1
  184. package/front_end/models/trace/types/TraceEvents.ts +8 -3
  185. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +2 -1
  186. package/front_end/models/workspace/WorkspaceImpl.ts +18 -2
  187. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +686 -2
  188. package/front_end/panels/accessibility/accessibilityNode.css +4 -4
  189. package/front_end/panels/accessibility/accessibilityProperties.css +1 -1
  190. package/front_end/panels/accessibility/accessibilitySidebarView.css +2 -2
  191. package/front_end/panels/accessibility/axBreadcrumbs.css +13 -13
  192. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +14 -14
  193. package/front_end/panels/ai_assistance/ExternalHandler.ts +1 -1
  194. package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -1
  195. package/front_end/panels/ai_assistance/components/ChatInput.ts +3 -2
  196. package/front_end/panels/ai_assistance/components/ChatView.ts +1 -1
  197. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +1 -1
  198. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +1 -1
  199. package/front_end/panels/ai_assistance/components/chatInput.css +12 -12
  200. package/front_end/panels/ai_assistance/components/chatMessage.css +16 -16
  201. package/front_end/panels/ai_assistance/components/chatView.css +2 -2
  202. package/front_end/panels/ai_assistance/components/exploreWidget.css +1 -1
  203. package/front_end/panels/ai_assistance/components/exportForAgentsDialog.css +4 -0
  204. package/front_end/panels/ai_assistance/components/walkthroughView.css +6 -6
  205. package/front_end/panels/animation/animationTimeline.css +62 -62
  206. package/front_end/panels/application/ApplicationPanelSidebar.ts +6 -1
  207. package/front_end/panels/application/BackgroundServiceView.ts +290 -252
  208. package/front_end/panels/application/WebMCPView.ts +15 -7
  209. package/front_end/panels/application/appManifestView.css +5 -5
  210. package/front_end/panels/application/backgroundServiceView.css +18 -2
  211. package/front_end/panels/application/components/AdsView.ts +100 -4
  212. package/front_end/panels/application/components/adsView.css +8 -5
  213. package/front_end/panels/application/components/backForwardCacheView.css +5 -5
  214. package/front_end/panels/application/components/bounceTrackingMitigationsView.css +1 -1
  215. package/front_end/panels/application/components/endpointsGrid.css +1 -1
  216. package/front_end/panels/application/components/permissionsPolicySection.css +1 -1
  217. package/front_end/panels/application/components/protocolHandlersView.css +6 -6
  218. package/front_end/panels/application/components/reportsGrid.css +1 -1
  219. package/front_end/panels/application/components/serviceWorkerRouterView.css +4 -4
  220. package/front_end/panels/application/components/trustTokensView.css +7 -7
  221. package/front_end/panels/application/cookieItemsView.css +3 -3
  222. package/front_end/panels/application/deviceBoundSessionsView.css +3 -3
  223. package/front_end/panels/application/frameDetailsReportView.css +11 -11
  224. package/front_end/panels/application/indexedDBViews.css +7 -7
  225. package/front_end/panels/application/originTrialTokenRows.css +2 -2
  226. package/front_end/panels/application/originTrialTreeView.css +3 -3
  227. package/front_end/panels/application/preloading/components/RuleSetDetailsView.css +2 -2
  228. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +1 -1
  229. package/front_end/panels/application/preloading/components/preloadingDisabledInfobar.css +2 -2
  230. package/front_end/panels/application/preloading/components/preloadingGrid.css +2 -2
  231. package/front_end/panels/application/preloading/components/usedPreloadingView.css +7 -7
  232. package/front_end/panels/application/preloading/preloadingView.css +1 -1
  233. package/front_end/panels/application/preloading/preloadingViewDropDown.css +3 -3
  234. package/front_end/panels/application/serviceWorkerCacheViews.css +5 -5
  235. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +12 -12
  236. package/front_end/panels/application/serviceWorkersView.css +15 -16
  237. package/front_end/panels/application/storageView.css +5 -5
  238. package/front_end/panels/application/webMCPView.css +9 -9
  239. package/front_end/panels/autofill/autofillView.css +4 -4
  240. package/front_end/panels/browser_debugger/categorizedBreakpointsSidebarPane.css +4 -4
  241. package/front_end/panels/browser_debugger/domBreakpointsSidebarPane.css +5 -3
  242. package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +4 -4
  243. package/front_end/panels/changes/changesSidebar.css +1 -1
  244. package/front_end/panels/changes/changesView.css +1 -1
  245. package/front_end/panels/changes/combinedDiffView.css +1 -1
  246. package/front_end/panels/common/CPUThrottlingOption.ts +5 -10
  247. package/front_end/panels/common/badgeNotification.css +2 -2
  248. package/front_end/panels/common/domLinkifier.css +1 -1
  249. package/front_end/panels/common/gdpSignUpDialog.css +3 -3
  250. package/front_end/panels/common/geminiRebrandPromoDialog.css +1 -1
  251. package/front_end/panels/console/ConsolePrompt.ts +6 -3
  252. package/front_end/panels/console/ConsoleView.ts +6 -3
  253. package/front_end/panels/console/ConsoleViewMessage.ts +3 -1
  254. package/front_end/panels/console/console-meta.ts +5 -24
  255. package/front_end/panels/console/consoleContextSelector.css +2 -2
  256. package/front_end/panels/console/consolePinPane.css +9 -9
  257. package/front_end/panels/console/consolePrompt.css +5 -5
  258. package/front_end/panels/console/consoleView.css +39 -39
  259. package/front_end/panels/coverage/coverageListView.css +2 -2
  260. package/front_end/panels/css_overview/cssOverviewCompletedView.css +34 -34
  261. package/front_end/panels/css_overview/cssOverviewProcessingView.css +5 -5
  262. package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +1 -1
  263. package/front_end/panels/css_overview/cssOverviewStartView.css +17 -17
  264. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +209 -62
  265. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +4 -4
  266. package/front_end/panels/elements/DOMTreeContextMenu.ts +59 -54
  267. package/front_end/panels/elements/ElementsPanel.ts +1 -1
  268. package/front_end/panels/elements/ElementsTreeElement.ts +130 -94
  269. package/front_end/panels/elements/ElementsTreeOutline.ts +1751 -363
  270. package/front_end/panels/elements/ShortcutTreeElement.ts +6 -3
  271. package/front_end/panels/elements/StylePropertiesSection.ts +65 -8
  272. package/front_end/panels/elements/StylePropertyTreeElement.ts +6 -0
  273. package/front_end/panels/elements/StylesSidebarPane.ts +143 -8
  274. package/front_end/panels/elements/classesPaneWidget.css +6 -6
  275. package/front_end/panels/elements/components/stylePropertyEditor.css +7 -7
  276. package/front_end/panels/elements/computedStyleWidget.css +1 -1
  277. package/front_end/panels/elements/elementStatePaneWidget.css +8 -8
  278. package/front_end/panels/elements/elements-meta.ts +14 -0
  279. package/front_end/panels/elements/elementsPanel.css +4 -4
  280. package/front_end/panels/elements/elementsTreeOutline.css +222 -38
  281. package/front_end/panels/elements/layersWidget.css +4 -4
  282. package/front_end/panels/elements/layoutPane.css +18 -18
  283. package/front_end/panels/elements/metricsSidebarPane.css +11 -11
  284. package/front_end/panels/elements/platformFontsWidget.css +5 -5
  285. package/front_end/panels/elements/propertiesWidget.css +2 -2
  286. package/front_end/panels/elements/stylePropertiesTreeOutline.css +20 -20
  287. package/front_end/panels/elements/stylesSidebarPane.css +37 -20
  288. package/front_end/panels/emulation/deviceModeView.css +49 -49
  289. package/front_end/panels/emulation/mediaQueryInspector.css +18 -18
  290. package/front_end/panels/event_listeners/eventListenersView.css +1 -1
  291. package/front_end/panels/explain/components/consoleInsight.css +29 -29
  292. package/front_end/panels/issues/components/elementsPanelLink.css +2 -2
  293. package/front_end/panels/issues/components/hideIssuesMenu.css +1 -1
  294. package/front_end/panels/issues/issuesPane.css +2 -2
  295. package/front_end/panels/issues/issuesTree.css +50 -50
  296. package/front_end/panels/layer_viewer/Layers3DView.ts +9 -10
  297. package/front_end/panels/layer_viewer/layerDetailsView.css +1 -1
  298. package/front_end/panels/layer_viewer/layerTreeOutline.css +2 -2
  299. package/front_end/panels/layer_viewer/layers3DView.css +1 -1
  300. package/front_end/panels/layer_viewer/paintProfiler.css +1 -1
  301. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -2
  302. package/front_end/panels/media/playerListView.css +9 -9
  303. package/front_end/panels/media/playerMessagesView.css +8 -8
  304. package/front_end/panels/media/playerPropertiesView.css +6 -6
  305. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +1 -1
  306. package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +9 -9
  307. package/front_end/panels/network/NetworkDataGridNode.ts +1 -0
  308. package/front_end/panels/network/NetworkPanel.ts +9 -4
  309. package/front_end/panels/network/RequestConditionsDrawer.ts +12 -12
  310. package/front_end/panels/network/RequestPayloadView.ts +78 -26
  311. package/front_end/panels/network/binaryResourceView.css +1 -1
  312. package/front_end/panels/network/components/EditableSpan.css +3 -3
  313. package/front_end/panels/network/components/HeaderSectionRow.css +14 -14
  314. package/front_end/panels/network/components/RequestHeaderSection.css +7 -7
  315. package/front_end/panels/network/components/RequestHeadersView.css +18 -18
  316. package/front_end/panels/network/components/RequestTrustTokensView.css +1 -1
  317. package/front_end/panels/network/network-meta.ts +9 -9
  318. package/front_end/panels/network/networkConfigView.css +11 -11
  319. package/front_end/panels/network/networkLogView.css +35 -35
  320. package/front_end/panels/network/networkManageCustomHeadersView.css +1 -1
  321. package/front_end/panels/network/networkPanel.css +7 -7
  322. package/front_end/panels/network/networkTimingTable.css +13 -13
  323. package/front_end/panels/network/requestConditionsDrawer.css +4 -4
  324. package/front_end/panels/network/requestCookiesView.css +5 -5
  325. package/front_end/panels/network/requestDeviceBoundSessionsView.css +1 -1
  326. package/front_end/panels/network/requestHTMLView.css +1 -1
  327. package/front_end/panels/network/requestHeadersTree.css +19 -19
  328. package/front_end/panels/network/requestInitiatorView.css +1 -1
  329. package/front_end/panels/network/requestInitiatorViewTree.css +3 -3
  330. package/front_end/panels/network/requestPayloadTree.css +5 -5
  331. package/front_end/panels/network/requestPayloadView.css +1 -1
  332. package/front_end/panels/network/resourceChunkView.css +3 -3
  333. package/front_end/panels/network/signedExchangeInfoTree.css +6 -6
  334. package/front_end/panels/profiler/heapProfiler.css +15 -15
  335. package/front_end/panels/profiler/profileLauncherView.css +10 -10
  336. package/front_end/panels/recorder/RecordingView.ts +1 -1
  337. package/front_end/panels/recorder/StepEditor.ts +86 -7
  338. package/front_end/panels/recorder/TimelineSection.ts +2 -1
  339. package/front_end/panels/recorder/createRecordingView.css +17 -17
  340. package/front_end/panels/recorder/extensionView.css +5 -5
  341. package/front_end/panels/recorder/injected/RecordingClient.ts +1 -1
  342. package/front_end/panels/recorder/models/SchemaUtils.ts +2 -2
  343. package/front_end/panels/recorder/models/ScreenshotStorage.ts +1 -1
  344. package/front_end/panels/recorder/recorderPanel.css +7 -7
  345. package/front_end/panels/recorder/recordingListView.css +12 -12
  346. package/front_end/panels/recorder/recordingView.css +47 -47
  347. package/front_end/panels/recorder/stepEditor.css +2 -2
  348. package/front_end/panels/recorder/stepView.css +20 -20
  349. package/front_end/panels/recorder/timelineSection.css +9 -9
  350. package/front_end/panels/screencast/screencastView.css +12 -12
  351. package/front_end/panels/search/searchResultsPane.css +10 -10
  352. package/front_end/panels/search/searchView.css +9 -9
  353. package/front_end/panels/security/SecurityPanel.ts +84 -54
  354. package/front_end/panels/security/mainView.css +26 -26
  355. package/front_end/panels/security/originView.css +15 -15
  356. package/front_end/panels/sensors/locationsSettingsTab.css +6 -6
  357. package/front_end/panels/sensors/sensors.css +28 -28
  358. package/front_end/panels/settings/components/syncSection.css +5 -5
  359. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +13 -13
  360. package/front_end/panels/settings/emulation/devicesSettingsTab.css +16 -16
  361. package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +2 -2
  362. package/front_end/panels/settings/keybindsSettingsTab.css +2 -2
  363. package/front_end/panels/settings/settingsScreen.css +5 -5
  364. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  365. package/front_end/panels/sources/breakpointEditDialog.css +9 -9
  366. package/front_end/panels/sources/breakpointsView.css +25 -25
  367. package/front_end/panels/sources/callStackSidebarPane.css +10 -10
  368. package/front_end/panels/sources/components/HeadersView.css +6 -6
  369. package/front_end/panels/sources/debuggerPausedMessage.css +4 -4
  370. package/front_end/panels/sources/dialog.css +2 -2
  371. package/front_end/panels/sources/navigatorTree.css +2 -2
  372. package/front_end/panels/sources/navigatorView.css +2 -2
  373. package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
  374. package/front_end/panels/sources/sourcesNavigator.css +1 -1
  375. package/front_end/panels/sources/sourcesPanel.css +2 -2
  376. package/front_end/panels/sources/sourcesView.css +1 -1
  377. package/front_end/panels/sources/threadsSidebarPane.css +5 -5
  378. package/front_end/panels/sources/watchExpressionsSidebarPane.css +8 -8
  379. package/front_end/panels/timeline/TimelineDetailsView.ts +9 -21
  380. package/front_end/panels/timeline/TimelineFlameChartView.ts +3 -5
  381. package/front_end/panels/timeline/TimelineMiniMap.ts +3 -3
  382. package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
  383. package/front_end/panels/timeline/components/breadcrumbsUI.css +3 -3
  384. package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
  385. package/front_end/panels/timeline/components/fieldSettingsDialog.css +13 -13
  386. package/front_end/panels/timeline/components/ignoreListSetting.css +3 -3
  387. package/front_end/panels/timeline/components/liveMetricsView.css +39 -39
  388. package/front_end/panels/timeline/components/metricCard.css +20 -20
  389. package/front_end/panels/timeline/components/networkRequestDetails.css +9 -9
  390. package/front_end/panels/timeline/components/networkRequestTooltip.css +14 -14
  391. package/front_end/panels/timeline/components/networkTrackWidget.css +2 -2
  392. package/front_end/panels/timeline/components/originMap.css +4 -4
  393. package/front_end/panels/timeline/components/relatedInsightChips.css +1 -1
  394. package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +4 -4
  395. package/front_end/panels/timeline/components/sidebarInsightsTab.css +5 -5
  396. package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
  397. package/front_end/panels/timeline/components/timelineSummary.css +4 -4
  398. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +4 -4
  399. package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
  400. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +6 -6
  401. package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
  402. package/front_end/panels/timeline/thirdPartyTreeView.css +5 -5
  403. package/front_end/panels/timeline/timeline-meta.ts +0 -6
  404. package/front_end/panels/timeline/timelineDetailsView.css +11 -11
  405. package/front_end/panels/timeline/timelinePanel.css +20 -20
  406. package/front_end/panels/timeline/timelineTreeView.css +8 -8
  407. package/front_end/panels/webauthn/webauthnPane.css +6 -6
  408. package/front_end/panels/whats_new/ReleaseNoteText.ts +2 -2
  409. package/front_end/third_party/chromium/README.chromium +1 -1
  410. package/front_end/third_party/i18n/i18n-impl.ts +1 -1
  411. package/front_end/third_party/puppeteer/README.chromium +2 -2
  412. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +15 -1
  413. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +42 -8
  414. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts +4 -0
  415. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
  416. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +15 -2
  417. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
  418. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts +14 -1
  419. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
  420. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js +23 -1
  421. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
  422. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  423. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  424. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  425. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  426. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
  427. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +77 -6
  428. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
  429. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  430. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  431. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
  432. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  433. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  434. package/front_end/third_party/puppeteer/package/lib/types.d.ts +15 -1
  435. package/front_end/third_party/puppeteer/package/package.json +2 -2
  436. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +16 -2
  437. package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +36 -1
  438. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  439. package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +86 -6
  440. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  441. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  442. package/front_end/third_party/web-vitals/README.chromium +2 -2
  443. package/front_end/third_party/web-vitals/package/README.md +22 -7
  444. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +6 -2
  445. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.d.ts +2 -2
  446. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +30 -3
  447. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.d.ts +14 -0
  448. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.js +19 -13
  449. package/front_end/third_party/web-vitals/package/dist/modules/lib/bindReporter.d.ts +1 -1
  450. package/front_end/third_party/web-vitals/package/dist/modules/lib/doubleRAF.js +1 -1
  451. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +3 -3
  452. package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.js +3 -1
  453. package/front_end/third_party/web-vitals/package/dist/modules/types/lcp.d.ts +15 -1
  454. package/front_end/third_party/web-vitals/package/package.json +1 -2
  455. package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +9 -2
  456. package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +36 -5
  457. package/front_end/third_party/web-vitals/package/src/lib/InteractionManager.ts +21 -15
  458. package/front_end/third_party/web-vitals/package/src/lib/doubleRAF.ts +1 -1
  459. package/front_end/third_party/web-vitals/package/src/lib/softNavs.ts +4 -1
  460. package/front_end/third_party/web-vitals/package/src/types/lcp.ts +16 -1
  461. package/front_end/third_party/web-vitals/rebuild.sh +3 -3
  462. package/front_end/ui/comments/CommentAnchorResolver.ts +15 -4
  463. package/front_end/ui/comments/commentsOverlay.css +6 -5
  464. package/front_end/ui/components/adorners/Adorner.ts +1 -1
  465. package/front_end/ui/components/adorners/adorner.css +6 -6
  466. package/front_end/ui/components/buttons/FloatingButton.ts +1 -1
  467. package/front_end/ui/components/buttons/button.css +9 -9
  468. package/front_end/ui/components/buttons/floatingButton.css +2 -2
  469. package/front_end/ui/components/buttons/textButton.css +12 -12
  470. package/front_end/ui/components/dialogs/Dialog.ts +1 -1
  471. package/front_end/ui/components/dialogs/dialog.css +1 -1
  472. package/front_end/ui/components/diff_view/diffView.css +3 -3
  473. package/front_end/ui/components/expandable_list/expandableList.css +9 -9
  474. package/front_end/ui/components/highlighting/HighlightElement.ts +1 -1
  475. package/front_end/ui/components/highlighting/HighlightManager.ts +4 -0
  476. package/front_end/ui/components/icon_button/iconButton.css +2 -2
  477. package/front_end/ui/components/input/checkbox.css +8 -8
  478. package/front_end/ui/components/input/textInput.css +3 -3
  479. package/front_end/ui/components/issue_counter/issueLinkIcon.css +2 -2
  480. package/front_end/ui/components/linkifier/linkifierImpl.css +1 -1
  481. package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +1 -1
  482. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +1 -1
  483. package/front_end/ui/components/markdown_view/codeBlock.css +2 -2
  484. package/front_end/ui/components/markdown_view/markdownView.css +7 -7
  485. package/front_end/ui/components/menus/menuGroup.css +2 -2
  486. package/front_end/ui/components/menus/menuItem.css +2 -2
  487. package/front_end/ui/components/menus/selectMenu.css +2 -2
  488. package/front_end/ui/components/menus/selectMenuButton.css +4 -4
  489. package/front_end/ui/components/panel_feedback/panelFeedback.css +15 -15
  490. package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
  491. package/front_end/ui/components/panel_introduction_steps/panelIntroductionSteps.css +7 -7
  492. package/front_end/ui/components/report_view/report.css +3 -3
  493. package/front_end/ui/components/report_view/reportSectionDivider.css +1 -1
  494. package/front_end/ui/components/report_view/reportValue.css +1 -1
  495. package/front_end/ui/components/request_link_icon/requestLinkIcon.css +2 -2
  496. package/front_end/ui/components/settings/settingCheckbox.css +6 -6
  497. package/front_end/ui/components/text_editor/TextEditor.ts +3 -1
  498. package/front_end/ui/components/text_editor/config.ts +16 -4
  499. package/front_end/ui/kit/icons/icon.css +4 -4
  500. package/front_end/ui/kit/link/link.css +1 -1
  501. package/front_end/ui/legacy/ActionRegistration.ts +23 -23
  502. package/front_end/ui/legacy/Dialog.ts +1 -1
  503. package/front_end/ui/legacy/DockController.ts +3 -3
  504. package/front_end/ui/legacy/EmptyWidget.ts +13 -34
  505. package/front_end/ui/legacy/FilterBar.ts +4 -4
  506. package/front_end/ui/legacy/Infobar.ts +2 -2
  507. package/front_end/ui/legacy/InspectorDrawerView.ts +6 -6
  508. package/front_end/ui/legacy/InspectorView.ts +19 -26
  509. package/front_end/ui/legacy/ListWidget.ts +7 -7
  510. package/front_end/ui/legacy/PlusButton.ts +1 -3
  511. package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +6 -6
  512. package/front_end/ui/legacy/SearchableView.ts +16 -16
  513. package/front_end/ui/legacy/SoftContextMenu.ts +8 -8
  514. package/front_end/ui/legacy/SoftDropDown.ts +1 -1
  515. package/front_end/ui/legacy/SuggestBox.ts +2 -2
  516. package/front_end/ui/legacy/TabbedPane.ts +10 -10
  517. package/front_end/ui/legacy/TargetCrashedScreen.ts +2 -2
  518. package/front_end/ui/legacy/Toolbar.ts +5 -5
  519. package/front_end/ui/legacy/Treeoutline.ts +1 -1
  520. package/front_end/ui/legacy/UIUtils.ts +80 -20
  521. package/front_end/ui/legacy/ViewManager.ts +1 -1
  522. package/front_end/ui/legacy/ViewRegistration.ts +7 -7
  523. package/front_end/ui/legacy/Widget.ts +5 -5
  524. package/front_end/ui/legacy/checkboxTextLabel.css +3 -3
  525. package/front_end/ui/legacy/components/color_picker/ColorFormatSpec.ts +16 -0
  526. package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +1 -0
  527. package/front_end/ui/legacy/components/color_picker/spectrum.css +90 -90
  528. package/front_end/ui/legacy/components/cookie_table/cookiesTable.css +1 -1
  529. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +26 -28
  530. package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +3 -7
  531. package/front_end/ui/legacy/components/inline_editor/bezierEditor.css +13 -13
  532. package/front_end/ui/legacy/components/inline_editor/colorSwatch.css +7 -7
  533. package/front_end/ui/legacy/components/inline_editor/cssAngleEditor.css +5 -5
  534. package/front_end/ui/legacy/components/inline_editor/cssShadowEditor.css +18 -18
  535. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +104 -86
  536. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +8 -6
  537. package/front_end/ui/legacy/components/object_ui/objectPopover.css +4 -4
  538. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +6 -6
  539. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +28 -11
  540. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +0 -4
  541. package/front_end/ui/legacy/components/perf_ui/chartViewport.css +4 -4
  542. package/front_end/ui/legacy/components/perf_ui/filmStripView.css +6 -6
  543. package/front_end/ui/legacy/components/perf_ui/flameChart.css +7 -7
  544. package/front_end/ui/legacy/components/perf_ui/overviewGrid.css +11 -11
  545. package/front_end/ui/legacy/components/perf_ui/pieChart.css +6 -6
  546. package/front_end/ui/legacy/components/perf_ui/timelineGrid.css +5 -5
  547. package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +3 -3
  548. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +1 -1
  549. package/front_end/ui/legacy/components/source_frame/imageView.css +1 -1
  550. package/front_end/ui/legacy/components/source_frame/jsonView.css +1 -1
  551. package/front_end/ui/legacy/components/source_frame/resourceSourceFrame.css +1 -1
  552. package/front_end/ui/legacy/components/source_frame/xmlTree.css +3 -3
  553. package/front_end/ui/legacy/components/utils/imagePreview.css +1 -1
  554. package/front_end/ui/legacy/components/utils/jsUtils.css +10 -10
  555. package/front_end/ui/legacy/dropTarget.css +2 -2
  556. package/front_end/ui/legacy/emptyWidget.css +6 -0
  557. package/front_end/ui/legacy/filter.css +19 -19
  558. package/front_end/ui/legacy/infobar.css +2 -2
  559. package/front_end/ui/legacy/inspectorCommon.css +67 -67
  560. package/front_end/ui/legacy/inspectorDrawerTabbedPane.css +1 -1
  561. package/front_end/ui/legacy/listWidget.css +5 -5
  562. package/front_end/ui/legacy/progressIndicator.css +4 -4
  563. package/front_end/ui/legacy/reportView.css +7 -7
  564. package/front_end/ui/legacy/searchableView.css +5 -5
  565. package/front_end/ui/legacy/smallBubble.css +3 -3
  566. package/front_end/ui/legacy/softContextMenu.css +4 -4
  567. package/front_end/ui/legacy/softDropDownButton.css +1 -1
  568. package/front_end/ui/legacy/splitWidget.css +9 -31
  569. package/front_end/ui/legacy/suggestBox.css +4 -4
  570. package/front_end/ui/legacy/tabbedPane.css +17 -17
  571. package/front_end/ui/legacy/textPrompt.css +2 -2
  572. package/front_end/ui/legacy/toolbar.css +4 -4
  573. package/front_end/ui/legacy/treeoutline.css +14 -14
  574. package/front_end/ui/legacy/viewContainers.css +6 -6
  575. package/front_end/ui/settings/ConsoleSettings.ts +34 -0
  576. package/front_end/ui/visual_logging/KnownContextValues.ts +12 -0
  577. package/inspector_overlay/common.ts +12 -12
  578. package/inspector_overlay/css_grid_label_helpers.ts +16 -17
  579. package/inspector_overlay/drag_resize_handler.ts +2 -2
  580. package/inspector_overlay/highlight_common.ts +11 -13
  581. package/inspector_overlay/highlight_container_query.ts +2 -2
  582. package/inspector_overlay/highlight_flex_common.ts +6 -7
  583. package/inspector_overlay/highlight_grid_common.ts +3 -3
  584. package/inspector_overlay/highlight_isolated_element.ts +12 -3
  585. package/inspector_overlay/highlight_scroll_snap.ts +2 -2
  586. package/inspector_overlay/loadCSS.rollup.js +0 -1
  587. package/inspector_overlay/testing/InspectorOverlayHelpers.ts +13 -13
  588. package/inspector_overlay/tool_green_dev_anchors.ts +3 -3
  589. package/inspector_overlay/tool_highlight.ts +9 -9
  590. package/inspector_overlay/tool_paused.ts +4 -4
  591. package/inspector_overlay/tool_persistent.ts +11 -11
  592. package/inspector_overlay/tool_screenshot.ts +7 -7
  593. package/inspector_overlay/tool_source_order.ts +4 -4
  594. package/inspector_overlay/tool_viewport_size.ts +3 -3
  595. package/inspector_overlay/tool_window_controls.ts +4 -4
  596. package/mcp/mcp.ts +1 -0
  597. package/package.json +2 -2
  598. package/front_end/generated/protocol-tsconfig.json +0 -10
  599. package/front_end/panels/js_timeline/DIR_METADATA +0 -3
  600. package/front_end/panels/js_timeline/js_timeline-meta.ts +0 -193
  601. package/front_end/panels/js_timeline/js_timeline.ts +0 -1
  602. /package/front_end/entrypoints/{formatter_worker/FormatterActions.ts → formatter_actions/formatter_actions.ts} +0 -0
@@ -1,9 +1,9 @@
1
1
  // Copyright 2019 The Chromium Authors
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
- /* eslint-disable @devtools/no-imperative-dom-api */
5
4
 
6
5
  import '../../ui/legacy/legacy.js';
6
+ import '../../ui/legacy/components/data_grid/data_grid.js';
7
7
 
8
8
  import type * as Common from '../../core/common/common.js';
9
9
  import * as i18n from '../../core/i18n/i18n.js';
@@ -13,9 +13,7 @@ import * as Protocol from '../../generated/protocol.js';
13
13
  import * as Bindings from '../../models/bindings/bindings.js';
14
14
  import * as Workspace from '../../models/workspace/workspace.js';
15
15
  import * as Buttons from '../../ui/components/buttons/buttons.js';
16
- import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
17
- // eslint-disable-next-line @devtools/es-modules-import
18
- import emptyWidgetStyles from '../../ui/legacy/emptyWidget.css.js';
16
+ import * as Input from '../../ui/components/input/input.js';
19
17
  import * as UI from '../../ui/legacy/legacy.js';
20
18
  import {html, render} from '../../ui/lit/lit.js';
21
19
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
@@ -141,24 +139,183 @@ const UIStrings = {
141
139
  } as const;
142
140
  const str_ = i18n.i18n.registerUIStrings('panels/application/BackgroundServiceView.ts', UIStrings);
143
141
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
144
- export class BackgroundServiceView extends UI.Widget.VBox {
145
- private readonly serviceName: Protocol.BackgroundService.ServiceName;
146
- private readonly model: BackgroundServiceModel;
147
- private readonly serviceWorkerManager: SDK.ServiceWorkerManager.ServiceWorkerManager|null;
148
- private readonly securityOriginManager: SDK.SecurityOriginManager.SecurityOriginManager;
149
- private readonly storageKeyManager: SDK.StorageKeyManager.StorageKeyManager;
150
- private recordAction: UI.ActionRegistration.Action;
151
- private recordButton!: UI.Toolbar.ToolbarToggle;
152
- private originCheckbox!: UI.Toolbar.ToolbarCheckbox;
153
- private storageKeyCheckbox!: UI.Toolbar.ToolbarCheckbox;
154
- private saveButton!: UI.Toolbar.ToolbarButton;
155
- private readonly toolbar: UI.Toolbar.Toolbar;
156
- private readonly splitWidget: UI.SplitWidget.SplitWidget;
157
- private readonly dataGrid: DataGrid.DataGrid.DataGridImpl<EventData>;
158
- private readonly previewPanel: UI.Widget.VBox;
142
+
143
+ export interface ViewInput {
144
+ serviceName: Protocol.BackgroundService.ServiceName;
145
+ isRecording: boolean;
146
+ selectedEvent: EventData|null;
147
+ events: EventData[];
148
+ onClear: () => void;
149
+ onSave: () => void;
150
+ toggleRecording: () => void;
151
+ onSelectEvent: (event: EventData) => void;
152
+ onOriginCheckboxChanged: (event: Event) => void;
153
+ onStorageKeyCheckboxChanged: (event: Event) => void;
154
+ isOriginCheckboxChecked: boolean;
155
+ isStorageKeyCheckboxChecked: boolean;
156
+ createLearnMoreLink: () => Platform.DevToolsPath.UrlString;
157
+ }
158
+
159
+ type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
160
+
161
+ export const DEFAULT_VIEW = (input: ViewInput, output: undefined, target: HTMLElement): void => {
162
+ const recordShortcuts =
163
+ UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction('background-service.toggle-recording')[0];
164
+ const startRecordingText = i18nString(UIStrings.startRecordingToDebug, {
165
+ PH1: i18nString(UIStrings.startRecordingEvents),
166
+ PH2: recordShortcuts ? recordShortcuts.title() : '',
167
+ });
168
+ const featureName = BackgroundServiceView.getUIString(input.serviceName).toLowerCase();
169
+
170
+ // Toolbar state
171
+ const buttonTooltip =
172
+ input.isRecording ? i18nString(UIStrings.stopRecordingEvents) : i18nString(UIStrings.startRecordingEvents);
173
+
174
+ const dataGridTemplate = html`
175
+ <table>
176
+ <tr>
177
+ <th id="id" weight="1">${'#' as Common.UIString.LocalizedString}</th>
178
+ <th id="timestamp" weight="7">${i18nString(UIStrings.timestamp)}</th>
179
+ <th id="event-name" weight="8">${i18nString(UIStrings.event)}</th>
180
+ <th id="origin" weight="8">${i18nString(UIStrings.origin)}</th>
181
+ <th id="storage-key" weight="8">${i18nString(UIStrings.storageKey)}</th>
182
+ <th id="sw-scope" weight="4">${i18nString(UIStrings.swScope)}</th>
183
+ <th id="instance-id" weight="8">${i18nString(UIStrings.instanceId)}</th>
184
+ </tr>
185
+ ${input.events.map(event => html`
186
+ <tr @select=${() => input.onSelectEvent(event)}
187
+ class=${event === input.selectedEvent ? 'selected' : ''}
188
+ ?selected=${event === input.selectedEvent}>
189
+ <td>${event.id}</td>
190
+ <td>${event.timestamp}</td>
191
+ <td>${event['event-name']}</td>
192
+ <td>${event.origin}</td>
193
+ <td>${event['storage-key']}</td>
194
+ <td>${event['sw-scope']}</td>
195
+ <td>${event['instance-id']}</td>
196
+ </tr>
197
+ `)}
198
+ </table>
199
+ `;
200
+
201
+ // clang-format off
202
+ render(html`
203
+ <style>${backgroundServiceViewStyles}</style>
204
+ <style>${Input.checkboxStyles}</style>
205
+ <div class="background-service-view">
206
+ <devtools-toolbar class="background-service-toolbar" jslog=${VisualLogging.toolbar()}>
207
+ <devtools-button title=${buttonTooltip}
208
+ class="toolbar-button"
209
+ .iconName=${'record-start'}
210
+ .toggledIconName=${'record-stop'}
211
+ .toggleType=${Buttons.Button.ToggleType.PRIMARY}
212
+ .toggled=${input.isRecording}
213
+ @click=${input.toggleRecording}
214
+ .variant=${Buttons.Button.Variant.TOOLBAR}
215
+ .jslogContext=${'background-service.toggle-recording'}></devtools-button>
216
+ <devtools-button title=${i18nString(UIStrings.clear)} @click=${input.onClear}
217
+ class="toolbar-button"
218
+ .iconName=${'clear'} .variant=${Buttons.Button.Variant.TOOLBAR}
219
+ .jslogContext=${'background-service.clear'}></devtools-button>
220
+ <div class="toolbar-divider"></div>
221
+ <devtools-button title=${i18nString(UIStrings.saveEvents)}
222
+ class="toolbar-button"
223
+ @click=${input.onSave}
224
+ .disabled=${input.events.length === 0}
225
+ .iconName=${'download'} .variant=${Buttons.Button.Variant.TOOLBAR}
226
+ .jslogContext=${'background-service.save-events'}></devtools-button>
227
+ <div class="toolbar-divider"></div>
228
+ <label title=${i18nString(UIStrings.showEventsFromOtherDomains)} class="checkbox-label"
229
+ jslog=${VisualLogging.toggle('show-events-from-other-domains').track({click: true})}
230
+ >
231
+ <input type="checkbox" .checked=${input.isOriginCheckboxChecked} @change=${input.onOriginCheckboxChanged}>
232
+ ${i18nString(UIStrings.showEventsFromOtherDomains)}
233
+ </label>
234
+ <label title=${i18nString(UIStrings.showEventsForOtherStorageKeys)} class="checkbox-label"
235
+ jslog=${VisualLogging.toggle('show-events-from-other-partitions').track({click: true})}
236
+ >
237
+ <input type="checkbox" .checked=${input.isStorageKeyCheckboxChecked}
238
+ @change=${input.onStorageKeyCheckboxChanged}
239
+ >
240
+ ${i18nString(UIStrings.showEventsForOtherStorageKeys)}
241
+ </label>
242
+ </devtools-toolbar>
243
+ ${input.events.length === 0 ? (input.isRecording ? html`
244
+ ${UI.Widget.widget(UI.EmptyWidget.EmptyWidget, {
245
+ header: i18nString(UIStrings.recordingSActivity, {PH1: featureName}),
246
+ text: i18nString(UIStrings.devtoolsWillRecordAllSActivity, {PH1: featureName}),
247
+ })}
248
+ ` : html`
249
+ <devtools-widget ${UI.Widget.widget(UI.EmptyWidget.EmptyWidget, {
250
+ header: i18nString(UIStrings.noRecording),
251
+ text: startRecordingText,
252
+ link: input.createLearnMoreLink(),
253
+ })}>
254
+ <devtools-button class="start-recording-button" .variant=${Buttons.Button.Variant.TONAL} jslogContext=${'start-recording'} @click=${input.toggleRecording}>
255
+ ${i18nString(UIStrings.startRecordingEvents)}
256
+ </devtools-button>
257
+ </devtools-widget>
258
+ `) : html`
259
+ <devtools-split-view sidebar-position="second" direction="row">
260
+ <div slot="main" class="data-grid-container">
261
+ <devtools-data-grid class="data-grid" striped
262
+ name=${i18nString(UIStrings.backgroundServices)}
263
+ style="outline: none;"
264
+ >
265
+ ${dataGridTemplate}
266
+ </devtools-data-grid>
267
+ </div>
268
+ <div slot="sidebar" class="preview-panel empty-state-container"
269
+ jslog=${VisualLogging.pane('preview').track({resize: true})}
270
+ >
271
+ ${input.selectedEvent ? html`
272
+ <div class="background-service-metadata" jslog=${VisualLogging.section('metadata')}>
273
+ ${input.selectedEvent.eventMetadata.length > 0 ? input.selectedEvent.eventMetadata.map(entry => html`
274
+ <div class="background-service-metadata-entry">
275
+ <div class="background-service-metadata-name">${entry.key}: </div>${
276
+ entry.value ?
277
+ html`<div class="background-service-metadata-value source-code">${entry.value}</div>` :
278
+ html`<div class="background-service-metadata-value background-service-empty-value">${i18nString(UIStrings.empty)}</div>`}
279
+ </div>
280
+ `) : html`
281
+ <div class="background-service-metadata-entry">
282
+ <div class="background-service-metadata-name background-service-empty-value">${i18nString(UIStrings.noMetadataForThisEvent)}</div>
283
+ </div>
284
+ `}
285
+ </div>
286
+ ` : html`
287
+ ${UI.Widget.widget(UI.EmptyWidget.EmptyWidget, {
288
+ header: i18nString(UIStrings.noEventSelected),
289
+ text: i18nString(UIStrings.selectAnEventToViewMetadata),
290
+ })}
291
+ `}
292
+ </div>
293
+ </devtools-split-view>
294
+ `}
295
+ </div>
296
+ `, target, {
297
+ container: {
298
+ attributes: {
299
+ jslog: `${VisualLogging.pane().context(Platform.StringUtilities.toKebabCase(input.serviceName))}`,
300
+ },
301
+ },
302
+ });
303
+ // clang-format on
304
+ };
305
+
306
+ export class BackgroundServiceView extends UI.Widget.Widget {
307
+ #serviceName?: Protocol.BackgroundService.ServiceName;
308
+ #model?: BackgroundServiceModel;
309
+ #serviceWorkerManager?: SDK.ServiceWorkerManager.ServiceWorkerManager;
310
+ #securityOriginManager?: SDK.SecurityOriginManager.SecurityOriginManager;
311
+ #storageKeyManager?: SDK.StorageKeyManager.StorageKeyManager;
312
+
159
313
  #isRecording = false;
160
- #selectedEventNode: EventDataNode|null = null;
161
- private preview: UI.Widget.Widget|null;
314
+ #selectedEvent: EventData|null = null;
315
+ #events: EventData[] = [];
316
+ #isOriginCheckboxChecked = false;
317
+ #isStorageKeyCheckboxChecked = false;
318
+ readonly #view: View;
162
319
 
163
320
  static getUIString(serviceName: string): string {
164
321
  switch (serviceName) {
@@ -179,103 +336,65 @@ export class BackgroundServiceView extends UI.Widget.VBox {
179
336
  }
180
337
  }
181
338
 
182
- constructor(serviceName: Protocol.BackgroundService.ServiceName, model: BackgroundServiceModel) {
183
- super({
184
- jslog: `${VisualLogging.pane().context(Platform.StringUtilities.toKebabCase(serviceName))}`,
185
- useShadowDom: true,
186
- });
187
- this.registerRequiredCSS(emptyWidgetStyles, backgroundServiceViewStyles);
188
-
189
- this.serviceName = serviceName;
190
-
191
- this.model = model;
192
- this.model.addEventListener(Events.RecordingStateChanged, this.onRecordingStateChanged, this);
193
- this.model.addEventListener(Events.BackgroundServiceEventReceived, this.onEventReceived, this);
194
- this.model.enable(this.serviceName);
339
+ constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
340
+ super(element);
341
+ this.#view = view;
342
+ }
195
343
 
196
- this.serviceWorkerManager = this.model.target().model(SDK.ServiceWorkerManager.ServiceWorkerManager);
344
+ get serviceName(): Protocol.BackgroundService.ServiceName|undefined {
345
+ return this.#serviceName;
346
+ }
197
347
 
198
- this.securityOriginManager = this.model.target().model(SDK.SecurityOriginManager.SecurityOriginManager) as
199
- SDK.SecurityOriginManager.SecurityOriginManager;
200
- if (!this.securityOriginManager) {
201
- throw new Error('SecurityOriginManager instance is missing');
348
+ set serviceName(serviceName: Protocol.BackgroundService.ServiceName) {
349
+ if (this.#serviceName === serviceName) {
350
+ return;
202
351
  }
203
- this.securityOriginManager.addEventListener(
204
- SDK.SecurityOriginManager.Events.MainSecurityOriginChanged, () => this.onOriginChanged());
205
-
206
- this.storageKeyManager =
207
- this.model.target().model(SDK.StorageKeyManager.StorageKeyManager) as SDK.StorageKeyManager.StorageKeyManager;
208
- if (!this.storageKeyManager) {
209
- throw new Error('StorageKeyManager instance is missing');
352
+ this.#serviceName = serviceName;
353
+ if (this.#model) {
354
+ this.#model.enable(this.#serviceName);
210
355
  }
211
- this.storageKeyManager.addEventListener(
212
- SDK.StorageKeyManager.Events.MAIN_STORAGE_KEY_CHANGED, () => this.onStorageKeyChanged());
213
-
214
- this.recordAction = UI.ActionRegistry.ActionRegistry.instance().getAction('background-service.toggle-recording');
215
-
216
- this.toolbar = this.contentElement.createChild('devtools-toolbar', 'background-service-toolbar');
217
- this.toolbar.setAttribute('jslog', `${VisualLogging.toolbar()}`);
218
- this.setupToolbar();
219
-
220
- /**
221
- * This will contain the DataGrid for displaying events, and a panel at the bottom for showing
222
- * extra metadata related to the selected event.
223
- */
224
- this.splitWidget = new UI.SplitWidget.SplitWidget(/* isVertical= */ false, /* secondIsSidebar= */ true);
225
- this.splitWidget.show(this.contentElement);
226
-
227
- this.dataGrid = this.createDataGrid();
228
-
229
- this.previewPanel = new UI.Widget.VBox();
230
- this.previewPanel.element.setAttribute('jslog', `${VisualLogging.pane('preview').track({resize: true})}`);
231
-
232
- this.preview = null;
233
-
234
- this.splitWidget.setMainWidget(this.dataGrid.asWidget());
235
- this.splitWidget.setSidebarWidget(this.previewPanel);
236
- this.splitWidget.hideMain();
237
-
238
- this.performUpdate();
356
+ this.requestUpdate();
239
357
  }
240
358
 
241
- getDataGrid(): DataGrid.DataGrid.DataGridImpl<EventData> {
242
- return this.dataGrid;
359
+ get model(): BackgroundServiceModel|undefined {
360
+ return this.#model;
243
361
  }
244
362
 
245
- /**
246
- * Creates the toolbar UI element.
247
- */
248
- private setupToolbar(): void {
249
- this.toolbar.wrappable = true;
250
- this.recordButton = (UI.Toolbar.Toolbar.createActionButton(this.recordAction) as UI.Toolbar.ToolbarToggle);
251
- this.recordButton.toggleOnClick(false);
252
- this.toolbar.appendToolbarItem(this.recordButton);
253
-
254
- const clearButton =
255
- new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clear), 'clear', undefined, 'background-service.clear');
256
- clearButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => this.clearEvents());
257
- this.toolbar.appendToolbarItem(clearButton);
258
-
259
- this.toolbar.appendSeparator();
363
+ set model(model: BackgroundServiceModel) {
364
+ if (this.#model === model) {
365
+ return;
366
+ }
367
+ if (this.#model) {
368
+ this.#model.removeEventListener(Events.RecordingStateChanged, this.onRecordingStateChanged, this);
369
+ this.#model.removeEventListener(Events.BackgroundServiceEventReceived, this.onEventReceived, this);
370
+ }
371
+ this.#model = model;
372
+ this.#model.addEventListener(Events.RecordingStateChanged, this.onRecordingStateChanged, this);
373
+ this.#model.addEventListener(Events.BackgroundServiceEventReceived, this.onEventReceived, this);
374
+ if (this.#serviceName) {
375
+ this.#model.enable(this.#serviceName);
376
+ }
260
377
 
261
- this.saveButton = new UI.Toolbar.ToolbarButton(
262
- i18nString(UIStrings.saveEvents), 'download', undefined, 'background-service.save-events');
263
- this.saveButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, _event => {
264
- void this.saveToFile();
265
- });
266
- this.toolbar.appendToolbarItem(this.saveButton);
378
+ this.#serviceWorkerManager = this.#model.target().model(SDK.ServiceWorkerManager.ServiceWorkerManager) ?? undefined;
267
379
 
268
- this.toolbar.appendSeparator();
380
+ this.#securityOriginManager =
381
+ this.#model.target().model(SDK.SecurityOriginManager.SecurityOriginManager) ?? undefined;
382
+ if (this.#securityOriginManager) {
383
+ this.#securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.MainSecurityOriginChanged,
384
+ () => this.onOriginChanged());
385
+ }
269
386
 
270
- this.originCheckbox = new UI.Toolbar.ToolbarCheckbox(
271
- i18nString(UIStrings.showEventsFromOtherDomains), i18nString(UIStrings.showEventsFromOtherDomains),
272
- () => this.refreshView(), 'show-events-from-other-domains');
273
- this.toolbar.appendToolbarItem(this.originCheckbox);
387
+ this.#storageKeyManager = this.#model.target().model(SDK.StorageKeyManager.StorageKeyManager) ?? undefined;
388
+ if (this.#storageKeyManager) {
389
+ this.#storageKeyManager.addEventListener(SDK.StorageKeyManager.Events.MAIN_STORAGE_KEY_CHANGED,
390
+ () => this.onStorageKeyChanged());
391
+ }
392
+ this.requestUpdate();
393
+ }
274
394
 
275
- this.storageKeyCheckbox = new UI.Toolbar.ToolbarCheckbox(
276
- i18nString(UIStrings.showEventsForOtherStorageKeys), i18nString(UIStrings.showEventsForOtherStorageKeys),
277
- () => this.refreshView(), 'show-events-from-other-partitions');
278
- this.toolbar.appendToolbarItem(this.storageKeyCheckbox);
395
+ override wasShown(): void {
396
+ super.wasShown();
397
+ this.requestUpdate();
279
398
  }
280
399
 
281
400
  /**
@@ -283,7 +402,10 @@ export class BackgroundServiceView extends UI.Widget.VBox {
283
402
  */
284
403
  private refreshView(): void {
285
404
  this.clearView();
286
- const events = this.model.getEvents(this.serviceName).filter(event => this.acceptEvent(event));
405
+ if (!this.#model || !this.#serviceName) {
406
+ return;
407
+ }
408
+ const events = this.#model.getEvents(this.#serviceName).filter(event => this.acceptEvent(event));
287
409
  for (const event of events) {
288
410
  this.addEvent(event);
289
411
  }
@@ -293,25 +415,26 @@ export class BackgroundServiceView extends UI.Widget.VBox {
293
415
  * Clears the grid and panel.
294
416
  */
295
417
  private clearView(): void {
296
- this.#selectedEventNode = null;
297
- this.dataGrid.rootNode().removeChildren();
298
- this.splitWidget.hideMain();
299
- this.performUpdate();
418
+ this.#selectedEvent = null;
419
+ this.#events = [];
420
+ this.requestUpdate();
300
421
  }
301
422
 
302
423
  /**
303
424
  * Called when the `Toggle Record` button is clicked.
304
425
  */
305
426
  toggleRecording(): void {
427
+ if (!this.#model || !this.#serviceName) {
428
+ return;
429
+ }
306
430
  const isRecording = !this.#isRecording;
307
- this.model.setRecording(isRecording, this.serviceName);
308
- const featureName = BackgroundServiceView.getUIString(this.serviceName).toLowerCase();
431
+ this.#model.setRecording(isRecording, this.#serviceName);
432
+ const featureName = BackgroundServiceView.getUIString(this.#serviceName).toLowerCase();
309
433
 
310
434
  if (isRecording) {
311
435
  UI.ARIAUtils.LiveAnnouncer.alert(
312
436
  i18nString(UIStrings.recordingSActivity, {PH1: featureName}) + ' ' +
313
437
  i18nString(UIStrings.devtoolsWillRecordAllSActivity, {PH1: featureName}));
314
- this.preview?.focus();
315
438
  }
316
439
  }
317
440
 
@@ -319,12 +442,14 @@ export class BackgroundServiceView extends UI.Widget.VBox {
319
442
  * Called when the `Clear` button is clicked.
320
443
  */
321
444
  private clearEvents(): void {
322
- this.model.clearEvents(this.serviceName);
445
+ if (this.#model && this.#serviceName) {
446
+ this.#model.clearEvents(this.#serviceName);
447
+ }
323
448
  this.clearView();
324
449
  }
325
450
 
326
451
  private onRecordingStateChanged({data: state}: Common.EventTarget.EventTargetEvent<RecordingState>): void {
327
- if (state.serviceName !== this.serviceName) {
452
+ if (state.serviceName !== this.#serviceName) {
328
453
  return;
329
454
  }
330
455
 
@@ -333,7 +458,7 @@ export class BackgroundServiceView extends UI.Widget.VBox {
333
458
  }
334
459
 
335
460
  this.#isRecording = state.isRecording;
336
- this.performUpdate();
461
+ this.requestUpdate();
337
462
  }
338
463
 
339
464
  private onEventReceived({
@@ -347,14 +472,14 @@ export class BackgroundServiceView extends UI.Widget.VBox {
347
472
 
348
473
  private onOriginChanged(): void {
349
474
  // No need to refresh the view if we are already showing all events.
350
- if (this.originCheckbox.checked()) {
475
+ if (this.#isOriginCheckboxChecked) {
351
476
  return;
352
477
  }
353
478
  this.refreshView();
354
479
  }
355
480
 
356
481
  private onStorageKeyChanged(): void {
357
- if (this.storageKeyCheckbox.checked()) {
482
+ if (this.#isStorageKeyCheckboxChecked) {
358
483
  return;
359
484
  }
360
485
  this.refreshView();
@@ -362,57 +487,9 @@ export class BackgroundServiceView extends UI.Widget.VBox {
362
487
 
363
488
  private addEvent(serviceEvent: Protocol.BackgroundService.BackgroundServiceEvent): void {
364
489
  const data = this.createEventData(serviceEvent);
365
- const dataNode = new EventDataNode(data, serviceEvent.eventMetadata);
366
- this.dataGrid.rootNode().appendChild(dataNode);
367
-
368
- if (this.splitWidget.showMode() !== UI.SplitWidget.ShowMode.BOTH) {
369
- this.splitWidget.showBoth();
370
- }
371
-
372
- if (this.dataGrid.rootNode().children.length === 1) {
373
- this.performUpdate();
374
- }
375
- }
490
+ this.#events.push(data);
376
491
 
377
- private createDataGrid(): DataGrid.DataGrid.DataGridImpl<EventData> {
378
- const columns: DataGrid.DataGrid.ColumnDescriptor[] = [
379
- {id: 'id', title: '#' as Common.UIString.LocalizedString, weight: 1, sortable: false},
380
- {id: 'timestamp', title: i18nString(UIStrings.timestamp), weight: 7, sortable: false},
381
- {id: 'event-name', title: i18nString(UIStrings.event), weight: 8, sortable: false},
382
- {id: 'origin', title: i18nString(UIStrings.origin), weight: 8, sortable: false},
383
- {id: 'storage-key', title: i18nString(UIStrings.storageKey), weight: 8, sortable: false},
384
- {id: 'sw-scope', title: i18nString(UIStrings.swScope), weight: 4, sortable: false},
385
- {id: 'instance-id', title: i18nString(UIStrings.instanceId), weight: 8, sortable: false},
386
- ];
387
- const dataGrid = new DataGrid.DataGrid.DataGridImpl({
388
- displayName: i18nString(UIStrings.backgroundServices),
389
- columns,
390
- });
391
- dataGrid.setStriped(true);
392
-
393
- dataGrid.addEventListener(DataGrid.DataGrid.Events.SELECTED_NODE, event => {
394
- this.#selectedEventNode = event.data as EventDataNode;
395
- this.performUpdate();
396
- });
397
-
398
- return dataGrid;
399
- }
400
-
401
- override performUpdate(): void {
402
- this.#updateToolbar();
403
- this.#updatePreview();
404
- }
405
-
406
- #updateToolbar(): void {
407
- if (this.recordButton) {
408
- this.recordButton.setToggled(this.#isRecording);
409
- const buttonTooltip =
410
- this.#isRecording ? i18nString(UIStrings.stopRecordingEvents) : i18nString(UIStrings.startRecordingEvents);
411
- this.recordButton.setTitle(buttonTooltip, 'background-service.toggle-recording');
412
- }
413
- if (this.saveButton) {
414
- this.saveButton.setEnabled(this.dataGrid.rootNode().children.length > 0);
415
- }
492
+ this.requestUpdate();
416
493
  }
417
494
 
418
495
  /**
@@ -422,21 +499,22 @@ export class BackgroundServiceView extends UI.Widget.VBox {
422
499
  let swScope = '';
423
500
 
424
501
  // Try to get the scope of the Service Worker registration to be more user-friendly.
425
- const registration = this.serviceWorkerManager ?
426
- this.serviceWorkerManager.registrations().get(serviceEvent.serviceWorkerRegistrationId) :
502
+ const registration = this.#serviceWorkerManager ?
503
+ this.#serviceWorkerManager.registrations().get(serviceEvent.serviceWorkerRegistrationId) :
427
504
  undefined;
428
505
  if (registration) {
429
506
  swScope = registration.scopeURL.substr(registration.securityOrigin.length);
430
507
  }
431
508
 
432
509
  return {
433
- id: this.dataGrid.rootNode().children.length + 1,
510
+ id: this.#events.length + 1,
434
511
  timestamp: UI.UIUtils.formatTimestamp(serviceEvent.timestamp * 1000, /* full= */ true),
435
512
  origin: serviceEvent.origin,
436
513
  'storage-key': serviceEvent.storageKey,
437
514
  'sw-scope': swScope,
438
515
  'event-name': serviceEvent.eventName,
439
516
  'instance-id': serviceEvent.instanceId,
517
+ eventMetadata: serviceEvent.eventMetadata.sort((m1, m2) => Platform.StringUtilities.compare(m1.key, m2.key)),
440
518
  };
441
519
  }
442
520
 
@@ -444,11 +522,11 @@ export class BackgroundServiceView extends UI.Widget.VBox {
444
522
  * Filtration function to know whether event should be shown or not.
445
523
  */
446
524
  private acceptEvent(event: Protocol.BackgroundService.BackgroundServiceEvent): boolean {
447
- if (event.service !== this.serviceName) {
525
+ if (event.service !== this.#serviceName) {
448
526
  return false;
449
527
  }
450
528
 
451
- if (this.originCheckbox.checked() || this.storageKeyCheckbox.checked()) {
529
+ if (this.#isOriginCheckboxChecked || this.#isStorageKeyCheckboxChecked) {
452
530
  return true;
453
531
  }
454
532
 
@@ -456,14 +534,14 @@ export class BackgroundServiceView extends UI.Widget.VBox {
456
534
  const origin = event.origin.substr(0, event.origin.length - 1);
457
535
  const storageKey = event.storageKey;
458
536
 
459
- return this.securityOriginManager.securityOrigins().includes(origin) ||
460
- this.storageKeyManager.storageKeys().includes(storageKey);
537
+ return Boolean(this.#securityOriginManager?.securityOrigins().includes(origin) ||
538
+ this.#storageKeyManager?.storageKeys().includes(storageKey));
461
539
  }
462
540
 
463
541
  private createLearnMoreLink(): Platform.DevToolsPath.UrlString {
464
542
  let url = 'https://developer.chrome.com/docs/devtools/javascript/background-services/';
465
543
 
466
- switch (this.serviceName) {
544
+ switch (this.#serviceName) {
467
545
  case Protocol.BackgroundService.ServiceName.BackgroundFetch:
468
546
  url += '#fetch';
469
547
  break;
@@ -483,52 +561,47 @@ export class BackgroundServiceView extends UI.Widget.VBox {
483
561
  return url as Platform.DevToolsPath.UrlString;
484
562
  }
485
563
 
486
- #updatePreview(): void {
487
- if (this.preview) {
488
- this.preview.detach();
489
- }
490
-
491
- if (this.#selectedEventNode) {
492
- this.preview = this.#selectedEventNode.createPreview();
493
- this.preview.show(this.previewPanel.contentElement);
564
+ override performUpdate(): void {
565
+ if (!this.#serviceName || !this.#model) {
494
566
  return;
495
567
  }
496
-
497
- let emptyWidget: UI.EmptyWidget.EmptyWidget;
498
- if (this.dataGrid.rootNode().children.length) {
499
- emptyWidget = new UI.EmptyWidget.EmptyWidget(
500
- i18nString(UIStrings.noEventSelected), i18nString(UIStrings.selectAnEventToViewMetadata));
501
- } else if (this.#isRecording) {
502
- // Inform users that we are recording/waiting for events.
503
- const featureName = BackgroundServiceView.getUIString(this.serviceName).toLowerCase();
504
- emptyWidget = new UI.EmptyWidget.EmptyWidget(
505
- i18nString(UIStrings.recordingSActivity, {PH1: featureName}),
506
- i18nString(UIStrings.devtoolsWillRecordAllSActivity, {PH1: featureName}));
507
- } else {
508
- const recordShortcuts =
509
- UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction('background-service.toggle-recording')[0];
510
- emptyWidget = new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.noRecording),
511
- i18nString(UIStrings.startRecordingToDebug, {
512
- PH1: i18nString(UIStrings.startRecordingEvents),
513
- PH2: recordShortcuts ? recordShortcuts.title() : '',
514
- }));
515
- emptyWidget.link = this.createLearnMoreLink();
516
-
517
- const button = UI.UIUtils.createTextButton(
518
- i18nString(UIStrings.startRecordingEvents), () => this.toggleRecording(),
519
- {jslogContext: 'start-recording', variant: Buttons.Button.Variant.TONAL});
520
- emptyWidget.contentElement.appendChild(button);
521
- }
522
- emptyWidget.setDefaultFocusedElement(emptyWidget.contentElement);
523
- this.preview = emptyWidget;
524
- this.preview.show(this.previewPanel.contentElement);
568
+ const viewInput = {
569
+ serviceName: this.#serviceName,
570
+ isRecording: this.#isRecording,
571
+ selectedEvent: this.#selectedEvent,
572
+ events: this.#events,
573
+ onClear: () => this.clearEvents(),
574
+ onSave: () => void this.saveToFile(),
575
+ onSelectEvent: (event: EventData) => {
576
+ this.#selectedEvent = event;
577
+ this.requestUpdate();
578
+ },
579
+ onOriginCheckboxChanged: (event: Event) => {
580
+ const checkbox = event.target as HTMLInputElement;
581
+ this.#isOriginCheckboxChecked = checkbox.checked;
582
+ this.refreshView();
583
+ },
584
+ onStorageKeyCheckboxChanged: (event: Event) => {
585
+ const checkbox = event.target as HTMLInputElement;
586
+ this.#isStorageKeyCheckboxChecked = checkbox.checked;
587
+ this.refreshView();
588
+ },
589
+ isOriginCheckboxChecked: this.#isOriginCheckboxChecked,
590
+ isStorageKeyCheckboxChecked: this.#isStorageKeyCheckboxChecked,
591
+ toggleRecording: () => this.toggleRecording(),
592
+ createLearnMoreLink: () => this.createLearnMoreLink(),
593
+ };
594
+ this.#view(viewInput, undefined, this.contentElement);
525
595
  }
526
596
 
527
597
  /**
528
598
  * Saves all currently displayed events in a file (JSON format).
529
599
  */
530
600
  private async saveToFile(): Promise<void> {
531
- const fileName = `${this.serviceName}-${Platform.DateUtilities.toISO8601Compact(new Date())}.json` as
601
+ if (!this.#serviceName || !this.#model) {
602
+ return;
603
+ }
604
+ const fileName = `${this.#serviceName}-${Platform.DateUtilities.toISO8601Compact(new Date())}.json` as
532
605
  Platform.DevToolsPath.RawPathString;
533
606
  const stream = new Bindings.FileUtils.FileOutputStream(Workspace.FileManager.FileManager.instance());
534
607
 
@@ -537,48 +610,12 @@ export class BackgroundServiceView extends UI.Widget.VBox {
537
610
  return;
538
611
  }
539
612
 
540
- const events = this.model.getEvents(this.serviceName).filter(event => this.acceptEvent(event));
613
+ const events = this.#model.getEvents(this.#serviceName).filter(event => this.acceptEvent(event));
541
614
  await stream.write(JSON.stringify(events, undefined, 2));
542
615
  void stream.close();
543
616
  }
544
617
  }
545
618
 
546
- export class EventDataNode extends DataGrid.DataGrid.DataGridNode<EventData> {
547
- private readonly eventMetadata: Protocol.BackgroundService.EventMetadata[];
548
-
549
- constructor(data: EventData, eventMetadata: Protocol.BackgroundService.EventMetadata[]) {
550
- super(data);
551
-
552
- this.eventMetadata = eventMetadata.sort((m1, m2) => Platform.StringUtilities.compare(m1.key, m2.key));
553
- }
554
-
555
- createPreview(): UI.Widget.VBox {
556
- const preview = new UI.Widget.VBox();
557
- preview.element.classList.add('background-service-metadata');
558
- preview.element.setAttribute('jslog', `${VisualLogging.section('metadata')}`);
559
-
560
- // clang-format off
561
- // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
562
- render(
563
- html`${this.eventMetadata.length > 0 ? this.eventMetadata.map(entry => html`
564
- <div class="background-service-metadata-entry">
565
- <div class="background-service-metadata-name">${entry.key}: </div>${
566
- entry.value ?
567
- html`<div class="background-service-metadata-value source-code">${entry.value}</div>` :
568
- html`<div class="background-service-metadata-value background-service-empty-value">${i18nString(UIStrings.empty)}</div>`}
569
- </div>
570
- `) : html`
571
- <div class="background-service-metadata-entry">
572
- <div class="background-service-metadata-name background-service-empty-value">${i18nString(UIStrings.noMetadataForThisEvent)}</div>
573
- </div>
574
- `}`,
575
- preview.element, {host: this});
576
- // clang-format on
577
-
578
- return preview;
579
- }
580
- }
581
-
582
619
  export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
583
620
  handleAction(context: UI.Context.Context, actionId: string): boolean {
584
621
  const view = context.flavor(BackgroundServiceView);
@@ -606,4 +643,5 @@ export interface EventData {
606
643
  'sw-scope': string;
607
644
  'event-name': string;
608
645
  'instance-id': string;
646
+ eventMetadata: Protocol.BackgroundService.EventMetadata[];
609
647
  }