chrome-devtools-frontend 1.0.1675430 → 1.0.1678416

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 (308) hide show
  1. package/AUTHORS +1 -0
  2. package/WATCHLISTS +0 -4
  3. package/front_end/core/common/EventTarget.ts +0 -5
  4. package/front_end/core/common/Settings.ts +0 -66
  5. package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
  6. package/front_end/core/host/UserMetrics.ts +5 -0
  7. package/front_end/core/root/Runtime.ts +5 -5
  8. package/front_end/core/sdk/CSSMetadata.ts +5 -9
  9. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +16 -34
  10. package/front_end/core/sdk/DebuggerModel.ts +92 -57
  11. package/front_end/core/sdk/EmulationModel.ts +2 -1
  12. package/front_end/core/sdk/NetworkManager.ts +16 -2
  13. package/front_end/core/sdk/OverlayModel.ts +19 -9
  14. package/front_end/core/sdk/OverlayPersistentHighlighter.ts +10 -4
  15. package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
  16. package/front_end/core/sdk/SDKSettings.ts +117 -0
  17. package/front_end/core/sdk/Script.ts +9 -53
  18. package/front_end/core/sdk/sdk-meta.ts +0 -431
  19. package/front_end/devtools_compatibility.js +1 -0
  20. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
  21. package/front_end/entrypoints/inspector_main/InspectorMain.ts +6 -5
  22. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +14 -15
  23. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +157 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +32 -0
  25. package/front_end/entrypoints/shell/shell.ts +0 -1
  26. package/front_end/foundation/Universe.ts +8 -0
  27. package/front_end/generated/InspectorBackendCommands.ts +8 -8
  28. package/front_end/generated/SupportedCSSProperties.ts +53 -4
  29. package/front_end/generated/protocol-mapping.d.ts +27 -21
  30. package/front_end/generated/protocol-proxy-api.d.ts +22 -17
  31. package/front_end/generated/protocol.ts +43 -18
  32. package/front_end/models/ai_assistance/AiAgent2.ts +47 -2
  33. package/front_end/models/ai_assistance/AiConversation.ts +22 -5
  34. package/front_end/models/ai_assistance/README.md +52 -26
  35. package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
  36. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
  37. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
  38. package/front_end/models/ai_assistance/agents/StorageAgent.ts +21 -87
  39. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
  40. package/front_end/models/ai_assistance/ai_assistance.ts +24 -0
  41. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
  42. package/front_end/models/ai_assistance/contexts/StorageContext.ts +100 -0
  43. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
  44. package/front_end/models/ai_assistance/skills/README.md +63 -1
  45. package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
  46. package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
  47. package/front_end/models/ai_assistance/skills/accessibility.md +7 -0
  48. package/front_end/models/ai_assistance/skills/performance.md +15 -1
  49. package/front_end/models/ai_assistance/skills/sources.md +16 -0
  50. package/front_end/models/ai_assistance/skills/storage.md +31 -0
  51. package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +107 -0
  52. package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +122 -0
  53. package/front_end/models/ai_assistance/tools/GetResourceContent.ts +127 -0
  54. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
  55. package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
  56. package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
  57. package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
  58. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +95 -0
  59. package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
  60. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +89 -0
  61. package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
  62. package/front_end/models/ai_assistance/tools/Tool.ts +26 -1
  63. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +22 -0
  64. package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
  65. package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
  66. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
  67. package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
  68. package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
  69. package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
  70. package/front_end/models/comment_manager/CommentManager.ts +141 -0
  71. package/front_end/models/comment_manager/comment_manager.ts +9 -0
  72. package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
  73. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
  74. package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
  75. package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
  76. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
  77. package/front_end/models/javascript_metadata/NativeFunctions.js +6 -6
  78. package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
  79. package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
  80. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  81. package/front_end/models/persistence/persistence-meta.ts +9 -9
  82. package/front_end/models/trace/types/TraceEvents.ts +36 -0
  83. package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
  84. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +25 -0
  85. package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
  86. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -0
  87. package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
  88. package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
  89. package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
  90. package/front_end/panels/accessibility/accessibility.ts +2 -0
  91. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
  92. package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
  93. package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
  94. package/front_end/panels/ai_assistance/components/ChatMessage.ts +92 -12
  95. package/front_end/panels/ai_assistance/components/chatMessage.css +6 -0
  96. package/front_end/panels/application/ApplicationPanelSidebar.ts +10 -4
  97. package/front_end/panels/application/IndexedDBViews.ts +65 -63
  98. package/front_end/panels/application/StorageView.ts +116 -45
  99. package/front_end/panels/application/WebMCPView.ts +16 -7
  100. package/front_end/panels/application/application-meta.ts +11 -0
  101. package/front_end/panels/application/components/AdsView.ts +1 -1
  102. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
  103. package/front_end/panels/common/BadgeNotification.ts +8 -8
  104. package/front_end/panels/common/ExtensionPanel.ts +9 -8
  105. package/front_end/panels/common/ExtensionServer.ts +21 -1
  106. package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
  107. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
  108. package/front_end/panels/common/PersistenceUtils.ts +2 -2
  109. package/front_end/panels/common/common.ts +0 -97
  110. package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
  111. package/front_end/panels/console/ConsolePanel.ts +4 -0
  112. package/front_end/panels/console/ConsolePinPane.ts +2 -2
  113. package/front_end/panels/console/ConsolePrompt.ts +12 -0
  114. package/front_end/panels/console/ConsoleView.ts +31 -20
  115. package/front_end/panels/console/ConsoleViewMessage.ts +37 -13
  116. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  117. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  118. package/front_end/panels/elements/ElementStatePaneWidget.ts +2 -1
  119. package/front_end/panels/elements/ElementsTreeElement.ts +455 -372
  120. package/front_end/panels/elements/LayoutPane.ts +2 -8
  121. package/front_end/panels/elements/StylePropertyTreeElement.ts +16 -15
  122. package/front_end/panels/elements/elements-meta.ts +152 -10
  123. package/front_end/panels/elements/elements.ts +0 -2
  124. package/front_end/panels/emulation/DeviceModeView.ts +9 -1
  125. package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
  126. package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
  127. package/front_end/panels/lighthouse/LighthouseController.ts +3 -2
  128. package/front_end/panels/media/PlayerMessagesView.ts +149 -68
  129. package/front_end/panels/network/BinaryResourceView.ts +134 -81
  130. package/front_end/panels/network/EventSourceMessagesView.ts +10 -10
  131. package/front_end/panels/network/FetchHeaderCommenting.ts +291 -0
  132. package/front_end/panels/network/NetworkConfigView.ts +10 -10
  133. package/front_end/panels/network/NetworkDataGridNode.ts +14 -14
  134. package/front_end/panels/network/NetworkItemView.ts +27 -28
  135. package/front_end/panels/network/NetworkLogView.ts +137 -38
  136. package/front_end/panels/network/NetworkLogViewColumns.ts +35 -35
  137. package/front_end/panels/network/NetworkManageCustomHeadersView.ts +1 -1
  138. package/front_end/panels/network/NetworkPanel.ts +2 -2
  139. package/front_end/panels/network/RequestConditionsDrawer.ts +5 -5
  140. package/front_end/panels/network/RequestCookiesView.ts +4 -4
  141. package/front_end/panels/network/RequestHeadersView.ts +5 -5
  142. package/front_end/panels/network/RequestPayloadView.ts +4 -3
  143. package/front_end/panels/network/RequestTimingView.ts +8 -8
  144. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  145. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
  146. package/front_end/panels/network/ResourceWebSocketFrameView.ts +16 -16
  147. package/front_end/panels/network/binaryResourceView.css +14 -12
  148. package/front_end/panels/network/components/DirectSocketConnectionView.ts +2 -2
  149. package/front_end/panels/network/components/HeaderSectionRow.ts +1 -1
  150. package/front_end/panels/network/components/RequestTrustTokensView.ts +2 -2
  151. package/front_end/panels/network/network-meta.ts +1 -1
  152. package/front_end/panels/network/network.ts +2 -0
  153. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +0 -1
  154. package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
  155. package/front_end/panels/profiler/heapProfiler.css +0 -9
  156. package/front_end/panels/recorder/RecorderPanel.ts +2 -3
  157. package/front_end/panels/screencast/ScreencastView.ts +148 -138
  158. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
  159. package/front_end/panels/sources/BreakpointsView.ts +2 -2
  160. package/front_end/panels/sources/DebuggerPlugin.ts +10 -59
  161. package/front_end/panels/sources/NavigatorView.ts +2 -1
  162. package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
  163. package/front_end/panels/sources/SourcesPanel.ts +23 -73
  164. package/front_end/panels/sources/SourcesView.ts +248 -157
  165. package/front_end/panels/sources/TabbedEditorContainer.ts +118 -23
  166. package/front_end/panels/sources/UISourceCodeFrame.ts +5 -9
  167. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
  168. package/front_end/panels/sources/sources-meta.ts +52 -0
  169. package/front_end/panels/timeline/TimelineController.ts +36 -64
  170. package/front_end/panels/timeline/TimelinePanel.ts +11 -8
  171. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
  172. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  173. package/front_end/panels/timeline/timelinePanel.css +0 -10
  174. package/front_end/panels/utils/utils.ts +7 -7
  175. package/front_end/services/tracing/PerformanceTracing.ts +5 -17
  176. package/front_end/third_party/chromium/README.chromium +1 -1
  177. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  178. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  179. package/front_end/third_party/codemirror.next/package.json +2 -2
  180. package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
  181. package/front_end/ui/comments/CommentAnchorResolver.ts +430 -35
  182. package/front_end/ui/comments/CommentOverlayManager.ts +635 -0
  183. package/front_end/ui/comments/CommentsOverlayWidget.ts +134 -0
  184. package/front_end/ui/comments/comments.ts +4 -0
  185. package/front_end/ui/comments/commentsOverlay.css +49 -0
  186. package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
  187. package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
  188. package/front_end/ui/components/dialogs/dialogs.ts +4 -0
  189. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
  190. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
  191. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
  192. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
  193. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
  194. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
  195. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
  196. package/front_end/ui/components/text_editor/text_editor.ts +4 -0
  197. package/front_end/ui/legacy/Toolbar.ts +1 -1
  198. package/front_end/ui/legacy/UIUtils.ts +0 -56
  199. package/front_end/ui/legacy/View.ts +10 -4
  200. package/front_end/ui/legacy/Widget.ts +10 -1
  201. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +2 -1
  202. package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +5 -4
  203. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
  204. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +507 -209
  205. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
  206. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
  207. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
  208. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +38 -20
  209. package/front_end/ui/legacy/components/source_frame/JSONView.ts +12 -2
  210. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +3 -3
  211. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +37 -6
  212. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +22 -4
  213. package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
  214. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  215. package/mcp/mcp.ts +6 -1
  216. package/package.json +6 -6
  217. package/front_end/Images/toolbarResizerVertical.png +0 -0
  218. package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
  219. package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
  220. package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
  221. package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
  222. package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
  223. package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
  224. package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
  225. package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
  226. package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
  227. package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
  228. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
  229. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
  230. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
  231. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
  232. package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
  233. package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
  234. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
  235. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
  236. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
  237. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
  238. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
  239. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
  240. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
  241. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
  242. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
  243. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
  244. package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
  245. package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
  246. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
  247. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
  248. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
  249. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
  250. package/front_end/emulated_devices/iPad-landscape.svg +0 -73
  251. package/front_end/emulated_devices/iPad-portrait.svg +0 -76
  252. package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
  253. package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
  254. package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
  255. package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
  256. package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
  257. package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
  258. package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
  259. package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
  260. package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
  261. package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
  262. package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
  263. package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
  264. package/front_end/emulated_devices/optimized/README.md +0 -9
  265. package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
  266. package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
  267. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
  268. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
  269. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
  270. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
  271. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
  272. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
  273. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
  274. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
  275. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
  276. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
  277. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
  278. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
  279. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
  280. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
  281. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
  282. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
  283. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
  284. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
  285. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
  286. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
  287. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
  288. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
  289. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
  290. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
  291. package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
  292. package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
  293. package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
  294. package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
  295. package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
  296. package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
  297. package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
  298. package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
  299. package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
  300. package/front_end/models/ai_assistance/agents/README.md +0 -136
  301. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +0 -89
  302. package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -27
  303. /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
  304. /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
  305. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
  306. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
  307. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
  308. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
@@ -0,0 +1,127 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Host from '../../../core/host/host.js';
6
+ import * as i18n from '../../../core/i18n/i18n.js';
7
+ import type * as Platform from '../../../core/platform/platform.js';
8
+ import * as Root from '../../../core/root/root.js';
9
+ import * as SDK from '../../../core/sdk/sdk.js';
10
+ import * as TextUtils from '../../../core/text_utils/text_utils.js';
11
+ import {canResourceContentsBeReadForTrace} from '../AiOrigins.js';
12
+ import {PerformanceTraceContext} from '../contexts/PerformanceTraceContext.js';
13
+
14
+ import {
15
+ type BaseToolCapability,
16
+ type DataHandlerResult,
17
+ type DataTool,
18
+ type TargetCapability,
19
+ type ToolArgs,
20
+ ToolName,
21
+ } from './Tool.js';
22
+
23
+ const UIStringsNotTranslate = {
24
+ lookingAtResourceContent: 'Looking at resource content',
25
+ } as const;
26
+
27
+ const lockedString = i18n.i18n.lockedString;
28
+
29
+ export interface GetResourceContentArgs extends ToolArgs {
30
+ url: string;
31
+ }
32
+
33
+ export class GetResourceContentTool implements
34
+ DataTool<GetResourceContentArgs, {content: string}, BaseToolCapability&TargetCapability> {
35
+ readonly name = ToolName.GET_RESOURCE_CONTENT;
36
+ readonly description =
37
+ 'Returns the content of the resource with the given url. Only use this for text resource types.';
38
+
39
+ readonly parameters: Host.AidaClient.FunctionObjectParam<keyof GetResourceContentArgs> = {
40
+ type: Host.AidaClient.ParametersTypes.OBJECT,
41
+ description: 'Arguments for looking up resource content.',
42
+ nullable: false,
43
+ properties: {
44
+ url: {
45
+ type: Host.AidaClient.ParametersTypes.STRING,
46
+ description: 'The url for the resource.',
47
+ nullable: false,
48
+ },
49
+ },
50
+ required: ['url'],
51
+ };
52
+
53
+ displayInfoFromArgs(params: GetResourceContentArgs): {
54
+ title: string,
55
+ action: string,
56
+ } {
57
+ return {
58
+ title: lockedString(UIStringsNotTranslate.lookingAtResourceContent),
59
+ action: `getResourceContent('${params.url}')`,
60
+ };
61
+ }
62
+
63
+ async handler(
64
+ params: GetResourceContentArgs,
65
+ capabilities: BaseToolCapability&TargetCapability,
66
+ ): Promise<DataHandlerResult<{content: string}>> {
67
+ const conversationContext = capabilities.conversationContext;
68
+ if (!conversationContext || !(conversationContext instanceof PerformanceTraceContext)) {
69
+ return {error: 'Performance trace context is not available.'};
70
+ }
71
+
72
+ if (conversationContext.getOrigin().startsWith('imported-trace://')) {
73
+ return {error: 'Cannot use this tool on an imported file.'};
74
+ }
75
+
76
+ const allowedOrigin = conversationContext.getOrigin();
77
+ if (!canResourceContentsBeReadForTrace(params.url, allowedOrigin)) {
78
+ return {error: 'Resource not found'};
79
+ }
80
+
81
+ const focus = conversationContext.getItem();
82
+ const {parsedTrace} = focus;
83
+
84
+ let content: string;
85
+
86
+ const url = params.url as Platform.DevToolsPath.UrlString;
87
+ const script = parsedTrace.data.Scripts?.scripts.find(script => script.url === params.url);
88
+ if (script?.content !== undefined) {
89
+ content = script.content;
90
+ } else {
91
+ const target = capabilities.getTarget();
92
+ const isTraceApp = Root.Runtime.Runtime.isTraceApp();
93
+ if (target || isTraceApp) {
94
+ const targetManager = target?.targetManager() ??
95
+ // eslint-disable-next-line @devtools/no-instance-of-migrated-singletons
96
+ SDK.TargetManager.TargetManager.instance();
97
+ const resource = SDK.ResourceTreeModel.ResourceTreeModel.resourceForURL(targetManager, url);
98
+ if (!resource) {
99
+ return {error: 'Resource not found'};
100
+ }
101
+
102
+ const data = await resource.requestContentData();
103
+ if (TextUtils.ContentData.ContentData.isError(data)) {
104
+ return {error: `Could not get resource content: ${data.error}`};
105
+ }
106
+ if (!data.isTextContent) {
107
+ return {error: 'Cannot retrieve content for non-text resource'};
108
+ }
109
+
110
+ content = data.text;
111
+ } else {
112
+ return {error: 'Resource not found'};
113
+ }
114
+ }
115
+
116
+ return {
117
+ result: {content},
118
+ widgets: [{
119
+ name: 'SOURCE_CODE',
120
+ data: {
121
+ url,
122
+ code: content,
123
+ },
124
+ }],
125
+ };
126
+ }
127
+ }
@@ -0,0 +1,101 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Common from '../../../core/common/common.js';
6
+ import * as Host from '../../../core/host/host.js';
7
+ import * as i18n from '../../../core/i18n/i18n.js';
8
+ import * as TextUtils from '../../../core/text_utils/text_utils.js';
9
+ import {FileFormatter} from '../data_formatters/FileFormatter.js';
10
+
11
+ import {ListSourcesTool} from './ListSources.js';
12
+ import {
13
+ type BaseToolCapability,
14
+ type DataHandlerResult,
15
+ type DataTool,
16
+ type OriginLockCapability,
17
+ type ToolArgs,
18
+ ToolName,
19
+ } from './Tool.js';
20
+
21
+ const UIStringsNotTranslate = {
22
+ readingSource: 'Reading source content',
23
+ } as const;
24
+
25
+ const lockedString = i18n.i18n.lockedString;
26
+
27
+ export interface GetSourceContentArgs extends ToolArgs {
28
+ id: number;
29
+ }
30
+
31
+ /**
32
+ * A tool that retrieves the contents of a source file by its unique ID.
33
+ * Filters access by origin lock to prevent cross-origin leakage.
34
+ */
35
+ export class GetSourceContentTool implements
36
+ DataTool<GetSourceContentArgs, {content: string}, BaseToolCapability&OriginLockCapability> {
37
+ readonly name = ToolName.GET_SOURCE_CONTENT;
38
+ readonly description = 'Gets the content and metadata of a source file by its ID.';
39
+
40
+ readonly parameters: Host.AidaClient.FunctionObjectParam<keyof GetSourceContentArgs> = {
41
+ type: Host.AidaClient.ParametersTypes.OBJECT,
42
+ description: '',
43
+ properties: {
44
+ id: {
45
+ type: Host.AidaClient.ParametersTypes.INTEGER,
46
+ description: 'The unique numeric ID of the source file to retrieve.',
47
+ nullable: false,
48
+ },
49
+ },
50
+ required: ['id'],
51
+ };
52
+
53
+ displayInfoFromArgs(args: GetSourceContentArgs): {
54
+ title: string,
55
+ action: string,
56
+ } {
57
+ return {
58
+ title: lockedString(UIStringsNotTranslate.readingSource),
59
+ action: `getSourceContent(${args.id})`,
60
+ };
61
+ }
62
+
63
+ async handler(
64
+ args: GetSourceContentArgs,
65
+ context: BaseToolCapability&OriginLockCapability,
66
+ ): Promise<DataHandlerResult<{content: string}>> {
67
+ const origin = context.getEstablishedOrigin();
68
+ const file = ListSourcesTool.getUISourceCodes().find(
69
+ f => ListSourcesTool.uiSourceCodeId.get(f) === args.id,
70
+ );
71
+
72
+ if (!file) {
73
+ return {
74
+ error: 'Unable to find file.',
75
+ };
76
+ }
77
+
78
+ const fileUrl = file.url();
79
+ const fileOrigin = Common.ParsedURL.ParsedURL.extractOrigin(fileUrl);
80
+ if (origin && fileOrigin !== origin) {
81
+ return {
82
+ error: 'Cross-origin access blocked.',
83
+ };
84
+ }
85
+
86
+ const contentData = await file.requestContentData();
87
+ if (TextUtils.ContentData.ContentData.isError(contentData)) {
88
+ return {
89
+ error: `Failed to load file content: ${contentData.error}`,
90
+ };
91
+ }
92
+
93
+ const formatter = new FileFormatter(file);
94
+
95
+ return {
96
+ result: {
97
+ content: formatter.formatFile(),
98
+ },
99
+ };
100
+ }
101
+ }
@@ -0,0 +1,83 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Host from '../../../core/host/host.js';
6
+ import * as i18n from '../../../core/i18n/i18n.js';
7
+ import {PerformanceTraceContext} from '../contexts/PerformanceTraceContext.js';
8
+ import {formatEventForAI} from '../data_formatters/PerformanceTraceFormatter.js';
9
+
10
+ import {
11
+ type BaseToolCapability,
12
+ type DataHandlerResult,
13
+ type DataTool,
14
+ type ToolArgs,
15
+ ToolName,
16
+ } from './Tool.js';
17
+
18
+ const UIStringsNotTranslate = {
19
+ lookingAtTraceEvent: 'Looking at trace event',
20
+ } as const;
21
+
22
+ const lockedString = i18n.i18n.lockedString;
23
+
24
+ export interface GetTraceEventByKeyArgs extends ToolArgs {
25
+ eventKey: string;
26
+ }
27
+
28
+ export class GetTraceEventByKeyTool implements DataTool<GetTraceEventByKeyArgs, string, BaseToolCapability> {
29
+ readonly name = ToolName.GET_TRACE_EVENT_BY_KEY;
30
+ readonly description = 'Get details for a specific trace event by its event key.';
31
+
32
+ readonly parameters: Host.AidaClient.FunctionObjectParam<keyof GetTraceEventByKeyArgs> = {
33
+ type: Host.AidaClient.ParametersTypes.OBJECT,
34
+ description: 'Arguments for looking up a trace event.',
35
+ nullable: false,
36
+ properties: {
37
+ eventKey: {
38
+ type: Host.AidaClient.ParametersTypes.STRING,
39
+ description: 'The key of the event to look up.',
40
+ nullable: false,
41
+ },
42
+ },
43
+ required: ['eventKey'],
44
+ };
45
+
46
+ displayInfoFromArgs(params: GetTraceEventByKeyArgs): {
47
+ title: string,
48
+ action: string,
49
+ } {
50
+ return {
51
+ title: lockedString(UIStringsNotTranslate.lookingAtTraceEvent),
52
+ action: `getTraceEventByKey('${params.eventKey}')`,
53
+ };
54
+ }
55
+
56
+ async handler(
57
+ params: GetTraceEventByKeyArgs,
58
+ capabilities: BaseToolCapability,
59
+ ): Promise<DataHandlerResult<string>> {
60
+ const conversationContext = capabilities.conversationContext;
61
+ if (!conversationContext || !(conversationContext instanceof PerformanceTraceContext)) {
62
+ return {error: 'Performance trace context is not available.'};
63
+ }
64
+
65
+ const focus = conversationContext.getItem();
66
+ const event = focus.lookupEvent(params.eventKey);
67
+ if (!event) {
68
+ return {error: `Could not find event with key "${params.eventKey}".`};
69
+ }
70
+
71
+ const details = formatEventForAI(event);
72
+ return {
73
+ result: details,
74
+ widgets: [{
75
+ name: 'TIMELINE_EVENT_SUMMARY',
76
+ data: {
77
+ event,
78
+ parsedTrace: focus.parsedTrace,
79
+ },
80
+ }],
81
+ };
82
+ }
83
+ }
@@ -0,0 +1,106 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Host from '../../../core/host/host.js';
6
+ import * as i18n from '../../../core/i18n/i18n.js';
7
+ import {
8
+ type MainThreadSectionLabel,
9
+ PerformanceTraceContext,
10
+ } from '../contexts/PerformanceTraceContext.js';
11
+
12
+ import {
13
+ type BaseToolCapability,
14
+ type DataHandlerResult,
15
+ type DataTool,
16
+ MAX_FUNCTION_RESULT_BYTE_LENGTH,
17
+ type ToolArgs,
18
+ ToolName,
19
+ } from './Tool.js';
20
+
21
+ const UIStringsNotTranslate = {
22
+ mainThreadActivity: 'Main thread activity',
23
+ } as const;
24
+
25
+ const lockedString = i18n.i18n.lockedString;
26
+
27
+ export interface GetTraceMainThreadSummaryArgs extends ToolArgs {
28
+ label: MainThreadSectionLabel;
29
+ }
30
+
31
+ export class GetTraceMainThreadSummaryTool implements
32
+ DataTool<GetTraceMainThreadSummaryArgs, string, BaseToolCapability> {
33
+ readonly name = ToolName.GET_TRACE_MAIN_THREAD_SUMMARY;
34
+ readonly description = 'Returns a focused, detailed summary of the main thread for a predefined labeled period.';
35
+
36
+ readonly parameters: Host.AidaClient.FunctionObjectParam<keyof GetTraceMainThreadSummaryArgs> = {
37
+ type: Host.AidaClient.ParametersTypes.OBJECT,
38
+ description: 'Arguments for looking up a main thread summary.',
39
+ nullable: false,
40
+ properties: {
41
+ label: {
42
+ type: Host.AidaClient.ParametersTypes.STRING,
43
+ description:
44
+ 'The label of the period to investigate (e.g., \'LCPBreakdown\', \'CLSCulprits\', \'nav-to-lcp\').',
45
+ nullable: false,
46
+ },
47
+ },
48
+ required: ['label'],
49
+ };
50
+
51
+ displayInfoFromArgs(params: GetTraceMainThreadSummaryArgs): {
52
+ title: string,
53
+ action: string,
54
+ } {
55
+ return {
56
+ title: `${lockedString(UIStringsNotTranslate.mainThreadActivity)}: ${params.label}`,
57
+ action: `getTraceMainThreadSummary('${params.label}')`,
58
+ };
59
+ }
60
+
61
+ async handler(
62
+ params: GetTraceMainThreadSummaryArgs,
63
+ capabilities: BaseToolCapability,
64
+ ): Promise<DataHandlerResult<string>> {
65
+ const conversationContext = capabilities.conversationContext;
66
+ if (!conversationContext || !(conversationContext instanceof PerformanceTraceContext)) {
67
+ return {error: 'Performance trace context is not available.'};
68
+ }
69
+
70
+ const focus = conversationContext.getItem();
71
+ const bounds = conversationContext.getBoundsForLabel(params.label);
72
+ if (!bounds) {
73
+ return {error: `Invalid label: ${params.label}`};
74
+ }
75
+
76
+ const formatter = conversationContext.createFormatter();
77
+ const summary = await formatter.formatMainThreadTrackSummary(bounds);
78
+ if (summary.length > MAX_FUNCTION_RESULT_BYTE_LENGTH) {
79
+ return {
80
+ error:
81
+ 'getTraceMainThreadSummary response is too large. Try investigating using other functions, or a more narrow bounds',
82
+ };
83
+ }
84
+
85
+ return {
86
+ result: summary,
87
+ widgets: [
88
+ {
89
+ name: 'TIMELINE_RANGE_SUMMARY',
90
+ data: {
91
+ parsedTrace: focus.parsedTrace,
92
+ bounds,
93
+ track: 'main',
94
+ },
95
+ },
96
+ {
97
+ name: 'BOTTOM_UP_TREE',
98
+ data: {
99
+ bounds,
100
+ parsedTrace: focus.parsedTrace,
101
+ },
102
+ },
103
+ ],
104
+ };
105
+ }
106
+ }
@@ -0,0 +1,104 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Host from '../../../core/host/host.js';
6
+ import * as i18n from '../../../core/i18n/i18n.js';
7
+ import {PerformanceTraceContext} from '../contexts/PerformanceTraceContext.js';
8
+
9
+ import {
10
+ type BaseToolCapability,
11
+ type DataHandlerResult,
12
+ type DataTool,
13
+ MAX_FUNCTION_RESULT_BYTE_LENGTH,
14
+ type ToolArgs,
15
+ ToolName,
16
+ } from './Tool.js';
17
+
18
+ const UIStringsNotTranslate = {
19
+ networkActivitySummary: 'Network activity summary',
20
+ } as const;
21
+
22
+ const lockedString = i18n.i18n.lockedString;
23
+
24
+ export interface GetTraceNetworkSummaryArgs extends ToolArgs {
25
+ min?: number;
26
+ max?: number;
27
+ }
28
+
29
+ export class GetTraceNetworkSummaryTool implements DataTool<GetTraceNetworkSummaryArgs, string, BaseToolCapability> {
30
+ readonly name = ToolName.GET_TRACE_NETWORK_SUMMARY;
31
+ readonly description = 'Returns a summary of the network requests for the given bounds.';
32
+
33
+ readonly parameters: Host.AidaClient.FunctionObjectParam<keyof GetTraceNetworkSummaryArgs> = {
34
+ type: Host.AidaClient.ParametersTypes.OBJECT,
35
+ description: 'Arguments for looking up a network track summary.',
36
+ nullable: false,
37
+ properties: {
38
+ min: {
39
+ type: Host.AidaClient.ParametersTypes.INTEGER,
40
+ description: 'The minimum time of the bounds, in microseconds.',
41
+ nullable: true,
42
+ },
43
+ max: {
44
+ type: Host.AidaClient.ParametersTypes.INTEGER,
45
+ description: 'The maximum time of the bounds, in microseconds.',
46
+ nullable: true,
47
+ },
48
+ },
49
+ required: [],
50
+ };
51
+
52
+ displayInfoFromArgs(params: GetTraceNetworkSummaryArgs): {
53
+ title: string,
54
+ action: string,
55
+ } {
56
+ const parts = [];
57
+ if (params.min !== undefined) {
58
+ parts.push(`min: ${params.min}`);
59
+ }
60
+ if (params.max !== undefined) {
61
+ parts.push(`max: ${params.max}`);
62
+ }
63
+ return {
64
+ title: lockedString(UIStringsNotTranslate.networkActivitySummary),
65
+ action: `getTraceNetworkSummary({${parts.join(', ')}})`,
66
+ };
67
+ }
68
+
69
+ async handler(
70
+ params: GetTraceNetworkSummaryArgs,
71
+ capabilities: BaseToolCapability,
72
+ ): Promise<DataHandlerResult<string>> {
73
+ const conversationContext = capabilities.conversationContext;
74
+ if (!conversationContext || !(conversationContext instanceof PerformanceTraceContext)) {
75
+ return {error: 'Performance trace context is not available.'};
76
+ }
77
+
78
+ const focus = conversationContext.getItem();
79
+ const bounds = conversationContext.createBounds(params.min, params.max);
80
+ if (!bounds) {
81
+ return {error: 'Invalid bounds.'};
82
+ }
83
+
84
+ const formatter = conversationContext.createFormatter();
85
+ const summary = formatter.formatNetworkTrackSummary(bounds);
86
+ if (summary.length > MAX_FUNCTION_RESULT_BYTE_LENGTH) {
87
+ return {
88
+ error:
89
+ 'getTraceNetworkSummary response is too large. Try investigating using other functions, or a more narrow bounds',
90
+ };
91
+ }
92
+
93
+ return {
94
+ result: summary,
95
+ widgets: [{
96
+ name: 'NETWORK_TRACK',
97
+ data: {
98
+ parsedTrace: focus.parsedTrace,
99
+ bounds,
100
+ },
101
+ }],
102
+ };
103
+ }
104
+ }
@@ -0,0 +1,95 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Common from '../../../core/common/common.js';
6
+ import * as Host from '../../../core/host/host.js';
7
+ import * as i18n from '../../../core/i18n/i18n.js';
8
+ import * as SDK from '../../../core/sdk/sdk.js';
9
+ import {areOriginsEquivalent, isOpaqueOrigin} from '../AiOrigins.js';
10
+
11
+ import {
12
+ type BaseToolCapability,
13
+ type DataHandlerResult,
14
+ type DataTool,
15
+ type OriginLockCapability,
16
+ ToolName,
17
+ } from './Tool.js';
18
+
19
+ const lockedString = i18n.i18n.lockedString;
20
+
21
+ export class ListPageOriginsTool implements
22
+ DataTool<Record<string, never>, {origins: string[]}, BaseToolCapability&OriginLockCapability> {
23
+ readonly name = ToolName.LIST_PAGE_ORIGINS;
24
+ readonly description =
25
+ 'Lists all active, non-empty frame origins loaded by the page. Use this first when generic category context is active to discover all page origins, then pass them to listCookies or listStorageKeys, unless the user\'s explicit request hints at focusing only on the primary page.';
26
+
27
+ readonly parameters: Host.AidaClient.FunctionObjectParam<never> = {
28
+ type: Host.AidaClient.ParametersTypes.OBJECT,
29
+ description: '',
30
+ nullable: false,
31
+ properties: {},
32
+ required: [],
33
+ };
34
+
35
+ displayInfoFromArgs(): {
36
+ title: string,
37
+ action: string,
38
+ } {
39
+ return {
40
+ title: lockedString('Listing page origins'),
41
+ action: 'listPageOrigins()',
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Retrieves the set of unique frame origins loaded within the primary page's target tree.
47
+ *
48
+ * To prevent data leakage across different tabs/windows, this tool:
49
+ * 1. Restricts the frame search to those belonging to the `primaryPageTarget`'s outermost target tree.
50
+ * 2. Filters out any origins that are not equivalent to the established allowed origin.
51
+ * Note: Under site isolation, frames may be hosted on different sub-targets or processes,
52
+ * so we check `frame.securityOrigin` directly instead of the frame's target origin.
53
+ */
54
+ async handler(
55
+ _args: Record<string, never>,
56
+ context: BaseToolCapability&OriginLockCapability,
57
+ ): Promise<DataHandlerResult<{origins: string[]}>> {
58
+ // eslint-disable-next-line @devtools/no-instance-of-migrated-singletons
59
+ const targetManager = SDK.TargetManager.TargetManager.instance();
60
+ const primaryPageTarget = targetManager.primaryPageTarget();
61
+
62
+ const allowedOrigin = context.getEstablishedOrigin();
63
+ if (!allowedOrigin || isOpaqueOrigin(allowedOrigin)) {
64
+ return {error: 'No origin available or not allowed.'};
65
+ }
66
+
67
+ const pageOrigin =
68
+ primaryPageTarget ? Common.ParsedURL.ParsedURL.extractOrigin(primaryPageTarget.inspectedURL()) : '';
69
+ const isAllowed = pageOrigin !== '' && areOriginsEquivalent(pageOrigin, allowedOrigin);
70
+
71
+ if (!isAllowed) {
72
+ return {error: 'No origin available or not allowed.'};
73
+ }
74
+
75
+ const origins = new Set<string>();
76
+ for (const frame of SDK.ResourceTreeModel.ResourceTreeModel.frames(targetManager)) {
77
+ if (frame.resourceTreeModel().target().outermostTarget() !== primaryPageTarget) {
78
+ continue;
79
+ }
80
+ const origin = frame.securityOrigin;
81
+ // Filter out frames that are not same-origin to the page's allowed origin.
82
+ // Under site isolation, frames can be hosted on different targets/processes,
83
+ // so we check the security origin of the frame directly instead of the target.
84
+ if (!origin || !areOriginsEquivalent(origin, allowedOrigin)) {
85
+ continue;
86
+ }
87
+ if (origins.has(origin)) {
88
+ continue;
89
+ }
90
+ origins.add(origin);
91
+ }
92
+
93
+ return {result: {origins: Array.from(origins)}};
94
+ }
95
+ }