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,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Artifact = void 0;
7
+ var _fs = _interopRequireDefault(require("fs"));
8
+ var _utils = require("../utils");
9
+ var _manualPromise = require("../utils/manualPromise");
10
+ var _instrumentation = require("./instrumentation");
11
+ var _errors = require("./errors");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ /**
14
+ * Copyright (c) Microsoft Corporation.
15
+ *
16
+ * Licensed under the Apache License, Version 2.0 (the "License");
17
+ * you may not use this file except in compliance with the License.
18
+ * You may obtain a copy of the License at
19
+ *
20
+ * http://www.apache.org/licenses/LICENSE-2.0
21
+ *
22
+ * Unless required by applicable law or agreed to in writing, software
23
+ * distributed under the License is distributed on an "AS IS" BASIS,
24
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ * See the License for the specific language governing permissions and
26
+ * limitations under the License.
27
+ */
28
+
29
+ class Artifact extends _instrumentation.SdkObject {
30
+ constructor(parent, localPath, unaccessibleErrorMessage, cancelCallback) {
31
+ super(parent, 'artifact');
32
+ this._localPath = void 0;
33
+ this._unaccessibleErrorMessage = void 0;
34
+ this._cancelCallback = void 0;
35
+ this._finishedPromise = new _manualPromise.ManualPromise();
36
+ this._saveCallbacks = [];
37
+ this._finished = false;
38
+ this._deleted = false;
39
+ this._failureError = void 0;
40
+ this._localPath = localPath;
41
+ this._unaccessibleErrorMessage = unaccessibleErrorMessage;
42
+ this._cancelCallback = cancelCallback;
43
+ }
44
+ finishedPromise() {
45
+ return this._finishedPromise;
46
+ }
47
+ localPath() {
48
+ return this._localPath;
49
+ }
50
+ async localPathAfterFinished() {
51
+ if (this._unaccessibleErrorMessage) throw new Error(this._unaccessibleErrorMessage);
52
+ await this._finishedPromise;
53
+ if (this._failureError) throw this._failureError;
54
+ return this._localPath;
55
+ }
56
+ saveAs(saveCallback) {
57
+ if (this._unaccessibleErrorMessage) throw new Error(this._unaccessibleErrorMessage);
58
+ if (this._deleted) throw new Error(`File already deleted. Save before deleting.`);
59
+ if (this._failureError) throw this._failureError;
60
+ if (this._finished) {
61
+ saveCallback(this._localPath).catch(() => {});
62
+ return;
63
+ }
64
+ this._saveCallbacks.push(saveCallback);
65
+ }
66
+ async failureError() {
67
+ var _this$_failureError;
68
+ if (this._unaccessibleErrorMessage) return this._unaccessibleErrorMessage;
69
+ await this._finishedPromise;
70
+ return ((_this$_failureError = this._failureError) === null || _this$_failureError === void 0 ? void 0 : _this$_failureError.message) || null;
71
+ }
72
+ async cancel() {
73
+ (0, _utils.assert)(this._cancelCallback !== undefined);
74
+ return this._cancelCallback();
75
+ }
76
+ async delete() {
77
+ if (this._unaccessibleErrorMessage) return;
78
+ const fileName = await this.localPathAfterFinished();
79
+ if (this._deleted) return;
80
+ this._deleted = true;
81
+ if (fileName) await _fs.default.promises.unlink(fileName).catch(e => {});
82
+ }
83
+ async deleteOnContextClose() {
84
+ // Compared to "delete", this method does not wait for the artifact to finish.
85
+ // We use it when closing the context to avoid stalling.
86
+ if (this._deleted) return;
87
+ this._deleted = true;
88
+ if (!this._unaccessibleErrorMessage) await _fs.default.promises.unlink(this._localPath).catch(e => {});
89
+ await this.reportFinished(new _errors.TargetClosedError());
90
+ }
91
+ async reportFinished(error) {
92
+ if (this._finished) return;
93
+ this._finished = true;
94
+ this._failureError = error;
95
+ if (error) {
96
+ for (const callback of this._saveCallbacks) await callback('', error);
97
+ } else {
98
+ for (const callback of this._saveCallbacks) await callback(this._localPath);
99
+ }
100
+ this._saveCallbacks = [];
101
+ this._finishedPromise.resolve();
102
+ }
103
+ }
104
+ exports.Artifact = Artifact;
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Network = exports.BidiBrowserContext = exports.BidiBrowser = void 0;
7
+ var _eventsHelper = require("../../utils/eventsHelper");
8
+ var _browser = require("../browser");
9
+ var _browserContext = require("../browserContext");
10
+ var network = _interopRequireWildcard(require("../network"));
11
+ var _bidiConnection = require("./bidiConnection");
12
+ var _bidiNetworkManager = require("./bidiNetworkManager");
13
+ var _bidiPage = require("./bidiPage");
14
+ var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && 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; }
17
+ /**
18
+ * Copyright (c) Microsoft Corporation.
19
+ *
20
+ * Licensed under the Apache License, Version 2.0 (the 'License');
21
+ * you may not use this file except in compliance with the License.
22
+ * You may obtain a copy of the License at
23
+ *
24
+ * http://www.apache.org/licenses/LICENSE-2.0
25
+ *
26
+ * Unless required by applicable law or agreed to in writing, software
27
+ * distributed under the License is distributed on an 'AS IS' BASIS,
28
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
+ * See the License for the specific language governing permissions and
30
+ * limitations under the License.
31
+ */
32
+
33
+ class BidiBrowser extends _browser.Browser {
34
+ static async connect(parent, transport, options) {
35
+ const browser = new BidiBrowser(parent, transport, options);
36
+ if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();
37
+ let proxy;
38
+ if (options.proxy) {
39
+ proxy = {
40
+ proxyType: 'manual'
41
+ };
42
+ const url = new URL(options.proxy.server); // Validate proxy server.
43
+ switch (url.protocol) {
44
+ case 'http:':
45
+ proxy.httpProxy = url.host;
46
+ break;
47
+ case 'https:':
48
+ proxy.httpsProxy = url.host;
49
+ break;
50
+ case 'socks4:':
51
+ proxy.socksProxy = url.host;
52
+ proxy.socksVersion = 4;
53
+ break;
54
+ case 'socks5:':
55
+ proxy.socksProxy = url.host;
56
+ proxy.socksVersion = 5;
57
+ break;
58
+ default:
59
+ throw new Error('Invalid proxy server protocol: ' + options.proxy.server);
60
+ }
61
+ if (options.proxy.bypass) proxy.noProxy = options.proxy.bypass.split(',');
62
+ // TODO: support authentication.
63
+ }
64
+ browser._bidiSessionInfo = await browser._browserSession.send('session.new', {
65
+ capabilities: {
66
+ alwaysMatch: {
67
+ acceptInsecureCerts: false,
68
+ proxy,
69
+ unhandledPromptBehavior: {
70
+ default: bidi.Session.UserPromptHandlerType.Ignore
71
+ },
72
+ webSocketUrl: true
73
+ }
74
+ }
75
+ });
76
+ await browser._browserSession.send('session.subscribe', {
77
+ events: ['browsingContext', 'network', 'log', 'script']
78
+ });
79
+ if (options.persistent) {
80
+ browser._defaultContext = new BidiBrowserContext(browser, undefined, options.persistent);
81
+ await browser._defaultContext._initialize();
82
+ // Create default page as we cannot get access to the existing one.
83
+ const pageDelegate = await browser._defaultContext.newPageDelegate();
84
+ await pageDelegate.pageOrError();
85
+ }
86
+ return browser;
87
+ }
88
+ constructor(parent, transport, options) {
89
+ super(parent, options);
90
+ this._connection = void 0;
91
+ this._browserSession = void 0;
92
+ this._bidiSessionInfo = void 0;
93
+ this._contexts = new Map();
94
+ this._bidiPages = new Map();
95
+ this._eventListeners = void 0;
96
+ this._connection = new _bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
97
+ this._browserSession = this._connection.browserSession;
98
+ this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._browserSession, 'browsingContext.contextCreated', this._onBrowsingContextCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._browserSession, 'script.realmDestroyed', this._onScriptRealmDestroyed.bind(this))];
99
+ }
100
+ _onDisconnect() {
101
+ this._didClose();
102
+ }
103
+ async doCreateNewContext(options) {
104
+ const {
105
+ userContext
106
+ } = await this._browserSession.send('browser.createUserContext', {});
107
+ const context = new BidiBrowserContext(this, userContext, options);
108
+ await context._initialize();
109
+ this._contexts.set(userContext, context);
110
+ return context;
111
+ }
112
+ contexts() {
113
+ return Array.from(this._contexts.values());
114
+ }
115
+ version() {
116
+ return this._bidiSessionInfo.capabilities.browserVersion;
117
+ }
118
+ userAgent() {
119
+ return this._bidiSessionInfo.capabilities.userAgent;
120
+ }
121
+ isConnected() {
122
+ return !this._connection.isClosed();
123
+ }
124
+ _onBrowsingContextCreated(event) {
125
+ if (event.parent) {
126
+ const parentFrameId = event.parent;
127
+ for (const page of this._bidiPages.values()) {
128
+ const parentFrame = page._page._frameManager.frame(parentFrameId);
129
+ if (!parentFrame) continue;
130
+ page._session.addFrameBrowsingContext(event.context);
131
+ page._page._frameManager.frameAttached(event.context, parentFrameId);
132
+ return;
133
+ }
134
+ return;
135
+ }
136
+ let context = this._contexts.get(event.userContext);
137
+ if (!context) context = this._defaultContext;
138
+ if (!context) return;
139
+ const session = this._connection.createMainFrameBrowsingContextSession(event.context);
140
+ const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);
141
+ const page = new _bidiPage.BidiPage(context, session, opener || null);
142
+ this._bidiPages.set(event.context, page);
143
+ }
144
+ _onBrowsingContextDestroyed(event) {
145
+ if (event.parent) {
146
+ this._browserSession.removeFrameBrowsingContext(event.context);
147
+ const parentFrameId = event.parent;
148
+ for (const page of this._bidiPages.values()) {
149
+ const parentFrame = page._page._frameManager.frame(parentFrameId);
150
+ if (!parentFrame) continue;
151
+ page._page._frameManager.frameDetached(event.context);
152
+ return;
153
+ }
154
+ return;
155
+ }
156
+ const bidiPage = this._bidiPages.get(event.context);
157
+ if (!bidiPage) return;
158
+ bidiPage.didClose();
159
+ this._bidiPages.delete(event.context);
160
+ }
161
+ _onScriptRealmDestroyed(event) {
162
+ for (const page of this._bidiPages.values()) {
163
+ if (page._onRealmDestroyed(event)) return;
164
+ }
165
+ }
166
+ }
167
+ exports.BidiBrowser = BidiBrowser;
168
+ class BidiBrowserContext extends _browserContext.BrowserContext {
169
+ constructor(browser, browserContextId, options) {
170
+ super(browser, options, browserContextId);
171
+ this._authenticateProxyViaHeader();
172
+ }
173
+ _bidiPages() {
174
+ return [...this._browser._bidiPages.values()].filter(bidiPage => bidiPage._browserContext === this);
175
+ }
176
+ pages() {
177
+ return this._bidiPages().map(bidiPage => bidiPage._initializedPage).filter(Boolean);
178
+ }
179
+ async newPageDelegate() {
180
+ (0, _browserContext.assertBrowserContextIsNotOwned)(this);
181
+ const {
182
+ context
183
+ } = await this._browser._browserSession.send('browsingContext.create', {
184
+ type: bidi.BrowsingContext.CreateType.Window,
185
+ userContext: this._browserContextId
186
+ });
187
+ return this._browser._bidiPages.get(context);
188
+ }
189
+ async doGetCookies(urls) {
190
+ const {
191
+ cookies
192
+ } = await this._browser._browserSession.send('storage.getCookies', {
193
+ partition: {
194
+ type: 'storageKey',
195
+ userContext: this._browserContextId
196
+ }
197
+ });
198
+ return network.filterCookies(cookies.map(c => {
199
+ var _c$expiry;
200
+ const copy = {
201
+ name: c.name,
202
+ value: (0, _bidiNetworkManager.bidiBytesValueToString)(c.value),
203
+ domain: c.domain,
204
+ path: c.path,
205
+ httpOnly: c.httpOnly,
206
+ secure: c.secure,
207
+ expires: (_c$expiry = c.expiry) !== null && _c$expiry !== void 0 ? _c$expiry : -1,
208
+ sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) : 'None'
209
+ };
210
+ return copy;
211
+ }), urls);
212
+ }
213
+ async addCookies(cookies) {
214
+ cookies = network.rewriteCookies(cookies);
215
+ const promises = cookies.map(c => {
216
+ const cookie = {
217
+ name: c.name,
218
+ value: {
219
+ type: 'string',
220
+ value: c.value
221
+ },
222
+ domain: c.domain,
223
+ path: c.path,
224
+ httpOnly: c.httpOnly,
225
+ secure: c.secure,
226
+ sameSite: c.sameSite && toBidiSameSite(c.sameSite),
227
+ expiry: c.expires === -1 || c.expires === undefined ? undefined : Math.round(c.expires)
228
+ };
229
+ return this._browser._browserSession.send('storage.setCookie', {
230
+ cookie,
231
+ partition: {
232
+ type: 'storageKey',
233
+ userContext: this._browserContextId
234
+ }
235
+ });
236
+ });
237
+ await Promise.all(promises);
238
+ }
239
+ async doClearCookies() {
240
+ await this._browser._browserSession.send('storage.deleteCookies', {
241
+ partition: {
242
+ type: 'storageKey',
243
+ userContext: this._browserContextId
244
+ }
245
+ });
246
+ }
247
+ async doGrantPermissions(origin, permissions) {}
248
+ async doClearPermissions() {}
249
+ async setGeolocation(geolocation) {}
250
+ async setExtraHTTPHeaders(headers) {}
251
+ async setUserAgent(userAgent) {}
252
+ async setOffline(offline) {}
253
+ async doSetHTTPCredentials(httpCredentials) {
254
+ this._options.httpCredentials = httpCredentials;
255
+ for (const page of this.pages()) await page._delegate.updateHttpCredentials();
256
+ }
257
+ async doAddInitScript(initScript) {
258
+ await Promise.all(this.pages().map(page => page._delegate.addInitScript(initScript)));
259
+ }
260
+ async doRemoveNonInternalInitScripts() {}
261
+ async doUpdateRequestInterception() {}
262
+ onClosePersistent() {}
263
+ async clearCache() {}
264
+ async doClose(reason) {
265
+ if (!this._browserContextId) {
266
+ // Closing persistent context should close the browser.
267
+ await this._browser.close({
268
+ reason
269
+ });
270
+ return;
271
+ }
272
+ await this._browser._browserSession.send('browser.removeUserContext', {
273
+ userContext: this._browserContextId
274
+ });
275
+ this._browser._contexts.delete(this._browserContextId);
276
+ }
277
+ async cancelDownload(uuid) {}
278
+ }
279
+ exports.BidiBrowserContext = BidiBrowserContext;
280
+ function fromBidiSameSite(sameSite) {
281
+ switch (sameSite) {
282
+ case 'strict':
283
+ return 'Strict';
284
+ case 'lax':
285
+ return 'Lax';
286
+ case 'none':
287
+ return 'None';
288
+ }
289
+ return 'None';
290
+ }
291
+ function toBidiSameSite(sameSite) {
292
+ switch (sameSite) {
293
+ case 'Strict':
294
+ return bidi.Network.SameSite.Strict;
295
+ case 'Lax':
296
+ return bidi.Network.SameSite.Lax;
297
+ case 'None':
298
+ return bidi.Network.SameSite.None;
299
+ }
300
+ return bidi.Network.SameSite.None;
301
+ }
302
+ let Network = exports.Network = void 0;
303
+ (function (_Network) {
304
+ let SameSite = /*#__PURE__*/function (SameSite) {
305
+ SameSite["Strict"] = "strict";
306
+ SameSite["Lax"] = "lax";
307
+ SameSite["None"] = "none";
308
+ return SameSite;
309
+ }({});
310
+ _Network.SameSite = SameSite;
311
+ })(Network || (exports.Network = Network = {}));
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BidiChromium = void 0;
7
+ var _os = _interopRequireDefault(require("os"));
8
+ var _utils = require("../../utils");
9
+ var _browserType = require("../browserType");
10
+ var _chromiumSwitches = require("../chromium/chromiumSwitches");
11
+ var _bidiBrowser = require("./bidiBrowser");
12
+ var _bidiConnection = require("./bidiConnection");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ /**
15
+ * Copyright (c) Microsoft Corporation.
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the 'License');
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an 'AS IS' BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+ class BidiChromium extends _browserType.BrowserType {
31
+ constructor(parent) {
32
+ super(parent, 'bidi');
33
+ this._useBidi = true;
34
+ }
35
+ async connectToTransport(transport, options) {
36
+ // Chrome doesn't support Bidi, we create Bidi over CDP which is used by Chrome driver.
37
+ // bidiOverCdp depends on chromium-bidi which we only have in devDependencies, so
38
+ // we load bidiOverCdp dynamically.
39
+ const bidiTransport = await require('./bidiOverCdp').connectBidiOverCdp(transport);
40
+ transport[kBidiOverCdpWrapper] = bidiTransport;
41
+ return _bidiBrowser.BidiBrowser.connect(this.attribution.playwright, bidiTransport, options);
42
+ }
43
+ doRewriteStartupLog(error) {
44
+ if (!error.logs) return error;
45
+ if (error.logs.includes('Missing X server')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
46
+ // These error messages are taken from Chromium source code as of July, 2020:
47
+ // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc
48
+ if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180')) return error;
49
+ error.logs = [`Chromium sandboxing failed!`, `================================`, `To avoid the sandboxing issue, do either of the following:`, ` - (preferred): Configure your environment to support sandboxing`, ` - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`, `================================`, ``].join('\n');
50
+ return error;
51
+ }
52
+ amendEnvironment(env, userDataDir, executable, browserArguments) {
53
+ return env;
54
+ }
55
+ attemptToGracefullyCloseBrowser(transport) {
56
+ const bidiTransport = transport[kBidiOverCdpWrapper];
57
+ if (bidiTransport) transport = bidiTransport;
58
+ transport.send({
59
+ method: 'browser.close',
60
+ params: {},
61
+ id: _bidiConnection.kBrowserCloseMessageId
62
+ });
63
+ }
64
+ defaultArgs(options, isPersistent, userDataDir) {
65
+ const chromeArguments = this._innerDefaultArgs(options);
66
+ chromeArguments.push(`--user-data-dir=${userDataDir}`);
67
+ chromeArguments.push('--remote-debugging-port=0');
68
+ if (isPersistent) chromeArguments.push('about:blank');else chromeArguments.push('--no-startup-window');
69
+ return chromeArguments;
70
+ }
71
+ readyState(options) {
72
+ (0, _utils.assert)(options.useWebSocket);
73
+ return new ChromiumReadyState();
74
+ }
75
+ _innerDefaultArgs(options) {
76
+ const {
77
+ args = []
78
+ } = options;
79
+ const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));
80
+ if (userDataDirArg) throw this._createUserDataDirArgMisuseError('--user-data-dir');
81
+ if (args.find(arg => arg.startsWith('--remote-debugging-pipe'))) throw new Error('Playwright manages remote debugging connection itself.');
82
+ if (args.find(arg => !arg.startsWith('-'))) throw new Error('Arguments can not specify page to be opened');
83
+ const chromeArguments = [..._chromiumSwitches.chromiumSwitches];
84
+ if (_os.default.platform() === 'darwin') {
85
+ // See https://github.com/microsoft/playwright/issues/7362
86
+ chromeArguments.push('--enable-use-zoom-for-dsf=false');
87
+ // See https://bugs.chromium.org/p/chromium/issues/detail?id=1407025.
88
+ if (options.headless) chromeArguments.push('--use-angle');
89
+ }
90
+ if (options.devtools) chromeArguments.push('--auto-open-devtools-for-tabs');
91
+ if (options.headless) {
92
+ if (process.env.PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW) chromeArguments.push('--headless=new');else chromeArguments.push('--headless=old');
93
+ chromeArguments.push('--hide-scrollbars', '--mute-audio', '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4');
94
+ }
95
+ if (options.chromiumSandbox !== true) chromeArguments.push('--no-sandbox');
96
+ const proxy = options.proxyOverride || options.proxy;
97
+ if (proxy) {
98
+ const proxyURL = new URL(proxy.server);
99
+ const isSocks = proxyURL.protocol === 'socks5:';
100
+ // https://www.chromium.org/developers/design-documents/network-settings
101
+ if (isSocks && !this.attribution.playwright.options.socksProxyPort) {
102
+ // https://www.chromium.org/developers/design-documents/network-stack/socks-proxy
103
+ chromeArguments.push(`--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}"`);
104
+ }
105
+ chromeArguments.push(`--proxy-server=${proxy.server}`);
106
+ const proxyBypassRules = [];
107
+ // https://source.chromium.org/chromium/chromium/src/+/master:net/docs/proxy.md;l=548;drc=71698e610121078e0d1a811054dcf9fd89b49578
108
+ if (this.attribution.playwright.options.socksProxyPort) proxyBypassRules.push('<-loopback>');
109
+ if (proxy.bypass) proxyBypassRules.push(...proxy.bypass.split(',').map(t => t.trim()).map(t => t.startsWith('.') ? '*' + t : t));
110
+ if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes('<-loopback>')) proxyBypassRules.push('<-loopback>');
111
+ if (proxyBypassRules.length > 0) chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(';')}`);
112
+ }
113
+ chromeArguments.push(...args);
114
+ return chromeArguments;
115
+ }
116
+ }
117
+ exports.BidiChromium = BidiChromium;
118
+ class ChromiumReadyState extends _browserType.BrowserReadyState {
119
+ onBrowserOutput(message) {
120
+ const match = message.match(/DevTools listening on (.*)/);
121
+ if (match) this._wsEndpoint.resolve(match[1]);
122
+ }
123
+ }
124
+ const kBidiOverCdpWrapper = Symbol('kBidiConnectionWrapper');