@checkly/playwright-core 1.42.18 → 1.47.11

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 (250) hide show
  1. package/ThirdPartyNotices.txt +144 -109
  2. package/browsers.json +15 -25
  3. package/lib/androidServerImpl.js +1 -1
  4. package/lib/browserServerImpl.js +1 -1
  5. package/lib/cli/driver.js +1 -3
  6. package/lib/cli/program.js +5 -10
  7. package/lib/client/android.js +1 -1
  8. package/lib/client/api.js +7 -0
  9. package/lib/client/browserContext.js +37 -5
  10. package/lib/client/browserType.js +19 -11
  11. package/lib/client/channelOwner.js +19 -16
  12. package/lib/client/clientInstrumentation.js +17 -7
  13. package/lib/client/clock.js +68 -0
  14. package/lib/client/connection.js +9 -6
  15. package/lib/client/electron.js +7 -5
  16. package/lib/client/elementHandle.js +44 -14
  17. package/lib/client/eventEmitter.js +314 -0
  18. package/lib/client/fetch.js +81 -28
  19. package/lib/client/frame.js +2 -4
  20. package/lib/client/jsHandle.js +7 -1
  21. package/lib/client/locator.js +9 -0
  22. package/lib/client/network.js +12 -9
  23. package/lib/client/page.js +45 -23
  24. package/lib/client/playwright.js +3 -0
  25. package/lib/client/tracing.js +7 -4
  26. package/lib/common/socksProxy.js +2 -2
  27. package/lib/generated/clockSource.js +7 -0
  28. package/lib/generated/injectedScriptSource.js +1 -1
  29. package/lib/generated/recorderSource.js +1 -1
  30. package/lib/generated/utilityScriptSource.js +1 -1
  31. package/lib/protocol/serializers.js +12 -11
  32. package/lib/protocol/validator.js +137 -55
  33. package/lib/server/bidi/bidiBrowser.js +296 -0
  34. package/lib/server/bidi/bidiConnection.js +206 -0
  35. package/lib/server/bidi/bidiExecutionContext.js +162 -0
  36. package/lib/server/bidi/bidiFirefox.js +110 -0
  37. package/lib/server/bidi/bidiInput.js +174 -0
  38. package/lib/server/bidi/bidiNetworkManager.js +304 -0
  39. package/lib/server/bidi/bidiPage.js +456 -0
  40. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  41. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  42. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  43. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  44. package/lib/server/browser.js +9 -1
  45. package/lib/server/browserContext.js +97 -22
  46. package/lib/server/browserType.js +27 -20
  47. package/lib/server/chromium/chromium.js +30 -15
  48. package/lib/server/chromium/chromiumSwitches.js +6 -3
  49. package/lib/server/chromium/crBrowser.js +11 -17
  50. package/lib/server/chromium/crConnection.js +2 -2
  51. package/lib/server/chromium/crDragDrop.js +28 -29
  52. package/lib/server/chromium/crNetworkManager.js +130 -84
  53. package/lib/server/chromium/crPage.js +34 -79
  54. package/lib/server/chromium/crProtocolHelper.js +3 -1
  55. package/lib/server/chromium/crServiceWorker.js +20 -23
  56. package/lib/server/chromium/videoRecorder.js +1 -1
  57. package/lib/server/clock.js +125 -0
  58. package/lib/server/codegen/csharp.js +299 -0
  59. package/lib/server/codegen/java.js +235 -0
  60. package/lib/server/codegen/javascript.js +223 -0
  61. package/lib/server/codegen/jsonl.js +47 -0
  62. package/lib/server/codegen/language.js +76 -0
  63. package/lib/server/codegen/languages.js +30 -0
  64. package/lib/server/codegen/python.js +265 -0
  65. package/lib/server/codegen/types.js +5 -0
  66. package/lib/server/debugController.js +3 -5
  67. package/lib/server/deviceDescriptors.js +9 -4
  68. package/lib/server/deviceDescriptorsSource.json +239 -119
  69. package/lib/server/dispatchers/androidDispatcher.js +1 -1
  70. package/lib/server/dispatchers/browserContextDispatcher.js +51 -7
  71. package/lib/server/dispatchers/dispatcher.js +36 -40
  72. package/lib/server/dispatchers/frameDispatcher.js +1 -2
  73. package/lib/server/dispatchers/jsHandleDispatcher.js +1 -1
  74. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -6
  75. package/lib/server/dispatchers/localUtilsDispatcher.js +19 -5
  76. package/lib/server/dispatchers/networkDispatchers.js +2 -2
  77. package/lib/server/dispatchers/pageDispatcher.js +5 -2
  78. package/lib/server/dispatchers/playwrightDispatcher.js +1 -0
  79. package/lib/server/dispatchers/writableStreamDispatcher.js +8 -5
  80. package/lib/server/dom.js +90 -53
  81. package/lib/server/electron/electron.js +21 -4
  82. package/lib/server/fetch.js +74 -25
  83. package/lib/server/fileUploadUtils.js +7 -3
  84. package/lib/server/firefox/ffBrowser.js +36 -25
  85. package/lib/server/firefox/ffConnection.js +2 -2
  86. package/lib/server/firefox/ffNetworkManager.js +6 -4
  87. package/lib/server/firefox/ffPage.js +22 -24
  88. package/lib/server/firefox/firefox.js +25 -6
  89. package/lib/server/frameSelectors.js +2 -2
  90. package/lib/server/frames.js +205 -159
  91. package/lib/server/har/harTracer.js +4 -12
  92. package/lib/server/helper.js +3 -3
  93. package/lib/server/index.js +18 -0
  94. package/lib/server/input.js +18 -8
  95. package/lib/server/instrumentation.js +0 -4
  96. package/lib/server/isomorphic/utilityScriptSerializers.js +19 -5
  97. package/lib/server/javascript.js +3 -2
  98. package/lib/server/launchApp.js +3 -2
  99. package/lib/server/network.js +14 -4
  100. package/lib/server/page.js +75 -46
  101. package/lib/server/playwright.js +5 -2
  102. package/lib/server/recorder/codeGenerator.js +2 -1
  103. package/lib/server/recorder/contextRecorder.js +316 -0
  104. package/lib/server/recorder/csharp.js +2 -1
  105. package/lib/server/recorder/java.js +2 -1
  106. package/lib/server/recorder/javascript.js +2 -1
  107. package/lib/server/recorder/jsonl.js +2 -1
  108. package/lib/server/recorder/language.js +2 -1
  109. package/lib/server/recorder/python.js +2 -1
  110. package/lib/server/recorder/recorderApp.js +14 -5
  111. package/lib/server/recorder/recorderCollection.js +127 -0
  112. package/lib/server/recorder/recorderRunner.js +177 -0
  113. package/lib/server/recorder/recorderUtils.js +23 -0
  114. package/lib/server/recorder/throttledFile.js +46 -0
  115. package/lib/server/recorder/utils.js +2 -1
  116. package/lib/server/recorder.js +42 -418
  117. package/lib/server/registry/index.js +99 -100
  118. package/lib/server/registry/nativeDeps.js +107 -0
  119. package/lib/server/screenshotter.js +6 -12
  120. package/lib/server/socksClientCertificatesInterceptor.js +328 -0
  121. package/lib/server/trace/recorder/snapshotter.js +4 -1
  122. package/lib/server/trace/recorder/tracing.js +27 -96
  123. package/lib/server/trace/viewer/traceViewer.js +54 -67
  124. package/lib/server/transport.js +1 -1
  125. package/lib/server/webkit/webkit.js +5 -5
  126. package/lib/server/webkit/wkBrowser.js +14 -14
  127. package/lib/server/webkit/wkConnection.js +3 -3
  128. package/lib/server/webkit/wkInterceptableRequest.js +8 -4
  129. package/lib/server/webkit/wkPage.js +52 -34
  130. package/lib/server/webkit/wkProvisionalPage.js +36 -1
  131. package/lib/utils/crypto.js +141 -0
  132. package/lib/utils/debugLogger.js +2 -0
  133. package/lib/utils/env.js +4 -2
  134. package/lib/utils/expectUtils.js +33 -0
  135. package/lib/utils/fileUtils.js +140 -1
  136. package/lib/utils/glob.js +2 -1
  137. package/lib/utils/happy-eyeballs.js +29 -2
  138. package/lib/utils/hostPlatform.js +13 -4
  139. package/lib/utils/httpServer.js +54 -13
  140. package/lib/utils/index.js +53 -31
  141. package/lib/utils/isomorphic/cssTokenizer.js +1 -1
  142. package/lib/utils/isomorphic/locatorParser.js +1 -1
  143. package/lib/utils/isomorphic/mimeType.js +29 -0
  144. package/lib/utils/isomorphic/stringUtils.js +28 -1
  145. package/lib/utils/isomorphic/urlMatch.js +120 -0
  146. package/lib/utils/mimeType.js +2 -1
  147. package/lib/utils/network.js +7 -35
  148. package/lib/utils/stackTrace.js +2 -4
  149. package/lib/utils/timeoutRunner.js +11 -76
  150. package/lib/utils/zones.js +23 -60
  151. package/lib/utilsBundle.js +2 -1
  152. package/lib/utilsBundleImpl/index.js +33 -31
  153. package/lib/vite/htmlReport/index.html +12 -12
  154. package/lib/vite/recorder/assets/codeMirrorModule-BN0yUF4I.js +24 -0
  155. package/lib/vite/recorder/assets/{codicon-zGuYmc9o.ttf → codicon-DCmgc-ay.ttf} +0 -0
  156. package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
  157. package/lib/vite/recorder/assets/index-DVt3E1Ef.js +47 -0
  158. package/lib/vite/recorder/index.html +2 -2
  159. package/lib/vite/traceViewer/assets/codeMirrorModule-5yiV-3wl.js +16831 -0
  160. package/lib/vite/traceViewer/assets/codeMirrorModule-B7Z3vq11.js +24 -0
  161. package/lib/vite/traceViewer/assets/codeMirrorModule-C6p3E9Zg.js +24 -0
  162. package/lib/vite/traceViewer/assets/codeMirrorModule-CcviAl53.js +16831 -0
  163. package/lib/vite/traceViewer/assets/codeMirrorModule-CqYUz5ms.js +24 -0
  164. package/lib/vite/traceViewer/assets/codeMirrorModule-DS3v0XrQ.js +24 -0
  165. package/lib/vite/traceViewer/assets/codeMirrorModule-Dx6AXgMV.js +16838 -0
  166. package/lib/vite/traceViewer/assets/codeMirrorModule-T_sdMrbM.js +24 -0
  167. package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
  168. package/lib/vite/traceViewer/assets/testServerConnection-D-tXL3sj.js +224 -0
  169. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  170. package/lib/vite/traceViewer/assets/workbench-Bjkiwcr1.js +19119 -0
  171. package/lib/vite/traceViewer/assets/workbench-C43LWZEX.js +72 -0
  172. package/lib/vite/traceViewer/assets/workbench-C5OQh9VX.js +19119 -0
  173. package/lib/vite/traceViewer/assets/workbench-Crj6jzdv.js +19119 -0
  174. package/lib/vite/traceViewer/assets/workbench-DrQjKdyE.js +72 -0
  175. package/lib/vite/traceViewer/assets/workbench-Pa1v1Ojh.js +72 -0
  176. package/lib/vite/traceViewer/assets/workbench-caTaZnzx.js +72 -0
  177. package/lib/vite/traceViewer/assets/workbench-u2lRPMOT.js +72 -0
  178. package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
  179. package/lib/vite/traceViewer/assets/xtermModule-CZ7sDYXB.js +6529 -0
  180. package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
  181. package/lib/vite/traceViewer/codeMirrorModule.Cy8X9Wtw.css +344 -0
  182. package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
  183. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  184. package/lib/vite/traceViewer/embedded.BBZ9gQEw.js +104 -0
  185. package/lib/vite/traceViewer/embedded.BQq6Psnz.js +104 -0
  186. package/lib/vite/traceViewer/embedded.BVDVQOzc.js +2 -0
  187. package/lib/vite/traceViewer/embedded.Bn8Ptzv6.js +2 -0
  188. package/lib/vite/traceViewer/embedded.CvhnUgIi.js +2 -0
  189. package/lib/vite/traceViewer/embedded.D27cnKiB.js +104 -0
  190. package/lib/vite/traceViewer/embedded.DPqrDeET.js +2 -0
  191. package/lib/vite/traceViewer/embedded.DbzY7Q8w.js +2 -0
  192. package/lib/vite/traceViewer/embedded.DjZq4InJ.css +68 -0
  193. package/lib/vite/traceViewer/embedded.html +16 -0
  194. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  195. package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
  196. package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
  197. package/lib/vite/traceViewer/index.B8dgQwuN.js +2 -0
  198. package/lib/vite/traceViewer/index.BGj8jY3H.js +2 -0
  199. package/lib/vite/traceViewer/index.BSak5QT9.js +2 -0
  200. package/lib/vite/traceViewer/index.C0EgJ4oW.js +195 -0
  201. package/lib/vite/traceViewer/index.CUpI-BFe.js +195 -0
  202. package/lib/vite/traceViewer/{index.-g_5lMbJ.css → index.CrbWWHbf.css} +1 -1
  203. package/lib/vite/traceViewer/index.DkRbtWVo.js +195 -0
  204. package/lib/vite/traceViewer/index.QanXxRUb.css +131 -0
  205. package/lib/vite/traceViewer/index._cX8k4co.js +2 -0
  206. package/lib/vite/traceViewer/index.html +5 -4
  207. package/lib/vite/traceViewer/index.pMAN88y-.js +2 -0
  208. package/lib/vite/traceViewer/snapshot.html +1 -1
  209. package/lib/vite/traceViewer/sw.bundle.js +3 -4
  210. package/lib/vite/traceViewer/uiMode.D-tg1Oci.js +1730 -0
  211. package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
  212. package/lib/vite/traceViewer/uiMode.DKjMBMlc.js +1730 -0
  213. package/lib/vite/traceViewer/uiMode.DVWUEIHq.css +1424 -0
  214. package/lib/vite/traceViewer/uiMode.DVrL7a1K.js +10 -0
  215. package/lib/vite/traceViewer/uiMode.Dg9oJCQU.js +10 -0
  216. package/lib/vite/traceViewer/uiMode.DwZAzstF.js +10 -0
  217. package/lib/vite/traceViewer/uiMode.O07awP3T.js +10 -0
  218. package/lib/vite/traceViewer/uiMode.gGHHTsyL.js +1730 -0
  219. package/lib/vite/traceViewer/uiMode.html +5 -4
  220. package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
  221. package/lib/vite/traceViewer/uiMode.jY2s-9ps.js +10 -0
  222. package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
  223. package/lib/vite/traceViewer/workbench.B3X2QtYa.css +3702 -0
  224. package/lib/vite/traceViewer/workbench.DjbIuxix.css +1 -0
  225. package/lib/vite/traceViewer/workbench.DyTpxWVb.css +1 -0
  226. package/lib/vite/traceViewer/workbench.wuxQoE2z.css +3703 -0
  227. package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
  228. package/lib/vite/traceViewer/xtermModule.4oRVGWQ-.css +209 -0
  229. package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
  230. package/package.json +2 -2
  231. package/types/protocol.d.ts +960 -78
  232. package/types/structs.d.ts +1 -1
  233. package/types/types.d.ts +3083 -2448
  234. package/lib/vite/recorder/assets/codeMirrorModule-W69B4LBB.js +0 -24
  235. package/lib/vite/recorder/assets/index-Ly3PcVUb.js +0 -47
  236. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
  237. package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
  238. package/lib/vite/traceViewer/assets/codeMirrorModule-wLpsbIhd.js +0 -24
  239. package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
  240. package/lib/vite/traceViewer/assets/wsPort-f2dAQL4I.js +0 -69
  241. package/lib/vite/traceViewer/index.-_8-eHEE.js +0 -2
  242. package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
  243. package/lib/vite/traceViewer/uiMode.9CwNsWc6.js +0 -10
  244. package/lib/vite/traceViewer/uiMode.Fb0bNA4H.js +0 -10
  245. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +0 -1
  246. package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +0 -1
  247. /package/lib/vite/recorder/assets/{codeMirrorModule-Hs9-1ZG4.css → codeMirrorModule-ez37Vkbh.css} +0 -0
  248. /package/lib/vite/traceViewer/assets/{xtermModule-Yt6xwiJ_.js → xtermModule-BeNbaIVa.js} +0 -0
  249. /package/lib/vite/traceViewer/{codeMirrorModule.Hs9-1ZG4.css → codeMirrorModule.ez37Vkbh.css} +0 -0
  250. /package/lib/vite/traceViewer/{xtermModule.0lwXJFHT.css → xtermModule.DSXBckUd.css} +0 -0
@@ -9,6 +9,7 @@ var _utils = require("../../utils");
9
9
  var _browser = require("../browser");
10
10
  var _browserContext = require("../browserContext");
11
11
  var network = _interopRequireWildcard(require("../network"));
12
+ var _page = require("../page");
12
13
  var _ffConnection = require("./ffConnection");
13
14
  var _ffPage = require("./ffPage");
14
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -165,7 +166,11 @@ class FFBrowserContext extends _browserContext.BrowserContext {
165
166
  async _initialize() {
166
167
  (0, _utils.assert)(!this._ffPages().length);
167
168
  const browserContextId = this._browserContextId;
168
- const promises = [super._initialize()];
169
+ const promises = [super._initialize(), this._browser.session.send('Browser.addBinding', {
170
+ browserContextId: this._browserContextId,
171
+ name: _page.PageBinding.kPlaywrightBinding,
172
+ script: ''
173
+ })];
169
174
  if (this._options.acceptDownloads !== 'internal-browser-default') {
170
175
  promises.push(this._browser.session.send('Browser.setDownloadOptions', {
171
176
  browserContextId,
@@ -301,7 +306,7 @@ class FFBrowserContext extends _browserContext.BrowserContext {
301
306
  cookies: cc
302
307
  });
303
308
  }
304
- async clearCookies() {
309
+ async doClearCookies() {
305
310
  await this._browser.session.send('Browser.clearCookies', {
306
311
  browserContextId: this._browserContextId
307
312
  });
@@ -356,42 +361,48 @@ class FFBrowserContext extends _browserContext.BrowserContext {
356
361
  }
357
362
  async doSetHTTPCredentials(httpCredentials) {
358
363
  this._options.httpCredentials = httpCredentials;
364
+ let credentials = null;
365
+ if (httpCredentials) {
366
+ const {
367
+ username,
368
+ password,
369
+ origin
370
+ } = httpCredentials;
371
+ credentials = {
372
+ username,
373
+ password,
374
+ origin
375
+ };
376
+ }
359
377
  await this._browser.session.send('Browser.setHTTPCredentials', {
360
378
  browserContextId: this._browserContextId,
361
- credentials: httpCredentials || null
379
+ credentials
362
380
  });
363
381
  }
364
- async doAddInitScript(source) {
382
+ async doAddInitScript(initScript) {
383
+ await this._updateInitScripts();
384
+ }
385
+ async doRemoveNonInternalInitScripts() {
386
+ await this._updateInitScripts();
387
+ }
388
+ async _updateInitScripts() {
389
+ const bindingScripts = [...this._pageBindings.values()].map(binding => binding.initScript.source);
390
+ const initScripts = this.initScripts.map(script => script.source);
365
391
  await this._browser.session.send('Browser.setInitScripts', {
366
392
  browserContextId: this._browserContextId,
367
- scripts: this.initScripts.map(script => ({
393
+ scripts: [...bindingScripts, ...initScripts].map(script => ({
368
394
  script
369
395
  }))
370
396
  });
371
397
  }
372
- async doRemoveInitScripts() {
373
- await this._browser.session.send('Browser.setInitScripts', {
374
- browserContextId: this._browserContextId,
375
- scripts: []
376
- });
377
- }
378
- async doExposeBinding(binding) {
379
- await this._browser.session.send('Browser.addBinding', {
380
- browserContextId: this._browserContextId,
381
- name: binding.name,
382
- script: binding.source
383
- });
384
- }
385
- async doRemoveExposedBindings() {
386
- // TODO: implement me.
387
- // This is not a critical problem, what ends up happening is
388
- // an old binding will be restored upon page reload and will point nowhere.
389
- }
390
398
  async doUpdateRequestInterception() {
391
- await this._browser.session.send('Browser.setRequestInterception', {
399
+ await Promise.all([this._browser.session.send('Browser.setRequestInterception', {
392
400
  browserContextId: this._browserContextId,
393
401
  enabled: !!this._requestInterceptor
394
- });
402
+ }), this._browser.session.send('Browser.setCacheDisabled', {
403
+ browserContextId: this._browserContextId,
404
+ cacheDisabled: !!this._requestInterceptor
405
+ })]);
395
406
  }
396
407
  onClosePersistent() {}
397
408
  async clearCache() {
@@ -69,11 +69,11 @@ class FFConnection extends _events.EventEmitter {
69
69
  const session = this._sessions.get(message.sessionId || '');
70
70
  if (session) session.dispatchMessage(message);
71
71
  }
72
- _onClose() {
72
+ _onClose(reason) {
73
73
  this._closed = true;
74
74
  this._transport.onmessage = undefined;
75
75
  this._transport.onclose = undefined;
76
- this._browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs());
76
+ this._browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);
77
77
  this.rootSession.dispose();
78
78
  Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));
79
79
  }
@@ -40,9 +40,11 @@ class FFNetworkManager {
40
40
  _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
41
41
  }
42
42
  async setRequestInterception(enabled) {
43
- await this._session.send('Network.setRequestInterception', {
43
+ await Promise.all([this._session.send('Network.setRequestInterception', {
44
44
  enabled
45
- });
45
+ }), this._session.send('Page.setCacheDisabled', {
46
+ cacheDisabled: enabled
47
+ })]);
46
48
  }
47
49
  _onRequestWillBeSent(event) {
48
50
  const redirectedFrom = event.redirectedFrom ? this._requests.get(event.redirectedFrom) || null : null;
@@ -191,7 +193,7 @@ class FFRouteImpl {
191
193
  this._session = session;
192
194
  this._request = request;
193
195
  }
194
- async continue(request, overrides) {
196
+ async continue(overrides) {
195
197
  await this._session.sendMayFail('Network.resumeInterceptedRequest', {
196
198
  requestId: this._request._id,
197
199
  url: overrides.url,
@@ -205,7 +207,7 @@ class FFRouteImpl {
205
207
  await this._session.sendMayFail('Network.fulfillInterceptedRequest', {
206
208
  requestId: this._request._id,
207
209
  status: response.status,
208
- statusText: network.STATUS_TEXTS[String(response.status)] || '',
210
+ statusText: network.statusText(response.status),
209
211
  headers: response.headers,
210
212
  base64body
211
213
  });
@@ -40,7 +40,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
40
40
  const UTILITY_WORLD_NAME = exports.UTILITY_WORLD_NAME = '__playwright_utility_world__';
41
41
  class FFPage {
42
42
  constructor(session, browserContext, opener) {
43
- this.cspErrorsAsynchronousForInlineScipts = true;
43
+ this.cspErrorsAsynchronousForInlineScripts = true;
44
44
  this.rawMouse = void 0;
45
45
  this.rawKeyboard = void 0;
46
46
  this.rawTouchscreen = void 0;
@@ -81,7 +81,7 @@ class FFPage {
81
81
  });
82
82
  // Ideally, we somehow ensure that utility world is created before Page.ready arrives, but currently it is racy.
83
83
  // Therefore, we can end up with an initialized page without utility world, although very unlikely.
84
- this.addInitScript('', UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
84
+ this.addInitScript(new _page.InitScript('', true), UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
85
85
  }
86
86
  potentiallyUninitializedPage() {
87
87
  return this._page;
@@ -121,11 +121,11 @@ class FFPage {
121
121
  const frame = this._page._frameManager.frame(auxData.frameId);
122
122
  if (!frame) return;
123
123
  const delegate = new _ffExecutionContext.FFExecutionContext(this._session, executionContextId);
124
- let worldName = null;
125
- if (auxData.name === UTILITY_WORLD_NAME) worldName = 'utility';else if (!auxData.name) worldName = 'main';
124
+ let worldName;
125
+ if (auxData.name === UTILITY_WORLD_NAME) worldName = 'utility';else if (!auxData.name) worldName = 'main';else return;
126
126
  const context = new dom.FrameExecutionContext(delegate, frame, worldName);
127
127
  context[contextDelegateSymbol] = delegate;
128
- if (worldName) frame._contextCreated(worldName, context);
128
+ frame._contextCreated(worldName, context);
129
129
  this._contextIdToContext.set(executionContextId, context);
130
130
  }
131
131
  _onExecutionContextDestroyed(payload) {
@@ -200,7 +200,8 @@ class FFPage {
200
200
  } = payload;
201
201
  const context = this._contextIdToContext.get(executionContextId);
202
202
  if (!context) return;
203
- this._page._addConsoleMessage(type, args.map(arg => context.createHandle(arg)), location);
203
+ // Juggler reports 'warn' for some internal messages generated by the browser.
204
+ this._page._addConsoleMessage(type === 'warn' ? 'warning' : type, args.map(arg => context.createHandle(arg)), location);
204
205
  }
205
206
  _onDialogOpened(params) {
206
207
  this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, params.type, params.message, async (accept, promptText) => {
@@ -287,15 +288,6 @@ class FFPage {
287
288
  _onVideoRecordingStarted(event) {
288
289
  this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this.pageOrError());
289
290
  }
290
- async exposeBinding(binding) {
291
- await this._session.send('Page.addBinding', {
292
- name: binding.name,
293
- script: binding.source
294
- });
295
- }
296
- async removeExposedBindings() {
297
- // TODO: implement me.
298
- }
299
291
  didClose() {
300
292
  this._markAsError(new _errors.TargetClosedError());
301
293
  this._session.dispose();
@@ -368,19 +360,25 @@ class FFPage {
368
360
  });
369
361
  return success;
370
362
  }
371
- async addInitScript(script, worldName) {
363
+ async addInitScript(initScript, worldName) {
372
364
  this._initScripts.push({
373
- script,
365
+ initScript,
374
366
  worldName
375
367
  });
376
368
  await this._session.send('Page.setInitScripts', {
377
- scripts: this._initScripts
369
+ scripts: this._initScripts.map(s => ({
370
+ script: s.initScript.source,
371
+ worldName: s.worldName
372
+ }))
378
373
  });
379
374
  }
380
- async removeInitScripts() {
381
- this._initScripts = [];
375
+ async removeNonInternalInitScripts() {
376
+ this._initScripts = this._initScripts.filter(s => s.initScript.internal);
382
377
  await this._session.send('Page.setInitScripts', {
383
- scripts: []
378
+ scripts: this._initScripts.map(s => ({
379
+ script: s.initScript.source,
380
+ worldName: s.worldName
381
+ }))
384
382
  });
385
383
  }
386
384
  async closePage(runBeforeUnload) {
@@ -509,12 +507,12 @@ class FFPage {
509
507
  async setInputFiles(handle, files) {
510
508
  await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files);
511
509
  }
512
- async setInputFilePaths(progress, handle, files) {
513
- await Promise.all([this._session.send('Page.setFileInputFiles', {
510
+ async setInputFilePaths(handle, files) {
511
+ await this._session.send('Page.setFileInputFiles', {
514
512
  frameId: handle._context.frame._id,
515
513
  objectId: handle._objectId,
516
514
  files
517
- }), handle.dispatchEvent(progress.metadata, 'input'), handle.dispatchEvent(progress.metadata, 'change')]);
515
+ });
518
516
  }
519
517
  async adoptElementHandle(handle, to) {
520
518
  const result = await this._session.send('Page.adoptNode', {
@@ -34,17 +34,17 @@ class Firefox extends _browserType.BrowserType {
34
34
  constructor(parent) {
35
35
  super(parent, 'firefox');
36
36
  }
37
- _connectToTransport(transport, options) {
37
+ connectToTransport(transport, options) {
38
38
  return _ffBrowser.FFBrowser.connect(this.attribution.playwright, transport, options);
39
39
  }
40
- _doRewriteStartupLog(error) {
40
+ doRewriteStartupLog(error) {
41
41
  if (!error.logs) return error;
42
42
  // https://github.com/microsoft/playwright/issues/6500
43
43
  if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
44
44
  if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
45
45
  return error;
46
46
  }
47
- _amendEnvironment(env, userDataDir, executable, browserArguments) {
47
+ amendEnvironment(env, userDataDir, executable, browserArguments) {
48
48
  if (!_path.default.isAbsolute(os.homedir())) throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);
49
49
  if (os.platform() === 'linux') {
50
50
  // Always remove SNAP_NAME and SNAP_INSTANCE_NAME env variables since they
@@ -58,7 +58,7 @@ class Firefox extends _browserType.BrowserType {
58
58
  }
59
59
  return env;
60
60
  }
61
- _attemptToGracefullyCloseBrowser(transport) {
61
+ attemptToGracefullyCloseBrowser(transport) {
62
62
  const message = {
63
63
  method: 'Browser.close',
64
64
  params: {},
@@ -66,7 +66,7 @@ class Firefox extends _browserType.BrowserType {
66
66
  };
67
67
  transport.send(message);
68
68
  }
69
- _defaultArgs(options, isPersistent, userDataDir) {
69
+ defaultArgs(options, isPersistent, userDataDir) {
70
70
  const {
71
71
  args = [],
72
72
  headless
@@ -87,5 +87,24 @@ class Firefox extends _browserType.BrowserType {
87
87
  if (isPersistent) firefoxArguments.push('about:blank');else firefoxArguments.push('-silent');
88
88
  return firefoxArguments;
89
89
  }
90
+ readyState(options) {
91
+ return new JugglerReadyState();
92
+ }
90
93
  }
91
- exports.Firefox = Firefox;
94
+ exports.Firefox = Firefox;
95
+ class JugglerReadyState {
96
+ constructor() {
97
+ this._jugglerPromise = new _utils.ManualPromise();
98
+ }
99
+ onBrowserOutput(message) {
100
+ if (message.includes('Juggler listening to the pipe')) this._jugglerPromise.resolve();
101
+ }
102
+ onBrowserExit() {
103
+ // Unblock launch when browser prematurely exits.
104
+ this._jugglerPromise.resolve();
105
+ }
106
+ async waitUntilReady() {
107
+ await this._jugglerPromise;
108
+ return {};
109
+ }
110
+ }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.FrameSelectors = void 0;
7
7
  var _selectorParser = require("../utils/isomorphic/selectorParser");
8
- var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
8
+ var _utils = require("../utils");
9
9
  /**
10
10
  * Copyright (c) Microsoft Corporation.
11
11
  *
@@ -111,7 +111,7 @@ class FrameSelectors {
111
111
  for (const chunk of frameChunks) {
112
112
  (0, _selectorParser.visitAllSelectorParts)(chunk, (part, nested) => {
113
113
  if (nested && part.name === 'internal:control' && part.body === 'enter-frame') {
114
- const locator = (0, _locatorGenerators.asLocator)(this.frame._page.attribution.playwright.options.sdkLanguage, selector);
114
+ const locator = (0, _utils.asLocator)(this.frame._page.attribution.playwright.options.sdkLanguage, selector);
115
115
  throw new _selectorParser.InvalidSelectorError(`Frame locators are not allowed inside composite locators, while querying "${locator}"`);
116
116
  }
117
117
  });