@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.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 (376) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/browsers.json +16 -14
  3. package/index.js +1 -1
  4. package/lib/androidServerImpl.js +47 -50
  5. package/lib/browserServerImpl.js +89 -69
  6. package/lib/checkly/escapeRegExp.js +23 -27
  7. package/lib/checkly/fetch.js +64 -46
  8. package/lib/checkly/secretsFilter.js +49 -35
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +400 -359
  11. package/lib/cli/programWithTestStub.js +51 -45
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +151 -242
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -36
  16. package/lib/client/browser.js +96 -71
  17. package/lib/client/browserContext.js +314 -345
  18. package/lib/client/browserType.js +103 -127
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +90 -113
  21. package/lib/client/clientHelper.js +48 -39
  22. package/lib/client/clientInstrumentation.js +40 -37
  23. package/lib/client/clientStackTrace.js +41 -37
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +188 -214
  26. package/lib/client/consoleMessage.js +31 -28
  27. package/lib/client/coverage.js +25 -22
  28. package/lib/client/dialog.js +30 -31
  29. package/lib/client/download.js +25 -25
  30. package/lib/client/electron.js +80 -77
  31. package/lib/client/elementHandle.js +120 -159
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +124 -121
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +166 -190
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +31 -28
  38. package/lib/client/frame.js +207 -306
  39. package/lib/client/harRouter.js +42 -52
  40. package/lib/client/input.js +42 -69
  41. package/lib/client/jsHandle.js +54 -69
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +29 -29
  44. package/lib/client/locator.js +145 -237
  45. package/lib/client/network.js +282 -307
  46. package/lib/client/page.js +269 -318
  47. package/lib/client/platform.js +46 -43
  48. package/lib/client/playwright.js +51 -76
  49. package/lib/client/selectors.js +45 -63
  50. package/lib/client/stream.js +29 -25
  51. package/lib/client/timeoutSettings.js +55 -41
  52. package/lib/client/tracing.js +49 -96
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +69 -88
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +43 -56
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +27 -23
  60. package/lib/generated/bindingsControllerSource.js +28 -0
  61. package/lib/generated/clockSource.js +26 -6
  62. package/lib/generated/consoleApiSource.js +26 -6
  63. package/lib/generated/injectedScriptSource.js +26 -6
  64. package/lib/generated/pollingRecorderSource.js +26 -6
  65. package/lib/generated/storageScriptSource.js +28 -0
  66. package/lib/generated/utilityScriptSource.js +26 -6
  67. package/lib/generated/webSocketMockSource.js +333 -5
  68. package/lib/inProcessFactory.js +51 -53
  69. package/lib/inprocess.js +2 -19
  70. package/lib/outofprocess.js +51 -46
  71. package/lib/protocol/serializers.js +153 -134
  72. package/lib/protocol/validator.js +2807 -2739
  73. package/lib/protocol/validatorPrimitives.js +114 -73
  74. package/lib/remote/playwrightConnection.js +88 -242
  75. package/lib/remote/playwrightServer.js +305 -92
  76. package/lib/server/accessibility.js +44 -37
  77. package/lib/server/android/android.js +251 -241
  78. package/lib/server/android/backendAdb.js +87 -82
  79. package/lib/server/artifact.js +78 -55
  80. package/lib/server/bidi/bidiBrowser.js +297 -158
  81. package/lib/server/bidi/bidiChromium.js +119 -89
  82. package/lib/server/bidi/bidiConnection.js +66 -83
  83. package/lib/server/bidi/bidiExecutionContext.js +129 -113
  84. package/lib/server/bidi/bidiFirefox.js +86 -76
  85. package/lib/server/bidi/bidiInput.js +106 -117
  86. package/lib/server/bidi/bidiNetworkManager.js +142 -159
  87. package/lib/server/bidi/bidiOverCdp.js +57 -58
  88. package/lib/server/bidi/bidiPage.js +260 -260
  89. package/lib/server/bidi/bidiPdf.js +52 -86
  90. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  91. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  92. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  93. package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
  94. package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
  95. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  96. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  97. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  98. package/lib/server/browser.js +93 -95
  99. package/lib/server/browserContext.js +419 -429
  100. package/lib/server/browserType.js +186 -216
  101. package/lib/server/callLog.js +47 -44
  102. package/lib/server/chromium/chromium.js +235 -203
  103. package/lib/server/chromium/chromiumSwitches.js +100 -67
  104. package/lib/server/chromium/crAccessibility.js +157 -131
  105. package/lib/server/chromium/crBrowser.js +310 -292
  106. package/lib/server/chromium/crConnection.js +95 -121
  107. package/lib/server/chromium/crCoverage.js +121 -131
  108. package/lib/server/chromium/crDevTools.js +60 -51
  109. package/lib/server/chromium/crDragDrop.js +68 -84
  110. package/lib/server/chromium/crExecutionContext.js +89 -83
  111. package/lib/server/chromium/crInput.js +118 -113
  112. package/lib/server/chromium/crNetworkManager.js +274 -375
  113. package/lib/server/chromium/crPage.js +536 -593
  114. package/lib/server/chromium/crPdf.js +54 -86
  115. package/lib/server/chromium/crProtocolHelper.js +92 -80
  116. package/lib/server/chromium/crServiceWorker.js +84 -73
  117. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  118. package/lib/server/chromium/protocol.d.js +16 -0
  119. package/lib/server/chromium/videoRecorder.js +66 -99
  120. package/lib/server/clock.js +107 -83
  121. package/lib/server/codegen/csharp.js +192 -162
  122. package/lib/server/codegen/java.js +156 -129
  123. package/lib/server/codegen/javascript.js +163 -148
  124. package/lib/server/codegen/jsonl.js +32 -28
  125. package/lib/server/codegen/language.js +75 -52
  126. package/lib/server/codegen/languages.js +65 -27
  127. package/lib/server/codegen/python.js +141 -126
  128. package/lib/server/codegen/types.js +15 -4
  129. package/lib/server/console.js +28 -32
  130. package/lib/server/cookieStore.js +108 -86
  131. package/lib/server/debugController.js +147 -151
  132. package/lib/server/debugger.js +86 -78
  133. package/lib/server/deviceDescriptors.js +37 -24
  134. package/lib/server/deviceDescriptorsSource.json +238 -128
  135. package/lib/server/dialog.js +84 -39
  136. package/lib/server/dispatchers/androidDispatcher.js +257 -148
  137. package/lib/server/dispatchers/artifactDispatcher.js +79 -79
  138. package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
  139. package/lib/server/dispatchers/browserDispatcher.js +96 -148
  140. package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
  141. package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
  142. package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
  143. package/lib/server/dispatchers/dialogDispatcher.js +34 -31
  144. package/lib/server/dispatchers/dispatcher.js +208 -248
  145. package/lib/server/dispatchers/electronDispatcher.js +66 -70
  146. package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
  147. package/lib/server/dispatchers/frameDispatcher.js +211 -272
  148. package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
  149. package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
  150. package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
  151. package/lib/server/dispatchers/networkDispatchers.js +117 -128
  152. package/lib/server/dispatchers/pageDispatcher.js +256 -248
  153. package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
  154. package/lib/server/dispatchers/streamDispatcher.js +52 -48
  155. package/lib/server/dispatchers/tracingDispatcher.js +47 -52
  156. package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
  157. package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
  158. package/lib/server/dom.js +485 -582
  159. package/lib/server/download.js +47 -37
  160. package/lib/server/electron/electron.js +216 -243
  161. package/lib/server/electron/loader.js +9 -37
  162. package/lib/server/errors.js +47 -46
  163. package/lib/server/fetch.js +317 -360
  164. package/lib/server/fileChooser.js +25 -24
  165. package/lib/server/fileUploadUtils.js +66 -60
  166. package/lib/server/firefox/ffAccessibility.js +153 -131
  167. package/lib/server/firefox/ffBrowser.js +268 -305
  168. package/lib/server/firefox/ffConnection.js +63 -84
  169. package/lib/server/firefox/ffExecutionContext.js +92 -73
  170. package/lib/server/firefox/ffInput.js +82 -84
  171. package/lib/server/firefox/ffNetworkManager.js +137 -114
  172. package/lib/server/firefox/ffPage.js +261 -293
  173. package/lib/server/firefox/firefox.js +80 -72
  174. package/lib/server/firefox/protocol.d.js +16 -0
  175. package/lib/server/formData.js +107 -35
  176. package/lib/server/frameSelectors.js +98 -114
  177. package/lib/server/frames.js +845 -1055
  178. package/lib/server/har/harRecorder.js +85 -77
  179. package/lib/server/har/harTracer.js +290 -223
  180. package/lib/server/harBackend.js +80 -80
  181. package/lib/server/helper.js +55 -59
  182. package/lib/server/index.js +59 -99
  183. package/lib/server/input.js +151 -189
  184. package/lib/server/instrumentation.js +57 -44
  185. package/lib/server/javascript.js +133 -134
  186. package/lib/server/launchApp.js +113 -75
  187. package/lib/server/localUtils.js +150 -142
  188. package/lib/server/macEditingCommands.js +141 -137
  189. package/lib/server/network.js +299 -303
  190. package/lib/server/page.js +513 -544
  191. package/lib/server/pipeTransport.js +49 -45
  192. package/lib/server/playwright.js +58 -67
  193. package/lib/server/progress.js +137 -68
  194. package/lib/server/protocolError.js +34 -31
  195. package/lib/server/recorder/chat.js +70 -86
  196. package/lib/server/recorder/recorderApp.js +341 -176
  197. package/lib/server/recorder/recorderInTraceViewer.js +65 -94
  198. package/lib/server/recorder/recorderRunner.js +93 -116
  199. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  200. package/lib/server/recorder/recorderUtils.js +104 -47
  201. package/lib/server/recorder/throttledFile.js +42 -30
  202. package/lib/server/recorder.js +395 -275
  203. package/lib/server/registry/browserFetcher.js +106 -101
  204. package/lib/server/registry/dependencies.js +245 -196
  205. package/lib/server/registry/index.js +930 -803
  206. package/lib/server/registry/nativeDeps.js +1073 -464
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +160 -191
  209. package/lib/server/selectors.js +90 -51
  210. package/lib/server/socksClientCertificatesInterceptor.js +171 -186
  211. package/lib/server/socksInterceptor.js +62 -70
  212. package/lib/server/trace/recorder/snapshotter.js +76 -102
  213. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  214. package/lib/server/trace/recorder/tracing.js +354 -362
  215. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  216. package/lib/server/trace/viewer/traceViewer.js +160 -147
  217. package/lib/server/transport.js +119 -134
  218. package/lib/server/types.js +26 -22
  219. package/lib/server/usKeyboardLayout.js +135 -545
  220. package/lib/server/utils/ascii.js +39 -26
  221. package/lib/server/utils/comparators.js +105 -103
  222. package/lib/server/utils/crypto.js +157 -112
  223. package/lib/server/utils/debug.js +36 -32
  224. package/lib/server/utils/debugLogger.js +77 -48
  225. package/lib/server/utils/env.js +52 -37
  226. package/lib/server/utils/eventsHelper.js +29 -28
  227. package/lib/server/utils/expectUtils.js +31 -26
  228. package/lib/server/utils/fileUtils.js +123 -136
  229. package/lib/server/utils/happyEyeballs.js +141 -126
  230. package/lib/server/utils/hostPlatform.js +84 -120
  231. package/lib/server/utils/httpServer.js +106 -121
  232. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  233. package/lib/server/utils/image_tools/compare.js +44 -43
  234. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  235. package/lib/server/utils/image_tools/stats.js +40 -40
  236. package/lib/server/utils/linuxUtils.js +50 -37
  237. package/lib/server/utils/network.js +152 -96
  238. package/lib/server/utils/nodePlatform.js +87 -79
  239. package/lib/server/utils/pipeTransport.js +44 -42
  240. package/lib/server/utils/processLauncher.js +111 -121
  241. package/lib/server/utils/profiler.js +52 -39
  242. package/lib/server/utils/socksProxy.js +280 -339
  243. package/lib/server/utils/spawnAsync.js +37 -41
  244. package/lib/server/utils/task.js +31 -38
  245. package/lib/server/utils/userAgent.js +73 -66
  246. package/lib/server/utils/wsServer.js +68 -75
  247. package/lib/server/utils/zipFile.js +36 -37
  248. package/lib/server/utils/zones.js +37 -34
  249. package/lib/server/webkit/protocol.d.js +16 -0
  250. package/lib/server/webkit/webkit.js +77 -61
  251. package/lib/server/webkit/wkAccessibility.js +161 -118
  252. package/lib/server/webkit/wkBrowser.js +193 -184
  253. package/lib/server/webkit/wkConnection.js +59 -83
  254. package/lib/server/webkit/wkExecutionContext.js +85 -70
  255. package/lib/server/webkit/wkInput.js +97 -95
  256. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  257. package/lib/server/webkit/wkPage.js +568 -667
  258. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  259. package/lib/server/webkit/wkWorkers.js +79 -79
  260. package/lib/utils/expectUtils.js +31 -26
  261. package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
  262. package/lib/utils/isomorphic/assert.js +28 -22
  263. package/lib/utils/isomorphic/colors.js +66 -59
  264. package/lib/utils/isomorphic/cssParser.js +120 -125
  265. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  266. package/lib/utils/isomorphic/headers.js +38 -37
  267. package/lib/utils/isomorphic/locatorGenerators.js +358 -357
  268. package/lib/utils/isomorphic/locatorParser.js +96 -105
  269. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  270. package/lib/utils/isomorphic/manualPromise.js +46 -39
  271. package/lib/utils/isomorphic/mimeType.js +447 -25
  272. package/lib/utils/isomorphic/multimap.js +34 -27
  273. package/lib/utils/isomorphic/protocolFormatter.js +68 -0
  274. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  275. package/lib/utils/isomorphic/recorderUtils.js +140 -181
  276. package/lib/utils/isomorphic/rtti.js +35 -33
  277. package/lib/utils/isomorphic/selectorParser.js +182 -193
  278. package/lib/utils/isomorphic/semaphore.js +27 -24
  279. package/lib/utils/isomorphic/stackTrace.js +87 -98
  280. package/lib/utils/isomorphic/stringUtils.js +98 -112
  281. package/lib/utils/isomorphic/time.js +46 -22
  282. package/lib/utils/isomorphic/timeoutRunner.js +53 -53
  283. package/lib/utils/isomorphic/traceUtils.js +37 -41
  284. package/lib/utils/isomorphic/types.js +15 -4
  285. package/lib/utils/isomorphic/urlMatch.js +113 -67
  286. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  287. package/lib/utils.js +101 -443
  288. package/lib/utilsBundle.js +101 -52
  289. package/lib/utilsBundleImpl/index.js +160 -150
  290. package/lib/zipBundle.js +32 -23
  291. package/lib/zipBundleImpl.js +4 -4
  292. package/package.json +1 -1
  293. package/types/protocol.d.ts +1267 -1057
  294. package/types/types.d.ts +131 -29
  295. package/lib/common/socksProxy.js +0 -569
  296. package/lib/common/timeoutSettings.js +0 -73
  297. package/lib/common/types.js +0 -5
  298. package/lib/image_tools/colorUtils.js +0 -98
  299. package/lib/image_tools/compare.js +0 -108
  300. package/lib/image_tools/imageChannel.js +0 -70
  301. package/lib/image_tools/stats.js +0 -102
  302. package/lib/protocol/debug.js +0 -27
  303. package/lib/protocol/transport.js +0 -82
  304. package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
  305. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  306. package/lib/server/recorder/contextRecorder.js +0 -290
  307. package/lib/server/recorder/recorderCollection.js +0 -104
  308. package/lib/server/recorder/recorderFrontend.js +0 -5
  309. package/lib/server/storageScript.js +0 -160
  310. package/lib/server/timeoutSettings.js +0 -74
  311. package/lib/third_party/diff_match_patch.js +0 -2222
  312. package/lib/utils/ascii.js +0 -31
  313. package/lib/utils/comparators.js +0 -171
  314. package/lib/utils/crypto.js +0 -174
  315. package/lib/utils/debug.js +0 -46
  316. package/lib/utils/debugLogger.js +0 -91
  317. package/lib/utils/env.js +0 -49
  318. package/lib/utils/eventsHelper.js +0 -38
  319. package/lib/utils/fileUtils.js +0 -205
  320. package/lib/utils/happy-eyeballs.js +0 -210
  321. package/lib/utils/headers.js +0 -52
  322. package/lib/utils/hostPlatform.js +0 -133
  323. package/lib/utils/httpServer.js +0 -237
  324. package/lib/utils/index.js +0 -368
  325. package/lib/utils/linuxUtils.js +0 -78
  326. package/lib/utils/manualPromise.js +0 -109
  327. package/lib/utils/multimap.js +0 -75
  328. package/lib/utils/network.js +0 -160
  329. package/lib/utils/processLauncher.js +0 -248
  330. package/lib/utils/profiler.js +0 -53
  331. package/lib/utils/rtti.js +0 -44
  332. package/lib/utils/semaphore.js +0 -51
  333. package/lib/utils/spawnAsync.js +0 -45
  334. package/lib/utils/stackTrace.js +0 -121
  335. package/lib/utils/task.js +0 -58
  336. package/lib/utils/time.js +0 -37
  337. package/lib/utils/timeoutRunner.js +0 -66
  338. package/lib/utils/traceUtils.js +0 -44
  339. package/lib/utils/userAgent.js +0 -105
  340. package/lib/utils/wsServer.js +0 -127
  341. package/lib/utils/zipFile.js +0 -75
  342. package/lib/utils/zones.js +0 -62
  343. package/lib/vite/htmlReport/index.html +0 -69
  344. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
  345. package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
  346. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  347. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  348. package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
  349. package/lib/vite/recorder/index.html +0 -29
  350. package/lib/vite/recorder/playwright-logo.svg +0 -9
  351. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
  352. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
  353. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
  354. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
  355. package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
  356. package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
  357. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  358. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
  359. package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
  360. package/lib/vite/traceViewer/embedded.html +0 -18
  361. package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
  362. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  363. package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
  364. package/lib/vite/traceViewer/index.html +0 -47
  365. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
  366. package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  367. package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
  368. package/lib/vite/traceViewer/recorder.html +0 -17
  369. package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
  370. package/lib/vite/traceViewer/snapshot.html +0 -21
  371. package/lib/vite/traceViewer/sw.bundle.js +0 -3
  372. package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
  373. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
  374. package/lib/vite/traceViewer/uiMode.html +0 -21
  375. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
  376. package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
@@ -1,233 +1,230 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chromium_exports = {};
30
+ __export(chromium_exports, {
31
+ Chromium: () => Chromium,
32
+ waitForReadyState: () => waitForReadyState
5
33
  });
6
- exports.Chromium = void 0;
7
- var _fs = _interopRequireDefault(require("fs"));
8
- var _os = _interopRequireDefault(require("os"));
9
- var _path = _interopRequireDefault(require("path"));
10
- var _chromiumSwitches = require("./chromiumSwitches");
11
- var _crBrowser = require("./crBrowser");
12
- var _crConnection = require("./crConnection");
13
- var _timeoutSettings = require("../timeoutSettings");
14
- var _utils = require("../../utils");
15
- var _ascii = require("../utils/ascii");
16
- var _debugLogger = require("../utils/debugLogger");
17
- var _manualPromise = require("../../utils/isomorphic/manualPromise");
18
- var _network = require("../utils/network");
19
- var _userAgent = require("../utils/userAgent");
20
- var _browserContext = require("../browserContext");
21
- var _browserType = require("../browserType");
22
- var _helper = require("../helper");
23
- var _registry = require("../registry");
24
- var _transport = require("../transport");
25
- var _crDevTools = require("./crDevTools");
26
- var _browser = require("../browser");
27
- var _fileUtils = require("../utils/fileUtils");
28
- var _processLauncher = require("../utils/processLauncher");
29
- var _progress = require("../progress");
30
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
31
- /**
32
- * Copyright 2017 Google Inc. All rights reserved.
33
- * Modifications copyright (c) Microsoft Corporation.
34
- *
35
- * Licensed under the Apache License, Version 2.0 (the "License");
36
- * you may not use this file except in compliance with the License.
37
- * You may obtain a copy of the License at
38
- *
39
- * http://www.apache.org/licenses/LICENSE-2.0
40
- *
41
- * Unless required by applicable law or agreed to in writing, software
42
- * distributed under the License is distributed on an "AS IS" BASIS,
43
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44
- * See the License for the specific language governing permissions and
45
- * limitations under the License.
46
- */
47
-
48
- const ARTIFACTS_FOLDER = _path.default.join(_os.default.tmpdir(), 'playwright-artifacts-');
49
- class Chromium extends _browserType.BrowserType {
34
+ module.exports = __toCommonJS(chromium_exports);
35
+ var import_fs = __toESM(require("fs"));
36
+ var import_os = __toESM(require("os"));
37
+ var import_path = __toESM(require("path"));
38
+ var import_chromiumSwitches = require("./chromiumSwitches");
39
+ var import_crBrowser = require("./crBrowser");
40
+ var import_crConnection = require("./crConnection");
41
+ var import_utils = require("../../utils");
42
+ var import_ascii = require("../utils/ascii");
43
+ var import_debugLogger = require("../utils/debugLogger");
44
+ var import_manualPromise = require("../../utils/isomorphic/manualPromise");
45
+ var import_network = require("../utils/network");
46
+ var import_userAgent = require("../utils/userAgent");
47
+ var import_browserContext = require("../browserContext");
48
+ var import_browserType = require("../browserType");
49
+ var import_helper = require("../helper");
50
+ var import_registry = require("../registry");
51
+ var import_transport = require("../transport");
52
+ var import_crDevTools = require("./crDevTools");
53
+ var import_browser = require("../browser");
54
+ var import_fileUtils = require("../utils/fileUtils");
55
+ var import_processLauncher = require("../utils/processLauncher");
56
+ const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
57
+ class Chromium extends import_browserType.BrowserType {
50
58
  constructor(parent) {
51
- super(parent, 'chromium');
52
- this._devtools = void 0;
53
- if ((0, _utils.debugMode)()) this._devtools = this._createDevTools();
59
+ super(parent, "chromium");
60
+ if ((0, import_utils.debugMode)())
61
+ this._devtools = this._createDevTools();
54
62
  }
55
- async connectOverCDP(metadata, endpointURL, options, timeout) {
56
- const controller = new _progress.ProgressController(metadata, this);
57
- controller.setLogName('browser');
58
- return controller.run(async progress => {
59
- return await this._connectOverCDPInternal(progress, endpointURL, options);
60
- }, _timeoutSettings.TimeoutSettings.timeout({
61
- timeout
62
- }));
63
+ async connectOverCDP(progress, endpointURL, options) {
64
+ return await this._connectOverCDPInternal(progress, endpointURL, options);
63
65
  }
64
66
  async _connectOverCDPInternal(progress, endpointURL, options, onClose) {
65
67
  let headersMap;
66
- if (options.headers) headersMap = (0, _utils.headersArrayToObject)(options.headers, false);
67
- if (!headersMap) headersMap = {
68
- 'User-Agent': (0, _userAgent.getUserAgent)()
69
- };else if (headersMap && !Object.keys(headersMap).some(key => key.toLowerCase() === 'user-agent')) headersMap['User-Agent'] = (0, _userAgent.getUserAgent)();
70
- const artifactsDir = await _fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
68
+ if (options.headers)
69
+ headersMap = (0, import_utils.headersArrayToObject)(options.headers, false);
70
+ if (!headersMap)
71
+ headersMap = { "User-Agent": (0, import_userAgent.getUserAgent)() };
72
+ else if (headersMap && !Object.keys(headersMap).some((key) => key.toLowerCase() === "user-agent"))
73
+ headersMap["User-Agent"] = (0, import_userAgent.getUserAgent)();
74
+ const artifactsDir = await progress.race(import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER));
71
75
  const wsEndpoint = await urlToWSEndpoint(progress, endpointURL, headersMap);
72
- progress.throwIfAborted();
73
- const chromeTransport = await _transport.WebSocketTransport.connect(progress, wsEndpoint, headersMap);
74
- const cleanedUp = new _manualPromise.ManualPromise();
76
+ const chromeTransport = await import_transport.WebSocketTransport.connect(progress, wsEndpoint, { headers: headersMap });
77
+ progress.cleanupWhenAborted(() => chromeTransport.close());
78
+ const cleanedUp = new import_manualPromise.ManualPromise();
75
79
  const doCleanup = async () => {
76
- await (0, _fileUtils.removeFolders)([artifactsDir]);
77
- await (onClose === null || onClose === void 0 ? void 0 : onClose());
80
+ await (0, import_fileUtils.removeFolders)([artifactsDir]);
81
+ await onClose?.();
78
82
  cleanedUp.resolve();
79
83
  };
80
84
  const doClose = async () => {
81
85
  await chromeTransport.closeAndWait();
82
86
  await cleanedUp;
83
87
  };
84
- const browserProcess = {
85
- close: doClose,
86
- kill: doClose
87
- };
88
- const persistent = {
89
- noDefaultViewport: true
90
- };
88
+ const browserProcess = { close: doClose, kill: doClose };
89
+ const persistent = { noDefaultViewport: true };
91
90
  const browserOptions = {
92
91
  slowMo: options.slowMo,
93
- name: 'chromium',
92
+ name: "chromium",
94
93
  isChromium: true,
95
94
  persistent,
96
95
  browserProcess,
97
- protocolLogger: _helper.helper.debugProtocolLogger(),
98
- browserLogsCollector: new _debugLogger.RecentLogsCollector(),
96
+ protocolLogger: import_helper.helper.debugProtocolLogger(),
97
+ browserLogsCollector: new import_debugLogger.RecentLogsCollector(),
99
98
  artifactsDir,
100
99
  downloadsPath: options.downloadsPath || artifactsDir,
101
100
  tracesDir: options.tracesDir || artifactsDir,
102
101
  originalLaunchOptions: {}
103
102
  };
104
- (0, _browserContext.validateBrowserContextOptions)(persistent, browserOptions);
105
- progress.throwIfAborted();
106
- const browser = await _crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);
103
+ (0, import_browserContext.validateBrowserContextOptions)(persistent, browserOptions);
104
+ const browser = await progress.race(import_crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions));
107
105
  browser._isCollocatedWithServer = false;
108
- browser.on(_browser.Browser.Events.Disconnected, doCleanup);
106
+ browser.on(import_browser.Browser.Events.Disconnected, doCleanup);
109
107
  return browser;
110
108
  }
111
109
  _createDevTools() {
112
- // TODO: this is totally wrong when using channels.
113
- const directory = _registry.registry.findExecutable('chromium').directory;
114
- return directory ? new _crDevTools.CRDevTools(_path.default.join(directory, 'devtools-preferences.json')) : undefined;
110
+ const directory = import_registry.registry.findExecutable("chromium").directory;
111
+ return directory ? new import_crDevTools.CRDevTools(import_path.default.join(directory, "devtools-preferences.json")) : void 0;
115
112
  }
116
- async connectToTransport(transport, options) {
113
+ async connectToTransport(transport, options, browserLogsCollector) {
117
114
  let devtools = this._devtools;
118
115
  if (options.__testHookForDevTools) {
119
116
  devtools = this._createDevTools();
120
117
  await options.__testHookForDevTools(devtools);
121
118
  }
122
- return _crBrowser.CRBrowser.connect(this.attribution.playwright, transport, options, devtools);
119
+ try {
120
+ return await import_crBrowser.CRBrowser.connect(this.attribution.playwright, transport, options, devtools);
121
+ } catch (e) {
122
+ if (browserLogsCollector.recentLogs().some((log) => log.includes("Failed to create a ProcessSingleton for your profile directory."))) {
123
+ throw new Error(
124
+ "Failed to create a ProcessSingleton for your profile directory. This usually means that the profile is already in use by another instance of Chromium."
125
+ );
126
+ }
127
+ throw e;
128
+ }
123
129
  }
124
130
  doRewriteStartupLog(error) {
125
- if (!error.logs) return error;
126
- if (error.logs.includes('Missing X server')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
127
- // These error messages are taken from Chromium source code as of July, 2020:
128
- // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc
129
- if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180')) return error;
130
- error.logs = [`Chromium sandboxing failed!`, `================================`, `To avoid the sandboxing issue, do either of the following:`, ` - (preferred): Configure your environment to support sandboxing`, ` - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`, `================================`, ``].join('\n');
131
+ if (!error.logs)
132
+ return error;
133
+ if (error.logs.includes("Missing X server"))
134
+ error.logs = "\n" + (0, import_ascii.wrapInASCIIBox)(import_browserType.kNoXServerRunningError, 1);
135
+ if (!error.logs.includes("crbug.com/357670") && !error.logs.includes("No usable sandbox!") && !error.logs.includes("crbug.com/638180"))
136
+ return error;
137
+ error.logs = [
138
+ `Chromium sandboxing failed!`,
139
+ `================================`,
140
+ `To avoid the sandboxing issue, do either of the following:`,
141
+ ` - (preferred): Configure your environment to support sandboxing`,
142
+ ` - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`,
143
+ `================================`,
144
+ ``
145
+ ].join("\n");
131
146
  return error;
132
147
  }
133
- amendEnvironment(env, userDataDir, executable, browserArguments) {
148
+ amendEnvironment(env) {
134
149
  return env;
135
150
  }
136
151
  attemptToGracefullyCloseBrowser(transport) {
137
- const message = {
138
- method: 'Browser.close',
139
- id: _crConnection.kBrowserCloseMessageId,
140
- params: {}
141
- };
152
+ const message = { method: "Browser.close", id: import_crConnection.kBrowserCloseMessageId, params: {} };
142
153
  transport.send(message);
143
154
  }
144
155
  async _launchWithSeleniumHub(progress, hubUrl, options) {
145
- await this._createArtifactDirs(options);
146
- if (!hubUrl.endsWith('/')) hubUrl = hubUrl + '/';
156
+ await progress.race(this._createArtifactDirs(options));
157
+ if (!hubUrl.endsWith("/"))
158
+ hubUrl = hubUrl + "/";
147
159
  const args = this._innerDefaultArgs(options);
148
- args.push('--remote-debugging-port=0');
149
- const isEdge = options.channel && options.channel.startsWith('msedge');
160
+ args.push("--remote-debugging-port=0");
161
+ const isEdge = options.channel && options.channel.startsWith("msedge");
150
162
  let desiredCapabilities = {
151
- 'browserName': isEdge ? 'MicrosoftEdge' : 'chrome',
152
- [isEdge ? 'ms:edgeOptions' : 'goog:chromeOptions']: {
153
- args
154
- }
163
+ "browserName": isEdge ? "MicrosoftEdge" : "chrome",
164
+ [isEdge ? "ms:edgeOptions" : "goog:chromeOptions"]: { args }
155
165
  };
156
166
  if (process.env.SELENIUM_REMOTE_CAPABILITIES) {
157
- const remoteCapabilities = parseSeleniumRemoteParams({
158
- name: 'capabilities',
159
- value: process.env.SELENIUM_REMOTE_CAPABILITIES
160
- }, progress);
161
- if (remoteCapabilities) desiredCapabilities = {
162
- ...desiredCapabilities,
163
- ...remoteCapabilities
164
- };
167
+ const remoteCapabilities = parseSeleniumRemoteParams({ name: "capabilities", value: process.env.SELENIUM_REMOTE_CAPABILITIES }, progress);
168
+ if (remoteCapabilities)
169
+ desiredCapabilities = { ...desiredCapabilities, ...remoteCapabilities };
165
170
  }
166
171
  let headers = {};
167
172
  if (process.env.SELENIUM_REMOTE_HEADERS) {
168
- const remoteHeaders = parseSeleniumRemoteParams({
169
- name: 'headers',
170
- value: process.env.SELENIUM_REMOTE_HEADERS
171
- }, progress);
172
- if (remoteHeaders) headers = remoteHeaders;
173
+ const remoteHeaders = parseSeleniumRemoteParams({ name: "headers", value: process.env.SELENIUM_REMOTE_HEADERS }, progress);
174
+ if (remoteHeaders)
175
+ headers = remoteHeaders;
173
176
  }
174
177
  progress.log(`<selenium> connecting to ${hubUrl}`);
175
- const response = await (0, _network.fetchData)({
176
- url: hubUrl + 'session',
177
- method: 'POST',
178
+ const response = await (0, import_network.fetchData)(progress, {
179
+ url: hubUrl + "session",
180
+ method: "POST",
178
181
  headers: {
179
- 'Content-Type': 'application/json; charset=utf-8',
182
+ "Content-Type": "application/json; charset=utf-8",
180
183
  ...headers
181
184
  },
182
185
  data: JSON.stringify({
183
- capabilities: {
184
- alwaysMatch: desiredCapabilities
185
- }
186
- }),
187
- timeout: progress.timeUntilDeadline()
186
+ capabilities: { alwaysMatch: desiredCapabilities }
187
+ })
188
188
  }, seleniumErrorHandler);
189
189
  const value = JSON.parse(response).value;
190
190
  const sessionId = value.sessionId;
191
191
  progress.log(`<selenium> connected to sessionId=${sessionId}`);
192
192
  const disconnectFromSelenium = async () => {
193
193
  progress.log(`<selenium> disconnecting from sessionId=${sessionId}`);
194
- await (0, _network.fetchData)({
195
- url: hubUrl + 'session/' + sessionId,
196
- method: 'DELETE',
194
+ await (0, import_network.fetchData)(void 0, {
195
+ url: hubUrl + "session/" + sessionId,
196
+ method: "DELETE",
197
197
  headers
198
- }).catch(error => progress.log(`<error disconnecting from selenium>: ${error}`));
198
+ }).catch((error) => progress.log(`<error disconnecting from selenium>: ${error}`));
199
199
  progress.log(`<selenium> disconnected from sessionId=${sessionId}`);
200
- _processLauncher.gracefullyCloseSet.delete(disconnectFromSelenium);
200
+ import_processLauncher.gracefullyCloseSet.delete(disconnectFromSelenium);
201
201
  };
202
- _processLauncher.gracefullyCloseSet.add(disconnectFromSelenium);
202
+ import_processLauncher.gracefullyCloseSet.add(disconnectFromSelenium);
203
203
  try {
204
204
  const capabilities = value.capabilities;
205
205
  let endpointURL;
206
- if (capabilities['se:cdp']) {
207
- // Selenium 4 - use built-in CDP websocket proxy.
206
+ if (capabilities["se:cdp"]) {
208
207
  progress.log(`<selenium> using selenium v4`);
209
- const endpointURLString = addProtocol(capabilities['se:cdp']);
208
+ const endpointURLString = addProtocol(capabilities["se:cdp"]);
210
209
  endpointURL = new URL(endpointURLString);
211
- if (endpointURL.hostname === 'localhost' || endpointURL.hostname === '127.0.0.1') endpointURL.hostname = new URL(hubUrl).hostname;
210
+ if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1")
211
+ endpointURL.hostname = new URL(hubUrl).hostname;
212
212
  progress.log(`<selenium> retrieved endpoint ${endpointURL.toString()} for sessionId=${sessionId}`);
213
213
  } else {
214
- // Selenium 3 - resolve target node IP to use instead of localhost ws url.
215
214
  progress.log(`<selenium> using selenium v3`);
216
- const maybeChromeOptions = capabilities['goog:chromeOptions'];
217
- const chromeOptions = maybeChromeOptions && typeof maybeChromeOptions === 'object' ? maybeChromeOptions : undefined;
218
- const debuggerAddress = chromeOptions && typeof chromeOptions.debuggerAddress === 'string' ? chromeOptions.debuggerAddress : undefined;
219
- const chromeOptionsURL = typeof maybeChromeOptions === 'string' ? maybeChromeOptions : undefined;
220
- // TODO(dgozman): figure out if we can make ChromeDriver to return 127.0.0.1 instead of localhost.
221
- const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace('localhost', '127.0.0.1');
215
+ const maybeChromeOptions = capabilities["goog:chromeOptions"];
216
+ const chromeOptions = maybeChromeOptions && typeof maybeChromeOptions === "object" ? maybeChromeOptions : void 0;
217
+ const debuggerAddress = chromeOptions && typeof chromeOptions.debuggerAddress === "string" ? chromeOptions.debuggerAddress : void 0;
218
+ const chromeOptionsURL = typeof maybeChromeOptions === "string" ? maybeChromeOptions : void 0;
219
+ const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace("localhost", "127.0.0.1");
222
220
  progress.log(`<selenium> retrieved endpoint ${endpointURLString} for sessionId=${sessionId}`);
223
221
  endpointURL = new URL(endpointURLString);
224
- if (endpointURL.hostname === 'localhost' || endpointURL.hostname === '127.0.0.1') {
225
- const sessionInfoUrl = new URL(hubUrl).origin + '/grid/api/testsession?session=' + sessionId;
222
+ if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") {
223
+ const sessionInfoUrl = new URL(hubUrl).origin + "/grid/api/testsession?session=" + sessionId;
226
224
  try {
227
- const sessionResponse = await (0, _network.fetchData)({
225
+ const sessionResponse = await (0, import_network.fetchData)(progress, {
228
226
  url: sessionInfoUrl,
229
- method: 'GET',
230
- timeout: progress.timeUntilDeadline(),
227
+ method: "GET",
231
228
  headers
232
229
  }, seleniumErrorHandler);
233
230
  const proxyId = JSON.parse(sessionResponse).proxyId;
@@ -240,7 +237,7 @@ class Chromium extends _browserType.BrowserType {
240
237
  }
241
238
  return await this._connectOverCDPInternal(progress, endpointURL.toString(), {
242
239
  ...options,
243
- headers: (0, _utils.headersObjectToArray)(headers)
240
+ headers: (0, import_utils.headersObjectToArray)(headers)
244
241
  }, disconnectFromSelenium);
245
242
  } catch (e) {
246
243
  await disconnectFromSelenium();
@@ -250,76 +247,104 @@ class Chromium extends _browserType.BrowserType {
250
247
  defaultArgs(options, isPersistent, userDataDir) {
251
248
  const chromeArguments = this._innerDefaultArgs(options);
252
249
  chromeArguments.push(`--user-data-dir=${userDataDir}`);
253
- if (options.useWebSocket) chromeArguments.push('--remote-debugging-port=0');else chromeArguments.push('--remote-debugging-pipe');
254
- if (isPersistent) chromeArguments.push('about:blank');else chromeArguments.push('--no-startup-window');
250
+ if (options.cdpPort !== void 0)
251
+ chromeArguments.push(`--remote-debugging-port=${options.cdpPort}`);
252
+ else
253
+ chromeArguments.push("--remote-debugging-pipe");
254
+ if (isPersistent)
255
+ chromeArguments.push("about:blank");
256
+ else
257
+ chromeArguments.push("--no-startup-window");
255
258
  return chromeArguments;
256
259
  }
257
260
  _innerDefaultArgs(options) {
258
- const {
259
- args = []
260
- } = options;
261
- const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));
262
- if (userDataDirArg) throw this._createUserDataDirArgMisuseError('--user-data-dir');
263
- if (args.find(arg => arg.startsWith('--remote-debugging-pipe'))) throw new Error('Playwright manages remote debugging connection itself.');
264
- if (args.find(arg => !arg.startsWith('-'))) throw new Error('Arguments can not specify page to be opened');
265
- const chromeArguments = [..._chromiumSwitches.chromiumSwitches];
266
- if (_os.default.platform() === 'darwin') {
267
- // See https://github.com/microsoft/playwright/issues/7362
268
- chromeArguments.push('--enable-use-zoom-for-dsf=false');
269
- // See https://bugs.chromium.org/p/chromium/issues/detail?id=1407025.
270
- if (options.headless && (!options.channel || options.channel === 'chromium-headless-shell')) chromeArguments.push('--use-angle');
261
+ const { args = [] } = options;
262
+ const userDataDirArg = args.find((arg) => arg.startsWith("--user-data-dir"));
263
+ if (userDataDirArg)
264
+ throw this._createUserDataDirArgMisuseError("--user-data-dir");
265
+ if (args.find((arg) => arg.startsWith("--remote-debugging-pipe")))
266
+ throw new Error("Playwright manages remote debugging connection itself.");
267
+ if (args.find((arg) => !arg.startsWith("-")))
268
+ throw new Error("Arguments can not specify page to be opened");
269
+ const chromeArguments = [...(0, import_chromiumSwitches.chromiumSwitches)(options.assistantMode, options.channel)];
270
+ if (import_os.default.platform() === "darwin") {
271
+ chromeArguments.push("--enable-use-zoom-for-dsf=false");
272
+ chromeArguments.push("--enable-unsafe-swiftshader");
271
273
  }
272
- if (options.devtools) chromeArguments.push('--auto-open-devtools-for-tabs');
274
+ if (options.devtools)
275
+ chromeArguments.push("--auto-open-devtools-for-tabs");
273
276
  if (options.headless) {
274
- chromeArguments.push('--headless');
275
- chromeArguments.push('--hide-scrollbars', '--mute-audio', '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4');
277
+ chromeArguments.push("--headless");
278
+ chromeArguments.push(
279
+ "--hide-scrollbars",
280
+ "--mute-audio",
281
+ "--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4"
282
+ );
276
283
  }
277
- if (options.chromiumSandbox !== true) chromeArguments.push('--no-sandbox');
284
+ if (options.chromiumSandbox !== true)
285
+ chromeArguments.push("--no-sandbox");
278
286
  const proxy = options.proxyOverride || options.proxy;
279
287
  if (proxy) {
280
288
  const proxyURL = new URL(proxy.server);
281
- const isSocks = proxyURL.protocol === 'socks5:';
282
- // https://www.chromium.org/developers/design-documents/network-settings
283
- if (isSocks && !this.attribution.playwright.options.socksProxyPort) {
284
- // https://www.chromium.org/developers/design-documents/network-stack/socks-proxy
289
+ const isSocks = proxyURL.protocol === "socks5:";
290
+ if (isSocks && !options.socksProxyPort) {
285
291
  chromeArguments.push(`--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}"`);
286
292
  }
287
293
  chromeArguments.push(`--proxy-server=${proxy.server}`);
288
294
  const proxyBypassRules = [];
289
- // https://source.chromium.org/chromium/chromium/src/+/master:net/docs/proxy.md;l=548;drc=71698e610121078e0d1a811054dcf9fd89b49578
290
- if (this.attribution.playwright.options.socksProxyPort) proxyBypassRules.push('<-loopback>');
291
- if (proxy.bypass) proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t));
292
- if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes('<-loopback>')) proxyBypassRules.push('<-loopback>');
293
- if (proxyBypassRules.length > 0) chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`);
295
+ if (options.socksProxyPort)
296
+ proxyBypassRules.push("<-loopback>");
297
+ if (proxy.bypass)
298
+ proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
299
+ if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes("<-loopback>"))
300
+ proxyBypassRules.push("<-loopback>");
301
+ if (proxyBypassRules.length > 0)
302
+ chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
294
303
  }
295
304
  chromeArguments.push(...args);
296
305
  return chromeArguments;
297
306
  }
298
- readyState(options) {
299
- var _options$args;
300
- if (options.useWebSocket || (_options$args = options.args) !== null && _options$args !== void 0 && _options$args.some(a => a.startsWith('--remote-debugging-port'))) return new ChromiumReadyState();
301
- return undefined;
307
+ async waitForReadyState(options, browserLogsCollector) {
308
+ return waitForReadyState(options, browserLogsCollector);
302
309
  }
303
310
  getExecutableName(options) {
304
- if (options.channel) return options.channel;
305
- return options.headless ? 'chromium-headless-shell' : 'chromium';
311
+ if (options.channel)
312
+ return options.channel;
313
+ return options.headless ? "chromium-headless-shell" : "chromium";
306
314
  }
307
315
  }
308
- exports.Chromium = Chromium;
309
- class ChromiumReadyState extends _browserType.BrowserReadyState {
310
- onBrowserOutput(message) {
316
+ async function waitForReadyState(options, browserLogsCollector) {
317
+ if (options.cdpPort === void 0 && !options.args?.some((a) => a.startsWith("--remote-debugging-port")))
318
+ return {};
319
+ const result = new import_manualPromise.ManualPromise();
320
+ browserLogsCollector.onMessage((message) => {
321
+ if (message.includes("Failed to create a ProcessSingleton for your profile directory.")) {
322
+ result.reject(new Error("Failed to create a ProcessSingleton for your profile directory. This usually means that the profile is already in use by another instance of Chromium."));
323
+ }
311
324
  const match = message.match(/DevTools listening on (.*)/);
312
- if (match) this._wsEndpoint.resolve(match[1]);
313
- }
325
+ if (match)
326
+ result.resolve({ wsEndpoint: match[1] });
327
+ });
328
+ return result;
314
329
  }
315
330
  async function urlToWSEndpoint(progress, endpointURL, headers) {
316
- if (endpointURL.startsWith('ws')) return endpointURL;
331
+ if (endpointURL.startsWith("ws"))
332
+ return endpointURL;
317
333
  progress.log(`<ws preparing> retrieving websocket url from ${endpointURL}`);
318
- const httpURL = endpointURL.endsWith('/') ? `${endpointURL}json/version/` : `${endpointURL}/json/version/`;
319
- const json = await (0, _network.fetchData)({
320
- url: httpURL,
321
- headers
322
- }, async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.\n` + `This does not look like a DevTools server, try connecting via ws://.`));
334
+ const url = new URL(endpointURL);
335
+ if (!url.pathname.endsWith("/"))
336
+ url.pathname += "/";
337
+ url.pathname += "json/version/";
338
+ const httpURL = url.toString();
339
+ const json = await (0, import_network.fetchData)(
340
+ progress,
341
+ {
342
+ url: httpURL,
343
+ headers
344
+ },
345
+ async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.
346
+ This does not look like a DevTools server, try connecting via ws://.`)
347
+ );
323
348
  return JSON.parse(json).webSocketDebuggerUrl;
324
349
  }
325
350
  async function seleniumErrorHandler(params, response) {
@@ -328,19 +353,21 @@ async function seleniumErrorHandler(params, response) {
328
353
  try {
329
354
  const json = JSON.parse(body);
330
355
  message = json.value.localizedMessage || json.value.message;
331
- } catch (e) {}
356
+ } catch (e) {
357
+ }
332
358
  return new Error(`Error connecting to Selenium at ${params.url}: ${message}`);
333
359
  }
334
360
  function addProtocol(url) {
335
- if (!['ws://', 'wss://', 'http://', 'https://'].some(protocol => url.startsWith(protocol))) return 'http://' + url;
361
+ if (!["ws://", "wss://", "http://", "https://"].some((protocol) => url.startsWith(protocol)))
362
+ return "http://" + url;
336
363
  return url;
337
364
  }
338
365
  function streamToString(stream) {
339
366
  return new Promise((resolve, reject) => {
340
367
  const chunks = [];
341
- stream.on('data', chunk => chunks.push(Buffer.from(chunk)));
342
- stream.on('error', reject);
343
- stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
368
+ stream.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
369
+ stream.on("error", reject);
370
+ stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
344
371
  });
345
372
  }
346
373
  function parseSeleniumRemoteParams(env, progress) {
@@ -351,4 +378,9 @@ function parseSeleniumRemoteParams(env, progress) {
351
378
  } catch (e) {
352
379
  progress.log(`<selenium> ignoring additional ${env.name} "${env.value}": ${e}`);
353
380
  }
354
- }
381
+ }
382
+ // Annotate the CommonJS export names for ESM import in node:
383
+ 0 && (module.exports = {
384
+ Chromium,
385
+ waitForReadyState
386
+ });