patchright-core 1.51.3 → 1.52.1

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