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.
- package/README.md +3 -0
- package/ThirdPartyNotices.txt +1548 -0
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +2 -0
- package/bin/install_media_pack.ps1 +5 -0
- package/bin/reinstall_chrome_beta_linux.sh +40 -0
- package/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/bin/reinstall_chrome_stable_linux.sh +40 -0
- package/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/bin/reinstall_msedge_beta_linux.sh +40 -0
- package/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/bin/reinstall_msedge_dev_linux.sh +40 -0
- package/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/bin/reinstall_msedge_stable_linux.sh +40 -0
- package/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/browsers.json +57 -0
- package/cli.js +18 -0
- package/index.d.ts +17 -0
- package/index.js +33 -0
- package/index.mjs +28 -0
- package/lib/androidServerImpl.js +69 -0
- package/lib/browserServerImpl.js +92 -0
- package/lib/cli/driver.js +95 -0
- package/lib/cli/program.js +589 -0
- package/lib/cli/programWithTestStub.js +67 -0
- package/lib/client/accessibility.js +50 -0
- package/lib/client/android.js +473 -0
- package/lib/client/api.js +285 -0
- package/lib/client/artifact.js +79 -0
- package/lib/client/browser.js +145 -0
- package/lib/client/browserContext.js +583 -0
- package/lib/client/browserType.js +241 -0
- package/lib/client/cdpSession.js +53 -0
- package/lib/client/channelOwner.js +235 -0
- package/lib/client/clientHelper.js +57 -0
- package/lib/client/clientInstrumentation.js +50 -0
- package/lib/client/clock.js +69 -0
- package/lib/client/connection.js +333 -0
- package/lib/client/consoleMessage.js +55 -0
- package/lib/client/coverage.js +41 -0
- package/lib/client/dialog.js +57 -0
- package/lib/client/download.js +62 -0
- package/lib/client/electron.js +135 -0
- package/lib/client/elementHandle.js +321 -0
- package/lib/client/errors.js +77 -0
- package/lib/client/eventEmitter.js +314 -0
- package/lib/client/events.js +94 -0
- package/lib/client/fetch.js +391 -0
- package/lib/client/fileChooser.js +45 -0
- package/lib/client/frame.js +504 -0
- package/lib/client/harRouter.js +99 -0
- package/lib/client/input.js +111 -0
- package/lib/client/jsHandle.js +121 -0
- package/lib/client/jsonPipe.js +35 -0
- package/lib/client/localUtils.js +36 -0
- package/lib/client/locator.js +441 -0
- package/lib/client/network.js +762 -0
- package/lib/client/page.js +770 -0
- package/lib/client/playwright.js +80 -0
- package/lib/client/selectors.js +67 -0
- package/lib/client/stream.js +54 -0
- package/lib/client/tracing.js +134 -0
- package/lib/client/types.js +24 -0
- package/lib/client/video.js +51 -0
- package/lib/client/waiter.js +158 -0
- package/lib/client/webError.js +37 -0
- package/lib/client/worker.js +71 -0
- package/lib/client/writableStream.js +54 -0
- package/lib/common/socksProxy.js +569 -0
- package/lib/common/timeoutSettings.js +73 -0
- package/lib/common/types.js +5 -0
- package/lib/generated/clockSource.js +7 -0
- package/lib/generated/consoleApiSource.js +7 -0
- package/lib/generated/injectedScriptSource.js +7 -0
- package/lib/generated/pollingRecorderSource.js +7 -0
- package/lib/generated/utilityScriptSource.js +7 -0
- package/lib/generated/webSocketMockSource.js +7 -0
- package/lib/image_tools/colorUtils.js +98 -0
- package/lib/image_tools/compare.js +108 -0
- package/lib/image_tools/imageChannel.js +70 -0
- package/lib/image_tools/stats.js +102 -0
- package/lib/inProcessFactory.js +54 -0
- package/lib/inprocess.js +20 -0
- package/lib/outofprocess.js +67 -0
- package/lib/protocol/debug.js +27 -0
- package/lib/protocol/serializers.js +173 -0
- package/lib/protocol/transport.js +82 -0
- package/lib/protocol/validator.js +2760 -0
- package/lib/protocol/validatorPrimitives.js +139 -0
- package/lib/remote/playwrightConnection.js +274 -0
- package/lib/remote/playwrightServer.js +110 -0
- package/lib/server/accessibility.js +62 -0
- package/lib/server/android/android.js +441 -0
- package/lib/server/android/backendAdb.js +172 -0
- package/lib/server/artifact.js +104 -0
- package/lib/server/bidi/bidiBrowser.js +311 -0
- package/lib/server/bidi/bidiChromium.js +124 -0
- package/lib/server/bidi/bidiConnection.js +206 -0
- package/lib/server/bidi/bidiExecutionContext.js +159 -0
- package/lib/server/bidi/bidiFirefox.js +104 -0
- package/lib/server/bidi/bidiInput.js +158 -0
- package/lib/server/bidi/bidiNetworkManager.js +338 -0
- package/lib/server/bidi/bidiOverCdp.js +103 -0
- package/lib/server/bidi/bidiPage.js +529 -0
- package/lib/server/bidi/bidiPdf.js +140 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
- package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
- package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
- package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
- package/lib/server/browser.js +148 -0
- package/lib/server/browserContext.js +666 -0
- package/lib/server/browserType.js +335 -0
- package/lib/server/chromium/appIcon.png +0 -0
- package/lib/server/chromium/chromium.js +350 -0
- package/lib/server/chromium/chromiumSwitches.js +36 -0
- package/lib/server/chromium/crAccessibility.js +237 -0
- package/lib/server/chromium/crBrowser.js +522 -0
- package/lib/server/chromium/crConnection.js +228 -0
- package/lib/server/chromium/crCoverage.js +246 -0
- package/lib/server/chromium/crDevTools.js +104 -0
- package/lib/server/chromium/crDragDrop.js +143 -0
- package/lib/server/chromium/crExecutionContext.js +149 -0
- package/lib/server/chromium/crInput.js +171 -0
- package/lib/server/chromium/crNetworkManager.js +809 -0
- package/lib/server/chromium/crPage.js +1235 -0
- package/lib/server/chromium/crPdf.js +153 -0
- package/lib/server/chromium/crProtocolHelper.js +133 -0
- package/lib/server/chromium/crServiceWorker.js +111 -0
- package/lib/server/chromium/defaultFontFamilies.js +145 -0
- package/lib/server/chromium/videoRecorder.js +155 -0
- package/lib/server/clock.js +133 -0
- package/lib/server/codegen/csharp.js +299 -0
- package/lib/server/codegen/java.js +235 -0
- package/lib/server/codegen/javascript.js +223 -0
- package/lib/server/codegen/jsonl.js +47 -0
- package/lib/server/codegen/language.js +88 -0
- package/lib/server/codegen/languages.js +30 -0
- package/lib/server/codegen/python.js +265 -0
- package/lib/server/codegen/types.js +5 -0
- package/lib/server/console.js +57 -0
- package/lib/server/cookieStore.js +185 -0
- package/lib/server/debugController.js +234 -0
- package/lib/server/debugger.js +132 -0
- package/lib/server/deviceDescriptors.js +26 -0
- package/lib/server/deviceDescriptorsSource.json +1669 -0
- package/lib/server/dialog.js +71 -0
- package/lib/server/dispatchers/androidDispatcher.js +193 -0
- package/lib/server/dispatchers/artifactDispatcher.js +118 -0
- package/lib/server/dispatchers/browserContextDispatcher.js +368 -0
- package/lib/server/dispatchers/browserDispatcher.js +170 -0
- package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
- package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
- package/lib/server/dispatchers/dialogDispatcher.js +44 -0
- package/lib/server/dispatchers/dispatcher.js +395 -0
- package/lib/server/dispatchers/electronDispatcher.js +93 -0
- package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
- package/lib/server/dispatchers/frameDispatcher.js +286 -0
- package/lib/server/dispatchers/jsHandleDispatcher.js +97 -0
- package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
- package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
- package/lib/server/dispatchers/networkDispatchers.js +221 -0
- package/lib/server/dispatchers/pageDispatcher.js +367 -0
- package/lib/server/dispatchers/playwrightDispatcher.js +107 -0
- package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
- package/lib/server/dispatchers/streamDispatcher.js +62 -0
- package/lib/server/dispatchers/tracingDispatcher.js +54 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
- package/lib/server/dom.js +845 -0
- package/lib/server/download.js +60 -0
- package/lib/server/electron/electron.js +296 -0
- package/lib/server/electron/loader.js +57 -0
- package/lib/server/errors.js +68 -0
- package/lib/server/fetch.js +656 -0
- package/lib/server/fileChooser.js +42 -0
- package/lib/server/fileUploadUtils.js +75 -0
- package/lib/server/firefox/ffAccessibility.js +216 -0
- package/lib/server/firefox/ffBrowser.js +460 -0
- package/lib/server/firefox/ffConnection.js +168 -0
- package/lib/server/firefox/ffExecutionContext.js +135 -0
- package/lib/server/firefox/ffInput.js +150 -0
- package/lib/server/firefox/ffNetworkManager.js +233 -0
- package/lib/server/firefox/ffPage.js +559 -0
- package/lib/server/firefox/firefox.js +99 -0
- package/lib/server/formData.js +75 -0
- package/lib/server/frameSelectors.js +171 -0
- package/lib/server/frames.js +1808 -0
- package/lib/server/har/harRecorder.js +139 -0
- package/lib/server/har/harTracer.js +542 -0
- package/lib/server/helper.js +103 -0
- package/lib/server/index.js +114 -0
- package/lib/server/input.js +310 -0
- package/lib/server/instrumentation.js +70 -0
- package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
- package/lib/server/javascript.js +299 -0
- package/lib/server/launchApp.js +91 -0
- package/lib/server/macEditingCommands.js +139 -0
- package/lib/server/network.js +617 -0
- package/lib/server/page.js +819 -0
- package/lib/server/pipeTransport.js +85 -0
- package/lib/server/playwright.js +88 -0
- package/lib/server/progress.js +102 -0
- package/lib/server/protocolError.js +49 -0
- package/lib/server/recorder/contextRecorder.js +299 -0
- package/lib/server/recorder/recorderApp.js +196 -0
- package/lib/server/recorder/recorderCollection.js +116 -0
- package/lib/server/recorder/recorderFrontend.js +5 -0
- package/lib/server/recorder/recorderInTraceViewer.js +144 -0
- package/lib/server/recorder/recorderRunner.js +155 -0
- package/lib/server/recorder/recorderUtils.js +112 -0
- package/lib/server/recorder/throttledFile.js +46 -0
- package/lib/server/recorder.js +329 -0
- package/lib/server/registry/browserFetcher.js +168 -0
- package/lib/server/registry/dependencies.js +322 -0
- package/lib/server/registry/index.js +1005 -0
- package/lib/server/registry/nativeDeps.js +490 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
- package/lib/server/screenshotter.js +348 -0
- package/lib/server/selectors.js +73 -0
- package/lib/server/socksClientCertificatesInterceptor.js +340 -0
- package/lib/server/socksInterceptor.js +100 -0
- package/lib/server/trace/recorder/snapshotter.js +172 -0
- package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
- package/lib/server/trace/recorder/tracing.js +542 -0
- package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
- package/lib/server/trace/viewer/traceViewer.js +213 -0
- package/lib/server/transport.js +191 -0
- package/lib/server/types.js +24 -0
- package/lib/server/usKeyboardLayout.js +555 -0
- package/lib/server/webkit/webkit.js +87 -0
- package/lib/server/webkit/wkAccessibility.js +194 -0
- package/lib/server/webkit/wkBrowser.js +329 -0
- package/lib/server/webkit/wkConnection.js +173 -0
- package/lib/server/webkit/wkExecutionContext.js +143 -0
- package/lib/server/webkit/wkInput.js +169 -0
- package/lib/server/webkit/wkInterceptableRequest.js +162 -0
- package/lib/server/webkit/wkPage.js +1219 -0
- package/lib/server/webkit/wkProvisionalPage.js +94 -0
- package/lib/server/webkit/wkWorkers.js +104 -0
- package/lib/third_party/diff_match_patch.js +2222 -0
- package/lib/third_party/pixelmatch.js +255 -0
- package/lib/utils/ascii.js +31 -0
- package/lib/utils/comparators.js +171 -0
- package/lib/utils/crypto.js +174 -0
- package/lib/utils/debug.js +46 -0
- package/lib/utils/debugLogger.js +91 -0
- package/lib/utils/env.js +49 -0
- package/lib/utils/eventsHelper.js +38 -0
- package/lib/utils/expectUtils.js +33 -0
- package/lib/utils/fileUtils.js +205 -0
- package/lib/utils/happy-eyeballs.js +194 -0
- package/lib/utils/headers.js +52 -0
- package/lib/utils/hostPlatform.js +133 -0
- package/lib/utils/httpServer.js +237 -0
- package/lib/utils/index.js +368 -0
- package/lib/utils/isomorphic/cssParser.js +250 -0
- package/lib/utils/isomorphic/cssTokenizer.js +979 -0
- package/lib/utils/isomorphic/locatorGenerators.js +642 -0
- package/lib/utils/isomorphic/locatorParser.js +179 -0
- package/lib/utils/isomorphic/locatorUtils.js +62 -0
- package/lib/utils/isomorphic/mimeType.js +29 -0
- package/lib/utils/isomorphic/recorderUtils.js +195 -0
- package/lib/utils/isomorphic/selectorParser.js +397 -0
- package/lib/utils/isomorphic/stringUtils.js +139 -0
- package/lib/utils/isomorphic/traceUtils.js +39 -0
- package/lib/utils/isomorphic/urlMatch.js +120 -0
- package/lib/utils/linuxUtils.js +78 -0
- package/lib/utils/manualPromise.js +109 -0
- package/lib/utils/multimap.js +75 -0
- package/lib/utils/network.js +160 -0
- package/lib/utils/processLauncher.js +248 -0
- package/lib/utils/profiler.js +53 -0
- package/lib/utils/rtti.js +44 -0
- package/lib/utils/semaphore.js +51 -0
- package/lib/utils/spawnAsync.js +45 -0
- package/lib/utils/stackTrace.js +121 -0
- package/lib/utils/task.js +58 -0
- package/lib/utils/time.js +37 -0
- package/lib/utils/timeoutRunner.js +66 -0
- package/lib/utils/traceUtils.js +44 -0
- package/lib/utils/userAgent.js +105 -0
- package/lib/utils/wsServer.js +127 -0
- package/lib/utils/zipFile.js +75 -0
- package/lib/utils/zones.js +62 -0
- package/lib/utilsBundle.js +82 -0
- package/lib/utilsBundleImpl/index.js +53 -0
- package/lib/utilsBundleImpl/xdg-open +1066 -0
- package/lib/vite/htmlReport/index.html +66 -0
- package/lib/vite/recorder/assets/codeMirrorModule-baozm8ur.js +24 -0
- package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-2ElAIWFB.js +42 -0
- package/lib/vite/recorder/assets/index-BW-aOBcL.css +1 -0
- package/lib/vite/recorder/index.html +29 -0
- package/lib/vite/recorder/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-Bh1rfd2w.js +24 -0
- package/lib/vite/traceViewer/assets/inspectorTab-7GHnKvSD.js +64 -0
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
- package/lib/vite/traceViewer/assets/workbench-DPQnTHYP.js +9 -0
- package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
- package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/embedded.BlHoW5LY.js +2 -0
- package/lib/vite/traceViewer/embedded.html +18 -0
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
- package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
- package/lib/vite/traceViewer/index.DaWVfou1.js +2 -0
- package/lib/vite/traceViewer/index.html +29 -0
- package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +1 -0
- package/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
- package/lib/vite/traceViewer/recorder.C4zxcvd2.js +2 -0
- package/lib/vite/traceViewer/recorder.html +17 -0
- package/lib/vite/traceViewer/snapshot.html +21 -0
- package/lib/vite/traceViewer/sw.bundle.js +3 -0
- package/lib/vite/traceViewer/uiMode.CAYqod-m.css +1 -0
- package/lib/vite/traceViewer/uiMode.html +20 -0
- package/lib/vite/traceViewer/uiMode.mTXWniJb.js +5 -0
- package/lib/vite/traceViewer/workbench.D3JVcA9K.css +1 -0
- package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
- package/lib/zipBundle.js +25 -0
- package/lib/zipBundleImpl.js +5 -0
- package/package.json +44 -0
- package/types/protocol.d.ts +21571 -0
- package/types/structs.d.ts +45 -0
- 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
|