rebrowser-playwright-core 1.47.2

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 (322) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +12 -0
  4. package/ThirdPartyNotices.txt +1548 -0
  5. package/bin/PrintDeps.exe +0 -0
  6. package/bin/README.md +2 -0
  7. package/bin/install_media_pack.ps1 +5 -0
  8. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  9. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  10. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  11. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  12. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  13. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  14. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  15. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  16. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  17. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  18. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  19. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  20. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  21. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  22. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  23. package/browsers.json +53 -0
  24. package/cli.js +18 -0
  25. package/index.d.ts +17 -0
  26. package/index.js +33 -0
  27. package/index.mjs +28 -0
  28. package/lib/androidServerImpl.js +69 -0
  29. package/lib/browserServerImpl.js +92 -0
  30. package/lib/cli/driver.js +95 -0
  31. package/lib/cli/program.js +577 -0
  32. package/lib/cli/programWithTestStub.js +67 -0
  33. package/lib/client/accessibility.js +50 -0
  34. package/lib/client/android.js +473 -0
  35. package/lib/client/api.js +279 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +145 -0
  38. package/lib/client/browserContext.js +541 -0
  39. package/lib/client/browserType.js +241 -0
  40. package/lib/client/cdpSession.js +53 -0
  41. package/lib/client/channelOwner.js +231 -0
  42. package/lib/client/clientHelper.js +57 -0
  43. package/lib/client/clientInstrumentation.js +50 -0
  44. package/lib/client/clock.js +68 -0
  45. package/lib/client/connection.js +330 -0
  46. package/lib/client/consoleMessage.js +55 -0
  47. package/lib/client/coverage.js +41 -0
  48. package/lib/client/dialog.js +57 -0
  49. package/lib/client/download.js +62 -0
  50. package/lib/client/electron.js +135 -0
  51. package/lib/client/elementHandle.js +321 -0
  52. package/lib/client/errors.js +77 -0
  53. package/lib/client/eventEmitter.js +314 -0
  54. package/lib/client/events.js +94 -0
  55. package/lib/client/fetch.js +396 -0
  56. package/lib/client/fileChooser.js +45 -0
  57. package/lib/client/frame.js +504 -0
  58. package/lib/client/harRouter.js +99 -0
  59. package/lib/client/input.js +111 -0
  60. package/lib/client/jsHandle.js +129 -0
  61. package/lib/client/jsonPipe.js +35 -0
  62. package/lib/client/localUtils.js +35 -0
  63. package/lib/client/locator.js +441 -0
  64. package/lib/client/network.js +604 -0
  65. package/lib/client/page.js +725 -0
  66. package/lib/client/playwright.js +77 -0
  67. package/lib/client/selectors.js +67 -0
  68. package/lib/client/stream.js +54 -0
  69. package/lib/client/tracing.js +138 -0
  70. package/lib/client/types.js +24 -0
  71. package/lib/client/video.js +51 -0
  72. package/lib/client/waiter.js +158 -0
  73. package/lib/client/webError.js +37 -0
  74. package/lib/client/worker.js +71 -0
  75. package/lib/client/writableStream.js +54 -0
  76. package/lib/common/socksProxy.js +569 -0
  77. package/lib/common/timeoutSettings.js +73 -0
  78. package/lib/common/types.js +5 -0
  79. package/lib/generated/clockSource.js +7 -0
  80. package/lib/generated/consoleApiSource.js +7 -0
  81. package/lib/generated/injectedScriptSource.js +7 -0
  82. package/lib/generated/recorderSource.js +7 -0
  83. package/lib/generated/utilityScriptSource.js +7 -0
  84. package/lib/image_tools/colorUtils.js +98 -0
  85. package/lib/image_tools/compare.js +108 -0
  86. package/lib/image_tools/imageChannel.js +70 -0
  87. package/lib/image_tools/stats.js +102 -0
  88. package/lib/inProcessFactory.js +54 -0
  89. package/lib/inprocess.js +20 -0
  90. package/lib/outofprocess.js +67 -0
  91. package/lib/protocol/debug.js +27 -0
  92. package/lib/protocol/serializers.js +173 -0
  93. package/lib/protocol/transport.js +82 -0
  94. package/lib/protocol/validator.js +2694 -0
  95. package/lib/protocol/validatorPrimitives.js +139 -0
  96. package/lib/remote/playwrightConnection.js +274 -0
  97. package/lib/remote/playwrightServer.js +110 -0
  98. package/lib/server/accessibility.js +62 -0
  99. package/lib/server/android/android.js +441 -0
  100. package/lib/server/android/backendAdb.js +172 -0
  101. package/lib/server/artifact.js +104 -0
  102. package/lib/server/bidi/bidiBrowser.js +296 -0
  103. package/lib/server/bidi/bidiConnection.js +206 -0
  104. package/lib/server/bidi/bidiExecutionContext.js +162 -0
  105. package/lib/server/bidi/bidiFirefox.js +110 -0
  106. package/lib/server/bidi/bidiInput.js +174 -0
  107. package/lib/server/bidi/bidiNetworkManager.js +304 -0
  108. package/lib/server/bidi/bidiPage.js +456 -0
  109. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  110. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  111. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  112. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  113. package/lib/server/browser.js +137 -0
  114. package/lib/server/browserContext.js +684 -0
  115. package/lib/server/browserType.js +307 -0
  116. package/lib/server/chromium/appIcon.png +0 -0
  117. package/lib/server/chromium/chromium.js +362 -0
  118. package/lib/server/chromium/chromiumSwitches.js +44 -0
  119. package/lib/server/chromium/crAccessibility.js +237 -0
  120. package/lib/server/chromium/crBrowser.js +515 -0
  121. package/lib/server/chromium/crConnection.js +228 -0
  122. package/lib/server/chromium/crCoverage.js +246 -0
  123. package/lib/server/chromium/crDevTools.js +108 -0
  124. package/lib/server/chromium/crDragDrop.js +143 -0
  125. package/lib/server/chromium/crExecutionContext.js +156 -0
  126. package/lib/server/chromium/crInput.js +171 -0
  127. package/lib/server/chromium/crNetworkManager.js +767 -0
  128. package/lib/server/chromium/crPage.js +1135 -0
  129. package/lib/server/chromium/crPdf.js +153 -0
  130. package/lib/server/chromium/crProtocolHelper.js +133 -0
  131. package/lib/server/chromium/crServiceWorker.js +114 -0
  132. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  133. package/lib/server/chromium/videoRecorder.js +155 -0
  134. package/lib/server/clock.js +125 -0
  135. package/lib/server/codegen/csharp.js +299 -0
  136. package/lib/server/codegen/java.js +235 -0
  137. package/lib/server/codegen/javascript.js +223 -0
  138. package/lib/server/codegen/jsonl.js +47 -0
  139. package/lib/server/codegen/language.js +76 -0
  140. package/lib/server/codegen/languages.js +30 -0
  141. package/lib/server/codegen/python.js +265 -0
  142. package/lib/server/codegen/types.js +5 -0
  143. package/lib/server/console.js +57 -0
  144. package/lib/server/cookieStore.js +112 -0
  145. package/lib/server/debugController.js +234 -0
  146. package/lib/server/debugger.js +132 -0
  147. package/lib/server/deviceDescriptors.js +26 -0
  148. package/lib/server/deviceDescriptorsSource.json +1669 -0
  149. package/lib/server/dialog.js +70 -0
  150. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  151. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  152. package/lib/server/dispatchers/browserContextDispatcher.js +351 -0
  153. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  154. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  155. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  156. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  157. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  158. package/lib/server/dispatchers/dispatcher.js +395 -0
  159. package/lib/server/dispatchers/electronDispatcher.js +93 -0
  160. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  161. package/lib/server/dispatchers/frameDispatcher.js +286 -0
  162. package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
  163. package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  164. package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  165. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  166. package/lib/server/dispatchers/pageDispatcher.js +358 -0
  167. package/lib/server/dispatchers/playwrightDispatcher.js +106 -0
  168. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  169. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  170. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  171. package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  172. package/lib/server/dom.js +845 -0
  173. package/lib/server/download.js +53 -0
  174. package/lib/server/electron/electron.js +296 -0
  175. package/lib/server/electron/loader.js +57 -0
  176. package/lib/server/errors.js +68 -0
  177. package/lib/server/fetch.js +660 -0
  178. package/lib/server/fileChooser.js +42 -0
  179. package/lib/server/fileUploadUtils.js +75 -0
  180. package/lib/server/firefox/ffAccessibility.js +216 -0
  181. package/lib/server/firefox/ffBrowser.js +458 -0
  182. package/lib/server/firefox/ffConnection.js +168 -0
  183. package/lib/server/firefox/ffExecutionContext.js +138 -0
  184. package/lib/server/firefox/ffInput.js +150 -0
  185. package/lib/server/firefox/ffNetworkManager.js +233 -0
  186. package/lib/server/firefox/ffPage.js +556 -0
  187. package/lib/server/firefox/firefox.js +110 -0
  188. package/lib/server/formData.js +75 -0
  189. package/lib/server/frameSelectors.js +171 -0
  190. package/lib/server/frames.js +1685 -0
  191. package/lib/server/har/harRecorder.js +139 -0
  192. package/lib/server/har/harTracer.js +531 -0
  193. package/lib/server/helper.js +103 -0
  194. package/lib/server/index.js +114 -0
  195. package/lib/server/input.js +311 -0
  196. package/lib/server/instrumentation.js +70 -0
  197. package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  198. package/lib/server/javascript.js +306 -0
  199. package/lib/server/launchApp.js +91 -0
  200. package/lib/server/macEditingCommands.js +139 -0
  201. package/lib/server/network.js +617 -0
  202. package/lib/server/page.js +825 -0
  203. package/lib/server/pipeTransport.js +85 -0
  204. package/lib/server/playwright.js +85 -0
  205. package/lib/server/progress.js +102 -0
  206. package/lib/server/protocolError.js +49 -0
  207. package/lib/server/recorder/contextRecorder.js +316 -0
  208. package/lib/server/recorder/recorderActions.js +5 -0
  209. package/lib/server/recorder/recorderApp.js +190 -0
  210. package/lib/server/recorder/recorderCollection.js +127 -0
  211. package/lib/server/recorder/recorderRunner.js +177 -0
  212. package/lib/server/recorder/recorderUtils.js +71 -0
  213. package/lib/server/recorder/throttledFile.js +46 -0
  214. package/lib/server/recorder.js +324 -0
  215. package/lib/server/registry/browserFetcher.js +168 -0
  216. package/lib/server/registry/dependencies.js +322 -0
  217. package/lib/server/registry/index.js +924 -0
  218. package/lib/server/registry/nativeDeps.js +490 -0
  219. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  220. package/lib/server/screenshotter.js +348 -0
  221. package/lib/server/selectors.js +73 -0
  222. package/lib/server/socksClientCertificatesInterceptor.js +328 -0
  223. package/lib/server/socksInterceptor.js +100 -0
  224. package/lib/server/trace/recorder/snapshotter.js +171 -0
  225. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  226. package/lib/server/trace/recorder/tracing.js +486 -0
  227. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  228. package/lib/server/trace/viewer/traceViewer.js +216 -0
  229. package/lib/server/transport.js +191 -0
  230. package/lib/server/types.js +24 -0
  231. package/lib/server/usKeyboardLayout.js +555 -0
  232. package/lib/server/webkit/webkit.js +87 -0
  233. package/lib/server/webkit/wkAccessibility.js +194 -0
  234. package/lib/server/webkit/wkBrowser.js +328 -0
  235. package/lib/server/webkit/wkConnection.js +173 -0
  236. package/lib/server/webkit/wkExecutionContext.js +146 -0
  237. package/lib/server/webkit/wkInput.js +169 -0
  238. package/lib/server/webkit/wkInterceptableRequest.js +162 -0
  239. package/lib/server/webkit/wkPage.js +1216 -0
  240. package/lib/server/webkit/wkProvisionalPage.js +94 -0
  241. package/lib/server/webkit/wkWorkers.js +104 -0
  242. package/lib/third_party/diff_match_patch.js +2222 -0
  243. package/lib/third_party/pixelmatch.js +255 -0
  244. package/lib/utils/ascii.js +31 -0
  245. package/lib/utils/comparators.js +171 -0
  246. package/lib/utils/crypto.js +174 -0
  247. package/lib/utils/debug.js +46 -0
  248. package/lib/utils/debugLogger.js +91 -0
  249. package/lib/utils/env.js +49 -0
  250. package/lib/utils/eventsHelper.js +38 -0
  251. package/lib/utils/expectUtils.js +33 -0
  252. package/lib/utils/fileUtils.js +205 -0
  253. package/lib/utils/happy-eyeballs.js +181 -0
  254. package/lib/utils/headers.js +52 -0
  255. package/lib/utils/hostPlatform.js +133 -0
  256. package/lib/utils/httpServer.js +236 -0
  257. package/lib/utils/index.js +368 -0
  258. package/lib/utils/isomorphic/cssParser.js +250 -0
  259. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  260. package/lib/utils/isomorphic/locatorGenerators.js +651 -0
  261. package/lib/utils/isomorphic/locatorParser.js +179 -0
  262. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  263. package/lib/utils/isomorphic/mimeType.js +29 -0
  264. package/lib/utils/isomorphic/selectorParser.js +397 -0
  265. package/lib/utils/isomorphic/stringUtils.js +139 -0
  266. package/lib/utils/isomorphic/traceUtils.js +39 -0
  267. package/lib/utils/isomorphic/urlMatch.js +120 -0
  268. package/lib/utils/linuxUtils.js +78 -0
  269. package/lib/utils/manualPromise.js +109 -0
  270. package/lib/utils/multimap.js +75 -0
  271. package/lib/utils/network.js +160 -0
  272. package/lib/utils/processLauncher.js +248 -0
  273. package/lib/utils/profiler.js +53 -0
  274. package/lib/utils/rtti.js +44 -0
  275. package/lib/utils/semaphore.js +51 -0
  276. package/lib/utils/spawnAsync.js +45 -0
  277. package/lib/utils/stackTrace.js +121 -0
  278. package/lib/utils/task.js +58 -0
  279. package/lib/utils/time.js +37 -0
  280. package/lib/utils/timeoutRunner.js +66 -0
  281. package/lib/utils/traceUtils.js +44 -0
  282. package/lib/utils/userAgent.js +105 -0
  283. package/lib/utils/wsServer.js +127 -0
  284. package/lib/utils/zipFile.js +75 -0
  285. package/lib/utils/zones.js +62 -0
  286. package/lib/utilsBundle.js +82 -0
  287. package/lib/utilsBundleImpl/index.js +53 -0
  288. package/lib/utilsBundleImpl/xdg-open +1066 -0
  289. package/lib/vite/htmlReport/index.html +66 -0
  290. package/lib/vite/recorder/assets/codeMirrorModule-aW6Vz3gf.js +24 -0
  291. package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  292. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  293. package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
  294. package/lib/vite/recorder/assets/index-DCpXOVIh.js +47 -0
  295. package/lib/vite/recorder/index.html +29 -0
  296. package/lib/vite/recorder/playwright-logo.svg +9 -0
  297. package/lib/vite/traceViewer/assets/codeMirrorModule-eFKCUIu2.js +24 -0
  298. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  299. package/lib/vite/traceViewer/assets/workbench-D0cirtfA.js +72 -0
  300. package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  301. package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  302. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  303. package/lib/vite/traceViewer/embedded.BkuvsLJp.js +2 -0
  304. package/lib/vite/traceViewer/embedded.html +16 -0
  305. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  306. package/lib/vite/traceViewer/index.C968kAiC.js +2 -0
  307. package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  308. package/lib/vite/traceViewer/index.html +27 -0
  309. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  310. package/lib/vite/traceViewer/snapshot.html +21 -0
  311. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  312. package/lib/vite/traceViewer/uiMode.BkFnr4V0.js +10 -0
  313. package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
  314. package/lib/vite/traceViewer/uiMode.html +18 -0
  315. package/lib/vite/traceViewer/workbench.DjbIuxix.css +1 -0
  316. package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  317. package/lib/zipBundle.js +25 -0
  318. package/lib/zipBundleImpl.js +5 -0
  319. package/package.json +64 -0
  320. package/types/protocol.d.ts +21500 -0
  321. package/types/structs.d.ts +45 -0
  322. package/types/types.d.ts +21431 -0
@@ -0,0 +1,541 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BrowserContext = void 0;
7
+ exports.prepareBrowserContextParams = prepareBrowserContextParams;
8
+ exports.toClientCertificatesProtocol = toClientCertificatesProtocol;
9
+ var _page = require("./page");
10
+ var _frame = require("./frame");
11
+ var network = _interopRequireWildcard(require("./network"));
12
+ var _fs = _interopRequireDefault(require("fs"));
13
+ var _path = _interopRequireDefault(require("path"));
14
+ var _channelOwner = require("./channelOwner");
15
+ var _clientHelper = require("./clientHelper");
16
+ var _browser = require("./browser");
17
+ var _worker = require("./worker");
18
+ var _events = require("./events");
19
+ var _timeoutSettings = require("../common/timeoutSettings");
20
+ var _waiter = require("./waiter");
21
+ var _utils = require("../utils");
22
+ var _cdpSession = require("./cdpSession");
23
+ var _tracing = require("./tracing");
24
+ var _artifact = require("./artifact");
25
+ var _fetch = require("./fetch");
26
+ var _stackTrace = require("../utils/stackTrace");
27
+ var _harRouter = require("./harRouter");
28
+ var _consoleMessage = require("./consoleMessage");
29
+ var _dialog = require("./dialog");
30
+ var _webError = require("./webError");
31
+ var _errors = require("./errors");
32
+ var _clock = require("./clock");
33
+ let _Symbol$asyncDispose;
34
+ /**
35
+ * Copyright 2017 Google Inc. All rights reserved.
36
+ * Modifications copyright (c) Microsoft Corporation.
37
+ *
38
+ * Licensed under the Apache License, Version 2.0 (the "License");
39
+ * you may not use this file except in compliance with the License.
40
+ * You may obtain a copy of the License at
41
+ *
42
+ * http://www.apache.org/licenses/LICENSE-2.0
43
+ *
44
+ * Unless required by applicable law or agreed to in writing, software
45
+ * distributed under the License is distributed on an "AS IS" BASIS,
46
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47
+ * See the License for the specific language governing permissions and
48
+ * limitations under the License.
49
+ */
50
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
51
+ 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); }
52
+ 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; }
53
+ _Symbol$asyncDispose = Symbol.asyncDispose;
54
+ class BrowserContext extends _channelOwner.ChannelOwner {
55
+ static from(context) {
56
+ return context._object;
57
+ }
58
+ static fromNullable(context) {
59
+ return context ? BrowserContext.from(context) : null;
60
+ }
61
+ constructor(parent, type, guid, initializer) {
62
+ var _this$_browser, _this$_browser2;
63
+ super(parent, type, guid, initializer);
64
+ this._pages = new Set();
65
+ this._routes = [];
66
+ this._browser = null;
67
+ this._browserType = void 0;
68
+ this._bindings = new Map();
69
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
70
+ this._ownerPage = void 0;
71
+ this._closedPromise = void 0;
72
+ this._options = {};
73
+ this.request = void 0;
74
+ this.tracing = void 0;
75
+ this.clock = void 0;
76
+ this._backgroundPages = new Set();
77
+ this._serviceWorkers = new Set();
78
+ this._isChromium = void 0;
79
+ this._harRecorders = new Map();
80
+ this._closeWasCalled = false;
81
+ this._closeReason = void 0;
82
+ this._harRouters = [];
83
+ if (parent instanceof _browser.Browser) this._browser = parent;
84
+ (_this$_browser = this._browser) === null || _this$_browser === void 0 || _this$_browser._contexts.add(this);
85
+ this._isChromium = ((_this$_browser2 = this._browser) === null || _this$_browser2 === void 0 ? void 0 : _this$_browser2._name) === 'chromium';
86
+ this.tracing = _tracing.Tracing.from(initializer.tracing);
87
+ this.request = _fetch.APIRequestContext.from(initializer.requestContext);
88
+ this.clock = new _clock.Clock(this);
89
+ this._channel.on('bindingCall', ({
90
+ binding
91
+ }) => this._onBinding(_page.BindingCall.from(binding)));
92
+ this._channel.on('close', () => this._onClose());
93
+ this._channel.on('page', ({
94
+ page
95
+ }) => this._onPage(_page.Page.from(page)));
96
+ this._channel.on('route', ({
97
+ route
98
+ }) => this._onRoute(network.Route.from(route)));
99
+ this._channel.on('backgroundPage', ({
100
+ page
101
+ }) => {
102
+ const backgroundPage = _page.Page.from(page);
103
+ this._backgroundPages.add(backgroundPage);
104
+ this.emit(_events.Events.BrowserContext.BackgroundPage, backgroundPage);
105
+ });
106
+ this._channel.on('serviceWorker', ({
107
+ worker
108
+ }) => {
109
+ const serviceWorker = _worker.Worker.from(worker);
110
+ serviceWorker._context = this;
111
+ this._serviceWorkers.add(serviceWorker);
112
+ this.emit(_events.Events.BrowserContext.ServiceWorker, serviceWorker);
113
+ });
114
+ this._channel.on('console', event => {
115
+ const consoleMessage = new _consoleMessage.ConsoleMessage(event);
116
+ this.emit(_events.Events.BrowserContext.Console, consoleMessage);
117
+ const page = consoleMessage.page();
118
+ if (page) page.emit(_events.Events.Page.Console, consoleMessage);
119
+ });
120
+ this._channel.on('pageError', ({
121
+ error,
122
+ page
123
+ }) => {
124
+ const pageObject = _page.Page.from(page);
125
+ const parsedError = (0, _errors.parseError)(error);
126
+ this.emit(_events.Events.BrowserContext.WebError, new _webError.WebError(pageObject, parsedError));
127
+ if (pageObject) pageObject.emit(_events.Events.Page.PageError, parsedError);
128
+ });
129
+ this._channel.on('dialog', ({
130
+ dialog
131
+ }) => {
132
+ const dialogObject = _dialog.Dialog.from(dialog);
133
+ let hasListeners = this.emit(_events.Events.BrowserContext.Dialog, dialogObject);
134
+ const page = dialogObject.page();
135
+ if (page) hasListeners = page.emit(_events.Events.Page.Dialog, dialogObject) || hasListeners;
136
+ if (!hasListeners) {
137
+ // Although we do similar handling on the server side, we still need this logic
138
+ // on the client side due to a possible race condition between two async calls:
139
+ // a) removing "dialog" listener subscription (client->server)
140
+ // b) actual "dialog" event (server->client)
141
+ if (dialogObject.type() === 'beforeunload') dialog.accept({}).catch(() => {});else dialog.dismiss().catch(() => {});
142
+ }
143
+ });
144
+ this._channel.on('request', ({
145
+ request,
146
+ page
147
+ }) => this._onRequest(network.Request.from(request), _page.Page.fromNullable(page)));
148
+ this._channel.on('requestFailed', ({
149
+ request,
150
+ failureText,
151
+ responseEndTiming,
152
+ page
153
+ }) => this._onRequestFailed(network.Request.from(request), responseEndTiming, failureText, _page.Page.fromNullable(page)));
154
+ this._channel.on('requestFinished', params => this._onRequestFinished(params));
155
+ this._channel.on('response', ({
156
+ response,
157
+ page
158
+ }) => this._onResponse(network.Response.from(response), _page.Page.fromNullable(page)));
159
+ this._closedPromise = new Promise(f => this.once(_events.Events.BrowserContext.Close, f));
160
+ this._setEventToSubscriptionMapping(new Map([[_events.Events.BrowserContext.Console, 'console'], [_events.Events.BrowserContext.Dialog, 'dialog'], [_events.Events.BrowserContext.Request, 'request'], [_events.Events.BrowserContext.Response, 'response'], [_events.Events.BrowserContext.RequestFinished, 'requestFinished'], [_events.Events.BrowserContext.RequestFailed, 'requestFailed']]));
161
+ }
162
+ _setOptions(contextOptions, browserOptions) {
163
+ this._options = contextOptions;
164
+ if (this._options.recordHar) this._harRecorders.set('', {
165
+ path: this._options.recordHar.path,
166
+ content: this._options.recordHar.content
167
+ });
168
+ this.tracing._tracesDir = browserOptions.tracesDir;
169
+ }
170
+ _onPage(page) {
171
+ this._pages.add(page);
172
+ this.emit(_events.Events.BrowserContext.Page, page);
173
+ if (page._opener && !page._opener.isClosed()) page._opener.emit(_events.Events.Page.Popup, page);
174
+ }
175
+ _onRequest(request, page) {
176
+ this.emit(_events.Events.BrowserContext.Request, request);
177
+ if (page) page.emit(_events.Events.Page.Request, request);
178
+ }
179
+ _onResponse(response, page) {
180
+ this.emit(_events.Events.BrowserContext.Response, response);
181
+ if (page) page.emit(_events.Events.Page.Response, response);
182
+ }
183
+ _onRequestFailed(request, responseEndTiming, failureText, page) {
184
+ request._failureText = failureText || null;
185
+ request._setResponseEndTiming(responseEndTiming);
186
+ this.emit(_events.Events.BrowserContext.RequestFailed, request);
187
+ if (page) page.emit(_events.Events.Page.RequestFailed, request);
188
+ }
189
+ _onRequestFinished(params) {
190
+ const {
191
+ responseEndTiming
192
+ } = params;
193
+ const request = network.Request.from(params.request);
194
+ const response = network.Response.fromNullable(params.response);
195
+ const page = _page.Page.fromNullable(params.page);
196
+ request._setResponseEndTiming(responseEndTiming);
197
+ this.emit(_events.Events.BrowserContext.RequestFinished, request);
198
+ if (page) page.emit(_events.Events.Page.RequestFinished, request);
199
+ if (response) response._finishedPromise.resolve(null);
200
+ }
201
+ async _onRoute(route) {
202
+ route._context = this;
203
+ const page = route.request()._safePage();
204
+ const routeHandlers = this._routes.slice();
205
+ for (const routeHandler of routeHandlers) {
206
+ // If the page or the context was closed we stall all requests right away.
207
+ if (page !== null && page !== void 0 && page._closeWasCalled || this._closeWasCalled) return;
208
+ if (!routeHandler.matches(route.request().url())) continue;
209
+ const index = this._routes.indexOf(routeHandler);
210
+ if (index === -1) continue;
211
+ if (routeHandler.willExpire()) this._routes.splice(index, 1);
212
+ const handled = await routeHandler.handle(route);
213
+ if (!this._routes.length) this._wrapApiCall(() => this._updateInterceptionPatterns(), true).catch(() => {});
214
+ if (handled) return;
215
+ }
216
+ // If the page is closed or unrouteAll() was called without waiting and interception disabled,
217
+ // the method will throw an error - silence it.
218
+ await route._innerContinue(true).catch(() => {});
219
+ }
220
+ async _onBinding(bindingCall) {
221
+ const func = this._bindings.get(bindingCall._initializer.name);
222
+ if (!func) return;
223
+ await bindingCall.call(func);
224
+ }
225
+ setDefaultNavigationTimeout(timeout) {
226
+ this._timeoutSettings.setDefaultNavigationTimeout(timeout);
227
+ this._wrapApiCall(async () => {
228
+ this._channel.setDefaultNavigationTimeoutNoReply({
229
+ timeout
230
+ }).catch(() => {});
231
+ }, true);
232
+ }
233
+ setDefaultTimeout(timeout) {
234
+ this._timeoutSettings.setDefaultTimeout(timeout);
235
+ this._wrapApiCall(async () => {
236
+ this._channel.setDefaultTimeoutNoReply({
237
+ timeout
238
+ }).catch(() => {});
239
+ }, true);
240
+ }
241
+ browser() {
242
+ return this._browser;
243
+ }
244
+ pages() {
245
+ return [...this._pages];
246
+ }
247
+ async newPage() {
248
+ if (this._ownerPage) throw new Error('Please use browser.newContext()');
249
+ return _page.Page.from((await this._channel.newPage()).page);
250
+ }
251
+ async cookies(urls) {
252
+ if (!urls) urls = [];
253
+ if (urls && typeof urls === 'string') urls = [urls];
254
+ return (await this._channel.cookies({
255
+ urls: urls
256
+ })).cookies;
257
+ }
258
+ async addCookies(cookies) {
259
+ await this._channel.addCookies({
260
+ cookies
261
+ });
262
+ }
263
+ async clearCookies(options = {}) {
264
+ await this._channel.clearCookies({
265
+ name: (0, _utils.isString)(options.name) ? options.name : undefined,
266
+ nameRegexSource: (0, _utils.isRegExp)(options.name) ? options.name.source : undefined,
267
+ nameRegexFlags: (0, _utils.isRegExp)(options.name) ? options.name.flags : undefined,
268
+ domain: (0, _utils.isString)(options.domain) ? options.domain : undefined,
269
+ domainRegexSource: (0, _utils.isRegExp)(options.domain) ? options.domain.source : undefined,
270
+ domainRegexFlags: (0, _utils.isRegExp)(options.domain) ? options.domain.flags : undefined,
271
+ path: (0, _utils.isString)(options.path) ? options.path : undefined,
272
+ pathRegexSource: (0, _utils.isRegExp)(options.path) ? options.path.source : undefined,
273
+ pathRegexFlags: (0, _utils.isRegExp)(options.path) ? options.path.flags : undefined
274
+ });
275
+ }
276
+ async grantPermissions(permissions, options) {
277
+ await this._channel.grantPermissions({
278
+ permissions,
279
+ ...options
280
+ });
281
+ }
282
+ async clearPermissions() {
283
+ await this._channel.clearPermissions();
284
+ }
285
+ async setGeolocation(geolocation) {
286
+ await this._channel.setGeolocation({
287
+ geolocation: geolocation || undefined
288
+ });
289
+ }
290
+ async setExtraHTTPHeaders(headers) {
291
+ network.validateHeaders(headers);
292
+ await this._channel.setExtraHTTPHeaders({
293
+ headers: (0, _utils.headersObjectToArray)(headers)
294
+ });
295
+ }
296
+ async setOffline(offline) {
297
+ await this._channel.setOffline({
298
+ offline
299
+ });
300
+ }
301
+ async setHTTPCredentials(httpCredentials) {
302
+ await this._channel.setHTTPCredentials({
303
+ httpCredentials: httpCredentials || undefined
304
+ });
305
+ }
306
+ async addInitScript(script, arg) {
307
+ const source = await (0, _clientHelper.evaluationScript)(script, arg);
308
+ await this._channel.addInitScript({
309
+ source
310
+ });
311
+ }
312
+ async exposeBinding(name, callback, options = {}) {
313
+ await this._channel.exposeBinding({
314
+ name,
315
+ needsHandle: options.handle
316
+ });
317
+ this._bindings.set(name, callback);
318
+ }
319
+ async exposeFunction(name, callback) {
320
+ await this._channel.exposeBinding({
321
+ name
322
+ });
323
+ const binding = (source, ...args) => callback(...args);
324
+ this._bindings.set(name, binding);
325
+ }
326
+ async route(url, handler, options = {}) {
327
+ this._routes.unshift(new network.RouteHandler(this._options.baseURL, url, handler, options.times));
328
+ await this._updateInterceptionPatterns();
329
+ }
330
+ async _recordIntoHAR(har, page, options = {}) {
331
+ var _options$updateConten, _options$updateMode, _options$updateConten2;
332
+ const {
333
+ harId
334
+ } = await this._channel.harStart({
335
+ page: page === null || page === void 0 ? void 0 : page._channel,
336
+ options: prepareRecordHarOptions({
337
+ path: har,
338
+ content: (_options$updateConten = options.updateContent) !== null && _options$updateConten !== void 0 ? _options$updateConten : 'attach',
339
+ mode: (_options$updateMode = options.updateMode) !== null && _options$updateMode !== void 0 ? _options$updateMode : 'minimal',
340
+ urlFilter: options.url
341
+ })
342
+ });
343
+ this._harRecorders.set(harId, {
344
+ path: har,
345
+ content: (_options$updateConten2 = options.updateContent) !== null && _options$updateConten2 !== void 0 ? _options$updateConten2 : 'attach'
346
+ });
347
+ }
348
+ async routeFromHAR(har, options = {}) {
349
+ if (options.update) {
350
+ await this._recordIntoHAR(har, null, options);
351
+ return;
352
+ }
353
+ const harRouter = await _harRouter.HarRouter.create(this._connection.localUtils(), har, options.notFound || 'abort', {
354
+ urlMatch: options.url
355
+ });
356
+ this._harRouters.push(harRouter);
357
+ await harRouter.addContextRoute(this);
358
+ }
359
+ _disposeHarRouters() {
360
+ this._harRouters.forEach(router => router.dispose());
361
+ this._harRouters = [];
362
+ }
363
+ async unrouteAll(options) {
364
+ await this._unrouteInternal(this._routes, [], options === null || options === void 0 ? void 0 : options.behavior);
365
+ this._disposeHarRouters();
366
+ }
367
+ async unroute(url, handler) {
368
+ const removed = [];
369
+ const remaining = [];
370
+ for (const route of this._routes) {
371
+ if ((0, _utils.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler)) removed.push(route);else remaining.push(route);
372
+ }
373
+ await this._unrouteInternal(removed, remaining, 'default');
374
+ }
375
+ async _unrouteInternal(removed, remaining, behavior) {
376
+ this._routes = remaining;
377
+ await this._updateInterceptionPatterns();
378
+ if (!behavior || behavior === 'default') return;
379
+ const promises = removed.map(routeHandler => routeHandler.stop(behavior));
380
+ await Promise.all(promises);
381
+ }
382
+ async _updateInterceptionPatterns() {
383
+ const patterns = network.RouteHandler.prepareInterceptionPatterns(this._routes);
384
+ await this._channel.setNetworkInterceptionPatterns({
385
+ patterns
386
+ });
387
+ }
388
+ _effectiveCloseReason() {
389
+ var _this$_browser3;
390
+ return this._closeReason || ((_this$_browser3 = this._browser) === null || _this$_browser3 === void 0 ? void 0 : _this$_browser3._closeReason);
391
+ }
392
+ async waitForEvent(event, optionsOrPredicate = {}) {
393
+ return await this._wrapApiCall(async () => {
394
+ const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);
395
+ const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;
396
+ const waiter = _waiter.Waiter.createForEvent(this, event);
397
+ waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
398
+ if (event !== _events.Events.BrowserContext.Close) waiter.rejectOnEvent(this, _events.Events.BrowserContext.Close, () => new _errors.TargetClosedError(this._effectiveCloseReason()));
399
+ const result = await waiter.waitForEvent(this, event, predicate);
400
+ waiter.dispose();
401
+ return result;
402
+ });
403
+ }
404
+ async storageState(options = {}) {
405
+ const state = await this._channel.storageState();
406
+ if (options.path) {
407
+ await (0, _utils.mkdirIfNeeded)(options.path);
408
+ await _fs.default.promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');
409
+ }
410
+ return state;
411
+ }
412
+ backgroundPages() {
413
+ return [...this._backgroundPages];
414
+ }
415
+ serviceWorkers() {
416
+ return [...this._serviceWorkers];
417
+ }
418
+ async newCDPSession(page) {
419
+ // channelOwner.ts's validation messages don't handle the pseudo-union type, so we're explicit here
420
+ if (!(page instanceof _page.Page) && !(page instanceof _frame.Frame)) throw new Error('page: expected Page or Frame');
421
+ const result = await this._channel.newCDPSession(page instanceof _page.Page ? {
422
+ page: page._channel
423
+ } : {
424
+ frame: page._channel
425
+ });
426
+ return _cdpSession.CDPSession.from(result.session);
427
+ }
428
+ _onClose() {
429
+ var _this$_browserType;
430
+ if (this._browser) this._browser._contexts.delete(this);
431
+ (_this$_browserType = this._browserType) === null || _this$_browserType === void 0 || (_this$_browserType = _this$_browserType._contexts) === null || _this$_browserType === void 0 || _this$_browserType.delete(this);
432
+ this._disposeHarRouters();
433
+ this.tracing._resetStackCounter();
434
+ this.emit(_events.Events.BrowserContext.Close, this);
435
+ }
436
+ async [_Symbol$asyncDispose]() {
437
+ await this.close();
438
+ }
439
+ async close(options = {}) {
440
+ if (this._closeWasCalled) return;
441
+ this._closeReason = options.reason;
442
+ this._closeWasCalled = true;
443
+ await this._wrapApiCall(async () => {
444
+ await this.request.dispose(options);
445
+ }, true);
446
+ await this._wrapApiCall(async () => {
447
+ var _this$_browserType2;
448
+ await ((_this$_browserType2 = this._browserType) === null || _this$_browserType2 === void 0 ? void 0 : _this$_browserType2._willCloseContext(this));
449
+ for (const [harId, harParams] of this._harRecorders) {
450
+ const har = await this._channel.harExport({
451
+ harId
452
+ });
453
+ const artifact = _artifact.Artifact.from(har.artifact);
454
+ // Server side will compress artifact if content is attach or if file is .zip.
455
+ const isCompressed = harParams.content === 'attach' || harParams.path.endsWith('.zip');
456
+ const needCompressed = harParams.path.endsWith('.zip');
457
+ if (isCompressed && !needCompressed) {
458
+ await artifact.saveAs(harParams.path + '.tmp');
459
+ await this._connection.localUtils()._channel.harUnzip({
460
+ zipFile: harParams.path + '.tmp',
461
+ harFile: harParams.path
462
+ });
463
+ } else {
464
+ await artifact.saveAs(harParams.path);
465
+ }
466
+ await artifact.delete();
467
+ }
468
+ }, true);
469
+ await this._channel.close(options);
470
+ await this._closedPromise;
471
+ }
472
+ async _enableRecorder(params) {
473
+ await this._channel.recorderSupplementEnable(params);
474
+ }
475
+ }
476
+ exports.BrowserContext = BrowserContext;
477
+ async function prepareStorageState(options) {
478
+ if (typeof options.storageState !== 'string') return options.storageState;
479
+ try {
480
+ return JSON.parse(await _fs.default.promises.readFile(options.storageState, 'utf8'));
481
+ } catch (e) {
482
+ (0, _stackTrace.rewriteErrorMessage)(e, `Error reading storage state from ${options.storageState}:\n` + e.message);
483
+ throw e;
484
+ }
485
+ }
486
+ function prepareRecordHarOptions(options) {
487
+ if (!options) return;
488
+ return {
489
+ path: options.path,
490
+ content: options.content || (options.omitContent ? 'omit' : undefined),
491
+ urlGlob: (0, _utils.isString)(options.urlFilter) ? options.urlFilter : undefined,
492
+ urlRegexSource: (0, _utils.isRegExp)(options.urlFilter) ? options.urlFilter.source : undefined,
493
+ urlRegexFlags: (0, _utils.isRegExp)(options.urlFilter) ? options.urlFilter.flags : undefined,
494
+ mode: options.mode
495
+ };
496
+ }
497
+ async function prepareBrowserContextParams(options) {
498
+ if (options.videoSize && !options.videosPath) throw new Error(`"videoSize" option requires "videosPath" to be specified`);
499
+ if (options.extraHTTPHeaders) network.validateHeaders(options.extraHTTPHeaders);
500
+ const contextParams = {
501
+ ...options,
502
+ viewport: options.viewport === null ? undefined : options.viewport,
503
+ noDefaultViewport: options.viewport === null,
504
+ extraHTTPHeaders: options.extraHTTPHeaders ? (0, _utils.headersObjectToArray)(options.extraHTTPHeaders) : undefined,
505
+ storageState: await prepareStorageState(options),
506
+ serviceWorkers: options.serviceWorkers,
507
+ recordHar: prepareRecordHarOptions(options.recordHar),
508
+ colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,
509
+ reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,
510
+ forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,
511
+ acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),
512
+ clientCertificates: await toClientCertificatesProtocol(options.clientCertificates)
513
+ };
514
+ if (!contextParams.recordVideo && options.videosPath) {
515
+ contextParams.recordVideo = {
516
+ dir: options.videosPath,
517
+ size: options.videoSize
518
+ };
519
+ }
520
+ if (contextParams.recordVideo && contextParams.recordVideo.dir) contextParams.recordVideo.dir = _path.default.resolve(process.cwd(), contextParams.recordVideo.dir);
521
+ return contextParams;
522
+ }
523
+ function toAcceptDownloadsProtocol(acceptDownloads) {
524
+ if (acceptDownloads === undefined) return undefined;
525
+ if (acceptDownloads) return 'accept';
526
+ return 'deny';
527
+ }
528
+ async function toClientCertificatesProtocol(certs) {
529
+ if (!certs) return undefined;
530
+ const bufferizeContent = async (value, path) => {
531
+ if (value) return value;
532
+ if (path) return await _fs.default.promises.readFile(path);
533
+ };
534
+ return await Promise.all(certs.map(async cert => ({
535
+ origin: cert.origin,
536
+ cert: await bufferizeContent(cert.cert, cert.certPath),
537
+ key: await bufferizeContent(cert.key, cert.keyPath),
538
+ pfx: await bufferizeContent(cert.pfx, cert.pfxPath),
539
+ passphrase: cert.passphrase
540
+ })));
541
+ }