rebrowser-playwright-core 1.49.0 → 1.52.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 (373) hide show
  1. package/ThirdPartyNotices.txt +381 -55
  2. package/bin/reinstall_msedge_beta_linux.sh +6 -0
  3. package/bin/reinstall_msedge_dev_linux.sh +6 -0
  4. package/bin/reinstall_msedge_stable_linux.sh +6 -0
  5. package/browsers.json +28 -13
  6. package/index.js +0 -1
  7. package/lib/androidServerImpl.js +42 -48
  8. package/lib/browserServerImpl.js +60 -64
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +314 -354
  11. package/lib/cli/programWithTestStub.js +51 -44
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +146 -254
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -39
  16. package/lib/client/browser.js +59 -68
  17. package/lib/client/browserContext.js +302 -322
  18. package/lib/client/browserType.js +95 -143
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +109 -139
  21. package/lib/client/clientHelper.js +49 -42
  22. package/lib/client/clientInstrumentation.js +40 -35
  23. package/lib/client/clientStackTrace.js +69 -0
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +203 -218
  26. package/lib/client/consoleMessage.js +33 -33
  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 +74 -76
  31. package/lib/client/elementHandle.js +126 -163
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +127 -127
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +154 -178
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +34 -0
  38. package/lib/client/frame.js +189 -307
  39. package/lib/client/harRouter.js +44 -56
  40. package/lib/client/input.js +40 -69
  41. package/lib/client/jsHandle.js +55 -71
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +53 -28
  44. package/lib/client/locator.js +144 -230
  45. package/lib/client/network.js +285 -301
  46. package/lib/client/page.js +273 -312
  47. package/lib/client/platform.js +74 -0
  48. package/lib/client/playwright.js +62 -57
  49. package/lib/client/selectors.js +51 -43
  50. package/lib/client/stream.js +30 -45
  51. package/lib/client/timeoutSettings.js +75 -0
  52. package/lib/client/tracing.js +49 -82
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +71 -91
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +111 -0
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +28 -43
  60. package/lib/generated/clockSource.js +26 -5
  61. package/lib/generated/consoleApiSource.js +26 -5
  62. package/lib/generated/injectedScriptSource.js +26 -5
  63. package/lib/generated/pollingRecorderSource.js +26 -5
  64. package/lib/generated/utilityScriptSource.js +26 -5
  65. package/lib/generated/webSocketMockSource.js +375 -4
  66. package/lib/inProcessFactory.js +53 -48
  67. package/lib/inprocess.js +2 -19
  68. package/lib/outofprocess.js +53 -42
  69. package/lib/protocol/debug.js +209 -25
  70. package/lib/protocol/serializers.js +153 -134
  71. package/lib/protocol/validator.js +2712 -2667
  72. package/lib/protocol/validatorPrimitives.js +115 -75
  73. package/lib/remote/playwrightConnection.js +144 -152
  74. package/lib/remote/playwrightServer.js +106 -77
  75. package/lib/server/accessibility.js +44 -37
  76. package/lib/server/android/android.js +216 -206
  77. package/lib/server/android/backendAdb.js +89 -82
  78. package/lib/server/artifact.js +78 -55
  79. package/lib/server/bidi/bidiBrowser.js +227 -158
  80. package/lib/server/bidi/bidiChromium.js +106 -78
  81. package/lib/server/bidi/bidiConnection.js +66 -83
  82. package/lib/server/bidi/bidiExecutionContext.js +161 -97
  83. package/lib/server/bidi/bidiFirefox.js +76 -68
  84. package/lib/server/bidi/bidiInput.js +90 -102
  85. package/lib/server/bidi/bidiNetworkManager.js +141 -159
  86. package/lib/server/bidi/bidiOverCdp.js +57 -58
  87. package/lib/server/bidi/bidiPage.js +262 -261
  88. package/lib/server/bidi/bidiPdf.js +52 -86
  89. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  90. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  91. package/lib/server/bidi/third_party/bidiKeyboard.js +241 -223
  92. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  93. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  94. package/lib/server/bidi/third_party/firefoxPrefs.js +149 -111
  95. package/lib/server/browser.js +76 -84
  96. package/lib/server/browserContext.js +343 -360
  97. package/lib/server/browserType.js +169 -181
  98. package/lib/server/callLog.js +82 -0
  99. package/lib/server/chromium/chromium.js +212 -190
  100. package/lib/server/chromium/chromiumSwitches.js +99 -44
  101. package/lib/server/chromium/crAccessibility.js +157 -131
  102. package/lib/server/chromium/crBrowser.js +262 -280
  103. package/lib/server/chromium/crConnection.js +121 -178
  104. package/lib/server/chromium/crCoverage.js +113 -127
  105. package/lib/server/chromium/crDevTools.js +64 -55
  106. package/lib/server/chromium/crDragDrop.js +62 -79
  107. package/lib/server/chromium/crExecutionContext.js +100 -91
  108. package/lib/server/chromium/crInput.js +101 -88
  109. package/lib/server/chromium/crNetworkManager.js +269 -370
  110. package/lib/server/chromium/crPage.js +509 -595
  111. package/lib/server/chromium/crPdf.js +54 -86
  112. package/lib/server/chromium/crProtocolHelper.js +92 -80
  113. package/lib/server/chromium/crServiceWorker.js +85 -69
  114. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  115. package/lib/server/chromium/protocol.d.js +16 -0
  116. package/lib/server/chromium/videoRecorder.js +65 -99
  117. package/lib/server/clock.js +58 -46
  118. package/lib/server/codegen/csharp.js +191 -156
  119. package/lib/server/codegen/java.js +163 -125
  120. package/lib/server/codegen/javascript.js +166 -143
  121. package/lib/server/codegen/jsonl.js +33 -29
  122. package/lib/server/codegen/language.js +75 -52
  123. package/lib/server/codegen/languages.js +65 -27
  124. package/lib/server/codegen/python.js +141 -125
  125. package/lib/server/codegen/types.js +15 -4
  126. package/lib/server/console.js +28 -32
  127. package/lib/server/cookieStore.js +105 -86
  128. package/lib/server/debugController.js +102 -154
  129. package/lib/server/debugger.js +82 -78
  130. package/lib/server/deviceDescriptors.js +37 -24
  131. package/lib/server/deviceDescriptorsSource.json +131 -131
  132. package/lib/server/dialog.js +36 -35
  133. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  134. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  135. package/lib/server/dispatchers/browserContextDispatcher.js +177 -217
  136. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  137. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  138. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  139. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -64
  140. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  141. package/lib/server/dispatchers/dispatcher.js +180 -229
  142. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  143. package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
  144. package/lib/server/dispatchers/frameDispatcher.js +93 -162
  145. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  146. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  147. package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
  148. package/lib/server/dispatchers/networkDispatchers.js +92 -109
  149. package/lib/server/dispatchers/pageDispatcher.js +130 -169
  150. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  151. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  152. package/lib/server/dispatchers/streamDispatcher.js +42 -44
  153. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  154. package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
  155. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
  156. package/lib/server/dom.js +424 -443
  157. package/lib/server/download.js +45 -35
  158. package/lib/server/electron/electron.js +156 -175
  159. package/lib/server/electron/loader.js +8 -36
  160. package/lib/server/errors.js +47 -46
  161. package/lib/server/fetch.js +302 -331
  162. package/lib/server/fileChooser.js +25 -24
  163. package/lib/server/fileUploadUtils.js +66 -57
  164. package/lib/server/firefox/ffAccessibility.js +153 -131
  165. package/lib/server/firefox/ffBrowser.js +218 -274
  166. package/lib/server/firefox/ffConnection.js +63 -84
  167. package/lib/server/firefox/ffExecutionContext.js +103 -77
  168. package/lib/server/firefox/ffInput.js +72 -63
  169. package/lib/server/firefox/ffNetworkManager.js +131 -110
  170. package/lib/server/firefox/ffPage.js +244 -302
  171. package/lib/server/firefox/firefox.js +76 -69
  172. package/lib/server/firefox/protocol.d.js +16 -0
  173. package/lib/server/formData.js +107 -35
  174. package/lib/server/frameSelectors.js +77 -111
  175. package/lib/server/frames.js +719 -855
  176. package/lib/server/har/harRecorder.js +85 -77
  177. package/lib/server/har/harTracer.js +288 -224
  178. package/lib/server/harBackend.js +157 -0
  179. package/lib/server/helper.js +56 -59
  180. package/lib/server/index.js +59 -106
  181. package/lib/server/input.js +136 -166
  182. package/lib/server/instrumentation.js +49 -44
  183. package/lib/server/javascript.js +157 -151
  184. package/lib/server/launchApp.js +92 -73
  185. package/lib/server/localUtils.js +211 -0
  186. package/lib/server/macEditingCommands.js +141 -137
  187. package/lib/server/network.js +263 -297
  188. package/lib/server/page.js +353 -432
  189. package/lib/server/pageBinding.js +88 -0
  190. package/lib/server/pipeTransport.js +49 -45
  191. package/lib/server/playwright.js +60 -67
  192. package/lib/server/progress.js +56 -51
  193. package/lib/server/protocolError.js +34 -31
  194. package/lib/server/recorder/chat.js +161 -0
  195. package/lib/server/recorder/contextRecorder.js +135 -148
  196. package/lib/server/recorder/recorderApp.js +129 -132
  197. package/lib/server/recorder/recorderCollection.js +57 -57
  198. package/lib/server/recorder/recorderFrontend.js +15 -4
  199. package/lib/server/recorder/recorderRunner.js +80 -100
  200. package/lib/server/recorder/recorderUtils.js +59 -72
  201. package/lib/server/recorder/throttledFile.js +42 -31
  202. package/lib/server/recorder.js +186 -190
  203. package/lib/server/registry/browserFetcher.js +107 -100
  204. package/lib/server/registry/dependencies.js +247 -198
  205. package/lib/server/registry/index.js +928 -709
  206. package/lib/server/registry/nativeDeps.js +1073 -461
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +166 -182
  209. package/lib/server/selectors.js +85 -46
  210. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  211. package/lib/server/socksInterceptor.js +62 -67
  212. package/lib/server/storageScript.js +154 -0
  213. package/lib/server/timeoutSettings.js +89 -0
  214. package/lib/server/trace/recorder/snapshotter.js +70 -88
  215. package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
  216. package/lib/server/trace/recorder/tracing.js +324 -327
  217. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  218. package/lib/server/trace/viewer/traceViewer.js +172 -137
  219. package/lib/server/transport.js +125 -133
  220. package/lib/server/types.js +26 -22
  221. package/lib/server/usKeyboardLayout.js +135 -545
  222. package/lib/server/utils/ascii.js +44 -0
  223. package/lib/server/utils/comparators.js +161 -0
  224. package/lib/server/utils/crypto.js +216 -0
  225. package/lib/server/utils/debug.js +47 -0
  226. package/lib/server/utils/debugLogger.js +114 -0
  227. package/lib/server/utils/env.js +68 -0
  228. package/lib/server/utils/eventsHelper.js +39 -0
  229. package/lib/server/utils/expectUtils.js +38 -0
  230. package/lib/server/utils/fileUtils.js +191 -0
  231. package/lib/server/utils/happyEyeballs.js +207 -0
  232. package/lib/server/utils/hostPlatform.js +109 -0
  233. package/lib/server/utils/httpServer.js +218 -0
  234. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  235. package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
  236. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  237. package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
  238. package/lib/server/utils/linuxUtils.js +71 -0
  239. package/lib/server/utils/network.js +217 -0
  240. package/lib/server/utils/nodePlatform.js +148 -0
  241. package/lib/server/utils/pipeTransport.js +84 -0
  242. package/lib/server/utils/processLauncher.js +238 -0
  243. package/lib/server/utils/profiler.js +65 -0
  244. package/lib/server/utils/socksProxy.js +511 -0
  245. package/lib/server/utils/spawnAsync.js +41 -0
  246. package/lib/server/utils/task.js +51 -0
  247. package/lib/server/utils/userAgent.js +98 -0
  248. package/lib/server/utils/wsServer.js +132 -0
  249. package/lib/server/utils/zipFile.js +74 -0
  250. package/lib/server/utils/zones.js +57 -0
  251. package/lib/server/webkit/protocol.d.js +16 -0
  252. package/lib/server/webkit/webkit.js +76 -63
  253. package/lib/server/webkit/wkAccessibility.js +161 -118
  254. package/lib/server/webkit/wkBrowser.js +163 -180
  255. package/lib/server/webkit/wkConnection.js +59 -83
  256. package/lib/server/webkit/wkExecutionContext.js +96 -73
  257. package/lib/server/webkit/wkInput.js +87 -75
  258. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  259. package/lib/server/webkit/wkPage.js +536 -645
  260. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  261. package/lib/server/webkit/wkWorkers.js +77 -77
  262. package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
  263. package/lib/utils/isomorphic/assert.js +31 -0
  264. package/lib/utils/isomorphic/builtins.js +90 -0
  265. package/lib/utils/isomorphic/colors.js +72 -0
  266. package/lib/utils/isomorphic/cssParser.js +123 -127
  267. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  268. package/lib/utils/isomorphic/headers.js +53 -0
  269. package/lib/utils/isomorphic/locatorGenerators.js +344 -349
  270. package/lib/utils/isomorphic/locatorParser.js +103 -106
  271. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  272. package/lib/utils/isomorphic/manualPromise.js +115 -0
  273. package/lib/utils/isomorphic/mimeType.js +453 -22
  274. package/lib/utils/isomorphic/multimap.js +81 -0
  275. package/lib/utils/isomorphic/rtti.js +43 -0
  276. package/lib/utils/isomorphic/selectorParser.js +183 -193
  277. package/lib/utils/isomorphic/semaphore.js +54 -0
  278. package/lib/utils/isomorphic/stackTrace.js +158 -0
  279. package/lib/utils/isomorphic/stringUtils.js +113 -106
  280. package/lib/utils/isomorphic/time.js +44 -0
  281. package/lib/utils/isomorphic/timeoutRunner.js +67 -0
  282. package/lib/utils/isomorphic/traceUtils.js +52 -32
  283. package/lib/utils/isomorphic/types.js +16 -0
  284. package/lib/utils/isomorphic/urlMatch.js +114 -71
  285. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  286. package/lib/utils.js +101 -0
  287. package/lib/utilsBundle.js +101 -76
  288. package/lib/utilsBundleImpl/index.js +114 -116
  289. package/lib/vite/htmlReport/index.html +26 -20
  290. package/lib/vite/recorder/assets/codeMirrorModule-DVQi6prl.js +24 -0
  291. package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
  292. package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
  293. package/lib/vite/recorder/index.html +2 -2
  294. package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
  295. package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
  296. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  297. package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
  298. package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
  299. package/lib/vite/traceViewer/index.html +4 -7
  300. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  301. package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
  302. package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
  303. package/lib/vite/traceViewer/uiMode.html +4 -7
  304. package/lib/zipBundle.js +32 -23
  305. package/lib/zipBundleImpl.js +4 -4
  306. package/package.json +7 -7
  307. package/types/protocol.d.ts +819 -127
  308. package/types/types.d.ts +196 -75
  309. package/bin/PrintDeps.exe +0 -0
  310. package/bin/README.md +0 -2
  311. package/lib/common/socksProxy.js +0 -569
  312. package/lib/common/timeoutSettings.js +0 -73
  313. package/lib/common/types.js +0 -5
  314. package/lib/image_tools/colorUtils.js +0 -98
  315. package/lib/image_tools/imageChannel.js +0 -70
  316. package/lib/protocol/transport.js +0 -82
  317. package/lib/server/ariaSnapshot.js +0 -33
  318. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
  319. package/lib/server/recorder/recorderInTraceViewer.js +0 -144
  320. package/lib/utils/ascii.js +0 -31
  321. package/lib/utils/comparators.js +0 -153
  322. package/lib/utils/crypto.js +0 -171
  323. package/lib/utils/debug.js +0 -46
  324. package/lib/utils/debugLogger.js +0 -91
  325. package/lib/utils/env.js +0 -49
  326. package/lib/utils/eventsHelper.js +0 -38
  327. package/lib/utils/expectUtils.js +0 -33
  328. package/lib/utils/fileUtils.js +0 -205
  329. package/lib/utils/happy-eyeballs.js +0 -194
  330. package/lib/utils/headers.js +0 -52
  331. package/lib/utils/hostPlatform.js +0 -139
  332. package/lib/utils/httpServer.js +0 -237
  333. package/lib/utils/index.js +0 -368
  334. package/lib/utils/isomorphic/recorderUtils.js +0 -227
  335. package/lib/utils/linuxUtils.js +0 -78
  336. package/lib/utils/manualPromise.js +0 -109
  337. package/lib/utils/multimap.js +0 -75
  338. package/lib/utils/network.js +0 -160
  339. package/lib/utils/processLauncher.js +0 -248
  340. package/lib/utils/profiler.js +0 -53
  341. package/lib/utils/rtti.js +0 -44
  342. package/lib/utils/semaphore.js +0 -51
  343. package/lib/utils/sequence.js +0 -64
  344. package/lib/utils/spawnAsync.js +0 -45
  345. package/lib/utils/stackTrace.js +0 -134
  346. package/lib/utils/task.js +0 -58
  347. package/lib/utils/time.js +0 -37
  348. package/lib/utils/timeoutRunner.js +0 -66
  349. package/lib/utils/traceUtils.js +0 -44
  350. package/lib/utils/userAgent.js +0 -105
  351. package/lib/utils/wsServer.js +0 -127
  352. package/lib/utils/zipFile.js +0 -75
  353. package/lib/utils/zones.js +0 -71
  354. package/lib/vite/recorder/assets/codeMirrorModule-AFvV6hAs.js +0 -24
  355. package/lib/vite/recorder/assets/index-_cTWgVuJ.js +0 -184
  356. package/lib/vite/traceViewer/assets/codeMirrorModule-KatbITLF.js +0 -24
  357. package/lib/vite/traceViewer/assets/inspectorTab-DdpLd2bb.js +0 -68
  358. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  359. package/lib/vite/traceViewer/assets/workbench-CdYbzWFD.js +0 -9
  360. package/lib/vite/traceViewer/embedded.6m3UZh7r.js +0 -2
  361. package/lib/vite/traceViewer/embedded.html +0 -18
  362. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
  363. package/lib/vite/traceViewer/index.WUV-8boJ.js +0 -2
  364. package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
  365. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  366. package/lib/vite/traceViewer/recorder.OT2tVHgn.js +0 -2
  367. package/lib/vite/traceViewer/recorder.html +0 -17
  368. package/lib/vite/traceViewer/uiMode.BZBTyvGn.js +0 -5
  369. package/lib/vite/traceViewer/workbench.C-zR9ysA.css +0 -1
  370. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  371. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  372. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  373. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -1,114 +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 _browser = require("../browser");
9
- var _browserContext = require("../browserContext");
10
- var _utils = require("../../utils");
11
- var network = _interopRequireWildcard(require("../network"));
12
- var _page = require("../page");
13
- var _frames = require("../frames");
14
- var _crConnection = require("./crConnection");
15
- var _crPage = require("./crPage");
16
- var _crProtocolHelper = require("./crProtocolHelper");
17
- var _crServiceWorker = require("./crServiceWorker");
18
- var _artifact = require("../artifact");
19
- 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); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
- /**
23
- * Copyright 2017 Google Inc. All rights reserved.
24
- * Modifications copyright (c) Microsoft Corporation.
25
- *
26
- * Licensed under the Apache License, Version 2.0 (the "License");
27
- * you may not use this file except in compliance with the License.
28
- * You may obtain a copy of the License at
29
- *
30
- * http://www.apache.org/licenses/LICENSE-2.0
31
- *
32
- * Unless required by applicable law or agreed to in writing, software
33
- * distributed under the License is distributed on an "AS IS" BASIS,
34
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35
- * See the License for the specific language governing permissions and
36
- * limitations under the License.
37
- */
38
-
39
- 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
+ }
40
67
  static async connect(parent, transport, options, devtools) {
41
- // Make a copy in case we need to update `headful` property below.
42
- options = {
43
- ...options
44
- };
45
- const connection = new _crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector);
68
+ options = { ...options };
69
+ const connection = new import_crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector);
46
70
  const browser = new CRBrowser(parent, connection, options);
47
71
  browser._devtools = devtools;
48
- if (browser.isClank()) browser._isCollocatedWithServer = false;
72
+ if (browser.isClank())
73
+ browser._isCollocatedWithServer = false;
49
74
  const session = connection.rootSession;
50
- if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();
51
- const version = await session.send('Browser.getVersion');
52
- 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);
53
79
  browser._userAgent = version.userAgent;
54
- // We don't trust the option as it may lie in case of connectOverCDP where remote browser
55
- // may have been launched with different options.
56
- browser.options.headful = !version.userAgent.includes('Headless');
80
+ browser.options.headful = !version.userAgent.includes("Headless");
57
81
  if (!options.persistent) {
58
- await session.send('Target.setAutoAttach', {
59
- autoAttach: true,
60
- waitForDebuggerOnStart: true,
61
- flatten: true
62
- });
82
+ await session.send("Target.setAutoAttach", { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });
63
83
  return browser;
64
84
  }
65
- browser._defaultContext = new CRBrowserContext(browser, undefined, options.persistent);
66
- await Promise.all([session.send('Target.setAutoAttach', {
67
- autoAttach: true,
68
- waitForDebuggerOnStart: true,
69
- flatten: true
70
- }).then(async () => {
71
- // Target.setAutoAttach has a bug where it does not wait for new Targets being attached.
72
- // However making a dummy call afterwards fixes this.
73
- // This can be removed after https://chromium-review.googlesource.com/c/chromium/src/+/2885888 lands in stable.
74
- await session.send('Target.getTargetInfo');
75
- }), 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
+ ]);
76
92
  await browser._waitForAllPagesToBeInitialized();
77
93
  return browser;
78
94
  }
79
- constructor(parent, connection, options) {
80
- super(parent, options);
81
- this._connection = void 0;
82
- this._session = void 0;
83
- this._clientRootSessionPromise = null;
84
- this._contexts = new Map();
85
- this._crPages = new Map();
86
- this._backgroundPages = new Map();
87
- this._serviceWorkers = new Map();
88
- this._devtools = void 0;
89
- this._version = '';
90
- this._tracingRecording = false;
91
- this._tracingClient = void 0;
92
- this._userAgent = '';
93
- this._connection = connection;
94
- this._session = this._connection.rootSession;
95
- this._connection.on(_crConnection.ConnectionEvents.Disconnected, () => this._didDisconnect());
96
- this._session.on('Target.attachedToTarget', this._onAttachedToTarget.bind(this));
97
- this._session.on('Target.detachedFromTarget', this._onDetachedFromTarget.bind(this));
98
- this._session.on('Browser.downloadWillBegin', this._onDownloadWillBegin.bind(this));
99
- this._session.on('Browser.downloadProgress', this._onDownloadProgress.bind(this));
100
- }
101
95
  async doCreateNewContext(options) {
102
96
  const proxy = options.proxyOverride || options.proxy;
103
- let proxyBypassList = undefined;
97
+ let proxyBypassList = void 0;
104
98
  if (proxy) {
105
- 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}` : "");
106
103
  }
107
- const {
108
- browserContextId
109
- } = await this._session.send('Target.createBrowserContext', {
104
+ const { browserContextId } = await this._session.send("Target.createBrowserContext", {
110
105
  disposeOnDetach: true,
111
- proxyServer: proxy ? proxy.server : undefined,
106
+ proxyServer: proxy ? proxy.server : void 0,
112
107
  proxyBypassList
113
108
  });
114
109
  const context = new CRBrowserContext(this, browserContextId, options);
@@ -126,72 +121,59 @@ class CRBrowser extends _browser.Browser {
126
121
  return this._userAgent;
127
122
  }
128
123
  _platform() {
129
- if (this._userAgent.includes('Windows')) return 'win';
130
- if (this._userAgent.includes('Macintosh')) return 'mac';
131
- return 'linux';
124
+ if (this._userAgent.includes("Windows"))
125
+ return "win";
126
+ if (this._userAgent.includes("Macintosh"))
127
+ return "mac";
128
+ return "linux";
132
129
  }
133
130
  isClank() {
134
- return this.options.name === 'clank';
131
+ return this.options.name === "clank";
135
132
  }
136
133
  async _waitForAllPagesToBeInitialized() {
137
- await Promise.all([...this._crPages.values()].map(page => page.pageOrError()));
138
- }
139
- _onAttachedToTarget({
140
- targetInfo,
141
- sessionId,
142
- waitingForDebugger
143
- }) {
144
- 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;
145
139
  const session = this._session.createChildSession(sessionId);
146
- (0, _utils.assert)(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2));
140
+ (0, import_assert.assert)(targetInfo.browserContextId, "targetInfo: " + JSON.stringify(targetInfo, null, 2));
147
141
  let context = this._contexts.get(targetInfo.browserContextId) || null;
148
142
  if (!context) {
149
- // TODO: auto attach only to pages from our contexts.
150
- // assert(this._defaultContext);
151
143
  context = this._defaultContext;
152
144
  }
153
- if (targetInfo.type === 'other' && targetInfo.url.startsWith('devtools://devtools') && this._devtools) {
145
+ if (targetInfo.type === "other" && targetInfo.url.startsWith("devtools://devtools") && this._devtools) {
154
146
  this._devtools.install(session);
155
147
  return;
156
148
  }
157
- const treatOtherAsPage = targetInfo.type === 'other' && process.env.PW_CHROMIUM_ATTACH_TO_OTHER;
158
- if (!context || targetInfo.type === 'other' && !treatOtherAsPage) {
159
- 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
+ });
160
153
  return;
161
154
  }
162
- (0, _utils.assert)(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
163
- (0, _utils.assert)(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
164
- (0, _utils.assert)(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
165
- if (targetInfo.type === 'background_page') {
166
- const backgroundPage = new _crPage.CRPage(session, targetInfo.targetId, context, null, {
167
- hasUIWindow: false,
168
- isBackgroundPage: true
169
- });
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 });
170
160
  this._backgroundPages.set(targetInfo.targetId, backgroundPage);
171
161
  return;
172
162
  }
173
- if (targetInfo.type === 'page' || treatOtherAsPage) {
163
+ if (targetInfo.type === "page" || treatOtherAsPage) {
174
164
  const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null;
175
- const crPage = new _crPage.CRPage(session, targetInfo.targetId, context, opener, {
176
- hasUIWindow: targetInfo.type === 'page',
177
- isBackgroundPage: false
178
- });
165
+ const crPage = new import_crPage.CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === "page", isBackgroundPage: false });
179
166
  this._crPages.set(targetInfo.targetId, crPage);
180
167
  return;
181
168
  }
182
- if (targetInfo.type === 'service_worker') {
183
- 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);
184
171
  this._serviceWorkers.set(targetInfo.targetId, serviceWorker);
185
172
  context.emit(CRBrowserContext.CREvents.ServiceWorker, serviceWorker);
186
173
  return;
187
174
  }
188
-
189
- // Detach from any targets we are not interested in, to avoid side-effects.
190
- //
191
- // One example of a side effect: upon shared worker restart, we receive
192
- // Inspector.targetReloadedAfterCrash and backend waits for Runtime.runIfWaitingForDebugger
193
- // from any attached client. If we do not resume, shared worker will stall.
194
- session.detach().catch(() => {});
175
+ session.detach().catch(() => {
176
+ });
195
177
  }
196
178
  _onDetachedFromTarget(payload) {
197
179
  const targetId = payload.targetId;
@@ -215,70 +197,89 @@ class CRBrowser extends _browser.Browser {
215
197
  }
216
198
  }
217
199
  _didDisconnect() {
218
- for (const crPage of this._crPages.values()) crPage.didClose();
200
+ for (const crPage of this._crPages.values())
201
+ crPage.didClose();
219
202
  this._crPages.clear();
220
- for (const backgroundPage of this._backgroundPages.values()) backgroundPage.didClose();
203
+ for (const backgroundPage of this._backgroundPages.values())
204
+ backgroundPage.didClose();
221
205
  this._backgroundPages.clear();
222
- for (const serviceWorker of this._serviceWorkers.values()) serviceWorker.didClose();
206
+ for (const serviceWorker of this._serviceWorkers.values())
207
+ serviceWorker.didClose();
223
208
  this._serviceWorkers.clear();
224
209
  this._didClose();
225
210
  }
226
211
  _findOwningPage(frameId) {
227
212
  for (const crPage of this._crPages.values()) {
228
213
  const frame = crPage._page._frameManager.frame(frameId);
229
- if (frame) return crPage;
214
+ if (frame)
215
+ return crPage;
230
216
  }
231
217
  return null;
232
218
  }
233
219
  _onDownloadWillBegin(payload) {
234
220
  const page = this._findOwningPage(payload.frameId);
235
221
  if (!page) {
236
- // There might be no page when download originates from something unusual, like
237
- // a DevTools window or maybe an extension page.
238
- // See https://github.com/microsoft/playwright/issues/22551.
239
222
  return;
240
223
  }
241
224
  page.willBeginDownload();
242
- let originPage = page._initializedPage;
243
- // If it's a new window download, report it on the opener page.
244
- if (!originPage && page._opener) originPage = page._opener._initializedPage;
245
- if (!originPage) return;
225
+ let originPage = page._page.initializedOrUndefined();
226
+ if (!originPage && page._opener)
227
+ originPage = page._opener._page.initializedOrUndefined();
228
+ if (!originPage)
229
+ return;
246
230
  this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename);
247
231
  }
248
232
  _onDownloadProgress(payload) {
249
- if (payload.state === 'completed') this._downloadFinished(payload.guid, '');
250
- 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");
251
237
  }
252
238
  async _closePage(crPage) {
253
- await this._session.send('Target.closeTarget', {
254
- targetId: crPage._targetId
255
- });
239
+ await this._session.send("Target.closeTarget", { targetId: crPage._targetId });
256
240
  }
257
241
  async newBrowserCDPSession() {
258
242
  return await this._connection.createBrowserSession();
259
243
  }
260
244
  async startTracing(page, options = {}) {
261
- (0, _utils.assert)(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');
245
+ (0, import_assert.assert)(!this._tracingRecording, "Cannot start recording trace while already recording trace.");
262
246
  this._tracingClient = page ? page._delegate._mainFrameSession._client : this._session;
263
- 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'];
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
+ ];
264
261
  const {
265
262
  screenshots = false,
266
263
  categories = defaultCategories
267
264
  } = options;
268
- if (screenshots) categories.push('disabled-by-default-devtools.screenshot');
265
+ if (screenshots)
266
+ categories.push("disabled-by-default-devtools.screenshot");
269
267
  this._tracingRecording = true;
270
- await this._tracingClient.send('Tracing.start', {
271
- transferMode: 'ReturnAsStream',
272
- categories: categories.join(',')
268
+ await this._tracingClient.send("Tracing.start", {
269
+ transferMode: "ReturnAsStream",
270
+ categories: categories.join(",")
273
271
  });
274
272
  }
275
273
  async stopTracing() {
276
- (0, _utils.assert)(this._tracingClient, 'Tracing was not started.');
277
- const [event] = await Promise.all([new Promise(f => this._tracingClient.once('Tracing.tracingComplete', f)), this._tracingClient.send('Tracing.end')]);
278
- const tracingPath = _path.default.join(this.options.artifactsDir, (0, _utils.createGuid)() + '.crtrace');
279
- 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);
280
281
  this._tracingRecording = false;
281
- const artifact = new _artifact.Artifact(this, tracingPath);
282
+ const artifact = new import_artifact.Artifact(this, tracingPath);
282
283
  artifact.reportFinished();
283
284
  return artifact;
284
285
  }
@@ -286,22 +287,28 @@ class CRBrowser extends _browser.Browser {
286
287
  return !this._connection._closed;
287
288
  }
288
289
  async _clientRootSession() {
289
- if (!this._clientRootSessionPromise) this._clientRootSessionPromise = this._connection.createBrowserSession();
290
+ if (!this._clientRootSessionPromise)
291
+ this._clientRootSessionPromise = this._connection.createBrowserSession();
290
292
  return this._clientRootSessionPromise;
291
293
  }
292
294
  }
293
- exports.CRBrowser = CRBrowser;
294
- 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
+ }
295
302
  constructor(browser, browserContextId, options) {
296
303
  super(browser, options, browserContextId);
297
304
  this._authenticateProxyViaCredentials();
298
305
  }
299
306
  async _initialize() {
300
- (0, _utils.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));
301
308
  const promises = [super._initialize()];
302
- if (this._browser.options.name !== 'clank' && this._options.acceptDownloads !== 'internal-browser-default') {
303
- promises.push(this._browser._session.send('Browser.setDownloadBehavior', {
304
- 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",
305
312
  browserContextId: this._browserContextId,
306
313
  downloadPath: this._browser.options.downloadsPath,
307
314
  eventsEnabled: true
@@ -310,47 +317,20 @@ class CRBrowserContext extends _browserContext.BrowserContext {
310
317
  await Promise.all(promises);
311
318
  }
312
319
  _crPages() {
313
- return [...this._browser._crPages.values()].filter(crPage => crPage._browserContext === this);
314
- }
315
- pages() {
316
- return this._crPages().map(crPage => crPage._initializedPage).filter(Boolean);
317
- }
318
- async newPageDelegate() {
319
- (0, _browserContext.assertBrowserContextIsNotOwned)(this);
320
- const oldKeys = this._browser.isClank() ? new Set(this._browser._crPages.keys()) : undefined;
321
- let {
322
- targetId
323
- } = await this._browser._session.send('Target.createTarget', {
324
- url: 'about:blank',
325
- browserContextId: this._browserContextId
326
- });
327
- if (oldKeys) {
328
- // Chrome for Android returns tab ids (1, 2, 3, 4, 5) instead of content target ids here, work around it via the
329
- // heuristic assuming that there is only one page created at a time.
330
- const newKeys = new Set(this._browser._crPages.keys());
331
- // Remove old keys.
332
- for (const key of oldKeys) newKeys.delete(key);
333
- // Remove potential concurrent popups.
334
- for (const key of newKeys) {
335
- const page = this._browser._crPages.get(key);
336
- if (page._opener) newKeys.delete(key);
337
- }
338
- (0, _utils.assert)(newKeys.size === 1);
339
- [targetId] = [...newKeys];
340
- }
341
- return this._browser._crPages.get(targetId);
320
+ return [...this._browser._crPages.values()].filter((crPage) => crPage._browserContext === this);
321
+ }
322
+ possiblyUninitializedPages() {
323
+ return this._crPages().map((crPage) => crPage._page);
324
+ }
325
+ async doCreateNewPage() {
326
+ (0, import_browserContext.assertBrowserContextIsNotOwned)(this);
327
+ const { targetId } = await this._browser._session.send("Target.createTarget", { url: "about:blank", browserContextId: this._browserContextId });
328
+ return this._browser._crPages.get(targetId)._page;
342
329
  }
343
330
  async doGetCookies(urls) {
344
- const {
345
- cookies
346
- } = await this._browser._session.send('Storage.getCookies', {
347
- browserContextId: this._browserContextId
348
- });
349
- return network.filterCookies(cookies.map(c => {
350
- const copy = {
351
- sameSite: 'Lax',
352
- ...c
353
- };
331
+ const { cookies } = await this._browser._session.send("Storage.getCookies", { browserContextId: this._browserContextId });
332
+ return network.filterCookies(cookies.map((c) => {
333
+ const copy = { sameSite: "Lax", ...c };
354
334
  delete copy.size;
355
335
  delete copy.priority;
356
336
  delete copy.session;
@@ -361,156 +341,158 @@ class CRBrowserContext extends _browserContext.BrowserContext {
361
341
  }), urls);
362
342
  }
363
343
  async addCookies(cookies) {
364
- await this._browser._session.send('Storage.setCookies', {
365
- cookies: network.rewriteCookies(cookies),
366
- browserContextId: this._browserContextId
367
- });
344
+ await this._browser._session.send("Storage.setCookies", { cookies: network.rewriteCookies(cookies), browserContextId: this._browserContextId });
368
345
  }
369
346
  async doClearCookies() {
370
- await this._browser._session.send('Storage.clearCookies', {
371
- browserContextId: this._browserContextId
372
- });
347
+ await this._browser._session.send("Storage.clearCookies", { browserContextId: this._browserContextId });
373
348
  }
374
349
  async doGrantPermissions(origin, permissions) {
375
- 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'], ['accessibility-events', 'accessibilityEvents'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'],
376
- // chrome-specific permissions we have.
377
- ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess']]);
378
- const filtered = permissions.map(permission => {
350
+ const webPermissionToProtocol = /* @__PURE__ */ new Map([
351
+ ["geolocation", "geolocation"],
352
+ ["midi", "midi"],
353
+ ["notifications", "notifications"],
354
+ ["camera", "videoCapture"],
355
+ ["microphone", "audioCapture"],
356
+ ["background-sync", "backgroundSync"],
357
+ ["ambient-light-sensor", "sensors"],
358
+ ["accelerometer", "sensors"],
359
+ ["gyroscope", "sensors"],
360
+ ["magnetometer", "sensors"],
361
+ ["clipboard-read", "clipboardReadWrite"],
362
+ ["clipboard-write", "clipboardSanitizedWrite"],
363
+ ["payment-handler", "paymentHandler"],
364
+ // chrome-specific permissions we have.
365
+ ["midi-sysex", "midiSysex"],
366
+ ["storage-access", "storageAccess"]
367
+ ]);
368
+ const filtered = permissions.map((permission) => {
379
369
  const protocolPermission = webPermissionToProtocol.get(permission);
380
- if (!protocolPermission) throw new Error('Unknown permission: ' + permission);
370
+ if (!protocolPermission)
371
+ throw new Error("Unknown permission: " + permission);
381
372
  return protocolPermission;
382
373
  });
383
- await this._browser._session.send('Browser.grantPermissions', {
384
- origin: origin === '*' ? undefined : origin,
385
- browserContextId: this._browserContextId,
386
- permissions: filtered
387
- });
374
+ await this._browser._session.send("Browser.grantPermissions", { origin: origin === "*" ? void 0 : origin, browserContextId: this._browserContextId, permissions: filtered });
388
375
  }
389
376
  async doClearPermissions() {
390
- await this._browser._session.send('Browser.resetPermissions', {
391
- browserContextId: this._browserContextId
392
- });
377
+ await this._browser._session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
393
378
  }
394
379
  async setGeolocation(geolocation) {
395
- (0, _browserContext.verifyGeolocation)(geolocation);
380
+ (0, import_browserContext.verifyGeolocation)(geolocation);
396
381
  this._options.geolocation = geolocation;
397
- for (const page of this.pages()) await page._delegate.updateGeolocation();
382
+ for (const page of this.pages())
383
+ await page._delegate.updateGeolocation();
398
384
  }
399
385
  async setExtraHTTPHeaders(headers) {
400
386
  this._options.extraHTTPHeaders = headers;
401
- for (const page of this.pages()) await page._delegate.updateExtraHTTPHeaders();
402
- for (const sw of this.serviceWorkers()) await sw.updateExtraHTTPHeaders();
387
+ for (const page of this.pages())
388
+ await page._delegate.updateExtraHTTPHeaders();
389
+ for (const sw of this.serviceWorkers())
390
+ await sw.updateExtraHTTPHeaders();
403
391
  }
404
392
  async setUserAgent(userAgent) {
405
393
  this._options.userAgent = userAgent;
406
- for (const page of this.pages()) await page._delegate.updateUserAgent();
407
- // TODO: service workers don't have Emulation domain?
394
+ for (const page of this.pages())
395
+ await page._delegate.updateUserAgent();
408
396
  }
409
397
  async setOffline(offline) {
410
398
  this._options.offline = offline;
411
- for (const page of this.pages()) await page._delegate.updateOffline();
412
- for (const sw of this.serviceWorkers()) await sw.updateOffline();
399
+ for (const page of this.pages())
400
+ await page._delegate.updateOffline();
401
+ for (const sw of this.serviceWorkers())
402
+ await sw.updateOffline();
413
403
  }
414
404
  async doSetHTTPCredentials(httpCredentials) {
415
405
  this._options.httpCredentials = httpCredentials;
416
- for (const page of this.pages()) await page._delegate.updateHttpCredentials();
417
- for (const sw of this.serviceWorkers()) await sw.updateHttpCredentials();
406
+ for (const page of this.pages())
407
+ await page._delegate.updateHttpCredentials();
408
+ for (const sw of this.serviceWorkers())
409
+ await sw.updateHttpCredentials();
418
410
  }
419
411
  async doAddInitScript(initScript) {
420
- for (const page of this.pages()) await page._delegate.addInitScript(initScript);
412
+ for (const page of this.pages())
413
+ await page._delegate.addInitScript(initScript);
421
414
  }
422
415
  async doRemoveNonInternalInitScripts() {
423
- for (const page of this.pages()) await page._delegate.removeNonInternalInitScripts();
416
+ for (const page of this.pages())
417
+ await page._delegate.removeNonInternalInitScripts();
424
418
  }
425
419
  async doUpdateRequestInterception() {
426
- for (const page of this.pages()) await page._delegate.updateRequestInterception();
427
- for (const sw of this.serviceWorkers()) await sw.updateRequestInterception();
420
+ for (const page of this.pages())
421
+ await page._delegate.updateRequestInterception();
422
+ for (const sw of this.serviceWorkers())
423
+ await sw.updateRequestInterception();
428
424
  }
429
425
  async doClose(reason) {
430
- // Headful chrome cannot dispose browser context with opened 'beforeunload'
431
- // dialogs, so we should close all that are currently opened.
432
- // We also won't get new ones since `Target.disposeBrowserContext` does not trigger
433
- // beforeunload.
434
426
  const openedBeforeUnloadDialogs = [];
435
427
  for (const crPage of this._crPages()) {
436
- const dialogs = [...crPage._page._frameManager._openedDialogs].filter(dialog => dialog.type() === 'beforeunload');
428
+ const dialogs = [...crPage._page._frameManager._openedDialogs].filter((dialog) => dialog.type() === "beforeunload");
437
429
  openedBeforeUnloadDialogs.push(...dialogs);
438
430
  }
439
- await Promise.all(openedBeforeUnloadDialogs.map(dialog => dialog.dismiss()));
431
+ await Promise.all(openedBeforeUnloadDialogs.map((dialog) => dialog.dismiss()));
440
432
  if (!this._browserContextId) {
441
433
  await this.stopVideoRecording();
442
- // Closing persistent context should close the browser.
443
- await this._browser.close({
444
- reason
445
- });
434
+ await this._browser.close({ reason });
446
435
  return;
447
436
  }
448
- await this._browser._session.send('Target.disposeBrowserContext', {
449
- browserContextId: this._browserContextId
450
- });
437
+ await this._browser._session.send("Target.disposeBrowserContext", { browserContextId: this._browserContextId });
451
438
  this._browser._contexts.delete(this._browserContextId);
452
439
  for (const [targetId, serviceWorker] of this._browser._serviceWorkers) {
453
- if (serviceWorker._browserContext !== this) continue;
454
- // When closing a browser context, service workers are shutdown
455
- // asynchronously and we get detached from them later.
456
- // To avoid the wrong order of notifications, we manually fire
457
- // "close" event here and forget about the service worker.
440
+ if (serviceWorker._browserContext !== this)
441
+ continue;
458
442
  serviceWorker.didClose();
459
443
  this._browser._serviceWorkers.delete(targetId);
460
444
  }
461
445
  }
462
446
  async stopVideoRecording() {
463
- await Promise.all(this._crPages().map(crPage => crPage._mainFrameSession._stopVideoRecording()));
447
+ await Promise.all(this._crPages().map((crPage) => crPage._mainFrameSession._stopVideoRecording()));
464
448
  }
465
449
  onClosePersistent() {
466
- // When persistent context is closed, we do not necessary get Target.detachedFromTarget
467
- // for all the background pages.
468
450
  for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {
469
- if (backgroundPage._browserContext === this && backgroundPage._initializedPage) {
451
+ if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {
470
452
  backgroundPage.didClose();
471
453
  this._browser._backgroundPages.delete(targetId);
472
454
  }
473
455
  }
474
456
  }
475
457
  async clearCache() {
476
- for (const page of this._crPages()) await page._networkManager.clearCache();
458
+ for (const page of this._crPages())
459
+ await page._networkManager.clearCache();
477
460
  }
478
461
  async cancelDownload(guid) {
479
- // The upstream CDP method is implemented in a way that no explicit error would be given
480
- // regarding the requested `guid`, even if the download is in a state not suitable for
481
- // cancellation (finished, cancelled, etc.) or the guid is invalid at all.
482
- await this._browser._session.send('Browser.cancelDownload', {
483
- guid: guid,
462
+ await this._browser._session.send("Browser.cancelDownload", {
463
+ guid,
484
464
  browserContextId: this._browserContextId
485
465
  });
486
466
  }
487
467
  backgroundPages() {
488
468
  const result = [];
489
469
  for (const backgroundPage of this._browser._backgroundPages.values()) {
490
- if (backgroundPage._browserContext === this && backgroundPage._initializedPage) result.push(backgroundPage._initializedPage);
470
+ if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined())
471
+ result.push(backgroundPage._page);
491
472
  }
492
473
  return result;
493
474
  }
494
475
  serviceWorkers() {
495
- return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker._browserContext === this);
476
+ return Array.from(this._browser._serviceWorkers.values()).filter((serviceWorker) => serviceWorker._browserContext === this);
496
477
  }
497
478
  async newCDPSession(page) {
498
479
  let targetId = null;
499
- if (page instanceof _page.Page) {
480
+ if (page instanceof import_page.Page) {
500
481
  targetId = page._delegate._targetId;
501
- } else if (page instanceof _frames.Frame) {
482
+ } else if (page instanceof import_frames.Frame) {
502
483
  const session = page._page._delegate._sessions.get(page._id);
503
- if (!session) throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);
484
+ if (!session)
485
+ throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);
504
486
  targetId = session._targetId;
505
487
  } else {
506
- throw new Error('page: expected Page or Frame');
488
+ throw new Error("page: expected Page or Frame");
507
489
  }
508
490
  const rootSession = await this._browser._clientRootSession();
509
491
  return rootSession.attachToTarget(targetId);
510
492
  }
511
493
  }
512
- exports.CRBrowserContext = CRBrowserContext;
513
- CRBrowserContext.CREvents = {
514
- BackgroundPage: 'backgroundpage',
515
- ServiceWorker: 'serviceworker'
516
- };
494
+ // Annotate the CommonJS export names for ESM import in node:
495
+ 0 && (module.exports = {
496
+ CRBrowser,
497
+ CRBrowserContext
498
+ });