@checkly/playwright-core 1.41.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 (305) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +1513 -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 +23 -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 +23 -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 +22 -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 +22 -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 +23 -0
  23. package/browsers.json +64 -0
  24. package/cli.js +17 -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 +97 -0
  31. package/lib/cli/program.js +582 -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 +272 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +145 -0
  38. package/lib/client/browserContext.js +509 -0
  39. package/lib/client/browserType.js +233 -0
  40. package/lib/client/cdpSession.js +53 -0
  41. package/lib/client/channelOwner.js +229 -0
  42. package/lib/client/clientHelper.js +57 -0
  43. package/lib/client/clientInstrumentation.js +40 -0
  44. package/lib/client/connection.js +327 -0
  45. package/lib/client/consoleMessage.js +55 -0
  46. package/lib/client/coverage.js +41 -0
  47. package/lib/client/dialog.js +57 -0
  48. package/lib/client/download.js +62 -0
  49. package/lib/client/electron.js +130 -0
  50. package/lib/client/elementHandle.js +291 -0
  51. package/lib/client/errors.js +77 -0
  52. package/lib/client/events.js +93 -0
  53. package/lib/client/fetch.js +343 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +506 -0
  56. package/lib/client/harRouter.js +93 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +123 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +35 -0
  61. package/lib/client/locator.js +432 -0
  62. package/lib/client/network.js +601 -0
  63. package/lib/client/page.js +707 -0
  64. package/lib/client/playwright.js +74 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +135 -0
  68. package/lib/client/types.js +24 -0
  69. package/lib/client/video.js +51 -0
  70. package/lib/client/waiter.js +158 -0
  71. package/lib/client/webError.js +37 -0
  72. package/lib/client/worker.js +71 -0
  73. package/lib/client/writableStream.js +54 -0
  74. package/lib/common/socksProxy.js +569 -0
  75. package/lib/common/timeoutSettings.js +73 -0
  76. package/lib/common/types.js +5 -0
  77. package/lib/generated/consoleApiSource.js +7 -0
  78. package/lib/generated/injectedScriptSource.js +7 -0
  79. package/lib/generated/recorderSource.js +7 -0
  80. package/lib/generated/utilityScriptSource.js +7 -0
  81. package/lib/image_tools/colorUtils.js +98 -0
  82. package/lib/image_tools/compare.js +108 -0
  83. package/lib/image_tools/imageChannel.js +70 -0
  84. package/lib/image_tools/stats.js +102 -0
  85. package/lib/inProcessFactory.js +54 -0
  86. package/lib/inprocess.js +20 -0
  87. package/lib/outofprocess.js +67 -0
  88. package/lib/protocol/debug.js +27 -0
  89. package/lib/protocol/serializers.js +172 -0
  90. package/lib/protocol/transport.js +82 -0
  91. package/lib/protocol/validator.js +2599 -0
  92. package/lib/protocol/validatorPrimitives.js +139 -0
  93. package/lib/remote/playwrightConnection.js +274 -0
  94. package/lib/remote/playwrightServer.js +110 -0
  95. package/lib/server/accessibility.js +62 -0
  96. package/lib/server/android/android.js +441 -0
  97. package/lib/server/android/backendAdb.js +172 -0
  98. package/lib/server/artifact.js +104 -0
  99. package/lib/server/browser.js +129 -0
  100. package/lib/server/browserContext.js +609 -0
  101. package/lib/server/browserType.js +300 -0
  102. package/lib/server/chromium/appIcon.png +0 -0
  103. package/lib/server/chromium/chromium.js +346 -0
  104. package/lib/server/chromium/chromiumSwitches.js +41 -0
  105. package/lib/server/chromium/crAccessibility.js +237 -0
  106. package/lib/server/chromium/crBrowser.js +521 -0
  107. package/lib/server/chromium/crConnection.js +228 -0
  108. package/lib/server/chromium/crCoverage.js +246 -0
  109. package/lib/server/chromium/crDevTools.js +104 -0
  110. package/lib/server/chromium/crDragDrop.js +144 -0
  111. package/lib/server/chromium/crExecutionContext.js +156 -0
  112. package/lib/server/chromium/crInput.js +171 -0
  113. package/lib/server/chromium/crNetworkManager.js +723 -0
  114. package/lib/server/chromium/crPage.js +1173 -0
  115. package/lib/server/chromium/crPdf.js +147 -0
  116. package/lib/server/chromium/crProtocolHelper.js +131 -0
  117. package/lib/server/chromium/crServiceWorker.js +115 -0
  118. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  119. package/lib/server/chromium/videoRecorder.js +155 -0
  120. package/lib/server/console.js +59 -0
  121. package/lib/server/cookieStore.js +112 -0
  122. package/lib/server/debugController.js +236 -0
  123. package/lib/server/debugger.js +132 -0
  124. package/lib/server/deviceDescriptors.js +21 -0
  125. package/lib/server/deviceDescriptorsSource.json +1549 -0
  126. package/lib/server/dialog.js +70 -0
  127. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  128. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  129. package/lib/server/dispatchers/browserContextDispatcher.js +306 -0
  130. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  131. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  132. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  133. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  134. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  135. package/lib/server/dispatchers/dispatcher.js +400 -0
  136. package/lib/server/dispatchers/electronDispatcher.js +80 -0
  137. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  138. package/lib/server/dispatchers/frameDispatcher.js +287 -0
  139. package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
  140. package/lib/server/dispatchers/jsonPipeDispatcher.js +61 -0
  141. package/lib/server/dispatchers/localUtilsDispatcher.js +399 -0
  142. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  143. package/lib/server/dispatchers/pageDispatcher.js +363 -0
  144. package/lib/server/dispatchers/playwrightDispatcher.js +105 -0
  145. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  146. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  147. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  148. package/lib/server/dispatchers/writableStreamDispatcher.js +55 -0
  149. package/lib/server/dom.js +808 -0
  150. package/lib/server/download.js +53 -0
  151. package/lib/server/electron/electron.js +254 -0
  152. package/lib/server/electron/loader.js +57 -0
  153. package/lib/server/errors.js +68 -0
  154. package/lib/server/fetch.js +611 -0
  155. package/lib/server/fileChooser.js +42 -0
  156. package/lib/server/fileUploadUtils.js +71 -0
  157. package/lib/server/firefox/ffAccessibility.js +215 -0
  158. package/lib/server/firefox/ffBrowser.js +447 -0
  159. package/lib/server/firefox/ffConnection.js +168 -0
  160. package/lib/server/firefox/ffExecutionContext.js +138 -0
  161. package/lib/server/firefox/ffInput.js +150 -0
  162. package/lib/server/firefox/ffNetworkManager.js +231 -0
  163. package/lib/server/firefox/ffPage.js +558 -0
  164. package/lib/server/firefox/firefox.js +91 -0
  165. package/lib/server/formData.js +75 -0
  166. package/lib/server/frameSelectors.js +171 -0
  167. package/lib/server/frames.js +1597 -0
  168. package/lib/server/har/harRecorder.js +139 -0
  169. package/lib/server/har/harTracer.js +539 -0
  170. package/lib/server/helper.js +103 -0
  171. package/lib/server/index.js +96 -0
  172. package/lib/server/input.js +301 -0
  173. package/lib/server/instrumentation.js +74 -0
  174. package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
  175. package/lib/server/javascript.js +305 -0
  176. package/lib/server/launchApp.js +90 -0
  177. package/lib/server/macEditingCommands.js +139 -0
  178. package/lib/server/network.js +607 -0
  179. package/lib/server/page.js +793 -0
  180. package/lib/server/pipeTransport.js +85 -0
  181. package/lib/server/playwright.js +82 -0
  182. package/lib/server/progress.js +102 -0
  183. package/lib/server/protocolError.js +49 -0
  184. package/lib/server/recorder/codeGenerator.js +153 -0
  185. package/lib/server/recorder/csharp.js +310 -0
  186. package/lib/server/recorder/java.js +216 -0
  187. package/lib/server/recorder/javascript.js +229 -0
  188. package/lib/server/recorder/jsonl.js +47 -0
  189. package/lib/server/recorder/language.js +44 -0
  190. package/lib/server/recorder/python.js +275 -0
  191. package/lib/server/recorder/recorderActions.js +5 -0
  192. package/lib/server/recorder/recorderApp.js +181 -0
  193. package/lib/server/recorder/recorderUtils.js +48 -0
  194. package/lib/server/recorder/utils.js +45 -0
  195. package/lib/server/recorder.js +700 -0
  196. package/lib/server/registry/browserFetcher.js +168 -0
  197. package/lib/server/registry/dependencies.js +322 -0
  198. package/lib/server/registry/index.js +925 -0
  199. package/lib/server/registry/nativeDeps.js +383 -0
  200. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  201. package/lib/server/screenshotter.js +354 -0
  202. package/lib/server/selectors.js +73 -0
  203. package/lib/server/socksInterceptor.js +100 -0
  204. package/lib/server/trace/recorder/snapshotter.js +168 -0
  205. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  206. package/lib/server/trace/recorder/tracing.js +552 -0
  207. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  208. package/lib/server/trace/viewer/traceViewer.js +229 -0
  209. package/lib/server/transport.js +191 -0
  210. package/lib/server/types.js +24 -0
  211. package/lib/server/usKeyboardLayout.js +555 -0
  212. package/lib/server/webkit/webkit.js +87 -0
  213. package/lib/server/webkit/wkAccessibility.js +194 -0
  214. package/lib/server/webkit/wkBrowser.js +328 -0
  215. package/lib/server/webkit/wkConnection.js +173 -0
  216. package/lib/server/webkit/wkExecutionContext.js +146 -0
  217. package/lib/server/webkit/wkInput.js +169 -0
  218. package/lib/server/webkit/wkInterceptableRequest.js +158 -0
  219. package/lib/server/webkit/wkPage.js +1198 -0
  220. package/lib/server/webkit/wkProvisionalPage.js +59 -0
  221. package/lib/server/webkit/wkWorkers.js +104 -0
  222. package/lib/third_party/diff_match_patch.js +2222 -0
  223. package/lib/third_party/pixelmatch.js +255 -0
  224. package/lib/utils/ascii.js +31 -0
  225. package/lib/utils/comparators.js +171 -0
  226. package/lib/utils/crypto.js +33 -0
  227. package/lib/utils/debug.js +46 -0
  228. package/lib/utils/debugLogger.js +89 -0
  229. package/lib/utils/env.js +47 -0
  230. package/lib/utils/eventsHelper.js +38 -0
  231. package/lib/utils/fileUtils.js +66 -0
  232. package/lib/utils/glob.js +83 -0
  233. package/lib/utils/happy-eyeballs.js +154 -0
  234. package/lib/utils/headers.js +52 -0
  235. package/lib/utils/hostPlatform.js +124 -0
  236. package/lib/utils/httpServer.js +195 -0
  237. package/lib/utils/index.js +324 -0
  238. package/lib/utils/isomorphic/cssParser.js +250 -0
  239. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  240. package/lib/utils/isomorphic/locatorGenerators.js +651 -0
  241. package/lib/utils/isomorphic/locatorParser.js +179 -0
  242. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  243. package/lib/utils/isomorphic/selectorParser.js +397 -0
  244. package/lib/utils/isomorphic/stringUtils.js +107 -0
  245. package/lib/utils/isomorphic/traceUtils.js +39 -0
  246. package/lib/utils/linuxUtils.js +78 -0
  247. package/lib/utils/manualPromise.js +109 -0
  248. package/lib/utils/mimeType.js +29 -0
  249. package/lib/utils/multimap.js +75 -0
  250. package/lib/utils/network.js +189 -0
  251. package/lib/utils/processLauncher.js +248 -0
  252. package/lib/utils/profiler.js +53 -0
  253. package/lib/utils/rtti.js +41 -0
  254. package/lib/utils/semaphore.js +51 -0
  255. package/lib/utils/spawnAsync.js +45 -0
  256. package/lib/utils/stackTrace.js +123 -0
  257. package/lib/utils/task.js +58 -0
  258. package/lib/utils/time.js +37 -0
  259. package/lib/utils/timeoutRunner.js +131 -0
  260. package/lib/utils/traceUtils.js +44 -0
  261. package/lib/utils/userAgent.js +105 -0
  262. package/lib/utils/wsServer.js +125 -0
  263. package/lib/utils/zipFile.js +75 -0
  264. package/lib/utils/zones.js +99 -0
  265. package/lib/utilsBundle.js +81 -0
  266. package/lib/utilsBundleImpl/index.js +51 -0
  267. package/lib/utilsBundleImpl/xdg-open +1066 -0
  268. package/lib/vite/htmlReport/index.html +66 -0
  269. package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
  270. package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
  271. package/lib/vite/recorder/assets/codicon-zGuYmc9o.ttf +0 -0
  272. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +1 -0
  273. package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
  274. package/lib/vite/recorder/index.html +29 -0
  275. package/lib/vite/recorder/playwright-logo.svg +9 -0
  276. package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +24 -0
  277. package/lib/vite/traceViewer/assets/codeMirrorModule-fqJB1XDu.js +24 -0
  278. package/lib/vite/traceViewer/assets/codeMirrorModule-y3M3aAqy.js +24 -0
  279. package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +69 -0
  280. package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +69 -0
  281. package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +69 -0
  282. package/lib/vite/traceViewer/assets/xtermModule-Yt6xwiJ_.js +9 -0
  283. package/lib/vite/traceViewer/codeMirrorModule.Hs9-1ZG4.css +1 -0
  284. package/lib/vite/traceViewer/codicon.zGuYmc9o.ttf +0 -0
  285. package/lib/vite/traceViewer/index.-g_5lMbJ.css +1 -0
  286. package/lib/vite/traceViewer/index.4X7zDysg.js +2 -0
  287. package/lib/vite/traceViewer/index.HkJgzlGy.js +2 -0
  288. package/lib/vite/traceViewer/index.html +26 -0
  289. package/lib/vite/traceViewer/index.kRjx5sAJ.js +2 -0
  290. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  291. package/lib/vite/traceViewer/snapshot.html +21 -0
  292. package/lib/vite/traceViewer/sw.bundle.js +4 -0
  293. package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +10 -0
  294. package/lib/vite/traceViewer/uiMode.GTNzARcV.js +10 -0
  295. package/lib/vite/traceViewer/uiMode.html +17 -0
  296. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +1 -0
  297. package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +10 -0
  298. package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +1 -0
  299. package/lib/vite/traceViewer/xtermModule.0lwXJFHT.css +32 -0
  300. package/lib/zipBundle.js +25 -0
  301. package/lib/zipBundleImpl.js +5 -0
  302. package/package.json +43 -0
  303. package/types/protocol.d.ts +20304 -0
  304. package/types/structs.d.ts +45 -0
  305. package/types/types.d.ts +20626 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Dialog = void 0;
7
+ var _utils = require("../utils");
8
+ var _instrumentation = require("./instrumentation");
9
+ /**
10
+ * Copyright 2017 Google Inc. All rights reserved.
11
+ * Modifications copyright (c) Microsoft Corporation.
12
+ *
13
+ * Licensed under the Apache License, Version 2.0 (the "License");
14
+ * you may not use this file except in compliance with the License.
15
+ * You may obtain a copy of the License at
16
+ *
17
+ * http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software
20
+ * distributed under the License is distributed on an "AS IS" BASIS,
21
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22
+ * See the License for the specific language governing permissions and
23
+ * limitations under the License.
24
+ */
25
+
26
+ class Dialog extends _instrumentation.SdkObject {
27
+ constructor(page, type, message, onHandle, defaultValue) {
28
+ super(page, 'dialog');
29
+ this._page = void 0;
30
+ this._type = void 0;
31
+ this._message = void 0;
32
+ this._onHandle = void 0;
33
+ this._handled = false;
34
+ this._defaultValue = void 0;
35
+ this._page = page;
36
+ this._type = type;
37
+ this._message = message;
38
+ this._onHandle = onHandle;
39
+ this._defaultValue = defaultValue || '';
40
+ this._page._frameManager.dialogDidOpen(this);
41
+ }
42
+ page() {
43
+ return this._page;
44
+ }
45
+ type() {
46
+ return this._type;
47
+ }
48
+ message() {
49
+ return this._message;
50
+ }
51
+ defaultValue() {
52
+ return this._defaultValue;
53
+ }
54
+ async accept(promptText) {
55
+ (0, _utils.assert)(!this._handled, 'Cannot accept dialog which is already handled!');
56
+ this._handled = true;
57
+ this._page._frameManager.dialogWillClose(this);
58
+ await this._onHandle(true, promptText);
59
+ }
60
+ async dismiss() {
61
+ (0, _utils.assert)(!this._handled, 'Cannot dismiss dialog which is already handled!');
62
+ this._handled = true;
63
+ this._page._frameManager.dialogWillClose(this);
64
+ await this._onHandle(false);
65
+ }
66
+ async close() {
67
+ if (this._type === 'beforeunload') await this.accept();else await this.dismiss();
68
+ }
69
+ }
70
+ exports.Dialog = Dialog;
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AndroidSocketDispatcher = exports.AndroidDispatcher = exports.AndroidDeviceDispatcher = void 0;
7
+ var _dispatcher = require("./dispatcher");
8
+ var _android = require("../android/android");
9
+ var _browserContextDispatcher = require("./browserContextDispatcher");
10
+ /**
11
+ * Copyright (c) Microsoft Corporation.
12
+ *
13
+ * Licensed under the Apache License, Version 2.0 (the 'License");
14
+ * you may not use this file except in compliance with the License.
15
+ * You may obtain a copy of the License at
16
+ *
17
+ * http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software
20
+ * distributed under the License is distributed on an "AS IS" BASIS,
21
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22
+ * See the License for the specific language governing permissions and
23
+ * limitations under the License.
24
+ */
25
+
26
+ class AndroidDispatcher extends _dispatcher.Dispatcher {
27
+ constructor(scope, android) {
28
+ super(scope, android, 'Android', {});
29
+ this._type_Android = true;
30
+ }
31
+ async devices(params) {
32
+ const devices = await this._object.devices(params);
33
+ return {
34
+ devices: devices.map(d => AndroidDeviceDispatcher.from(this, d))
35
+ };
36
+ }
37
+ async setDefaultTimeoutNoReply(params) {
38
+ this._object.setDefaultTimeout(params.timeout);
39
+ }
40
+ }
41
+ exports.AndroidDispatcher = AndroidDispatcher;
42
+ class AndroidDeviceDispatcher extends _dispatcher.Dispatcher {
43
+ static from(scope, device) {
44
+ const result = (0, _dispatcher.existingDispatcher)(device);
45
+ return result || new AndroidDeviceDispatcher(scope, device);
46
+ }
47
+ constructor(scope, device) {
48
+ super(scope, device, 'AndroidDevice', {
49
+ model: device.model,
50
+ serial: device.serial
51
+ });
52
+ this._type_EventTarget = true;
53
+ this._type_AndroidDevice = true;
54
+ for (const webView of device.webViews()) this._dispatchEvent('webViewAdded', {
55
+ webView
56
+ });
57
+ this.addObjectListener(_android.AndroidDevice.Events.WebViewAdded, webView => this._dispatchEvent('webViewAdded', {
58
+ webView
59
+ }));
60
+ this.addObjectListener(_android.AndroidDevice.Events.WebViewRemoved, socketName => this._dispatchEvent('webViewRemoved', {
61
+ socketName
62
+ }));
63
+ this.addObjectListener(_android.AndroidDevice.Events.Close, socketName => this._dispatchEvent('close'));
64
+ }
65
+ async wait(params) {
66
+ await this._object.send('wait', params);
67
+ }
68
+ async fill(params) {
69
+ await this._object.send('click', {
70
+ selector: params.selector
71
+ });
72
+ await this._object.send('fill', params);
73
+ }
74
+ async tap(params) {
75
+ await this._object.send('click', params);
76
+ }
77
+ async drag(params) {
78
+ await this._object.send('drag', params);
79
+ }
80
+ async fling(params) {
81
+ await this._object.send('fling', params);
82
+ }
83
+ async longTap(params) {
84
+ await this._object.send('longClick', params);
85
+ }
86
+ async pinchClose(params) {
87
+ await this._object.send('pinchClose', params);
88
+ }
89
+ async pinchOpen(params) {
90
+ await this._object.send('pinchOpen', params);
91
+ }
92
+ async scroll(params) {
93
+ await this._object.send('scroll', params);
94
+ }
95
+ async swipe(params) {
96
+ await this._object.send('swipe', params);
97
+ }
98
+ async info(params) {
99
+ return {
100
+ info: await this._object.send('info', params)
101
+ };
102
+ }
103
+ async inputType(params) {
104
+ const text = params.text;
105
+ const keyCodes = [];
106
+ for (let i = 0; i < text.length; ++i) {
107
+ const code = keyMap.get(text[i].toUpperCase());
108
+ if (code === undefined) throw new Error('No mapping for ' + text[i] + ' found');
109
+ keyCodes.push(code);
110
+ }
111
+ await Promise.all(keyCodes.map(keyCode => this._object.send('inputPress', {
112
+ keyCode
113
+ })));
114
+ }
115
+ async inputPress(params) {
116
+ if (!keyMap.has(params.key)) throw new Error('Unknown key: ' + params.key);
117
+ await this._object.send('inputPress', {
118
+ keyCode: keyMap.get(params.key)
119
+ });
120
+ }
121
+ async inputTap(params) {
122
+ await this._object.send('inputClick', params);
123
+ }
124
+ async inputSwipe(params) {
125
+ await this._object.send('inputSwipe', params);
126
+ }
127
+ async inputDrag(params) {
128
+ await this._object.send('inputDrag', params);
129
+ }
130
+ async screenshot(params) {
131
+ return {
132
+ binary: await this._object.screenshot()
133
+ };
134
+ }
135
+ async shell(params) {
136
+ return {
137
+ result: await this._object.shell(params.command)
138
+ };
139
+ }
140
+ async open(params, metadata) {
141
+ const socket = await this._object.open(params.command);
142
+ return {
143
+ socket: new AndroidSocketDispatcher(this, socket)
144
+ };
145
+ }
146
+ async installApk(params) {
147
+ await this._object.installApk(params.file, {
148
+ args: params.args
149
+ });
150
+ }
151
+ async push(params) {
152
+ await this._object.push(params.file, params.path, params.mode);
153
+ }
154
+ async launchBrowser(params) {
155
+ const context = await this._object.launchBrowser(params.pkg, params);
156
+ return {
157
+ context: new _browserContextDispatcher.BrowserContextDispatcher(this, context)
158
+ };
159
+ }
160
+ async close(params) {
161
+ await this._object.close();
162
+ }
163
+ async setDefaultTimeoutNoReply(params) {
164
+ this._object.setDefaultTimeout(params.timeout);
165
+ }
166
+ async connectToWebView(params) {
167
+ return {
168
+ context: new _browserContextDispatcher.BrowserContextDispatcher(this, await this._object.connectToWebView(params.socketName))
169
+ };
170
+ }
171
+ }
172
+ exports.AndroidDeviceDispatcher = AndroidDeviceDispatcher;
173
+ class AndroidSocketDispatcher extends _dispatcher.Dispatcher {
174
+ constructor(scope, socket) {
175
+ super(scope, socket, 'AndroidSocket', {});
176
+ this._type_AndroidSocket = true;
177
+ this.addObjectListener('data', data => this._dispatchEvent('data', {
178
+ data
179
+ }));
180
+ this.addObjectListener('close', () => {
181
+ this._dispatchEvent('close');
182
+ this._dispose();
183
+ });
184
+ }
185
+ async write(params, metadata) {
186
+ await this._object.write(params.data);
187
+ }
188
+ async close(params, metadata) {
189
+ this._object.close();
190
+ }
191
+ }
192
+ exports.AndroidSocketDispatcher = AndroidSocketDispatcher;
193
+ const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ArtifactDispatcher = void 0;
7
+ var _dispatcher = require("./dispatcher");
8
+ var _streamDispatcher = require("./streamDispatcher");
9
+ var _fs = _interopRequireDefault(require("fs"));
10
+ var _fileUtils = require("../../utils/fileUtils");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ /**
13
+ * Copyright (c) Microsoft Corporation.
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the 'License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ class ArtifactDispatcher extends _dispatcher.Dispatcher {
29
+ static from(parentScope, artifact) {
30
+ return ArtifactDispatcher.fromNullable(parentScope, artifact);
31
+ }
32
+ static fromNullable(parentScope, artifact) {
33
+ if (!artifact) return undefined;
34
+ const result = (0, _dispatcher.existingDispatcher)(artifact);
35
+ return result || new ArtifactDispatcher(parentScope, artifact);
36
+ }
37
+ constructor(scope, artifact) {
38
+ super(scope, artifact, 'Artifact', {
39
+ absolutePath: artifact.localPath()
40
+ });
41
+ this._type_Artifact = true;
42
+ }
43
+ async pathAfterFinished() {
44
+ const path = await this._object.localPathAfterFinished();
45
+ return {
46
+ value: path
47
+ };
48
+ }
49
+ async saveAs(params) {
50
+ return await new Promise((resolve, reject) => {
51
+ this._object.saveAs(async (localPath, error) => {
52
+ if (error) {
53
+ reject(error);
54
+ return;
55
+ }
56
+ try {
57
+ await (0, _fileUtils.mkdirIfNeeded)(params.path);
58
+ await _fs.default.promises.copyFile(localPath, params.path);
59
+ resolve();
60
+ } catch (e) {
61
+ reject(e);
62
+ }
63
+ });
64
+ });
65
+ }
66
+ async saveAsStream() {
67
+ return await new Promise((resolve, reject) => {
68
+ this._object.saveAs(async (localPath, error) => {
69
+ if (error) {
70
+ reject(error);
71
+ return;
72
+ }
73
+ try {
74
+ const readable = _fs.default.createReadStream(localPath, {
75
+ highWaterMark: 1024 * 1024
76
+ });
77
+ const stream = new _streamDispatcher.StreamDispatcher(this, readable);
78
+ // Resolve with a stream, so that client starts saving the data.
79
+ resolve({
80
+ stream
81
+ });
82
+ // Block the Artifact until the stream is consumed.
83
+ await new Promise(resolve => {
84
+ readable.on('close', resolve);
85
+ readable.on('end', resolve);
86
+ readable.on('error', resolve);
87
+ });
88
+ } catch (e) {
89
+ reject(e);
90
+ }
91
+ });
92
+ });
93
+ }
94
+ async stream() {
95
+ const fileName = await this._object.localPathAfterFinished();
96
+ const readable = _fs.default.createReadStream(fileName, {
97
+ highWaterMark: 1024 * 1024
98
+ });
99
+ return {
100
+ stream: new _streamDispatcher.StreamDispatcher(this, readable)
101
+ };
102
+ }
103
+ async failure() {
104
+ const error = await this._object.failureError();
105
+ return {
106
+ error: error || undefined
107
+ };
108
+ }
109
+ async cancel() {
110
+ await this._object.cancel();
111
+ }
112
+ async delete(_, metadata) {
113
+ metadata.potentiallyClosesScope = true;
114
+ await this._object.delete();
115
+ this._dispose();
116
+ }
117
+ }
118
+ exports.ArtifactDispatcher = ArtifactDispatcher;
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BrowserContextDispatcher = void 0;
7
+ var _browserContext = require("../browserContext");
8
+ var _dispatcher = require("./dispatcher");
9
+ var _pageDispatcher = require("./pageDispatcher");
10
+ var _networkDispatchers = require("./networkDispatchers");
11
+ var _crBrowser = require("../chromium/crBrowser");
12
+ var _cdpSessionDispatcher = require("./cdpSessionDispatcher");
13
+ var _recorder = require("../recorder");
14
+ var _artifactDispatcher = require("./artifactDispatcher");
15
+ var _tracingDispatcher = require("./tracingDispatcher");
16
+ var fs = _interopRequireWildcard(require("fs"));
17
+ var path = _interopRequireWildcard(require("path"));
18
+ var _utils = require("../../utils");
19
+ var _writableStreamDispatcher = require("./writableStreamDispatcher");
20
+ var _dialogDispatcher = require("./dialogDispatcher");
21
+ var _errors = require("../errors");
22
+ var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
23
+ 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); }
24
+ 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; }
25
+ /**
26
+ * Copyright (c) Microsoft Corporation.
27
+ *
28
+ * Licensed under the Apache License, Version 2.0 (the 'License");
29
+ * you may not use this file except in compliance with the License.
30
+ * You may obtain a copy of the License at
31
+ *
32
+ * http://www.apache.org/licenses/LICENSE-2.0
33
+ *
34
+ * Unless required by applicable law or agreed to in writing, software
35
+ * distributed under the License is distributed on an "AS IS" BASIS,
36
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
37
+ * See the License for the specific language governing permissions and
38
+ * limitations under the License.
39
+ */
40
+
41
+ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
42
+ constructor(parentScope, context) {
43
+ // We will reparent these to the context below.
44
+ const requestContext = _networkDispatchers.APIRequestContextDispatcher.from(parentScope, context.fetchRequest);
45
+ const tracing = _tracingDispatcher.TracingDispatcher.from(parentScope, context.tracing);
46
+ super(parentScope, context, 'BrowserContext', {
47
+ isChromium: context._browser.options.isChromium,
48
+ isLocalBrowserOnServer: context._browser._isCollocatedWithServer,
49
+ requestContext,
50
+ tracing
51
+ });
52
+ this._type_EventTarget = true;
53
+ this._type_BrowserContext = true;
54
+ this._context = void 0;
55
+ this._subscriptions = new Set();
56
+ this.adopt(requestContext);
57
+ this.adopt(tracing);
58
+ this._context = context;
59
+ // Note: when launching persistent context, dispatcher is created very late,
60
+ // so we can already have pages, videos and everything else.
61
+
62
+ const onVideo = artifact => {
63
+ // Note: Video must outlive Page and BrowserContext, so that client can saveAs it
64
+ // after closing the context. We use |scope| for it.
65
+ const artifactDispatcher = _artifactDispatcher.ArtifactDispatcher.from(parentScope, artifact);
66
+ this._dispatchEvent('video', {
67
+ artifact: artifactDispatcher
68
+ });
69
+ };
70
+ this.addObjectListener(_browserContext.BrowserContext.Events.VideoStarted, onVideo);
71
+ for (const video of context._browser._idToVideo.values()) {
72
+ if (video.context === context) onVideo(video.artifact);
73
+ }
74
+ for (const page of context.pages()) this._dispatchEvent('page', {
75
+ page: _pageDispatcher.PageDispatcher.from(this, page)
76
+ });
77
+ this.addObjectListener(_browserContext.BrowserContext.Events.Page, page => {
78
+ this._dispatchEvent('page', {
79
+ page: _pageDispatcher.PageDispatcher.from(this, page)
80
+ });
81
+ });
82
+ this.addObjectListener(_browserContext.BrowserContext.Events.Close, () => {
83
+ this._dispatchEvent('close');
84
+ this._dispose();
85
+ });
86
+ this.addObjectListener(_browserContext.BrowserContext.Events.PageError, (error, page) => {
87
+ this._dispatchEvent('pageError', {
88
+ error: (0, _errors.serializeError)(error),
89
+ page: _pageDispatcher.PageDispatcher.from(this, page)
90
+ });
91
+ });
92
+ this.addObjectListener(_browserContext.BrowserContext.Events.Console, message => {
93
+ if (this._shouldDispatchEvent(message.page(), 'console')) {
94
+ const pageDispatcher = _pageDispatcher.PageDispatcher.from(this, message.page());
95
+ this._dispatchEvent('console', {
96
+ page: pageDispatcher,
97
+ type: message.type(),
98
+ text: message.text(),
99
+ args: message.args().map(a => _elementHandlerDispatcher.ElementHandleDispatcher.fromJSHandle(pageDispatcher, a)),
100
+ location: message.location()
101
+ });
102
+ }
103
+ });
104
+ this.addObjectListener(_browserContext.BrowserContext.Events.Dialog, dialog => {
105
+ if (this._shouldDispatchEvent(dialog.page(), 'dialog')) this._dispatchEvent('dialog', {
106
+ dialog: new _dialogDispatcher.DialogDispatcher(this, dialog)
107
+ });else dialog.close().catch(() => {});
108
+ });
109
+ if (context._browser.options.name === 'chromium') {
110
+ for (const page of context.backgroundPages()) this._dispatchEvent('backgroundPage', {
111
+ page: _pageDispatcher.PageDispatcher.from(this, page)
112
+ });
113
+ this.addObjectListener(_crBrowser.CRBrowserContext.CREvents.BackgroundPage, page => this._dispatchEvent('backgroundPage', {
114
+ page: _pageDispatcher.PageDispatcher.from(this, page)
115
+ }));
116
+ for (const serviceWorker of context.serviceWorkers()) this._dispatchEvent('serviceWorker', {
117
+ worker: new _pageDispatcher.WorkerDispatcher(this, serviceWorker)
118
+ });
119
+ this.addObjectListener(_crBrowser.CRBrowserContext.CREvents.ServiceWorker, serviceWorker => this._dispatchEvent('serviceWorker', {
120
+ worker: new _pageDispatcher.WorkerDispatcher(this, serviceWorker)
121
+ }));
122
+ }
123
+ this.addObjectListener(_browserContext.BrowserContext.Events.Request, request => {
124
+ var _request$frame;
125
+ // Create dispatcher, if:
126
+ // - There are listeners to the requests.
127
+ // - We are redirected from a reported request so that redirectedTo was updated on client.
128
+ // - We are a navigation request and dispatcher will be reported as a part of the goto return value and newDocument param anyways.
129
+ // By the time requestFinished is triggered to update the request, we should have a request on the client already.
130
+ const redirectFromDispatcher = request.redirectedFrom() && (0, _dispatcher.existingDispatcher)(request.redirectedFrom());
131
+ if (!redirectFromDispatcher && !this._shouldDispatchNetworkEvent(request, 'request') && !request.isNavigationRequest()) return;
132
+ const requestDispatcher = _networkDispatchers.RequestDispatcher.from(this, request);
133
+ this._dispatchEvent('request', {
134
+ request: requestDispatcher,
135
+ page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame = request.frame()) === null || _request$frame === void 0 ? void 0 : _request$frame._page.initializedOrUndefined())
136
+ });
137
+ });
138
+ this.addObjectListener(_browserContext.BrowserContext.Events.Response, response => {
139
+ var _response$frame;
140
+ const requestDispatcher = (0, _dispatcher.existingDispatcher)(response.request());
141
+ if (!requestDispatcher && !this._shouldDispatchNetworkEvent(response.request(), 'response')) return;
142
+ this._dispatchEvent('response', {
143
+ response: _networkDispatchers.ResponseDispatcher.from(this, response),
144
+ page: _pageDispatcher.PageDispatcher.fromNullable(this, (_response$frame = response.frame()) === null || _response$frame === void 0 ? void 0 : _response$frame._page.initializedOrUndefined())
145
+ });
146
+ });
147
+ this.addObjectListener(_browserContext.BrowserContext.Events.RequestFailed, request => {
148
+ var _request$frame2;
149
+ const requestDispatcher = (0, _dispatcher.existingDispatcher)(request);
150
+ if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFailed')) return;
151
+ this._dispatchEvent('requestFailed', {
152
+ request: _networkDispatchers.RequestDispatcher.from(this, request),
153
+ failureText: request._failureText || undefined,
154
+ responseEndTiming: request._responseEndTiming,
155
+ page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame2 = request.frame()) === null || _request$frame2 === void 0 ? void 0 : _request$frame2._page.initializedOrUndefined())
156
+ });
157
+ });
158
+ this.addObjectListener(_browserContext.BrowserContext.Events.RequestFinished, ({
159
+ request,
160
+ response
161
+ }) => {
162
+ var _request$frame3;
163
+ const requestDispatcher = (0, _dispatcher.existingDispatcher)(request);
164
+ if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFinished')) return;
165
+ this._dispatchEvent('requestFinished', {
166
+ request: _networkDispatchers.RequestDispatcher.from(this, request),
167
+ response: _networkDispatchers.ResponseDispatcher.fromNullable(this, response),
168
+ responseEndTiming: request._responseEndTiming,
169
+ page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame3 = request.frame()) === null || _request$frame3 === void 0 ? void 0 : _request$frame3._page.initializedOrUndefined())
170
+ });
171
+ });
172
+ }
173
+ _shouldDispatchNetworkEvent(request, event) {
174
+ var _request$frame4;
175
+ return this._shouldDispatchEvent((_request$frame4 = request.frame()) === null || _request$frame4 === void 0 || (_request$frame4 = _request$frame4._page) === null || _request$frame4 === void 0 ? void 0 : _request$frame4.initializedOrUndefined(), event);
176
+ }
177
+ _shouldDispatchEvent(page, event) {
178
+ if (this._subscriptions.has(event)) return true;
179
+ const pageDispatcher = page ? (0, _dispatcher.existingDispatcher)(page) : undefined;
180
+ if (pageDispatcher !== null && pageDispatcher !== void 0 && pageDispatcher._subscriptions.has(event)) return true;
181
+ return false;
182
+ }
183
+ async createTempFile(params) {
184
+ const dir = this._context._browser.options.artifactsDir;
185
+ const tmpDir = path.join(dir, 'upload-' + (0, _utils.createGuid)());
186
+ await fs.promises.mkdir(tmpDir);
187
+ this._context._tempDirs.push(tmpDir);
188
+ const file = fs.createWriteStream(path.join(tmpDir, params.name));
189
+ return {
190
+ writableStream: new _writableStreamDispatcher.WritableStreamDispatcher(this, file, params.lastModifiedMs)
191
+ };
192
+ }
193
+ async setDefaultNavigationTimeoutNoReply(params) {
194
+ this._context.setDefaultNavigationTimeout(params.timeout);
195
+ }
196
+ async setDefaultTimeoutNoReply(params) {
197
+ this._context.setDefaultTimeout(params.timeout);
198
+ }
199
+ async exposeBinding(params) {
200
+ await this._context.exposeBinding(params.name, !!params.needsHandle, (source, ...args) => {
201
+ // When reusing the context, we might have some bindings called late enough,
202
+ // after context and page dispatchers have been disposed.
203
+ if (this._disposed) return;
204
+ const pageDispatcher = _pageDispatcher.PageDispatcher.from(this, source.page);
205
+ const binding = new _pageDispatcher.BindingCallDispatcher(pageDispatcher, params.name, !!params.needsHandle, source, args);
206
+ this._dispatchEvent('bindingCall', {
207
+ binding
208
+ });
209
+ return binding.promise();
210
+ });
211
+ }
212
+ async newPage(params, metadata) {
213
+ return {
214
+ page: _pageDispatcher.PageDispatcher.from(this, await this._context.newPage(metadata))
215
+ };
216
+ }
217
+ async cookies(params) {
218
+ return {
219
+ cookies: await this._context.cookies(params.urls)
220
+ };
221
+ }
222
+ async addCookies(params) {
223
+ await this._context.addCookies(params.cookies);
224
+ }
225
+ async clearCookies() {
226
+ await this._context.clearCookies();
227
+ }
228
+ async grantPermissions(params) {
229
+ await this._context.grantPermissions(params.permissions, params.origin);
230
+ }
231
+ async clearPermissions() {
232
+ await this._context.clearPermissions();
233
+ }
234
+ async setGeolocation(params) {
235
+ await this._context.setGeolocation(params.geolocation);
236
+ }
237
+ async setExtraHTTPHeaders(params) {
238
+ await this._context.setExtraHTTPHeaders(params.headers);
239
+ }
240
+ async setOffline(params) {
241
+ await this._context.setOffline(params.offline);
242
+ }
243
+ async setHTTPCredentials(params) {
244
+ await this._context.setHTTPCredentials(params.httpCredentials);
245
+ }
246
+ async addInitScript(params) {
247
+ await this._context.addInitScript(params.source);
248
+ }
249
+ async setNetworkInterceptionPatterns(params) {
250
+ if (!params.patterns.length) {
251
+ await this._context.setRequestInterceptor(undefined);
252
+ return;
253
+ }
254
+ const urlMatchers = params.patterns.map(pattern => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob);
255
+ await this._context.setRequestInterceptor((route, request) => {
256
+ const matchesSome = urlMatchers.some(urlMatch => (0, _utils.urlMatches)(this._context._options.baseURL, request.url(), urlMatch));
257
+ if (!matchesSome) return false;
258
+ this._dispatchEvent('route', {
259
+ route: _networkDispatchers.RouteDispatcher.from(_networkDispatchers.RequestDispatcher.from(this, request), route)
260
+ });
261
+ return true;
262
+ });
263
+ }
264
+ async storageState(params, metadata) {
265
+ return await this._context.storageState();
266
+ }
267
+ async close(params, metadata) {
268
+ metadata.potentiallyClosesScope = true;
269
+ await this._context.close(params);
270
+ }
271
+ async recorderSupplementEnable(params) {
272
+ await _recorder.Recorder.show(this._context, params);
273
+ }
274
+ async pause(params, metadata) {
275
+ // Debugger will take care of this.
276
+ }
277
+ async newCDPSession(params) {
278
+ if (!this._object._browser.options.isChromium) throw new Error(`CDP session is only available in Chromium`);
279
+ if (!params.page && !params.frame || params.page && params.frame) throw new Error(`CDP session must be initiated with either Page or Frame, not none or both`);
280
+ const crBrowserContext = this._object;
281
+ return {
282
+ session: new _cdpSessionDispatcher.CDPSessionDispatcher(this, await crBrowserContext.newCDPSession((params.page ? params.page : params.frame)._object))
283
+ };
284
+ }
285
+ async harStart(params) {
286
+ const harId = await this._context._harStart(params.page ? params.page._object : null, params.options);
287
+ return {
288
+ harId
289
+ };
290
+ }
291
+ async harExport(params) {
292
+ const artifact = await this._context._harExport(params.harId);
293
+ if (!artifact) throw new Error('No HAR artifact. Ensure record.harPath is set.');
294
+ return {
295
+ artifact: _artifactDispatcher.ArtifactDispatcher.from(this, artifact)
296
+ };
297
+ }
298
+ async updateSubscription(params) {
299
+ if (params.enabled) this._subscriptions.add(params.event);else this._subscriptions.delete(params.event);
300
+ }
301
+ _onDispose() {
302
+ // Avoid protocol calls for the closed context.
303
+ if (!this._context.isClosingOrClosed()) this._context.setRequestInterceptor(undefined).catch(() => {});
304
+ }
305
+ }
306
+ exports.BrowserContextDispatcher = BrowserContextDispatcher;