@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,115 +1,109 @@
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 crBrowser_exports = {};
30
+ __export(crBrowser_exports, {
31
+ CRBrowser: () => CRBrowser,
32
+ CRBrowserContext: () => CRBrowserContext
5
33
  });
6
- exports.CRBrowserContext = exports.CRBrowser = void 0;
7
- var _path = _interopRequireDefault(require("path"));
8
- var _assert = require("../../utils/isomorphic/assert");
9
- var _crypto = require("../utils/crypto");
10
- var _artifact = require("../artifact");
11
- var _browser = require("../browser");
12
- var _browserContext = require("../browserContext");
13
- var _frames = require("../frames");
14
- var network = _interopRequireWildcard(require("../network"));
15
- var _page = require("../page");
16
- var _crConnection = require("./crConnection");
17
- var _crPage = require("./crPage");
18
- var _crProtocolHelper = require("./crProtocolHelper");
19
- var _crServiceWorker = require("./crServiceWorker");
20
- 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); }
21
- 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; }
22
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
- /**
24
- * Copyright 2017 Google Inc. All rights reserved.
25
- * Modifications copyright (c) Microsoft Corporation.
26
- *
27
- * Licensed under the Apache License, Version 2.0 (the "License");
28
- * you may not use this file except in compliance with the License.
29
- * You may obtain a copy of the License at
30
- *
31
- * http://www.apache.org/licenses/LICENSE-2.0
32
- *
33
- * Unless required by applicable law or agreed to in writing, software
34
- * distributed under the License is distributed on an "AS IS" BASIS,
35
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36
- * See the License for the specific language governing permissions and
37
- * limitations under the License.
38
- */
39
-
40
- class CRBrowser extends _browser.Browser {
34
+ module.exports = __toCommonJS(crBrowser_exports);
35
+ var import_path = __toESM(require("path"));
36
+ var import_assert = require("../../utils/isomorphic/assert");
37
+ var import_crypto = require("../utils/crypto");
38
+ var import_artifact = require("../artifact");
39
+ var import_browser = require("../browser");
40
+ var import_browserContext = require("../browserContext");
41
+ var import_frames = require("../frames");
42
+ var network = __toESM(require("../network"));
43
+ var import_page = require("../page");
44
+ var import_crConnection = require("./crConnection");
45
+ var import_crPage = require("./crPage");
46
+ var import_crProtocolHelper = require("./crProtocolHelper");
47
+ var import_crServiceWorker = require("./crServiceWorker");
48
+ class CRBrowser extends import_browser.Browser {
49
+ constructor(parent, connection, options) {
50
+ super(parent, options);
51
+ this._clientRootSessionPromise = null;
52
+ this._contexts = /* @__PURE__ */ new Map();
53
+ this._crPages = /* @__PURE__ */ new Map();
54
+ this._backgroundPages = /* @__PURE__ */ new Map();
55
+ this._serviceWorkers = /* @__PURE__ */ new Map();
56
+ this._version = "";
57
+ this._tracingRecording = false;
58
+ this._userAgent = "";
59
+ this._connection = connection;
60
+ this._session = this._connection.rootSession;
61
+ this._connection.on(import_crConnection.ConnectionEvents.Disconnected, () => this._didDisconnect());
62
+ this._session.on("Target.attachedToTarget", this._onAttachedToTarget.bind(this));
63
+ this._session.on("Target.detachedFromTarget", this._onDetachedFromTarget.bind(this));
64
+ this._session.on("Browser.downloadWillBegin", this._onDownloadWillBegin.bind(this));
65
+ this._session.on("Browser.downloadProgress", this._onDownloadProgress.bind(this));
66
+ }
41
67
  static async connect(parent, transport, options, devtools) {
42
- // Make a copy in case we need to update `headful` property below.
43
- options = {
44
- ...options
45
- };
46
- const connection = new _crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector);
68
+ options = { ...options };
69
+ const connection = new import_crConnection.CRConnection(parent, transport, options.protocolLogger, options.browserLogsCollector);
47
70
  const browser = new CRBrowser(parent, connection, options);
48
71
  browser._devtools = devtools;
49
- if (browser.isClank()) browser._isCollocatedWithServer = false;
72
+ if (browser.isClank())
73
+ browser._isCollocatedWithServer = false;
50
74
  const session = connection.rootSession;
51
- if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();
52
- const version = await session.send('Browser.getVersion');
53
- browser._version = version.product.substring(version.product.indexOf('/') + 1);
75
+ if (options.__testHookOnConnectToBrowser)
76
+ await options.__testHookOnConnectToBrowser();
77
+ const version = await session.send("Browser.getVersion");
78
+ browser._version = version.product.substring(version.product.indexOf("/") + 1);
54
79
  browser._userAgent = version.userAgent;
55
- // We don't trust the option as it may lie in case of connectOverCDP where remote browser
56
- // may have been launched with different options.
57
- browser.options.headful = !version.userAgent.includes('Headless');
80
+ browser.options.headful = !version.userAgent.includes("Headless");
58
81
  if (!options.persistent) {
59
- await session.send('Target.setAutoAttach', {
60
- autoAttach: true,
61
- waitForDebuggerOnStart: true,
62
- flatten: true
63
- });
82
+ await session.send("Target.setAutoAttach", { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });
64
83
  return browser;
65
84
  }
66
- browser._defaultContext = new CRBrowserContext(browser, undefined, options.persistent);
67
- await Promise.all([session.send('Target.setAutoAttach', {
68
- autoAttach: true,
69
- waitForDebuggerOnStart: true,
70
- flatten: true
71
- }).then(async () => {
72
- // Target.setAutoAttach has a bug where it does not wait for new Targets being attached.
73
- // However making a dummy call afterwards fixes this.
74
- // This can be removed after https://chromium-review.googlesource.com/c/chromium/src/+/2885888 lands in stable.
75
- await session.send('Target.getTargetInfo');
76
- }), browser._defaultContext._initialize()]);
85
+ browser._defaultContext = new CRBrowserContext(browser, void 0, options.persistent);
86
+ await Promise.all([
87
+ session.send("Target.setAutoAttach", { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }).then(async () => {
88
+ await session.send("Target.getTargetInfo");
89
+ }),
90
+ browser._defaultContext._initialize()
91
+ ]);
77
92
  await browser._waitForAllPagesToBeInitialized();
78
93
  return browser;
79
94
  }
80
- constructor(parent, connection, options) {
81
- super(parent, options);
82
- this._connection = void 0;
83
- this._session = void 0;
84
- this._clientRootSessionPromise = null;
85
- this._contexts = new Map();
86
- this._crPages = new Map();
87
- this._backgroundPages = new Map();
88
- this._serviceWorkers = new Map();
89
- this._devtools = void 0;
90
- this._version = '';
91
- this._tracingRecording = false;
92
- this._tracingClient = void 0;
93
- this._userAgent = '';
94
- this._connection = connection;
95
- this._session = this._connection.rootSession;
96
- this._connection.on(_crConnection.ConnectionEvents.Disconnected, () => this._didDisconnect());
97
- this._session.on('Target.attachedToTarget', this._onAttachedToTarget.bind(this));
98
- this._session.on('Target.detachedFromTarget', this._onDetachedFromTarget.bind(this));
99
- this._session.on('Browser.downloadWillBegin', this._onDownloadWillBegin.bind(this));
100
- this._session.on('Browser.downloadProgress', this._onDownloadProgress.bind(this));
101
- }
102
95
  async doCreateNewContext(options) {
103
96
  const proxy = options.proxyOverride || options.proxy;
104
- let proxyBypassList = undefined;
97
+ let proxyBypassList = void 0;
105
98
  if (proxy) {
106
- if (process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK) proxyBypassList = proxy.bypass;else proxyBypassList = '<-loopback>' + (proxy.bypass ? `,${proxy.bypass}` : '');
99
+ if (process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK)
100
+ proxyBypassList = proxy.bypass;
101
+ else
102
+ proxyBypassList = "<-loopback>" + (proxy.bypass ? `,${proxy.bypass}` : "");
107
103
  }
108
- const {
109
- browserContextId
110
- } = await this._session.send('Target.createBrowserContext', {
104
+ const { browserContextId } = await this._session.send("Target.createBrowserContext", {
111
105
  disposeOnDetach: true,
112
- proxyServer: proxy ? proxy.server : undefined,
106
+ proxyServer: proxy ? proxy.server : void 0,
113
107
  proxyBypassList
114
108
  });
115
109
  const context = new CRBrowserContext(this, browserContextId, options);
@@ -127,72 +121,59 @@ class CRBrowser extends _browser.Browser {
127
121
  return this._userAgent;
128
122
  }
129
123
  _platform() {
130
- if (this._userAgent.includes('Windows')) return 'win';
131
- if (this._userAgent.includes('Macintosh')) return 'mac';
132
- return 'linux';
124
+ if (this._userAgent.includes("Windows"))
125
+ return "win";
126
+ if (this._userAgent.includes("Macintosh"))
127
+ return "mac";
128
+ return "linux";
133
129
  }
134
130
  isClank() {
135
- return this.options.name === 'clank';
131
+ return this.options.name === "clank";
136
132
  }
137
133
  async _waitForAllPagesToBeInitialized() {
138
- await Promise.all([...this._crPages.values()].map(crPage => crPage._page.waitForInitializedOrError()));
139
- }
140
- _onAttachedToTarget({
141
- targetInfo,
142
- sessionId,
143
- waitingForDebugger
144
- }) {
145
- if (targetInfo.type === 'browser') return;
134
+ await Promise.all([...this._crPages.values()].map((crPage) => crPage._page.waitForInitializedOrError()));
135
+ }
136
+ _onAttachedToTarget({ targetInfo, sessionId, waitingForDebugger }) {
137
+ if (targetInfo.type === "browser")
138
+ return;
146
139
  const session = this._session.createChildSession(sessionId);
147
- (0, _assert.assert)(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2));
140
+ (0, import_assert.assert)(targetInfo.browserContextId, "targetInfo: " + JSON.stringify(targetInfo, null, 2));
148
141
  let context = this._contexts.get(targetInfo.browserContextId) || null;
149
142
  if (!context) {
150
- // TODO: auto attach only to pages from our contexts.
151
- // assert(this._defaultContext);
152
143
  context = this._defaultContext;
153
144
  }
154
- if (targetInfo.type === 'other' && targetInfo.url.startsWith('devtools://devtools') && this._devtools) {
145
+ if (targetInfo.type === "other" && targetInfo.url.startsWith("devtools://devtools") && this._devtools) {
155
146
  this._devtools.install(session);
156
147
  return;
157
148
  }
158
- const treatOtherAsPage = targetInfo.type === 'other' && process.env.PW_CHROMIUM_ATTACH_TO_OTHER;
159
- if (!context || targetInfo.type === 'other' && !treatOtherAsPage) {
160
- session.detach().catch(() => {});
149
+ const treatOtherAsPage = targetInfo.type === "other" && process.env.PW_CHROMIUM_ATTACH_TO_OTHER;
150
+ if (!context || targetInfo.type === "other" && !treatOtherAsPage) {
151
+ session.detach().catch(() => {
152
+ });
161
153
  return;
162
154
  }
163
- (0, _assert.assert)(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
164
- (0, _assert.assert)(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
165
- (0, _assert.assert)(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
166
- if (targetInfo.type === 'background_page') {
167
- const backgroundPage = new _crPage.CRPage(session, targetInfo.targetId, context, null, {
168
- hasUIWindow: false,
169
- isBackgroundPage: true
170
- });
155
+ (0, import_assert.assert)(!this._crPages.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
156
+ (0, import_assert.assert)(!this._backgroundPages.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
157
+ (0, import_assert.assert)(!this._serviceWorkers.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
158
+ if (targetInfo.type === "background_page") {
159
+ const backgroundPage = new import_crPage.CRPage(session, targetInfo.targetId, context, null, { hasUIWindow: false, isBackgroundPage: true });
171
160
  this._backgroundPages.set(targetInfo.targetId, backgroundPage);
172
161
  return;
173
162
  }
174
- if (targetInfo.type === 'page' || treatOtherAsPage) {
163
+ if (targetInfo.type === "page" || treatOtherAsPage) {
175
164
  const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null;
176
- const crPage = new _crPage.CRPage(session, targetInfo.targetId, context, opener, {
177
- hasUIWindow: targetInfo.type === 'page',
178
- isBackgroundPage: false
179
- });
165
+ const crPage = new import_crPage.CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === "page", isBackgroundPage: false });
180
166
  this._crPages.set(targetInfo.targetId, crPage);
181
167
  return;
182
168
  }
183
- if (targetInfo.type === 'service_worker') {
184
- const serviceWorker = new _crServiceWorker.CRServiceWorker(context, session, targetInfo.url);
169
+ if (targetInfo.type === "service_worker") {
170
+ const serviceWorker = new import_crServiceWorker.CRServiceWorker(context, session, targetInfo.url);
185
171
  this._serviceWorkers.set(targetInfo.targetId, serviceWorker);
186
172
  context.emit(CRBrowserContext.CREvents.ServiceWorker, serviceWorker);
187
173
  return;
188
174
  }
189
-
190
- // Detach from any targets we are not interested in, to avoid side-effects.
191
- //
192
- // One example of a side effect: upon shared worker restart, we receive
193
- // Inspector.targetReloadedAfterCrash and backend waits for Runtime.runIfWaitingForDebugger
194
- // from any attached client. If we do not resume, shared worker will stall.
195
- session.detach().catch(() => {});
175
+ session.detach().catch(() => {
176
+ });
196
177
  }
197
178
  _onDetachedFromTarget(payload) {
198
179
  const targetId = payload.targetId;
@@ -216,70 +197,89 @@ class CRBrowser extends _browser.Browser {
216
197
  }
217
198
  }
218
199
  _didDisconnect() {
219
- for (const crPage of this._crPages.values()) crPage.didClose();
200
+ for (const crPage of this._crPages.values())
201
+ crPage.didClose();
220
202
  this._crPages.clear();
221
- for (const backgroundPage of this._backgroundPages.values()) backgroundPage.didClose();
203
+ for (const backgroundPage of this._backgroundPages.values())
204
+ backgroundPage.didClose();
222
205
  this._backgroundPages.clear();
223
- for (const serviceWorker of this._serviceWorkers.values()) serviceWorker.didClose();
206
+ for (const serviceWorker of this._serviceWorkers.values())
207
+ serviceWorker.didClose();
224
208
  this._serviceWorkers.clear();
225
209
  this._didClose();
226
210
  }
227
211
  _findOwningPage(frameId) {
228
212
  for (const crPage of this._crPages.values()) {
229
- const frame = crPage._page._frameManager.frame(frameId);
230
- if (frame) return crPage;
213
+ const frame = crPage._page.frameManager.frame(frameId);
214
+ if (frame)
215
+ return crPage;
231
216
  }
232
217
  return null;
233
218
  }
234
219
  _onDownloadWillBegin(payload) {
235
220
  const page = this._findOwningPage(payload.frameId);
236
221
  if (!page) {
237
- // There might be no page when download originates from something unusual, like
238
- // a DevTools window or maybe an extension page.
239
- // See https://github.com/microsoft/playwright/issues/22551.
240
222
  return;
241
223
  }
242
224
  page.willBeginDownload();
243
225
  let originPage = page._page.initializedOrUndefined();
244
- // If it's a new window download, report it on the opener page.
245
- if (!originPage && page._opener) originPage = page._opener._page.initializedOrUndefined();
246
- if (!originPage) return;
226
+ if (!originPage && page._opener)
227
+ originPage = page._opener._page.initializedOrUndefined();
228
+ if (!originPage)
229
+ return;
247
230
  this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename);
248
231
  }
249
232
  _onDownloadProgress(payload) {
250
- if (payload.state === 'completed') this._downloadFinished(payload.guid, '');
251
- if (payload.state === 'canceled') this._downloadFinished(payload.guid, this._closeReason || 'canceled');
233
+ if (payload.state === "completed")
234
+ this._downloadFinished(payload.guid, "");
235
+ if (payload.state === "canceled")
236
+ this._downloadFinished(payload.guid, this._closeReason || "canceled");
252
237
  }
253
238
  async _closePage(crPage) {
254
- await this._session.send('Target.closeTarget', {
255
- targetId: crPage._targetId
256
- });
239
+ await this._session.send("Target.closeTarget", { targetId: crPage._targetId });
257
240
  }
258
241
  async newBrowserCDPSession() {
259
242
  return await this._connection.createBrowserSession();
260
243
  }
261
244
  async startTracing(page, options = {}) {
262
- (0, _assert.assert)(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');
263
- this._tracingClient = page ? page._delegate._mainFrameSession._client : this._session;
264
- const defaultCategories = ['-*', 'devtools.timeline', 'v8.execute', 'disabled-by-default-devtools.timeline', 'disabled-by-default-devtools.timeline.frame', 'toplevel', 'blink.console', 'blink.user_timing', 'latencyInfo', 'disabled-by-default-devtools.timeline.stack', 'disabled-by-default-v8.cpu_profiler', 'disabled-by-default-v8.cpu_profiler.hires'];
245
+ (0, import_assert.assert)(!this._tracingRecording, "Cannot start recording trace while already recording trace.");
246
+ this._tracingClient = page ? page.delegate._mainFrameSession._client : this._session;
247
+ const defaultCategories = [
248
+ "-*",
249
+ "devtools.timeline",
250
+ "v8.execute",
251
+ "disabled-by-default-devtools.timeline",
252
+ "disabled-by-default-devtools.timeline.frame",
253
+ "toplevel",
254
+ "blink.console",
255
+ "blink.user_timing",
256
+ "latencyInfo",
257
+ "disabled-by-default-devtools.timeline.stack",
258
+ "disabled-by-default-v8.cpu_profiler",
259
+ "disabled-by-default-v8.cpu_profiler.hires"
260
+ ];
265
261
  const {
266
262
  screenshots = false,
267
263
  categories = defaultCategories
268
264
  } = options;
269
- if (screenshots) categories.push('disabled-by-default-devtools.screenshot');
265
+ if (screenshots)
266
+ categories.push("disabled-by-default-devtools.screenshot");
270
267
  this._tracingRecording = true;
271
- await this._tracingClient.send('Tracing.start', {
272
- transferMode: 'ReturnAsStream',
273
- categories: categories.join(',')
268
+ await this._tracingClient.send("Tracing.start", {
269
+ transferMode: "ReturnAsStream",
270
+ categories: categories.join(",")
274
271
  });
275
272
  }
276
273
  async stopTracing() {
277
- (0, _assert.assert)(this._tracingClient, 'Tracing was not started.');
278
- const [event] = await Promise.all([new Promise(f => this._tracingClient.once('Tracing.tracingComplete', f)), this._tracingClient.send('Tracing.end')]);
279
- const tracingPath = _path.default.join(this.options.artifactsDir, (0, _crypto.createGuid)() + '.crtrace');
280
- await (0, _crProtocolHelper.saveProtocolStream)(this._tracingClient, event.stream, tracingPath);
274
+ (0, import_assert.assert)(this._tracingClient, "Tracing was not started.");
275
+ const [event] = await Promise.all([
276
+ new Promise((f) => this._tracingClient.once("Tracing.tracingComplete", f)),
277
+ this._tracingClient.send("Tracing.end")
278
+ ]);
279
+ const tracingPath = import_path.default.join(this.options.artifactsDir, (0, import_crypto.createGuid)() + ".crtrace");
280
+ await (0, import_crProtocolHelper.saveProtocolStream)(this._tracingClient, event.stream, tracingPath);
281
281
  this._tracingRecording = false;
282
- const artifact = new _artifact.Artifact(this, tracingPath);
282
+ const artifact = new import_artifact.Artifact(this, tracingPath);
283
283
  artifact.reportFinished();
284
284
  return artifact;
285
285
  }
@@ -287,22 +287,28 @@ class CRBrowser extends _browser.Browser {
287
287
  return !this._connection._closed;
288
288
  }
289
289
  async _clientRootSession() {
290
- if (!this._clientRootSessionPromise) this._clientRootSessionPromise = this._connection.createBrowserSession();
290
+ if (!this._clientRootSessionPromise)
291
+ this._clientRootSessionPromise = this._connection.createBrowserSession();
291
292
  return this._clientRootSessionPromise;
292
293
  }
293
294
  }
294
- exports.CRBrowser = CRBrowser;
295
- class CRBrowserContext extends _browserContext.BrowserContext {
295
+ class CRBrowserContext extends import_browserContext.BrowserContext {
296
+ static {
297
+ this.CREvents = {
298
+ BackgroundPage: "backgroundpage",
299
+ ServiceWorker: "serviceworker"
300
+ };
301
+ }
296
302
  constructor(browser, browserContextId, options) {
297
303
  super(browser, options, browserContextId);
298
304
  this._authenticateProxyViaCredentials();
299
305
  }
300
306
  async _initialize() {
301
- (0, _assert.assert)(!Array.from(this._browser._crPages.values()).some(page => page._browserContext === this));
307
+ (0, import_assert.assert)(!Array.from(this._browser._crPages.values()).some((page) => page._browserContext === this));
302
308
  const promises = [super._initialize()];
303
- if (this._browser.options.name !== 'clank' && this._options.acceptDownloads !== 'internal-browser-default') {
304
- promises.push(this._browser._session.send('Browser.setDownloadBehavior', {
305
- behavior: this._options.acceptDownloads === 'accept' ? 'allowAndName' : 'deny',
309
+ if (this._browser.options.name !== "clank" && this._options.acceptDownloads !== "internal-browser-default") {
310
+ promises.push(this._browser._session.send("Browser.setDownloadBehavior", {
311
+ behavior: this._options.acceptDownloads === "accept" ? "allowAndName" : "deny",
306
312
  browserContextId: this._browserContextId,
307
313
  downloadPath: this._browser.options.downloadsPath,
308
314
  eventsEnabled: true
@@ -311,161 +317,173 @@ class CRBrowserContext extends _browserContext.BrowserContext {
311
317
  await Promise.all(promises);
312
318
  }
313
319
  _crPages() {
314
- return [...this._browser._crPages.values()].filter(crPage => crPage._browserContext === this);
320
+ return [...this._browser._crPages.values()].filter((crPage) => crPage._browserContext === this);
315
321
  }
316
322
  possiblyUninitializedPages() {
317
- return this._crPages().map(crPage => crPage._page);
318
- }
319
- async doCreateNewPage() {
320
- (0, _browserContext.assertBrowserContextIsNotOwned)(this);
321
- const oldKeys = this._browser.isClank() ? new Set(this._browser._crPages.keys()) : undefined;
322
- let {
323
- targetId
324
- } = await this._browser._session.send('Target.createTarget', {
325
- url: 'about:blank',
326
- browserContextId: this._browserContextId
327
- });
328
- if (oldKeys) {
329
- // Chrome for Android returns tab ids (1, 2, 3, 4, 5) instead of content target ids here, work around it via the
330
- // heuristic assuming that there is only one page created at a time.
331
- const newKeys = new Set(this._browser._crPages.keys());
332
- // Remove old keys.
333
- for (const key of oldKeys) newKeys.delete(key);
334
- // Remove potential concurrent popups.
335
- for (const key of newKeys) {
336
- const page = this._browser._crPages.get(key);
337
- if (page._opener) newKeys.delete(key);
338
- }
339
- (0, _assert.assert)(newKeys.size === 1);
340
- [targetId] = [...newKeys];
341
- }
342
- return this._browser._crPages.get(targetId)._page;
323
+ return this._crPages().map((crPage) => crPage._page);
324
+ }
325
+ async doCreateNewPage(markAsServerSideOnly) {
326
+ const { targetId } = await this._browser._session.send("Target.createTarget", { url: "about:blank", browserContextId: this._browserContextId });
327
+ const page = this._browser._crPages.get(targetId)._page;
328
+ if (markAsServerSideOnly)
329
+ page.markAsServerSideOnly();
330
+ return page;
343
331
  }
344
332
  async doGetCookies(urls) {
345
- const {
346
- cookies
347
- } = await this._browser._session.send('Storage.getCookies', {
348
- browserContextId: this._browserContextId
349
- });
350
- return network.filterCookies(cookies.map(c => {
333
+ const { cookies } = await this._browser._session.send("Storage.getCookies", { browserContextId: this._browserContextId });
334
+ return network.filterCookies(cookies.map((c) => {
335
+ const { name, value, domain, path: path2, expires, httpOnly, secure, sameSite } = c;
351
336
  const copy = {
352
- sameSite: 'Lax',
353
- ...c
337
+ name,
338
+ value,
339
+ domain,
340
+ path: path2,
341
+ expires,
342
+ httpOnly,
343
+ secure,
344
+ sameSite: sameSite ?? "Lax"
354
345
  };
355
- delete copy.size;
356
- delete copy.priority;
357
- delete copy.session;
358
- delete copy.sameParty;
359
- delete copy.sourceScheme;
360
- delete copy.sourcePort;
346
+ if (c.partitionKey) {
347
+ copy._crHasCrossSiteAncestor = c.partitionKey.hasCrossSiteAncestor;
348
+ copy.partitionKey = c.partitionKey.topLevelSite;
349
+ }
361
350
  return copy;
362
351
  }), urls);
363
352
  }
364
353
  async addCookies(cookies) {
365
- await this._browser._session.send('Storage.setCookies', {
366
- cookies: network.rewriteCookies(cookies),
354
+ function toChromiumCookie(cookie) {
355
+ const { name, value, url, domain, path: path2, expires, httpOnly, secure, sameSite, partitionKey, _crHasCrossSiteAncestor } = cookie;
356
+ const copy = {
357
+ name,
358
+ value,
359
+ url,
360
+ domain,
361
+ path: path2,
362
+ expires,
363
+ httpOnly,
364
+ secure,
365
+ sameSite
366
+ };
367
+ if (partitionKey) {
368
+ copy.partitionKey = {
369
+ topLevelSite: partitionKey,
370
+ // _crHasCrossSiteAncestor is non-standard, set it true by default if the cookie is partitioned.
371
+ hasCrossSiteAncestor: _crHasCrossSiteAncestor ?? true
372
+ };
373
+ }
374
+ return copy;
375
+ }
376
+ await this._browser._session.send("Storage.setCookies", {
377
+ cookies: network.rewriteCookies(cookies).map(toChromiumCookie),
367
378
  browserContextId: this._browserContextId
368
379
  });
369
380
  }
370
381
  async doClearCookies() {
371
- await this._browser._session.send('Storage.clearCookies', {
372
- browserContextId: this._browserContextId
373
- });
382
+ await this._browser._session.send("Storage.clearCookies", { browserContextId: this._browserContextId });
374
383
  }
375
384
  async doGrantPermissions(origin, permissions) {
376
- const webPermissionToProtocol = new Map([['geolocation', 'geolocation'], ['midi', 'midi'], ['notifications', 'notifications'], ['camera', 'videoCapture'], ['microphone', 'audioCapture'], ['background-sync', 'backgroundSync'], ['ambient-light-sensor', 'sensors'], ['accelerometer', 'sensors'], ['gyroscope', 'sensors'], ['magnetometer', 'sensors'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'],
377
- // chrome-specific permissions we have.
378
- ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess']]);
379
- const filtered = permissions.map(permission => {
385
+ const webPermissionToProtocol = /* @__PURE__ */ new Map([
386
+ ["geolocation", "geolocation"],
387
+ ["midi", "midi"],
388
+ ["notifications", "notifications"],
389
+ ["camera", "videoCapture"],
390
+ ["microphone", "audioCapture"],
391
+ ["background-sync", "backgroundSync"],
392
+ ["ambient-light-sensor", "sensors"],
393
+ ["accelerometer", "sensors"],
394
+ ["gyroscope", "sensors"],
395
+ ["magnetometer", "sensors"],
396
+ ["clipboard-read", "clipboardReadWrite"],
397
+ ["clipboard-write", "clipboardSanitizedWrite"],
398
+ ["payment-handler", "paymentHandler"],
399
+ // chrome-specific permissions we have.
400
+ ["midi-sysex", "midiSysex"],
401
+ ["storage-access", "storageAccess"],
402
+ ["local-fonts", "localFonts"]
403
+ ]);
404
+ const filtered = permissions.map((permission) => {
380
405
  const protocolPermission = webPermissionToProtocol.get(permission);
381
- if (!protocolPermission) throw new Error('Unknown permission: ' + permission);
406
+ if (!protocolPermission)
407
+ throw new Error("Unknown permission: " + permission);
382
408
  return protocolPermission;
383
409
  });
384
- await this._browser._session.send('Browser.grantPermissions', {
385
- origin: origin === '*' ? undefined : origin,
386
- browserContextId: this._browserContextId,
387
- permissions: filtered
388
- });
410
+ await this._browser._session.send("Browser.grantPermissions", { origin: origin === "*" ? void 0 : origin, browserContextId: this._browserContextId, permissions: filtered });
389
411
  }
390
412
  async doClearPermissions() {
391
- await this._browser._session.send('Browser.resetPermissions', {
392
- browserContextId: this._browserContextId
393
- });
413
+ await this._browser._session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
394
414
  }
395
415
  async setGeolocation(geolocation) {
396
- (0, _browserContext.verifyGeolocation)(geolocation);
416
+ (0, import_browserContext.verifyGeolocation)(geolocation);
397
417
  this._options.geolocation = geolocation;
398
- for (const page of this.pages()) await page._delegate.updateGeolocation();
418
+ for (const page of this.pages())
419
+ await page.delegate.updateGeolocation();
399
420
  }
400
- async setExtraHTTPHeaders(headers) {
401
- this._options.extraHTTPHeaders = headers;
402
- for (const page of this.pages()) await page._delegate.updateExtraHTTPHeaders();
403
- for (const sw of this.serviceWorkers()) await sw.updateExtraHTTPHeaders();
421
+ async doUpdateExtraHTTPHeaders() {
422
+ for (const page of this.pages())
423
+ await page.delegate.updateExtraHTTPHeaders();
424
+ for (const sw of this.serviceWorkers())
425
+ await sw.updateExtraHTTPHeaders();
404
426
  }
405
427
  async setUserAgent(userAgent) {
406
428
  this._options.userAgent = userAgent;
407
- for (const page of this.pages()) await page._delegate.updateUserAgent();
408
- // TODO: service workers don't have Emulation domain?
429
+ for (const page of this.pages())
430
+ await page.delegate.updateUserAgent();
409
431
  }
410
- async setOffline(offline) {
411
- this._options.offline = offline;
412
- for (const page of this.pages()) await page._delegate.updateOffline();
413
- for (const sw of this.serviceWorkers()) await sw.updateOffline();
432
+ async doUpdateOffline() {
433
+ for (const page of this.pages())
434
+ await page.delegate.updateOffline();
435
+ for (const sw of this.serviceWorkers())
436
+ await sw.updateOffline();
414
437
  }
415
438
  async doSetHTTPCredentials(httpCredentials) {
416
439
  this._options.httpCredentials = httpCredentials;
417
- for (const page of this.pages()) await page._delegate.updateHttpCredentials();
418
- for (const sw of this.serviceWorkers()) await sw.updateHttpCredentials();
440
+ for (const page of this.pages())
441
+ await page.delegate.updateHttpCredentials();
442
+ for (const sw of this.serviceWorkers())
443
+ await sw.updateHttpCredentials();
419
444
  }
420
445
  async doAddInitScript(initScript) {
421
- for (const page of this.pages()) await page._delegate.addInitScript(initScript);
446
+ for (const page of this.pages())
447
+ await page.delegate.addInitScript(initScript);
422
448
  }
423
- async doRemoveNonInternalInitScripts() {
424
- for (const page of this.pages()) await page._delegate.removeNonInternalInitScripts();
449
+ async doRemoveInitScripts(initScripts) {
450
+ for (const page of this.pages())
451
+ await page.delegate.removeInitScripts(initScripts);
425
452
  }
426
453
  async doUpdateRequestInterception() {
427
- for (const page of this.pages()) await page._delegate.updateRequestInterception();
428
- for (const sw of this.serviceWorkers()) await sw.updateRequestInterception();
454
+ for (const page of this.pages())
455
+ await page.delegate.updateRequestInterception();
456
+ for (const sw of this.serviceWorkers())
457
+ await sw.updateRequestInterception();
458
+ }
459
+ async doUpdateDefaultViewport() {
460
+ }
461
+ async doUpdateDefaultEmulatedMedia() {
462
+ }
463
+ async doExposePlaywrightBinding() {
464
+ for (const page of this._crPages())
465
+ await page.exposePlaywrightBinding();
429
466
  }
430
467
  async doClose(reason) {
431
- // Headful chrome cannot dispose browser context with opened 'beforeunload'
432
- // dialogs, so we should close all that are currently opened.
433
- // We also won't get new ones since `Target.disposeBrowserContext` does not trigger
434
- // beforeunload.
435
- const openedBeforeUnloadDialogs = [];
436
- for (const crPage of this._crPages()) {
437
- const dialogs = [...crPage._page._frameManager._openedDialogs].filter(dialog => dialog.type() === 'beforeunload');
438
- openedBeforeUnloadDialogs.push(...dialogs);
439
- }
440
- await Promise.all(openedBeforeUnloadDialogs.map(dialog => dialog.dismiss()));
468
+ await this.dialogManager.closeBeforeUnloadDialogs();
441
469
  if (!this._browserContextId) {
442
470
  await this.stopVideoRecording();
443
- // Closing persistent context should close the browser.
444
- await this._browser.close({
445
- reason
446
- });
471
+ await this._browser.close({ reason });
447
472
  return;
448
473
  }
449
- await this._browser._session.send('Target.disposeBrowserContext', {
450
- browserContextId: this._browserContextId
451
- });
474
+ await this._browser._session.send("Target.disposeBrowserContext", { browserContextId: this._browserContextId });
452
475
  this._browser._contexts.delete(this._browserContextId);
453
476
  for (const [targetId, serviceWorker] of this._browser._serviceWorkers) {
454
- if (serviceWorker._browserContext !== this) continue;
455
- // When closing a browser context, service workers are shutdown
456
- // asynchronously and we get detached from them later.
457
- // To avoid the wrong order of notifications, we manually fire
458
- // "close" event here and forget about the service worker.
477
+ if (serviceWorker.browserContext !== this)
478
+ continue;
459
479
  serviceWorker.didClose();
460
480
  this._browser._serviceWorkers.delete(targetId);
461
481
  }
462
482
  }
463
483
  async stopVideoRecording() {
464
- await Promise.all(this._crPages().map(crPage => crPage._mainFrameSession._stopVideoRecording()));
484
+ await Promise.all(this._crPages().map((crPage) => crPage._mainFrameSession._stopVideoRecording()));
465
485
  }
466
486
  onClosePersistent() {
467
- // When persistent context is closed, we do not necessary get Target.detachedFromTarget
468
- // for all the background pages.
469
487
  for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {
470
488
  if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {
471
489
  backgroundPage.didClose();
@@ -474,44 +492,44 @@ class CRBrowserContext extends _browserContext.BrowserContext {
474
492
  }
475
493
  }
476
494
  async clearCache() {
477
- for (const page of this._crPages()) await page._networkManager.clearCache();
495
+ for (const page of this._crPages())
496
+ await page._networkManager.clearCache();
478
497
  }
479
498
  async cancelDownload(guid) {
480
- // The upstream CDP method is implemented in a way that no explicit error would be given
481
- // regarding the requested `guid`, even if the download is in a state not suitable for
482
- // cancellation (finished, cancelled, etc.) or the guid is invalid at all.
483
- await this._browser._session.send('Browser.cancelDownload', {
484
- guid: guid,
499
+ await this._browser._session.send("Browser.cancelDownload", {
500
+ guid,
485
501
  browserContextId: this._browserContextId
486
502
  });
487
503
  }
488
504
  backgroundPages() {
489
505
  const result = [];
490
506
  for (const backgroundPage of this._browser._backgroundPages.values()) {
491
- if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) result.push(backgroundPage._page);
507
+ if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined())
508
+ result.push(backgroundPage._page);
492
509
  }
493
510
  return result;
494
511
  }
495
512
  serviceWorkers() {
496
- return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker._browserContext === this);
513
+ return Array.from(this._browser._serviceWorkers.values()).filter((serviceWorker) => serviceWorker.browserContext === this);
497
514
  }
498
515
  async newCDPSession(page) {
499
516
  let targetId = null;
500
- if (page instanceof _page.Page) {
501
- targetId = page._delegate._targetId;
502
- } else if (page instanceof _frames.Frame) {
503
- const session = page._page._delegate._sessions.get(page._id);
504
- if (!session) throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);
517
+ if (page instanceof import_page.Page) {
518
+ targetId = page.delegate._targetId;
519
+ } else if (page instanceof import_frames.Frame) {
520
+ const session = page._page.delegate._sessions.get(page._id);
521
+ if (!session)
522
+ throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);
505
523
  targetId = session._targetId;
506
524
  } else {
507
- throw new Error('page: expected Page or Frame');
525
+ throw new Error("page: expected Page or Frame");
508
526
  }
509
527
  const rootSession = await this._browser._clientRootSession();
510
528
  return rootSession.attachToTarget(targetId);
511
529
  }
512
530
  }
513
- exports.CRBrowserContext = CRBrowserContext;
514
- CRBrowserContext.CREvents = {
515
- BackgroundPage: 'backgroundpage',
516
- ServiceWorker: 'serviceworker'
517
- };
531
+ // Annotate the CommonJS export names for ESM import in node:
532
+ 0 && (module.exports = {
533
+ CRBrowser,
534
+ CRBrowserContext
535
+ });