@checkly/playwright-core 1.48.22 → 1.51.11-beta.1

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 (307) hide show
  1. package/ThirdPartyNotices.txt +60 -48
  2. package/bin/reinstall_chrome_beta_linux.sh +10 -8
  3. package/bin/reinstall_chrome_stable_linux.sh +10 -8
  4. package/bin/reinstall_msedge_beta_linux.sh +17 -9
  5. package/bin/reinstall_msedge_dev_linux.sh +17 -9
  6. package/bin/reinstall_msedge_stable_linux.sh +17 -9
  7. package/browsers.json +33 -12
  8. package/index.js +0 -1
  9. package/lib/androidServerImpl.js +5 -5
  10. package/lib/browserServerImpl.js +18 -9
  11. package/lib/checkly/secretsFilter.js +1 -1
  12. package/lib/cli/driver.js +6 -6
  13. package/lib/cli/program.js +38 -43
  14. package/lib/cli/programWithTestStub.js +2 -1
  15. package/lib/client/android.js +37 -58
  16. package/lib/client/artifact.js +4 -7
  17. package/lib/client/browser.js +10 -15
  18. package/lib/client/browserContext.js +69 -62
  19. package/lib/client/browserType.js +30 -64
  20. package/lib/client/channelOwner.js +53 -68
  21. package/lib/client/clientHelper.js +4 -6
  22. package/lib/client/clientInstrumentation.js +2 -0
  23. package/lib/client/clientStackTrace.js +65 -0
  24. package/lib/client/connection.js +48 -41
  25. package/lib/client/consoleMessage.js +4 -7
  26. package/lib/client/electron.js +10 -10
  27. package/lib/client/elementHandle.js +32 -33
  28. package/lib/client/errors.js +2 -2
  29. package/lib/client/eventEmitter.js +5 -8
  30. package/lib/client/fetch.js +61 -62
  31. package/lib/client/fileUtils.js +31 -0
  32. package/lib/client/frame.js +22 -23
  33. package/lib/client/harRouter.js +7 -9
  34. package/lib/client/jsHandle.js +3 -4
  35. package/lib/client/localUtils.js +24 -0
  36. package/lib/client/locator.js +27 -13
  37. package/lib/client/network.js +44 -37
  38. package/lib/client/page.js +50 -41
  39. package/lib/client/platform.js +71 -0
  40. package/lib/client/playwright.js +21 -1
  41. package/lib/client/selectors.js +8 -2
  42. package/lib/client/stream.js +2 -21
  43. package/lib/client/timeoutSettings.js +65 -0
  44. package/lib/client/tracing.js +29 -7
  45. package/lib/client/video.js +2 -2
  46. package/lib/client/waiter.js +19 -16
  47. package/lib/client/webSocket.js +106 -0
  48. package/lib/client/worker.js +4 -4
  49. package/lib/client/writableStream.js +2 -21
  50. package/lib/generated/consoleApiSource.js +1 -1
  51. package/lib/generated/injectedScriptSource.js +1 -1
  52. package/lib/generated/pollingRecorderSource.js +1 -1
  53. package/lib/generated/recorderSource.js +7 -0
  54. package/lib/generated/webSocketMockSource.js +1 -1
  55. package/lib/inProcessFactory.js +8 -3
  56. package/lib/outofprocess.js +12 -8
  57. package/lib/protocol/debug.js +1 -1
  58. package/lib/protocol/validator.js +77 -11
  59. package/lib/protocol/validatorPrimitives.js +1 -2
  60. package/lib/remote/playwrightConnection.js +21 -12
  61. package/lib/remote/playwrightServer.js +22 -8
  62. package/lib/server/android/android.js +17 -14
  63. package/lib/server/android/backendAdb.js +14 -14
  64. package/lib/server/artifact.js +3 -3
  65. package/lib/server/bidi/bidiBrowser.js +11 -8
  66. package/lib/server/bidi/bidiChromium.js +5 -4
  67. package/lib/server/bidi/bidiConnection.js +1 -3
  68. package/lib/server/bidi/bidiExecutionContext.js +71 -25
  69. package/lib/server/bidi/bidiFirefox.js +4 -3
  70. package/lib/server/bidi/bidiInput.js +11 -12
  71. package/lib/server/bidi/bidiNetworkManager.js +11 -12
  72. package/lib/server/bidi/bidiOverCdp.js +2 -2
  73. package/lib/server/bidi/bidiPage.js +39 -66
  74. package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
  75. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  76. package/lib/server/browser.js +2 -2
  77. package/lib/server/browserContext.js +60 -55
  78. package/lib/server/browserType.js +22 -18
  79. package/lib/server/callLog.js +79 -0
  80. package/lib/server/chromium/chromium.js +20 -16
  81. package/lib/server/chromium/chromiumSwitches.js +32 -9
  82. package/lib/server/chromium/crBrowser.js +25 -24
  83. package/lib/server/chromium/crConnection.js +2 -2
  84. package/lib/server/chromium/crCoverage.js +1 -1
  85. package/lib/server/chromium/crDevTools.js +1 -1
  86. package/lib/server/chromium/crDragDrop.js +1 -1
  87. package/lib/server/chromium/crExecutionContext.js +26 -35
  88. package/lib/server/chromium/crInput.js +17 -6
  89. package/lib/server/chromium/crNetworkManager.js +3 -3
  90. package/lib/server/chromium/crPage.js +43 -55
  91. package/lib/server/chromium/crPdf.js +1 -1
  92. package/lib/server/chromium/crProtocolHelper.js +3 -3
  93. package/lib/server/chromium/crServiceWorker.js +2 -2
  94. package/lib/server/chromium/videoRecorder.js +2 -2
  95. package/lib/server/clock.js +1 -1
  96. package/lib/server/codegen/csharp.js +21 -16
  97. package/lib/server/codegen/java.js +17 -9
  98. package/lib/server/codegen/javascript.js +37 -7
  99. package/lib/server/codegen/jsonl.js +1 -1
  100. package/lib/server/codegen/languages.js +2 -2
  101. package/lib/server/codegen/python.js +14 -17
  102. package/lib/server/debugController.js +23 -45
  103. package/lib/server/debugger.js +1 -1
  104. package/lib/server/deviceDescriptors.js +1 -1
  105. package/lib/server/deviceDescriptorsSource.json +131 -131
  106. package/lib/server/dispatchers/androidDispatcher.js +14 -3
  107. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  108. package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
  109. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  110. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  111. package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
  112. package/lib/server/dispatchers/dispatcher.js +27 -25
  113. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  114. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  115. package/lib/server/dispatchers/frameDispatcher.js +9 -3
  116. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  117. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
  118. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  119. package/lib/server/dispatchers/pageDispatcher.js +10 -8
  120. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  121. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  122. package/lib/server/dispatchers/tracingDispatcher.js +10 -0
  123. package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
  124. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  125. package/lib/server/dom.js +102 -48
  126. package/lib/server/download.js +1 -1
  127. package/lib/server/electron/electron.js +17 -16
  128. package/lib/server/errors.js +1 -1
  129. package/lib/server/fetch.js +49 -33
  130. package/lib/server/fileUploadUtils.js +7 -4
  131. package/lib/server/firefox/ffBrowser.js +17 -9
  132. package/lib/server/firefox/ffConnection.js +1 -1
  133. package/lib/server/firefox/ffExecutionContext.js +25 -29
  134. package/lib/server/firefox/ffInput.js +15 -4
  135. package/lib/server/firefox/ffNetworkManager.js +3 -3
  136. package/lib/server/firefox/ffPage.js +29 -50
  137. package/lib/server/firefox/firefox.js +7 -9
  138. package/lib/server/frameSelectors.js +1 -1
  139. package/lib/server/frames.js +65 -55
  140. package/lib/server/har/harRecorder.js +4 -4
  141. package/lib/server/har/harTracer.js +8 -9
  142. package/lib/server/harBackend.js +157 -0
  143. package/lib/server/helper.js +2 -2
  144. package/lib/server/index.js +1 -14
  145. package/lib/server/input.js +3 -4
  146. package/lib/server/instrumentation.js +2 -2
  147. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  148. package/lib/server/javascript.js +26 -33
  149. package/lib/server/launchApp.js +7 -7
  150. package/lib/server/localUtils.js +203 -0
  151. package/lib/server/network.js +5 -5
  152. package/lib/server/page.js +76 -37
  153. package/lib/server/pipeTransport.js +1 -1
  154. package/lib/server/playwright.js +5 -5
  155. package/lib/server/progress.js +1 -4
  156. package/lib/server/protocolError.js +1 -1
  157. package/lib/server/recorder/chat.js +177 -0
  158. package/lib/server/recorder/codeGenerator.js +154 -0
  159. package/lib/server/recorder/contextRecorder.js +9 -18
  160. package/lib/server/recorder/csharp.js +311 -0
  161. package/lib/server/recorder/java.js +249 -0
  162. package/lib/server/recorder/javascript.js +230 -0
  163. package/lib/server/recorder/jsonl.js +48 -0
  164. package/lib/server/recorder/language.js +45 -0
  165. package/lib/server/recorder/python.js +276 -0
  166. package/lib/server/recorder/recorderActions.js +6 -0
  167. package/lib/server/recorder/recorderApp.js +25 -28
  168. package/lib/server/recorder/recorderCollection.js +9 -21
  169. package/lib/server/recorder/recorderInTraceViewer.js +1 -1
  170. package/lib/server/recorder/recorderRunner.js +7 -3
  171. package/lib/server/recorder/recorderUtils.js +5 -28
  172. package/lib/server/recorder/throttledFile.js +3 -4
  173. package/lib/server/recorder/utils.js +46 -0
  174. package/lib/server/recorder.js +83 -43
  175. package/lib/server/registry/browserFetcher.js +10 -8
  176. package/lib/server/registry/dependencies.js +20 -20
  177. package/lib/server/registry/index.js +215 -61
  178. package/lib/server/registry/nativeDeps.js +10 -4
  179. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  180. package/lib/server/screenshotter.js +1 -1
  181. package/lib/server/selectors.js +3 -3
  182. package/lib/server/socksClientCertificatesInterceptor.js +8 -8
  183. package/lib/server/socksInterceptor.js +8 -5
  184. package/lib/server/storageScript.js +160 -0
  185. package/lib/server/timeoutSettings.js +74 -0
  186. package/lib/server/trace/recorder/snapshotter.js +10 -20
  187. package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
  188. package/lib/server/trace/recorder/tracing.js +108 -45
  189. package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
  190. package/lib/server/trace/viewer/traceViewer.js +21 -7
  191. package/lib/server/transport.js +3 -2
  192. package/lib/server/utils/ascii.js +31 -0
  193. package/lib/server/utils/comparators.js +159 -0
  194. package/lib/server/utils/crypto.js +171 -0
  195. package/lib/server/utils/debug.js +38 -0
  196. package/lib/server/utils/debugLogger.js +93 -0
  197. package/lib/server/utils/env.js +53 -0
  198. package/lib/server/utils/eventsHelper.js +38 -0
  199. package/lib/server/utils/expectUtils.js +33 -0
  200. package/lib/server/utils/fileUtils.js +204 -0
  201. package/lib/server/utils/happyEyeballs.js +207 -0
  202. package/lib/server/utils/hostPlatform.js +145 -0
  203. package/lib/server/utils/httpServer.js +233 -0
  204. package/lib/server/utils/image_tools/colorUtils.js +98 -0
  205. package/lib/server/utils/image_tools/compare.js +108 -0
  206. package/lib/server/utils/image_tools/imageChannel.js +70 -0
  207. package/lib/server/utils/image_tools/stats.js +102 -0
  208. package/lib/server/utils/linuxUtils.js +58 -0
  209. package/lib/server/utils/network.js +160 -0
  210. package/lib/server/utils/nodePlatform.js +140 -0
  211. package/lib/server/utils/pipeTransport.js +82 -0
  212. package/lib/server/utils/processLauncher.js +248 -0
  213. package/lib/server/utils/profiler.js +52 -0
  214. package/lib/server/utils/socksProxy.js +570 -0
  215. package/lib/server/utils/spawnAsync.js +45 -0
  216. package/lib/server/utils/task.js +58 -0
  217. package/lib/server/utils/userAgent.js +91 -0
  218. package/lib/server/utils/wsServer.js +128 -0
  219. package/lib/server/utils/zipFile.js +75 -0
  220. package/lib/server/utils/zones.js +54 -0
  221. package/lib/server/webkit/webkit.js +4 -4
  222. package/lib/server/webkit/wkBrowser.js +10 -10
  223. package/lib/server/webkit/wkConnection.js +1 -1
  224. package/lib/server/webkit/wkExecutionContext.js +26 -30
  225. package/lib/server/webkit/wkInput.js +17 -7
  226. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  227. package/lib/server/webkit/wkPage.js +80 -66
  228. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  229. package/lib/server/webkit/wkWorkers.js +2 -2
  230. package/lib/utils/fileUtils.js +1 -1
  231. package/lib/utils/glob.js +84 -0
  232. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  233. package/lib/utils/isomorphic/assert.js +25 -0
  234. package/lib/utils/isomorphic/colors.js +65 -0
  235. package/lib/utils/isomorphic/cssParser.js +5 -5
  236. package/lib/utils/isomorphic/headers.js +52 -0
  237. package/lib/utils/isomorphic/locatorGenerators.js +38 -8
  238. package/lib/utils/isomorphic/locatorParser.js +19 -13
  239. package/lib/utils/isomorphic/manualPromise.js +107 -0
  240. package/lib/utils/isomorphic/mimeType.js +11 -3
  241. package/lib/utils/isomorphic/multimap.js +73 -0
  242. package/lib/utils/isomorphic/rtti.js +41 -0
  243. package/lib/utils/isomorphic/semaphore.js +51 -0
  244. package/lib/utils/isomorphic/stackTrace.js +169 -0
  245. package/lib/utils/isomorphic/stringUtils.js +31 -1
  246. package/lib/utils/isomorphic/time.js +25 -0
  247. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  248. package/lib/utils/isomorphic/traceUtils.js +23 -0
  249. package/lib/utils/isomorphic/types.js +5 -0
  250. package/lib/utils/isomorphic/urlMatch.js +7 -5
  251. package/lib/utils/mimeType.js +30 -0
  252. package/lib/utils/stackTrace.js +1 -1
  253. package/lib/utils.js +447 -0
  254. package/lib/utilsBundle.js +4 -29
  255. package/lib/utilsBundleImpl/index.js +188 -33
  256. package/lib/vite/htmlReport/index.html +20 -17
  257. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  258. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  259. package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
  260. package/lib/vite/recorder/index.html +2 -2
  261. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
  262. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
  263. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
  264. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
  265. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  266. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
  267. package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
  268. package/lib/vite/traceViewer/embedded.html +6 -6
  269. package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
  270. package/lib/vite/traceViewer/index.html +27 -9
  271. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
  272. package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
  273. package/lib/vite/traceViewer/recorder.html +4 -4
  274. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  275. package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
  276. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
  277. package/lib/vite/traceViewer/uiMode.html +8 -7
  278. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
  279. package/lib/zipBundleImpl.js +4 -4
  280. package/package.json +7 -7
  281. package/types/protocol.d.ts +820 -153
  282. package/types/types.d.ts +285 -82
  283. package/bin/PrintDeps.exe +0 -0
  284. package/bin/README.md +0 -2
  285. package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
  286. package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
  287. package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
  288. package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
  289. package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
  290. package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
  291. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  292. package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
  293. package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
  294. package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
  295. package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
  296. package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
  297. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
  298. package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
  299. package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
  300. package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
  301. package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
  302. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  303. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  304. /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
  305. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  306. /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
  307. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -12,17 +12,16 @@ Object.defineProperty(exports, "program", {
12
12
  var _fs = _interopRequireDefault(require("fs"));
13
13
  var _os = _interopRequireDefault(require("os"));
14
14
  var _path = _interopRequireDefault(require("path"));
15
- var _utilsBundle = require("../utilsBundle");
16
- var _driver = require("./driver");
17
- var _traceViewer = require("../server/trace/viewer/traceViewer");
18
15
  var playwright = _interopRequireWildcard(require("../.."));
19
- var _child_process = require("child_process");
20
- var _utils = require("../utils");
16
+ var _driver = require("./driver");
21
17
  var _server = require("../server");
22
- var _errors = require("../client/errors");
18
+ var _utils = require("../utils");
19
+ var _traceViewer = require("../server/trace/viewer/traceViewer");
20
+ var _ascii = require("../server/utils/ascii");
21
+ var _utilsBundle = require("../utilsBundle");
23
22
  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); }
24
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
24
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
25
  /**
27
26
  * Copyright (c) Microsoft Corporation.
28
27
  *
@@ -56,7 +55,7 @@ Examples:
56
55
 
57
56
  $ open
58
57
  $ open -b webkit https://example.com`);
59
- commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output <file name>', 'saves the generated script to a file'], ['--target <language>', `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()], ['--save-trace <filename>', 'record a trace for the session and save it to a file'], ['--test-id-attribute <attributeName>', 'use the specified attribute to generate data test ID selectors']]).action(function (url, options) {
58
+ commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output <file name>', 'saves the generated script to a file'], ['--target <language>', `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()], ['--test-id-attribute <attributeName>', 'use the specified attribute to generate data test ID selectors']]).action(function (url, options) {
60
59
  codegen(options, url).catch(logErrorAndExit);
61
60
  }).addHelpText('afterAll', `
62
61
  Examples:
@@ -64,41 +63,45 @@ Examples:
64
63
  $ codegen
65
64
  $ codegen --target=python
66
65
  $ codegen -b webkit https://example.com`);
67
- _utilsBundle.program.command('debug <app> [args...]', {
68
- hidden: true
69
- }).description('run command in debug mode: disable timeout, open inspector').allowUnknownOption(true).action(function (app, options) {
70
- (0, _child_process.spawn)(app, options, {
71
- env: {
72
- ...process.env,
73
- PWDEBUG: '1'
74
- },
75
- stdio: 'inherit'
76
- });
77
- }).addHelpText('afterAll', `
78
- Examples:
79
-
80
- $ debug node test.js
81
- $ debug npm run test`);
82
66
  function suggestedBrowsersToInstall() {
83
67
  return _server.registry.executables().filter(e => e.installType !== 'none' && e.type !== 'tool').map(e => e.name).join(', ');
84
68
  }
85
- function checkBrowsersToInstall(args) {
69
+ function defaultBrowsersToInstall(options) {
70
+ let executables = _server.registry.defaultExecutables();
71
+ if (options.noShell) executables = executables.filter(e => e.name !== 'chromium-headless-shell');
72
+ if (options.onlyShell) executables = executables.filter(e => e.name !== 'chromium');
73
+ return executables;
74
+ }
75
+ function checkBrowsersToInstall(args, options) {
76
+ if (options.noShell && options.onlyShell) throw new Error(`Only one of --no-shell and --only-shell can be specified`);
86
77
  const faultyArguments = [];
87
78
  const executables = [];
88
- for (const arg of args) {
79
+ const handleArgument = arg => {
89
80
  const executable = _server.registry.findExecutable(arg);
90
81
  if (!executable || executable.installType === 'none') faultyArguments.push(arg);else executables.push(executable);
82
+ if ((executable === null || executable === void 0 ? void 0 : executable.browserName) === 'chromium') executables.push(_server.registry.findExecutable('ffmpeg'));
83
+ };
84
+ for (const arg of args) {
85
+ if (arg === 'chromium') {
86
+ if (!options.onlyShell) handleArgument('chromium');
87
+ if (!options.noShell) handleArgument('chromium-headless-shell');
88
+ } else {
89
+ handleArgument(arg);
90
+ }
91
91
  }
92
+ if (process.platform === 'win32') executables.push(_server.registry.findExecutable('winldd'));
92
93
  if (faultyArguments.length) throw new Error(`Invalid installation targets: ${faultyArguments.map(name => `'${name}'`).join(', ')}. Expecting one of: ${suggestedBrowsersToInstall()}`);
93
94
  return executables;
94
95
  }
95
- _utilsBundle.program.command('install [browser...]').description('ensure browsers necessary for this version of Playwright are installed').option('--with-deps', 'install system dependencies for browsers').option('--dry-run', 'do not execute installation, only print information').option('--force', 'force reinstall of stable browser channels').action(async function (args, options) {
96
+ _utilsBundle.program.command('install [browser...]').description('ensure browsers necessary for this version of Playwright are installed').option('--with-deps', 'install system dependencies for browsers').option('--dry-run', 'do not execute installation, only print information').option('--force', 'force reinstall of stable browser channels').option('--only-shell', 'only install headless shell when installing chromium').option('--no-shell', 'do not install chromium headless shell').action(async function (args, options) {
97
+ // For '--no-shell' option, commander sets `shell: false` instead.
98
+ if (options.shell === false) options.noShell = true;
96
99
  if ((0, _utils.isLikelyNpxGlobal)()) {
97
- console.error((0, _utils.wrapInASCIIBox)([`WARNING: It looks like you are running 'npx playwright install' without first`, `installing your project's dependencies.`, ``, `To avoid unexpected behavior, please install your dependencies first, and`, `then run Playwright's install command:`, ``, ` npm install`, ` npx playwright install`, ``, `If your project does not yet depend on Playwright, first install the`, `applicable npm package (most commonly @playwright/test), and`, `then run Playwright's install command to download the browsers:`, ``, ` npm install @playwright/test`, ` npx playwright install`, ``].join('\n'), 1));
100
+ console.error((0, _ascii.wrapInASCIIBox)([`WARNING: It looks like you are running 'npx playwright install' without first`, `installing your project's dependencies.`, ``, `To avoid unexpected behavior, please install your dependencies first, and`, `then run Playwright's install command:`, ``, ` npm install`, ` npx playwright install`, ``, `If your project does not yet depend on Playwright, first install the`, `applicable npm package (most commonly @playwright/test), and`, `then run Playwright's install command to download the browsers:`, ``, ` npm install @playwright/test`, ` npx playwright install`, ``].join('\n'), 1));
98
101
  }
99
102
  try {
100
103
  const hasNoArguments = !args.length;
101
- const executables = hasNoArguments ? _server.registry.defaultExecutables() : checkBrowsersToInstall(args);
104
+ const executables = hasNoArguments ? defaultBrowsersToInstall(options) : checkBrowsersToInstall(args, options);
102
105
  if (options.withDeps) await _server.registry.installDeps(executables, !!options.dryRun);
103
106
  if (options.dryRun) {
104
107
  for (const executable of executables) {
@@ -146,7 +149,7 @@ _utilsBundle.program.command('uninstall').description('Removes browsers used by
146
149
  });
147
150
  _utilsBundle.program.command('install-deps [browser...]').description('install dependencies necessary to run browsers (will ask for sudo permissions)').option('--dry-run', 'Do not execute installation commands, only print them').action(async function (args, options) {
148
151
  try {
149
- if (!args.length) await _server.registry.installDeps(_server.registry.defaultExecutables(), !!options.dryRun);else await _server.registry.installDeps(checkBrowsersToInstall(args), !!options.dryRun);
152
+ if (!args.length) await _server.registry.installDeps(defaultBrowsersToInstall({}), !!options.dryRun);else await _server.registry.installDeps(checkBrowsersToInstall(args, {}), !!options.dryRun);
150
153
  } catch (e) {
151
154
  console.log(`Failed to install browser dependencies\n${e}`);
152
155
  (0, _utils.gracefullyProcessExitDoNotHang)(1);
@@ -203,9 +206,7 @@ _utilsBundle.program.command('run-driver', {
203
206
  }).action(function (options) {
204
207
  (0, _driver.runDriver)();
205
208
  });
206
- _utilsBundle.program.command('run-server', {
207
- hidden: true
208
- }).option('--port <port>', 'Server port').option('--host <host>', 'Server host').option('--path <path>', 'Endpoint Path', '/').option('--max-clients <maxClients>', 'Maximum clients').option('--mode <mode>', 'Server mode, either "default" or "extension"').action(function (options) {
209
+ _utilsBundle.program.command('run-server').option('--port <port>', 'Server port').option('--host <host>', 'Server host').option('--path <path>', 'Endpoint Path', '/').option('--max-clients <maxClients>', 'Maximum clients').option('--mode <mode>', 'Server mode, either "default" or "extension"').action(function (options) {
209
210
  (0, _driver.runServer)({
210
211
  port: options.port ? +options.port : undefined,
211
212
  host: options.host,
@@ -299,13 +300,14 @@ async function launchContext(options, extraOptions) {
299
300
  // Viewport size
300
301
  if (options.viewportSize) {
301
302
  try {
302
- const [width, height] = options.viewportSize.split(',').map(n => parseInt(n, 10));
303
+ const [width, height] = options.viewportSize.split(',').map(n => +n);
304
+ if (isNaN(width) || isNaN(height)) throw new Error('bad values');
303
305
  contextOptions.viewport = {
304
306
  width,
305
307
  height
306
308
  };
307
309
  } catch (e) {
308
- throw new Error('Invalid viewport size format: use "width, height", for example --viewport-size=800,600');
310
+ throw new Error('Invalid viewport size format: use "width,height", for example --viewport-size="800,600"');
309
311
  }
310
312
  }
311
313
 
@@ -365,9 +367,6 @@ async function launchContext(options, extraOptions) {
365
367
  // a temporary page and we call closeBrowser again when that page closes.
366
368
  if (closingBrowser) return;
367
369
  closingBrowser = true;
368
- if (options.saveTrace) await context.tracing.stop({
369
- path: options.saveTrace
370
- });
371
370
  if (options.saveStorage) await context.storageState({
372
371
  path: options.saveStorage
373
372
  }).catch(e => null);
@@ -390,10 +389,6 @@ async function launchContext(options, extraOptions) {
390
389
  const timeout = options.timeout ? parseInt(options.timeout, 10) : 0;
391
390
  context.setDefaultTimeout(timeout);
392
391
  context.setDefaultNavigationTimeout(timeout);
393
- if (options.saveTrace) await context.tracing.start({
394
- screenshots: true,
395
- snapshots: true
396
- });
397
392
 
398
393
  // Omit options that we add automatically for presentation purpose.
399
394
  delete launchOptions.headless;
@@ -413,7 +408,7 @@ async function openPage(context, url) {
413
408
  if (url) {
414
409
  if (_fs.default.existsSync(url)) url = 'file://' + _path.default.resolve(url);else if (!url.startsWith('http') && !url.startsWith('file://') && !url.startsWith('about:') && !url.startsWith('data:')) url = 'http://' + url;
415
410
  await page.goto(url).catch(error => {
416
- if (process.env.PWTEST_CLI_AUTO_EXIT_WHEN && (0, _errors.isTargetClosedError)(error)) {
411
+ if (process.env.PWTEST_CLI_AUTO_EXIT_WHEN) {
417
412
  // Tests with PWTEST_CLI_AUTO_EXIT_WHEN might close page too fast, resulting
418
413
  // in a stray navigation aborted error. We should ignore it.
419
414
  } else {
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "program", {
9
9
  return _program.program;
10
10
  }
11
11
  });
12
+ var _processLauncher = require("../server/utils/processLauncher");
12
13
  var _utils = require("../utils");
13
14
  var _program = require("./program");
14
15
  /**
@@ -60,7 +61,7 @@ function addExternalPlaywrightTestCommands() {
60
61
  playwrightTest.description(`${description} Available in @playwright/test package.`);
61
62
  playwrightTest.action(async () => {
62
63
  printPlaywrightTestError(command);
63
- (0, _utils.gracefullyProcessExitDoNotHang)(1);
64
+ (0, _processLauncher.gracefullyProcessExitDoNotHang)(1);
64
65
  });
65
66
  }
66
67
  }
@@ -4,18 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AndroidWebView = exports.AndroidSocket = exports.AndroidInput = exports.AndroidDevice = exports.Android = void 0;
7
- var _fs = _interopRequireDefault(require("fs"));
8
- var _utils = require("../utils");
9
- var _events = require("./events");
7
+ var _eventEmitter = require("./eventEmitter");
10
8
  var _browserContext = require("./browserContext");
11
9
  var _channelOwner = require("./channelOwner");
12
- var _timeoutSettings = require("../common/timeoutSettings");
13
- var _waiter = require("./waiter");
14
- var _events2 = require("events");
15
- var _connection = require("./connection");
16
10
  var _errors = require("./errors");
17
- var _timeoutRunner = require("../utils/timeoutRunner");
18
- let _Symbol$asyncDispose;
11
+ var _events = require("./events");
12
+ var _waiter = require("./waiter");
13
+ var _timeoutSettings = require("./timeoutSettings");
14
+ var _rtti = require("../utils/isomorphic/rtti");
15
+ var _time = require("../utils/isomorphic/time");
16
+ var _timeoutRunner = require("../utils/isomorphic/timeoutRunner");
17
+ var _webSocket = require("./webSocket");
19
18
  /**
20
19
  * Copyright (c) Microsoft Corporation.
21
20
  *
@@ -31,7 +30,7 @@ let _Symbol$asyncDispose;
31
30
  * See the License for the specific language governing permissions and
32
31
  * limitations under the License.
33
32
  */
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
+
35
34
  class Android extends _channelOwner.ChannelOwner {
36
35
  static from(android) {
37
36
  return android._object;
@@ -40,13 +39,15 @@ class Android extends _channelOwner.ChannelOwner {
40
39
  super(parent, type, guid, initializer);
41
40
  this._timeoutSettings = void 0;
42
41
  this._serverLauncher = void 0;
43
- this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
42
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform);
44
43
  }
45
44
  setDefaultTimeout(timeout) {
46
45
  this._timeoutSettings.setDefaultTimeout(timeout);
47
- this._channel.setDefaultTimeoutNoReply({
48
- timeout
49
- });
46
+ this._wrapApiCall(async () => {
47
+ await this._channel.setDefaultTimeoutNoReply({
48
+ timeout
49
+ });
50
+ }, true).catch(() => {});
50
51
  }
51
52
  async devices(options = {}) {
52
53
  const {
@@ -60,68 +61,44 @@ class Android extends _channelOwner.ChannelOwner {
60
61
  }
61
62
  async connect(wsEndpoint, options = {}) {
62
63
  return await this._wrapApiCall(async () => {
63
- const deadline = options.timeout ? (0, _utils.monotonicTime)() + options.timeout : 0;
64
+ const deadline = options.timeout ? (0, _time.monotonicTime)() + options.timeout : 0;
64
65
  const headers = {
65
66
  'x-playwright-browser': 'android',
66
67
  ...options.headers
67
68
  };
68
- const localUtils = this._connection.localUtils();
69
69
  const connectParams = {
70
70
  wsEndpoint,
71
71
  headers,
72
72
  slowMo: options.slowMo,
73
73
  timeout: options.timeout
74
74
  };
75
- const {
76
- pipe
77
- } = await localUtils._channel.connect(connectParams);
78
- const closePipe = () => pipe.close().catch(() => {});
79
- const connection = new _connection.Connection(localUtils, this._instrumentation);
80
- connection.markAsRemote();
81
- connection.on('close', closePipe);
75
+ const connection = await (0, _webSocket.connectOverWebSocket)(this._connection, connectParams);
82
76
  let device;
83
- let closeError;
84
- const onPipeClosed = () => {
77
+ connection.on('close', () => {
85
78
  var _device;
86
79
  (_device = device) === null || _device === void 0 || _device._didClose();
87
- connection.close(closeError);
88
- };
89
- pipe.on('closed', onPipeClosed);
90
- connection.onmessage = message => pipe.send({
91
- message
92
- }).catch(onPipeClosed);
93
- pipe.on('message', ({
94
- message
95
- }) => {
96
- try {
97
- connection.dispatch(message);
98
- } catch (e) {
99
- closeError = String(e);
100
- closePipe();
101
- }
102
80
  });
103
81
  const result = await (0, _timeoutRunner.raceAgainstDeadline)(async () => {
104
82
  const playwright = await connection.initializePlaywright();
105
83
  if (!playwright._initializer.preConnectedAndroidDevice) {
106
- closePipe();
84
+ connection.close();
107
85
  throw new Error('Malformed endpoint. Did you use Android.launchServer method?');
108
86
  }
109
87
  device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice);
110
88
  device._shouldCloseConnectionOnClose = true;
111
- device.on(_events.Events.AndroidDevice.Close, closePipe);
89
+ device.on(_events.Events.AndroidDevice.Close, () => connection.close());
112
90
  return device;
113
91
  }, deadline);
114
92
  if (!result.timedOut) {
115
93
  return result.result;
116
94
  } else {
117
- closePipe();
95
+ connection.close();
118
96
  throw new Error(`Timeout ${options.timeout}ms exceeded`);
119
97
  }
120
98
  });
121
99
  }
122
100
  }
123
101
  exports.Android = Android;
124
- _Symbol$asyncDispose = Symbol.asyncDispose;
125
102
  class AndroidDevice extends _channelOwner.ChannelOwner {
126
103
  static from(androidDevice) {
127
104
  return androidDevice._object;
@@ -133,7 +110,7 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
133
110
  this._shouldCloseConnectionOnClose = false;
134
111
  this.input = void 0;
135
112
  this.input = new AndroidInput(this);
136
- this._timeoutSettings = new _timeoutSettings.TimeoutSettings(parent._timeoutSettings);
113
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform, parent._timeoutSettings);
137
114
  this._channel.on('webViewAdded', ({
138
115
  webView
139
116
  }) => this._onWebViewAdded(webView));
@@ -154,9 +131,11 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
154
131
  }
155
132
  setDefaultTimeout(timeout) {
156
133
  this._timeoutSettings.setDefaultTimeout(timeout);
157
- this._channel.setDefaultTimeoutNoReply({
158
- timeout
159
- });
134
+ this._wrapApiCall(async () => {
135
+ await this._channel.setDefaultTimeoutNoReply({
136
+ timeout
137
+ });
138
+ }, true).catch(() => {});
160
139
  }
161
140
  serial() {
162
141
  return this._initializer.serial;
@@ -262,10 +241,10 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
262
241
  const {
263
242
  binary
264
243
  } = await this._channel.screenshot();
265
- if (options.path) await _fs.default.promises.writeFile(options.path, binary);
244
+ if (options.path) await this._platform.fs().promises.writeFile(options.path, binary);
266
245
  return binary;
267
246
  }
268
- async [_Symbol$asyncDispose]() {
247
+ async [Symbol.asyncDispose]() {
269
248
  await this.close();
270
249
  }
271
250
  async close() {
@@ -294,19 +273,19 @@ class AndroidDevice extends _channelOwner.ChannelOwner {
294
273
  }
295
274
  async installApk(file, options) {
296
275
  await this._channel.installApk({
297
- file: await loadFile(file),
276
+ file: await loadFile(this._platform, file),
298
277
  args: options && options.args
299
278
  });
300
279
  }
301
280
  async push(file, path, options) {
302
281
  await this._channel.push({
303
- file: await loadFile(file),
282
+ file: await loadFile(this._platform, file),
304
283
  path,
305
284
  mode: options ? options.mode : undefined
306
285
  });
307
286
  }
308
287
  async launchBrowser(options = {}) {
309
- const contextOptions = await (0, _browserContext.prepareBrowserContextParams)(options);
288
+ const contextOptions = await (0, _browserContext.prepareBrowserContextParams)(this._platform, options);
310
289
  const result = await this._channel.launchBrowser(contextOptions);
311
290
  const context = _browserContext.BrowserContext.from(result.context);
312
291
  context._setOptions(contextOptions, {});
@@ -350,8 +329,8 @@ class AndroidSocket extends _channelOwner.ChannelOwner {
350
329
  }
351
330
  }
352
331
  exports.AndroidSocket = AndroidSocket;
353
- async function loadFile(file) {
354
- if ((0, _utils.isString)(file)) return await _fs.default.promises.readFile(file);
332
+ async function loadFile(platform, file) {
333
+ if ((0, _rtti.isString)(file)) return await platform.fs().promises.readFile(file);
355
334
  return file;
356
335
  }
357
336
  class AndroidInput {
@@ -411,7 +390,7 @@ function toSelectorChannel(selector) {
411
390
  } = selector;
412
391
  const toRegex = value => {
413
392
  if (value === undefined) return undefined;
414
- if ((0, _utils.isRegExp)(value)) return value.source;
393
+ if ((0, _rtti.isRegExp)(value)) return value.source;
415
394
  return '^' + value.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d') + '$';
416
395
  };
417
396
  return {
@@ -439,9 +418,9 @@ function toSelectorChannel(selector) {
439
418
  selected
440
419
  };
441
420
  }
442
- class AndroidWebView extends _events2.EventEmitter {
421
+ class AndroidWebView extends _eventEmitter.EventEmitter {
443
422
  constructor(device, data) {
444
- super();
423
+ super(device._platform);
445
424
  this._device = void 0;
446
425
  this._data = void 0;
447
426
  this._pagePromise = void 0;
@@ -4,12 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Artifact = void 0;
7
- var fs = _interopRequireWildcard(require("fs"));
8
- var _stream = require("./stream");
9
- var _fileUtils = require("../utils/fileUtils");
10
7
  var _channelOwner = require("./channelOwner");
11
- 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); }
12
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
8
+ var _stream = require("./stream");
9
+ var _fileUtils = require("./fileUtils");
13
10
  /**
14
11
  * Copyright (c) Microsoft Corporation.
15
12
  *
@@ -43,9 +40,9 @@ class Artifact extends _channelOwner.ChannelOwner {
43
40
  }
44
41
  const result = await this._channel.saveAsStream();
45
42
  const stream = _stream.Stream.from(result.stream);
46
- await (0, _fileUtils.mkdirIfNeeded)(path);
43
+ await (0, _fileUtils.mkdirIfNeeded)(this._platform, path);
47
44
  await new Promise((resolve, reject) => {
48
- stream.stream().pipe(fs.createWriteStream(path)).on('finish', resolve).on('error', reject);
45
+ stream.stream().pipe(this._platform.fs().createWriteStream(path)).on('finish', resolve).on('error', reject);
49
46
  });
50
47
  }
51
48
  async failure() {
@@ -4,15 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Browser = void 0;
7
- var _fs = _interopRequireDefault(require("fs"));
7
+ var _artifact = require("./artifact");
8
8
  var _browserContext = require("./browserContext");
9
+ var _cdpSession = require("./cdpSession");
9
10
  var _channelOwner = require("./channelOwner");
10
- var _events = require("./events");
11
11
  var _errors = require("./errors");
12
- var _cdpSession = require("./cdpSession");
13
- var _artifact = require("./artifact");
14
- var _utils = require("../utils");
15
- let _Symbol$asyncDispose;
12
+ var _events = require("./events");
13
+ var _fileUtils = require("./fileUtils");
16
14
  /**
17
15
  * Copyright (c) Microsoft Corporation.
18
16
  *
@@ -28,8 +26,7 @@ let _Symbol$asyncDispose;
28
26
  * See the License for the specific language governing permissions and
29
27
  * limitations under the License.
30
28
  */
31
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
- _Symbol$asyncDispose = Symbol.asyncDispose;
29
+
33
30
  class Browser extends _channelOwner.ChannelOwner {
34
31
  static from(browser) {
35
32
  return browser._object;
@@ -44,8 +41,6 @@ class Browser extends _channelOwner.ChannelOwner {
44
41
  this._options = {};
45
42
  this._name = void 0;
46
43
  this._path = void 0;
47
- // Used from @playwright/test fixtures.
48
- this._connectHeaders = void 0;
49
44
  this._closeReason = void 0;
50
45
  this._name = initializer.name;
51
46
  this._channel.on('close', () => this._didClose());
@@ -76,10 +71,10 @@ class Browser extends _channelOwner.ChannelOwner {
76
71
  }
77
72
  async _innerNewContext(options = {}, forReuse) {
78
73
  options = {
79
- ...this._browserType._defaultContextOptions,
74
+ ...this._browserType._playwright._defaultContextOptions,
80
75
  ...options
81
76
  };
82
- const contextOptions = await (0, _browserContext.prepareBrowserContextParams)(options);
77
+ const contextOptions = await (0, _browserContext.prepareBrowserContextParams)(this._platform, options);
83
78
  const response = forReuse ? await this._channel.newContextForReuse(contextOptions) : await this._channel.newContext(contextOptions);
84
79
  const context = _browserContext.BrowserContext.from(response.context);
85
80
  await this._browserType._didCreateContext(context, contextOptions, this._options, options.logger || this._logger);
@@ -118,13 +113,13 @@ class Browser extends _channelOwner.ChannelOwner {
118
113
  const buffer = await artifact.readIntoBuffer();
119
114
  await artifact.delete();
120
115
  if (this._path) {
121
- await (0, _utils.mkdirIfNeeded)(this._path);
122
- await _fs.default.promises.writeFile(this._path, buffer);
116
+ await (0, _fileUtils.mkdirIfNeeded)(this._platform, this._path);
117
+ await this._platform.fs().promises.writeFile(this._path, buffer);
123
118
  this._path = undefined;
124
119
  }
125
120
  return buffer;
126
121
  }
127
- async [_Symbol$asyncDispose]() {
122
+ async [Symbol.asyncDispose]() {
128
123
  await this.close();
129
124
  }
130
125
  async close(options = {}) {