chrome-devtools-frontend 1.0.1664496 → 1.0.1665921

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 (407) hide show
  1. package/.agents/skills/devtools-testing-guidance/SKILL.md +48 -0
  2. package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +3 -3
  3. package/.agents/skills/repro-flaky-tests/SKILL.md +2 -2
  4. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +7 -1
  5. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +2 -0
  6. package/.agents/skills/version-control/SKILL.md +4 -3
  7. package/docs/ui_engineering.md +89 -0
  8. package/eslint.config.mjs +9 -2
  9. package/front_end/Images/rollup.config.mjs +1 -1
  10. package/front_end/Tests.js +15 -16
  11. package/front_end/core/common/Gzip.ts +2 -2
  12. package/front_end/core/common/Settings.ts +4 -20
  13. package/front_end/core/common/Srcset.ts +1 -1
  14. package/front_end/core/common/VersionController.ts +1 -1
  15. package/front_end/core/host/AidaClient.ts +19 -4
  16. package/front_end/core/host/AidaGcaTranslation.ts +2 -2
  17. package/front_end/core/host/GcaClient.ts +2 -2
  18. package/front_end/core/host/GdpClient.ts +3 -3
  19. package/front_end/core/host/InspectorFrontendHostStub.ts +1 -1
  20. package/front_end/core/host/ResourceLoader.ts +15 -15
  21. package/front_end/core/protocol_client/DevToolsCDPConnection.ts +2 -2
  22. package/front_end/core/protocol_client/InspectorBackend.ts +1 -1
  23. package/front_end/core/root/Runtime.ts +0 -1
  24. package/front_end/core/sdk/CSSMatchedStyles.ts +78 -3
  25. package/front_end/core/sdk/CSSMetadata.ts +17 -12
  26. package/front_end/core/sdk/CSSProperty.ts +1 -1
  27. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +2 -2
  28. package/front_end/core/sdk/CSSRule.ts +3 -3
  29. package/front_end/core/sdk/CSSStyleSheetHeader.ts +3 -3
  30. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
  31. package/front_end/core/sdk/Connections.ts +1 -1
  32. package/front_end/core/sdk/DebuggerModel.ts +13 -13
  33. package/front_end/core/sdk/NetworkManager.ts +19 -19
  34. package/front_end/core/sdk/NetworkRequest.ts +57 -57
  35. package/front_end/core/sdk/OverlayModel.ts +1 -1
  36. package/front_end/core/sdk/PageResourceLoader.ts +2 -2
  37. package/front_end/core/sdk/RehydratingConnection.ts +5 -5
  38. package/front_end/core/sdk/ScreenCaptureModel.ts +1 -1
  39. package/front_end/core/sdk/Script.ts +2 -2
  40. package/front_end/core/sdk/ServerTiming.ts +7 -7
  41. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +1 -1
  42. package/front_end/core/sdk/ServiceWorkerManager.ts +11 -11
  43. package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
  44. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  45. package/front_end/core/sdk/StorageKeyManager.ts +1 -1
  46. package/front_end/core/sdk/sdk-meta.ts +98 -98
  47. package/front_end/devtools_compatibility.js +15 -13
  48. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +4 -8
  49. package/front_end/entrypoints/main/MainImpl.ts +2 -3
  50. package/front_end/entrypoints/main/main-meta.ts +1 -16
  51. package/front_end/entrypoints/shell/shell.ts +1 -0
  52. package/front_end/entrypoints/trace_app/trace_app.ts +1 -0
  53. package/front_end/foundation/README.md +1 -1
  54. package/front_end/foundation/Universe.test.api.ts +73 -0
  55. package/front_end/foundation/Universe.ts +22 -0
  56. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  57. package/front_end/generated/SupportedCSSProperties.js +1 -1
  58. package/front_end/generated/protocol.ts +19 -0
  59. package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
  60. package/front_end/models/ai_assistance/AiConversation.ts +1 -1
  61. package/front_end/models/ai_assistance/BuiltInAi.ts +1 -1
  62. package/front_end/models/ai_assistance/ChangeManager.ts +0 -70
  63. package/front_end/models/ai_assistance/ExtensionScope.ts +2 -36
  64. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +9 -9
  65. package/front_end/models/ai_assistance/agents/AiAgent.ts +10 -2
  66. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +4 -4
  67. package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +1 -1
  68. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +21 -21
  69. package/front_end/models/ai_assistance/agents/StorageAgent.ts +4 -4
  70. package/front_end/models/ai_assistance/agents/StylingAgent.ts +1 -1
  71. package/front_end/models/ai_assistance/ai_assistance.ts +0 -5
  72. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +11 -4
  73. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +8 -2
  74. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +14 -11
  75. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +2 -2
  76. package/front_end/models/ai_assistance/performance/AICallTree.ts +2 -2
  77. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +1 -1
  78. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +9 -2
  79. package/front_end/models/ai_assistance/tools/GetStyles.ts +4 -4
  80. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -5
  81. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -2
  82. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -2
  83. package/front_end/models/badges/badges-meta.ts +27 -0
  84. package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -3
  85. package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
  86. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +6 -7
  87. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +5 -4
  88. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +72 -29
  89. package/front_end/models/bindings/ResourceMapping.ts +38 -32
  90. package/front_end/models/bindings/ResourceScriptMapping.ts +5 -7
  91. package/front_end/models/breakpoints/BreakpointManager.ts +2 -1
  92. package/front_end/models/har/Writer.ts +2 -2
  93. package/front_end/models/issues_manager/ElementAccessibilityIssue.ts +1 -1
  94. package/front_end/models/issues_manager/GenericIssue.ts +1 -1
  95. package/front_end/models/issues_manager/IssuesManager.ts +14 -5
  96. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +1 -1
  97. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
  98. package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +13 -2
  99. package/front_end/models/issues_manager/issues_manager.ts +0 -2
  100. package/front_end/models/live-metrics/LiveMetrics.ts +22 -5
  101. package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
  102. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +10 -4
  103. package/front_end/models/logs/logs-meta.ts +23 -16
  104. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
  105. package/front_end/models/persistence/IsolatedFileSystem.ts +1 -1
  106. package/front_end/models/persistence/IsolatedFileSystemManager.ts +1 -1
  107. package/front_end/models/source_map_scopes/NamesResolver.ts +104 -86
  108. package/front_end/models/source_map_scopes/ScopeChainModel.ts +6 -2
  109. package/front_end/models/stack_trace/StackTraceModel.ts +1 -1
  110. package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -1
  111. package/front_end/models/trace/handlers/UserTimingsHandler.ts +17 -6
  112. package/front_end/models/trace/helpers/SamplesIntegrator.ts +1 -1
  113. package/front_end/models/trace/helpers/Timing.ts +1 -1
  114. package/front_end/models/trace/insights/Common.ts +1 -1
  115. package/front_end/models/trace/insights/DocumentLatency.ts +3 -3
  116. package/front_end/models/trace/insights/LCPDiscovery.ts +1 -1
  117. package/front_end/models/trace/insights/ModernHTTP.ts +1 -1
  118. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +2 -2
  119. package/front_end/models/workspace_diff/WorkspaceDiff.ts +14 -9
  120. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +2 -15
  121. package/front_end/panels/ai_assistance/ai_assistance.ts +1 -2
  122. package/front_end/panels/ai_assistance/components/ChatInput.ts +23 -19
  123. package/front_end/panels/ai_assistance/components/ChatMessage.ts +9 -18
  124. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -35
  125. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +1 -1
  126. package/front_end/panels/ai_assistance/components/ExploreWidget.ts +4 -4
  127. package/front_end/panels/ai_assistance/components/ImageResize.ts +74 -0
  128. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +2 -2
  129. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +28 -29
  130. package/front_end/panels/animation/AnimationTimeline.ts +3 -3
  131. package/front_end/panels/animation/animationTimeline.css +0 -2
  132. package/front_end/panels/application/AppManifestView.ts +1 -1
  133. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -1
  134. package/front_end/panels/application/CookieItemsView.ts +1 -1
  135. package/front_end/panels/application/CrashReportContextView.ts +3 -3
  136. package/front_end/panels/application/DeviceBoundSessionsModel.ts +1 -1
  137. package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +1 -1
  138. package/front_end/panels/application/DeviceBoundSessionsView.ts +1 -1
  139. package/front_end/panels/application/IndexedDBViews.ts +1 -1
  140. package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -1
  141. package/front_end/panels/application/OriginTrialTreeView.ts +1 -1
  142. package/front_end/panels/application/ServiceWorkersView.ts +6 -6
  143. package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
  144. package/front_end/panels/application/StorageItemsToolbar.ts +3 -3
  145. package/front_end/panels/application/WebMCPView.ts +7 -5
  146. package/front_end/panels/application/components/AdsView.ts +21 -6
  147. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -2
  148. package/front_end/panels/application/components/ProtocolHandlersView.ts +1 -1
  149. package/front_end/panels/application/components/StorageMetadataView.ts +1 -1
  150. package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +2 -2
  151. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +2 -1
  152. package/front_end/panels/application/preloading/components/PreloadingString.ts +3 -3
  153. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -1
  154. package/front_end/panels/autofill/AutofillView.ts +1 -1
  155. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
  156. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +2 -2
  157. package/front_end/panels/changes/ChangesSidebar.ts +2 -2
  158. package/front_end/panels/changes/ChangesView.ts +4 -5
  159. package/front_end/panels/changes/CombinedDiffView.ts +3 -3
  160. package/front_end/panels/changes/changes-meta.ts +2 -2
  161. package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
  162. package/front_end/panels/common/AiCodeGenerationTeaser.ts +3 -3
  163. package/front_end/panels/common/BadgeNotification.ts +8 -8
  164. package/front_end/panels/common/DOMLinkifier.ts +1 -1
  165. package/front_end/panels/common/GdpSignUpDialog.ts +2 -2
  166. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
  167. package/front_end/panels/common/aiCodeCompletionDisclaimer.css +0 -1
  168. package/front_end/panels/console/ConsoleInsightTeaser.ts +1 -1
  169. package/front_end/panels/console/ConsolePinPane.ts +3 -3
  170. package/front_end/panels/console/ConsolePrompt.ts +6 -4
  171. package/front_end/panels/console/ConsoleSidebar.ts +8 -10
  172. package/front_end/panels/console_counters/WarningErrorCounter.ts +10 -11
  173. package/front_end/panels/coverage/CoverageView.ts +2 -2
  174. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +3 -3
  175. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +1 -1
  176. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
  177. package/front_end/panels/elements/CSSRuleValidator.ts +1 -1
  178. package/front_end/panels/elements/ComputedStyleWidget.ts +3 -2
  179. package/front_end/panels/elements/ElementsTreeElement.ts +3 -3
  180. package/front_end/panels/elements/EventListenersWidget.ts +1 -3
  181. package/front_end/panels/elements/LayoutPane.ts +23 -13
  182. package/front_end/panels/elements/StandaloneStylesContainer.ts +7 -7
  183. package/front_end/panels/elements/StylePropertiesSection.ts +33 -5
  184. package/front_end/panels/elements/StylePropertyTreeElement.ts +5 -5
  185. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +6 -6
  186. package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
  187. package/front_end/panels/elements/elements-meta.ts +18 -2
  188. package/front_end/panels/emulation/DeviceModeToolbar.ts +100 -40
  189. package/front_end/panels/emulation/DeviceModeView.ts +5 -4
  190. package/front_end/panels/emulation/MediaQueryInspector.ts +35 -19
  191. package/front_end/panels/event_listeners/EventListenersView.ts +4 -4
  192. package/front_end/panels/explain/components/ConsoleInsight.ts +8 -9
  193. package/front_end/panels/explain/explain-meta.ts +3 -3
  194. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +135 -167
  195. package/front_end/panels/layer_viewer/Layers3DView.ts +10 -23
  196. package/front_end/panels/layer_viewer/layer_viewer-meta.ts +27 -0
  197. package/front_end/panels/lighthouse/LighthouseController.ts +44 -55
  198. package/front_end/panels/lighthouse/LighthousePanel.ts +9 -9
  199. package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -2
  200. package/front_end/panels/lighthouse/LighthouseStartView.ts +9 -12
  201. package/front_end/panels/lighthouse/LighthouseStatusView.ts +33 -33
  202. package/front_end/panels/lighthouse/RadioSetting.ts +1 -1
  203. package/front_end/panels/lighthouse/lighthouse-meta.ts +131 -1
  204. package/front_end/panels/media/EventDisplayTable.ts +67 -94
  205. package/front_end/panels/media/PlayerListView.ts +1 -1
  206. package/front_end/panels/media/eventDisplayTable.css +9 -4
  207. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +5 -5
  208. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +1 -1
  209. package/front_end/panels/network/EventSourceMessagesView.ts +98 -107
  210. package/front_end/panels/network/NetworkLogViewColumns.ts +1 -1
  211. package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -1
  212. package/front_end/panels/network/RequestConditionsDrawer.ts +2 -2
  213. package/front_end/panels/network/RequestCookiesView.ts +2 -2
  214. package/front_end/panels/network/RequestHeadersView.ts +5 -5
  215. package/front_end/panels/network/RequestPayloadView.ts +4 -4
  216. package/front_end/panels/network/RequestTimingView.ts +2 -2
  217. package/front_end/panels/network/components/DirectSocketConnectionView.ts +1 -1
  218. package/front_end/panels/network/eventSourceMessagesView.css +12 -3
  219. package/front_end/panels/network/networkTimingTable.css +2 -2
  220. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
  221. package/front_end/panels/profiler/BottomUpProfileDataGrid.ts +25 -29
  222. package/front_end/panels/profiler/HeapProfileView.ts +308 -247
  223. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +13 -3
  224. package/front_end/panels/profiler/HeapSnapshotView.ts +30 -10
  225. package/front_end/panels/profiler/HeapTimelineOverview.ts +5 -2
  226. package/front_end/panels/profiler/ProfileDataGrid.ts +128 -157
  227. package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +17 -5
  228. package/front_end/panels/profiler/ProfilesPanel.ts +2 -2
  229. package/front_end/panels/profiler/TopDownProfileDataGrid.ts +17 -21
  230. package/front_end/panels/profiler/profilesPanel.css +9 -13
  231. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +2 -2
  232. package/front_end/panels/recorder/CreateRecordingView.ts +4 -4
  233. package/front_end/panels/recorder/RecorderPanel.ts +6 -6
  234. package/front_end/panels/recorder/RecordingView.ts +1 -1
  235. package/front_end/panels/recorder/ReplaySection.ts +1 -1
  236. package/front_end/panels/recorder/StepView.ts +1 -1
  237. package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
  238. package/front_end/panels/search/SearchView.ts +1 -1
  239. package/front_end/panels/security/SecurityPanel.ts +54 -41
  240. package/front_end/panels/sensors/LocationsSettingsTab.ts +246 -233
  241. package/front_end/panels/sensors/SensorsView.ts +1 -1
  242. package/front_end/panels/settings/AISettingsTab.ts +11 -10
  243. package/front_end/panels/settings/SettingsScreen.ts +29 -24
  244. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +2 -2
  245. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +5 -5
  246. package/front_end/panels/sources/BreakpointEditDialog.ts +2 -2
  247. package/front_end/panels/sources/BreakpointsView.ts +1 -1
  248. package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
  249. package/front_end/panels/sources/DebuggerPausedMessage.ts +2 -2
  250. package/front_end/panels/sources/DebuggerPlugin.ts +25 -22
  251. package/front_end/panels/sources/ScopeChainSidebarPane.ts +3 -1
  252. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -5
  253. package/front_end/panels/sources/sources-meta.ts +1 -1
  254. package/front_end/panels/timeline/CountersGraph.ts +1 -2
  255. package/front_end/panels/timeline/ExtensionTrackAppender.ts +1 -1
  256. package/front_end/panels/timeline/TimelineDetailsView.ts +2 -2
  257. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -2
  258. package/front_end/panels/timeline/TimelineFlameChartView.ts +4 -4
  259. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
  260. package/front_end/panels/timeline/TimelinePanel.ts +53 -81
  261. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +10 -3
  262. package/front_end/panels/timeline/TimelineUIUtils.ts +18 -4
  263. package/front_end/panels/timeline/TrackConfigBanner.ts +1 -1
  264. package/front_end/panels/timeline/components/ExportTraceOptions.ts +1 -1
  265. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +8 -9
  266. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +1 -1
  267. package/front_end/panels/timeline/components/TimelineRangeSummaryView.ts +1 -1
  268. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +2 -2
  269. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +1 -1
  270. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +1 -1
  271. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +2 -2
  272. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +5 -0
  273. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +13 -8
  274. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +1 -0
  275. package/front_end/panels/timeline/timeline-meta.ts +169 -0
  276. package/front_end/panels/timeline/timelineFlameChartView.css +5 -0
  277. package/front_end/panels/webauthn/WebauthnPane.ts +1 -1
  278. package/front_end/panels/whats_new/ReleaseNoteText.ts +9 -9
  279. package/front_end/panels/whats_new/resources/WNDT.md +7 -8
  280. package/front_end/third_party/chromium/README.chromium +1 -1
  281. package/front_end/third_party/web-vitals/README.chromium +2 -2
  282. package/front_end/third_party/web-vitals/package/README.md +120 -19
  283. package/front_end/third_party/web-vitals/package/attribution.d.ts +16 -0
  284. package/front_end/third_party/web-vitals/package/attribution.js +18 -0
  285. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.d.ts +1 -1
  286. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.d.ts +1 -7
  287. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.js +53 -32
  288. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.d.ts +2 -2
  289. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +43 -12
  290. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.d.ts +1 -1
  291. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +21 -3
  292. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.d.ts +1 -1
  293. package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.js +30 -24
  294. package/front_end/third_party/web-vitals/package/dist/modules/lib/FCPEntryManager.d.ts +3 -0
  295. package/front_end/third_party/web-vitals/package/dist/modules/lib/FCPEntryManager.js +18 -0
  296. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.d.ts +2 -1
  297. package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.js +18 -2
  298. package/front_end/third_party/web-vitals/package/dist/modules/lib/LCPEntryManager.d.ts +1 -0
  299. package/front_end/third_party/web-vitals/package/dist/modules/lib/LCPEntryManager.js +1 -0
  300. package/front_end/third_party/web-vitals/package/dist/modules/lib/bindReporter.d.ts +1 -1
  301. package/front_end/third_party/web-vitals/package/dist/modules/lib/generateUniqueID.js +1 -1
  302. package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.d.ts +1 -1
  303. package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.js +7 -7
  304. package/front_end/third_party/web-vitals/package/dist/modules/lib/getSelector.js +1 -1
  305. package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.d.ts +1 -1
  306. package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.js +4 -1
  307. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +7 -3
  308. package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.js +20 -11
  309. package/front_end/third_party/web-vitals/package/dist/modules/lib/initUnique.js +8 -3
  310. package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.d.ts +3 -1
  311. package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.js +19 -4
  312. package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.js +1 -1
  313. package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.d.ts +3 -0
  314. package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.js +38 -0
  315. package/front_end/third_party/web-vitals/package/dist/modules/lib/whenIdleOrHidden.js +5 -1
  316. package/front_end/third_party/web-vitals/package/dist/modules/onCLS.d.ts +1 -1
  317. package/front_end/third_party/web-vitals/package/dist/modules/onCLS.js +30 -11
  318. package/front_end/third_party/web-vitals/package/dist/modules/onFCP.d.ts +1 -1
  319. package/front_end/third_party/web-vitals/package/dist/modules/onFCP.js +36 -4
  320. package/front_end/third_party/web-vitals/package/dist/modules/onINP.d.ts +1 -1
  321. package/front_end/third_party/web-vitals/package/dist/modules/onINP.js +42 -22
  322. package/front_end/third_party/web-vitals/package/dist/modules/onLCP.d.ts +1 -1
  323. package/front_end/third_party/web-vitals/package/dist/modules/onLCP.js +109 -30
  324. package/front_end/third_party/web-vitals/package/dist/modules/onTTFB.d.ts +1 -1
  325. package/front_end/third_party/web-vitals/package/dist/modules/onTTFB.js +25 -7
  326. package/front_end/third_party/web-vitals/package/dist/modules/types/base.d.ts +24 -1
  327. package/front_end/third_party/web-vitals/package/dist/modules/types/fcp.d.ts +1 -1
  328. package/front_end/third_party/web-vitals/package/dist/modules/types/inp.d.ts +14 -6
  329. package/front_end/third_party/web-vitals/package/dist/modules/types/lcp.d.ts +1 -1
  330. package/front_end/third_party/web-vitals/package/dist/modules/types/ttfb.d.ts +2 -2
  331. package/front_end/third_party/web-vitals/package/dist/modules/types.d.ts +26 -4
  332. package/front_end/third_party/web-vitals/package/package.json +21 -22
  333. package/front_end/third_party/web-vitals/package/src/attribution/onCLS.ts +1 -1
  334. package/front_end/third_party/web-vitals/package/src/attribution/onFCP.ts +62 -39
  335. package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +52 -15
  336. package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +25 -7
  337. package/front_end/third_party/web-vitals/package/src/attribution/onTTFB.ts +43 -37
  338. package/front_end/third_party/web-vitals/package/src/lib/{polyfills/getFirstHiddenTimePolyfill.ts → FCPEntryManager.ts} +4 -14
  339. package/front_end/third_party/web-vitals/package/src/lib/InteractionManager.ts +22 -2
  340. package/front_end/third_party/web-vitals/package/src/lib/LCPEntryManager.ts +1 -0
  341. package/front_end/third_party/web-vitals/package/src/lib/bindReporter.ts +1 -1
  342. package/front_end/third_party/web-vitals/package/src/lib/generateUniqueID.ts +1 -1
  343. package/front_end/third_party/web-vitals/package/src/lib/getLoadState.ts +11 -12
  344. package/front_end/third_party/web-vitals/package/src/lib/getSelector.ts +1 -1
  345. package/front_end/third_party/web-vitals/package/src/lib/getVisibilityWatcher.ts +4 -1
  346. package/front_end/third_party/web-vitals/package/src/lib/initMetric.ts +24 -11
  347. package/front_end/third_party/web-vitals/package/src/lib/initUnique.ts +12 -4
  348. package/front_end/third_party/web-vitals/package/src/lib/observe.ts +26 -5
  349. package/front_end/third_party/web-vitals/package/src/lib/polyfills/interactionCountPolyfill.ts +1 -1
  350. package/front_end/third_party/web-vitals/package/src/lib/softNavs.ts +48 -0
  351. package/front_end/third_party/web-vitals/package/src/lib/whenIdleOrHidden.ts +12 -4
  352. package/front_end/third_party/web-vitals/package/src/onCLS.ts +75 -18
  353. package/front_end/third_party/web-vitals/package/src/onFCP.ts +66 -7
  354. package/front_end/third_party/web-vitals/package/src/onINP.ts +100 -39
  355. package/front_end/third_party/web-vitals/package/src/onLCP.ts +169 -34
  356. package/front_end/third_party/web-vitals/package/src/onTTFB.ts +50 -13
  357. package/front_end/third_party/web-vitals/package/src/types/base.ts +31 -10
  358. package/front_end/third_party/web-vitals/package/src/types/fcp.ts +1 -1
  359. package/front_end/third_party/web-vitals/package/src/types/inp.ts +14 -6
  360. package/front_end/third_party/web-vitals/package/src/types/lcp.ts +1 -1
  361. package/front_end/third_party/web-vitals/package/src/types/ttfb.ts +2 -2
  362. package/front_end/third_party/web-vitals/package/src/types.ts +32 -9
  363. package/front_end/third_party/web-vitals/patches/0001-Add-onEachInteraction-to-onINP-options.patch +11 -11
  364. package/front_end/third_party/web-vitals/rebuild.sh +2 -2
  365. package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +2 -0
  366. package/front_end/ui/components/buttons/Button.ts +16 -0
  367. package/front_end/ui/components/dialogs/Dialog.ts +1 -1
  368. package/front_end/ui/components/highlighting/HighlightManager.ts +6 -1
  369. package/front_end/ui/components/highlighting/highlighting.ts +1 -1
  370. package/front_end/ui/components/icon_button/FileSourceIcon.ts +1 -1
  371. package/front_end/ui/components/linkifier/LinkifierImpl.ts +1 -1
  372. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +2 -2
  373. package/front_end/ui/components/settings/SettingCheckbox.ts +12 -7
  374. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +2 -2
  375. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +6 -6
  376. package/front_end/ui/components/text_editor/javascript.ts +3 -1
  377. package/front_end/ui/components/tooltips/Tooltip.ts +1 -1
  378. package/front_end/ui/legacy/ContextMenu.ts +12 -2
  379. package/front_end/ui/legacy/ListControl.ts +1 -1
  380. package/front_end/ui/legacy/SelectMenu.docs.ts +17 -19
  381. package/front_end/ui/legacy/Toolbar.ts +4 -1
  382. package/front_end/ui/legacy/Treeoutline.ts +1 -1
  383. package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -2
  384. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  385. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -4
  386. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +3 -1
  387. package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +4 -4
  388. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +8 -7
  389. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +14 -11
  390. package/front_end/ui/legacy/components/quick_open/QuickOpen.ts +1 -1
  391. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +15 -5
  392. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +4 -4
  393. package/front_end/ui/legacy/components/utils/Linkifier.ts +5 -1
  394. package/front_end/ui/lit/render.ts +1 -1
  395. package/front_end/ui/settings/SettingUIRegistration.ts +8 -3
  396. package/front_end/ui/visual_logging/KnownContextValues.ts +8 -0
  397. package/front_end/ui/visual_logging/LoggingEvents.ts +1 -1
  398. package/inspector_overlay/main.ts +1 -1
  399. package/mcp/mcp.ts +5 -4
  400. package/package.json +13 -13
  401. package/front_end/models/ai_assistance/AgentProject.ts +0 -261
  402. package/front_end/models/ai_assistance/agents/PatchAgent.ts +0 -306
  403. package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +0 -45
  404. package/front_end/models/text_utils/text_utils.ts +0 -5
  405. package/front_end/panels/ai_assistance/PatchWidget.ts +0 -867
  406. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +0 -368
  407. package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +0 -92
@@ -28,9 +28,9 @@ const UIStrings = {
28
28
  */
29
29
  consoleMessage: 'Console message',
30
30
  /**
31
- * @description The title of the insight source "Stacktrace".
31
+ * @description Title of the insight source 'Stack trace'.
32
32
  */
33
- stackTrace: 'Stacktrace',
33
+ stackTrace: 'Stack trace',
34
34
  /**
35
35
  * @description The title of the insight source "Network request".
36
36
  */
@@ -49,7 +49,7 @@ const UIStrings = {
49
49
  */
50
50
  insight: 'Explanation',
51
51
  /**
52
- * @description The title of the a button that closes the insight pane.
52
+ * @description Title of a button that closes the explanation.
53
53
  */
54
54
  closeInsight: 'Close explanation',
55
55
  /**
@@ -72,9 +72,9 @@ const UIStrings = {
72
72
  */
73
73
  report: 'Report legal issue',
74
74
  /**
75
- * @description The text of the header inside the console insight pane when there was an error generating an insight.
75
+ * @description Header text shown when there was an error generating an insight.
76
76
  */
77
- error: 'DevTools has encountered an error',
77
+ error: 'DevTools encountered an error',
78
78
  /**
79
79
  * @description The message shown when an error has been encountered.
80
80
  */
@@ -94,7 +94,7 @@ const UIStrings = {
94
94
  */
95
95
  notLoggedIn: 'This feature is only available when you sign in to Chrome with your Google account.',
96
96
  /**
97
- * @description The title of a button which opens the Chrome SignIn page.
97
+ * @description Title of a button which opens the Chrome sign-in page.
98
98
  */
99
99
  signIn: 'Sign in',
100
100
  /**
@@ -120,13 +120,12 @@ const UIStrings = {
120
120
  * available and a page reload might populate it.
121
121
  */
122
122
  reloadRecommendation:
123
- 'Reload the page to capture related network request data for this message in order to create a better insight.',
123
+ 'Reload the page to capture related network request data for this message to get a better insight.',
124
124
  /**
125
125
  * @description Shown to the user when they need to enable the console insights feature in settings in order to use it.
126
126
  * @example {Console insights in Settings} PH1
127
127
  */
128
- turnOnInSettings:
129
- 'Turn on {PH1} to receive AI assistance for understanding and addressing console warnings and errors.',
128
+ turnOnInSettings: 'Turn on {PH1} to use AI assistance for understanding and addressing console warnings and errors.',
130
129
  /**
131
130
  * @description Text for a link to Chrome DevTools Settings.
132
131
  */
@@ -11,15 +11,15 @@ import * as UI from '../../ui/legacy/legacy.js';
11
11
 
12
12
  const UIStrings = {
13
13
  /**
14
- * @description Message to offer insights for a console error message
14
+ * @description Message to offer insights for a console error message.
15
15
  */
16
16
  explainThisError: 'Understand this error',
17
17
  /**
18
- * @description Message to offer insights for a console warning message
18
+ * @description Message to offer insights for a console warning message.
19
19
  */
20
20
  explainThisWarning: 'Understand this warning',
21
21
  /**
22
- * @description Message to offer insights for a console message
22
+ * @description Message to offer insights for a console message.
23
23
  */
24
24
  explainThisMessage: 'Understand this message',
25
25
  /**
@@ -6,7 +6,8 @@ import * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
7
  import type * as SDK from '../../core/sdk/sdk.js';
8
8
  import * as UI from '../../ui/legacy/legacy.js';
9
- import {html, render} from '../../ui/lit/lit.js';
9
+ import {Directives, html, nothing, render, type TemplateResult} from '../../ui/lit/lit.js';
10
+ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
10
11
 
11
12
  import layerTreeOutlineStyles from './layerTreeOutline.css.js';
12
13
  import {
@@ -41,57 +42,118 @@ const UIStrings = {
41
42
  const str_ = i18n.i18n.registerUIStrings('panels/layer_viewer/LayerTreeOutline.ts', UIStrings);
42
43
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
43
44
 
45
+ const {ref, repeat} = Directives;
46
+ export interface LayerTreeNode {
47
+ layer: SDK.LayerTreeBase.Layer;
48
+ isExpanded: boolean;
49
+ children: LayerTreeNode[];
50
+ }
51
+
44
52
  export interface ViewInput {
45
- treeOutlineElement: HTMLElement;
53
+ treeData: LayerTreeNode[];
54
+ selectedLayer: SDK.LayerTreeBase.Layer|null;
55
+ hoveredLayer: SDK.LayerTreeBase.Layer|null;
46
56
  layerCount: number;
47
57
  totalLayerMemory: number;
58
+ onSelect: (layer: SDK.LayerTreeBase.Layer) => void;
59
+ onHover: (layer: SDK.LayerTreeBase.Layer|null) => void;
60
+ onContextMenu: (event: MouseEvent, layer: SDK.LayerTreeBase.Layer|null) => void;
61
+ }
62
+
63
+ export interface ViewOutput {
64
+ focusTree?: () => void;
65
+ revealLayer?: (layer: SDK.LayerTreeBase.Layer) => void;
48
66
  }
49
- export type View = (input: ViewInput, output: object, target: HTMLElement) => void;
50
67
 
51
- const DEFAULT_VIEW: View = (input, _output, target) => {
68
+ export type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
69
+
70
+ export const DEFAULT_VIEW: View = (input, output, target) => {
71
+ const renderNode = (node: LayerTreeNode): TemplateResult => {
72
+ const layer = node.layer;
73
+ const domNode = layer.nodeForSelfOrAncestor();
74
+ const titleText = domNode ? domNode.simpleSelector() : '#' + layer.id();
75
+ const detailsText = i18nString(UIStrings.updateChildDimension, {PH1: layer.width(), PH2: layer.height()});
76
+ const isSelected = layer === input.selectedLayer;
77
+ const isHovered = layer === input.hoveredLayer;
78
+
79
+ // clang-format off
80
+ return html`
81
+ <li role="treeitem"
82
+ data-layer-id=${layer.id()}
83
+ class=${isHovered ? 'hovered' : ''}
84
+ ?selected=${isSelected}
85
+ aria-expanded=${node.isExpanded ? 'true' : 'false'}
86
+ @select=${() => input.onSelect(layer)}
87
+ @mouseenter=${() => input.onHover(layer)}
88
+ @mouseleave=${() => input.onHover(null)}>
89
+ <span class="tree-node-title" @contextmenu=${(event: MouseEvent) => {
90
+ input.onContextMenu(event, layer);
91
+ event.stopPropagation();
92
+ }}>
93
+ ${titleText} <span class="dimmed">${detailsText}</span>
94
+ </span>
95
+ ${node.children.length > 0 ? html`<ul role="group">${repeat(node.children, n => n.layer.id(), renderNode)}</ul>` : nothing}
96
+ </li>
97
+ `;
98
+ // clang-format on
99
+ };
100
+
101
+ // clang-format off
52
102
  render(html`
53
103
  <style>${layerTreeOutlineStyles}</style>
54
- <div class="vbox layer-tree-wrapper">
55
- <div style="flex-grow: 1; overflow: auto; display: flex;">
56
- ${input.treeOutlineElement}
57
- </div>
104
+ <div class="vbox layer-tree-wrapper" jslog=${VisualLogging.pane('layers-tree')}>
105
+ <devtools-tree class="layer-tree overflow-auto"
106
+ @contextmenu=${(event: MouseEvent) => input.onContextMenu(event, null)}
107
+ ${ref((el: Element | undefined) => {
108
+ if (el) {
109
+ output.focusTree = () => {
110
+ (el as UI.TreeOutline.TreeViewElement).focus();
111
+ };
112
+ output.revealLayer = (layer: SDK.LayerTreeBase.Layer) => {
113
+ const li = el.querySelector(`li[data-layer-id="${layer.id()}"]`);
114
+ if (li) {
115
+ // Toggling the selected attribute forces TreeViewElement to scroll the node into view.
116
+ li.removeAttribute('selected');
117
+ li.setAttribute('selected', '');
118
+ }
119
+ };
120
+ }
121
+ })}
122
+ .template=${html`
123
+ <style>${layerTreeOutlineStyles}</style>
124
+ <ul role="tree" aria-label=${i18nString(UIStrings.layersTreePane)}>
125
+ ${input.treeData.map(renderNode)}
126
+ </ul>
127
+ `}>
128
+ </devtools-tree>
58
129
  <div class="hbox layer-summary">
59
130
  <span class="layer-count">${i18nString(UIStrings.layerCount, {
60
- PH1: input.layerCount
131
+ PH1: input.layerCount,
61
132
  })}</span>
62
133
  <span>${i18n.ByteUtilities.bytesToString(input.totalLayerMemory)}</span>
63
134
  </div>
64
135
  </div>
65
- `,
66
- target);
136
+ `, target);
137
+ // clang-format on
67
138
  };
68
139
 
69
140
  export class LayerTreeOutline extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.Widget>(
70
141
  UI.Widget.Widget) implements Common.EventTarget.EventTarget<EventTypes>, LayerView {
71
142
  private layerViewHost: LayerViewHost;
72
- private treeOutline: UI.TreeOutline.TreeOutlineInShadow;
73
- private lastHoveredNode: LayerTreeElement|null;
74
143
  private layerTree?: SDK.LayerTreeBase.LayerTreeBase|null;
75
144
  private layerSnapshotMap?: Map<SDK.LayerTreeBase.Layer, SnapshotSelection>;
76
-
77
- #view: View;
78
145
  #layerCount = 0;
79
146
  #totalLayerMemory = 0;
147
+ #treeData: LayerTreeNode[] = [];
148
+ #viewOutput: ViewOutput = {};
149
+ #view: View;
150
+ #hoveredLayer: SDK.LayerTreeBase.Layer|null = null;
80
151
 
81
152
  constructor(layerViewHost: LayerViewHost, view: View = DEFAULT_VIEW) {
82
153
  super();
154
+ this.#view = view;
83
155
  this.layerViewHost = layerViewHost;
84
156
  this.layerViewHost.registerView(this);
85
- this.#view = view;
86
-
87
- this.treeOutline = new UI.TreeOutline.TreeOutlineInShadow();
88
- this.treeOutline.element.classList.add('layer-tree', 'overflow-auto');
89
- this.treeOutline.element.addEventListener('mousemove', this.onMouseMove.bind(this) as EventListener, false);
90
- this.treeOutline.element.addEventListener('mouseout', this.onMouseMove.bind(this) as EventListener, false);
91
- this.treeOutline.element.addEventListener('contextmenu', this.onContextMenu.bind(this) as EventListener, true);
92
- UI.ARIAUtils.setLabel(this.treeOutline.contentElement, i18nString(UIStrings.layersTreePane));
93
-
94
- this.lastHoveredNode = null;
95
157
 
96
158
  this.layerViewHost.showInternalLayersSetting().addChangeListener(this.update, this);
97
159
  }
@@ -103,41 +165,36 @@ export class LayerTreeOutline extends Common.ObjectWrapper.eventMixin<EventTypes
103
165
 
104
166
  override performUpdate(): void {
105
167
  this.#view({
106
- treeOutlineElement: this.treeOutline.element,
168
+ treeData: this.#treeData,
169
+ selectedLayer: this.layerViewHost.selection()?.layer() || null,
170
+ hoveredLayer: this.#hoveredLayer,
107
171
  layerCount: this.#layerCount,
108
172
  totalLayerMemory: this.#totalLayerMemory,
173
+ onSelect: this.onSelect.bind(this),
174
+ onHover: this.onHover.bind(this),
175
+ onContextMenu: this.onContextMenu.bind(this),
109
176
  },
110
- {}, this.contentElement);
177
+ this.#viewOutput, this.contentElement);
111
178
  }
112
179
 
113
180
  override focus(): void {
114
- this.treeOutline.focus();
181
+ this.#viewOutput.focusTree?.();
115
182
  }
116
183
 
117
184
  selectObject(selection: Selection|null): void {
118
185
  this.hoverObject(null);
119
- const layer = selection?.layer();
120
- const node = layer && layerToTreeElement.get(layer);
121
- if (node) {
122
- node.revealAndSelect(true);
123
- } else if (this.treeOutline.selectedTreeElement) {
124
- this.treeOutline.selectedTreeElement.deselect();
186
+ this.requestUpdate();
187
+ if (selection) {
188
+ // Defer revealLayer to ensure Lit has finished rendering DOM updates
189
+ queueMicrotask(() => {
190
+ this.#viewOutput.revealLayer?.(selection.layer());
191
+ });
125
192
  }
126
193
  }
127
194
 
128
195
  hoverObject(selection: Selection|null): void {
129
- const layer = selection?.layer();
130
- const node = layer && layerToTreeElement.get(layer);
131
- if (node === this.lastHoveredNode) {
132
- return;
133
- }
134
- if (this.lastHoveredNode) {
135
- this.lastHoveredNode.setHovered(false);
136
- }
137
- if (node) {
138
- node.setHovered(true);
139
- }
140
- this.lastHoveredNode = node as LayerTreeElement;
196
+ this.#hoveredLayer = selection?.layer() || null;
197
+ this.requestUpdate();
141
198
  }
142
199
 
143
200
  setLayerTree(layerTree: SDK.LayerTreeBase.LayerTreeBase|null): void {
@@ -146,9 +203,11 @@ export class LayerTreeOutline extends Common.ObjectWrapper.eventMixin<EventTypes
146
203
  }
147
204
 
148
205
  private update(): void {
206
+ let layerCount = 0;
207
+ let totalLayerMemory = 0;
208
+
149
209
  const showInternalLayers = this.layerViewHost.showInternalLayersSetting().get();
150
- const seenLayers = new Set<SDK.LayerTreeBase.Layer>();
151
- let root: (SDK.LayerTreeBase.Layer|null)|null = null;
210
+ let root: SDK.LayerTreeBase.Layer|null = null;
152
211
  if (this.layerTree) {
153
212
  if (!showInternalLayers) {
154
213
  root = this.layerTree.contentRoot();
@@ -158,9 +217,6 @@ export class LayerTreeOutline extends Common.ObjectWrapper.eventMixin<EventTypes
158
217
  }
159
218
  }
160
219
 
161
- let layerCount = 0;
162
- let totalLayerMemory = 0;
163
-
164
220
  const childrenMap = new Map<SDK.LayerTreeBase.Layer, SDK.LayerTreeBase.Layer[]>();
165
221
 
166
222
  if (this.layerTree && root) {
@@ -197,103 +253,51 @@ export class LayerTreeOutline extends Common.ObjectWrapper.eventMixin<EventTypes
197
253
  this.layerTree.forEachLayer(buildTree, root);
198
254
  }
199
255
 
200
- const syncNode =
201
- (layer: SDK.LayerTreeBase.Layer, parent: UI.TreeOutline.TreeOutline|UI.TreeOutline.TreeElement): void => {
202
- seenLayers.add(layer);
203
- let node: LayerTreeElement|null = layerToTreeElement.get(layer) || null;
204
- if (!node) {
205
- node = new LayerTreeElement(this, layer);
206
- parent.appendChild(node);
207
- // Expand all new non-content layers to expose content layers better.
208
- if (!layer.drawsContent()) {
209
- node.expand();
210
- }
211
- } else {
212
- if (node.parent !== parent) {
213
- const oldSelection = this.treeOutline.selectedTreeElement;
214
- if (node.parent) {
215
- node.parent.removeChild(node);
216
- }
217
- parent.appendChild(node);
218
- if (oldSelection && oldSelection !== this.treeOutline.selectedTreeElement) {
219
- oldSelection.select();
220
- }
221
- }
222
- node.update();
223
- }
224
-
225
- const children = childrenMap.get(layer) || [];
226
- for (const child of children) {
227
- syncNode(child, node);
228
- }
229
- };
256
+ const makeTreeNode = (layer: SDK.LayerTreeBase.Layer): LayerTreeNode => {
257
+ const children = childrenMap.get(layer) || [];
258
+ return {
259
+ layer,
260
+ isExpanded: !layer.drawsContent(),
261
+ children: children.map(makeTreeNode),
262
+ };
263
+ };
230
264
 
231
- if (root && (root.drawsContent() || showInternalLayers)) {
232
- syncNode(root, this.treeOutline.rootElement());
233
- }
265
+ this.#treeData = root && (root.drawsContent() || showInternalLayers) ? [makeTreeNode(root)] : [];
266
+ this.#layerCount = layerCount;
267
+ this.#totalLayerMemory = totalLayerMemory;
268
+ this.requestUpdate();
234
269
 
235
- // Clean up layers that don't exist anymore from tree.
236
- const rootElement = this.treeOutline.rootElement();
237
- for (let node = rootElement.firstChild(); node instanceof LayerTreeElement && !node.root;) {
238
- if (seenLayers.has(node.layer)) {
239
- node = node.traverseNextTreeElement(false);
240
- } else {
241
- const nextNode = node.nextSibling || node.parent;
242
- if (node.parent) {
243
- node.parent.removeChild(node);
244
- }
245
- if (node === this.lastHoveredNode) {
246
- this.lastHoveredNode = null;
247
- }
248
- node = nextNode;
249
- }
250
- }
251
- if (!this.treeOutline.selectedTreeElement && this.layerTree) {
270
+ if (!this.layerViewHost.selection() && this.layerTree && this.#treeData.length > 0) {
252
271
  const elementToSelect = this.layerTree.contentRoot() || this.layerTree.root();
253
272
  if (elementToSelect) {
254
- const layer = layerToTreeElement.get(elementToSelect);
255
- if (layer) {
256
- layer.revealAndSelect(true);
257
- }
273
+ this.layerViewHost.selectObject(new LayerSelection(elementToSelect));
258
274
  }
259
275
  }
276
+ }
260
277
 
261
- this.#layerCount = layerCount;
262
- this.#totalLayerMemory = totalLayerMemory;
263
- this.requestUpdate();
278
+ private onHover(layer: SDK.LayerTreeBase.Layer|null): void {
279
+ this.layerViewHost.hoverObject(layer ? new LayerSelection(layer) : null);
264
280
  }
265
281
 
266
- private onMouseMove(event: MouseEvent): void {
267
- const node = this.treeOutline.treeElementFromEvent(event) as LayerTreeElement | null;
268
- if (node === this.lastHoveredNode) {
282
+ private onSelect(layer: SDK.LayerTreeBase.Layer): void {
283
+ if (this.layerViewHost.selection()?.layer() === layer) {
269
284
  return;
270
285
  }
271
- this.layerViewHost.hoverObject(this.selectionForNode(node));
272
- }
273
-
274
- selectedNodeChanged(node: LayerTreeElement): void {
275
- this.layerViewHost.selectObject(this.selectionForNode(node));
286
+ this.layerViewHost.selectObject(new LayerSelection(layer));
276
287
  }
277
288
 
278
- private onContextMenu(event: MouseEvent): void {
279
- const selection = this.selectionForNode(this.treeOutline.treeElementFromEvent(event) as LayerTreeElement | null);
289
+ private onContextMenu(event: MouseEvent, layer: SDK.LayerTreeBase.Layer|null): void {
290
+ const selection = layer ? new LayerSelection(layer) : null;
280
291
  const contextMenu = new UI.ContextMenu.ContextMenu(event);
281
- const layer = selection?.layer();
282
- if (selection && layer) {
283
- this.layerSnapshotMap = this.layerViewHost.getLayerSnapshotMap();
284
- if (this.layerSnapshotMap.has(layer)) {
285
- contextMenu.defaultSection().appendItem(
286
- i18nString(UIStrings.showPaintProfiler),
287
- () => this.dispatchEventToListeners(Events.PAINT_PROFILER_REQUESTED, selection),
288
- {jslogContext: 'layers.paint-profiler'});
289
- }
292
+ this.layerSnapshotMap = this.layerViewHost.getLayerSnapshotMap();
293
+ if (layer && this.layerSnapshotMap.has(layer) && selection) {
294
+ contextMenu.defaultSection().appendItem(
295
+ i18nString(UIStrings.showPaintProfiler),
296
+ () => this.dispatchEventToListeners(Events.PAINT_PROFILER_REQUESTED, selection),
297
+ {jslogContext: 'layers.paint-profiler'});
290
298
  }
291
299
  this.layerViewHost.showContextMenu(contextMenu, selection);
292
300
  }
293
-
294
- private selectionForNode(node: LayerTreeElement|null): Selection|null {
295
- return node?.layer ? new LayerSelection(node.layer) : null;
296
- }
297
301
  }
298
302
 
299
303
  export const enum Events {
@@ -303,39 +307,3 @@ export const enum Events {
303
307
  export interface EventTypes {
304
308
  [Events.PAINT_PROFILER_REQUESTED]: Selection;
305
309
  }
306
-
307
- export class LayerTreeElement extends UI.TreeOutline.TreeElement {
308
- // Watch out: This is different from treeOutline that
309
- // LayerTreeElement inherits from UI.TreeOutline.TreeElement.
310
- #treeOutline: LayerTreeOutline;
311
- layer: SDK.LayerTreeBase.Layer;
312
-
313
- constructor(tree: LayerTreeOutline, layer: SDK.LayerTreeBase.Layer) {
314
- super();
315
- this.#treeOutline = tree;
316
- this.layer = layer;
317
- layerToTreeElement.set(layer, this);
318
- this.update();
319
- }
320
-
321
- update(): void {
322
- const node = this.layer.nodeForSelfOrAncestor();
323
- const title = document.createDocumentFragment();
324
- UI.UIUtils.createTextChild(title, node ? node.simpleSelector() : '#' + this.layer.id());
325
- const details = title.createChild('span', 'dimmed');
326
- details.textContent =
327
- i18nString(UIStrings.updateChildDimension, {PH1: this.layer.width(), PH2: this.layer.height()});
328
- this.title = title;
329
- }
330
-
331
- override onselect(): boolean {
332
- this.#treeOutline.selectedNodeChanged(this);
333
- return false;
334
- }
335
-
336
- setHovered(hovered: boolean): void {
337
- this.listItemElement.classList.toggle('hovered', hovered);
338
- }
339
- }
340
-
341
- export const layerToTreeElement = new WeakMap<SDK.LayerTreeBase.Layer, LayerTreeElement>();
@@ -55,16 +55,6 @@ const UIStrings = {
55
55
  * @example {about:gpu} PH1
56
56
  */
57
57
  checkSForPossibleReasons: 'Check {PH1} for possible reasons.',
58
- /**
59
- * @description Text for a checkbox in the toolbar of the Layers panel to show the area of slow scroll rect
60
- */
61
- slowScrollRects: 'Slow scroll rects',
62
- /**
63
- * @description Text for a checkbox in the toolbar of the Layers panel. This is a noun, for a
64
- * setting meaning 'display paints in the layers viewer'. 'Paints' here means 'paint events' i.e.
65
- * when the browser draws pixels to the screen.
66
- */
67
- paints: 'Paints',
68
58
  /**
69
59
  * @description A context menu item in the DView of the Layers panel
70
60
  */
@@ -111,7 +101,7 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
111
101
  ${input.panelToolbar}
112
102
  ${input.error === 'missing-root' ? html`<div>${widget(UI.EmptyWidget.EmptyWidget, {
113
103
  header: i18nString(UIStrings.noLayerInformation),
114
- text: i18nString(UIStrings.layerExplanation)
104
+ text: i18nString(UIStrings.layerExplanation),
115
105
  })}</div>` : Lit.nothing}
116
106
  ${input.error === 'webgl-disabled' ? html`<div>${widget(UI.EmptyWidget.EmptyWidget, {
117
107
  header: i18nString(UIStrings.cantDisplayLayers),
@@ -120,16 +110,16 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
120
110
  uiI18n.getFormatLocalizedString(
121
111
  str_, UIStrings.checkSForPossibleReasons,
122
112
  {
123
- PH1: Link.create('chrome://gpu', undefined, undefined, 'about-gpu', 0, true)
124
- }
125
- )
113
+ PH1: Link.create('chrome://gpu', undefined, undefined, 'about-gpu', 0, true),
114
+ },
115
+ ),
126
116
  ],
127
117
  })}</div>` : Lit.nothing}
128
118
  <canvas
129
119
  tabindex="0"
130
120
  jslog=${VisualLogging.canvas('layers').track({
131
121
  click: true,
132
- drag: true
122
+ drag: true,
133
123
  })}
134
124
  aria-label=${i18nString(UIStrings.dLayersView)}
135
125
  @dblclick=${input.onDoubleClick}
@@ -194,10 +184,9 @@ export class Layers3DView extends Common.ObjectWrapper.eventMixin<EventTypes, ty
194
184
 
195
185
  this.transformController.addEventListener(TransformControllerEvents.TRANSFORM_CHANGED, this.updateData, this);
196
186
  this.panelToolbar = this.transformController.toolbar();
197
- this.showPaintsSetting = this.createVisibilitySetting(
198
- i18nString(UIStrings.paints), 'frame-viewer-show-paints', false, this.panelToolbar);
199
- this.showSlowScrollRectsSetting = this.createVisibilitySetting(
200
- i18nString(UIStrings.slowScrollRects), 'frame-viewer-show-slow-scroll-rects', true, this.panelToolbar);
187
+ this.showPaintsSetting = this.createVisibilitySetting('frame-viewer-show-paints', this.panelToolbar);
188
+ this.showSlowScrollRectsSetting =
189
+ this.createVisibilitySetting('frame-viewer-show-slow-scroll-rects', this.panelToolbar);
201
190
  this.showPaintsSetting.addChangeListener(this.updatePaints, this);
202
191
  Common.Settings.Settings.instance()
203
192
  .moduleSetting('frame-viewer-chrome-window')
@@ -875,10 +864,8 @@ export class Layers3DView extends Common.ObjectWrapper.eventMixin<EventTypes, ty
875
864
  }
876
865
 
877
866
  private createVisibilitySetting(
878
- caption: Common.UIString.LocalizedString, name: string, value: boolean,
879
- toolbar: UI.Toolbar.Toolbar): Common.Settings.Setting<boolean> {
880
- const setting = Common.Settings.Settings.instance().createSetting(name, value);
881
- setting.setTitle(caption);
867
+ name: string, toolbar: UI.Toolbar.Toolbar): Common.Settings.Setting<boolean> {
868
+ const setting = Common.Settings.Settings.instance().moduleSetting<boolean>(name);
882
869
  setting.addChangeListener(this.updateData, this);
883
870
  toolbar.appendToolbarItem(new UI.Toolbar.ToolbarSettingCheckbox(setting));
884
871
  return setting;
@@ -2,10 +2,19 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as Common from '../../core/common/common.js';
5
6
  import * as i18n from '../../core/i18n/i18n.js';
6
7
  import * as UI from '../../ui/legacy/legacy.js';
7
8
 
8
9
  const UIStrings = {
10
+ /**
11
+ * @description Title of a setting in Layer Viewer.
12
+ */
13
+ paints: 'Paints',
14
+ /**
15
+ * @description Title of a setting in Layer Viewer.
16
+ */
17
+ slowScrollRects: 'Slow scroll rects',
9
18
  /**
10
19
  * @description Text in the Shortcuts page to explain a keyboard shortcut (reset view in Layers Panel)
11
20
  */
@@ -162,3 +171,21 @@ UI.ActionRegistration.registerActionExtension({
162
171
  },
163
172
  ],
164
173
  });
174
+
175
+ Common.Settings.registerSettingExtension({
176
+ category: Common.Settings.SettingCategory.NONE,
177
+ storageType: Common.Settings.SettingStorageType.GLOBAL,
178
+ title: i18nLazyString(UIStrings.paints),
179
+ settingName: 'frame-viewer-show-paints',
180
+ settingType: Common.Settings.SettingType.BOOLEAN,
181
+ defaultValue: false,
182
+ });
183
+
184
+ Common.Settings.registerSettingExtension({
185
+ category: Common.Settings.SettingCategory.NONE,
186
+ storageType: Common.Settings.SettingStorageType.GLOBAL,
187
+ title: i18nLazyString(UIStrings.slowScrollRects),
188
+ settingName: 'frame-viewer-show-slow-scroll-rects',
189
+ settingType: Common.Settings.SettingType.BOOLEAN,
190
+ defaultValue: true,
191
+ });