patchright-core 1.58.2 → 1.59.0

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 (285) hide show
  1. package/ThirdPartyNotices.txt +126 -650
  2. package/browsers.json +16 -14
  3. package/lib/bootstrap.js +77 -0
  4. package/lib/cli/browserActions.js +308 -0
  5. package/lib/cli/driver.js +3 -2
  6. package/lib/cli/installActions.js +171 -0
  7. package/lib/cli/program.js +47 -411
  8. package/lib/client/android.js +4 -4
  9. package/lib/client/api.js +3 -3
  10. package/lib/client/browser.js +8 -0
  11. package/lib/client/browserContext.js +22 -61
  12. package/lib/client/browserType.js +19 -51
  13. package/lib/client/cdpSession.js +6 -2
  14. package/lib/client/channelOwner.js +1 -1
  15. package/lib/client/clientHelper.js +2 -1
  16. package/lib/client/clock.js +0 -1
  17. package/lib/client/{webSocket.js → connect.js} +57 -7
  18. package/lib/client/connection.js +8 -4
  19. package/lib/client/consoleMessage.js +3 -0
  20. package/lib/client/debugger.js +57 -0
  21. package/lib/client/dialog.js +8 -1
  22. package/lib/client/disposable.js +76 -0
  23. package/lib/client/electron.js +1 -0
  24. package/lib/client/elementHandle.js +1 -4
  25. package/lib/client/events.js +3 -3
  26. package/lib/client/fetch.js +0 -1
  27. package/lib/client/frame.js +10 -23
  28. package/lib/client/harRouter.js +13 -1
  29. package/lib/client/jsHandle.js +4 -8
  30. package/lib/client/locator.js +13 -44
  31. package/lib/client/network.js +15 -16
  32. package/lib/client/page.js +41 -75
  33. package/lib/client/platform.js +0 -3
  34. package/lib/client/screencast.js +88 -0
  35. package/lib/client/selectors.js +3 -1
  36. package/lib/client/tracing.js +11 -5
  37. package/lib/client/video.js +13 -20
  38. package/lib/client/worker.js +6 -6
  39. package/lib/generated/bindingsControllerSource.js +1 -1
  40. package/lib/generated/clockSource.js +1 -1
  41. package/lib/generated/injectedScriptSource.js +1 -1
  42. package/lib/generated/pollingRecorderSource.js +1 -1
  43. package/lib/generated/storageScriptSource.js +1 -1
  44. package/lib/generated/utilityScriptSource.js +1 -1
  45. package/lib/mcpBundle.js +0 -6
  46. package/lib/mcpBundleImpl.js +91 -0
  47. package/lib/protocol/validator.js +224 -138
  48. package/lib/protocol/validatorPrimitives.js +1 -1
  49. package/lib/remote/playwrightConnection.js +10 -8
  50. package/lib/remote/playwrightPipeServer.js +100 -0
  51. package/lib/remote/playwrightServer.js +13 -8
  52. package/lib/remote/playwrightWebSocketServer.js +73 -0
  53. package/lib/remote/serverTransport.js +96 -0
  54. package/lib/server/android/android.js +2 -2
  55. package/lib/server/bidi/bidiBrowser.js +30 -8
  56. package/lib/server/bidi/bidiChromium.js +18 -5
  57. package/lib/server/bidi/bidiNetworkManager.js +39 -11
  58. package/lib/server/bidi/bidiPage.js +31 -15
  59. package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
  60. package/lib/server/browser.js +84 -21
  61. package/lib/server/browserContext.js +110 -58
  62. package/lib/server/browserType.js +14 -12
  63. package/lib/server/chromium/chromium.js +15 -12
  64. package/lib/server/chromium/chromiumSwitches.js +14 -2
  65. package/lib/server/chromium/crBrowser.js +20 -17
  66. package/lib/server/chromium/crCoverage.js +1 -13
  67. package/lib/server/chromium/crDevTools.js +1 -0
  68. package/lib/server/chromium/crNetworkManager.js +12 -267
  69. package/lib/server/chromium/crPage.js +67 -199
  70. package/lib/server/chromium/crServiceWorker.js +7 -14
  71. package/lib/server/clock.js +33 -41
  72. package/lib/server/console.js +5 -1
  73. package/lib/server/debugController.js +12 -6
  74. package/lib/server/debugger.js +40 -47
  75. package/lib/server/deviceDescriptorsSource.json +137 -137
  76. package/lib/server/dispatchers/browserContextDispatcher.js +29 -30
  77. package/lib/server/dispatchers/browserDispatcher.js +11 -5
  78. package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
  79. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
  80. package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
  81. package/lib/server/dispatchers/dispatcher.js +1 -1
  82. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  83. package/lib/server/dispatchers/electronDispatcher.js +2 -1
  84. package/lib/server/dispatchers/frameDispatcher.js +6 -6
  85. package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
  86. package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
  87. package/lib/server/dispatchers/networkDispatchers.js +6 -5
  88. package/lib/server/dispatchers/pageDispatcher.js +101 -38
  89. package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
  90. package/lib/server/disposable.js +41 -0
  91. package/lib/server/dom.js +44 -26
  92. package/lib/server/download.js +3 -2
  93. package/lib/server/electron/electron.js +12 -7
  94. package/lib/server/firefox/ffBrowser.js +9 -19
  95. package/lib/server/firefox/ffInput.js +21 -5
  96. package/lib/server/firefox/ffNetworkManager.js +2 -2
  97. package/lib/server/firefox/ffPage.js +24 -27
  98. package/lib/server/frameSelectors.js +5 -172
  99. package/lib/server/frames.js +234 -687
  100. package/lib/server/har/harRecorder.js +2 -2
  101. package/lib/server/har/harTracer.js +5 -4
  102. package/lib/server/input.js +49 -4
  103. package/lib/server/instrumentation.js +5 -0
  104. package/lib/server/javascript.js +6 -26
  105. package/lib/server/launchApp.js +1 -3
  106. package/lib/server/localUtils.js +6 -6
  107. package/lib/server/network.js +9 -8
  108. package/lib/server/overlay.js +138 -0
  109. package/lib/server/page.js +157 -105
  110. package/lib/server/progress.js +6 -0
  111. package/lib/server/recorder/recorderApp.js +9 -8
  112. package/lib/server/recorder.js +76 -40
  113. package/lib/server/registry/index.js +55 -82
  114. package/lib/server/registry/nativeDeps.js +1 -0
  115. package/lib/server/screencast.js +90 -143
  116. package/lib/server/screenshotter.js +0 -6
  117. package/lib/server/trace/recorder/snapshotter.js +8 -17
  118. package/lib/server/trace/recorder/snapshotterInjected.js +82 -20
  119. package/lib/server/trace/recorder/tracing.js +87 -44
  120. package/lib/server/trace/viewer/traceViewer.js +3 -4
  121. package/lib/server/usKeyboardLayout.js +7 -0
  122. package/lib/server/utils/comparators.js +1 -1
  123. package/lib/server/utils/disposable.js +32 -0
  124. package/lib/server/utils/eventsHelper.js +3 -1
  125. package/lib/server/utils/fileUtils.js +16 -2
  126. package/lib/server/utils/happyEyeballs.js +15 -12
  127. package/lib/server/utils/hostPlatform.js +0 -15
  128. package/lib/server/utils/httpServer.js +5 -3
  129. package/lib/server/utils/network.js +2 -1
  130. package/lib/server/utils/nodePlatform.js +0 -6
  131. package/lib/server/utils/processLauncher.js +8 -6
  132. package/lib/server/utils/zipFile.js +2 -2
  133. package/lib/server/videoRecorder.js +82 -12
  134. package/lib/server/webkit/wkBrowser.js +1 -6
  135. package/lib/server/webkit/wkPage.js +27 -25
  136. package/lib/server/webkit/wkWorkers.js +2 -1
  137. package/lib/serverRegistry.js +156 -0
  138. package/lib/tools/backend/browserBackend.js +79 -0
  139. package/lib/tools/backend/common.js +63 -0
  140. package/lib/tools/backend/config.js +41 -0
  141. package/lib/tools/backend/console.js +66 -0
  142. package/lib/tools/backend/context.js +296 -0
  143. package/lib/tools/backend/cookies.js +152 -0
  144. package/lib/tools/backend/devtools.js +69 -0
  145. package/lib/tools/backend/dialogs.js +59 -0
  146. package/lib/tools/backend/evaluate.js +64 -0
  147. package/lib/tools/backend/files.js +60 -0
  148. package/lib/tools/backend/form.js +64 -0
  149. package/lib/tools/backend/keyboard.js +155 -0
  150. package/lib/tools/backend/logFile.js +95 -0
  151. package/lib/tools/backend/mouse.js +168 -0
  152. package/lib/tools/backend/navigate.js +106 -0
  153. package/lib/tools/backend/network.js +135 -0
  154. package/lib/tools/backend/pdf.js +48 -0
  155. package/lib/tools/backend/response.js +305 -0
  156. package/lib/tools/backend/route.js +140 -0
  157. package/lib/tools/backend/runCode.js +77 -0
  158. package/lib/tools/backend/screenshot.js +88 -0
  159. package/lib/tools/backend/sessionLog.js +74 -0
  160. package/lib/tools/backend/snapshot.js +208 -0
  161. package/lib/tools/backend/storage.js +68 -0
  162. package/lib/tools/backend/tab.js +445 -0
  163. package/lib/tools/backend/tabs.js +67 -0
  164. package/lib/tools/backend/tool.js +47 -0
  165. package/lib/tools/backend/tools.js +102 -0
  166. package/lib/tools/backend/tracing.js +78 -0
  167. package/lib/tools/backend/utils.js +83 -0
  168. package/lib/tools/backend/verify.js +151 -0
  169. package/lib/tools/backend/video.js +98 -0
  170. package/lib/tools/backend/wait.js +63 -0
  171. package/lib/tools/backend/webstorage.js +223 -0
  172. package/lib/tools/cli-client/cli.js +6 -0
  173. package/lib/tools/cli-client/help.json +399 -0
  174. package/lib/tools/cli-client/minimist.js +128 -0
  175. package/lib/tools/cli-client/program.js +350 -0
  176. package/lib/tools/cli-client/registry.js +176 -0
  177. package/lib/tools/cli-client/session.js +289 -0
  178. package/lib/tools/cli-client/skill/SKILL.md +328 -0
  179. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  180. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  181. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  182. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  183. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  184. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  185. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  186. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  187. package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
  188. package/lib/tools/cli-daemon/command.js +73 -0
  189. package/lib/tools/cli-daemon/commands.js +956 -0
  190. package/lib/tools/cli-daemon/daemon.js +157 -0
  191. package/lib/tools/cli-daemon/helpGenerator.js +177 -0
  192. package/lib/tools/cli-daemon/program.js +129 -0
  193. package/lib/tools/dashboard/appIcon.png +0 -0
  194. package/lib/tools/dashboard/dashboardApp.js +284 -0
  195. package/lib/tools/dashboard/dashboardController.js +296 -0
  196. package/lib/tools/exports.js +60 -0
  197. package/lib/tools/mcp/browserFactory.js +233 -0
  198. package/lib/tools/mcp/cdpRelay.js +352 -0
  199. package/lib/tools/mcp/cli-stub.js +7 -0
  200. package/lib/tools/mcp/config.d.js +16 -0
  201. package/lib/tools/mcp/config.js +446 -0
  202. package/lib/tools/mcp/configIni.js +189 -0
  203. package/lib/tools/mcp/extensionContextFactory.js +55 -0
  204. package/lib/tools/mcp/index.js +62 -0
  205. package/lib/tools/mcp/log.js +35 -0
  206. package/lib/tools/mcp/program.js +107 -0
  207. package/lib/tools/mcp/protocol.js +28 -0
  208. package/lib/tools/mcp/watchdog.js +44 -0
  209. package/lib/tools/trace/SKILL.md +171 -0
  210. package/lib/{server/trace/viewer/traceParser.js → tools/trace/installSkill.js} +15 -39
  211. package/lib/tools/trace/traceActions.js +142 -0
  212. package/lib/tools/trace/traceAttachments.js +69 -0
  213. package/lib/tools/trace/traceCli.js +87 -0
  214. package/lib/tools/trace/traceConsole.js +97 -0
  215. package/lib/tools/trace/traceErrors.js +55 -0
  216. package/lib/tools/trace/traceOpen.js +69 -0
  217. package/lib/tools/trace/traceParser.js +96 -0
  218. package/lib/tools/trace/traceRequests.js +182 -0
  219. package/lib/tools/trace/traceScreenshot.js +68 -0
  220. package/lib/tools/trace/traceSnapshot.js +149 -0
  221. package/lib/tools/trace/traceUtils.js +153 -0
  222. package/lib/tools/utils/connect.js +32 -0
  223. package/lib/tools/utils/mcp/http.js +152 -0
  224. package/lib/tools/utils/mcp/server.js +230 -0
  225. package/lib/tools/utils/mcp/tool.js +47 -0
  226. package/lib/tools/utils/socketConnection.js +108 -0
  227. package/lib/utils/isomorphic/formatUtils.js +64 -0
  228. package/lib/utils/isomorphic/jsonSchema.js +89 -0
  229. package/lib/utils/isomorphic/mimeType.js +7 -2
  230. package/lib/utils/isomorphic/protocolFormatter.js +2 -2
  231. package/lib/utils/isomorphic/protocolMetainfo.js +127 -106
  232. package/lib/utils/isomorphic/stringUtils.js +3 -3
  233. package/lib/utils/isomorphic/timeoutRunner.js +3 -3
  234. package/lib/utils/isomorphic/trace/snapshotRenderer.js +35 -42
  235. package/lib/utils/isomorphic/trace/traceLoader.js +15 -14
  236. package/lib/utils/isomorphic/trace/traceModel.js +3 -2
  237. package/lib/utils/isomorphic/trace/traceModernizer.js +1 -0
  238. package/lib/utils/isomorphic/urlMatch.js +54 -1
  239. package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
  240. package/lib/utils.js +6 -2
  241. package/lib/utilsBundle.js +3 -21
  242. package/lib/utilsBundleImpl/index.js +132 -133
  243. package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
  244. package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
  245. package/lib/vite/dashboard/index.html +28 -0
  246. package/lib/vite/htmlReport/index.html +2 -70
  247. package/lib/vite/htmlReport/report.css +1 -0
  248. package/lib/vite/htmlReport/report.js +72 -0
  249. package/lib/vite/recorder/assets/{codeMirrorModule-CFUTFUO7.js → codeMirrorModule-C8KMvO9L.js} +20 -20
  250. package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
  251. package/lib/vite/recorder/index.html +1 -1
  252. package/lib/vite/traceViewer/assets/{codeMirrorModule-BVA4h_ZY.js → codeMirrorModule-DS0FLvoc.js} +20 -20
  253. package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
  254. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  255. package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
  256. package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.Dtstcb7U.js} +1 -1
  257. package/lib/vite/traceViewer/index.html +4 -4
  258. package/lib/vite/traceViewer/sw.bundle.js +4 -4
  259. package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
  260. package/lib/vite/traceViewer/uiMode.html +3 -3
  261. package/lib/zipBundleImpl.js +2 -2
  262. package/lib/zodBundle.js +39 -0
  263. package/lib/zodBundleImpl.js +40 -0
  264. package/package.json +6 -1
  265. package/types/protocol.d.ts +947 -51
  266. package/types/types.d.ts +854 -74
  267. package/lib/client/pageAgent.js +0 -64
  268. package/lib/mcpBundleImpl/index.js +0 -147
  269. package/lib/server/agent/actionRunner.js +0 -335
  270. package/lib/server/agent/actions.js +0 -128
  271. package/lib/server/agent/codegen.js +0 -111
  272. package/lib/server/agent/context.js +0 -150
  273. package/lib/server/agent/expectTools.js +0 -156
  274. package/lib/server/agent/pageAgent.js +0 -204
  275. package/lib/server/agent/performTools.js +0 -262
  276. package/lib/server/agent/tool.js +0 -109
  277. package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
  278. package/lib/server/pageBinding.js +0 -87
  279. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
  280. package/lib/vite/recorder/assets/index-CVkBxsGf.js +0 -193
  281. package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +0 -266
  282. package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
  283. package/lib/vite/traceViewer/uiMode.fyrXARf2.js +0 -5
  284. /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
  285. /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
@@ -38,82 +38,74 @@ class Clock {
38
38
  this._browserContext = browserContext;
39
39
  }
40
40
  async uninstall(progress) {
41
- await progress.race(this._browserContext.removeInitScripts(this._initScripts));
41
+ await progress.race(Promise.all(this._initScripts.map((script) => script.dispose())));
42
42
  this._initScripts = [];
43
43
  }
44
- async fastForward(progress, ticks) {
45
- await this._installIfNeeded(progress);
44
+ async fastForward(ticks) {
45
+ await this._installIfNeeded();
46
46
  const ticksMillis = parseTicks(ticks);
47
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('fastForward', ${Date.now()}, ${ticksMillis})`));
48
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.fastForward(${ticksMillis})`));
47
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('fastForward', ${Date.now()}, ${ticksMillis})`));
48
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.fastForward(${ticksMillis})`);
49
49
  }
50
- async install(progress, time) {
51
- await this._installIfNeeded(progress);
50
+ async install(time) {
51
+ await this._installIfNeeded();
52
52
  const timeMillis = time !== void 0 ? parseTime(time) : Date.now();
53
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('install', ${Date.now()}, ${timeMillis})`));
54
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.install(${timeMillis})`));
53
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('install', ${Date.now()}, ${timeMillis})`));
54
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.install(${timeMillis})`);
55
55
  }
56
- async pauseAt(progress, ticks) {
57
- await this._installIfNeeded(progress);
56
+ async pauseAt(ticks) {
57
+ await this._installIfNeeded();
58
58
  const timeMillis = parseTime(ticks);
59
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('pauseAt', ${Date.now()}, ${timeMillis})`));
60
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.pauseAt(${timeMillis})`));
59
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('pauseAt', ${Date.now()}, ${timeMillis})`));
60
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.pauseAt(${timeMillis})`);
61
61
  }
62
62
  resumeNoReply() {
63
63
  if (!this._initScripts.length)
64
64
  return;
65
65
  const doResume = async () => {
66
- this._initScripts.push(await this._browserContext.addInitScript(void 0, `globalThis.__pwClock.controller.log('resume', ${Date.now()})`));
66
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('resume', ${Date.now()})`));
67
67
  await this._evaluateInFrames(`globalThis.__pwClock.controller.resume()`);
68
68
  };
69
69
  doResume().catch(() => {
70
70
  });
71
71
  }
72
72
  async resume(progress) {
73
- await this._installIfNeeded(progress);
74
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('resume', ${Date.now()})`));
75
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.resume()`));
73
+ await this._installIfNeeded();
74
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('resume', ${Date.now()})`));
75
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.resume()`);
76
76
  }
77
- async setFixedTime(progress, time) {
78
- await this._installIfNeeded(progress);
77
+ async setFixedTime(time) {
78
+ await this._installIfNeeded();
79
79
  const timeMillis = parseTime(time);
80
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('setFixedTime', ${Date.now()}, ${timeMillis})`));
81
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.setFixedTime(${timeMillis})`));
80
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('setFixedTime', ${Date.now()}, ${timeMillis})`));
81
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.setFixedTime(${timeMillis})`);
82
82
  }
83
- async setSystemTime(progress, time) {
84
- await this._installIfNeeded(progress);
83
+ async setSystemTime(time) {
84
+ await this._installIfNeeded();
85
85
  const timeMillis = parseTime(time);
86
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('setSystemTime', ${Date.now()}, ${timeMillis})`));
87
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.setSystemTime(${timeMillis})`));
86
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('setSystemTime', ${Date.now()}, ${timeMillis})`));
87
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.setSystemTime(${timeMillis})`);
88
88
  }
89
- async runFor(progress, ticks) {
90
- await this._installIfNeeded(progress);
89
+ async runFor(ticks) {
90
+ await this._installIfNeeded();
91
91
  const ticksMillis = parseTicks(ticks);
92
- this._initScripts.push(await this._browserContext.addInitScript(progress, `globalThis.__pwClock.controller.log('runFor', ${Date.now()}, ${ticksMillis})`));
93
- await progress.race(this._evaluateInFrames(`globalThis.__pwClock.controller.runFor(${ticksMillis})`));
92
+ this._initScripts.push(await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('runFor', ${Date.now()}, ${ticksMillis})`));
93
+ await this._evaluateInFrames(`globalThis.__pwClock.controller.runFor(${ticksMillis})`);
94
94
  }
95
- async _installIfNeeded(progress) {
95
+ async _installIfNeeded() {
96
96
  if (this._initScripts.length)
97
97
  return;
98
98
  const script = `(() => {
99
99
  const module = {};
100
100
  ${rawClockSource.source}
101
101
  if (!globalThis.__pwClock)
102
- globalThis.__pwClock = (module.exports.inject())(globalThis);
102
+ globalThis.__pwClock = (module.exports.inject())(globalThis, ${JSON.stringify(this._browserContext._browser.options.name)});
103
103
  })();`;
104
- const initScript = await this._browserContext.addInitScript(progress, script);
105
- await progress.race(this._evaluateInFrames(script));
104
+ const initScript = await this._browserContext.addInitScript(script);
105
+ await this._evaluateInFrames(script);
106
106
  this._initScripts.push(initScript);
107
107
  }
108
108
  async _evaluateInFrames(script) {
109
- await Promise.all(this._browserContext.pages().map(async (page) => {
110
- await Promise.all(page.frames().map(async (frame) => {
111
- try {
112
- await frame.evaluateExpression("");
113
- } catch (e) {
114
- }
115
- }));
116
- }));
117
109
  await this._browserContext.safeNonStallingEvaluateInAllFrames(script, "main", { throwOnJSErrors: true });
118
110
  }
119
111
  }
@@ -22,13 +22,14 @@ __export(console_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(console_exports);
24
24
  class ConsoleMessage {
25
- constructor(page, worker, type, text, args, location) {
25
+ constructor(page, worker, type, text, args, location, timestamp) {
26
26
  this._page = page;
27
27
  this._worker = worker;
28
28
  this._type = type;
29
29
  this._text = text;
30
30
  this._args = args;
31
31
  this._location = location || { url: "", lineNumber: 0, columnNumber: 0 };
32
+ this._timestamp = timestamp;
32
33
  }
33
34
  page() {
34
35
  return this._page;
@@ -50,6 +51,9 @@ class ConsoleMessage {
50
51
  location() {
51
52
  return this._location;
52
53
  }
54
+ timestamp() {
55
+ return this._timestamp;
56
+ }
53
57
  }
54
58
  // Annotate the CommonJS export names for ESM import in node:
55
59
  0 && (module.exports = {
@@ -70,10 +70,12 @@ class DebugController extends import_instrumentation.SdkObject {
70
70
  await progress.race(this._closeBrowsersWithoutPages());
71
71
  this._generateAutoExpect = !!params.generateAutoExpect;
72
72
  if (params.mode === "none") {
73
+ const promises = [];
73
74
  for (const recorder of await progress.race(this._allRecorders())) {
74
- recorder.hideHighlightedSelector();
75
- recorder.setMode("none");
75
+ promises.push(recorder.hideHighlightedSelector());
76
+ promises.push(recorder.setMode("none"));
76
77
  }
78
+ await Promise.all(promises);
77
79
  return;
78
80
  }
79
81
  if (!this._playwright.allBrowsers().length)
@@ -97,18 +99,22 @@ class DebugController extends import_instrumentation.SdkObject {
97
99
  if (params.selector)
98
100
  (0, import_locatorParser.unsafeLocatorOrSelectorAsSelector)(this._sdkLanguage, params.selector, "data-testid");
99
101
  const ariaTemplate = params.ariaTemplate ? (0, import_ariaSnapshot.parseAriaSnapshotUnsafe)(import_utilsBundle.yaml, params.ariaTemplate) : void 0;
102
+ const promises = [];
100
103
  for (const recorder of await progress.race(this._allRecorders())) {
101
104
  if (ariaTemplate)
102
- recorder.setHighlightedAriaTemplate(ariaTemplate);
105
+ promises.push(recorder.setHighlightedAriaTemplate(ariaTemplate));
103
106
  else if (params.selector)
104
- recorder.setHighlightedSelector(params.selector);
107
+ promises.push(recorder.setHighlightedSelector(params.selector));
105
108
  }
109
+ await Promise.all(promises);
106
110
  }
107
111
  async hideHighlight(progress) {
112
+ const promises = [];
108
113
  for (const recorder of await progress.race(this._allRecorders()))
109
- recorder.hideHighlightedSelector();
110
- await Promise.all(this._playwright.allPages().map((p) => p.hideHighlight().catch(() => {
114
+ promises.push(recorder.hideHighlightedSelector());
115
+ promises.push(...this._playwright.allPages().map((p) => p.hideHighlight().catch(() => {
111
116
  })));
117
+ await Promise.all(promises);
112
118
  }
113
119
  async resume(progress) {
114
120
  for (const recorder of await progress.race(this._allRecorders()))
@@ -21,22 +21,20 @@ __export(debugger_exports, {
21
21
  Debugger: () => Debugger
22
22
  });
23
23
  module.exports = __toCommonJS(debugger_exports);
24
- var import_events = require("events");
24
+ var import_instrumentation = require("./instrumentation");
25
25
  var import_utils = require("../utils");
26
26
  var import_browserContext = require("./browserContext");
27
27
  var import_protocolMetainfo = require("../utils/isomorphic/protocolMetainfo");
28
28
  const symbol = Symbol("Debugger");
29
- class Debugger extends import_events.EventEmitter {
29
+ class Debugger extends import_instrumentation.SdkObject {
30
30
  constructor(context) {
31
- super();
32
- this._pauseOnNextStatement = false;
33
- this._pausedCallsMetadata = /* @__PURE__ */ new Map();
31
+ super(context, "debugger");
32
+ this._pauseAt = {};
33
+ this._enabled = false;
34
+ this._pauseBeforeWaitingActions = false;
34
35
  this._muted = false;
35
36
  this._context = context;
36
37
  this._context[symbol] = this;
37
- this._enabled = (0, import_utils.debugMode)() === "inspector";
38
- if (this._enabled)
39
- this.pauseOnNextStatement();
40
38
  context.instrumentation.addListener(this, context);
41
39
  this._context.once(import_browserContext.BrowserContext.Events.Close, () => {
42
40
  this._context.instrumentation.removeListener(this);
@@ -51,67 +49,62 @@ class Debugger extends import_events.EventEmitter {
51
49
  this._muted = muted;
52
50
  }
53
51
  async onBeforeCall(sdkObject, metadata) {
54
- if (this._muted)
52
+ if (this._muted || metadata.internal)
55
53
  return;
56
- if (shouldPauseOnCall(sdkObject, metadata) || this._pauseOnNextStatement && shouldPauseBeforeStep(metadata))
57
- await this.pause(sdkObject, metadata);
54
+ const metainfo = (0, import_protocolMetainfo.getMetainfo)(metadata);
55
+ const pauseOnPauseCall = this._enabled && metadata.type === "BrowserContext" && metadata.method === "pause";
56
+ const pauseBeforeAction = !!this._pauseAt.next && !!metainfo?.pause && (this._pauseBeforeWaitingActions || !metainfo?.isAutoWaiting);
57
+ const pauseOnLocation = !!this._pauseAt.location && matchesLocation(metadata, this._pauseAt.location);
58
+ if (pauseOnPauseCall || pauseBeforeAction || pauseOnLocation)
59
+ await this._pause(sdkObject, metadata);
58
60
  }
59
61
  async onBeforeInputAction(sdkObject, metadata) {
60
- if (this._muted)
62
+ if (this._muted || metadata.internal)
61
63
  return;
62
- if (this._enabled && this._pauseOnNextStatement)
63
- await this.pause(sdkObject, metadata);
64
+ const metainfo = (0, import_protocolMetainfo.getMetainfo)(metadata);
65
+ const pauseBeforeInput = !!this._pauseAt.next && !!metainfo?.pause && !!metainfo?.isAutoWaiting && !this._pauseBeforeWaitingActions;
66
+ if (pauseBeforeInput)
67
+ await this._pause(sdkObject, metadata);
64
68
  }
65
- async pause(sdkObject, metadata) {
66
- if (this._muted)
69
+ async _pause(sdkObject, metadata) {
70
+ if (this._muted || metadata.internal)
67
71
  return;
68
- this._enabled = true;
72
+ if (this._pausedCall)
73
+ return;
74
+ this._pauseAt = {};
69
75
  metadata.pauseStartTime = (0, import_utils.monotonicTime)();
70
76
  const result = new Promise((resolve) => {
71
- this._pausedCallsMetadata.set(metadata, { resolve, sdkObject });
77
+ this._pausedCall = { metadata, sdkObject, resolve };
72
78
  });
73
79
  this.emit(Debugger.Events.PausedStateChanged);
74
80
  return result;
75
81
  }
76
- resume(step) {
77
- if (!this.isPaused())
82
+ resume() {
83
+ if (!this._pausedCall)
78
84
  return;
79
- this._pauseOnNextStatement = step;
80
- const endTime = (0, import_utils.monotonicTime)();
81
- for (const [metadata, { resolve }] of this._pausedCallsMetadata) {
82
- metadata.pauseEndTime = endTime;
83
- resolve();
84
- }
85
- this._pausedCallsMetadata.clear();
85
+ this._pausedCall.metadata.pauseEndTime = (0, import_utils.monotonicTime)();
86
+ this._pausedCall.resolve();
87
+ this._pausedCall = void 0;
86
88
  this.emit(Debugger.Events.PausedStateChanged);
87
89
  }
88
- pauseOnNextStatement() {
89
- this._pauseOnNextStatement = true;
90
+ setPauseBeforeWaitingActions() {
91
+ this._pauseBeforeWaitingActions = true;
92
+ }
93
+ setPauseAt(at = {}) {
94
+ this._enabled = true;
95
+ this._pauseAt = at;
90
96
  }
91
97
  isPaused(metadata) {
92
98
  if (metadata)
93
- return this._pausedCallsMetadata.has(metadata);
94
- return !!this._pausedCallsMetadata.size;
99
+ return this._pausedCall?.metadata === metadata;
100
+ return !!this._pausedCall;
95
101
  }
96
102
  pausedDetails() {
97
- const result = [];
98
- for (const [metadata, { sdkObject }] of this._pausedCallsMetadata)
99
- result.push({ metadata, sdkObject });
100
- return result;
103
+ return this._pausedCall;
101
104
  }
102
105
  }
103
- function shouldPauseOnCall(sdkObject, metadata) {
104
- if (sdkObject.attribution.playwright.options.isServer)
105
- return false;
106
- if (!sdkObject.attribution.browser?.options.headful && !(0, import_utils.isUnderTest)())
107
- return false;
108
- return metadata.method === "pause";
109
- }
110
- function shouldPauseBeforeStep(metadata) {
111
- if (metadata.internal)
112
- return false;
113
- const metainfo = import_protocolMetainfo.methodMetainfo.get(metadata.type + "." + metadata.method);
114
- return !!metainfo?.pausesBeforeAction;
106
+ function matchesLocation(metadata, location) {
107
+ return !!metadata.location?.file.includes(location.file) && (location.line === void 0 || metadata.location.line === location.line) && (location.column === void 0 || metadata.location.column === location.column);
115
108
  }
116
109
  // Annotate the CommonJS export names for ESM import in node:
117
110
  0 && (module.exports = {