patchright-core 1.51.3 → 1.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +190 -212
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +73 -75
- package/lib/client/elementHandle.js +111 -147
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +56 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +371 -4
- package/lib/inProcessFactory.js +53 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +284 -404
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +140 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +221 -112
- package/lib/server/frames.js +731 -894
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +326 -423
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +37 -28
- package/lib/server/utils/debugLogger.js +69 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +138 -123
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +143 -86
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +73 -69
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +86 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-CXVeovup.js} +1 -1
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-_GLjJL-7.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +2 -0
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-l0TyP_G8.js +0 -259
- package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
- package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
|
@@ -1,97 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var ffBrowser_exports = {};
|
|
30
|
+
__export(ffBrowser_exports, {
|
|
31
|
+
FFBrowser: () => FFBrowser,
|
|
32
|
+
FFBrowserContext: () => FFBrowserContext
|
|
5
33
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var network =
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* limitations under the License.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
class FFBrowser extends _browser.Browser {
|
|
34
|
+
module.exports = __toCommonJS(ffBrowser_exports);
|
|
35
|
+
var import_utils = require("../../utils");
|
|
36
|
+
var import_browser = require("../browser");
|
|
37
|
+
var import_browserContext = require("../browserContext");
|
|
38
|
+
var import_errors = require("../errors");
|
|
39
|
+
var network = __toESM(require("../network"));
|
|
40
|
+
var import_page = require("../page");
|
|
41
|
+
var import_ffConnection = require("./ffConnection");
|
|
42
|
+
var import_ffPage = require("./ffPage");
|
|
43
|
+
class FFBrowser extends import_browser.Browser {
|
|
44
|
+
constructor(parent, connection, options) {
|
|
45
|
+
super(parent, options);
|
|
46
|
+
this._version = "";
|
|
47
|
+
this._userAgent = "";
|
|
48
|
+
this._connection = connection;
|
|
49
|
+
this.session = connection.rootSession;
|
|
50
|
+
this._ffPages = /* @__PURE__ */ new Map();
|
|
51
|
+
this._contexts = /* @__PURE__ */ new Map();
|
|
52
|
+
this._connection.on(import_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());
|
|
53
|
+
this.session.on("Browser.attachedToTarget", this._onAttachedToTarget.bind(this));
|
|
54
|
+
this.session.on("Browser.detachedFromTarget", this._onDetachedFromTarget.bind(this));
|
|
55
|
+
this.session.on("Browser.downloadCreated", this._onDownloadCreated.bind(this));
|
|
56
|
+
this.session.on("Browser.downloadFinished", this._onDownloadFinished.bind(this));
|
|
57
|
+
this.session.on("Browser.videoRecordingFinished", this._onVideoRecordingFinished.bind(this));
|
|
58
|
+
}
|
|
35
59
|
static async connect(parent, transport, options) {
|
|
36
|
-
|
|
37
|
-
const connection = new _ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);
|
|
60
|
+
const connection = new import_ffConnection.FFConnection(transport, options.protocolLogger, options.browserLogsCollector);
|
|
38
61
|
const browser = new FFBrowser(parent, connection, options);
|
|
39
|
-
if (options.__testHookOnConnectToBrowser)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
...firefoxUserPrefs
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}), browser._initVersion()];
|
|
62
|
+
if (options.__testHookOnConnectToBrowser)
|
|
63
|
+
await options.__testHookOnConnectToBrowser();
|
|
64
|
+
let firefoxUserPrefs = options.originalLaunchOptions.firefoxUserPrefs ?? {};
|
|
65
|
+
if (Object.keys(kBandaidFirefoxUserPrefs).length)
|
|
66
|
+
firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };
|
|
67
|
+
const promises = [
|
|
68
|
+
browser.session.send("Browser.enable", {
|
|
69
|
+
attachToDefaultContext: !!options.persistent,
|
|
70
|
+
userPrefs: Object.entries(firefoxUserPrefs).map(([name, value]) => ({ name, value }))
|
|
71
|
+
}),
|
|
72
|
+
browser._initVersion()
|
|
73
|
+
];
|
|
52
74
|
if (options.persistent) {
|
|
53
|
-
browser._defaultContext = new FFBrowserContext(browser,
|
|
75
|
+
browser._defaultContext = new FFBrowserContext(browser, void 0, options.persistent);
|
|
54
76
|
promises.push(browser._defaultContext._initialize());
|
|
55
77
|
}
|
|
56
78
|
const proxy = options.originalLaunchOptions.proxyOverride || options.proxy;
|
|
57
|
-
if (proxy)
|
|
79
|
+
if (proxy)
|
|
80
|
+
promises.push(browser.session.send("Browser.setBrowserProxy", toJugglerProxyOptions(proxy)));
|
|
58
81
|
await Promise.all(promises);
|
|
59
82
|
return browser;
|
|
60
83
|
}
|
|
61
|
-
constructor(parent, connection, options) {
|
|
62
|
-
super(parent, options);
|
|
63
|
-
this._connection = void 0;
|
|
64
|
-
this.session = void 0;
|
|
65
|
-
this._ffPages = void 0;
|
|
66
|
-
this._contexts = void 0;
|
|
67
|
-
this._version = '';
|
|
68
|
-
this._userAgent = '';
|
|
69
|
-
this._connection = connection;
|
|
70
|
-
this.session = connection.rootSession;
|
|
71
|
-
this._ffPages = new Map();
|
|
72
|
-
this._contexts = new Map();
|
|
73
|
-
this._connection.on(_ffConnection.ConnectionEvents.Disconnected, () => this._onDisconnect());
|
|
74
|
-
this.session.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this));
|
|
75
|
-
this.session.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this));
|
|
76
|
-
this.session.on('Browser.downloadCreated', this._onDownloadCreated.bind(this));
|
|
77
|
-
this.session.on('Browser.downloadFinished', this._onDownloadFinished.bind(this));
|
|
78
|
-
this.session.on('Browser.videoRecordingFinished', this._onVideoRecordingFinished.bind(this));
|
|
79
|
-
}
|
|
80
84
|
async _initVersion() {
|
|
81
|
-
const result = await this.session.send(
|
|
82
|
-
this._version = result.version.substring(result.version.indexOf(
|
|
85
|
+
const result = await this.session.send("Browser.getInfo");
|
|
86
|
+
this._version = result.version.substring(result.version.indexOf("/") + 1);
|
|
83
87
|
this._userAgent = result.userAgent;
|
|
84
88
|
}
|
|
85
89
|
isConnected() {
|
|
86
90
|
return !this._connection._closed;
|
|
87
91
|
}
|
|
88
92
|
async doCreateNewContext(options) {
|
|
89
|
-
if (options.isMobile)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
} = await this.session.send('Browser.createBrowserContext', {
|
|
93
|
-
removeOnDetach: true
|
|
94
|
-
});
|
|
93
|
+
if (options.isMobile)
|
|
94
|
+
throw new Error("options.isMobile is not supported in Firefox");
|
|
95
|
+
const { browserContextId } = await this.session.send("Browser.createBrowserContext", { removeOnDetach: true });
|
|
95
96
|
const context = new FFBrowserContext(this, browserContextId, options);
|
|
96
97
|
await context._initialize();
|
|
97
98
|
this._contexts.set(browserContextId, context);
|
|
@@ -112,147 +113,124 @@ class FFBrowser extends _browser.Browser {
|
|
|
112
113
|
ffPage.didClose();
|
|
113
114
|
}
|
|
114
115
|
_onAttachedToTarget(payload) {
|
|
115
|
-
const {
|
|
116
|
-
|
|
117
|
-
browserContextId,
|
|
118
|
-
openerId,
|
|
119
|
-
type
|
|
120
|
-
} = payload.targetInfo;
|
|
121
|
-
(0, _utils.assert)(type === 'page');
|
|
116
|
+
const { targetId, browserContextId, openerId, type } = payload.targetInfo;
|
|
117
|
+
(0, import_utils.assert)(type === "page");
|
|
122
118
|
const context = browserContextId ? this._contexts.get(browserContextId) : this._defaultContext;
|
|
123
|
-
(0,
|
|
119
|
+
(0, import_utils.assert)(context, `Unknown context id:${browserContextId}, _defaultContext: ${this._defaultContext}`);
|
|
124
120
|
const session = this._connection.createSession(payload.sessionId);
|
|
125
121
|
const opener = openerId ? this._ffPages.get(openerId) : null;
|
|
126
|
-
const ffPage = new
|
|
122
|
+
const ffPage = new import_ffPage.FFPage(session, context, opener);
|
|
127
123
|
this._ffPages.set(targetId, ffPage);
|
|
128
124
|
}
|
|
129
125
|
_onDownloadCreated(payload) {
|
|
130
126
|
const ffPage = this._ffPages.get(payload.pageTargetId);
|
|
131
|
-
if (!ffPage)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
ffPage._page._frameManager.frameAbortedNavigation(payload.frameId, 'Download is starting');
|
|
127
|
+
if (!ffPage)
|
|
128
|
+
return;
|
|
129
|
+
ffPage._page._frameManager.frameAbortedNavigation(payload.frameId, "Download is starting");
|
|
135
130
|
let originPage = ffPage._page.initializedOrUndefined();
|
|
136
|
-
// If it's a new window download, report it on the opener page.
|
|
137
131
|
if (!originPage) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (ffPage._opener) originPage = ffPage._opener._page.initializedOrUndefined();
|
|
132
|
+
ffPage._markAsError(new Error("Starting new page download"));
|
|
133
|
+
if (ffPage._opener)
|
|
134
|
+
originPage = ffPage._opener._page.initializedOrUndefined();
|
|
142
135
|
}
|
|
143
|
-
if (!originPage)
|
|
136
|
+
if (!originPage)
|
|
137
|
+
return;
|
|
144
138
|
this._downloadCreated(originPage, payload.uuid, payload.url, payload.suggestedFileName);
|
|
145
139
|
}
|
|
146
140
|
_onDownloadFinished(payload) {
|
|
147
|
-
const error = payload.canceled ?
|
|
141
|
+
const error = payload.canceled ? "canceled" : payload.error;
|
|
148
142
|
this._downloadFinished(payload.uuid, error);
|
|
149
143
|
}
|
|
150
144
|
_onVideoRecordingFinished(payload) {
|
|
151
|
-
|
|
152
|
-
(_this$_takeVideo = this._takeVideo(payload.screencastId)) === null || _this$_takeVideo === void 0 || _this$_takeVideo.reportFinished();
|
|
145
|
+
this._takeVideo(payload.screencastId)?.reportFinished();
|
|
153
146
|
}
|
|
154
147
|
_onDisconnect() {
|
|
155
|
-
for (const video of this._idToVideo.values())
|
|
148
|
+
for (const video of this._idToVideo.values())
|
|
149
|
+
video.artifact.reportFinished(new import_errors.TargetClosedError());
|
|
156
150
|
this._idToVideo.clear();
|
|
157
|
-
for (const ffPage of this._ffPages.values())
|
|
151
|
+
for (const ffPage of this._ffPages.values())
|
|
152
|
+
ffPage.didClose();
|
|
158
153
|
this._ffPages.clear();
|
|
159
154
|
this._didClose();
|
|
160
155
|
}
|
|
161
156
|
}
|
|
162
|
-
|
|
163
|
-
class FFBrowserContext extends _browserContext.BrowserContext {
|
|
157
|
+
class FFBrowserContext extends import_browserContext.BrowserContext {
|
|
164
158
|
constructor(browser, browserContextId, options) {
|
|
165
159
|
super(browser, options, browserContextId);
|
|
166
160
|
}
|
|
167
161
|
async _initialize() {
|
|
168
|
-
(0,
|
|
162
|
+
(0, import_utils.assert)(!this._ffPages().length);
|
|
169
163
|
const browserContextId = this._browserContextId;
|
|
170
|
-
const promises = [
|
|
171
|
-
|
|
172
|
-
name:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (this._options.acceptDownloads !==
|
|
176
|
-
promises.push(this._browser.session.send(
|
|
164
|
+
const promises = [
|
|
165
|
+
super._initialize(),
|
|
166
|
+
this._browser.session.send("Browser.addBinding", { browserContextId: this._browserContextId, name: import_page.PageBinding.kPlaywrightBinding, script: "" }),
|
|
167
|
+
this._updateInitScripts()
|
|
168
|
+
];
|
|
169
|
+
if (this._options.acceptDownloads !== "internal-browser-default") {
|
|
170
|
+
promises.push(this._browser.session.send("Browser.setDownloadOptions", {
|
|
177
171
|
browserContextId,
|
|
178
172
|
downloadOptions: {
|
|
179
|
-
behavior: this._options.acceptDownloads ===
|
|
173
|
+
behavior: this._options.acceptDownloads === "accept" ? "saveToDisk" : "cancel",
|
|
180
174
|
downloadsDir: this._browser.options.downloadsPath
|
|
181
175
|
}
|
|
182
176
|
}));
|
|
183
177
|
}
|
|
184
178
|
if (this._options.viewport) {
|
|
185
179
|
const viewport = {
|
|
186
|
-
viewportSize: {
|
|
187
|
-
width: this._options.viewport.width,
|
|
188
|
-
height: this._options.viewport.height
|
|
189
|
-
},
|
|
180
|
+
viewportSize: { width: this._options.viewport.width, height: this._options.viewport.height },
|
|
190
181
|
deviceScaleFactor: this._options.deviceScaleFactor || 1
|
|
191
182
|
};
|
|
192
|
-
promises.push(this._browser.session.send(
|
|
193
|
-
browserContextId,
|
|
194
|
-
viewport
|
|
195
|
-
}));
|
|
183
|
+
promises.push(this._browser.session.send("Browser.setDefaultViewport", { browserContextId, viewport }));
|
|
196
184
|
}
|
|
197
|
-
if (this._options.hasTouch)
|
|
198
|
-
browserContextId,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
if (this._options.
|
|
202
|
-
browserContextId,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if (this._options.
|
|
206
|
-
browserContextId,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (this._options.
|
|
210
|
-
browserContextId,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if (this._options.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (this._options.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
if (this._options.timezoneId) promises.push(this._browser.session.send('Browser.setTimezoneOverride', {
|
|
222
|
-
browserContextId,
|
|
223
|
-
timezoneId: this._options.timezoneId
|
|
224
|
-
}));
|
|
225
|
-
if (this._options.extraHTTPHeaders || this._options.locale) promises.push(this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []));
|
|
226
|
-
if (this._options.httpCredentials) promises.push(this.setHTTPCredentials(this._options.httpCredentials));
|
|
227
|
-
if (this._options.geolocation) promises.push(this.setGeolocation(this._options.geolocation));
|
|
228
|
-
if (this._options.offline) promises.push(this.setOffline(this._options.offline));
|
|
229
|
-
if (this._options.colorScheme !== 'no-override') {
|
|
230
|
-
promises.push(this._browser.session.send('Browser.setColorScheme', {
|
|
185
|
+
if (this._options.hasTouch)
|
|
186
|
+
promises.push(this._browser.session.send("Browser.setTouchOverride", { browserContextId, hasTouch: true }));
|
|
187
|
+
if (this._options.userAgent)
|
|
188
|
+
promises.push(this._browser.session.send("Browser.setUserAgentOverride", { browserContextId, userAgent: this._options.userAgent }));
|
|
189
|
+
if (this._options.bypassCSP)
|
|
190
|
+
promises.push(this._browser.session.send("Browser.setBypassCSP", { browserContextId, bypassCSP: true }));
|
|
191
|
+
if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)
|
|
192
|
+
promises.push(this._browser.session.send("Browser.setIgnoreHTTPSErrors", { browserContextId, ignoreHTTPSErrors: true }));
|
|
193
|
+
if (this._options.javaScriptEnabled === false)
|
|
194
|
+
promises.push(this._browser.session.send("Browser.setJavaScriptDisabled", { browserContextId, javaScriptDisabled: true }));
|
|
195
|
+
if (this._options.locale)
|
|
196
|
+
promises.push(this._browser.session.send("Browser.setLocaleOverride", { browserContextId, locale: this._options.locale }));
|
|
197
|
+
if (this._options.timezoneId)
|
|
198
|
+
promises.push(this._browser.session.send("Browser.setTimezoneOverride", { browserContextId, timezoneId: this._options.timezoneId }));
|
|
199
|
+
if (this._options.extraHTTPHeaders || this._options.locale)
|
|
200
|
+
promises.push(this.setExtraHTTPHeaders(this._options.extraHTTPHeaders || []));
|
|
201
|
+
if (this._options.httpCredentials)
|
|
202
|
+
promises.push(this.setHTTPCredentials(this._options.httpCredentials));
|
|
203
|
+
if (this._options.geolocation)
|
|
204
|
+
promises.push(this.setGeolocation(this._options.geolocation));
|
|
205
|
+
if (this._options.offline)
|
|
206
|
+
promises.push(this.setOffline(this._options.offline));
|
|
207
|
+
if (this._options.colorScheme !== "no-override") {
|
|
208
|
+
promises.push(this._browser.session.send("Browser.setColorScheme", {
|
|
231
209
|
browserContextId,
|
|
232
|
-
colorScheme: this._options.colorScheme !==
|
|
210
|
+
colorScheme: this._options.colorScheme !== void 0 ? this._options.colorScheme : "light"
|
|
233
211
|
}));
|
|
234
212
|
}
|
|
235
|
-
if (this._options.reducedMotion !==
|
|
236
|
-
promises.push(this._browser.session.send(
|
|
213
|
+
if (this._options.reducedMotion !== "no-override") {
|
|
214
|
+
promises.push(this._browser.session.send("Browser.setReducedMotion", {
|
|
237
215
|
browserContextId,
|
|
238
|
-
reducedMotion: this._options.reducedMotion !==
|
|
216
|
+
reducedMotion: this._options.reducedMotion !== void 0 ? this._options.reducedMotion : "no-preference"
|
|
239
217
|
}));
|
|
240
218
|
}
|
|
241
|
-
if (this._options.forcedColors !==
|
|
242
|
-
promises.push(this._browser.session.send(
|
|
219
|
+
if (this._options.forcedColors !== "no-override") {
|
|
220
|
+
promises.push(this._browser.session.send("Browser.setForcedColors", {
|
|
243
221
|
browserContextId,
|
|
244
|
-
forcedColors: this._options.forcedColors !==
|
|
222
|
+
forcedColors: this._options.forcedColors !== void 0 ? this._options.forcedColors : "none"
|
|
245
223
|
}));
|
|
246
224
|
}
|
|
247
|
-
if (this._options.contrast !==
|
|
248
|
-
promises.push(this._browser.session.send(
|
|
225
|
+
if (this._options.contrast !== "no-override") {
|
|
226
|
+
promises.push(this._browser.session.send("Browser.setContrast", {
|
|
249
227
|
browserContextId,
|
|
250
|
-
contrast: this._options.contrast !==
|
|
228
|
+
contrast: this._options.contrast !== void 0 ? this._options.contrast : "no-preference"
|
|
251
229
|
}));
|
|
252
230
|
}
|
|
253
231
|
if (this._options.recordVideo) {
|
|
254
232
|
promises.push(this._ensureVideosPath().then(() => {
|
|
255
|
-
return this._browser.session.send(
|
|
233
|
+
return this._browser.session.send("Browser.setVideoRecordingOptions", {
|
|
256
234
|
// validateBrowserContextOptions ensures correct video size.
|
|
257
235
|
options: {
|
|
258
236
|
...this._options.recordVideo.size,
|
|
@@ -264,7 +242,7 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
264
242
|
}
|
|
265
243
|
const proxy = this._options.proxyOverride || this._options.proxy;
|
|
266
244
|
if (proxy) {
|
|
267
|
-
promises.push(this._browser.session.send(
|
|
245
|
+
promises.push(this._browser.session.send("Browser.setContextProxy", {
|
|
268
246
|
browserContextId: this._browserContextId,
|
|
269
247
|
...toJugglerProxyOptions(proxy)
|
|
270
248
|
}));
|
|
@@ -272,120 +250,86 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
272
250
|
await Promise.all(promises);
|
|
273
251
|
}
|
|
274
252
|
_ffPages() {
|
|
275
|
-
return Array.from(this._browser._ffPages.values()).filter(ffPage => ffPage._browserContext === this);
|
|
253
|
+
return Array.from(this._browser._ffPages.values()).filter((ffPage) => ffPage._browserContext === this);
|
|
276
254
|
}
|
|
277
255
|
possiblyUninitializedPages() {
|
|
278
|
-
return this._ffPages().map(ffPage => ffPage._page);
|
|
256
|
+
return this._ffPages().map((ffPage) => ffPage._page);
|
|
279
257
|
}
|
|
280
258
|
async doCreateNewPage() {
|
|
281
|
-
(0,
|
|
282
|
-
const {
|
|
283
|
-
targetId
|
|
284
|
-
} = await this._browser.session.send('Browser.newPage', {
|
|
259
|
+
(0, import_browserContext.assertBrowserContextIsNotOwned)(this);
|
|
260
|
+
const { targetId } = await this._browser.session.send("Browser.newPage", {
|
|
285
261
|
browserContextId: this._browserContextId
|
|
286
|
-
}).catch(e => {
|
|
287
|
-
if (e.message.includes(
|
|
262
|
+
}).catch((e) => {
|
|
263
|
+
if (e.message.includes("Failed to override timezone"))
|
|
264
|
+
throw new Error(`Invalid timezone ID: ${this._options.timezoneId}`);
|
|
288
265
|
throw e;
|
|
289
266
|
});
|
|
290
267
|
return this._browser._ffPages.get(targetId)._page;
|
|
291
268
|
}
|
|
292
269
|
async doGetCookies(urls) {
|
|
293
|
-
const {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
browserContextId: this._browserContextId
|
|
297
|
-
});
|
|
298
|
-
return network.filterCookies(cookies.map(c => {
|
|
299
|
-
const copy = {
|
|
300
|
-
...c
|
|
301
|
-
};
|
|
270
|
+
const { cookies } = await this._browser.session.send("Browser.getCookies", { browserContextId: this._browserContextId });
|
|
271
|
+
return network.filterCookies(cookies.map((c) => {
|
|
272
|
+
const copy = { ...c };
|
|
302
273
|
delete copy.size;
|
|
303
274
|
delete copy.session;
|
|
304
275
|
return copy;
|
|
305
276
|
}), urls);
|
|
306
277
|
}
|
|
307
278
|
async addCookies(cookies) {
|
|
308
|
-
const cc = network.rewriteCookies(cookies).map(c => ({
|
|
279
|
+
const cc = network.rewriteCookies(cookies).map((c) => ({
|
|
309
280
|
...c,
|
|
310
|
-
expires: c.expires === -1 ?
|
|
281
|
+
expires: c.expires === -1 ? void 0 : c.expires
|
|
311
282
|
}));
|
|
312
|
-
await this._browser.session.send(
|
|
313
|
-
browserContextId: this._browserContextId,
|
|
314
|
-
cookies: cc
|
|
315
|
-
});
|
|
283
|
+
await this._browser.session.send("Browser.setCookies", { browserContextId: this._browserContextId, cookies: cc });
|
|
316
284
|
}
|
|
317
285
|
async doClearCookies() {
|
|
318
|
-
await this._browser.session.send(
|
|
319
|
-
browserContextId: this._browserContextId
|
|
320
|
-
});
|
|
286
|
+
await this._browser.session.send("Browser.clearCookies", { browserContextId: this._browserContextId });
|
|
321
287
|
}
|
|
322
288
|
async doGrantPermissions(origin, permissions) {
|
|
323
|
-
const webPermissionToProtocol = new Map([
|
|
324
|
-
|
|
289
|
+
const webPermissionToProtocol = /* @__PURE__ */ new Map([
|
|
290
|
+
["geolocation", "geo"],
|
|
291
|
+
["persistent-storage", "persistent-storage"],
|
|
292
|
+
["push", "push"],
|
|
293
|
+
["notifications", "desktop-notification"]
|
|
294
|
+
]);
|
|
295
|
+
const filtered = permissions.map((permission) => {
|
|
325
296
|
const protocolPermission = webPermissionToProtocol.get(permission);
|
|
326
|
-
if (!protocolPermission)
|
|
297
|
+
if (!protocolPermission)
|
|
298
|
+
throw new Error("Unknown permission: " + permission);
|
|
327
299
|
return protocolPermission;
|
|
328
300
|
});
|
|
329
|
-
await this._browser.session.send(
|
|
330
|
-
origin: origin,
|
|
331
|
-
browserContextId: this._browserContextId,
|
|
332
|
-
permissions: filtered
|
|
333
|
-
});
|
|
301
|
+
await this._browser.session.send("Browser.grantPermissions", { origin, browserContextId: this._browserContextId, permissions: filtered });
|
|
334
302
|
}
|
|
335
303
|
async doClearPermissions() {
|
|
336
|
-
await this._browser.session.send(
|
|
337
|
-
browserContextId: this._browserContextId
|
|
338
|
-
});
|
|
304
|
+
await this._browser.session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
|
|
339
305
|
}
|
|
340
306
|
async setGeolocation(geolocation) {
|
|
341
|
-
(0,
|
|
307
|
+
(0, import_browserContext.verifyGeolocation)(geolocation);
|
|
342
308
|
this._options.geolocation = geolocation;
|
|
343
|
-
await this._browser.session.send(
|
|
344
|
-
browserContextId: this._browserContextId,
|
|
345
|
-
geolocation: geolocation || null
|
|
346
|
-
});
|
|
309
|
+
await this._browser.session.send("Browser.setGeolocationOverride", { browserContextId: this._browserContextId, geolocation: geolocation || null });
|
|
347
310
|
}
|
|
348
311
|
async setExtraHTTPHeaders(headers) {
|
|
349
312
|
this._options.extraHTTPHeaders = headers;
|
|
350
313
|
let allHeaders = this._options.extraHTTPHeaders;
|
|
351
|
-
if (this._options.locale)
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
headers: allHeaders
|
|
355
|
-
});
|
|
314
|
+
if (this._options.locale)
|
|
315
|
+
allHeaders = network.mergeHeaders([allHeaders, network.singleHeader("Accept-Language", this._options.locale)]);
|
|
316
|
+
await this._browser.session.send("Browser.setExtraHTTPHeaders", { browserContextId: this._browserContextId, headers: allHeaders });
|
|
356
317
|
}
|
|
357
318
|
async setUserAgent(userAgent) {
|
|
358
|
-
await this._browser.session.send(
|
|
359
|
-
browserContextId: this._browserContextId,
|
|
360
|
-
userAgent: userAgent || null
|
|
361
|
-
});
|
|
319
|
+
await this._browser.session.send("Browser.setUserAgentOverride", { browserContextId: this._browserContextId, userAgent: userAgent || null });
|
|
362
320
|
}
|
|
363
321
|
async setOffline(offline) {
|
|
364
322
|
this._options.offline = offline;
|
|
365
|
-
await this._browser.session.send(
|
|
366
|
-
browserContextId: this._browserContextId,
|
|
367
|
-
override: offline ? 'offline' : 'online'
|
|
368
|
-
});
|
|
323
|
+
await this._browser.session.send("Browser.setOnlineOverride", { browserContextId: this._browserContextId, override: offline ? "offline" : "online" });
|
|
369
324
|
}
|
|
370
325
|
async doSetHTTPCredentials(httpCredentials) {
|
|
371
326
|
this._options.httpCredentials = httpCredentials;
|
|
372
327
|
let credentials = null;
|
|
373
328
|
if (httpCredentials) {
|
|
374
|
-
const {
|
|
375
|
-
|
|
376
|
-
password,
|
|
377
|
-
origin
|
|
378
|
-
} = httpCredentials;
|
|
379
|
-
credentials = {
|
|
380
|
-
username,
|
|
381
|
-
password,
|
|
382
|
-
origin
|
|
383
|
-
};
|
|
329
|
+
const { username, password, origin } = httpCredentials;
|
|
330
|
+
credentials = { username, password, origin };
|
|
384
331
|
}
|
|
385
|
-
await this._browser.session.send(
|
|
386
|
-
browserContextId: this._browserContextId,
|
|
387
|
-
credentials
|
|
388
|
-
});
|
|
332
|
+
await this._browser.session.send("Browser.setHTTPCredentials", { browserContextId: this._browserContextId, credentials });
|
|
389
333
|
}
|
|
390
334
|
async doAddInitScript(initScript) {
|
|
391
335
|
await this._updateInitScripts();
|
|
@@ -394,75 +338,67 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
394
338
|
await this._updateInitScripts();
|
|
395
339
|
}
|
|
396
340
|
async _updateInitScripts() {
|
|
397
|
-
const bindingScripts = [...this._pageBindings.values()].map(binding => binding.initScript.source);
|
|
398
|
-
const initScripts = this.initScripts.map(script => script.source);
|
|
399
|
-
await this._browser.session.send(
|
|
400
|
-
browserContextId: this._browserContextId,
|
|
401
|
-
scripts: [...bindingScripts, ...initScripts].map(script => ({
|
|
402
|
-
script
|
|
403
|
-
}))
|
|
404
|
-
});
|
|
341
|
+
const bindingScripts = [...this._pageBindings.values()].map((binding) => binding.initScript.source);
|
|
342
|
+
const initScripts = this.initScripts.map((script) => script.source);
|
|
343
|
+
await this._browser.session.send("Browser.setInitScripts", { browserContextId: this._browserContextId, scripts: [import_page.kBuiltinsScript.source, ...bindingScripts, ...initScripts].map((script) => ({ script })) });
|
|
405
344
|
}
|
|
406
345
|
async doUpdateRequestInterception() {
|
|
407
|
-
await Promise.all([
|
|
408
|
-
browserContextId: this._browserContextId,
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
onClosePersistent() {}
|
|
346
|
+
await Promise.all([
|
|
347
|
+
this._browser.session.send("Browser.setRequestInterception", { browserContextId: this._browserContextId, enabled: !!this._requestInterceptor }),
|
|
348
|
+
this._browser.session.send("Browser.setCacheDisabled", { browserContextId: this._browserContextId, cacheDisabled: !!this._requestInterceptor })
|
|
349
|
+
]);
|
|
350
|
+
}
|
|
351
|
+
onClosePersistent() {
|
|
352
|
+
}
|
|
416
353
|
async clearCache() {
|
|
417
|
-
|
|
418
|
-
await this._browser.session.send('Browser.clearCache');
|
|
354
|
+
await this._browser.session.send("Browser.clearCache");
|
|
419
355
|
}
|
|
420
356
|
async doClose(reason) {
|
|
421
357
|
if (!this._browserContextId) {
|
|
422
358
|
if (this._options.recordVideo) {
|
|
423
|
-
await this._browser.session.send(
|
|
424
|
-
options:
|
|
359
|
+
await this._browser.session.send("Browser.setVideoRecordingOptions", {
|
|
360
|
+
options: void 0,
|
|
425
361
|
browserContextId: this._browserContextId
|
|
426
362
|
});
|
|
427
363
|
}
|
|
428
|
-
|
|
429
|
-
await this._browser.close({
|
|
430
|
-
reason
|
|
431
|
-
});
|
|
364
|
+
await this._browser.close({ reason });
|
|
432
365
|
} else {
|
|
433
|
-
await this._browser.session.send(
|
|
434
|
-
browserContextId: this._browserContextId
|
|
435
|
-
});
|
|
366
|
+
await this._browser.session.send("Browser.removeBrowserContext", { browserContextId: this._browserContextId });
|
|
436
367
|
this._browser._contexts.delete(this._browserContextId);
|
|
437
368
|
}
|
|
438
369
|
}
|
|
439
370
|
async cancelDownload(uuid) {
|
|
440
|
-
await this._browser.session.send(
|
|
441
|
-
uuid
|
|
442
|
-
});
|
|
371
|
+
await this._browser.session.send("Browser.cancelDownload", { uuid });
|
|
443
372
|
}
|
|
444
373
|
}
|
|
445
|
-
exports.FFBrowserContext = FFBrowserContext;
|
|
446
374
|
function toJugglerProxyOptions(proxy) {
|
|
447
375
|
const proxyServer = new URL(proxy.server);
|
|
448
376
|
let port = parseInt(proxyServer.port, 10);
|
|
449
|
-
let type =
|
|
450
|
-
if (proxyServer.protocol ===
|
|
451
|
-
|
|
452
|
-
|
|
377
|
+
let type = "http";
|
|
378
|
+
if (proxyServer.protocol === "socks5:")
|
|
379
|
+
type = "socks";
|
|
380
|
+
else if (proxyServer.protocol === "socks4:")
|
|
381
|
+
type = "socks4";
|
|
382
|
+
else if (proxyServer.protocol === "https:")
|
|
383
|
+
type = "https";
|
|
384
|
+
if (proxyServer.port === "") {
|
|
385
|
+
if (proxyServer.protocol === "http:")
|
|
386
|
+
port = 80;
|
|
387
|
+
else if (proxyServer.protocol === "https:")
|
|
388
|
+
port = 443;
|
|
453
389
|
}
|
|
454
390
|
return {
|
|
455
391
|
type,
|
|
456
|
-
bypass: proxy.bypass ? proxy.bypass.split(
|
|
392
|
+
bypass: proxy.bypass ? proxy.bypass.split(",").map((domain) => domain.trim()) : [],
|
|
457
393
|
host: proxyServer.hostname,
|
|
458
394
|
port,
|
|
459
395
|
username: proxy.username,
|
|
460
396
|
password: proxy.password
|
|
461
397
|
};
|
|
462
398
|
}
|
|
463
|
-
|
|
464
|
-
//
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
};
|
|
399
|
+
const kBandaidFirefoxUserPrefs = {};
|
|
400
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
401
|
+
0 && (module.exports = {
|
|
402
|
+
FFBrowser,
|
|
403
|
+
FFBrowserContext
|
|
404
|
+
});
|