chrome-devtools-frontend 1.0.1657855 → 1.0.1661063

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 (370) hide show
  1. package/.agents/skills/evaluate-ai-css-completion/SKILL.md +133 -0
  2. package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +76 -0
  3. package/.agents/skills/migrate-chromium-test/SKILL.md +15 -70
  4. package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +37 -18
  5. package/.agents/skills/version-control/SKILL.md +8 -1
  6. package/AUTHORS +1 -0
  7. package/SECURITY.md +3 -0
  8. package/docs/get_the_code.md +6 -0
  9. package/eslint.config.mjs +7 -0
  10. package/extension-api/ExtensionAPI.d.ts +88 -0
  11. package/front_end/Tests.js +6 -6
  12. package/front_end/core/common/Gzip.ts +12 -5
  13. package/front_end/core/host/AidaClient.ts +35 -9
  14. package/front_end/core/host/GdpClient.ts +10 -7
  15. package/front_end/core/host/InspectorFrontendHost.ts +1 -0
  16. package/front_end/core/host/InspectorFrontendHostStub.ts +2 -0
  17. package/front_end/core/platform/StringUtilities.ts +55 -4
  18. package/front_end/core/sdk/AccessibilityModel.snapshot.txt +17 -0
  19. package/front_end/core/sdk/AccessibilityModel.ts +132 -2
  20. package/front_end/core/sdk/CPUThrottlingManager.ts +10 -5
  21. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +2 -5
  22. package/front_end/core/sdk/ConsoleModel.ts +5 -5
  23. package/front_end/core/sdk/DOMDebuggerModel.ts +7 -1
  24. package/front_end/core/sdk/DOMModel.ts +33 -18
  25. package/front_end/core/sdk/DebuggerModel.ts +4 -4
  26. package/front_end/core/sdk/EventBreakpointsModel.ts +2 -0
  27. package/front_end/core/sdk/FrameManager.ts +1 -0
  28. package/front_end/core/sdk/IsolateManager.ts +1 -0
  29. package/front_end/core/sdk/NetworkManager.ts +59 -11
  30. package/front_end/core/sdk/NetworkRequest.ts +38 -1
  31. package/front_end/core/sdk/OverlayModel.ts +45 -6
  32. package/front_end/core/sdk/PageResourceLoader.ts +2 -0
  33. package/front_end/core/sdk/ResourceTreeModel.ts +6 -7
  34. package/front_end/core/sdk/ScreenCaptureModel.ts +2 -2
  35. package/front_end/core/sdk/ServerTiming.ts +17 -13
  36. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +4 -2
  37. package/front_end/core/sdk/ServiceWorkerManager.ts +19 -5
  38. package/front_end/core/sdk/SourceMap.ts +5 -5
  39. package/front_end/core/sdk/SourceMapManager.ts +3 -2
  40. package/front_end/core/sdk/TargetManager.ts +14 -1
  41. package/front_end/core/sdk/TraceObject.ts +4 -2
  42. package/front_end/core/sdk/sdk-meta.ts +170 -0
  43. package/front_end/design_system_tokens.css +0 -5
  44. package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +5 -2
  45. package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +26 -4
  46. package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +8 -3
  47. package/front_end/entrypoints/inspector_main/InspectorMain.ts +4 -4
  48. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +2 -2
  49. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +36 -37
  50. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +15 -33
  51. package/front_end/entrypoints/js_app/js_app.ts +6 -5
  52. package/front_end/entrypoints/main/GlobalAiButton.ts +4 -4
  53. package/front_end/entrypoints/main/MainImpl.ts +20 -22
  54. package/front_end/entrypoints/main/main-meta.ts +42 -42
  55. package/front_end/entrypoints/node_app/node_app.ts +3 -2
  56. package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
  57. package/front_end/foundation/Universe.ts +44 -1
  58. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  59. package/front_end/generated/SupportedCSSProperties.js +19 -12
  60. package/front_end/generated/protocol.ts +3 -1
  61. package/front_end/models/ai_assistance/AiConversation.ts +19 -17
  62. package/front_end/models/ai_assistance/AiHistoryStorage.ts +37 -14
  63. package/front_end/models/ai_assistance/AiUtils.ts +38 -42
  64. package/front_end/models/ai_assistance/agents/AiAgent.ts +5 -1
  65. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -2
  66. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
  67. package/front_end/models/ai_assistance/agents/StorageAgent.ts +7 -5
  68. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +270 -286
  69. package/front_end/models/ai_assistance/data_formatters/UnitFormatters.ts +20 -0
  70. package/front_end/models/ai_assistance/performance/AICallTree.ts +3 -1
  71. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +3 -2
  72. package/front_end/models/autofill_manager/AutofillManager.ts +3 -1
  73. package/front_end/models/bindings/CompilerScriptMapping.ts +7 -7
  74. package/front_end/models/bindings/ContentProviderBasedProject.ts +4 -4
  75. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +5 -5
  76. package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
  77. package/front_end/models/bindings/NetworkProject.ts +5 -10
  78. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +2 -1
  79. package/front_end/models/bindings/ResourceMapping.ts +3 -4
  80. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -3
  81. package/front_end/models/bindings/ResourceUtils.ts +1 -1
  82. package/front_end/models/bindings/SASSSourceMapping.ts +11 -9
  83. package/front_end/models/bindings/StylesSourceMapping.ts +3 -3
  84. package/front_end/models/bindings/TempFile.ts +8 -3
  85. package/front_end/models/emulation/EmulatedDevices.ts +389 -8
  86. package/front_end/models/extensions/ExtensionAPI.ts +116 -52
  87. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +13 -12
  88. package/front_end/models/formatter/ScriptFormatter.ts +8 -11
  89. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
  90. package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
  91. package/front_end/models/issues_manager/ConnectionAllowlistIssue.ts +1 -1
  92. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +7 -7
  93. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +2 -2
  94. package/front_end/models/issues_manager/CookieIssue.ts +27 -16
  95. package/front_end/models/issues_manager/CorsIssue.ts +3 -3
  96. package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
  97. package/front_end/models/issues_manager/DeprecationIssue.ts +3 -3
  98. package/front_end/models/issues_manager/EmailVerificationRequestIssue.ts +1 -1
  99. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
  100. package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
  101. package/front_end/models/issues_manager/GenericIssue.ts +7 -7
  102. package/front_end/models/issues_manager/HeavyAdIssue.ts +3 -3
  103. package/front_end/models/issues_manager/Issue.ts +11 -12
  104. package/front_end/models/issues_manager/IssueAggregator.ts +0 -9
  105. package/front_end/models/issues_manager/IssueResolver.ts +2 -2
  106. package/front_end/models/issues_manager/IssuesManager.ts +136 -137
  107. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  108. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +3 -3
  109. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  110. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
  111. package/front_end/models/issues_manager/SelectivePermissionsInterventionIssue.ts +2 -2
  112. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +2 -2
  113. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
  114. package/front_end/models/issues_manager/UnencodedDigestIssue.ts +3 -3
  115. package/front_end/models/issues_manager/issues_manager.ts +0 -2
  116. package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
  117. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +5 -0
  118. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +13 -10
  119. package/front_end/models/stack_trace/StackTraceModel.ts +3 -3
  120. package/front_end/models/text_utils/ContentData.ts +27 -0
  121. package/front_end/models/trace/helpers/SamplesIntegrator.ts +21 -5
  122. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +29 -14
  123. package/front_end/models/web_mcp/WebMCPModel.ts +24 -6
  124. package/front_end/models/workspace/IgnoreListManager.ts +6 -6
  125. package/front_end/models/workspace/UISourceCode.ts +3 -3
  126. package/front_end/models/workspace/WorkspaceImpl.ts +10 -1
  127. package/front_end/models/workspace_diff/WorkspaceDiff.ts +10 -4
  128. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +25 -22
  129. package/front_end/panels/ai_assistance/ExportConversation.ts +3 -4
  130. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +3 -3
  131. package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
  132. package/front_end/panels/ai_assistance/components/ChatMessage.ts +9 -1
  133. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +2 -2
  134. package/front_end/panels/animation/AnimationTimeline.ts +17 -19
  135. package/front_end/panels/animation/AnimationUI.ts +5 -5
  136. package/front_end/panels/animation/animation-meta.ts +2 -2
  137. package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -3
  138. package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -6
  139. package/front_end/panels/application/FrameDetailsView.ts +1 -1
  140. package/front_end/panels/application/IndexedDBViews.ts +220 -266
  141. package/front_end/panels/application/OpenedWindowDetailsView.ts +1 -1
  142. package/front_end/panels/application/ResourcesPanel.ts +9 -2
  143. package/front_end/panels/application/ServiceWorkersView.ts +252 -211
  144. package/front_end/panels/application/StorageView.ts +97 -33
  145. package/front_end/panels/application/WebMCPView.ts +53 -44
  146. package/front_end/panels/application/components/AdsView.ts +201 -30
  147. package/front_end/panels/application/components/adsView.css +25 -0
  148. package/front_end/panels/application/indexedDBViews.css +38 -9
  149. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -2
  150. package/front_end/panels/application/preloading/helper/PreloadingForward.ts +2 -1
  151. package/front_end/panels/application/storageView.css +26 -9
  152. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +5 -1
  153. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +8 -6
  154. package/front_end/panels/common/DOMLinkifier.ts +1 -1
  155. package/front_end/panels/common/ExtensionServer.ts +119 -14
  156. package/front_end/panels/console/ConsoleContextSelector.ts +1 -1
  157. package/front_end/panels/console/ConsolePinPane.ts +2 -2
  158. package/front_end/panels/console/ConsolePrompt.ts +2 -2
  159. package/front_end/panels/console/ConsoleView.ts +3 -2
  160. package/front_end/panels/console/PromptBuilder.ts +2 -1
  161. package/front_end/panels/console/SymbolizedErrorWidget.ts +2 -1
  162. package/front_end/panels/console_counters/WarningErrorCounter.ts +2 -2
  163. package/front_end/panels/coverage/CoverageListView.ts +28 -28
  164. package/front_end/panels/coverage/CoverageModel.ts +2 -1
  165. package/front_end/panels/coverage/CoverageView.ts +22 -22
  166. package/front_end/panels/coverage/coverage-meta.ts +5 -5
  167. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +36 -36
  168. package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +1 -1
  169. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +2 -2
  170. package/front_end/panels/css_overview/CSSOverviewStartView.ts +6 -6
  171. package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +6 -6
  172. package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
  173. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  174. package/front_end/panels/elements/AccessibilityTreeUtils.ts +8 -102
  175. package/front_end/panels/elements/AccessibilityTreeView.ts +163 -70
  176. package/front_end/panels/elements/ElementsPanel.ts +17 -11
  177. package/front_end/panels/elements/ElementsTreeElement.ts +4 -1
  178. package/front_end/panels/elements/ElementsTreeOutline.ts +4 -4
  179. package/front_end/panels/elements/LayoutPane.ts +1 -1
  180. package/front_end/panels/elements/MetricsSidebarPane.ts +100 -34
  181. package/front_end/panels/elements/StylePropertiesSection.ts +2 -2
  182. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -2
  183. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  184. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +7 -18
  185. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -2
  186. package/front_end/panels/elements/components/QueryContainer.ts +1 -1
  187. package/front_end/panels/emulation/DeviceModeView.ts +52 -70
  188. package/front_end/panels/issues/AffectedDirectivesView.ts +1 -1
  189. package/front_end/panels/issues/AffectedResourcesView.ts +2 -1
  190. package/front_end/panels/issues/IssueView.ts +0 -2
  191. package/front_end/panels/issues/IssuesPane.ts +1 -8
  192. package/front_end/panels/js_timeline/js_timeline-meta.ts +3 -2
  193. package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
  194. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +3 -3
  195. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -5
  196. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +4 -4
  197. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +2 -2
  198. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
  199. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +3 -3
  200. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +8 -9
  201. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +2 -2
  202. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  203. package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
  204. package/front_end/panels/network/NetworkDataGridNode.ts +124 -36
  205. package/front_end/panels/network/NetworkLogView.ts +9 -1
  206. package/front_end/panels/network/NetworkLogViewColumns.ts +18 -0
  207. package/front_end/panels/network/NetworkPanel.ts +2 -1
  208. package/front_end/panels/network/RequestPayloadView.ts +68 -20
  209. package/front_end/panels/network/RequestPreviewView.ts +7 -1
  210. package/front_end/panels/network/RequestTimingView.ts +95 -127
  211. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  212. package/front_end/panels/network/forward/UIFilter.ts +1 -0
  213. package/front_end/panels/network/requestPayloadView.css +10 -0
  214. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +12 -12
  215. package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
  216. package/front_end/panels/profiler/HeapDetachedElementsView.ts +2 -2
  217. package/front_end/panels/profiler/HeapProfileView.ts +563 -51
  218. package/front_end/panels/profiler/HeapSnapshotView.ts +14 -9
  219. package/front_end/panels/profiler/ProfilesPanel.ts +13 -7
  220. package/front_end/panels/profiler/WritableProfileHeader.ts +152 -0
  221. package/front_end/panels/profiler/profiler.ts +2 -2
  222. package/front_end/panels/recorder/{components/ControlButton.ts → ControlButton.ts} +9 -10
  223. package/front_end/panels/recorder/{components/CreateRecordingView.ts → CreateRecordingView.ts} +59 -58
  224. package/front_end/panels/recorder/ExtensionView.ts +123 -0
  225. package/front_end/panels/recorder/RecorderController.ts +102 -92
  226. package/front_end/panels/recorder/{components/RecordingListView.ts → RecordingListView.ts} +22 -23
  227. package/front_end/panels/recorder/{components/RecordingView.ts → RecordingView.ts} +99 -96
  228. package/front_end/panels/recorder/{components/ReplaySection.ts → ReplaySection.ts} +20 -20
  229. package/front_end/panels/recorder/{components/SelectorPicker.ts → SelectorPicker.ts} +13 -13
  230. package/front_end/panels/recorder/{components/StepEditor.ts → StepEditor.ts} +367 -336
  231. package/front_end/panels/recorder/{components/StepView.ts → StepView.ts} +48 -49
  232. package/front_end/panels/recorder/{components/TimelineSection.ts → TimelineSection.ts} +2 -2
  233. package/front_end/panels/recorder/models/RecorderSettings.ts +2 -2
  234. package/front_end/panels/recorder/recorder-meta.ts +7 -7
  235. package/front_end/panels/recorder/recorder.ts +23 -1
  236. package/front_end/panels/recorder/{components/recordingView.css → recordingView.css} +1 -1
  237. package/front_end/panels/recorder/util/util.ts +113 -0
  238. package/front_end/panels/screencast/ScreencastApp.ts +1 -1
  239. package/front_end/panels/screencast/ScreencastView.ts +12 -12
  240. package/front_end/panels/search/SearchResultsPane.ts +4 -4
  241. package/front_end/panels/search/SearchView.ts +20 -20
  242. package/front_end/panels/security/SecurityModel.ts +7 -7
  243. package/front_end/panels/security/SecurityPanel.ts +99 -107
  244. package/front_end/panels/security/SecurityPanelSidebar.ts +7 -7
  245. package/front_end/panels/security/security-meta.ts +2 -2
  246. package/front_end/panels/sensors/LocationsSettingsTab.ts +19 -19
  247. package/front_end/panels/sensors/SensorsView.ts +27 -27
  248. package/front_end/panels/sensors/sensors-meta.ts +13 -167
  249. package/front_end/panels/settings/AISettingsTab.ts +98 -56
  250. package/front_end/panels/settings/EditFileSystemView.ts +2 -2
  251. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -20
  252. package/front_end/panels/settings/KeybindsSettingsTab.ts +20 -21
  253. package/front_end/panels/settings/SettingsScreen.ts +11 -11
  254. package/front_end/panels/settings/WorkspaceSettingsTab.ts +5 -5
  255. package/front_end/panels/settings/components/SyncSection.ts +12 -12
  256. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
  257. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +31 -31
  258. package/front_end/panels/settings/emulation/emulation-meta.ts +1 -1
  259. package/front_end/panels/settings/settings-meta.ts +14 -14
  260. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +2 -2
  261. package/front_end/panels/sources/NavigatorView.ts +7 -6
  262. package/front_end/panels/sources/ScopeChainSidebarPane.ts +83 -37
  263. package/front_end/panels/sources/SourcesNavigator.ts +22 -21
  264. package/front_end/panels/sources/SourcesView.ts +10 -1
  265. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  266. package/front_end/panels/sources/scopeChainSidebarPane.css +12 -4
  267. package/front_end/panels/sources/sources-meta.ts +4 -4
  268. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +5 -2
  269. package/front_end/panels/timeline/IsolateSelector.ts +10 -8
  270. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -1
  271. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +2 -1
  272. package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
  273. package/front_end/panels/timeline/TimelinePanel.ts +20 -8
  274. package/front_end/panels/timeline/TimelineUIUtils.ts +149 -131
  275. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +4 -2
  276. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +4 -2
  277. package/front_end/panels/timeline/components/insights/ImageRef.ts +2 -1
  278. package/front_end/panels/timeline/timeline-meta.ts +3 -2
  279. package/front_end/panels/utils/utils.ts +7 -3
  280. package/front_end/panels/web_audio/WebAudioView.ts +17 -18
  281. package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
  282. package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
  283. package/front_end/panels/whats_new/whats_new-meta.ts +11 -11
  284. package/front_end/third_party/chromium/README.chromium +1 -1
  285. package/front_end/third_party/lit/lib/async-directive.d.ts +2 -1
  286. package/front_end/third_party/lit/lib/async-directive.js +1 -1
  287. package/front_end/third_party/lit/lib/async-directive.js.map +1 -1
  288. package/front_end/third_party/lit/lib/decorators.d.ts +2 -1
  289. package/front_end/third_party/lit/lib/decorators.js.map +1 -1
  290. package/front_end/third_party/lit/lib/directive.d.ts +2 -1
  291. package/front_end/third_party/lit/lib/directive.js.map +1 -1
  292. package/front_end/third_party/lit/lib/directives.d.ts +2 -1
  293. package/front_end/third_party/lit/lib/directives.js +8 -8
  294. package/front_end/third_party/lit/lib/directives.js.map +1 -1
  295. package/front_end/third_party/lit/lib/lit.d.ts +2 -1
  296. package/front_end/third_party/lit/lib/lit.js +1 -1
  297. package/front_end/third_party/lit/lib/lit.js.map +1 -1
  298. package/front_end/third_party/lit/lib/static-html.d.ts +2 -1
  299. package/front_end/third_party/lit/lib/static-html.js +1 -1
  300. package/front_end/third_party/lit/lib/static-html.js.map +1 -1
  301. package/front_end/third_party/lit/package.json +2 -2
  302. package/front_end/third_party/lit/rebuild.sh +1 -1
  303. package/front_end/third_party/lit/src/async-directive.ts +5 -0
  304. package/front_end/ui/components/dialogs/Dialog.ts +1 -1
  305. package/front_end/ui/components/dialogs/ShortcutDialog.ts +1 -1
  306. package/front_end/ui/components/diff_view/DiffView.ts +2 -2
  307. package/front_end/ui/components/issue_counter/IssueCounter.ts +3 -3
  308. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +5 -5
  309. package/front_end/ui/components/lists/List.ts +2 -2
  310. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  311. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +5 -5
  312. package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
  313. package/front_end/ui/components/snackbars/Snackbar.ts +1 -1
  314. package/front_end/ui/components/survey_link/SurveyLink.ts +3 -3
  315. package/front_end/ui/components/text_editor/config.ts +2 -2
  316. package/front_end/ui/components/tree_outline/TreeOutline.ts +34 -1
  317. package/front_end/ui/legacy/ReportView.ts +5 -0
  318. package/front_end/ui/legacy/Treeoutline.ts +6 -0
  319. package/front_end/ui/legacy/View.ts +1 -1
  320. package/front_end/ui/legacy/Widget.ts +14 -15
  321. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -0
  322. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -3
  323. package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
  324. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  325. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +106 -38
  326. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +7 -1
  327. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -1
  328. package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -2
  329. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +10 -1
  330. package/front_end/ui/legacy/inspectorCommon.css +5 -0
  331. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  332. package/mcp/mcp.ts +2 -0
  333. package/package.json +4 -4
  334. package/front_end/models/issues_manager/AttributionReportingIssue.ts +0 -247
  335. package/front_end/models/issues_manager/descriptions/arInsecureContext.md +0 -7
  336. package/front_end/models/issues_manager/descriptions/arInvalidInfoHeader.md +0 -5
  337. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +0 -5
  338. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +0 -5
  339. package/front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +0 -5
  340. package/front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +0 -5
  341. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -5
  342. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +0 -6
  343. package/front_end/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +0 -5
  344. package/front_end/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +0 -5
  345. package/front_end/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +0 -5
  346. package/front_end/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +0 -5
  347. package/front_end/models/issues_manager/descriptions/arNoWebOrOsSupport.md +0 -4
  348. package/front_end/models/issues_manager/descriptions/arOsSourceIgnored.md +0 -18
  349. package/front_end/models/issues_manager/descriptions/arOsTriggerIgnored.md +0 -19
  350. package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +0 -8
  351. package/front_end/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +0 -9
  352. package/front_end/models/issues_manager/descriptions/arSourceIgnored.md +0 -13
  353. package/front_end/models/issues_manager/descriptions/arTriggerIgnored.md +0 -12
  354. package/front_end/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +0 -10
  355. package/front_end/models/issues_manager/descriptions/arWebAndOsHeaders.md +0 -11
  356. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +0 -182
  357. package/front_end/panels/profiler/ProfileView.ts +0 -611
  358. package/front_end/panels/recorder/components/ExtensionView.ts +0 -132
  359. package/front_end/panels/recorder/components/components.ts +0 -25
  360. package/front_end/panels/recorder/components/util.ts +0 -116
  361. /package/front_end/panels/recorder/{components/controlButton.css → controlButton.css} +0 -0
  362. /package/front_end/panels/recorder/{components/createRecordingView.css → createRecordingView.css} +0 -0
  363. /package/front_end/panels/recorder/{components/extensionView.css → extensionView.css} +0 -0
  364. /package/front_end/panels/recorder/{components/recordingListView.css → recordingListView.css} +0 -0
  365. /package/front_end/panels/recorder/{components/replaySection.css → replaySection.css} +0 -0
  366. /package/front_end/panels/recorder/{components/selectorPicker.css → selectorPicker.css} +0 -0
  367. /package/front_end/panels/recorder/{components/startView.css → startView.css} +0 -0
  368. /package/front_end/panels/recorder/{components/stepEditor.css → stepEditor.css} +0 -0
  369. /package/front_end/panels/recorder/{components/stepView.css → stepView.css} +0 -0
  370. /package/front_end/panels/recorder/{components/timelineSection.css → timelineSection.css} +0 -0
@@ -66,6 +66,19 @@ export class ItemMouseOverEvent<TreeNodeDataType> extends Event {
66
66
  }
67
67
  }
68
68
 
69
+ export class ItemContextMenuEvent<TreeNodeDataType> extends Event {
70
+ static readonly eventName = 'itemcontextmenu';
71
+ data: {
72
+ node: TreeNode<TreeNodeDataType>,
73
+ originalEvent: MouseEvent,
74
+ };
75
+
76
+ constructor(node: TreeNode<TreeNodeDataType>, originalEvent: MouseEvent) {
77
+ super(ItemContextMenuEvent.eventName, {bubbles: true, composed: true});
78
+ this.data = {node, originalEvent};
79
+ }
80
+ }
81
+
69
82
  export class ItemMouseOutEvent<TreeNodeDataType> extends Event {
70
83
  static readonly eventName = 'itemmouseout';
71
84
  data: {
@@ -332,14 +345,27 @@ export class TreeOutline<TreeNodeDataType> extends HTMLElement {
332
345
  void this.#focusTreeNode(domNode);
333
346
  }
334
347
 
348
+ #onContextMenu(event: MouseEvent, node: TreeNode<TreeNodeDataType>): void {
349
+ if (!node) {
350
+ return;
351
+ }
352
+ const innerEvent = new ItemContextMenuEvent(node, event);
353
+ this.dispatchEvent(innerEvent);
354
+ if (innerEvent.defaultPrevented) {
355
+ event.stopPropagation();
356
+ event.preventDefault();
357
+ void this.#focusTreeNode((event.currentTarget as HTMLElement)?.parentElement as HTMLLIElement);
358
+ }
359
+ }
360
+
335
361
  async #focusTreeNode(domNode: HTMLLIElement): Promise<void> {
336
362
  const treeNode = this.#domNodeToTreeNodeMap.get(domNode);
337
363
  if (!treeNode) {
338
364
  return;
339
365
  }
340
366
  this.#selectedTreeNode = treeNode;
341
- await this.#render();
342
367
  this.dispatchEvent(new ItemSelectedEvent(treeNode));
368
+ await this.#render();
343
369
  void RenderCoordinator.write('DOMNode focus', () => {
344
370
  domNode.focus();
345
371
  });
@@ -496,6 +522,7 @@ export class TreeOutline<TreeNodeDataType> extends HTMLElement {
496
522
  })}
497
523
  >
498
524
  <span class="arrow-and-key-wrapper"
525
+ @contextmenu=${(event: MouseEvent) => this.#onContextMenu(event, node)}
499
526
  @mouseover=${() => {
500
527
  this.dispatchEvent(new ItemMouseOverEvent(node));
501
528
  }}
@@ -573,6 +600,12 @@ export class TreeOutline<TreeNodeDataType> extends HTMLElement {
573
600
  customElements.define('devtools-tree-outline', TreeOutline);
574
601
 
575
602
  declare global {
603
+ interface HTMLElementEventMap {
604
+ [ItemSelectedEvent.eventName]: ItemSelectedEvent<unknown>;
605
+ [ItemMouseOverEvent.eventName]: ItemMouseOverEvent<unknown>;
606
+ [ItemMouseOutEvent.eventName]: ItemMouseOutEvent<unknown>;
607
+ [ItemContextMenuEvent.eventName]: ItemContextMenuEvent<unknown>;
608
+ }
576
609
  interface HTMLElementTagNameMap {
577
610
  'devtools-tree-outline': TreeOutline<unknown>;
578
611
  }
@@ -142,6 +142,11 @@ export class Section extends VBox {
142
142
  getFieldElement(): HTMLElement {
143
143
  return this.fieldList;
144
144
  }
145
+
146
+ getHeaderElement(): HTMLElement {
147
+ return this.headerElement;
148
+ }
149
+
145
150
  appendFieldWithCustomView(customElement: HTMLElement): void {
146
151
  this.fieldList.append(customElement);
147
152
  }
@@ -1895,6 +1895,9 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
1895
1895
  removeNode(treeElement);
1896
1896
  }
1897
1897
  parent.treeElement.insertChild(treeElement, index);
1898
+ if (parent.treeElement instanceof TreeViewTreeElement) {
1899
+ parent.treeElement.updateExpansionFromAttribute();
1900
+ }
1898
1901
  if (hasBooleanAttribute(node, 'selected')) {
1899
1902
  treeElement.revealAndSelect(true);
1900
1903
  }
@@ -2034,6 +2037,9 @@ export const ifExpanded = Lit.Directive.directive(IfExpandedDirective);
2034
2037
  export class TreeElementWrapper extends HTMLElement {
2035
2038
  #treeElement?: TreeElement;
2036
2039
  set treeElement(treeElement: TreeElement) {
2040
+ if (this.#treeElement === treeElement) {
2041
+ return;
2042
+ }
2037
2043
  if (this.#treeElement?.parent) {
2038
2044
  const parent = this.#treeElement.parent;
2039
2045
  const index = parent.indexOfChild(this.#treeElement);
@@ -86,7 +86,7 @@ export class SimpleView<ContentTypeT extends HTMLElement|DocumentFragment = HTML
86
86
  return false;
87
87
  }
88
88
 
89
- toolbarItems(): Promise<ToolbarItem[]> {
89
+ toolbarItems(): Promise<ToolbarItem[]|TemplateResult> {
90
90
  return Promise.resolve([]);
91
91
  }
92
92
 
@@ -84,7 +84,8 @@ function enqueueIntoNextUpdateQueue(widget: AnyWidget): Promise<void> {
84
84
  nextUpdateQueue.delete(widget);
85
85
  nextUpdateQueue.set(widget, scheduledUpdate);
86
86
  if (pendingAnimationFrame === null) {
87
- pendingAnimationFrame = requestAnimationFrame(runNextUpdate);
87
+ const widgetWindow = widget.contentElement.window() || window;
88
+ pendingAnimationFrame = widgetWindow.requestAnimationFrame(runNextUpdate);
88
89
  }
89
90
  return scheduledUpdate.promise;
90
91
  }
@@ -155,7 +156,8 @@ function runNextUpdate(): void {
155
156
  if (nextUpdate) {
156
157
  void nextUpdate.promise.then(resolve);
157
158
  if (pendingAnimationFrame === null) {
158
- pendingAnimationFrame = requestAnimationFrame(runNextUpdate);
159
+ const widgetWindow = widget.contentElement.window() || window;
160
+ pendingAnimationFrame = widgetWindow.requestAnimationFrame(runNextUpdate);
159
161
  }
160
162
  } else {
161
163
  resolve();
@@ -182,16 +184,16 @@ function runNextUpdate(): void {
182
184
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
183
185
  const widgetConfigs = new WeakMap<HTMLElement, WidgetConfig<any>>();
184
186
 
185
- export function registerWidgetConfig<WidgetT extends AnyWidget>(
186
- element: HTMLElement, config: WidgetConfig<WidgetT>): void {
187
+ export function registerWidgetConfig<WidgetT extends AnyWidget>(element: HTMLElement,
188
+ config: WidgetConfig<WidgetT>): void {
187
189
  if (!widgetConfigs.has(element)) {
188
190
  setUpLifecycleTracking(element);
189
191
  }
190
192
  widgetConfigs.set(element, config);
191
193
  }
192
194
 
193
- function instantiateWidget<WidgetT extends AnyWidget>(
194
- element: HTMLElement, widgetConfig: WidgetConfig<WidgetT>): WidgetT {
195
+ function instantiateWidget<WidgetT extends AnyWidget>(element: HTMLElement,
196
+ widgetConfig: WidgetConfig<WidgetT>): WidgetT {
195
197
  if (!widgetConfig.widgetClass) {
196
198
  throw new Error('No widgetClass defined');
197
199
  }
@@ -794,9 +796,8 @@ export class Widget<ContentTypeT extends HTMLElement|DocumentFragment = HTMLElem
794
796
  if (this.#isRoot) {
795
797
  assert(!currentParent, 'Attempt to show root widget under another widget');
796
798
  } else {
797
- assert(
798
- currentParent && widgetMap.get(currentParent) === this.#parentWidget,
799
- 'Attempt to show under node belonging to alien widget');
799
+ assert(currentParent && widgetMap.get(currentParent) === this.#parentWidget,
800
+ 'Attempt to show under node belonging to alien widget');
800
801
  }
801
802
 
802
803
  const wasVisible = this.#visible;
@@ -1031,9 +1032,8 @@ export class Widget<ContentTypeT extends HTMLElement|DocumentFragment = HTMLElem
1031
1032
  getDefaultFocusedElement(): HTMLElement|null {
1032
1033
  const elements = this.getDefaultFocusedElements();
1033
1034
  if (elements.length > 1) {
1034
- console.error(
1035
- 'Multiple autofocus elements found', this.constructor.name,
1036
- ...elements.map(e => Platform.StringUtilities.trimMiddle(e.outerHTML, 250)));
1035
+ console.error('Multiple autofocus elements found', this.constructor.name,
1036
+ ...elements.map(e => Platform.StringUtilities.trimMiddle(e.outerHTML, 250)));
1037
1037
  }
1038
1038
  return elements[0] || null;
1039
1039
  }
@@ -1110,9 +1110,8 @@ export class Widget<ContentTypeT extends HTMLElement|DocumentFragment = HTMLElem
1110
1110
 
1111
1111
  private hasNonZeroConstraints(): boolean {
1112
1112
  const constraints = this.constraints();
1113
- return Boolean(
1114
- constraints.minimum.width || constraints.minimum.height || constraints.preferred.width ||
1115
- constraints.preferred.height);
1113
+ return Boolean(constraints.minimum.width || constraints.minimum.height || constraints.preferred.width ||
1114
+ constraints.preferred.height);
1116
1115
  }
1117
1116
 
1118
1117
  suspendInvalidations(): void {
@@ -36,6 +36,8 @@ import * as UI from '../../legacy.js';
36
36
  import dataGridStyles from './dataGrid.css.js';
37
37
  import type {DataGridInternalToken} from './DataGridElement.js';
38
38
 
39
+ export {dataGridStyles};
40
+
39
41
  const UIStrings = {
40
42
  /**
41
43
  * @description Accessible text label for expandible nodes in datagrids
@@ -221,10 +221,15 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
221
221
  const titleDOMFragment = column.firstElementChild ? document.createDocumentFragment() : undefined;
222
222
  if (titleDOMFragment) {
223
223
  title = '';
224
- for (const child of column.children) {
224
+ for (const child of column.childNodes) {
225
225
  titleDOMFragment.appendChild(child.cloneNode(true));
226
- title += child.shadowRoot ? child.shadowRoot.textContent : child.textContent;
226
+ if (child instanceof Element && child.shadowRoot) {
227
+ title += child.shadowRoot.textContent;
228
+ } else if (child.nodeType !== Node.COMMENT_NODE) {
229
+ title += child.textContent ?? '';
230
+ }
227
231
  }
232
+ title = title.trim();
228
233
  }
229
234
  const sortable = hasBooleanAttribute(column, 'sortable');
230
235
  const width = column.getAttribute('width') ?? undefined;
@@ -264,7 +269,7 @@ export class DataGridElement extends UI.UIUtils.HTMLElementWithLightDOMTemplate
264
269
  const visibleColumns = new Set(this.#columns.map(({id}) => id).filter(id => !this.#hiddenColumns.has(id)));
265
270
  this.#dataGrid.setColumnsVisibility(visibleColumns);
266
271
  this.#dataGrid.setEditCallback(hasEditableColumn ? this.#editCallback.bind(this) : undefined, INTERNAL_TOKEN);
267
- this.#dataGrid.deleteCallback = hasEditableColumn ? this.#deleteCallback.bind(this) : undefined;
272
+ this.#dataGrid.deleteCallback = this.#deleteCallback.bind(this);
268
273
  }
269
274
 
270
275
  #needUpdateColumns(mutationList: MutationRecord[]): boolean {
@@ -15,5 +15,6 @@ import * as ShowMoreDataGridNode from './ShowMoreDataGridNode.js';
15
15
  import * as SortableDataGrid from './SortableDataGrid.js';
16
16
  import * as ViewportDataGrid from './ViewportDataGrid.js';
17
17
 
18
+ export {dataGridStyles} from './DataGrid.js';
18
19
  export {ifExpanded} from './DataGridElement.js';
19
20
  export {DataGrid, DataGridExporter, ShowMoreDataGridNode, SortableDataGrid, ViewportDataGrid};
@@ -37,7 +37,7 @@ export class ObjectPopoverHelper {
37
37
 
38
38
  dispose(): void {
39
39
  if (this.resultHighlightedAsDOM) {
40
- SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
40
+ SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance());
41
41
  }
42
42
  if (this.linkifier) {
43
43
  this.linkifier.dispose();
@@ -52,7 +52,7 @@ import {RemoteObjectPreviewFormatter, renderNodeTitle} from './RemoteObjectPrevi
52
52
 
53
53
  export {objectPropertiesSectionStyles, objectValueStyles};
54
54
  const {widget} = UI.Widget;
55
- const {ref, repeat, ifDefined, classMap} = Directives;
55
+ const {ref, repeat, ifDefined, classMap, until} = Directives;
56
56
  const UIStrings = {
57
57
  /**
58
58
  * @description Text in Object Properties Section
@@ -92,6 +92,10 @@ const UIStrings = {
92
92
  * @example {50} PH1
93
93
  */
94
94
  showAllD: 'Show all {PH1}',
95
+ /**
96
+ * @description Show all properties including those with null or undefined values
97
+ */
98
+ showAll: 'Show all',
95
99
  /**
96
100
  * @description Value element text content in Object Properties Section. Shown when the developer is
97
101
  * viewing a variable in the Scope view, whose value is not available (i.e. because it was optimized
@@ -145,6 +149,13 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
145
149
  export const EXPANDABLE_MAX_DEPTH = 100;
146
150
 
147
151
  const objectPropertiesSectionMap = new WeakMap<Element, ObjectPropertiesSection>();
152
+ // TODO(crbug.com/457388389): This cache is a temporary workaround for the <devtools-tree> migration.
153
+ // It can be removed once the entire ObjectPropertiesSection is fully migrated to Lit and
154
+ // the legacy TreeOutline/TreeElement dependencies are removed.
155
+ const topLevelNodesCache = new WeakMap<ObjectTreeNodeBase, {
156
+ nodes: UI.TreeOutline.TreeElement[],
157
+ linkifier?: Components.Linkifier.Linkifier,
158
+ }>();
148
159
 
149
160
  interface NodeChildren {
150
161
  properties?: ObjectTreeNode[];
@@ -796,7 +807,7 @@ export class ObjectTreeNode extends ObjectTreeNodeBase {
796
807
  } else if (isInteger.test(this.name)) {
797
808
  this.#path = `${parentPath}[${this.name}]`;
798
809
  } else {
799
- this.#path = `${parentPath}[${JSON.stringify(this.name)}]`;
810
+ this.#path = `${parentPath}[${Platform.StringUtilities.formatAsJSLiteral(this.name)}]`;
800
811
  }
801
812
  }
802
813
  return this.#path;
@@ -1141,7 +1152,7 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
1141
1152
  return html`<span class=value title=${description}>${'<' + i18nString(UIStrings.unknown) + '>'}</span>`;
1142
1153
  }
1143
1154
  if (type === 'string' && typeof description === 'string') {
1144
- const text = JSON.stringify(description);
1155
+ const text = Platform.StringUtilities.escapeUnicode(JSON.stringify(description));
1145
1156
  const tooLong = description.length > maxRenderableStringLength;
1146
1157
  return html`<span class="value object-value-string" title=${ifDefined(tooLong ? undefined : description)}>${
1147
1158
  tooLong ? widget(ExpandableTextPropertyValue, {text}) : text}</span>`;
@@ -1152,7 +1163,7 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
1152
1163
  return html`<span class="value object-value-trustedtype" title=${ifDefined(tooLong ? undefined : text)}>${
1153
1164
  tooLong ? widget(ExpandableTextPropertyValue, {text}) :
1154
1165
  html`${className} <span class=object-value-string title=${description}>${
1155
- JSON.stringify(description)}</span>`}</span>`;
1166
+ Platform.StringUtilities.escapeUnicode(JSON.stringify(description))}</span>`}</span>`;
1156
1167
  }
1157
1168
  if (type === 'function') {
1158
1169
  return ObjectPropertiesSection.valueElementForFunctionDescription(description, undefined, undefined, 'value');
@@ -1164,7 +1175,8 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
1164
1175
  event.consume(true);
1165
1176
  }}
1166
1177
  @mousemove=${() => SDK.OverlayModel.OverlayModel.highlightObjectAsDOMNode(value)}
1167
- @mouseleave=${() => SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight()}
1178
+ @mouseleave=${
1179
+ () => SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance())}
1168
1180
  >${renderNodeTitle(description)}</span>`;
1169
1181
  }
1170
1182
  if (description.length > maxRenderableStringLength) {
@@ -1297,7 +1309,79 @@ export const enum ObjectPropertiesMode {
1297
1309
  OWN_AND_INTERNAL_AND_INHERITED = 1, // Own, internal, and inherited properties
1298
1310
  }
1299
1311
 
1300
- export class RootElement extends UI.TreeOutline.TreeElement {
1312
+ export function populateObjectTreeContextMenu(
1313
+ contextMenu: UI.ContextMenu.ContextMenu,
1314
+ object: ObjectTree,
1315
+ expandRecursively: () => void,
1316
+ collapseChildren: () => void,
1317
+ sortPropertiesAlphabetically: () => void,
1318
+ onShowAllToggled: () => void,
1319
+ ): void {
1320
+ contextMenu.appendApplicableItems(object.object);
1321
+
1322
+ if (object.object instanceof SDK.RemoteObject.LocalJSONObject) {
1323
+ const {value} = object.object;
1324
+ const propertyValue =
1325
+ typeof value === 'object' ? Platform.StringUtilities.escapeUnicode(JSON.stringify(value, null, 2)) : value;
1326
+ const copyValueHandler = (): void => {
1327
+ Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue);
1328
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText((propertyValue as string | undefined));
1329
+ };
1330
+ contextMenu.clipboardSection().appendItem(i18nString(UIStrings.copyValue), copyValueHandler,
1331
+ {jslogContext: 'copy-value'});
1332
+ }
1333
+
1334
+ contextMenu.viewSection().appendItem(i18nString(UIStrings.expandRecursively), expandRecursively,
1335
+ {jslogContext: 'expand-recursively'});
1336
+ contextMenu.viewSection().appendItem(i18nString(UIStrings.collapseChildren), collapseChildren,
1337
+ {jslogContext: 'collapse-children'});
1338
+ if (!object.isWasm) {
1339
+ contextMenu.viewSection().appendCheckboxItem(i18nString(UIStrings.sortPropertiesAlphabetically),
1340
+ sortPropertiesAlphabetically, {
1341
+ checked: object.sortPropertiesAlphabetically,
1342
+ jslogContext: 'sort-properties-alphabetically',
1343
+ });
1344
+ }
1345
+ contextMenu.viewSection().appendCheckboxItem(
1346
+ i18nString(UIStrings.showAll), onShowAllToggled,
1347
+ {checked: object.includeNullOrUndefinedValues, jslogContext: 'show-all'});
1348
+ }
1349
+
1350
+ export function renderObjectTree(
1351
+ objectTree: ObjectTree,
1352
+ linkifier?: Components.Linkifier.Linkifier,
1353
+ emptyPlaceholder?: string|null,
1354
+ ): unknown {
1355
+ const entry = topLevelNodesCache.get(objectTree);
1356
+ if (entry && entry.linkifier === linkifier) {
1357
+ return html`
1358
+ <ul class="source-code object-properties-section" role="group">
1359
+ ${entry.nodes.map(node => html`<devtools-tree-wrapper .treeElement=${node}></devtools-tree-wrapper>`)}
1360
+ </ul>
1361
+ `;
1362
+ }
1363
+
1364
+ const promise = (async () => {
1365
+ await ObjectPropertyTreeElement.populateChildrenIfNeeded(objectTree);
1366
+ const nodes = Array.from(ObjectPropertyTreeElement.createNodes(
1367
+ objectTree, /* skipProto= */ false, /* skipGettersAndSetters= */ false, linkifier, emptyPlaceholder));
1368
+ topLevelNodesCache.set(objectTree, {linkifier, nodes});
1369
+ const listener = (): void => {
1370
+ topLevelNodesCache.delete(objectTree);
1371
+ objectTree.removeEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, listener);
1372
+ };
1373
+ objectTree.addEventListener(ObjectTreeNodeBase.Events.CHILDREN_CHANGED, listener);
1374
+
1375
+ return html`
1376
+ <ul class="source-code object-properties-section" role="group">
1377
+ ${nodes.map(node => html`<devtools-tree-wrapper .treeElement=${node}></devtools-tree-wrapper>`)}
1378
+ </ul>
1379
+ `;
1380
+ })();
1381
+
1382
+ return until(promise, html`<ul class="source-code object-properties-section" role="group"></ul>`);
1383
+ }
1384
+ class RootElement extends UI.TreeOutline.TreeElement {
1301
1385
  private readonly object: ObjectTree;
1302
1386
  private readonly linkifier: Components.Linkifier.Linkifier|undefined;
1303
1387
  private readonly emptyPlaceholder: string|null|undefined;
@@ -1341,35 +1425,18 @@ export class RootElement extends UI.TreeOutline.TreeElement {
1341
1425
 
1342
1426
  private onContextMenu(event: Event): void {
1343
1427
  const contextMenu = new UI.ContextMenu.ContextMenu(event);
1344
- contextMenu.appendApplicableItems(this.object.object);
1345
-
1346
- if (this.object instanceof SDK.RemoteObject.LocalJSONObject) {
1347
- const {value} = this.object;
1348
- const propertyValue = typeof value === 'object' ? JSON.stringify(value, null, 2) : value;
1349
- const copyValueHandler = (): void => {
1350
- Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue);
1351
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText((propertyValue as string | undefined));
1352
- };
1353
- contextMenu.clipboardSection().appendItem(
1354
- i18nString(UIStrings.copyValue), copyValueHandler, {jslogContext: 'copy-value'});
1355
- }
1356
-
1357
- contextMenu.viewSection().appendItem(
1358
- i18nString(UIStrings.expandRecursively), this.expandRecursively.bind(this, EXPANDABLE_MAX_DEPTH),
1359
- {jslogContext: 'expand-recursively'});
1360
- contextMenu.viewSection().appendItem(
1361
- i18nString(UIStrings.collapseChildren), this.collapseChildren.bind(this), {jslogContext: 'collapse-children'});
1362
- if (!this.object.isWasm) {
1363
- contextMenu.viewSection().appendCheckboxItem(i18nString(UIStrings.sortPropertiesAlphabetically), () => {
1364
- this.object.sortPropertiesAlphabetically = !this.object.sortPropertiesAlphabetically;
1365
- }, {
1366
- checked: this.object.sortPropertiesAlphabetically,
1367
- jslogContext: 'sort-properties-alphabetically',
1368
- });
1369
- }
1370
- contextMenu.viewSection().appendCheckboxItem(i18n.i18n.lockedString('Show all'), () => {
1371
- this.object.includeNullOrUndefinedValues = !this.object.includeNullOrUndefinedValues;
1372
- }, {checked: this.object.includeNullOrUndefinedValues, jslogContext: 'show-all'});
1428
+ populateObjectTreeContextMenu(
1429
+ contextMenu,
1430
+ this.object,
1431
+ this.expandRecursively.bind(this, EXPANDABLE_MAX_DEPTH),
1432
+ this.collapseChildren.bind(this),
1433
+ () => {
1434
+ this.object.sortPropertiesAlphabetically = !this.object.sortPropertiesAlphabetically;
1435
+ },
1436
+ () => {
1437
+ this.object.includeNullOrUndefinedValues = !this.object.includeNullOrUndefinedValues;
1438
+ },
1439
+ );
1373
1440
  void contextMenu.show();
1374
1441
  }
1375
1442
 
@@ -1674,6 +1741,7 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
1674
1741
  super();
1675
1742
 
1676
1743
  this.#widget = new ObjectPropertyWidget();
1744
+ this.#widget.markAsRoot();
1677
1745
  this.property = property;
1678
1746
  this.hidden = property.isFiltered;
1679
1747
  this.property.addEventListener(ObjectTreeNodeBase.Events.VALUE_CHANGED, this.#updateValue, this);
@@ -1894,7 +1962,6 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
1894
1962
 
1895
1963
  override onattach(): void {
1896
1964
  this.updateExpandable();
1897
- this.#widget.markAsRoot();
1898
1965
  this.#widget.show(this.listItemElement);
1899
1966
  this.#widget.property = this.property;
1900
1967
  this.#widget.linkifier = this.linkifier;
@@ -1943,7 +2010,8 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
1943
2010
  contextMenu.appendApplicableItems(this.property.object);
1944
2011
  if (this.property.parent?.object instanceof SDK.RemoteObject.LocalJSONObject) {
1945
2012
  const {object: {value}} = this.property;
1946
- const propertyValue = typeof value === 'object' ? JSON.stringify(value, null, 2) : value;
2013
+ const propertyValue =
2014
+ typeof value === 'object' ? Platform.StringUtilities.escapeUnicode(JSON.stringify(value, null, 2)) : value;
1947
2015
  const copyValueHandler = (): void => {
1948
2016
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue);
1949
2017
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText((propertyValue as string | undefined));
@@ -1978,7 +2046,7 @@ export class ObjectPropertyTreeElement extends UI.TreeOutline.TreeElement {
1978
2046
  jslogContext: 'sort-properties-alphabetically',
1979
2047
  });
1980
2048
  }
1981
- contextMenu.viewSection().appendCheckboxItem(i18n.i18n.lockedString('Show all'), () => {
2049
+ contextMenu.viewSection().appendCheckboxItem(i18nString(UIStrings.showAll), () => {
1982
2050
  root.includeNullOrUndefinedValues = !root.includeNullOrUndefinedValues;
1983
2051
  }, {checked: root.includeNullOrUndefinedValues, jslogContext: 'show-all'});
1984
2052
  return contextMenu;
@@ -38,6 +38,7 @@ import * as Common from '../../../../core/common/common.js';
38
38
  import * as i18n from '../../../../core/i18n/i18n.js';
39
39
  import * as FormatterActions from '../../../../entrypoints/formatter_worker/FormatterActions.js'; // eslint-disable-line @devtools/es-modules-import
40
40
  import * as TextUtils from '../../../../models/text_utils/text_utils.js';
41
+ import {render} from '../../../../ui/lit/lit.js';
41
42
  import * as UI from '../../legacy.js';
42
43
 
43
44
  import resourceSourceFrameStyles from './resourceSourceFrame.css.js';
@@ -118,7 +119,12 @@ export class SearchableContainer extends UI.Widget.VBox {
118
119
 
119
120
  const toolbar = this.contentElement.createChild('devtools-toolbar', 'toolbar');
120
121
  void sourceFrame.toolbarItems().then(items => {
121
- items.map(item => toolbar.appendToolbarItem(item));
122
+ if (Array.isArray(items)) {
123
+ items.map(item => toolbar.appendToolbarItem(item));
124
+ } else {
125
+ // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
126
+ render(items, toolbar);
127
+ }
122
128
  });
123
129
  }
124
130
 
@@ -392,7 +392,8 @@ export class SourceFrameImpl extends Common.ObjectWrapper.eventMixin<EventTypes,
392
392
  const content =
393
393
  this.rawContent instanceof CodeMirror.Text ? this.rawContent.sliceString(0) : this.rawContent || '';
394
394
  this.textEditor.state = this.placeholderEditorState(i18nString(UIStrings.formatting));
395
- const formatInfo = await Formatter.ScriptFormatter.formatScriptContent(this.contentType, content);
395
+ const formatInfo = await Formatter.ScriptFormatter.formatScriptContent(Common.Settings.Settings.instance(),
396
+ this.contentType, content);
396
397
  this.formattedMap = formatInfo.formattedMapping;
397
398
  await this.setContent(formatInfo.formattedContent);
398
399
  this.prettyBaseDoc = textEditor.state.doc;
@@ -84,11 +84,13 @@ export class ImagePreview {
84
84
  ): Promise<HTMLDivElement|null> {
85
85
  const {precomputedFeatures, imageAltText, align} = options;
86
86
 
87
- let resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(originalImageURL);
87
+ let resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(SDK.TargetManager.TargetManager.instance(),
88
+ originalImageURL);
88
89
  let imageURL = originalImageURL;
89
90
  if (!isImageResource(resource) && precomputedFeatures?.currentSrc) {
90
91
  imageURL = precomputedFeatures.currentSrc;
91
- resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(imageURL);
92
+ resource =
93
+ SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(SDK.TargetManager.TargetManager.instance(), imageURL);
92
94
  }
93
95
  if (!resource || !isImageResource(resource)) {
94
96
  return null;
@@ -268,9 +268,16 @@ export class StackTracePreviewContent extends UI.Widget.Widget<ShadowRoot> {
268
268
  if (Root.DevToolsContext.globalInstance().has(Workspace.IgnoreListManager.IgnoreListManager)) {
269
269
  Workspace.IgnoreListManager.IgnoreListManager.instance().addChangeListener(this.#updateHasNonIgnoredLinks);
270
270
  }
271
+ if (this.#stackTrace) {
272
+ this.#stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
273
+ }
274
+ this.requestUpdate();
271
275
  }
272
276
 
273
277
  override willHide(): void {
278
+ if (this.#stackTrace) {
279
+ this.#stackTrace.removeEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
280
+ }
274
281
  if (Root.DevToolsContext.globalInstance().has(Workspace.IgnoreListManager.IgnoreListManager)) {
275
282
  Workspace.IgnoreListManager.IgnoreListManager.instance().removeChangeListener(this.#updateHasNonIgnoredLinks);
276
283
  }
@@ -291,7 +298,9 @@ export class StackTracePreviewContent extends UI.Widget.Widget<ShadowRoot> {
291
298
  this.#stackTrace.removeEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
292
299
  }
293
300
  this.#stackTrace = stackTrace;
294
- this.#stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
301
+ if (this.#stackTrace && this.isShowing()) {
302
+ this.#stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.requestUpdate, this);
303
+ }
295
304
  this.requestUpdate();
296
305
  }
297
306
 
@@ -743,6 +743,11 @@ devtools-toolbar {
743
743
  }
744
744
  }
745
745
 
746
+ & > devtools-link,
747
+ & > .devtools-link {
748
+ cursor: pointer;
749
+ }
750
+
746
751
  .status-buttons {
747
752
  padding: 0 var(--sys-size-2);
748
753
  gap: var(--sys-size-2);
@@ -1633,6 +1633,7 @@ export const knownContextValues = new Set([
1633
1633
  'evolved-cls',
1634
1634
  'exclude-folder',
1635
1635
  'exclude-folder-confirmation',
1636
+ 'execution-context',
1636
1637
  'expand',
1637
1638
  'expand-recursively',
1638
1639
  'experimental-item',
@@ -2128,6 +2129,7 @@ export const knownContextValues = new Set([
2128
2129
  'is-ad-related',
2129
2130
  'is-landscape',
2130
2131
  'is-mobile',
2132
+ 'is-preloaded',
2131
2133
  'is-resident-credential',
2132
2134
  'is-u',
2133
2135
  'is-user-active-false-is-screen-unlocked-false',
@@ -4496,6 +4498,7 @@ export const knownContextValues = new Set([
4496
4498
  'window',
4497
4499
  'window-controls',
4498
4500
  'window-controls-overlay',
4501
+ 'window-drag',
4499
4502
  'windows',
4500
4503
  'word-break',
4501
4504
  'word-spacing',
package/mcp/mcp.ts CHANGED
@@ -7,6 +7,8 @@
7
7
  // just import relevant meta files (as long as they don't contain any UI related code)
8
8
  import '../front_end/core/sdk/sdk-meta.js';
9
9
  import '../front_end/models/workspace/workspace-meta.js';
10
+ import '../front_end/models/persistence/persistence-meta.js';
11
+ import '../front_end/models/logs/logs-meta.js';
10
12
 
11
13
  /**
12
14
  * IMPORTANT! Make sure that any class that is exported here has related unit
package/package.json CHANGED
@@ -27,6 +27,7 @@
27
27
  "lint": "vpython3 third_party/node/node.py --output scripts/test/run_lint_check.mjs",
28
28
  "prebuild": "gn gen out/Default",
29
29
  "rdb": "rdb stream -new -realm chromium:public --",
30
+ "rdb-exonerate": "npm run rdb -- vpython3 third_party/node/node.py --output scripts/run_on_target.mjs gen/test/exonerate.js",
30
31
  "start": "vpython3 third_party/node/node.py --output scripts/run_start.mjs",
31
32
  "webtest": "vpython3 third_party/node/node.py --output scripts/npm_test.js",
32
33
  "watch": "npm run build -- --watch",
@@ -68,7 +69,6 @@
68
69
  "karma-chrome-launcher": "3.2.0",
69
70
  "karma-coverage": "2.2.1",
70
71
  "karma-mocha": "2.0.1",
71
- "karma-mocha-reporter": "2.2.5",
72
72
  "karma-sourcemap-loader": "0.4.0",
73
73
  "karma-spec-reporter": "0.0.36",
74
74
  "license-checker": "25.0.1",
@@ -76,7 +76,7 @@
76
76
  "mocha": "11.7.5",
77
77
  "ora": "9.0.0",
78
78
  "postcss": "8.5.15",
79
- "puppeteer-core": "25.2.0",
79
+ "puppeteer-core": "25.3.0",
80
80
  "rollup": "4.60.4",
81
81
  "rollup-plugin-sourcemaps2": "0.5.4",
82
82
  "sinon": "22.0.0",
@@ -84,7 +84,7 @@
84
84
  "stylelint": "16.25.0",
85
85
  "stylelint-config-standard": "39.0.1",
86
86
  "svgo": "3.3.3",
87
- "terser": "5.44.1",
87
+ "terser": "5.48.0",
88
88
  "ts-lit-plugin": "2.0.2",
89
89
  "typescript": "6.0.2",
90
90
  "typescript-eslint": "8.58.0",
@@ -92,5 +92,5 @@
92
92
  "webidl2": "24.5.0",
93
93
  "yargs": "17.7.2"
94
94
  },
95
- "version": "1.0.1657855"
95
+ "version": "1.0.1661063"
96
96
  }