chrome-devtools-frontend 1.0.1615539 → 1.0.1616061

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 (347) hide show
  1. package/front_end/generated/InspectorBackendCommands.ts +2 -1
  2. package/front_end/generated/SupportedCSSProperties.js +4 -0
  3. package/front_end/generated/protocol-mapping.d.ts +7 -0
  4. package/front_end/generated/protocol-proxy-api.d.ts +5 -0
  5. package/front_end/generated/protocol.ts +11 -0
  6. package/front_end/models/ai_assistance/agents/AiAgent.ts +5 -4
  7. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +3 -0
  8. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +85 -47
  9. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +32 -0
  10. package/front_end/models/bindings/SymbolizedError.ts +20 -0
  11. package/front_end/models/bindings/bindings.ts +2 -0
  12. package/front_end/panels/ai_assistance/components/ChatMessage.ts +28 -23
  13. package/front_end/panels/ai_assistance/components/chatMessage.css +1 -1
  14. package/front_end/panels/elements/PropertiesWidget.ts +8 -8
  15. package/front_end/third_party/chromium/README.chromium +1 -1
  16. package/front_end/third_party/puppeteer/README.chromium +2 -2
  17. package/front_end/third_party/puppeteer/package/README.md +2 -0
  18. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +12 -0
  19. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  20. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  21. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts +74 -0
  22. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.d.ts.map +1 -0
  23. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js +68 -0
  24. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Extension.js.map +1 -0
  25. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +8 -0
  26. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  27. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Issue.d.ts +22 -0
  28. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Issue.d.ts.map +1 -0
  29. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Issue.js +8 -0
  30. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Issue.js.map +1 -0
  31. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +35 -0
  32. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  33. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  34. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Realm.d.ts +106 -4
  35. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Realm.d.ts.map +1 -1
  36. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Realm.js +29 -1
  37. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Realm.js.map +1 -1
  38. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/WebWorker.d.ts +24 -2
  39. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/WebWorker.d.ts.map +1 -1
  40. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/WebWorker.js +15 -1
  41. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/WebWorker.js.map +1 -1
  42. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts +2 -0
  43. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.d.ts.map +1 -1
  44. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.js +1 -0
  45. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/api.js.map +1 -1
  46. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +4 -0
  47. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  48. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +8 -0
  49. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  50. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserConnector.d.ts.map +1 -1
  51. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserConnector.js +2 -1
  52. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserConnector.js.map +1 -1
  53. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -0
  54. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  55. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +6 -0
  56. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
  57. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +2 -0
  58. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  59. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +9 -47
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.d.ts.map +1 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js +0 -1
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Input.js.map +1 -1
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +8 -1
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +14 -1
  67. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  68. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.d.ts +4 -0
  69. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.d.ts.map +1 -1
  70. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.js +21 -0
  71. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Realm.js.map +1 -1
  72. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Target.d.ts.map +1 -1
  73. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Target.js +2 -2
  74. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Target.js.map +1 -1
  75. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +2 -0
  76. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  77. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.js +18 -0
  78. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.js.map +1 -1
  79. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts +28 -0
  80. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.d.ts.map +1 -1
  81. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js +67 -0
  82. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/util.js.map +1 -1
  83. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +9 -2
  84. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  85. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +56 -5
  86. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  87. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  88. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
  89. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpIssue.d.ts +17 -0
  91. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpIssue.d.ts.map +1 -0
  92. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpIssue.js +27 -0
  93. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/CdpIssue.js.map +1 -0
  94. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts +16 -0
  95. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.d.ts.map +1 -0
  96. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js +79 -0
  97. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Extension.js.map +1 -0
  98. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts +10 -0
  99. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.d.ts.map +1 -1
  100. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js +26 -15
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Frame.js.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +38 -0
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.d.ts +9 -3
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js +31 -1
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +6 -0
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +49 -35
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Target.d.ts +3 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Target.d.ts.map +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Target.js +16 -7
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Target.js.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts +2 -0
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js +9 -1
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.d.ts +218 -0
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.d.ts.map +1 -0
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.js +288 -0
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebMCP.js.map +1 -0
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts +4 -7
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js +28 -3
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/WebWorker.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts +1 -0
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.d.ts.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js +1 -0
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/cdp.js.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +9 -0
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +36 -0
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +7 -0
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts +0 -11
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +3 -3
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts +2 -0
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +5 -2
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +0 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  153. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  154. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.js +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.js.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +7851 -6616
  159. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +1017 -305
  160. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +12 -0
  161. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts +74 -0
  164. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.d.ts.map +1 -0
  165. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js +64 -0
  166. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Extension.js.map +1 -0
  167. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +8 -0
  168. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Input.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Issue.d.ts +22 -0
  172. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Issue.d.ts.map +1 -0
  173. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Issue.js +7 -0
  174. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Issue.js.map +1 -0
  175. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +35 -0
  176. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Realm.d.ts +106 -4
  179. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Realm.d.ts.map +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Realm.js +29 -1
  181. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Realm.js.map +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/WebWorker.d.ts +24 -2
  183. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/WebWorker.d.ts.map +1 -1
  184. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/WebWorker.js +14 -0
  185. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/WebWorker.js.map +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts +2 -0
  187. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.d.ts.map +1 -1
  188. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.js +1 -0
  189. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/api.js.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +4 -0
  191. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +8 -0
  193. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  194. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserConnector.d.ts.map +1 -1
  195. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserConnector.js +2 -1
  196. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserConnector.js.map +1 -1
  197. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -0
  198. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
  199. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +6 -0
  200. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +2 -0
  202. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +8 -46
  204. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js +0 -1
  207. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Input.js.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +8 -1
  209. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  210. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +14 -1
  211. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  212. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.d.ts +4 -0
  213. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.d.ts.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.js +22 -1
  215. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Realm.js.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Target.d.ts.map +1 -1
  217. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Target.js +2 -2
  218. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Target.js.map +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts +3 -1
  220. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.d.ts.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.js +18 -0
  222. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Realm.js.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts +28 -0
  224. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.d.ts.map +1 -1
  225. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js +62 -0
  226. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/util.js.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +9 -2
  228. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +56 -5
  230. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  232. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
  233. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
  234. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpIssue.d.ts +17 -0
  235. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpIssue.d.ts.map +1 -0
  236. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpIssue.js +23 -0
  237. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/CdpIssue.js.map +1 -0
  238. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts +16 -0
  239. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.d.ts.map +1 -0
  240. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js +75 -0
  241. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Extension.js.map +1 -0
  242. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts +10 -0
  243. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.d.ts.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js +26 -15
  245. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Frame.js.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts +1 -1
  247. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.d.ts.map +1 -1
  248. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +38 -0
  249. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.d.ts +9 -3
  251. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.d.ts.map +1 -1
  252. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js +31 -1
  253. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/IsolatedWorld.js.map +1 -1
  254. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +6 -0
  255. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  256. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +49 -35
  257. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  258. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Target.d.ts +3 -1
  259. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Target.d.ts.map +1 -1
  260. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Target.js +16 -7
  261. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Target.js.map +1 -1
  262. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts +2 -0
  263. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  264. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js +9 -1
  265. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js.map +1 -1
  266. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.d.ts +218 -0
  267. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.d.ts.map +1 -0
  268. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.js +282 -0
  269. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebMCP.js.map +1 -0
  270. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts +4 -7
  271. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.d.ts.map +1 -1
  272. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js +29 -4
  273. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/WebWorker.js.map +1 -1
  274. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts +1 -0
  275. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.d.ts.map +1 -1
  276. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js +1 -0
  277. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/cdp.js.map +1 -1
  278. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +9 -0
  279. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
  280. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +34 -0
  281. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
  282. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts +7 -0
  283. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  284. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts +0 -11
  285. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts.map +1 -1
  286. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts +2 -2
  287. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts +2 -0
  288. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +5 -2
  290. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  292. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +0 -1
  293. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  294. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core-browser.d.ts +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core-browser.d.ts.map +1 -1
  296. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  297. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  298. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/Mutex.js +1 -1
  300. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/Mutex.js.map +1 -1
  301. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  303. package/front_end/third_party/puppeteer/package/lib/types.d.ts +7851 -6616
  304. package/front_end/third_party/puppeteer/package/package.json +5 -6
  305. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +13 -0
  306. package/front_end/third_party/puppeteer/package/src/api/Extension.ts +98 -0
  307. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +9 -0
  308. package/front_end/third_party/puppeteer/package/src/api/Issue.ts +24 -0
  309. package/front_end/third_party/puppeteer/package/src/api/Page.ts +38 -0
  310. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +111 -12
  311. package/front_end/third_party/puppeteer/package/src/api/WebWorker.ts +26 -4
  312. package/front_end/third_party/puppeteer/package/src/api/api.ts +2 -0
  313. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +12 -0
  314. package/front_end/third_party/puppeteer/package/src/bidi/BrowserConnector.ts +2 -0
  315. package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +7 -0
  316. package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +13 -67
  317. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +0 -1
  318. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +21 -2
  319. package/front_end/third_party/puppeteer/package/src/bidi/Realm.ts +39 -1
  320. package/front_end/third_party/puppeteer/package/src/bidi/Target.ts +2 -5
  321. package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +23 -0
  322. package/front_end/third_party/puppeteer/package/src/bidi/util.ts +94 -0
  323. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +75 -2
  324. package/front_end/third_party/puppeteer/package/src/cdp/BrowserConnector.ts +2 -0
  325. package/front_end/third_party/puppeteer/package/src/cdp/CdpIssue.ts +30 -0
  326. package/front_end/third_party/puppeteer/package/src/cdp/Extension.ts +101 -0
  327. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +32 -22
  328. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +44 -3
  329. package/front_end/third_party/puppeteer/package/src/cdp/IsolatedWorld.ts +40 -2
  330. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +61 -47
  331. package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +17 -7
  332. package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +14 -1
  333. package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +441 -0
  334. package/front_end/third_party/puppeteer/package/src/cdp/WebWorker.ts +38 -12
  335. package/front_end/third_party/puppeteer/package/src/cdp/cdp.ts +1 -0
  336. package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +52 -0
  337. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +7 -0
  338. package/front_end/third_party/puppeteer/package/src/common/types.ts +0 -14
  339. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +7 -0
  340. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +0 -1
  341. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  342. package/front_end/third_party/puppeteer/package/src/util/Mutex.ts +1 -1
  343. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  344. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +5 -0
  345. package/front_end/ui/legacy/Treeoutline.ts +13 -0
  346. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  347. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type {Page, Target, WebWorker} from '../api/api.js';
7
+ import {Extension} from '../api/api.js';
8
+ import {debugError} from '../common/util.js';
9
+ import {isErrorLike} from '../util/ErrorLike.js';
10
+
11
+ import type {CdpBrowser} from './Browser.js';
12
+ import {isTargetClosedError} from './Connection.js';
13
+
14
+ export class CdpExtension extends Extension {
15
+ // needed to access the CDPSession to trigger an extension action.
16
+ #browser: CdpBrowser;
17
+
18
+ /*
19
+ * @internal
20
+ */
21
+ constructor(id: string, version: string, name: string, browser: CdpBrowser) {
22
+ super(id, version, name);
23
+ this.#browser = browser;
24
+ }
25
+
26
+ async workers(): Promise<WebWorker[]> {
27
+ const targets = this.#browser.targets();
28
+
29
+ const extensionWorkers = targets.filter((target: Target) => {
30
+ const targetUrl = target.url();
31
+ return (
32
+ target.type() === 'service_worker' &&
33
+ targetUrl.startsWith('chrome-extension://' + this.id)
34
+ );
35
+ });
36
+
37
+ const workers: WebWorker[] = [];
38
+ for (const target of extensionWorkers) {
39
+ try {
40
+ const worker = await target.worker();
41
+
42
+ if (worker) {
43
+ workers.push(worker);
44
+ }
45
+ } catch (err) {
46
+ if (this.#canIgnoreError(err)) {
47
+ debugError(err);
48
+ continue;
49
+ }
50
+ throw err;
51
+ }
52
+ }
53
+
54
+ return workers;
55
+ }
56
+
57
+ async pages(): Promise<Page[]> {
58
+ const targets = this.#browser.targets();
59
+
60
+ const extensionPages = targets.filter((target: Target) => {
61
+ const targetUrl = target.url();
62
+ return (
63
+ (target.type() === 'page' || target.type() === 'background_page') &&
64
+ targetUrl.startsWith('chrome-extension://' + this.id)
65
+ );
66
+ });
67
+
68
+ const pages = await Promise.all(
69
+ extensionPages.map(async target => {
70
+ try {
71
+ return await target.asPage();
72
+ } catch (err) {
73
+ if (this.#canIgnoreError(err)) {
74
+ debugError(err);
75
+ return null;
76
+ }
77
+ throw err;
78
+ }
79
+ }),
80
+ );
81
+
82
+ return pages.filter((page): page is Page => {
83
+ return page !== null;
84
+ });
85
+ }
86
+
87
+ async triggerAction(page: Page): Promise<void> {
88
+ await this.#browser._connection.send('Extensions.triggerAction', {
89
+ id: this.id,
90
+ targetId: page._tabId,
91
+ });
92
+ }
93
+
94
+ #canIgnoreError(error: unknown): boolean {
95
+ return (
96
+ isErrorLike(error) &&
97
+ (isTargetClosedError(error) ||
98
+ error.message.includes('No target with given id found'))
99
+ );
100
+ }
101
+ }
@@ -15,6 +15,7 @@ import type {HTTPResponse} from '../api/HTTPResponse.js';
15
15
  import type {WaitTimeoutOptions} from '../api/Page.js';
16
16
  import {UnsupportedOperation} from '../common/Errors.js';
17
17
  import {debugError} from '../common/util.js';
18
+ import type {Realm} from '../puppeteer-core.js';
18
19
  import {Deferred} from '../util/Deferred.js';
19
20
  import {disposeSymbol} from '../util/disposable.js';
20
21
  import {isErrorLike} from '../util/ErrorLike.js';
@@ -52,6 +53,7 @@ export class CdpFrame extends Frame {
52
53
  override accessibility: Accessibility;
53
54
 
54
55
  worlds: IsolatedWorldChart;
56
+ extensionWorlds: Record<string, IsolatedWorld> = {};
55
57
 
56
58
  constructor(
57
59
  frameManager: FrameManager,
@@ -69,10 +71,15 @@ export class CdpFrame extends Frame {
69
71
 
70
72
  this._loaderId = '';
71
73
  this.worlds = {
72
- [MAIN_WORLD]: new IsolatedWorld(this, this._frameManager.timeoutSettings),
74
+ [MAIN_WORLD]: new IsolatedWorld(
75
+ this,
76
+ this._frameManager.timeoutSettings,
77
+ MAIN_WORLD,
78
+ ),
73
79
  [PUPPETEER_WORLD]: new IsolatedWorld(
74
80
  this,
75
81
  this._frameManager.timeoutSettings,
82
+ PUPPETEER_WORLD,
76
83
  ),
77
84
  };
78
85
 
@@ -84,30 +91,23 @@ export class CdpFrame extends Frame {
84
91
  this._onLoadingStopped();
85
92
  });
86
93
 
87
- this.worlds[MAIN_WORLD].emitter.on(
88
- 'consoleapicalled',
89
- this.#onMainWorldConsoleApiCalled.bind(this),
90
- );
91
- this.worlds[MAIN_WORLD].emitter.on(
92
- 'bindingcalled',
93
- this.#onMainWorldBindingCalled.bind(this),
94
- );
94
+ this.registerWorldListeners(this.worlds[MAIN_WORLD]);
95
95
  }
96
96
 
97
- #onMainWorldConsoleApiCalled(
98
- event: Protocol.Runtime.ConsoleAPICalledEvent,
99
- ): void {
100
- this._frameManager.emit(FrameManagerEvent.ConsoleApiCalled, [
101
- this.worlds[MAIN_WORLD],
102
- event,
103
- ]);
104
- }
97
+ /**
98
+ * @internal
99
+ */
100
+ registerWorldListeners(world: IsolatedWorld): void {
101
+ world.emitter.on('consoleapicalled', event => {
102
+ this._frameManager.emit(FrameManagerEvent.ConsoleApiCalled, [
103
+ world,
104
+ event,
105
+ ]);
106
+ });
105
107
 
106
- #onMainWorldBindingCalled(event: Protocol.Runtime.BindingCalledEvent) {
107
- this._frameManager.emit(FrameManagerEvent.BindingCalled, [
108
- this.worlds[MAIN_WORLD],
109
- event,
110
- ]);
108
+ world.emitter.on('bindingcalled', event => {
109
+ this._frameManager.emit(FrameManagerEvent.BindingCalled, [world, event]);
110
+ });
111
111
  }
112
112
 
113
113
  /**
@@ -417,6 +417,9 @@ export class CdpFrame extends Frame {
417
417
  this.#detached = true;
418
418
  this.worlds[MAIN_WORLD][disposeSymbol]();
419
419
  this.worlds[PUPPETEER_WORLD][disposeSymbol]();
420
+ for (const extensionWorld of Object.values(this.extensionWorlds)) {
421
+ extensionWorld[disposeSymbol]();
422
+ }
420
423
  }
421
424
 
422
425
  exposeFunction(): never {
@@ -435,6 +438,13 @@ export class CdpFrame extends Frame {
435
438
  .mainRealm()
436
439
  .adoptBackendNode(backendNodeId)) as ElementHandle<HTMLIFrameElement>;
437
440
  }
441
+
442
+ /**
443
+ * @public
444
+ */
445
+ override extensionRealms(): Realm[] {
446
+ return Object.values(this.extensionWorlds);
447
+ }
438
448
  }
439
449
 
440
450
  /**
@@ -8,7 +8,7 @@ import type {Protocol} from 'devtools-protocol';
8
8
 
9
9
  import {type CDPSession, CDPSessionEvent} from '../api/CDPSession.js';
10
10
  import {FrameEvent} from '../api/Frame.js';
11
- import type {NewDocumentScriptEvaluation} from '../api/Page.js';
11
+ import {PageEvent, type NewDocumentScriptEvaluation} from '../api/Page.js';
12
12
  import {EventEmitter} from '../common/EventEmitter.js';
13
13
  import type {TimeoutSettings} from '../common/TimeoutSettings.js';
14
14
  import {debugError, PuppeteerURL, UTILITY_WORLD_NAME} from '../common/util.js';
@@ -18,6 +18,7 @@ import {disposeSymbol} from '../util/disposable.js';
18
18
  import {isErrorLike} from '../util/ErrorLike.js';
19
19
 
20
20
  import type {Binding} from './Binding.js';
21
+ import {CdpIssue} from './CdpIssue.js';
21
22
  import {CdpPreloadScript} from './CdpPreloadScript.js';
22
23
  import type {CdpCDPSession} from './CdpSession.js';
23
24
  import {isTargetClosedError} from './Connection.js';
@@ -27,14 +28,14 @@ import {CdpFrame} from './Frame.js';
27
28
  import type {FrameManagerEvents} from './FrameManagerEvents.js';
28
29
  import {FrameManagerEvent} from './FrameManagerEvents.js';
29
30
  import {FrameTree} from './FrameTree.js';
30
- import type {IsolatedWorld} from './IsolatedWorld.js';
31
+ import {IsolatedWorld} from './IsolatedWorld.js';
31
32
  import {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';
32
33
  import {NetworkManager} from './NetworkManager.js';
33
34
  import type {CdpPage} from './Page.js';
34
35
  import type {CdpTarget} from './Target.js';
35
36
 
36
37
  const TIME_FOR_WAITING_FOR_SWAP = 100; // ms.
37
-
38
+ const CHROME_EXTENSION_PREFIX = 'chrome-extension://';
38
39
  /**
39
40
  * A frame manager manages the frames for a given {@link Page | page}.
40
41
  *
@@ -201,6 +202,9 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
201
202
  await this.#frameTreeHandled?.valueOrThrow();
202
203
  this.#onLifecycleEvent(event);
203
204
  });
205
+ session.on('Audits.issueAdded', event => {
206
+ this.#page.emit(PageEvent.Issue, new CdpIssue(event.issue));
207
+ });
204
208
  }
205
209
 
206
210
  async initialize(client: CDPSession, frame?: CdpFrame | null): Promise<void> {
@@ -231,6 +235,7 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
231
235
  ...(frame ? Array.from(this.#bindings.values()) : []).map(binding => {
232
236
  return frame?.addExposedFunctionBinding(binding);
233
237
  }),
238
+ this.#page.browser().isIssuesEnabled() && client.send('Audits.enable'),
234
239
  ]);
235
240
  } catch (error) {
236
241
  this.#frameTreeHandled?.resolve();
@@ -536,11 +541,29 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
536
541
  }
537
542
  }
538
543
 
544
+ #isExtensionOrigin(origin: string) {
545
+ return origin.startsWith(CHROME_EXTENSION_PREFIX);
546
+ }
547
+
548
+ #extractExtensionId(origin: string): string | null {
549
+ if (!origin || !this.#isExtensionOrigin(origin)) {
550
+ return null;
551
+ }
552
+
553
+ const pathPart = origin.substring(CHROME_EXTENSION_PREFIX.length);
554
+ const slashIndex = pathPart.indexOf('/');
555
+
556
+ // if there's no / it means that pathPart is now the extensionId, otherwise
557
+ // we take everything until the first /
558
+ return slashIndex === -1 ? pathPart : pathPart.substring(0, slashIndex);
559
+ }
560
+
539
561
  #onExecutionContextCreated(
540
562
  contextPayload: Protocol.Runtime.ExecutionContextDescription,
541
563
  session: CDPSession,
542
564
  ): void {
543
565
  const auxData = contextPayload.auxData as {frameId?: string} | undefined;
566
+ const origin = contextPayload.origin;
544
567
  const frameId = auxData && auxData.frameId;
545
568
  const frame = typeof frameId === 'string' ? this.frame(frameId) : undefined;
546
569
  let world: IsolatedWorld | undefined;
@@ -556,8 +579,26 @@ export class FrameManager extends EventEmitter<FrameManagerEvents> {
556
579
  // connections so we might end up creating multiple isolated worlds.
557
580
  // We can use either.
558
581
  world = frame.worlds[PUPPETEER_WORLD];
582
+ } else if (this.#isExtensionOrigin(origin)) {
583
+ const extId = this.#extractExtensionId(origin);
584
+
585
+ if (!extId) {
586
+ debugError('Error while parsing extension id');
587
+ return;
588
+ }
589
+
590
+ if (frame.extensionWorlds[extId]) {
591
+ world = frame.extensionWorlds[extId];
592
+ } else {
593
+ world = new IsolatedWorld(frame, this.timeoutSettings, extId);
594
+ frame.extensionWorlds[extId] = world;
595
+ frame.registerWorldListeners(world);
596
+ world.origin = origin;
597
+ world.setWorldId(extId);
598
+ }
559
599
  }
560
600
  }
601
+
561
602
  // If there is no world, the context is not meant to be handled by us.
562
603
  if (!world) {
563
604
  return;
@@ -9,6 +9,7 @@ import type {Protocol} from 'devtools-protocol';
9
9
  import {firstValueFrom, map, raceWith} from '../../third_party/rxjs/rxjs.js';
10
10
  import type {CDPSession} from '../api/CDPSession.js';
11
11
  import type {ElementHandle} from '../api/ElementHandle.js';
12
+ import type {Extension} from '../api/Extension.js';
12
13
  import type {JSHandle} from '../api/JSHandle.js';
13
14
  import {Realm} from '../api/Realm.js';
14
15
  import {EventEmitter} from '../common/EventEmitter.js';
@@ -24,9 +25,10 @@ import {disposeSymbol} from '../util/disposable.js';
24
25
  import {CdpElementHandle} from './ElementHandle.js';
25
26
  import type {ExecutionContext} from './ExecutionContext.js';
26
27
  import type {CdpFrame} from './Frame.js';
27
- import type {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';
28
+ import type {PUPPETEER_WORLD} from './IsolatedWorlds.js';
29
+ import {MAIN_WORLD} from './IsolatedWorlds.js';
28
30
  import {CdpJSHandle} from './JSHandle.js';
29
- import type {CdpWebWorker} from './WebWorker.js';
31
+ import {CdpWebWorker} from './WebWorker.js';
30
32
 
31
33
  /**
32
34
  * @internal
@@ -66,15 +68,19 @@ export type IsolatedWorldEmitter = EventEmitter<{
66
68
  export class IsolatedWorld extends Realm {
67
69
  #context?: ExecutionContext;
68
70
  #emitter: IsolatedWorldEmitter = new EventEmitter();
71
+ #worldId: string | symbol;
72
+ #origin?: string;
69
73
 
70
74
  readonly #frameOrWorker: CdpFrame | CdpWebWorker;
71
75
 
72
76
  constructor(
73
77
  frameOrWorker: CdpFrame | CdpWebWorker,
74
78
  timeoutSettings: TimeoutSettings,
79
+ worldId: string | symbol,
75
80
  ) {
76
81
  super(timeoutSettings);
77
82
  this.#frameOrWorker = frameOrWorker;
83
+ this.#worldId = worldId;
78
84
  }
79
85
 
80
86
  get environment(): CdpFrame | CdpWebWorker {
@@ -263,4 +269,36 @@ export class IsolatedWorld extends Realm {
263
269
  super[disposeSymbol]();
264
270
  this.#emitter.removeAllListeners();
265
271
  }
272
+
273
+ override get origin(): string | undefined {
274
+ return this.#origin;
275
+ }
276
+
277
+ set origin(origin: string) {
278
+ this.#origin = origin;
279
+ }
280
+
281
+ setWorldId(worldId: string | symbol): void {
282
+ this.#worldId = worldId;
283
+ }
284
+
285
+ async extension(): Promise<Extension | null> {
286
+ if (this.#frameOrWorker instanceof CdpWebWorker) {
287
+ throw new Error('Unable to get extension from Realm');
288
+ }
289
+
290
+ if (this.#worldId === MAIN_WORLD) {
291
+ return null;
292
+ }
293
+
294
+ if (typeof this.#worldId === 'string') {
295
+ const extensions = await this.#frameOrWorker._frameManager
296
+ .page()
297
+ .browser()
298
+ .extensions();
299
+ return extensions.get(this.#worldId) ?? null;
300
+ }
301
+
302
+ return null;
303
+ }
266
304
  }
@@ -13,6 +13,7 @@ import type {BrowserContext} from '../api/BrowserContext.js';
13
13
  import {CDPSessionEvent, type CDPSession} from '../api/CDPSession.js';
14
14
  import type {DeviceRequestPrompt} from '../api/DeviceRequestPrompt.js';
15
15
  import type {ElementHandle} from '../api/ElementHandle.js';
16
+ import type {Extension} from '../api/Extension.js';
16
17
  import type {Frame, WaitForOptions} from '../api/Frame.js';
17
18
  import type {HTTPResponse} from '../api/HTTPResponse.js';
18
19
  import type {JSHandle} from '../api/JSHandle.js';
@@ -32,10 +33,8 @@ import {
32
33
  type ScreenshotOptions,
33
34
  type WaitTimeoutOptions,
34
35
  } from '../api/Page.js';
35
- import {
36
- ConsoleMessage,
37
- type ConsoleMessageType,
38
- } from '../common/ConsoleMessage.js';
36
+ import {WebWorker, WebWorkerEvent} from '../api/WebWorker.js';
37
+ import {ConsoleMessage} from '../common/ConsoleMessage.js';
39
38
  import type {
40
39
  Cookie,
41
40
  DeleteCookiesRequest,
@@ -60,6 +59,7 @@ import {
60
59
  } from '../common/util.js';
61
60
  import type {Viewport} from '../common/Viewport.js';
62
61
  import {environment} from '../environment.js';
62
+ import type {Realm} from '../index-browser.js';
63
63
  import {assert} from '../util/assert.js';
64
64
  import {Deferred} from '../util/Deferred.js';
65
65
  import {AsyncDisposableStack} from '../util/disposable.js';
@@ -86,21 +86,14 @@ import {TargetManagerEvent} from './TargetManageEvents.js';
86
86
  import type {TargetManager} from './TargetManager.js';
87
87
  import {Tracing} from './Tracing.js';
88
88
  import {
89
+ convertConsoleMessageLevel,
89
90
  createClientError,
91
+ createConsoleMessage,
90
92
  pageBindingInitString,
91
- valueFromJSHandle,
92
93
  } from './utils.js';
94
+ import {WebMCP} from './WebMCP.js';
93
95
  import {CdpWebWorker} from './WebWorker.js';
94
96
 
95
- function convertConsoleMessageLevel(method: string): ConsoleMessageType {
96
- switch (method) {
97
- case 'warning':
98
- return 'warn';
99
- default:
100
- return method as ConsoleMessageType;
101
- }
102
- }
103
-
104
97
  /**
105
98
  * @internal
106
99
  */
@@ -156,6 +149,7 @@ export class CdpPage extends Page {
156
149
  #frameManager: FrameManager;
157
150
  #emulationManager: EmulationManager;
158
151
  #tracing: Tracing;
152
+ #webmcp: WebMCP;
159
153
  #bindings = new Map<string, Binding>();
160
154
  #exposedFunctions = new Map<string, string>();
161
155
  #coverage: Coverage;
@@ -182,6 +176,7 @@ export class CdpPage extends Page {
182
176
  this.#frameManager = new FrameManager(client, this, this._timeoutSettings);
183
177
  this.#emulationManager = new EmulationManager(client);
184
178
  this.#tracing = new Tracing(client);
179
+ this.#webmcp = new WebMCP(client, this.#frameManager);
185
180
  this.#coverage = new Coverage(client);
186
181
  this.#viewport = null;
187
182
 
@@ -303,6 +298,7 @@ export class CdpPage extends Page {
303
298
  this.#touchscreen.updateClient(newSession);
304
299
  this.#emulationManager.updateClient(newSession);
305
300
  this.#tracing.updateClient(newSession);
301
+ this.#webmcp.updateClient(newSession);
306
302
  this.#coverage.updateClient(newSession);
307
303
  await this.#frameManager.swapFrameTree(newSession);
308
304
  this.#setupPrimaryTargetListeners();
@@ -368,11 +364,29 @@ export class CdpPage extends Page {
368
364
  session.target().url(),
369
365
  session.target()._targetId,
370
366
  session.target().type(),
371
- this.#onConsoleAPI.bind(this),
372
367
  this.#handleException.bind(this),
373
368
  this.#frameManager.networkManager,
374
369
  );
375
370
  this.#workers.set(session.id(), worker);
371
+ worker.internalEmitter.on(WebWorkerEvent.Console, message => {
372
+ const noListenersForConsoleOnPage =
373
+ this.listenerCount(PageEvent.Console) === 0;
374
+ const noListenersForConsoleOnWorker =
375
+ worker.listenerCount(WebWorkerEvent.Console) === 0;
376
+
377
+ if (noListenersForConsoleOnPage && noListenersForConsoleOnWorker) {
378
+ // eslint-disable-next-line max-len -- The comment is long.
379
+ // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.
380
+ for (const arg of message.args()) {
381
+ void arg.dispose().catch(debugError);
382
+ }
383
+ return;
384
+ }
385
+
386
+ if (!noListenersForConsoleOnPage) {
387
+ this.emit(PageEvent.Console, message);
388
+ }
389
+ });
376
390
  this.emit(PageEvent.WorkerCreated, worker);
377
391
  }
378
392
  session.on(CDPSessionEvent.Ready, this.#onAttachedToTarget);
@@ -384,6 +398,7 @@ export class CdpPage extends Page {
384
398
  this.#frameManager.initialize(this.#primaryTargetClient),
385
399
  this.#primaryTargetClient.send('Performance.enable'),
386
400
  this.#primaryTargetClient.send('Log.enable'),
401
+ this.#webmcp.initialize(),
387
402
  ]);
388
403
  } catch (err) {
389
404
  if (isErrorLike(err) && isTargetClosedError(err)) {
@@ -574,6 +589,10 @@ export class CdpPage extends Page {
574
589
  return this.#tracing;
575
590
  }
576
591
 
592
+ override get webmcp(): WebMCP {
593
+ return this.#webmcp;
594
+ }
595
+
577
596
  override frames(): Frame[] {
578
597
  return this.#frameManager.frames();
579
598
  }
@@ -905,32 +924,28 @@ export class CdpPage extends Page {
905
924
  #onConsoleAPI(
906
925
  world: IsolatedWorld,
907
926
  event: Protocol.Runtime.ConsoleAPICalledEvent,
927
+ values?: JSHandle[],
908
928
  ): void {
909
- const values = event.args.map(arg => {
910
- return world.createCdpHandle(arg);
911
- });
912
-
913
- if (!this.listenerCount(PageEvent.Console)) {
914
- values.forEach(arg => {
915
- return arg.dispose();
929
+ if (!values) {
930
+ values = event.args.map(arg => {
931
+ return world.createCdpHandle(arg);
916
932
  });
917
- return;
918
- }
919
- const textTokens = [];
920
- // eslint-disable-next-line max-len -- The comment is long.
921
- // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.
922
- for (const arg of values) {
923
- textTokens.push(valueFromJSHandle(arg));
924
933
  }
925
- const stackTraceLocations = [];
926
- if (event.stackTrace) {
927
- for (const callFrame of event.stackTrace.callFrames) {
928
- stackTraceLocations.push({
929
- url: callFrame.url,
930
- lineNumber: callFrame.lineNumber,
931
- columnNumber: callFrame.columnNumber,
932
- });
934
+
935
+ const hasPageConsoleListeners = this.listenerCount(PageEvent.Console) > 0;
936
+ const hasWorkerConsoleListeners =
937
+ world.environment instanceof WebWorker &&
938
+ world.environment.listenerCount(WebWorkerEvent.Console) > 0;
939
+
940
+ if (!hasPageConsoleListeners) {
941
+ if (!hasWorkerConsoleListeners) {
942
+ // eslint-disable-next-line max-len -- The comment is long.
943
+ // eslint-disable-next-line @puppeteer/use-using -- These are not owned by this function.
944
+ for (const value of values) {
945
+ void value.dispose().catch(debugError);
946
+ }
933
947
  }
948
+ return;
934
949
  }
935
950
 
936
951
  let targetId;
@@ -938,16 +953,7 @@ export class CdpPage extends Page {
938
953
  targetId = world.environment.client.target()._targetId;
939
954
  }
940
955
 
941
- const message = new ConsoleMessage(
942
- convertConsoleMessageLevel(event.type),
943
- textTokens.join(' '),
944
- values,
945
- stackTraceLocations,
946
- undefined,
947
- event.stackTrace,
948
- targetId,
949
- );
950
- this.emit(PageEvent.Console, message);
956
+ this.emit(PageEvent.Console, createConsoleMessage(event, values, targetId));
951
957
  }
952
958
 
953
959
  async #onBindingCalled(
@@ -1049,6 +1055,10 @@ export class CdpPage extends Page {
1049
1055
  await this.#primaryTargetClient.send('Page.setBypassCSP', {enabled});
1050
1056
  }
1051
1057
 
1058
+ override async triggerExtensionAction(extension: Extension): Promise<void> {
1059
+ return await extension.triggerAction(this);
1060
+ }
1061
+
1052
1062
  override async emulateMediaType(type?: string): Promise<void> {
1053
1063
  return await this.#emulationManager.emulateMediaType(type);
1054
1064
  }
@@ -1312,6 +1322,10 @@ export class CdpPage extends Page {
1312
1322
  override get bluetooth(): BluetoothEmulation {
1313
1323
  return this.#cdpBluetoothEmulation;
1314
1324
  }
1325
+
1326
+ override extensionRealms(): Realm[] {
1327
+ return this.mainFrame().extensionRealms();
1328
+ }
1315
1329
  }
1316
1330
 
1317
1331
  const supportedMetrics = new Set<string>([
@@ -42,6 +42,9 @@ export class CdpTarget extends Target {
42
42
  _initializedDeferred = Deferred.create<InitializationStatus>();
43
43
  _isClosedDeferred = Deferred.create<void>();
44
44
  _targetId: string;
45
+ _asPagePromise?: Promise<Page>;
46
+ /** @internal */
47
+ pagePromise?: Promise<Page>;
45
48
 
46
49
  /**
47
50
  * To initialize the target for use, call initialize.
@@ -70,13 +73,23 @@ export class CdpTarget extends Target {
70
73
  }
71
74
 
72
75
  override async asPage(): Promise<Page> {
73
- const session = this._session();
74
- if (!session) {
75
- return await this.createCDPSession().then(client => {
76
+ if (this.pagePromise) {
77
+ const page = await this.pagePromise;
78
+ if (page) {
79
+ return page;
80
+ }
81
+ }
82
+ if (!this._asPagePromise) {
83
+ const session = this._session();
84
+ this._asPagePromise = (
85
+ session
86
+ ? Promise.resolve(session)
87
+ : this._sessionFactory()(/* isAutoAttachEmulated=*/ false)
88
+ ).then(client => {
76
89
  return CdpPage._create(client, this, null);
77
90
  });
78
91
  }
79
- return await CdpPage._create(session, this, null);
92
+ return (await this._asPagePromise) ?? null;
80
93
  }
81
94
 
82
95
  _subtype(): string | undefined {
@@ -206,7 +219,6 @@ export class CdpTarget extends Target {
206
219
  */
207
220
  export class PageTarget extends CdpTarget {
208
221
  #defaultViewport?: Viewport;
209
- protected pagePromise?: Promise<Page>;
210
222
 
211
223
  constructor(
212
224
  targetInfo: Protocol.Target.TargetInfo,
@@ -284,7 +296,6 @@ export class WorkerTarget extends CdpTarget {
284
296
  override async worker(): Promise<CdpWebWorker | null> {
285
297
  if (!this.#workerPromise) {
286
298
  const session = this._session();
287
- // TODO(einbinder): Make workers send their console logs.
288
299
  this.#workerPromise = (
289
300
  session
290
301
  ? Promise.resolve(session)
@@ -295,7 +306,6 @@ export class WorkerTarget extends CdpTarget {
295
306
  this._getTargetInfo().url,
296
307
  this._targetId,
297
308
  this.type(),
298
- () => {} /* consoleAPICalled */,
299
309
  () => {} /* exceptionThrown */,
300
310
  undefined /* networkManager */,
301
311
  );