chrome-devtools-frontend 1.0.1579812 → 1.0.1581708

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 (351) hide show
  1. package/agents/prompts/creating-a-model.md +51 -0
  2. package/agents/prompts/merging-devtools-module.md +144 -0
  3. package/agents/prompts/ui-widgets.md +351 -0
  4. package/agents/prompts/verification.md +2 -1
  5. package/docs/contributing/README.md +5 -6
  6. package/docs/contributing/changes.md +1 -2
  7. package/docs/feature-specs/elements-tree-edit-html.md +14 -0
  8. package/docs/feature-specs/elements-tree-node-title.md +46 -0
  9. package/docs/styleguide/ux/README.md +1 -1
  10. package/front_end/core/host/UserMetrics.ts +3 -7
  11. package/front_end/core/root/Runtime.ts +0 -1
  12. package/front_end/core/sdk/NetworkManager.ts +0 -35
  13. package/front_end/core/sdk/OverlayModel.ts +12 -0
  14. package/front_end/core/sdk/StorageKeyManager.ts +6 -1
  15. package/front_end/core/sdk/Target.ts +4 -2
  16. package/front_end/devtools_compatibility.js +4 -0
  17. package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
  18. package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +536 -0
  19. package/front_end/entrypoints/greendev_floaty/floaty.css +298 -0
  20. package/front_end/entrypoints/greendev_floaty/floaty.html +38 -0
  21. package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +422 -0
  22. package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -38
  23. package/front_end/entrypoints/node_app/app/NodeMain.ts +19 -1
  24. package/front_end/entrypoints/node_app/node_app.ts +34 -0
  25. package/front_end/generated/InspectorBackendCommands.ts +9 -3
  26. package/front_end/generated/SupportedCSSProperties.js +39 -31
  27. package/front_end/generated/protocol-mapping.d.ts +12 -0
  28. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  29. package/front_end/generated/protocol.ts +56 -2
  30. package/front_end/models/ai_assistance/AiConversation.ts +10 -0
  31. package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -0
  32. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +24 -2
  33. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +104 -9
  34. package/front_end/{panels/elements → models/computed_style}/ComputedStyleModel.ts +26 -0
  35. package/front_end/models/computed_style/computed_style.ts +9 -0
  36. package/front_end/models/issues_manager/CookieIssue.ts +0 -28
  37. package/front_end/models/issues_manager/CorsIssue.ts +11 -14
  38. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +3 -5
  39. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +102 -6
  40. package/front_end/panels/ai_assistance/components/ChatInput.ts +15 -2
  41. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
  42. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  43. package/front_end/panels/application/ApplicationPanelSidebar.ts +13 -11
  44. package/front_end/panels/application/DOMStorageModel.ts +1 -1
  45. package/front_end/panels/application/ResourcesPanel.ts +10 -5
  46. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +0 -1
  47. package/front_end/panels/application/components/BackForwardCacheView.ts +2 -4
  48. package/front_end/panels/autofill/AutofillView.ts +1 -1
  49. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +0 -1
  50. package/front_end/panels/changes/changesSidebar.css +5 -0
  51. package/front_end/panels/common/AiCodeCompletionTeaser.ts +13 -3
  52. package/front_end/panels/common/ExtensionPanel.ts +4 -0
  53. package/front_end/panels/common/FreDialog.ts +4 -0
  54. package/front_end/panels/common/aiCodeCompletionTeaser.css +6 -0
  55. package/front_end/panels/console/ConsoleViewMessage.ts +0 -1
  56. package/front_end/panels/console_counters/WarningErrorCounter.ts +16 -10
  57. package/front_end/panels/coverage/CoverageListView.ts +18 -3
  58. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +11 -0
  59. package/front_end/panels/elements/ComputedStyleWidget.ts +67 -45
  60. package/front_end/panels/elements/ElementsPanel.ts +4 -3
  61. package/front_end/panels/elements/ElementsSidebarPane.ts +11 -8
  62. package/front_end/panels/elements/ElementsTreeElement.ts +0 -1
  63. package/front_end/panels/elements/ElementsTreeOutline.ts +25 -15
  64. package/front_end/panels/elements/LayoutPane.ts +7 -8
  65. package/front_end/panels/elements/MetricsSidebarPane.ts +2 -2
  66. package/front_end/panels/elements/PlatformFontsWidget.ts +24 -9
  67. package/front_end/panels/elements/PropertiesWidget.ts +3 -6
  68. package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
  69. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  70. package/front_end/panels/elements/components/StylePropertyEditor.ts +1 -2
  71. package/front_end/panels/elements/elements.ts +1 -3
  72. package/front_end/panels/greendev/GreenDevPanel.css +282 -0
  73. package/front_end/panels/greendev/GreenDevPanel.ts +337 -0
  74. package/front_end/panels/greendev/GreenDevShared.ts +13 -0
  75. package/front_end/panels/greendev/greendev-meta.ts +52 -0
  76. package/front_end/panels/greendev/greendev.ts +9 -0
  77. package/front_end/panels/issues/CorsIssueDetailsView.ts +4 -4
  78. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  79. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
  80. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
  81. package/front_end/panels/media/PlayerListView.ts +1 -1
  82. package/front_end/panels/network/NetworkLogViewColumns.ts +1 -2
  83. package/front_end/panels/network/RequestInitiatorView.ts +8 -11
  84. package/front_end/panels/network/RequestTimingView.ts +1 -1
  85. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  86. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  87. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  88. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  89. package/front_end/panels/security/SecurityPanel.ts +0 -4
  90. package/front_end/panels/security/SecurityPanelSidebar.ts +2 -42
  91. package/front_end/panels/security/security-meta.ts +2 -14
  92. package/front_end/panels/security/security.ts +0 -4
  93. package/front_end/panels/settings/KeybindsSettingsTab.ts +5 -5
  94. package/front_end/panels/sources/OutlineQuickOpen.ts +19 -0
  95. package/front_end/panels/sources/SourcesSearchScope.ts +2 -1
  96. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  97. package/front_end/panels/timeline/TimelinePanel.ts +25 -0
  98. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
  99. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
  100. package/front_end/third_party/chromium/README.chromium +1 -1
  101. package/front_end/third_party/lighthouse/README.chromium +2 -2
  102. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +145 -144
  103. package/front_end/third_party/lighthouse/report/bundle.js +12 -5
  104. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +2 -2
  105. package/front_end/third_party/puppeteer/README.chromium +2 -2
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +35 -0
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +19 -0
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +16 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +21 -0
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +6 -0
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts +13 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js +56 -36
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -2
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +32 -8
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +32 -2
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -2
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +20 -0
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -1
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +25 -8
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts +2 -0
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +23 -0
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +10 -6
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +29 -0
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +46 -6
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +5 -1
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +18 -0
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +2 -2
  159. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +13 -1
  162. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js +2 -2
  164. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +7 -2
  166. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +43 -7
  168. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +10 -1
  170. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +34 -4
  172. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +1 -1
  174. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +1 -0
  184. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -0
  187. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  188. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
  189. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +2 -2
  192. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  194. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  195. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  196. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +129 -3
  199. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +233 -65
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +35 -0
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +19 -0
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +16 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +21 -0
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +6 -0
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts +13 -1
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js +56 -36
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js.map +1 -1
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -2
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +30 -6
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -1
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +32 -2
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -2
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +20 -0
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -1
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +25 -8
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts +2 -0
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +23 -0
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +10 -6
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -1
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +29 -0
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +46 -6
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +5 -1
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +19 -1
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +3 -3
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +14 -2
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js +3 -3
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js.map +1 -1
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +7 -2
  260. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +43 -8
  262. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +10 -1
  264. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +31 -3
  266. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +1 -1
  268. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  270. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
  272. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
  273. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -1
  275. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +1 -0
  277. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -0
  280. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
  282. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  284. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +2 -2
  285. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
  286. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  287. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  288. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  290. package/front_end/third_party/puppeteer/package/lib/types.d.ts +129 -3
  291. package/front_end/third_party/puppeteer/package/package.json +4 -4
  292. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +46 -0
  293. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +21 -0
  294. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/src/api/Page.ts +23 -0
  296. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +88 -56
  297. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +33 -8
  298. package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +61 -3
  299. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +23 -2
  300. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +29 -8
  301. package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +30 -0
  302. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +13 -2
  303. package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -0
  304. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +85 -8
  305. package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +36 -1
  306. package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +5 -5
  307. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +23 -2
  308. package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +3 -3
  309. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +60 -8
  310. package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +36 -3
  311. package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +1 -1
  312. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  313. package/front_end/third_party/puppeteer/package/src/injected/XPathQuerySelector.ts +1 -1
  314. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +1 -0
  315. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
  316. package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +4 -0
  317. package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +8 -6
  318. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  319. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  320. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +12 -7
  321. package/front_end/ui/components/text_editor/AutocompleteHistory.ts +2 -1
  322. package/front_end/ui/components/text_editor/TextEditorHistory.ts +1 -1
  323. package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
  324. package/front_end/ui/legacy/ListControl.ts +27 -1
  325. package/front_end/ui/legacy/ListWidget.ts +1 -1
  326. package/front_end/ui/legacy/SearchableView.ts +5 -2
  327. package/front_end/ui/legacy/SoftContextMenu.ts +1 -2
  328. package/front_end/ui/legacy/Treeoutline.ts +1 -2
  329. package/front_end/ui/legacy/UIUtils.ts +17 -7
  330. package/front_end/ui/legacy/Widget.ts +15 -0
  331. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +8 -4
  332. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -1
  333. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -1
  334. package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
  335. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  336. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -2
  337. package/front_end/ui/visual_logging/KnownContextValues.ts +15 -0
  338. package/inspector_overlay/main.ts +18 -3
  339. package/inspector_overlay/tool_green_dev_anchors.css +54 -0
  340. package/inspector_overlay/tool_green_dev_anchors.ts +164 -0
  341. package/inspector_overlay/tool_persistent.ts +14 -0
  342. package/mcp/mcp.ts +1 -0
  343. package/package.json +1 -1
  344. package/docs/contributing/design.md +0 -166
  345. package/docs/design_guidelines.md +0 -1
  346. package/front_end/panels/security/CookieControlsTreeElement.ts +0 -21
  347. package/front_end/panels/security/CookieControlsView.ts +0 -447
  348. package/front_end/panels/security/CookieReportTreeElement.ts +0 -21
  349. package/front_end/panels/security/CookieReportView.ts +0 -549
  350. package/front_end/panels/security/cookieControlsView.css +0 -139
  351. package/front_end/panels/security/cookieReportView.css +0 -90
@@ -0,0 +1,422 @@
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
+ /* eslint-disable @devtools/no-imperative-dom-api */
5
+
6
+ import '../../core/sdk/sdk-meta.js';
7
+ import '../../models/workspace/workspace-meta.js';
8
+ import '../../panels/sensors/sensors-meta.js';
9
+ import '../inspector_main/inspector_main-meta.js';
10
+ import '../main/main-meta.js';
11
+
12
+ import * as Common from '../../core/common/common.js';
13
+ import * as Host from '../../core/host/host.js';
14
+ import * as i18n from '../../core/i18n/i18n.js';
15
+ import * as Root from '../../core/root/root.js';
16
+ import * as SDK from '../../core/sdk/sdk.js';
17
+ import * as Foundation from '../../foundation/foundation.js';
18
+ import type * as Protocol from '../../generated/protocol.js';
19
+ import * as AiAssistance from '../../models/ai_assistance/ai_assistance.js';
20
+
21
+ const {AidaClient} = Host.AidaClient;
22
+ const {ResponseType} = AiAssistance.AiAgent;
23
+ const {NodeContext, StylingAgent} = AiAssistance.StylingAgent;
24
+
25
+ class GreenDevFloaty {
26
+ #chatContainer: HTMLDivElement;
27
+ #textField: HTMLInputElement;
28
+ #playButton: HTMLButtonElement;
29
+ #node?: SDK.DOMModel.DOMNode;
30
+ #agent?: StylingAgent;
31
+ #nodeContext?: NodeContext;
32
+ #backendNodeId?: Protocol.DOM.BackendNodeId;
33
+ // Switching this to false can help while investigating tool conflicts.
34
+ #highlightNodeOnWindowFocus = false;
35
+
36
+ constructor(document: Document) {
37
+ this.#chatContainer = document.getElementById('chat-container') as HTMLDivElement;
38
+ this.#textField = document.querySelector('.green-dev-floaty-dialog-text-field') as HTMLInputElement;
39
+ this.#playButton = document.querySelector('.green-dev-floaty-dialog-play-button') as HTMLButtonElement;
40
+
41
+ this.#playButton.addEventListener('click', () => {
42
+ if (this.#node) {
43
+ void this.runConversation();
44
+ }
45
+ });
46
+
47
+ if (this.#highlightNodeOnWindowFocus) {
48
+ window.addEventListener('focus', () => {
49
+ if (this.#node) {
50
+ this.#node.highlight();
51
+ }
52
+ });
53
+ } else {
54
+ console.error('Node highlighting on focus disabled');
55
+ }
56
+
57
+ const nodeDescriptionElement =
58
+ document.querySelector('.green-dev-floaty-dialog-node-description') as HTMLDivElement;
59
+ nodeDescriptionElement.addEventListener('mousemove', () => {
60
+ if (this.#node) {
61
+ this.#node.highlight();
62
+ }
63
+ });
64
+ nodeDescriptionElement.addEventListener('mouseleave', () => {
65
+ if (this.#node && this.#backendNodeId) {
66
+ // Refresh the anchor by re-sending the show command.
67
+ const msg = JSON.stringify({
68
+ id: 9999,
69
+ method: 'Overlay.setShowInspectedElementAnchor',
70
+ params: {inspectedElementAnchorConfig: {backendNodeId: this.#backendNodeId}}
71
+ });
72
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.sendMessageToBackend(msg);
73
+ }
74
+ });
75
+
76
+ this.#textField.addEventListener('keydown', event => {
77
+ if (event.key === 'Enter' && this.#node) {
78
+ void this.runConversation();
79
+ }
80
+ });
81
+
82
+ this.#textField.focus();
83
+ }
84
+
85
+ static instance(opts: {
86
+ forceNew: boolean|null,
87
+ document: Document,
88
+ } = {forceNew: null, document}): GreenDevFloaty {
89
+ const {forceNew, document} = opts;
90
+ if (!greenDevFloatyInstance || forceNew) {
91
+ greenDevFloatyInstance = new GreenDevFloaty(document);
92
+ }
93
+
94
+ return greenDevFloatyInstance;
95
+ }
96
+
97
+ setNode(node: SDK.DOMModel.DOMNode): void {
98
+ if (this.#node === node) {
99
+ return;
100
+ }
101
+ this.#node = node;
102
+ this.#backendNodeId = node.backendNodeId();
103
+
104
+ // Highlight the node on the page.
105
+ void node.domModel().overlayModel().clearHighlight();
106
+ if (this.#highlightNodeOnWindowFocus) {
107
+ node.highlight();
108
+ }
109
+
110
+ this.#textField.focus();
111
+
112
+ // Reset conversation for a new node
113
+ this.#agent = undefined;
114
+ this.#nodeContext = undefined;
115
+
116
+ const nodeDescriptionElement = document.querySelector('.green-dev-floaty-dialog-node-description');
117
+ if (nodeDescriptionElement) {
118
+ const id = node.getAttribute('id');
119
+ if (id) {
120
+ nodeDescriptionElement.textContent = `#${id}`;
121
+ } else {
122
+ const classes = node.classNames().join('.');
123
+ nodeDescriptionElement.textContent = node.nodeName().toLowerCase() + (classes ? `.${classes}` : '');
124
+ }
125
+ }
126
+ }
127
+
128
+ #addMessage(text: string, isUser: boolean): {content: HTMLDivElement, details?: HTMLDivElement} {
129
+ const messageElement = document.createElement('div');
130
+ messageElement.className = `message ${isUser ? 'user-message' : 'ai-message'}`;
131
+
132
+ const content = document.createElement('div');
133
+ content.className = 'message-content';
134
+ content.textContent = text;
135
+ messageElement.appendChild(content);
136
+
137
+ let details: HTMLDivElement|undefined;
138
+ if (!isUser) {
139
+ details = document.createElement('div');
140
+ details.className = 'message-details';
141
+ details.style.display = 'none';
142
+ messageElement.appendChild(details);
143
+
144
+ const toggle = document.createElement('div');
145
+ toggle.className = 'message-details-toggle';
146
+ toggle.textContent = 'Show details';
147
+ toggle.onclick = () => {
148
+ if (details) {
149
+ const isHidden = details.style.display === 'none';
150
+ details.style.display = isHidden ? 'block' : 'none';
151
+ toggle.textContent = isHidden ? 'Hide details' : 'Show details';
152
+ }
153
+ };
154
+ messageElement.appendChild(toggle);
155
+ }
156
+
157
+ this.#chatContainer.appendChild(messageElement);
158
+ this.#chatContainer.scrollTop = this.#chatContainer.scrollHeight;
159
+ return {content, details};
160
+ }
161
+
162
+ async runConversation(): Promise<void> {
163
+ const query = this.#textField.value || this.#textField.placeholder;
164
+ this.#textField.value = '';
165
+
166
+ if (!this.#node) {
167
+ return;
168
+ }
169
+
170
+ if (!this.#agent) {
171
+ const aidaClient = new AidaClient();
172
+ this.#agent = new StylingAgent({aidaClient});
173
+ this.#nodeContext = new NodeContext(this.#node);
174
+ }
175
+
176
+ this.#addMessage(query, true);
177
+ const {content: aiContent, details: aiDetails} = this.#addMessage('Thinking...', false);
178
+
179
+ try {
180
+ if (!this.#nodeContext) {
181
+ throw new Error('Node context is not set.');
182
+ }
183
+ for await (const result of this.#agent.run(query, {selected: this.#nodeContext})) {
184
+ switch (result.type) {
185
+ case ResponseType.ANSWER:
186
+ aiContent.textContent = result.text;
187
+ break;
188
+ case ResponseType.ERROR:
189
+ aiContent.textContent = `Error: ${result.error}`;
190
+ break;
191
+ case ResponseType.THOUGHT:
192
+ if (aiDetails) {
193
+ const thought = document.createElement('div');
194
+ thought.className = 'thought';
195
+ thought.textContent = `Thought: ${result.thought}`;
196
+ aiDetails.appendChild(thought);
197
+ }
198
+ break;
199
+ case ResponseType.ACTION:
200
+ if (aiDetails) {
201
+ const action = document.createElement('div');
202
+ action.className = 'action';
203
+ action.textContent = `Action: ${result.code}\nOutput: ${result.output}`;
204
+ aiDetails.appendChild(action);
205
+ }
206
+ break;
207
+ case ResponseType.SIDE_EFFECT:
208
+ if (aiDetails) {
209
+ const se = document.createElement('div');
210
+ se.className = 'side-effect';
211
+ se.textContent = 'Side effect detected, auto-approving for Floaty...';
212
+ aiDetails.appendChild(se);
213
+ }
214
+ // For Floaty, we might want to auto-approve or show a button.
215
+ // Let's try auto-approving for now to see if it unblocks.
216
+ result.confirm(true);
217
+ break;
218
+ default:
219
+ console.error('Unhandled response type:', result.type, result);
220
+ break;
221
+ }
222
+ this.#chatContainer.scrollTop = this.#chatContainer.scrollHeight;
223
+ }
224
+ } catch (e) {
225
+ console.error('Caught exception in runConversation:', e);
226
+ aiContent.textContent = `Exception: ${e instanceof Error ? e.message : String(e)}`;
227
+ }
228
+ }
229
+ }
230
+
231
+ let greenDevFloatyInstance: GreenDevFloaty;
232
+
233
+ async function init(): Promise<void> {
234
+ try {
235
+ Root.Runtime.Runtime.setPlatform(Host.Platform.platform());
236
+ const [config, prefs] = await Promise.all([
237
+ new Promise<Root.Runtime.HostConfig>(resolve => {
238
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.getHostConfig(resolve);
239
+ }),
240
+ new Promise<Record<string, string>>(
241
+ resolve => Host.InspectorFrontendHost.InspectorFrontendHostInstance.getPreferences(resolve)),
242
+ ]);
243
+
244
+ Object.assign(Root.Runtime.hostConfig, config);
245
+
246
+ // Register necessary experiments to avoid "Unknown experiment" errors.
247
+ Root.Runtime.experiments.register(
248
+ Root.ExperimentNames.ExperimentName.CAPTURE_NODE_CREATION_STACKS, 'Capture node creation stacks');
249
+ Root.Runtime.experiments.register(
250
+ Root.ExperimentNames.ExperimentName.INSTRUMENTATION_BREAKPOINTS, 'Enable instrumentation breakpoints');
251
+ Root.Runtime.experiments.register(
252
+ Root.ExperimentNames.ExperimentName.USE_SOURCE_MAP_SCOPES, 'Use scope information from source maps');
253
+ Root.Runtime.experiments.register(Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE, 'Live heap profile');
254
+ Root.Runtime.experiments.register(Root.ExperimentNames.ExperimentName.PROTOCOL_MONITOR, 'Protocol Monitor');
255
+ Root.Runtime.experiments.register(
256
+ Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE, 'Sampling heap profiler timeline');
257
+ Root.Runtime.experiments.register(Root.ExperimentNames.ExperimentName.APCA, 'APCA');
258
+
259
+ const WINDOW_LOCAL_STORAGE: Common.Settings.SettingsBackingStore = {
260
+ register(_setting: string): void{},
261
+ async get(setting: string): Promise<string> {
262
+ return window.localStorage.getItem(setting) as unknown as string;
263
+ },
264
+ set(setting: string, value: string): void {
265
+ window.localStorage.setItem(setting, value);
266
+ },
267
+ remove(setting: string): void {
268
+ window.localStorage.removeItem(setting);
269
+ },
270
+ clear: () => window.localStorage.clear(),
271
+ };
272
+
273
+ const hostUnsyncedStorage: Common.Settings.SettingsBackingStore = {
274
+ register: (name: string) =>
275
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(name, {synced: false}),
276
+ set: Host.InspectorFrontendHost.InspectorFrontendHostInstance.setPreference,
277
+ get: (name: string) => {
278
+ return new Promise(resolve => {
279
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.getPreference(name, resolve);
280
+ });
281
+ },
282
+ remove: Host.InspectorFrontendHost.InspectorFrontendHostInstance.removePreference,
283
+ clear: Host.InspectorFrontendHost.InspectorFrontendHostInstance.clearPreferences,
284
+ };
285
+ const hostSyncedStorage: Common.Settings.SettingsBackingStore = {
286
+ ...hostUnsyncedStorage,
287
+ register: (name: string) =>
288
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.registerPreference(name, {synced: true}),
289
+ };
290
+
291
+ const syncedStorage = new Common.Settings.SettingsStorage(prefs, hostSyncedStorage, '');
292
+ const globalStorage = new Common.Settings.SettingsStorage(prefs, hostUnsyncedStorage, '');
293
+ const localStorage = new Common.Settings.SettingsStorage(window.localStorage, WINDOW_LOCAL_STORAGE, '');
294
+
295
+ Common.Settings.Settings.instance({
296
+ forceNew: true,
297
+ syncedStorage,
298
+ globalStorage,
299
+ localStorage,
300
+ settingRegistrations: Common.SettingRegistration.getRegisteredSettings(),
301
+ });
302
+
303
+ const settingLanguage = Common.Settings.Settings.instance().moduleSetting<string>('language').get();
304
+ i18n.DevToolsLocale.DevToolsLocale.instance({
305
+ create: true,
306
+ data: {
307
+ navigatorLanguage: navigator.language,
308
+ settingLanguage,
309
+ lookupClosestDevToolsLocale: i18n.i18n.lookupClosestSupportedDevToolsLocale,
310
+ },
311
+ });
312
+
313
+ const universe = new Foundation.Universe.Universe({
314
+ settingsCreationOptions: {
315
+ syncedStorage,
316
+ globalStorage,
317
+ localStorage,
318
+ settingRegistrations: Common.SettingRegistration.getRegisteredSettings(),
319
+ }
320
+ });
321
+ Root.DevToolsContext.setGlobalInstance(universe.context);
322
+
323
+ // Register a revealer that brings the floaty to the front.
324
+ Common.Revealer.registerRevealer({
325
+ contextTypes() {
326
+ return [SDK.DOMModel.DeferredDOMNode, SDK.DOMModel.DOMNode];
327
+ },
328
+ async loadRevealer() {
329
+ return {
330
+ async reveal() {
331
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.bringToFront();
332
+ },
333
+ };
334
+ },
335
+ });
336
+
337
+ await i18n.i18n.fetchAndRegisterLocaleData('en-US');
338
+
339
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.connectionReady();
340
+
341
+ const hash = window.location.hash.substring(1);
342
+ const params = new URLSearchParams(hash);
343
+ const x = parseInt(params.get('x') || '0', 10);
344
+ const y = parseInt(params.get('y') || '0', 10);
345
+ const backendNodeId = parseInt(params.get('backendNodeId') || '0', 10);
346
+
347
+ const floaty = GreenDevFloaty.instance({forceNew: null, document});
348
+
349
+ await SDK.Connections.initMainConnection(
350
+ async () => {
351
+ const targetManager = SDK.TargetManager.TargetManager.instance();
352
+
353
+ targetManager.createTarget('main', 'Main', SDK.Target.Type.FRAME, null);
354
+
355
+ // Wait for the target to be attached and initialized.
356
+ const mainTarget = await new Promise<SDK.Target.Target|null>((resolve, reject) => {
357
+ const target = targetManager.primaryPageTarget();
358
+ if (target) {
359
+ resolve(target);
360
+ return;
361
+ }
362
+ const observer = {
363
+ targetAdded: (target: SDK.Target.Target) => {
364
+ if (target === targetManager.primaryPageTarget()) {
365
+ targetManager.unobserveTargets(observer);
366
+ resolve(target);
367
+ }
368
+ },
369
+ targetRemoved: () => {},
370
+ };
371
+ targetManager.observeTargets(observer);
372
+ setTimeout(() => reject(new Error('Timeout waiting for primary page target')), 10000);
373
+ });
374
+
375
+ if (!mainTarget) {
376
+ console.error('Failed to obtain mainTarget');
377
+ return;
378
+ }
379
+
380
+ const domModel = mainTarget.model(SDK.DOMModel.DOMModel);
381
+ if (!domModel) {
382
+ console.error('DOMModel not found on mainTarget');
383
+ return;
384
+ }
385
+
386
+ let node: SDK.DOMModel.DOMNode|null = null;
387
+ if (backendNodeId) {
388
+ const nodesMap =
389
+ await domModel.pushNodesByBackendIdsToFrontend(new Set([backendNodeId as Protocol.DOM.BackendNodeId]));
390
+ node = nodesMap?.get(backendNodeId as Protocol.DOM.BackendNodeId) || null;
391
+ } else {
392
+ node = await domModel.nodeForLocation(x, y, true);
393
+ }
394
+
395
+ if (node) {
396
+ floaty.setNode(node);
397
+ } else {
398
+ console.error('No node found');
399
+ }
400
+
401
+ // Trigger overlay.
402
+ const showAnchor = (): void => {
403
+ if (backendNodeId) {
404
+ const msg = JSON.stringify({
405
+ id: 9999,
406
+ method: 'Overlay.setShowInspectedElementAnchor',
407
+ params: {inspectedElementAnchorConfig: {backendNodeId}}
408
+ });
409
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.sendMessageToBackend(msg);
410
+ }
411
+ };
412
+ showAnchor();
413
+ },
414
+ () => {
415
+ console.error('Connection lost');
416
+ });
417
+ } catch (err) {
418
+ console.error('Error during init():', err);
419
+ }
420
+ }
421
+
422
+ void init();
@@ -9,7 +9,6 @@ import * as Root from '../../core/root/root.js';
9
9
  import * as SDK from '../../core/sdk/sdk.js';
10
10
  import type * as Protocol from '../../generated/protocol.js';
11
11
  import * as MobileThrottling from '../../panels/mobile_throttling/mobile_throttling.js';
12
- import * as Security from '../../panels/security/security.js';
13
12
  import * as Components from '../../ui/legacy/components/utils/utils.js';
14
13
  import * as UI from '../../ui/legacy/legacy.js';
15
14
  import * as Lit from '../../ui/lit/lit.js';
@@ -110,43 +109,6 @@ export class InspectorMainImpl implements Common.Runnable.Runnable {
110
109
  Host.InspectorFrontendHostAPI.Events.ReloadInspectedPage, ({data: hard}) => {
111
110
  SDK.ResourceTreeModel.ResourceTreeModel.reloadAllPages(hard);
112
111
  });
113
-
114
- // Skip possibly showing the cookie control reload banner if devtools UI is not enabled or if there is an enterprise policy blocking third party cookies
115
- if (!Root.Runtime.hostConfig.devToolsPrivacyUI?.enabled ||
116
- Root.Runtime.hostConfig.thirdPartyCookieControls?.managedBlockThirdPartyCookies === true) {
117
- return;
118
- }
119
-
120
- // Third party cookie control settings according to the browser
121
- const browserCookieControls = Root.Runtime.hostConfig.thirdPartyCookieControls;
122
-
123
- // Devtools cookie controls settings
124
- const cookieControlOverrideSetting =
125
- Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined);
126
- const gracePeriodMitigationDisabledSetting =
127
- Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined);
128
- const heuristicMitigationDisabledSetting =
129
- Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined);
130
-
131
- // If there are saved cookie control settings, check to see if they differ from the browser config. If they do, prompt a page reload so the user will see the cookie controls behavior.
132
- if (cookieControlOverrideSetting.get() !== undefined) {
133
- if (browserCookieControls?.thirdPartyCookieRestrictionEnabled !== cookieControlOverrideSetting.get()) {
134
- Security.CookieControlsView.showInfobar();
135
- return;
136
- }
137
-
138
- // If the devtools third-party cookie control is active, we also need to check if there's a discrepancy in the mitigation behavior.
139
- if (cookieControlOverrideSetting.get()) {
140
- if (browserCookieControls?.thirdPartyCookieMetadataEnabled === gracePeriodMitigationDisabledSetting.get()) {
141
- Security.CookieControlsView.showInfobar();
142
- return;
143
- }
144
- if (browserCookieControls?.thirdPartyCookieHeuristicsEnabled === heuristicMitigationDisabledSetting.get()) {
145
- Security.CookieControlsView.showInfobar();
146
- return;
147
- }
148
- }
149
- }
150
112
  }
151
113
  }
152
114
 
@@ -107,7 +107,7 @@ export class NodeChildTargetManager extends SDK.SDKModel.SDKModel<void> implemen
107
107
  targetDestroyed(_event: Protocol.Target.TargetDestroyedEvent): void {
108
108
  }
109
109
 
110
- attachedToTarget({sessionId, targetInfo}: Protocol.Target.AttachedToTargetEvent): void {
110
+ async attachedToTarget({sessionId, targetInfo}: Protocol.Target.AttachedToTargetEvent): Promise<void> {
111
111
  let target: SDK.Target.Target;
112
112
  if (targetInfo.type === 'node_worker') {
113
113
  target = this.#targetManager.createTarget(
@@ -124,6 +124,24 @@ export class NodeChildTargetManager extends SDK.SDKModel.SDKModel<void> implemen
124
124
  }
125
125
  this.#childTargets.set(sessionId, target);
126
126
  void target.runtimeAgent().invoke_runIfWaitingForDebugger();
127
+ await this.#initializeStorage(target);
128
+ }
129
+
130
+ async #initializeStorage(target: SDK.Target.Target): Promise<void> {
131
+ const storageAgent = target.storageAgent();
132
+ const response = await storageAgent.invoke_getStorageKey({});
133
+
134
+ const storageKey = response.storageKey;
135
+ if (response.getError() || !storageKey) {
136
+ console.error(`Failed to get storage key for target ${target.id()}: ${response.getError()}`);
137
+ return;
138
+ }
139
+
140
+ const storageKeyManager = target.model(SDK.StorageKeyManager.StorageKeyManager);
141
+ if (storageKeyManager) {
142
+ storageKeyManager.setMainStorageKey(storageKey);
143
+ storageKeyManager.updateStorageKeys(new Set([storageKey]));
144
+ }
127
145
  }
128
146
 
129
147
  detachedFromTarget({sessionId}: Protocol.Target.DetachedFromTargetEvent): void {
@@ -9,6 +9,7 @@ import '../../panels/network/network-meta.js';
9
9
  import * as Common from '../../core/common/common.js';
10
10
  import * as i18n from '../../core/i18n/i18n.js';
11
11
  import * as Root from '../../core/root/root.js';
12
+ import type * as Resources from '../../panels/application/application.js';
12
13
  import type * as Sources from '../../panels/sources/sources.js';
13
14
  import * as UI from '../../ui/legacy/legacy.js';
14
15
  import * as Main from '../main/main.js';
@@ -39,6 +40,14 @@ const UIStrings = {
39
40
  * @description Command for showing the 'Node' tool in the Network Navigator View, which is part of the Sources tool
40
41
  */
41
42
  showNode: 'Show Node',
43
+ /**
44
+ * @description Text in Application Panel Sidebar of the Application panel
45
+ */
46
+ application: 'Application',
47
+ /**
48
+ * @description Command for showing the 'Application' tool
49
+ */
50
+ showApplication: 'Show Application',
42
51
  } as const;
43
52
 
44
53
  const str_ = i18n.i18n.registerUIStrings('entrypoints/node_app/node_app.ts', UIStrings);
@@ -78,6 +87,31 @@ UI.ViewManager.registerViewExtension({
78
87
  },
79
88
  });
80
89
 
90
+ let loadedResourcesModule: (typeof Resources|undefined);
91
+
92
+ async function loadResourcesModule(): Promise<typeof Resources> {
93
+ if (!loadedResourcesModule) {
94
+ loadedResourcesModule = await import('../../panels/application/application.js');
95
+ }
96
+ return loadedResourcesModule;
97
+ }
98
+
99
+ UI.ViewManager.registerViewExtension({
100
+ location: UI.ViewManager.ViewLocationValues.PANEL,
101
+ id: 'resources',
102
+ title: i18nLazyString(UIStrings.application),
103
+ commandPrompt: i18nLazyString(UIStrings.showApplication),
104
+ order: 70,
105
+ async loadView() {
106
+ const Resources = await loadResourcesModule();
107
+ return Resources.ResourcesPanel.ResourcesPanel.instance({
108
+ forceNew: true,
109
+ mode: 'node',
110
+ });
111
+ },
112
+ tags: [],
113
+ });
114
+
81
115
  // @ts-expect-error Exposed for legacy layout tests
82
116
  self.runtime = Root.Runtime.Runtime.instance({forceNew: true});
83
117
  Common.Runnable.registerEarlyInitializationRunnable(NodeMainImpl.instance);