@checkly/playwright-core 1.51.17-beta.1 → 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 -36
  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-DrMbgOIo.js +0 -16684
  345. package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
  346. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  347. package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
  348. package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
  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-CB-2okZ8.js +0 -16684
  352. package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
  353. package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
  354. package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
  355. package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
  356. package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
  357. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  358. package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
  359. package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
  360. package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
  361. package/lib/vite/traceViewer/embedded.html +0 -18
  362. package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
  363. package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
  364. package/lib/vite/traceViewer/index.html +0 -47
  365. package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
  366. package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  367. package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
  368. package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
  369. package/lib/vite/traceViewer/recorder.html +0 -17
  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.C9_OcpPU.js +0 -1756
  373. package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
  374. package/lib/vite/traceViewer/uiMode.html +0 -21
  375. package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
  376. package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
@@ -1,97 +1,98 @@
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 ffBrowser_exports = {};
30
+ __export(ffBrowser_exports, {
31
+ FFBrowser: () => FFBrowser,
32
+ FFBrowserContext: () => FFBrowserContext
5
33
  });
6
- exports.FFBrowserContext = exports.FFBrowser = void 0;
7
- var _utils = require("../../utils");
8
- var _browser = require("../browser");
9
- var _browserContext = require("../browserContext");
10
- var _errors = require("../errors");
11
- var network = _interopRequireWildcard(require("../network"));
12
- var _page = require("../page");
13
- var _ffConnection = require("./ffConnection");
14
- var _ffPage = require("./ffPage");
15
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
- 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; }
17
- /**
18
- * Copyright 2018 Google Inc. All rights reserved.
19
- * Modifications copyright (c) Microsoft Corporation.
20
- *
21
- * Licensed under the Apache License, Version 2.0 (the 'License');
22
- * you may not use this file except in compliance with the License.
23
- * You may obtain a copy of the License at
24
- *
25
- * http://www.apache.org/licenses/LICENSE-2.0
26
- *
27
- * Unless required by applicable law or agreed to in writing, software
28
- * distributed under the License is distributed on an 'AS IS' BASIS,
29
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
- * See the License for the specific language governing permissions and
31
- * limitations under the License.
32
- */
33
-
34
- class FFBrowser extends _browser.Browser {
34
+ module.exports = __toCommonJS(ffBrowser_exports);
35
+ var import_utils = require("../../utils");
36
+ var import_browser = require("../browser");
37
+ var import_browserContext = require("../browserContext");
38
+ var import_errors = require("../errors");
39
+ var network = __toESM(require("../network"));
40
+ var import_ffConnection = require("./ffConnection");
41
+ var import_ffPage = require("./ffPage");
42
+ var import_page = require("../page");
43
+ class FFBrowser extends import_browser.Browser {
44
+ constructor(parent, connection, options) {
45
+ super(parent, options);
46
+ this._version = "";
47
+ this._userAgent = "";
48
+ this._connection = connection;
49
+ this.session = connection.rootSession;
50
+ this._ffPages = /* @__PURE__ */ new Map();
51
+ this._contexts = /* @__PURE__ */ new Map();
52
+ this._connection.on(import_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());
53
+ this.session.on("Browser.attachedToTarget", this._onAttachedToTarget.bind(this));
54
+ this.session.on("Browser.detachedFromTarget", this._onDetachedFromTarget.bind(this));
55
+ this.session.on("Browser.downloadCreated", this._onDownloadCreated.bind(this));
56
+ this.session.on("Browser.downloadFinished", this._onDownloadFinished.bind(this));
57
+ this.session.on("Browser.videoRecordingFinished", this._onVideoRecordingFinished.bind(this));
58
+ }
35
59
  static async connect(parent, transport, options) {
36
- var _options$originalLaun;
37
- const connection = new _ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);
60
+ const connection = new import_ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);
38
61
  const browser = new FFBrowser(parent, connection, options);
39
- if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();
40
- let firefoxUserPrefs = (_options$originalLaun = options.originalLaunchOptions.firefoxUserPrefs) !== null && _options$originalLaun !== void 0 ? _options$originalLaun : {};
41
- if (Object.keys(kBandaidFirefoxUserPrefs).length) firefoxUserPrefs = {
42
- ...kBandaidFirefoxUserPrefs,
43
- ...firefoxUserPrefs
44
- };
45
- const promises = [browser.session.send('Browser.enable', {
46
- attachToDefaultContext: !!options.persistent,
47
- userPrefs: Object.entries(firefoxUserPrefs).map(([name, value]) => ({
48
- name,
49
- value
50
- }))
51
- }), browser._initVersion()];
62
+ if (options.__testHookOnConnectToBrowser)
63
+ await options.__testHookOnConnectToBrowser();
64
+ let firefoxUserPrefs = options.originalLaunchOptions.firefoxUserPrefs ?? {};
65
+ if (Object.keys(kBandaidFirefoxUserPrefs).length)
66
+ firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };
67
+ const promises = [
68
+ browser.session.send("Browser.enable", {
69
+ attachToDefaultContext: !!options.persistent,
70
+ userPrefs: Object.entries(firefoxUserPrefs).map(([name, value]) => ({ name, value }))
71
+ }),
72
+ browser._initVersion()
73
+ ];
52
74
  if (options.persistent) {
53
- browser._defaultContext = new FFBrowserContext(browser, undefined, options.persistent);
75
+ browser._defaultContext = new FFBrowserContext(browser, void 0, options.persistent);
54
76
  promises.push(browser._defaultContext._initialize());
55
77
  }
56
78
  const proxy = options.originalLaunchOptions.proxyOverride || options.proxy;
57
- if (proxy) promises.push(browser.session.send('Browser.setBrowserProxy', toJugglerProxyOptions(proxy)));
79
+ if (proxy)
80
+ promises.push(browser.session.send("Browser.setBrowserProxy", toJugglerProxyOptions(proxy)));
58
81
  await Promise.all(promises);
59
82
  return browser;
60
83
  }
61
- constructor(parent, connection, options) {
62
- super(parent, options);
63
- this._connection = void 0;
64
- this.session = void 0;
65
- this._ffPages = void 0;
66
- this._contexts = void 0;
67
- this._version = '';
68
- this._userAgent = '';
69
- this._connection = connection;
70
- this.session = connection.rootSession;
71
- this._ffPages = new Map();
72
- this._contexts = new Map();
73
- this._connection.on(_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());
74
- this.session.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this));
75
- this.session.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this));
76
- this.session.on('Browser.downloadCreated', this._onDownloadCreated.bind(this));
77
- this.session.on('Browser.downloadFinished', this._onDownloadFinished.bind(this));
78
- this.session.on('Browser.videoRecordingFinished', this._onVideoRecordingFinished.bind(this));
79
- }
80
84
  async _initVersion() {
81
- const result = await this.session.send('Browser.getInfo');
82
- this._version = result.version.substring(result.version.indexOf('/') + 1);
85
+ const result = await this.session.send("Browser.getInfo");
86
+ this._version = result.version.substring(result.version.indexOf("/") + 1);
83
87
  this._userAgent = result.userAgent;
84
88
  }
85
89
  isConnected() {
86
90
  return !this._connection._closed;
87
91
  }
88
92
  async doCreateNewContext(options) {
89
- if (options.isMobile) throw new Error('options.isMobile is not supported in Firefox');
90
- const {
91
- browserContextId
92
- } = await this.session.send('Browser.createBrowserContext', {
93
- removeOnDetach: true
94
- });
93
+ if (options.isMobile)
94
+ throw new Error("options.isMobile is not supported in Firefox");
95
+ const { browserContextId } = await this.session.send("Browser.createBrowserContext", { removeOnDetach: true });
95
96
  const context = new FFBrowserContext(this, browserContextId, options);
96
97
  await context._initialize();
97
98
  this._contexts.set(browserContextId, context);
@@ -112,147 +113,94 @@ class FFBrowser extends _browser.Browser {
112
113
  ffPage.didClose();
113
114
  }
114
115
  _onAttachedToTarget(payload) {
115
- const {
116
- targetId,
117
- browserContextId,
118
- openerId,
119
- type
120
- } = payload.targetInfo;
121
- (0, _utils.assert)(type === 'page');
116
+ const { targetId, browserContextId, openerId, type } = payload.targetInfo;
117
+ (0, import_utils.assert)(type === "page");
122
118
  const context = browserContextId ? this._contexts.get(browserContextId) : this._defaultContext;
123
- (0, _utils.assert)(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);
119
+ (0, import_utils.assert)(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);
124
120
  const session = this._connection.createSession(payload.sessionId);
125
121
  const opener = openerId ? this._ffPages.get(openerId) : null;
126
- const ffPage = new _ffPage.FFPage(session, context, opener);
122
+ const ffPage = new import_ffPage.FFPage(session, context, opener);
127
123
  this._ffPages.set(targetId, ffPage);
128
124
  }
129
125
  _onDownloadCreated(payload) {
130
126
  const ffPage = this._ffPages.get(payload.pageTargetId);
131
- if (!ffPage) return;
132
-
133
- // Abort the navigation that turned into download.
134
- ffPage._page._frameManager.frameAbortedNavigation(payload.frameId, 'Download is starting');
127
+ if (!ffPage)
128
+ return;
129
+ ffPage._page.frameManager.frameAbortedNavigation(payload.frameId, "Download is starting");
135
130
  let originPage = ffPage._page.initializedOrUndefined();
136
- // If it's a new window download, report it on the opener page.
137
131
  if (!originPage) {
138
- // Resume the page creation with an error. The page will automatically close right
139
- // after the download begins.
140
- ffPage._markAsError(new Error('Starting new page download'));
141
- if (ffPage._opener) originPage = ffPage._opener._page.initializedOrUndefined();
132
+ ffPage._markAsError(new Error("Starting new page download"));
133
+ if (ffPage._opener)
134
+ originPage = ffPage._opener._page.initializedOrUndefined();
142
135
  }
143
- if (!originPage) return;
136
+ if (!originPage)
137
+ return;
144
138
  this._downloadCreated(originPage, payload.uuid, payload.url, payload.suggestedFileName);
145
139
  }
146
140
  _onDownloadFinished(payload) {
147
- const error = payload.canceled ? 'canceled' : payload.error;
141
+ const error = payload.canceled ? "canceled" : payload.error;
148
142
  this._downloadFinished(payload.uuid, error);
149
143
  }
150
144
  _onVideoRecordingFinished(payload) {
151
- var _this$_takeVideo;
152
- (_this$_takeVideo = this._takeVideo(payload.screencastId)) === null || _this$_takeVideo === void 0 || _this$_takeVideo.reportFinished();
145
+ this._takeVideo(payload.screencastId)?.reportFinished();
153
146
  }
154
147
  _onDisconnect() {
155
- for (const video of this._idToVideo.values()) video.artifact.reportFinished(new _errors.TargetClosedError());
148
+ for (const video of this._idToVideo.values())
149
+ video.artifact.reportFinished(new import_errors.TargetClosedError());
156
150
  this._idToVideo.clear();
157
- for (const ffPage of this._ffPages.values()) ffPage.didClose();
151
+ for (const ffPage of this._ffPages.values())
152
+ ffPage.didClose();
158
153
  this._ffPages.clear();
159
154
  this._didClose();
160
155
  }
161
156
  }
162
- exports.FFBrowser = FFBrowser;
163
- class FFBrowserContext extends _browserContext.BrowserContext {
157
+ class FFBrowserContext extends import_browserContext.BrowserContext {
164
158
  constructor(browser, browserContextId, options) {
165
159
  super(browser, options, browserContextId);
166
160
  }
167
161
  async _initialize() {
168
- (0, _utils.assert)(!this._ffPages().length);
162
+ (0, import_utils.assert)(!this._ffPages().length);
169
163
  const browserContextId = this._browserContextId;
170
- const promises = [super._initialize(), this._browser.session.send('Browser.addBinding', {
171
- browserContextId: this._browserContextId,
172
- name: _page.PageBinding.kPlaywrightBinding,
173
- script: ''
174
- })];
175
- if (this._options.acceptDownloads !== 'internal-browser-default') {
176
- promises.push(this._browser.session.send('Browser.setDownloadOptions', {
164
+ const promises = [
165
+ super._initialize(),
166
+ this._updateInitScripts()
167
+ ];
168
+ if (this._options.acceptDownloads !== "internal-browser-default") {
169
+ promises.push(this._browser.session.send("Browser.setDownloadOptions", {
177
170
  browserContextId,
178
171
  downloadOptions: {
179
- behavior: this._options.acceptDownloads === 'accept' ? 'saveToDisk' : 'cancel',
172
+ behavior: this._options.acceptDownloads === "accept" ? "saveToDisk" : "cancel",
180
173
  downloadsDir: this._browser.options.downloadsPath
181
174
  }
182
175
  }));
183
176
  }
184
- if (this._options.viewport) {
185
- const viewport = {
186
- viewportSize: {
187
- width: this._options.viewport.width,
188
- height: this._options.viewport.height
189
- },
190
- deviceScaleFactor: this._options.deviceScaleFactor || 1
191
- };
192
- promises.push(this._browser.session.send('Browser.setDefaultViewport', {
193
- browserContextId,
194
- viewport
195
- }));
196
- }
197
- if (this._options.hasTouch) promises.push(this._browser.session.send('Browser.setTouchOverride', {
198
- browserContextId,
199
- hasTouch: true
200
- }));
201
- if (this._options.userAgent) promises.push(this._browser.session.send('Browser.setUserAgentOverride', {
202
- browserContextId,
203
- userAgent: this._options.userAgent
204
- }));
205
- if (this._options.bypassCSP) promises.push(this._browser.session.send('Browser.setBypassCSP', {
206
- browserContextId,
207
- bypassCSP: true
208
- }));
209
- if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors) promises.push(this._browser.session.send('Browser.setIgnoreHTTPSErrors', {
210
- browserContextId,
211
- ignoreHTTPSErrors: true
212
- }));
213
- if (this._options.javaScriptEnabled === false) promises.push(this._browser.session.send('Browser.setJavaScriptDisabled', {
214
- browserContextId,
215
- javaScriptDisabled: true
216
- }));
217
- if (this._options.locale) promises.push(this._browser.session.send('Browser.setLocaleOverride', {
218
- browserContextId,
219
- locale: this._options.locale
220
- }));
221
- if (this._options.timezoneId) promises.push(this._browser.session.send('Browser.setTimezoneOverride', {
222
- browserContextId,
223
- timezoneId: this._options.timezoneId
224
- }));
225
- if (this._options.extraHTTPHeaders || this._options.locale) promises.push(this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []));
226
- if (this._options.httpCredentials) promises.push(this.setHTTPCredentials(this._options.httpCredentials));
227
- if (this._options.geolocation) promises.push(this.setGeolocation(this._options.geolocation));
228
- if (this._options.offline) promises.push(this.setOffline(this._options.offline));
229
- if (this._options.colorScheme !== 'no-override') {
230
- promises.push(this._browser.session.send('Browser.setColorScheme', {
231
- browserContextId,
232
- colorScheme: this._options.colorScheme !== undefined ? this._options.colorScheme : 'light'
233
- }));
234
- }
235
- if (this._options.reducedMotion !== 'no-override') {
236
- promises.push(this._browser.session.send('Browser.setReducedMotion', {
237
- browserContextId,
238
- reducedMotion: this._options.reducedMotion !== undefined ? this._options.reducedMotion : 'no-preference'
239
- }));
240
- }
241
- if (this._options.forcedColors !== 'no-override') {
242
- promises.push(this._browser.session.send('Browser.setForcedColors', {
243
- browserContextId,
244
- forcedColors: this._options.forcedColors !== undefined ? this._options.forcedColors : 'none'
245
- }));
246
- }
247
- if (this._options.contrast !== 'no-override') {
248
- promises.push(this._browser.session.send('Browser.setContrast', {
249
- browserContextId,
250
- contrast: this._options.contrast !== undefined ? this._options.contrast : 'no-preference'
251
- }));
252
- }
177
+ promises.push(this.doUpdateDefaultViewport());
178
+ if (this._options.hasTouch)
179
+ promises.push(this._browser.session.send("Browser.setTouchOverride", { browserContextId, hasTouch: true }));
180
+ if (this._options.userAgent)
181
+ promises.push(this._browser.session.send("Browser.setUserAgentOverride", { browserContextId, userAgent: this._options.userAgent }));
182
+ if (this._options.bypassCSP)
183
+ promises.push(this._browser.session.send("Browser.setBypassCSP", { browserContextId, bypassCSP: true }));
184
+ if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)
185
+ promises.push(this._browser.session.send("Browser.setIgnoreHTTPSErrors", { browserContextId, ignoreHTTPSErrors: true }));
186
+ if (this._options.javaScriptEnabled === false)
187
+ promises.push(this._browser.session.send("Browser.setJavaScriptDisabled", { browserContextId, javaScriptDisabled: true }));
188
+ if (this._options.locale)
189
+ promises.push(this._browser.session.send("Browser.setLocaleOverride", { browserContextId, locale: this._options.locale }));
190
+ if (this._options.timezoneId)
191
+ promises.push(this._browser.session.send("Browser.setTimezoneOverride", { browserContextId, timezoneId: this._options.timezoneId }));
192
+ if (this._options.extraHTTPHeaders || this._options.locale)
193
+ promises.push(this.doUpdateExtraHTTPHeaders());
194
+ if (this._options.httpCredentials)
195
+ promises.push(this.setHTTPCredentials(this._options.httpCredentials));
196
+ if (this._options.geolocation)
197
+ promises.push(this.setGeolocation(this._options.geolocation));
198
+ if (this._options.offline)
199
+ promises.push(this.doUpdateOffline());
200
+ promises.push(this.doUpdateDefaultEmulatedMedia());
253
201
  if (this._options.recordVideo) {
254
202
  promises.push(this._ensureVideosPath().then(() => {
255
- return this._browser.session.send('Browser.setVideoRecordingOptions', {
203
+ return this._browser.session.send("Browser.setVideoRecordingOptions", {
256
204
  // validateBrowserContextOptions ensures correct video size.
257
205
  options: {
258
206
  ...this._options.recordVideo.size,
@@ -264,7 +212,7 @@ class FFBrowserContext extends _browserContext.BrowserContext {
264
212
  }
265
213
  const proxy = this._options.proxyOverride || this._options.proxy;
266
214
  if (proxy) {
267
- promises.push(this._browser.session.send('Browser.setContextProxy', {
215
+ promises.push(this._browser.session.send("Browser.setContextProxy", {
268
216
  browserContextId: this._browserContextId,
269
217
  ...toJugglerProxyOptions(proxy)
270
218
  }));
@@ -272,197 +220,212 @@ class FFBrowserContext extends _browserContext.BrowserContext {
272
220
  await Promise.all(promises);
273
221
  }
274
222
  _ffPages() {
275
- return Array.from(this._browser._ffPages.values()).filter(ffPage => ffPage._browserContext === this);
223
+ return Array.from(this._browser._ffPages.values()).filter((ffPage) => ffPage._browserContext === this);
276
224
  }
277
225
  possiblyUninitializedPages() {
278
- return this._ffPages().map(ffPage => ffPage._page);
226
+ return this._ffPages().map((ffPage) => ffPage._page);
279
227
  }
280
- async doCreateNewPage() {
281
- (0, _browserContext.assertBrowserContextIsNotOwned)(this);
282
- const {
283
- targetId
284
- } = await this._browser.session.send('Browser.newPage', {
228
+ async doCreateNewPage(markAsServerSideOnly) {
229
+ const { targetId } = await this._browser.session.send("Browser.newPage", {
285
230
  browserContextId: this._browserContextId
286
- }).catch(e => {
287
- if (e.message.includes('Failed to override timezone')) throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);
231
+ }).catch((e) => {
232
+ if (e.message.includes("Failed to override timezone"))
233
+ throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);
288
234
  throw e;
289
235
  });
290
- return this._browser._ffPages.get(targetId)._page;
236
+ const page = this._browser._ffPages.get(targetId)._page;
237
+ if (markAsServerSideOnly)
238
+ page.markAsServerSideOnly();
239
+ return page;
291
240
  }
292
241
  async doGetCookies(urls) {
293
- const {
294
- cookies
295
- } = await this._browser.session.send('Browser.getCookies', {
296
- browserContextId: this._browserContextId
297
- });
298
- return network.filterCookies(cookies.map(c => {
299
- const copy = {
300
- ...c
242
+ const { cookies } = await this._browser.session.send("Browser.getCookies", { browserContextId: this._browserContextId });
243
+ return network.filterCookies(cookies.map((c) => {
244
+ const { name, value, domain, path, expires, httpOnly, secure, sameSite } = c;
245
+ return {
246
+ name,
247
+ value,
248
+ domain,
249
+ path,
250
+ expires,
251
+ httpOnly,
252
+ secure,
253
+ sameSite
301
254
  };
302
- delete copy.size;
303
- delete copy.session;
304
- return copy;
305
255
  }), urls);
306
256
  }
307
257
  async addCookies(cookies) {
308
- const cc = network.rewriteCookies(cookies).map(c => ({
309
- ...c,
310
- expires: c.expires === -1 ? undefined : c.expires
311
- }));
312
- await this._browser.session.send('Browser.setCookies', {
313
- browserContextId: this._browserContextId,
314
- cookies: cc
258
+ const cc = network.rewriteCookies(cookies).map((c) => {
259
+ const { name, value, url, domain, path, expires, httpOnly, secure, sameSite } = c;
260
+ return {
261
+ name,
262
+ value,
263
+ url,
264
+ domain,
265
+ path,
266
+ expires: expires === -1 ? void 0 : expires,
267
+ httpOnly,
268
+ secure,
269
+ sameSite
270
+ };
315
271
  });
272
+ await this._browser.session.send("Browser.setCookies", { browserContextId: this._browserContextId, cookies: cc });
316
273
  }
317
274
  async doClearCookies() {
318
- await this._browser.session.send('Browser.clearCookies', {
319
- browserContextId: this._browserContextId
320
- });
275
+ await this._browser.session.send("Browser.clearCookies", { browserContextId: this._browserContextId });
321
276
  }
322
277
  async doGrantPermissions(origin, permissions) {
323
- const webPermissionToProtocol = new Map([['geolocation', 'geo'], ['persistent-storage', 'persistent-storage'], ['push', 'push'], ['notifications', 'desktop-notification']]);
324
- const filtered = permissions.map(permission => {
278
+ const webPermissionToProtocol = /* @__PURE__ */ new Map([
279
+ ["geolocation", "geo"],
280
+ ["persistent-storage", "persistent-storage"],
281
+ ["push", "push"],
282
+ ["notifications", "desktop-notification"]
283
+ ]);
284
+ const filtered = permissions.map((permission) => {
325
285
  const protocolPermission = webPermissionToProtocol.get(permission);
326
- if (!protocolPermission) throw new Error('Unknown permission: ' + permission);
286
+ if (!protocolPermission)
287
+ throw new Error("Unknown permission: " + permission);
327
288
  return protocolPermission;
328
289
  });
329
- await this._browser.session.send('Browser.grantPermissions', {
330
- origin: origin,
331
- browserContextId: this._browserContextId,
332
- permissions: filtered
333
- });
290
+ await this._browser.session.send("Browser.grantPermissions", { origin, browserContextId: this._browserContextId, permissions: filtered });
334
291
  }
335
292
  async doClearPermissions() {
336
- await this._browser.session.send('Browser.resetPermissions', {
337
- browserContextId: this._browserContextId
338
- });
293
+ await this._browser.session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
339
294
  }
340
295
  async setGeolocation(geolocation) {
341
- (0, _browserContext.verifyGeolocation)(geolocation);
296
+ (0, import_browserContext.verifyGeolocation)(geolocation);
342
297
  this._options.geolocation = geolocation;
343
- await this._browser.session.send('Browser.setGeolocationOverride', {
344
- browserContextId: this._browserContextId,
345
- geolocation: geolocation || null
346
- });
298
+ await this._browser.session.send("Browser.setGeolocationOverride", { browserContextId: this._browserContextId, geolocation: geolocation || null });
347
299
  }
348
- async setExtraHTTPHeaders(headers) {
349
- this._options.extraHTTPHeaders = headers;
350
- let allHeaders = this._options.extraHTTPHeaders;
351
- if (this._options.locale) allHeaders = network.mergeHeaders([allHeaders, network.singleHeader('Accept-Language', this._options.locale)]);
352
- await this._browser.session.send('Browser.setExtraHTTPHeaders', {
353
- browserContextId: this._browserContextId,
354
- headers: allHeaders
355
- });
300
+ async doUpdateExtraHTTPHeaders() {
301
+ let allHeaders = this._options.extraHTTPHeaders || [];
302
+ if (this._options.locale)
303
+ allHeaders = network.mergeHeaders([allHeaders, network.singleHeader("Accept-Language", this._options.locale)]);
304
+ await this._browser.session.send("Browser.setExtraHTTPHeaders", { browserContextId: this._browserContextId, headers: allHeaders });
356
305
  }
357
306
  async setUserAgent(userAgent) {
358
- await this._browser.session.send('Browser.setUserAgentOverride', {
359
- browserContextId: this._browserContextId,
360
- userAgent: userAgent || null
361
- });
307
+ await this._browser.session.send("Browser.setUserAgentOverride", { browserContextId: this._browserContextId, userAgent: userAgent || null });
362
308
  }
363
- async setOffline(offline) {
364
- this._options.offline = offline;
365
- await this._browser.session.send('Browser.setOnlineOverride', {
366
- browserContextId: this._browserContextId,
367
- override: offline ? 'offline' : 'online'
368
- });
309
+ async doUpdateOffline() {
310
+ await this._browser.session.send("Browser.setOnlineOverride", { browserContextId: this._browserContextId, override: this._options.offline ? "offline" : "online" });
369
311
  }
370
312
  async doSetHTTPCredentials(httpCredentials) {
371
313
  this._options.httpCredentials = httpCredentials;
372
314
  let credentials = null;
373
315
  if (httpCredentials) {
374
- const {
375
- username,
376
- password,
377
- origin
378
- } = httpCredentials;
379
- credentials = {
380
- username,
381
- password,
382
- origin
383
- };
316
+ const { username, password, origin } = httpCredentials;
317
+ credentials = { username, password, origin };
384
318
  }
385
- await this._browser.session.send('Browser.setHTTPCredentials', {
386
- browserContextId: this._browserContextId,
387
- credentials
388
- });
319
+ await this._browser.session.send("Browser.setHTTPCredentials", { browserContextId: this._browserContextId, credentials });
389
320
  }
390
321
  async doAddInitScript(initScript) {
391
322
  await this._updateInitScripts();
392
323
  }
393
- async doRemoveNonInternalInitScripts() {
324
+ async doRemoveInitScripts(initScripts) {
394
325
  await this._updateInitScripts();
395
326
  }
396
327
  async _updateInitScripts() {
397
- const bindingScripts = [...this._pageBindings.values()].map(binding => binding.initScript.source);
398
- const initScripts = this.initScripts.map(script => script.source);
399
- await this._browser.session.send('Browser.setInitScripts', {
400
- browserContextId: this._browserContextId,
401
- scripts: [...bindingScripts, ...initScripts].map(script => ({
402
- script
403
- }))
404
- });
328
+ const bindingScripts = [...this._pageBindings.values()].map((binding) => binding.initScript.source);
329
+ if (this.bindingsInitScript)
330
+ bindingScripts.unshift(this.bindingsInitScript.source);
331
+ const initScripts = this.initScripts.map((script) => script.source);
332
+ await this._browser.session.send("Browser.setInitScripts", { browserContextId: this._browserContextId, scripts: [...bindingScripts, ...initScripts].map((script) => ({ script })) });
405
333
  }
406
334
  async doUpdateRequestInterception() {
407
- await Promise.all([this._browser.session.send('Browser.setRequestInterception', {
408
- browserContextId: this._browserContextId,
409
- enabled: !!this._requestInterceptor
410
- }), this._browser.session.send('Browser.setCacheDisabled', {
411
- browserContextId: this._browserContextId,
412
- cacheDisabled: !!this._requestInterceptor
413
- })]);
414
- }
415
- onClosePersistent() {}
335
+ await Promise.all([
336
+ this._browser.session.send("Browser.setRequestInterception", { browserContextId: this._browserContextId, enabled: this.requestInterceptors.length > 0 }),
337
+ this._browser.session.send("Browser.setCacheDisabled", { browserContextId: this._browserContextId, cacheDisabled: this.requestInterceptors.length > 0 })
338
+ ]);
339
+ }
340
+ async doUpdateDefaultViewport() {
341
+ if (!this._options.viewport)
342
+ return;
343
+ const viewport = {
344
+ viewportSize: { width: this._options.viewport.width, height: this._options.viewport.height },
345
+ deviceScaleFactor: this._options.deviceScaleFactor || 1
346
+ };
347
+ await this._browser.session.send("Browser.setDefaultViewport", { browserContextId: this._browserContextId, viewport });
348
+ }
349
+ async doUpdateDefaultEmulatedMedia() {
350
+ if (this._options.colorScheme !== "no-override") {
351
+ await this._browser.session.send("Browser.setColorScheme", {
352
+ browserContextId: this._browserContextId,
353
+ colorScheme: this._options.colorScheme !== void 0 ? this._options.colorScheme : "light"
354
+ });
355
+ }
356
+ if (this._options.reducedMotion !== "no-override") {
357
+ await this._browser.session.send("Browser.setReducedMotion", {
358
+ browserContextId: this._browserContextId,
359
+ reducedMotion: this._options.reducedMotion !== void 0 ? this._options.reducedMotion : "no-preference"
360
+ });
361
+ }
362
+ if (this._options.forcedColors !== "no-override") {
363
+ await this._browser.session.send("Browser.setForcedColors", {
364
+ browserContextId: this._browserContextId,
365
+ forcedColors: this._options.forcedColors !== void 0 ? this._options.forcedColors : "none"
366
+ });
367
+ }
368
+ if (this._options.contrast !== "no-override") {
369
+ await this._browser.session.send("Browser.setContrast", {
370
+ browserContextId: this._browserContextId,
371
+ contrast: this._options.contrast !== void 0 ? this._options.contrast : "no-preference"
372
+ });
373
+ }
374
+ }
375
+ async doExposePlaywrightBinding() {
376
+ this._browser.session.send("Browser.addBinding", { browserContextId: this._browserContextId, name: import_page.PageBinding.kBindingName, script: "" });
377
+ }
378
+ onClosePersistent() {
379
+ }
416
380
  async clearCache() {
417
- // Clearing only the context cache does not work: https://bugzilla.mozilla.org/show_bug.cgi?id=1819147
418
- await this._browser.session.send('Browser.clearCache');
381
+ await this._browser.session.send("Browser.clearCache");
419
382
  }
420
383
  async doClose(reason) {
421
384
  if (!this._browserContextId) {
422
385
  if (this._options.recordVideo) {
423
- await this._browser.session.send('Browser.setVideoRecordingOptions', {
424
- options: undefined,
386
+ await this._browser.session.send("Browser.setVideoRecordingOptions", {
387
+ options: void 0,
425
388
  browserContextId: this._browserContextId
426
389
  });
427
390
  }
428
- // Closing persistent context should close the browser.
429
- await this._browser.close({
430
- reason
431
- });
391
+ await this._browser.close({ reason });
432
392
  } else {
433
- await this._browser.session.send('Browser.removeBrowserContext', {
434
- browserContextId: this._browserContextId
435
- });
393
+ await this._browser.session.send("Browser.removeBrowserContext", { browserContextId: this._browserContextId });
436
394
  this._browser._contexts.delete(this._browserContextId);
437
395
  }
438
396
  }
439
397
  async cancelDownload(uuid) {
440
- await this._browser.session.send('Browser.cancelDownload', {
441
- uuid
442
- });
398
+ await this._browser.session.send("Browser.cancelDownload", { uuid });
443
399
  }
444
400
  }
445
- exports.FFBrowserContext = FFBrowserContext;
446
401
  function toJugglerProxyOptions(proxy) {
447
402
  const proxyServer = new URL(proxy.server);
448
403
  let port = parseInt(proxyServer.port, 10);
449
- let type = 'http';
450
- if (proxyServer.protocol === 'socks5:') type = 'socks';else if (proxyServer.protocol === 'socks4:') type = 'socks4';else if (proxyServer.protocol === 'https:') type = 'https';
451
- if (proxyServer.port === '') {
452
- if (proxyServer.protocol === 'http:') port = 80;else if (proxyServer.protocol === 'https:') port = 443;
404
+ let type = "http";
405
+ if (proxyServer.protocol === "socks5:")
406
+ type = "socks";
407
+ else if (proxyServer.protocol === "socks4:")
408
+ type = "socks4";
409
+ else if (proxyServer.protocol === "https:")
410
+ type = "https";
411
+ if (proxyServer.port === "") {
412
+ if (proxyServer.protocol === "http:")
413
+ port = 80;
414
+ else if (proxyServer.protocol === "https:")
415
+ port = 443;
453
416
  }
454
417
  return {
455
418
  type,
456
- bypass: proxy.bypass ? proxy.bypass.split(',').map(domain => domain.trim()) : [],
419
+ bypass: proxy.bypass ? proxy.bypass.split(",").map((domain) => domain.trim()) : [],
457
420
  host: proxyServer.hostname,
458
421
  port,
459
422
  username: proxy.username,
460
423
  password: proxy.password
461
424
  };
462
425
  }
463
-
464
- // Prefs for quick fixes that didn't make it to the build.
465
- // Should all be moved to `playwright.cfg`.
466
- const kBandaidFirefoxUserPrefs = {
467
- 'dom.fetchKeepalive.enabled': false
468
- };
426
+ const kBandaidFirefoxUserPrefs = {};
427
+ // Annotate the CommonJS export names for ESM import in node:
428
+ 0 && (module.exports = {
429
+ FFBrowser,
430
+ FFBrowserContext
431
+ });