chrome-devtools-frontend 1.0.1662289 → 1.0.1664496

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 (319) hide show
  1. package/.agents/skills/{creating-a-model → devtools-model-management}/SKILL.md +0 -1
  2. package/.agents/skills/devtools-unicode-escaping/SKILL.md +64 -0
  3. package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +2 -1
  4. package/.agents/skills/fixing-skipped-tests/SKILL.md +3 -3
  5. package/.agents/skills/merging-devtools-module/SKILL.md +1 -1
  6. package/.agents/skills/migrate-chromium-test/SKILL.md +32 -6
  7. package/.agents/skills/repro-flaky-tests/SKILL.md +71 -31
  8. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +1 -0
  9. package/docs/ui_engineering.md +2 -0
  10. package/eslint.config.mjs +1 -0
  11. package/front_end/core/common/SettingRegistration.ts +0 -5
  12. package/front_end/core/common/Settings.ts +144 -3
  13. package/front_end/core/platform/StringUtilities.ts +38 -6
  14. package/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts +112 -0
  15. package/front_end/core/sdk/CPUProfilerModel.ts +21 -13
  16. package/front_end/core/sdk/CSSContainerQuery.ts +1 -1
  17. package/front_end/core/sdk/CSSLayer.ts +1 -1
  18. package/front_end/core/sdk/CSSMedia.ts +1 -1
  19. package/front_end/core/sdk/CSSModel.ts +1 -1
  20. package/front_end/core/sdk/CSSNavigation.ts +1 -1
  21. package/front_end/core/sdk/CSSProperty.ts +1 -1
  22. package/front_end/core/sdk/CSSQuery.ts +1 -1
  23. package/front_end/core/sdk/CSSRule.ts +1 -1
  24. package/front_end/core/sdk/CSSScope.ts +1 -1
  25. package/front_end/core/sdk/CSSStartingStyle.ts +1 -1
  26. package/front_end/core/sdk/CSSStyleDeclaration.ts +1 -1
  27. package/front_end/core/sdk/CSSStyleSheetHeader.ts +1 -1
  28. package/front_end/core/sdk/CSSSupports.ts +1 -1
  29. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
  30. package/front_end/core/sdk/NetworkManager.ts +1 -1
  31. package/front_end/core/sdk/NetworkRequest.ts +7 -7
  32. package/front_end/core/sdk/Resource.ts +1 -1
  33. package/front_end/core/sdk/ScopeTreeCache.ts +1 -1
  34. package/front_end/core/sdk/Script.ts +1 -1
  35. package/front_end/core/sdk/ServerSentEvents.ts +1 -1
  36. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +0 -10
  37. package/front_end/core/sdk/SourceMap.ts +1 -1
  38. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  39. package/front_end/core/sdk/StorageBucketsModel.ts +0 -10
  40. package/front_end/core/sdk/sdk-meta.ts +3 -4
  41. package/front_end/{models → core}/text_utils/ContentProvider.ts +4 -6
  42. package/front_end/{models → core}/text_utils/StaticContentProvider.ts +4 -6
  43. package/front_end/{models → core}/text_utils/StreamingContentData.ts +1 -2
  44. package/front_end/{models → core}/text_utils/TextRange.ts +6 -3
  45. package/front_end/{models → core}/text_utils/TextUtils.ts +7 -7
  46. package/front_end/{models → core}/text_utils/WasmDisassembly.ts +2 -2
  47. package/front_end/core/text_utils/text_utils.ts +27 -0
  48. package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +1 -1
  49. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
  50. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +0 -13
  51. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +8 -3
  52. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +3 -3
  53. package/front_end/entrypoints/main/MainImpl.ts +21 -3
  54. package/front_end/foundation/Universe.ts +16 -0
  55. package/front_end/generated/InspectorBackendCommands.ts +2 -14
  56. package/front_end/generated/protocol-mapping.d.ts +0 -53
  57. package/front_end/generated/protocol-proxy-api.d.ts +0 -46
  58. package/front_end/generated/protocol.ts +0 -148
  59. package/front_end/models/ai_assistance/AgentProject.ts +1 -1
  60. package/front_end/models/ai_assistance/AiAgent2.ts +3 -3
  61. package/front_end/models/ai_assistance/AiConversation.ts +21 -10
  62. package/front_end/models/ai_assistance/AiHistoryStorage.ts +21 -10
  63. package/front_end/models/ai_assistance/ChangeManager.ts +2 -2
  64. package/front_end/models/ai_assistance/ExtensionScope.ts +6 -2
  65. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +4 -7
  66. package/front_end/models/ai_assistance/agents/AiAgent.ts +9 -2
  67. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -11
  68. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
  69. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +23 -10
  70. package/front_end/models/ai_assistance/agents/StorageAgent.ts +19 -18
  71. package/front_end/models/ai_assistance/agents/StylingAgent.ts +3 -4
  72. package/front_end/models/ai_assistance/contexts/FileContext.ts +7 -3
  73. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +39 -11
  74. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +6 -3
  75. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
  76. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +4 -4
  77. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
  78. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +76 -3
  79. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +11 -1
  80. package/front_end/models/badges/AiExplorerBadge.ts +8 -3
  81. package/front_end/models/badges/Badge.ts +1 -0
  82. package/front_end/models/badges/UserBadges.ts +43 -23
  83. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
  84. package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
  85. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
  86. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
  87. package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
  88. package/front_end/models/bindings/FileUtils.ts +1 -1
  89. package/front_end/models/bindings/NetworkProject.ts +16 -4
  90. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +7 -10
  91. package/front_end/models/bindings/ResourceMapping.ts +1 -1
  92. package/front_end/models/bindings/ResourceScriptMapping.ts +1 -1
  93. package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
  94. package/front_end/models/bindings/StylesSourceMapping.ts +1 -1
  95. package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
  96. package/front_end/models/crux-manager/CrUXManager.ts +1 -1
  97. package/front_end/models/emulation/DeviceModeModel.ts +67 -5
  98. package/front_end/models/emulation/EmulatedDevices.ts +3 -2
  99. package/front_end/models/extensions/RecorderPluginManager.ts +10 -6
  100. package/front_end/models/har/Importer.ts +1 -1
  101. package/front_end/models/har/Log.snapshot.txt +193 -0
  102. package/front_end/models/har/Log.ts +3 -2
  103. package/front_end/models/har/Writer.ts +1 -1
  104. package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
  105. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  106. package/front_end/models/issues_manager/LazyLoadImageIssue.ts +76 -0
  107. package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +7 -0
  108. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  109. package/front_end/models/javascript_metadata/NativeFunctions.js +9 -10
  110. package/front_end/models/live-metrics/LiveMetrics.ts +2 -3
  111. package/front_end/models/logs/NetworkLog.ts +4 -3
  112. package/front_end/models/logs/logs-meta.ts +3 -3
  113. package/front_end/models/network_time_calculator/NetworkTimeCalculator.ts +4 -4
  114. package/front_end/models/persistence/Automapping.ts +1 -1
  115. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
  116. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
  117. package/front_end/models/persistence/IsolatedFileSystem.ts +2 -2
  118. package/front_end/models/persistence/NetworkPersistenceManager.ts +1 -1
  119. package/front_end/models/persistence/PersistenceImpl.ts +1 -1
  120. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  121. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +8 -6
  122. package/front_end/models/source_map_scopes/NamesResolver.ts +37 -31
  123. package/front_end/models/stack_trace/StackTrace.ts +17 -0
  124. package/front_end/models/text_utils/text_utils.ts +2 -24
  125. package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
  126. package/front_end/models/trace/insights/LegacyJavaScript.ts +1 -1
  127. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  128. package/front_end/models/trace/insights/ThirdParties.ts +1 -1
  129. package/front_end/models/workspace/FileManager.ts +1 -1
  130. package/front_end/models/workspace/UISourceCode.ts +1 -1
  131. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  132. package/front_end/models/workspace_diff/WorkspaceDiff.ts +1 -1
  133. package/front_end/panels/accessibility/AccessibilityNodeView.ts +1 -1
  134. package/front_end/panels/accessibility/AccessibilityStrings.ts +2 -2
  135. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -1
  136. package/front_end/panels/ai_assistance/ExportConversation.ts +1 -1
  137. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -1
  138. package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
  139. package/front_end/panels/application/AppManifestView.ts +4 -4
  140. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -2
  141. package/front_end/panels/application/CrashReportContextView.ts +1 -1
  142. package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
  143. package/front_end/panels/application/DeviceBoundSessionsView.ts +4 -4
  144. package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
  145. package/front_end/panels/application/FrameDetailsView.ts +1 -1
  146. package/front_end/panels/application/IndexedDBModel.ts +0 -10
  147. package/front_end/panels/application/IndexedDBViews.ts +240 -164
  148. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +12 -2
  149. package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
  150. package/front_end/panels/application/SharedStorageModel.ts +0 -10
  151. package/front_end/panels/application/application.ts +2 -0
  152. package/front_end/panels/application/components/AdsView.ts +23 -0
  153. package/front_end/panels/application/components/BackForwardCacheView.ts +21 -5
  154. package/front_end/panels/application/components/CrashReportContextGrid.ts +1 -1
  155. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +1 -1
  156. package/front_end/panels/application/components/TrustTokensView.ts +2 -2
  157. package/front_end/panels/application/components/adsView.css +21 -1
  158. package/front_end/panels/application/indexedDBViews.css +1 -1
  159. package/front_end/panels/application/preloading/PreloadingView.ts +1 -1
  160. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
  161. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -2
  162. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +4 -4
  163. package/front_end/panels/autofill/AutofillView.ts +1 -1
  164. package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
  165. package/front_end/panels/common/ExtensionServer.ts +1 -1
  166. package/front_end/panels/console/ConsoleFilter.ts +1 -1
  167. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  168. package/front_end/panels/console/ConsoleView.ts +1 -1
  169. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  170. package/front_end/panels/console/PromptBuilder.ts +1 -1
  171. package/front_end/panels/coverage/CoverageDecorationManager.ts +9 -1
  172. package/front_end/panels/coverage/CoverageModel.ts +1 -1
  173. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  174. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  175. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
  176. package/front_end/panels/elements/AccessibilityTreeView.ts +38 -3
  177. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +1 -1
  178. package/front_end/panels/elements/ElementIssueUtils.ts +2 -2
  179. package/front_end/panels/elements/ElementsTreeElement.ts +10 -3
  180. package/front_end/panels/elements/StandaloneStylesContainer.ts +1 -1
  181. package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
  182. package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
  183. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  184. package/front_end/panels/elements/StylesContainer.ts +1 -1
  185. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  186. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +1 -1
  187. package/front_end/panels/explain/components/ConsoleInsight.ts +2 -2
  188. package/front_end/panels/issues/AffectedLazyLoadImagesView.ts +76 -0
  189. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  190. package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -1
  191. package/front_end/panels/issues/IssueView.ts +2 -0
  192. package/front_end/panels/issues/issues.ts +2 -0
  193. package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
  194. package/front_end/panels/lighthouse/LighthouseController.ts +5 -0
  195. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  196. package/front_end/panels/network/BinaryResourceView.ts +1 -1
  197. package/front_end/panels/network/NetworkDataGridNode.ts +72 -8
  198. package/front_end/panels/network/NetworkLogView.ts +1 -1
  199. package/front_end/panels/network/NetworkLogViewColumns.ts +6 -6
  200. package/front_end/panels/network/NetworkPanel.ts +4 -4
  201. package/front_end/panels/network/NetworkSearchScope.ts +1 -1
  202. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  203. package/front_end/panels/network/RequestHTMLView.ts +1 -1
  204. package/front_end/panels/network/RequestInitiatorView.ts +24 -2
  205. package/front_end/panels/network/RequestPayloadView.ts +1 -1
  206. package/front_end/panels/network/RequestPreviewView.ts +1 -1
  207. package/front_end/panels/network/RequestResponseView.ts +1 -1
  208. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  209. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
  210. package/front_end/panels/network/ResourceWebSocketFrameView.ts +1 -1
  211. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  212. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -1
  213. package/front_end/panels/network/network-meta.ts +3 -3
  214. package/front_end/panels/network/networkLogView.css +5 -0
  215. package/front_end/panels/network/requestInitiatorViewTree.css +5 -0
  216. package/front_end/panels/profiler/HeapProfileView.ts +200 -81
  217. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  218. package/front_end/panels/profiler/ProfileDataGrid.ts +12 -8
  219. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -1
  220. package/front_end/panels/recorder/README.md +1 -2
  221. package/front_end/panels/recorder/RecorderPanel.ts +1861 -17
  222. package/front_end/panels/recorder/RecordingListView.ts +8 -37
  223. package/front_end/panels/recorder/RecordingView.ts +54 -27
  224. package/front_end/panels/recorder/SelectorPicker.ts +0 -13
  225. package/front_end/panels/recorder/StepEditor.ts +6 -14
  226. package/front_end/panels/recorder/StepView.ts +36 -105
  227. package/front_end/panels/recorder/recorder.ts +0 -2
  228. package/front_end/panels/search/SearchResultsPane.ts +1 -1
  229. package/front_end/panels/security/SecurityPanel.ts +3 -3
  230. package/front_end/panels/settings/AISettingsTab.ts +17 -4
  231. package/front_end/panels/settings/components/SyncSection.ts +4 -4
  232. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +3 -3
  233. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +1 -1
  234. package/front_end/panels/sources/BreakpointsView.ts +1 -1
  235. package/front_end/panels/sources/CoveragePlugin.ts +1 -1
  236. package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
  237. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +27 -3
  238. package/front_end/panels/sources/NavigatorView.ts +1 -1
  239. package/front_end/panels/sources/PersistenceActions.ts +1 -1
  240. package/front_end/panels/sources/SourcesNavigator.ts +1 -1
  241. package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
  242. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  243. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  244. package/front_end/panels/sources/components/HeadersView.ts +1 -1
  245. package/front_end/panels/sources/filteredUISourceCodeListProvider.css +12 -1
  246. package/front_end/panels/sources/sources-meta.ts +1 -1
  247. package/front_end/panels/timeline/StatusDialog.ts +1 -1
  248. package/front_end/panels/timeline/TimelineController.ts +24 -3
  249. package/front_end/panels/timeline/TimelinePanel.ts +116 -25
  250. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
  251. package/front_end/panels/timeline/TimelineUIUtils.ts +1 -1
  252. package/front_end/panels/timeline/components/CWVMetrics.ts +1 -1
  253. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  254. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  255. package/front_end/panels/timeline/timeline-meta.ts +13 -0
  256. package/front_end/services/tracing/TracingManager.ts +27 -2
  257. package/front_end/third_party/chromium/README.chromium +1 -1
  258. package/front_end/third_party/lighthouse/README.chromium +2 -2
  259. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1418 -1413
  260. package/front_end/third_party/lighthouse/locales/en-US.json +12 -6
  261. package/front_end/third_party/lighthouse/locales/en-XL.json +12 -6
  262. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
  263. package/front_end/third_party/puppeteer/puppeteer.ts +20 -1
  264. package/front_end/ui/components/highlighting/HighlightElement.ts +4 -1
  265. package/front_end/ui/components/highlighting/HighlightManager.ts +1 -1
  266. package/front_end/ui/components/highlighting/MarkupHighlight.ts +1 -1
  267. package/front_end/ui/components/markdown_view/MarkdownView.ts +46 -2
  268. package/front_end/ui/components/markdown_view/markdownView.css +23 -0
  269. package/front_end/ui/components/spinners/Spinner.ts +29 -32
  270. package/front_end/ui/components/spinners/spinner.css +32 -84
  271. package/front_end/ui/components/text_editor/config.ts +1 -1
  272. package/front_end/ui/components/tree_outline/TreeOutline.ts +7 -1
  273. package/front_end/ui/legacy/Infobar.ts +1 -1
  274. package/front_end/ui/legacy/InspectorView.ts +12 -7
  275. package/front_end/ui/legacy/SuggestBox.ts +1 -1
  276. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  277. package/front_end/ui/legacy/Toolbar.ts +5 -2
  278. package/front_end/ui/legacy/Treeoutline.ts +40 -13
  279. package/front_end/ui/legacy/UIUtils.ts +25 -10
  280. package/front_end/ui/legacy/Widget.ts +17 -10
  281. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  282. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +37 -8
  283. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
  284. package/front_end/ui/legacy/components/data_grid/dataGrid.css +1 -1
  285. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +27 -13
  286. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +5 -2
  287. package/front_end/ui/legacy/components/inline_editor/CSSLinearEasingModel.ts +23 -0
  288. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +223 -121
  289. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +1 -1
  290. package/front_end/ui/legacy/components/object_ui/objectValue.css +2 -1
  291. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  292. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +1 -1
  293. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -1
  294. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  295. package/front_end/ui/legacy/components/source_frame/JSONView.ts +105 -115
  296. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +1 -1
  297. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +1 -1
  298. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +3 -3
  299. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
  300. package/front_end/ui/legacy/components/source_frame/XMLView.ts +5 -1
  301. package/front_end/ui/legacy/components/source_frame/jsonView.css +4 -0
  302. package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
  303. package/front_end/ui/legacy/inspectorCommon.css +10 -6
  304. package/front_end/ui/lit/lit.ts +1 -0
  305. package/front_end/ui/lit/render.ts +44 -10
  306. package/front_end/ui/lit/strip-whitespace.ts +23 -2
  307. package/front_end/ui/settings/SettingUIRegistration.ts +105 -0
  308. package/front_end/ui/settings/settings.ts +9 -0
  309. package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
  310. package/mcp/mcp.ts +1 -0
  311. package/package.json +1 -1
  312. package/front_end/panels/recorder/RecorderController.ts +0 -1759
  313. /package/.agents/skills/{verification → devtools-verification}/SKILL.md +0 -0
  314. /package/front_end/{models → core}/text_utils/CodeMirrorUtils.ts +0 -0
  315. /package/front_end/{models → core}/text_utils/ContentData.ts +0 -0
  316. /package/front_end/{models → core}/text_utils/Text.ts +0 -0
  317. /package/front_end/{models → core}/text_utils/TextCursor.ts +0 -0
  318. /package/front_end/{models → core}/text_utils/TextUtils.snapshot.txt +0 -0
  319. /package/front_end/panels/recorder/{recorderController.css → recorderPanel.css} +0 -0
@@ -480,7 +480,7 @@ Available insights:
480
480
  example question: How do I decrease the initial loading time of my page?
481
481
  example question: Did anything slow down the request for this document?
482
482
  - insight name: ThirdParties
483
- description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.
483
+ description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your pages content.
484
484
  relevant trace bounds: {min: 1020034871372µs, max: 1020035171789µs}
485
485
  example question: Which third parties are having the largest impact on my page performance?
486
486
  - insight name: CharacterSet
@@ -542,7 +542,7 @@ Available insights:
542
542
  estimated metric savings: FCP 20 ms
543
543
  example question: How can I update my CSS to avoid layout shifts caused by incorrect `font-display` properties?
544
544
  - insight name: ThirdParties
545
- description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.
545
+ description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your pages content.
546
546
  relevant trace bounds: {min: 157423742399µs, max: 157427273902µs}
547
547
  example question: Which third parties are having the largest impact on my page performance?
548
548
  - insight name: Cache
@@ -552,7 +552,7 @@ Available insights:
552
552
  estimated wasted bytes: 847.4 kB
553
553
  example question: What caching strategies can I apply to improve my page performance?
554
554
  - insight name: LegacyJavaScript
555
- description: Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)
555
+ description: Polyfills and transforms enable older browsers to use new JavaScript features. However, many arent necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)
556
556
  relevant trace bounds: {min: 157423489126µs, max: 157426132225µs}
557
557
  estimated metric savings: FCP 0 ms, LCP 0 ms
558
558
  estimated wasted bytes: 126.9 kB
@@ -590,7 +590,7 @@ Available insights:
590
590
  example question: Which LCP subpart was most problematic?
591
591
  example question: What can I do to reduce the LCP time for this page load?
592
592
  - insight name: RenderBlocking
593
- description: Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.
593
+ description: Requests are blocking the pages initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.
594
594
  relevant trace bounds: {min: 171608170438µs, max: 171608877165µs}
595
595
  example question: Show me the most impactful render-blocking requests that I should focus on
596
596
  example question: How can I reduce the number of render-blocking requests?
@@ -618,7 +618,7 @@ Available insights:
618
618
  example question: Which LCP subpart was most problematic?
619
619
  example question: What can I do to reduce the LCP time for this page load?
620
620
  - insight name: RenderBlocking
621
- description: Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.
621
+ description: Requests are blocking the pages initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.
622
622
  relevant trace bounds: {min: 171614330544µs, max: 171615043224µs}
623
623
  example question: Show me the most impactful render-blocking requests that I should focus on
624
624
  example question: How can I reduce the number of render-blocking requests?
@@ -696,7 +696,7 @@ Available insights:
696
696
  estimated metric savings: INP 0 ms
697
697
  example question: How do I make sure my page is optimized for mobile viewing?
698
698
  - insight name: ThirdParties
699
- description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.
699
+ description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your pages content.
700
700
  relevant trace bounds: {min: 59728701403µs, max: 59729465969µs}
701
701
  example question: Which third parties are having the largest impact on my page performance?
702
702
  - insight name: CharacterSet
@@ -780,7 +780,7 @@ Available insights:
780
780
  estimated metric savings: INP 0 ms
781
781
  example question: How do I make sure my page is optimized for mobile viewing?
782
782
  - insight name: ThirdParties
783
- description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.
783
+ description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your pages content.
784
784
  relevant trace bounds: {min: 59728701403µs, max: 59729465969µs}
785
785
  example question: Which third parties are having the largest impact on my page performance?
786
786
  - insight name: CharacterSet
@@ -816,7 +816,7 @@ Available insights:
816
816
  example question: Why is a large INP score problematic?
817
817
  example question: What's the biggest contributor to my longest interaction?
818
818
  - insight name: ThirdParties
819
- description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.
819
+ description: 3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your pages content.
820
820
  relevant trace bounds: {min: 337944792445µs, max: 337944809570µs}
821
821
  example question: Which third parties are having the largest impact on my page performance?
822
822
  === end content
@@ -39,12 +39,19 @@ export class PerformanceTraceFormatter {
39
39
  (url: Platform.DevToolsPath.UrlString, line: number,
40
40
  column: number) => Promise<SourceMapScopes.FunctionCodeResolver.FunctionCode|null>;
41
41
 
42
- constructor(focus: AgentFocus, deviceScope: CrUXManager.DeviceScope|null = null) {
42
+ readonly #cruxManager: CrUXManager.CrUXManager;
43
+
44
+ constructor(
45
+ focus: AgentFocus,
46
+ deviceScope: CrUXManager.DeviceScope|null = null,
47
+ cruxManager: CrUXManager.CrUXManager = CrUXManager.CrUXManager.instance(),
48
+ ) {
43
49
  this.#focus = focus;
44
50
  this.#parsedTrace = focus.parsedTrace;
45
51
  this.#insightSet = focus.primaryInsightSet;
46
52
  this.#eventsSerializer = focus.eventsSerializer;
47
53
  this.#deviceScope = deviceScope;
54
+ this.#cruxManager = cruxManager;
48
55
  }
49
56
 
50
57
  serializeEvent(event: Trace.Types.Events.Event): string {
@@ -65,8 +72,8 @@ export class PerformanceTraceFormatter {
65
72
  return [];
66
73
  }
67
74
  try {
68
- const cruxScope: CrUXManager.Scope = this.#deviceScope ? {pageScope: 'url', deviceScope: this.#deviceScope} :
69
- CrUXManager.CrUXManager.instance().getSelectedScope();
75
+ const cruxScope: CrUXManager.Scope =
76
+ this.#deviceScope ? {pageScope: 'url', deviceScope: this.#deviceScope} : this.#cruxManager.getSelectedScope();
70
77
  const parts: string[] = [];
71
78
  const fieldMetrics =
72
79
  Trace.Insights.Common.getFieldMetricsForInsightSet(insightSet, this.#parsedTrace.metadata, cruxScope);
@@ -229,6 +236,22 @@ export class PerformanceTraceFormatter {
229
236
  }
230
237
  }
231
238
 
239
+ const extensionTrackData = parsedTrace.data.ExtensionTraceData?.extensionTrackData;
240
+ if (extensionTrackData && extensionTrackData.length > 0) {
241
+ parts.push('\n# Custom tracks\n');
242
+ parts.push('The following is a list of custom tracks or track groups from the extensibility API.');
243
+ for (const trackData of extensionTrackData) {
244
+ if (trackData.isTrackGroup) {
245
+ parts.push(`\n## Group: ${trackData.name}\n`);
246
+ for (const trackName of Object.keys(trackData.entriesByTrack)) {
247
+ parts.push(` - Track: ${trackName}`);
248
+ }
249
+ } else {
250
+ parts.push(`\n## Track: ${trackData.name}\n`);
251
+ }
252
+ }
253
+ }
254
+
232
255
  return parts.join('\n');
233
256
  }
234
257
 
@@ -507,6 +530,56 @@ export class PerformanceTraceFormatter {
507
530
  return results.join('\n\n');
508
531
  }
509
532
 
533
+ formatExtensionTrackSummary(bounds: Trace.Types.Timing.TraceWindowMicro): string {
534
+ const extensionTrackData = this.#parsedTrace.data.ExtensionTraceData?.extensionTrackData;
535
+ if (!extensionTrackData || extensionTrackData.length === 0) {
536
+ return 'No custom track activity found';
537
+ }
538
+
539
+ const results: string[] = [];
540
+
541
+ for (const trackData of extensionTrackData) {
542
+ const trackLines: string[] = [];
543
+ const header = trackData.isTrackGroup ? `# Track Group: ${trackData.name}` : `# Track: ${trackData.name}`;
544
+ trackLines.push(header);
545
+
546
+ let hasEntriesInBounds = false;
547
+ for (const trackName of Object.keys(trackData.entriesByTrack)) {
548
+ const entries = trackData.entriesByTrack[trackName];
549
+ const filteredEntries = entries.filter(entry => Trace.Helpers.Timing.eventIsInBounds(entry, bounds));
550
+ if (filteredEntries.length === 0) {
551
+ continue;
552
+ }
553
+ hasEntriesInBounds = true;
554
+ if (trackData.isTrackGroup) {
555
+ trackLines.push(`## Track: ${trackName}`);
556
+ }
557
+ for (const entry of filteredEntries) {
558
+ const entryKey = this.serializeEvent(entry);
559
+ const parts = [
560
+ `Name: ${entry.name}`,
561
+ `eventKey: ${entryKey}`,
562
+ `duration: ${micros(entry.dur ?? Trace.Types.Timing.Micro(0))}`,
563
+ ];
564
+ if (entry.devtoolsObj.properties) {
565
+ const props = entry.devtoolsObj.properties.map(prop => `${prop[0]}: ${JSON.stringify(prop[1])}`).join(', ');
566
+ parts.push(`properties: {${props}}`);
567
+ }
568
+ trackLines.push(`- ${parts.join(', ')}`);
569
+ }
570
+ }
571
+ if (hasEntriesInBounds) {
572
+ results.push(trackLines.join('\n'));
573
+ }
574
+ }
575
+
576
+ if (results.length === 0) {
577
+ return 'No custom track activity found in the given bounds';
578
+ }
579
+
580
+ return results.join('\n\n');
581
+ }
582
+
510
583
  async formatCallTree(tree: AICallTree, headerLevel = 1): Promise<string> {
511
584
  let result = `${tree.serialize(headerLevel)}\n\nIMPORTANT: Never show eventKey to the user.\n`;
512
585
 
@@ -41,6 +41,16 @@ export class ListNetworkRequestsTool implements
41
41
  readonly name = ToolName.LIST_NETWORK_REQUESTS;
42
42
  readonly description = 'Gives a list of network requests including URL, status code, and duration.';
43
43
 
44
+ readonly #networkLog?: Logs.NetworkLog.NetworkLog;
45
+
46
+ constructor(networkLog?: Logs.NetworkLog.NetworkLog) {
47
+ this.#networkLog = networkLog;
48
+ }
49
+
50
+ #getNetworkLog(): Logs.NetworkLog.NetworkLog {
51
+ return this.#networkLog ?? Logs.NetworkLog.NetworkLog.instance();
52
+ }
53
+
44
54
  readonly parameters: Host.AidaClient.FunctionObjectParam<never> = {
45
55
  type: Host.AidaClient.ParametersTypes.OBJECT,
46
56
  description: '',
@@ -81,7 +91,7 @@ export class ListNetworkRequestsTool implements
81
91
 
82
92
  let hasCrossOriginRequest = false;
83
93
  const requestsToShow: SDK.NetworkRequest.NetworkRequest[] = [];
84
- for (const request of Logs.NetworkLog.NetworkLog.instance().requests()) {
94
+ for (const request of this.#getNetworkLog().requests()) {
85
95
  // To prevent cross-origin prompt injection attacks, HAR-imported requests
86
96
  // are assigned a virtual origin (e.g., `imported-har://${domain}`) rather than
87
97
  // sharing the origin of live pages.
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
 
7
- import {Badge, BadgeAction} from './Badge.js';
7
+ import {Badge, BadgeAction, type BadgeContext} from './Badge.js';
8
8
 
9
9
  const AI_EXPLORER_BADGE_URI = new URL('../../Images/ai-explorer-badge.svg', import.meta.url).toString();
10
10
  const AI_CONVERSATION_COUNT_SETTING_NAME = 'gdp.ai-conversation-count';
@@ -16,13 +16,18 @@ export class AiExplorerBadge extends Badge {
16
16
  override readonly title = 'AI Explorer';
17
17
  override readonly jslogContext = 'ai-explorer';
18
18
  override readonly imageUri = AI_EXPLORER_BADGE_URI;
19
- #aiConversationCountSetting: Common.Settings.Setting<number> = Common.Settings.Settings.instance().createSetting(
20
- AI_CONVERSATION_COUNT_SETTING_NAME, 0, Common.Settings.SettingStorageType.SYNCED);
19
+ readonly #aiConversationCountSetting: Common.Settings.Setting<number>;
21
20
 
22
21
  override readonly interestedActions = [
23
22
  BadgeAction.STARTED_AI_CONVERSATION,
24
23
  ] as const;
25
24
 
25
+ constructor(badgeContext: BadgeContext) {
26
+ super(badgeContext);
27
+ this.#aiConversationCountSetting = badgeContext.settings.createSetting(AI_CONVERSATION_COUNT_SETTING_NAME, 0,
28
+ Common.Settings.SettingStorageType.SYNCED);
29
+ }
30
+
26
31
  handleAction(_action: BadgeAction): void {
27
32
  const currentCount = this.#aiConversationCountSetting.get();
28
33
  if (currentCount >= AI_CONVERSATION_COUNT_LIMIT) {
@@ -26,6 +26,7 @@ export type BadgeActionEvents = Record<BadgeAction, void>;
26
26
  export interface BadgeContext {
27
27
  onTriggerBadge: (badge: Badge) => void;
28
28
  badgeActionEventTarget: Common.ObjectWrapper.ObjectWrapper<BadgeActionEvents>;
29
+ settings: Common.Settings.Settings;
29
30
  }
30
31
 
31
32
  export interface TriggerOptions {
@@ -4,6 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
+ import * as Root from '../../core/root/root.js';
7
8
 
8
9
  import {AiExplorerBadge} from './AiExplorerBadge.js';
9
10
  import type {Badge, BadgeAction, BadgeActionEvents, BadgeContext, TriggerOptions} from './Badge.js';
@@ -32,7 +33,6 @@ const SNOOZE_TIME_MS = 24 * 60 * 60 * 1000; // 24 hours
32
33
  const MAX_SNOOZE_COUNT = 3;
33
34
  const DELAY_BEFORE_TRIGGER = 1500;
34
35
 
35
- let userBadgesInstance: UserBadges|undefined = undefined;
36
36
  export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
37
37
  readonly #badgeActionEventTarget = new Common.ObjectWrapper.ObjectWrapper<BadgeActionEvents>();
38
38
 
@@ -43,6 +43,10 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
43
43
  #starterBadgeLastSnoozedTimestamp: Common.Settings.Setting<number>;
44
44
  #starterBadgeDismissed: Common.Settings.Setting<boolean>;
45
45
 
46
+ readonly #settings: Common.Settings.Settings;
47
+ readonly #gdpClient: Host.GdpClient.GdpClient;
48
+ readonly #inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI;
49
+
46
50
  static readonly BADGE_REGISTRY: BadgeClass[] = [
47
51
  StarterBadge,
48
52
  SpeedsterBadge,
@@ -51,33 +55,50 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
51
55
  AiExplorerBadge,
52
56
  ];
53
57
 
54
- private constructor() {
58
+ constructor(
59
+ settings: Common.Settings.Settings,
60
+ gdpClient: Host.GdpClient.GdpClient,
61
+ inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI,
62
+ ) {
55
63
  super();
56
64
 
57
- this.#receiveBadgesSetting = Common.Settings.Settings.instance().moduleSetting('receive-gdp-badges');
65
+ this.#settings = settings;
66
+ this.#gdpClient = gdpClient;
67
+ this.#inspectorFrontendHost = inspectorFrontendHost;
68
+
69
+ this.#receiveBadgesSetting = this.#settings.moduleSetting('receive-gdp-badges');
58
70
  if (!Host.GdpClient.isBadgesEnabled()) {
59
71
  this.#receiveBadgesSetting.set(false);
60
72
  }
61
73
  this.#receiveBadgesSetting.addChangeListener(this.#reconcileBadges, this);
62
74
 
63
- this.#starterBadgeSnoozeCount = Common.Settings.Settings.instance().createSetting(
64
- 'starter-badge-snooze-count', 0, Common.Settings.SettingStorageType.SYNCED);
65
- this.#starterBadgeLastSnoozedTimestamp = Common.Settings.Settings.instance().createSetting(
66
- 'starter-badge-last-snoozed-timestamp', 0, Common.Settings.SettingStorageType.SYNCED);
67
- this.#starterBadgeDismissed = Common.Settings.Settings.instance().createSetting(
68
- 'starter-badge-dismissed', false, Common.Settings.SettingStorageType.SYNCED);
69
-
70
- this.#allBadges = UserBadges.BADGE_REGISTRY.map(badgeCtor => new badgeCtor({
71
- onTriggerBadge: this.#onTriggerBadge.bind(this),
72
- badgeActionEventTarget: this.#badgeActionEventTarget,
73
- }));
75
+ this.#starterBadgeSnoozeCount =
76
+ this.#settings.createSetting('starter-badge-snooze-count', 0, Common.Settings.SettingStorageType.SYNCED);
77
+ this.#starterBadgeLastSnoozedTimestamp = this.#settings.createSetting('starter-badge-last-snoozed-timestamp', 0,
78
+ Common.Settings.SettingStorageType.SYNCED);
79
+ this.#starterBadgeDismissed =
80
+ this.#settings.createSetting('starter-badge-dismissed', false, Common.Settings.SettingStorageType.SYNCED);
81
+
82
+ const badgeContext: BadgeContext = {
83
+ onTriggerBadge: this.#onTriggerBadge.bind(this),
84
+ badgeActionEventTarget: this.#badgeActionEventTarget,
85
+ settings: this.#settings,
86
+ };
87
+ this.#allBadges = UserBadges.BADGE_REGISTRY.map(badgeCtor => new badgeCtor(badgeContext));
74
88
  }
75
89
 
76
90
  static instance({forceNew}: {forceNew: boolean} = {forceNew: false}): UserBadges {
77
- if (!userBadgesInstance || forceNew) {
78
- userBadgesInstance = new UserBadges();
91
+ if (!Root.DevToolsContext.globalInstance().has(UserBadges) || forceNew) {
92
+ Root.DevToolsContext.globalInstance().set(
93
+ UserBadges,
94
+ new UserBadges(
95
+ Common.Settings.Settings.instance(),
96
+ Host.GdpClient.GdpClient.instance(),
97
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance,
98
+ ),
99
+ );
79
100
  }
80
- return userBadgesInstance;
101
+ return Root.DevToolsContext.globalInstance().get(UserBadges);
81
102
  }
82
103
 
83
104
  async initialize(): Promise<void> {
@@ -108,7 +129,7 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
108
129
  return BadgeTriggerReason.AWARD;
109
130
  }
110
131
 
111
- const getProfileResponse = await Host.GdpClient.GdpClient.instance().getProfile();
132
+ const getProfileResponse = await this.#gdpClient.getProfile();
112
133
  // The `getProfile` call failed and returned a `null`.
113
134
  // For that case, we don't show anything.
114
135
  if (!getProfileResponse) {
@@ -147,7 +168,7 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
147
168
  }
148
169
 
149
170
  if (reason === BadgeTriggerReason.AWARD) {
150
- const result = await Host.GdpClient.GdpClient.instance().createAward({name: badge.name});
171
+ const result = await this.#gdpClient.createAward({name: badge.name});
151
172
  if (!result) {
152
173
  return;
153
174
  }
@@ -180,7 +201,7 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
180
201
 
181
202
  async #reconcileBadges(): Promise<void> {
182
203
  const syncInfo = await new Promise<Host.InspectorFrontendHostAPI.SyncInformation>(
183
- resolve => Host.InspectorFrontendHost.InspectorFrontendHostInstance.getSyncInformation(resolve));
204
+ resolve => this.#inspectorFrontendHost.getSyncInformation(resolve));
184
205
  // If the user is not signed in, do not activate any badges.
185
206
  if (!syncInfo.accountEmail) {
186
207
  this.#deactivateAllBadges();
@@ -192,7 +213,7 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
192
213
  return;
193
214
  }
194
215
 
195
- const getProfileResponse = await Host.GdpClient.GdpClient.instance().getProfile();
216
+ const getProfileResponse = await this.#gdpClient.getProfile();
196
217
  if (!getProfileResponse) {
197
218
  this.#deactivateAllBadges();
198
219
  return;
@@ -209,8 +230,7 @@ export class UserBadges extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
209
230
 
210
231
  let awardedBadgeNames: Set<string>|null = null;
211
232
  if (hasGdpProfile) {
212
- awardedBadgeNames = await Host.GdpClient.GdpClient.instance().getAwardedBadgeNames(
213
- {names: this.#allBadges.map(badge => badge.name)});
233
+ awardedBadgeNames = await this.#gdpClient.getAwardedBadgeNames({names: this.#allBadges.map(badge => badge.name)});
214
234
  // This is a conservative approach. We bail out if `awardedBadgeNames` is null
215
235
  // when there is a profile to prevent a negative user experience.
216
236
  //
@@ -5,9 +5,9 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
8
9
  // eslint-disable-next-line @devtools/es-modules-import
9
10
  import * as StackTraceImpl from '../stack_trace/stack_trace_impl.js';
10
- import * as TextUtils from '../text_utils/text_utils.js';
11
11
  import * as Workspace from '../workspace/workspace.js';
12
12
 
13
13
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -5,7 +5,7 @@
5
5
  import type * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
7
  import * as Platform from '../../core/platform/platform.js';
8
- import * as TextUtils from '../text_utils/text_utils.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
9
9
  import * as Workspace from '../workspace/workspace.js';
10
10
 
11
11
  const UIStrings = {
@@ -8,10 +8,10 @@ import * as i18n from '../../core/i18n/i18n.js';
8
8
  import type * as Platform from '../../core/platform/platform.js';
9
9
  import {assertNotNullOrUndefined} from '../../core/platform/platform.js';
10
10
  import * as SDK from '../../core/sdk/sdk.js';
11
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
11
12
  import * as Protocol from '../../generated/protocol.js';
12
13
  import * as StackTrace from '../stack_trace/stack_trace.js';
13
14
  import type * as StackTraceImpl from '../stack_trace/stack_trace_impl.js';
14
- import * as TextUtils from '../text_utils/text_utils.js';
15
15
  import * as Workspace from '../workspace/workspace.js';
16
16
 
17
17
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -43,7 +43,7 @@ const UIStrings = {
43
43
  * @example {C/C++ DevTools Support (DWARF)} PH1
44
44
  * @example {http://web.dev/file.wasm} PH2
45
45
  */
46
- loadedDebugSymbolsForButDidnt: '[{PH1}] Loaded debug symbols for {PH2}, but didn\'t find any source files',
46
+ loadedDebugSymbolsForButDidnt: '[{PH1}] Loaded debug symbols for {PH2}, but didnt find any source files',
47
47
  /**
48
48
  * @description Status message that is shown in the Console when debugging information is successfully loaded
49
49
  * @example {C/C++ DevTools Support (DWARF)} PH1
@@ -6,11 +6,11 @@ import type * as Common from '../../core/common/common.js';
6
6
  import * as Platform from '../../core/platform/platform.js';
7
7
  import * as Root from '../../core/root/root.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
9
10
  import * as Protocol from '../../generated/protocol.js';
10
11
  import type * as StackTrace from '../stack_trace/stack_trace.js';
11
12
  // eslint-disable-next-line @devtools/es-modules-import
12
13
  import * as StackTraceImpl from '../stack_trace/stack_trace_impl.js';
13
- import type * as TextUtils from '../text_utils/text_utils.js';
14
14
  import * as Workspace from '../workspace/workspace.js';
15
15
 
16
16
  import {CompilerScriptMapping} from './CompilerScriptMapping.js';
@@ -5,7 +5,7 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
- import type * as TextUtils from '../text_utils/text_utils.js';
8
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
9
9
  import * as Workspace from '../workspace/workspace.js';
10
10
 
11
11
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
- import * as TextUtils from '../text_utils/text_utils.js';
7
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
8
8
  import * as Workspace from '../workspace/workspace.js';
9
9
 
10
10
  export interface ChunkedReader {
@@ -12,9 +12,9 @@ const uiSourceCodeToAttributionMap = new WeakMap<Workspace.UISourceCode.UISource
12
12
  frame: SDK.ResourceTreeModel.ResourceTreeFrame,
13
13
  count: number,
14
14
  }>>();
15
- const projectToTargetMap = new WeakMap<Workspace.Workspace.Project, SDK.Target.Target>();
16
15
 
17
16
  export class NetworkProjectManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
17
+ readonly #projectToTargetMap = new WeakMap<Workspace.Workspace.Project, SDK.Target.Target>();
18
18
 
19
19
  static instance({forceNew}: {
20
20
  forceNew: boolean,
@@ -29,6 +29,18 @@ export class NetworkProjectManager extends Common.ObjectWrapper.ObjectWrapper<Ev
29
29
  static removeInstance(): void {
30
30
  Root.DevToolsContext.globalInstance().delete(NetworkProjectManager);
31
31
  }
32
+
33
+ setTargetForProject(project: Workspace.Workspace.Project, target: SDK.Target.Target): void {
34
+ this.#projectToTargetMap.set(project, target);
35
+ }
36
+
37
+ getTargetForProject(project: Workspace.Workspace.Project): SDK.Target.Target|null {
38
+ return this.#projectToTargetMap.get(project) ?? null;
39
+ }
40
+
41
+ getTargetForUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): SDK.Target.Target|null {
42
+ return this.#projectToTargetMap.get(uiSourceCode.project()) ?? null;
43
+ }
32
44
  }
33
45
 
34
46
  export const enum Events {
@@ -132,15 +144,15 @@ export class NetworkProject {
132
144
  }
133
145
 
134
146
  static targetForUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): SDK.Target.Target|null {
135
- return projectToTargetMap.get(uiSourceCode.project()) || null;
147
+ return NetworkProjectManager.instance().getTargetForUISourceCode(uiSourceCode);
136
148
  }
137
149
 
138
150
  static setTargetForProject(project: Workspace.Workspace.Project, target: SDK.Target.Target): void {
139
- projectToTargetMap.set(project, target);
151
+ NetworkProjectManager.instance().setTargetForProject(project, target);
140
152
  }
141
153
 
142
154
  static getTargetForProject(project: Workspace.Workspace.Project): SDK.Target.Target|null {
143
- return projectToTargetMap.get(project) || null;
155
+ return NetworkProjectManager.instance().getTargetForProject(project);
144
156
  }
145
157
 
146
158
  static framesForUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode):
@@ -5,8 +5,8 @@
5
5
  import type * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
8
9
  import * as Protocol from '../../generated/protocol.js';
9
- import * as TextUtils from '../text_utils/text_utils.js';
10
10
  import * as Workspace from '../workspace/workspace.js';
11
11
 
12
12
  import {CSSWorkspaceBinding} from './CSSWorkspaceBinding.js';
@@ -63,15 +63,12 @@ export class PresentationSourceFrameMessageManager implements
63
63
  export class PresentationConsoleMessageManager {
64
64
  #sourceFrameMessageManager = new PresentationSourceFrameMessageManager();
65
65
 
66
- constructor() {
67
- SDK.TargetManager.TargetManager.instance().addModelListener(
68
- SDK.ConsoleModel.ConsoleModel, SDK.ConsoleModel.Events.MessageAdded,
69
- event => this.consoleMessageAdded(event.data));
70
- SDK.ConsoleModel.ConsoleModel.allMessagesUnordered(SDK.TargetManager.TargetManager.instance())
71
- .forEach(this.consoleMessageAdded, this);
72
- SDK.TargetManager.TargetManager.instance().addModelListener(
73
- SDK.ConsoleModel.ConsoleModel, SDK.ConsoleModel.Events.ConsoleCleared,
74
- () => this.#sourceFrameMessageManager.clear());
66
+ constructor(targetManager: SDK.TargetManager.TargetManager) {
67
+ targetManager.addModelListener(SDK.ConsoleModel.ConsoleModel, SDK.ConsoleModel.Events.MessageAdded,
68
+ event => this.consoleMessageAdded(event.data));
69
+ SDK.ConsoleModel.ConsoleModel.allMessagesUnordered(targetManager).forEach(this.consoleMessageAdded, this);
70
+ targetManager.addModelListener(SDK.ConsoleModel.ConsoleModel, SDK.ConsoleModel.Events.ConsoleCleared,
71
+ () => this.#sourceFrameMessageManager.clear());
75
72
  }
76
73
 
77
74
  private consoleMessageAdded(consoleMessage: SDK.ConsoleModel.ConsoleMessage): void {
@@ -5,8 +5,8 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
8
9
  import * as Formatter from '../formatter/formatter.js';
9
- import * as TextUtils from '../text_utils/text_utils.js';
10
10
  import * as Workspace from '../workspace/workspace.js';
11
11
 
12
12
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -7,9 +7,9 @@ import * as i18n from '../../core/i18n/i18n.js';
7
7
  import * as Platform from '../../core/platform/platform.js';
8
8
  import * as Root from '../../core/root/root.js';
9
9
  import * as SDK from '../../core/sdk/sdk.js';
10
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
10
11
  import * as Protocol from '../../generated/protocol.js';
11
12
  import * as Formatter from '../formatter/formatter.js';
12
- import * as TextUtils from '../text_utils/text_utils.js';
13
13
  import * as Workspace from '../workspace/workspace.js';
14
14
 
15
15
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -5,8 +5,8 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
8
9
  import type * as Protocol from '../../generated/protocol.js';
9
- import * as TextUtils from '../text_utils/text_utils.js';
10
10
  import * as Workspace from '../workspace/workspace.js';
11
11
 
12
12
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -5,7 +5,7 @@
5
5
  import * as Common from '../../core/common/common.js';
6
6
  import type * as Platform from '../../core/platform/platform.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
- import * as TextUtils from '../text_utils/text_utils.js';
8
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
9
9
  import * as Workspace from '../workspace/workspace.js';
10
10
 
11
11
  import {ContentProviderBasedProject} from './ContentProviderBasedProject.js';
@@ -7,11 +7,11 @@ import type * as Platform from '../../core/platform/platform.js';
7
7
  import {assertNotNullOrUndefined} from '../../core/platform/platform.js';
8
8
  import * as Root from '../../core/root/root.js';
9
9
  import * as SDK from '../../core/sdk/sdk.js';
10
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
10
11
  import * as Protocol from '../../generated/protocol.js';
11
12
  import * as Bindings from '../bindings/bindings.js';
12
13
  import * as Formatter from '../formatter/formatter.js';
13
14
  import * as SourceMapScopes from '../source_map_scopes/source_map_scopes.js';
14
- import type * as TextUtils from '../text_utils/text_utils.js';
15
15
  import * as Workspace from '../workspace/workspace.js';
16
16
 
17
17
  const INITIAL_RESTORE_BREAKPOINT_COUNT = 100;
@@ -12,7 +12,7 @@ const UIStrings = {
12
12
  /**
13
13
  * @description Warning message indicating that the user will see real user data for a URL which is different from the URL they are currently looking at.
14
14
  */
15
- fieldOverrideWarning: 'Field metrics are configured for a different URL than the current page.',
15
+ fieldOverrideWarning: 'Field metrics are for a different URL than the current page.',
16
16
  } as const;
17
17
 
18
18
  const str_ = i18n.i18n.registerUIStrings('models/crux-manager/CrUXManager.ts', UIStrings);