patchright-core 1.48.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/README.md +3 -0
  2. package/ThirdPartyNotices.txt +1548 -0
  3. package/bin/PrintDeps.exe +0 -0
  4. package/bin/README.md +2 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  7. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  8. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  9. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  10. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  11. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  12. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  13. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  14. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  15. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  16. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  17. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  18. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  19. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  20. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  21. package/browsers.json +57 -0
  22. package/cli.js +18 -0
  23. package/index.d.ts +17 -0
  24. package/index.js +33 -0
  25. package/index.mjs +28 -0
  26. package/lib/androidServerImpl.js +69 -0
  27. package/lib/browserServerImpl.js +92 -0
  28. package/lib/cli/driver.js +95 -0
  29. package/lib/cli/program.js +589 -0
  30. package/lib/cli/programWithTestStub.js +67 -0
  31. package/lib/client/accessibility.js +50 -0
  32. package/lib/client/android.js +473 -0
  33. package/lib/client/api.js +285 -0
  34. package/lib/client/artifact.js +79 -0
  35. package/lib/client/browser.js +145 -0
  36. package/lib/client/browserContext.js +583 -0
  37. package/lib/client/browserType.js +241 -0
  38. package/lib/client/cdpSession.js +53 -0
  39. package/lib/client/channelOwner.js +235 -0
  40. package/lib/client/clientHelper.js +57 -0
  41. package/lib/client/clientInstrumentation.js +50 -0
  42. package/lib/client/clock.js +69 -0
  43. package/lib/client/connection.js +333 -0
  44. package/lib/client/consoleMessage.js +55 -0
  45. package/lib/client/coverage.js +41 -0
  46. package/lib/client/dialog.js +57 -0
  47. package/lib/client/download.js +62 -0
  48. package/lib/client/electron.js +135 -0
  49. package/lib/client/elementHandle.js +321 -0
  50. package/lib/client/errors.js +77 -0
  51. package/lib/client/eventEmitter.js +314 -0
  52. package/lib/client/events.js +94 -0
  53. package/lib/client/fetch.js +391 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +504 -0
  56. package/lib/client/harRouter.js +99 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +121 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +36 -0
  61. package/lib/client/locator.js +441 -0
  62. package/lib/client/network.js +762 -0
  63. package/lib/client/page.js +770 -0
  64. package/lib/client/playwright.js +80 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +134 -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/clockSource.js +7 -0
  78. package/lib/generated/consoleApiSource.js +7 -0
  79. package/lib/generated/injectedScriptSource.js +7 -0
  80. package/lib/generated/pollingRecorderSource.js +7 -0
  81. package/lib/generated/utilityScriptSource.js +7 -0
  82. package/lib/generated/webSocketMockSource.js +7 -0
  83. package/lib/image_tools/colorUtils.js +98 -0
  84. package/lib/image_tools/compare.js +108 -0
  85. package/lib/image_tools/imageChannel.js +70 -0
  86. package/lib/image_tools/stats.js +102 -0
  87. package/lib/inProcessFactory.js +54 -0
  88. package/lib/inprocess.js +20 -0
  89. package/lib/outofprocess.js +67 -0
  90. package/lib/protocol/debug.js +27 -0
  91. package/lib/protocol/serializers.js +173 -0
  92. package/lib/protocol/transport.js +82 -0
  93. package/lib/protocol/validator.js +2760 -0
  94. package/lib/protocol/validatorPrimitives.js +139 -0
  95. package/lib/remote/playwrightConnection.js +274 -0
  96. package/lib/remote/playwrightServer.js +110 -0
  97. package/lib/server/accessibility.js +62 -0
  98. package/lib/server/android/android.js +441 -0
  99. package/lib/server/android/backendAdb.js +172 -0
  100. package/lib/server/artifact.js +104 -0
  101. package/lib/server/bidi/bidiBrowser.js +311 -0
  102. package/lib/server/bidi/bidiChromium.js +124 -0
  103. package/lib/server/bidi/bidiConnection.js +206 -0
  104. package/lib/server/bidi/bidiExecutionContext.js +159 -0
  105. package/lib/server/bidi/bidiFirefox.js +104 -0
  106. package/lib/server/bidi/bidiInput.js +158 -0
  107. package/lib/server/bidi/bidiNetworkManager.js +338 -0
  108. package/lib/server/bidi/bidiOverCdp.js +103 -0
  109. package/lib/server/bidi/bidiPage.js +529 -0
  110. package/lib/server/bidi/bidiPdf.js +140 -0
  111. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  112. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  113. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  114. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  115. package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
  116. package/lib/server/browser.js +148 -0
  117. package/lib/server/browserContext.js +666 -0
  118. package/lib/server/browserType.js +335 -0
  119. package/lib/server/chromium/appIcon.png +0 -0
  120. package/lib/server/chromium/chromium.js +350 -0
  121. package/lib/server/chromium/chromiumSwitches.js +36 -0
  122. package/lib/server/chromium/crAccessibility.js +237 -0
  123. package/lib/server/chromium/crBrowser.js +522 -0
  124. package/lib/server/chromium/crConnection.js +228 -0
  125. package/lib/server/chromium/crCoverage.js +246 -0
  126. package/lib/server/chromium/crDevTools.js +104 -0
  127. package/lib/server/chromium/crDragDrop.js +143 -0
  128. package/lib/server/chromium/crExecutionContext.js +149 -0
  129. package/lib/server/chromium/crInput.js +171 -0
  130. package/lib/server/chromium/crNetworkManager.js +809 -0
  131. package/lib/server/chromium/crPage.js +1235 -0
  132. package/lib/server/chromium/crPdf.js +153 -0
  133. package/lib/server/chromium/crProtocolHelper.js +133 -0
  134. package/lib/server/chromium/crServiceWorker.js +111 -0
  135. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  136. package/lib/server/chromium/videoRecorder.js +155 -0
  137. package/lib/server/clock.js +133 -0
  138. package/lib/server/codegen/csharp.js +299 -0
  139. package/lib/server/codegen/java.js +235 -0
  140. package/lib/server/codegen/javascript.js +223 -0
  141. package/lib/server/codegen/jsonl.js +47 -0
  142. package/lib/server/codegen/language.js +88 -0
  143. package/lib/server/codegen/languages.js +30 -0
  144. package/lib/server/codegen/python.js +265 -0
  145. package/lib/server/codegen/types.js +5 -0
  146. package/lib/server/console.js +57 -0
  147. package/lib/server/cookieStore.js +185 -0
  148. package/lib/server/debugController.js +234 -0
  149. package/lib/server/debugger.js +132 -0
  150. package/lib/server/deviceDescriptors.js +26 -0
  151. package/lib/server/deviceDescriptorsSource.json +1669 -0
  152. package/lib/server/dialog.js +71 -0
  153. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  154. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  155. package/lib/server/dispatchers/browserContextDispatcher.js +368 -0
  156. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  157. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  158. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  159. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  160. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  161. package/lib/server/dispatchers/dispatcher.js +395 -0
  162. package/lib/server/dispatchers/electronDispatcher.js +93 -0
  163. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  164. package/lib/server/dispatchers/frameDispatcher.js +286 -0
  165. package/lib/server/dispatchers/jsHandleDispatcher.js +97 -0
  166. package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  167. package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  168. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  169. package/lib/server/dispatchers/pageDispatcher.js +367 -0
  170. package/lib/server/dispatchers/playwrightDispatcher.js +107 -0
  171. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  172. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  173. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  174. package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
  175. package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  176. package/lib/server/dom.js +845 -0
  177. package/lib/server/download.js +60 -0
  178. package/lib/server/electron/electron.js +296 -0
  179. package/lib/server/electron/loader.js +57 -0
  180. package/lib/server/errors.js +68 -0
  181. package/lib/server/fetch.js +656 -0
  182. package/lib/server/fileChooser.js +42 -0
  183. package/lib/server/fileUploadUtils.js +75 -0
  184. package/lib/server/firefox/ffAccessibility.js +216 -0
  185. package/lib/server/firefox/ffBrowser.js +460 -0
  186. package/lib/server/firefox/ffConnection.js +168 -0
  187. package/lib/server/firefox/ffExecutionContext.js +135 -0
  188. package/lib/server/firefox/ffInput.js +150 -0
  189. package/lib/server/firefox/ffNetworkManager.js +233 -0
  190. package/lib/server/firefox/ffPage.js +559 -0
  191. package/lib/server/firefox/firefox.js +99 -0
  192. package/lib/server/formData.js +75 -0
  193. package/lib/server/frameSelectors.js +171 -0
  194. package/lib/server/frames.js +1808 -0
  195. package/lib/server/har/harRecorder.js +139 -0
  196. package/lib/server/har/harTracer.js +542 -0
  197. package/lib/server/helper.js +103 -0
  198. package/lib/server/index.js +114 -0
  199. package/lib/server/input.js +310 -0
  200. package/lib/server/instrumentation.js +70 -0
  201. package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  202. package/lib/server/javascript.js +299 -0
  203. package/lib/server/launchApp.js +91 -0
  204. package/lib/server/macEditingCommands.js +139 -0
  205. package/lib/server/network.js +617 -0
  206. package/lib/server/page.js +819 -0
  207. package/lib/server/pipeTransport.js +85 -0
  208. package/lib/server/playwright.js +88 -0
  209. package/lib/server/progress.js +102 -0
  210. package/lib/server/protocolError.js +49 -0
  211. package/lib/server/recorder/contextRecorder.js +299 -0
  212. package/lib/server/recorder/recorderApp.js +196 -0
  213. package/lib/server/recorder/recorderCollection.js +116 -0
  214. package/lib/server/recorder/recorderFrontend.js +5 -0
  215. package/lib/server/recorder/recorderInTraceViewer.js +144 -0
  216. package/lib/server/recorder/recorderRunner.js +155 -0
  217. package/lib/server/recorder/recorderUtils.js +112 -0
  218. package/lib/server/recorder/throttledFile.js +46 -0
  219. package/lib/server/recorder.js +329 -0
  220. package/lib/server/registry/browserFetcher.js +168 -0
  221. package/lib/server/registry/dependencies.js +322 -0
  222. package/lib/server/registry/index.js +1005 -0
  223. package/lib/server/registry/nativeDeps.js +490 -0
  224. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  225. package/lib/server/screenshotter.js +348 -0
  226. package/lib/server/selectors.js +73 -0
  227. package/lib/server/socksClientCertificatesInterceptor.js +340 -0
  228. package/lib/server/socksInterceptor.js +100 -0
  229. package/lib/server/trace/recorder/snapshotter.js +172 -0
  230. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  231. package/lib/server/trace/recorder/tracing.js +542 -0
  232. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  233. package/lib/server/trace/viewer/traceViewer.js +213 -0
  234. package/lib/server/transport.js +191 -0
  235. package/lib/server/types.js +24 -0
  236. package/lib/server/usKeyboardLayout.js +555 -0
  237. package/lib/server/webkit/webkit.js +87 -0
  238. package/lib/server/webkit/wkAccessibility.js +194 -0
  239. package/lib/server/webkit/wkBrowser.js +329 -0
  240. package/lib/server/webkit/wkConnection.js +173 -0
  241. package/lib/server/webkit/wkExecutionContext.js +143 -0
  242. package/lib/server/webkit/wkInput.js +169 -0
  243. package/lib/server/webkit/wkInterceptableRequest.js +162 -0
  244. package/lib/server/webkit/wkPage.js +1219 -0
  245. package/lib/server/webkit/wkProvisionalPage.js +94 -0
  246. package/lib/server/webkit/wkWorkers.js +104 -0
  247. package/lib/third_party/diff_match_patch.js +2222 -0
  248. package/lib/third_party/pixelmatch.js +255 -0
  249. package/lib/utils/ascii.js +31 -0
  250. package/lib/utils/comparators.js +171 -0
  251. package/lib/utils/crypto.js +174 -0
  252. package/lib/utils/debug.js +46 -0
  253. package/lib/utils/debugLogger.js +91 -0
  254. package/lib/utils/env.js +49 -0
  255. package/lib/utils/eventsHelper.js +38 -0
  256. package/lib/utils/expectUtils.js +33 -0
  257. package/lib/utils/fileUtils.js +205 -0
  258. package/lib/utils/happy-eyeballs.js +194 -0
  259. package/lib/utils/headers.js +52 -0
  260. package/lib/utils/hostPlatform.js +133 -0
  261. package/lib/utils/httpServer.js +237 -0
  262. package/lib/utils/index.js +368 -0
  263. package/lib/utils/isomorphic/cssParser.js +250 -0
  264. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  265. package/lib/utils/isomorphic/locatorGenerators.js +642 -0
  266. package/lib/utils/isomorphic/locatorParser.js +179 -0
  267. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  268. package/lib/utils/isomorphic/mimeType.js +29 -0
  269. package/lib/utils/isomorphic/recorderUtils.js +195 -0
  270. package/lib/utils/isomorphic/selectorParser.js +397 -0
  271. package/lib/utils/isomorphic/stringUtils.js +139 -0
  272. package/lib/utils/isomorphic/traceUtils.js +39 -0
  273. package/lib/utils/isomorphic/urlMatch.js +120 -0
  274. package/lib/utils/linuxUtils.js +78 -0
  275. package/lib/utils/manualPromise.js +109 -0
  276. package/lib/utils/multimap.js +75 -0
  277. package/lib/utils/network.js +160 -0
  278. package/lib/utils/processLauncher.js +248 -0
  279. package/lib/utils/profiler.js +53 -0
  280. package/lib/utils/rtti.js +44 -0
  281. package/lib/utils/semaphore.js +51 -0
  282. package/lib/utils/spawnAsync.js +45 -0
  283. package/lib/utils/stackTrace.js +121 -0
  284. package/lib/utils/task.js +58 -0
  285. package/lib/utils/time.js +37 -0
  286. package/lib/utils/timeoutRunner.js +66 -0
  287. package/lib/utils/traceUtils.js +44 -0
  288. package/lib/utils/userAgent.js +105 -0
  289. package/lib/utils/wsServer.js +127 -0
  290. package/lib/utils/zipFile.js +75 -0
  291. package/lib/utils/zones.js +62 -0
  292. package/lib/utilsBundle.js +82 -0
  293. package/lib/utilsBundleImpl/index.js +53 -0
  294. package/lib/utilsBundleImpl/xdg-open +1066 -0
  295. package/lib/vite/htmlReport/index.html +66 -0
  296. package/lib/vite/recorder/assets/codeMirrorModule-baozm8ur.js +24 -0
  297. package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  298. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  299. package/lib/vite/recorder/assets/index-2ElAIWFB.js +42 -0
  300. package/lib/vite/recorder/assets/index-BW-aOBcL.css +1 -0
  301. package/lib/vite/recorder/index.html +29 -0
  302. package/lib/vite/recorder/playwright-logo.svg +9 -0
  303. package/lib/vite/traceViewer/assets/codeMirrorModule-Bh1rfd2w.js +24 -0
  304. package/lib/vite/traceViewer/assets/inspectorTab-7GHnKvSD.js +64 -0
  305. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  306. package/lib/vite/traceViewer/assets/workbench-DPQnTHYP.js +9 -0
  307. package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  308. package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  309. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  310. package/lib/vite/traceViewer/embedded.BlHoW5LY.js +2 -0
  311. package/lib/vite/traceViewer/embedded.html +18 -0
  312. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  313. package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  314. package/lib/vite/traceViewer/index.DaWVfou1.js +2 -0
  315. package/lib/vite/traceViewer/index.html +29 -0
  316. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +1 -0
  317. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  318. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  319. package/lib/vite/traceViewer/recorder.C4zxcvd2.js +2 -0
  320. package/lib/vite/traceViewer/recorder.html +17 -0
  321. package/lib/vite/traceViewer/snapshot.html +21 -0
  322. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  323. package/lib/vite/traceViewer/uiMode.CAYqod-m.css +1 -0
  324. package/lib/vite/traceViewer/uiMode.html +20 -0
  325. package/lib/vite/traceViewer/uiMode.mTXWniJb.js +5 -0
  326. package/lib/vite/traceViewer/workbench.D3JVcA9K.css +1 -0
  327. package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  328. package/lib/zipBundle.js +25 -0
  329. package/lib/zipBundleImpl.js +5 -0
  330. package/package.json +44 -0
  331. package/types/protocol.d.ts +21571 -0
  332. package/types/structs.d.ts +45 -0
  333. package/types/types.d.ts +22519 -0
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.kNoXServerRunningError = exports.BrowserType = exports.BrowserReadyState = void 0;
7
+ var _fs = _interopRequireDefault(require("fs"));
8
+ var os = _interopRequireWildcard(require("os"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _browserContext = require("./browserContext");
11
+ var _registry = require("./registry");
12
+ var _transport = require("./transport");
13
+ var _processLauncher = require("../utils/processLauncher");
14
+ var _pipeTransport = require("./pipeTransport");
15
+ var _progress = require("./progress");
16
+ var _timeoutSettings = require("../common/timeoutSettings");
17
+ var _utils = require("../utils");
18
+ var _fileUtils = require("../utils/fileUtils");
19
+ var _helper = require("./helper");
20
+ var _debugLogger = require("../utils/debugLogger");
21
+ var _instrumentation = require("./instrumentation");
22
+ var _protocolError = require("./protocolError");
23
+ var _socksClientCertificatesInterceptor = require("./socksClientCertificatesInterceptor");
24
+ 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); }
25
+ 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; }
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+ /**
28
+ * Copyright (c) Microsoft Corporation.
29
+ *
30
+ * Licensed under the Apache License, Version 2.0 (the "License");
31
+ * you may not use this file except in compliance with the License.
32
+ * You may obtain a copy of the License at
33
+ *
34
+ * http://www.apache.org/licenses/LICENSE-2.0
35
+ *
36
+ * Unless required by applicable law or agreed to in writing, software
37
+ * distributed under the License is distributed on an "AS IS" BASIS,
38
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39
+ * See the License for the specific language governing permissions and
40
+ * limitations under the License.
41
+ */
42
+
43
+ const kNoXServerRunningError = exports.kNoXServerRunningError = 'Looks like you launched a headed browser without having a XServer running.\n' + 'Set either \'headless: true\' or use \'xvfb-run <your-playwright-app>\' before running Playwright.\n\n<3 Playwright Team';
44
+ class BrowserReadyState {
45
+ constructor() {
46
+ this._wsEndpoint = new _utils.ManualPromise();
47
+ }
48
+ onBrowserExit() {
49
+ // Unblock launch when browser prematurely exits.
50
+ this._wsEndpoint.resolve(undefined);
51
+ }
52
+ async waitUntilReady() {
53
+ const wsEndpoint = await this._wsEndpoint;
54
+ return {
55
+ wsEndpoint
56
+ };
57
+ }
58
+ }
59
+ exports.BrowserReadyState = BrowserReadyState;
60
+ class BrowserType extends _instrumentation.SdkObject {
61
+ constructor(parent, browserName) {
62
+ super(parent, 'browser-type');
63
+ this._name = void 0;
64
+ this._useBidi = false;
65
+ this.attribution.browserType = this;
66
+ this._name = browserName;
67
+ }
68
+ executablePath() {
69
+ return _registry.registry.findExecutable(this._name).executablePath(this.attribution.playwright.options.sdkLanguage) || '';
70
+ }
71
+ name() {
72
+ return this._name;
73
+ }
74
+ async launch(metadata, options, protocolLogger) {
75
+ options = this._validateLaunchOptions(options);
76
+ if (this._useBidi) options.useWebSocket = true;
77
+ const controller = new _progress.ProgressController(metadata, this);
78
+ controller.setLogName('browser');
79
+ const browser = await controller.run(progress => {
80
+ const seleniumHubUrl = options.__testHookSeleniumRemoteURL || process.env.SELENIUM_REMOTE_URL;
81
+ if (seleniumHubUrl) return this._launchWithSeleniumHub(progress, seleniumHubUrl, options);
82
+ return this._innerLaunchWithRetries(progress, options, undefined, _helper.helper.debugProtocolLogger(protocolLogger)).catch(e => {
83
+ throw this._rewriteStartupLog(e);
84
+ });
85
+ }, _timeoutSettings.TimeoutSettings.launchTimeout(options));
86
+ return browser;
87
+ }
88
+ async launchPersistentContext(metadata, userDataDir, options) {
89
+ const launchOptions = this._validateLaunchOptions(options);
90
+ if (this._useBidi) launchOptions.useWebSocket = true;
91
+ const controller = new _progress.ProgressController(metadata, this);
92
+ controller.setLogName('browser');
93
+ const browser = await controller.run(async progress => {
94
+ var _options$clientCertif;
95
+ // Note: Any initial TLS requests will fail since we rely on the Page/Frames initialize which sets ignoreHTTPSErrors.
96
+ let clientCertificatesProxy;
97
+ if ((_options$clientCertif = options.clientCertificates) !== null && _options$clientCertif !== void 0 && _options$clientCertif.length) {
98
+ var _clientCertificatesPr;
99
+ clientCertificatesProxy = new _socksClientCertificatesInterceptor.ClientCertificatesProxy(options);
100
+ launchOptions.proxyOverride = await ((_clientCertificatesPr = clientCertificatesProxy) === null || _clientCertificatesPr === void 0 ? void 0 : _clientCertificatesPr.listen());
101
+ options = {
102
+ ...options
103
+ };
104
+ options.internalIgnoreHTTPSErrors = true;
105
+ }
106
+ progress.cleanupWhenAborted(() => {
107
+ var _clientCertificatesPr2;
108
+ return (_clientCertificatesPr2 = clientCertificatesProxy) === null || _clientCertificatesPr2 === void 0 ? void 0 : _clientCertificatesPr2.close();
109
+ });
110
+ const browser = await this._innerLaunchWithRetries(progress, launchOptions, options, _helper.helper.debugProtocolLogger(), userDataDir).catch(e => {
111
+ throw this._rewriteStartupLog(e);
112
+ });
113
+ browser._defaultContext._clientCertificatesProxy = clientCertificatesProxy;
114
+ return browser;
115
+ }, _timeoutSettings.TimeoutSettings.launchTimeout(launchOptions));
116
+ return browser._defaultContext;
117
+ }
118
+ async _innerLaunchWithRetries(progress, options, persistent, protocolLogger, userDataDir) {
119
+ try {
120
+ return await this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);
121
+ } catch (error) {
122
+ // @see https://github.com/microsoft/playwright/issues/5214
123
+ const errorMessage = typeof error === 'object' && typeof error.message === 'string' ? error.message : '';
124
+ if (errorMessage.includes('Inconsistency detected by ld.so')) {
125
+ progress.log(`<restarting browser due to hitting race condition in glibc>`);
126
+ return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ async _innerLaunch(progress, options, persistent, protocolLogger, maybeUserDataDir) {
132
+ options.proxy = options.proxy ? (0, _browserContext.normalizeProxySettings)(options.proxy) : undefined;
133
+ const browserLogsCollector = new _debugLogger.RecentLogsCollector();
134
+ const {
135
+ browserProcess,
136
+ userDataDir,
137
+ artifactsDir,
138
+ transport
139
+ } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, maybeUserDataDir);
140
+ if (options.__testHookBeforeCreateBrowser) await options.__testHookBeforeCreateBrowser();
141
+ const browserOptions = {
142
+ name: this._name,
143
+ isChromium: this._name === 'chromium',
144
+ channel: options.channel,
145
+ slowMo: options.slowMo,
146
+ persistent,
147
+ headful: !options.headless,
148
+ artifactsDir,
149
+ downloadsPath: options.downloadsPath || artifactsDir,
150
+ tracesDir: options.tracesDir || artifactsDir,
151
+ browserProcess,
152
+ customExecutablePath: options.executablePath,
153
+ proxy: options.proxy,
154
+ protocolLogger,
155
+ browserLogsCollector,
156
+ wsEndpoint: options.useWebSocket ? transport.wsEndpoint : undefined,
157
+ originalLaunchOptions: options
158
+ };
159
+ if (persistent) (0, _browserContext.validateBrowserContextOptions)(persistent, browserOptions);
160
+ copyTestHooks(options, browserOptions);
161
+ const browser = await this.connectToTransport(transport, browserOptions);
162
+ browser._userDataDirForTest = userDataDir;
163
+ // We assume no control when using custom arguments, and do not prepare the default context in that case.
164
+ if (persistent && !options.ignoreAllDefaultArgs) await browser._defaultContext._loadDefaultContext(progress);
165
+ return browser;
166
+ }
167
+ async _launchProcess(progress, options, isPersistent, browserLogsCollector, userDataDir) {
168
+ var _await$readyState$wai;
169
+ const {
170
+ ignoreDefaultArgs,
171
+ ignoreAllDefaultArgs,
172
+ args = [],
173
+ executablePath = null,
174
+ handleSIGINT = true,
175
+ handleSIGTERM = true,
176
+ handleSIGHUP = true
177
+ } = options;
178
+ const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env;
179
+ await this._createArtifactDirs(options);
180
+ const tempDirectories = [];
181
+ const artifactsDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), 'playwright-artifacts-'));
182
+ tempDirectories.push(artifactsDir);
183
+ if (userDataDir) {
184
+ // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here.
185
+ if (!(await (0, _fileUtils.existsAsync)(userDataDir))) await _fs.default.promises.mkdir(userDataDir, {
186
+ recursive: true,
187
+ mode: 0o700
188
+ });
189
+ } else {
190
+ userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), `playwright_${this._name}dev_profile-`));
191
+ tempDirectories.push(userDataDir);
192
+ }
193
+ await this.prepareUserDataDir(options, userDataDir);
194
+ const browserArguments = [];
195
+ if (ignoreAllDefaultArgs) browserArguments.push(...args);else if (ignoreDefaultArgs) browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));else browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));
196
+ let executable;
197
+ if (executablePath) {
198
+ if (!(await (0, _fileUtils.existsAsync)(executablePath))) throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);
199
+ executable = executablePath;
200
+ } else {
201
+ const registryExecutable = _registry.registry.findExecutable(options.channel || this._name);
202
+ if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
203
+ executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);
204
+ await _registry.registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
205
+ }
206
+ const readyState = this.readyState(options);
207
+ // Note: it is important to define these variables before launchProcess, so that we don't get
208
+ // "Cannot access 'browserServer' before initialization" if something went wrong.
209
+ let transport = undefined;
210
+ let browserProcess = undefined;
211
+ const {
212
+ launchedProcess,
213
+ gracefullyClose,
214
+ kill
215
+ } = await (0, _processLauncher.launchProcess)({
216
+ command: executable,
217
+ args: browserArguments,
218
+ env: this.amendEnvironment(env, userDataDir, executable, browserArguments),
219
+ handleSIGINT,
220
+ handleSIGTERM,
221
+ handleSIGHUP,
222
+ log: message => {
223
+ readyState === null || readyState === void 0 || readyState.onBrowserOutput(message);
224
+ progress.log(message);
225
+ browserLogsCollector.log(message);
226
+ },
227
+ stdio: 'pipe',
228
+ tempDirectories,
229
+ attemptToGracefullyClose: async () => {
230
+ if (options.__testHookGracefullyClose) await options.__testHookGracefullyClose();
231
+ // We try to gracefully close to prevent crash reporting and core dumps.
232
+ // Note that it's fine to reuse the pipe transport, since
233
+ // our connection ignores kBrowserCloseMessageId.
234
+ this.attemptToGracefullyCloseBrowser(transport);
235
+ },
236
+ onExit: (exitCode, signal) => {
237
+ // Unblock launch when browser prematurely exits.
238
+ readyState === null || readyState === void 0 || readyState.onBrowserExit();
239
+ if (browserProcess && browserProcess.onclose) browserProcess.onclose(exitCode, signal);
240
+ }
241
+ });
242
+ async function closeOrKill(timeout) {
243
+ let timer;
244
+ try {
245
+ await Promise.race([gracefullyClose(), new Promise((resolve, reject) => timer = setTimeout(reject, timeout))]);
246
+ } catch (ignored) {
247
+ await kill().catch(ignored => {}); // Make sure to await actual process exit.
248
+ } finally {
249
+ clearTimeout(timer);
250
+ }
251
+ }
252
+ browserProcess = {
253
+ onclose: undefined,
254
+ process: launchedProcess,
255
+ close: () => closeOrKill(options.__testHookBrowserCloseTimeout || _timeoutSettings.DEFAULT_TIMEOUT),
256
+ kill
257
+ };
258
+ progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline()));
259
+ const wsEndpoint = (_await$readyState$wai = await (readyState === null || readyState === void 0 ? void 0 : readyState.waitUntilReady())) === null || _await$readyState$wai === void 0 ? void 0 : _await$readyState$wai.wsEndpoint;
260
+ if (options.useWebSocket) {
261
+ transport = await _transport.WebSocketTransport.connect(progress, wsEndpoint);
262
+ } else {
263
+ const stdio = launchedProcess.stdio;
264
+ transport = new _pipeTransport.PipeTransport(stdio[3], stdio[4]);
265
+ }
266
+ return {
267
+ browserProcess,
268
+ artifactsDir,
269
+ userDataDir,
270
+ transport
271
+ };
272
+ }
273
+ async _createArtifactDirs(options) {
274
+ if (options.downloadsPath) await _fs.default.promises.mkdir(options.downloadsPath, {
275
+ recursive: true
276
+ });
277
+ if (options.tracesDir) await _fs.default.promises.mkdir(options.tracesDir, {
278
+ recursive: true
279
+ });
280
+ }
281
+ async connectOverCDP(metadata, endpointURL, options, timeout) {
282
+ throw new Error('CDP connections are only supported by Chromium');
283
+ }
284
+ async _launchWithSeleniumHub(progress, hubUrl, options) {
285
+ throw new Error('Connecting to SELENIUM_REMOTE_URL is only supported by Chromium');
286
+ }
287
+ _validateLaunchOptions(options) {
288
+ const {
289
+ devtools = false
290
+ } = options;
291
+ let {
292
+ headless = !devtools,
293
+ downloadsPath,
294
+ proxy
295
+ } = options;
296
+ if ((0, _utils.debugMode)()) headless = false;
297
+ if (downloadsPath && !_path.default.isAbsolute(downloadsPath)) downloadsPath = _path.default.join(process.cwd(), downloadsPath);
298
+ if (this.attribution.playwright.options.socksProxyPort) proxy = {
299
+ server: `socks5://127.0.0.1:${this.attribution.playwright.options.socksProxyPort}`
300
+ };
301
+ return {
302
+ ...options,
303
+ devtools,
304
+ headless,
305
+ downloadsPath,
306
+ proxy
307
+ };
308
+ }
309
+ _createUserDataDirArgMisuseError(userDataDirArg) {
310
+ switch (this.attribution.playwright.options.sdkLanguage) {
311
+ case 'java':
312
+ return new Error(`Pass userDataDir parameter to 'BrowserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
313
+ case 'python':
314
+ return new Error(`Pass user_data_dir parameter to 'browser_type.launch_persistent_context(user_data_dir, **kwargs)' instead of specifying '${userDataDirArg}' argument`);
315
+ case 'csharp':
316
+ return new Error(`Pass userDataDir parameter to 'BrowserType.LaunchPersistentContextAsync(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
317
+ default:
318
+ return new Error(`Pass userDataDir parameter to 'browserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
319
+ }
320
+ }
321
+ _rewriteStartupLog(error) {
322
+ if (!(0, _protocolError.isProtocolError)(error)) return error;
323
+ return this.doRewriteStartupLog(error);
324
+ }
325
+ readyState(options) {
326
+ return undefined;
327
+ }
328
+ async prepareUserDataDir(options, userDataDir) {}
329
+ }
330
+ exports.BrowserType = BrowserType;
331
+ function copyTestHooks(from, to) {
332
+ for (const [key, value] of Object.entries(from)) {
333
+ if (key.startsWith('__testHook')) to[key] = value;
334
+ }
335
+ }
Binary file