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,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');
|