patchright-core 1.58.2 → 1.59.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/ThirdPartyNotices.txt +126 -650
- package/browsers.json +16 -14
- package/lib/bootstrap.js +77 -0
- package/lib/cli/browserActions.js +308 -0
- package/lib/cli/driver.js +3 -2
- package/lib/cli/installActions.js +171 -0
- package/lib/cli/program.js +47 -411
- package/lib/client/android.js +4 -4
- package/lib/client/api.js +3 -3
- package/lib/client/browser.js +8 -0
- package/lib/client/browserContext.js +22 -61
- package/lib/client/browserType.js +19 -51
- package/lib/client/cdpSession.js +6 -2
- package/lib/client/channelOwner.js +1 -1
- package/lib/client/clientHelper.js +2 -1
- package/lib/client/clock.js +0 -1
- package/lib/client/{webSocket.js → connect.js} +57 -7
- package/lib/client/connection.js +8 -4
- package/lib/client/consoleMessage.js +3 -0
- package/lib/client/debugger.js +57 -0
- package/lib/client/dialog.js +8 -1
- package/lib/client/disposable.js +76 -0
- package/lib/client/electron.js +1 -0
- package/lib/client/elementHandle.js +1 -4
- package/lib/client/events.js +3 -3
- package/lib/client/fetch.js +0 -1
- package/lib/client/frame.js +10 -23
- package/lib/client/harRouter.js +13 -1
- package/lib/client/jsHandle.js +4 -8
- package/lib/client/locator.js +13 -44
- package/lib/client/network.js +15 -16
- package/lib/client/page.js +41 -75
- package/lib/client/platform.js +0 -3
- package/lib/client/screencast.js +88 -0
- package/lib/client/selectors.js +3 -1
- package/lib/client/tracing.js +11 -5
- package/lib/client/video.js +13 -20
- package/lib/client/worker.js +6 -6
- package/lib/generated/bindingsControllerSource.js +1 -1
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/mcpBundle.js +0 -6
- package/lib/mcpBundleImpl.js +91 -0
- package/lib/protocol/validator.js +224 -138
- package/lib/protocol/validatorPrimitives.js +1 -1
- package/lib/remote/playwrightConnection.js +10 -8
- package/lib/remote/playwrightPipeServer.js +100 -0
- package/lib/remote/playwrightServer.js +13 -8
- package/lib/remote/playwrightWebSocketServer.js +73 -0
- package/lib/remote/serverTransport.js +96 -0
- package/lib/server/android/android.js +2 -2
- package/lib/server/bidi/bidiBrowser.js +30 -8
- package/lib/server/bidi/bidiChromium.js +18 -5
- package/lib/server/bidi/bidiNetworkManager.js +39 -11
- package/lib/server/bidi/bidiPage.js +31 -15
- package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
- package/lib/server/browser.js +84 -21
- package/lib/server/browserContext.js +110 -58
- package/lib/server/browserType.js +14 -12
- package/lib/server/chromium/chromium.js +15 -12
- package/lib/server/chromium/chromiumSwitches.js +14 -2
- package/lib/server/chromium/crBrowser.js +20 -17
- package/lib/server/chromium/crCoverage.js +1 -13
- package/lib/server/chromium/crDevTools.js +1 -0
- package/lib/server/chromium/crNetworkManager.js +12 -267
- package/lib/server/chromium/crPage.js +67 -199
- package/lib/server/chromium/crServiceWorker.js +7 -14
- package/lib/server/clock.js +33 -41
- package/lib/server/console.js +5 -1
- package/lib/server/debugController.js +12 -6
- package/lib/server/debugger.js +40 -47
- package/lib/server/deviceDescriptorsSource.json +137 -137
- package/lib/server/dispatchers/browserContextDispatcher.js +29 -30
- package/lib/server/dispatchers/browserDispatcher.js +11 -5
- package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
- package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
- package/lib/server/dispatchers/dispatcher.js +1 -1
- package/lib/server/dispatchers/disposableDispatcher.js +39 -0
- package/lib/server/dispatchers/electronDispatcher.js +2 -1
- package/lib/server/dispatchers/frameDispatcher.js +6 -6
- package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
- package/lib/server/dispatchers/networkDispatchers.js +6 -5
- package/lib/server/dispatchers/pageDispatcher.js +101 -38
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
- package/lib/server/disposable.js +41 -0
- package/lib/server/dom.js +44 -26
- package/lib/server/download.js +3 -2
- package/lib/server/electron/electron.js +12 -7
- package/lib/server/firefox/ffBrowser.js +9 -19
- package/lib/server/firefox/ffInput.js +21 -5
- package/lib/server/firefox/ffNetworkManager.js +2 -2
- package/lib/server/firefox/ffPage.js +24 -27
- package/lib/server/frameSelectors.js +5 -172
- package/lib/server/frames.js +234 -687
- package/lib/server/har/harRecorder.js +2 -2
- package/lib/server/har/harTracer.js +5 -4
- package/lib/server/input.js +49 -4
- package/lib/server/instrumentation.js +5 -0
- package/lib/server/javascript.js +6 -26
- package/lib/server/launchApp.js +1 -3
- package/lib/server/localUtils.js +6 -6
- package/lib/server/network.js +9 -8
- package/lib/server/overlay.js +138 -0
- package/lib/server/page.js +157 -105
- package/lib/server/progress.js +6 -0
- package/lib/server/recorder/recorderApp.js +9 -8
- package/lib/server/recorder.js +76 -40
- package/lib/server/registry/index.js +55 -82
- package/lib/server/registry/nativeDeps.js +1 -0
- package/lib/server/screencast.js +90 -143
- package/lib/server/screenshotter.js +0 -6
- package/lib/server/trace/recorder/snapshotter.js +8 -17
- package/lib/server/trace/recorder/snapshotterInjected.js +82 -20
- package/lib/server/trace/recorder/tracing.js +87 -44
- package/lib/server/trace/viewer/traceViewer.js +3 -4
- package/lib/server/usKeyboardLayout.js +7 -0
- package/lib/server/utils/comparators.js +1 -1
- package/lib/server/utils/disposable.js +32 -0
- package/lib/server/utils/eventsHelper.js +3 -1
- package/lib/server/utils/fileUtils.js +16 -2
- package/lib/server/utils/happyEyeballs.js +15 -12
- package/lib/server/utils/hostPlatform.js +0 -15
- package/lib/server/utils/httpServer.js +5 -3
- package/lib/server/utils/network.js +2 -1
- package/lib/server/utils/nodePlatform.js +0 -6
- package/lib/server/utils/processLauncher.js +6 -5
- package/lib/server/utils/zipFile.js +2 -2
- package/lib/server/videoRecorder.js +82 -12
- package/lib/server/webkit/wkBrowser.js +1 -6
- package/lib/server/webkit/wkPage.js +27 -25
- package/lib/server/webkit/wkWorkers.js +2 -1
- package/lib/serverRegistry.js +156 -0
- package/lib/tools/backend/browserBackend.js +79 -0
- package/lib/tools/backend/common.js +63 -0
- package/lib/tools/backend/config.js +41 -0
- package/lib/tools/backend/console.js +66 -0
- package/lib/tools/backend/context.js +296 -0
- package/lib/tools/backend/cookies.js +152 -0
- package/lib/tools/backend/devtools.js +69 -0
- package/lib/tools/backend/dialogs.js +59 -0
- package/lib/tools/backend/evaluate.js +64 -0
- package/lib/tools/backend/files.js +60 -0
- package/lib/tools/backend/form.js +64 -0
- package/lib/tools/backend/keyboard.js +155 -0
- package/lib/tools/backend/logFile.js +95 -0
- package/lib/tools/backend/mouse.js +168 -0
- package/lib/tools/backend/navigate.js +106 -0
- package/lib/tools/backend/network.js +135 -0
- package/lib/tools/backend/pdf.js +48 -0
- package/lib/tools/backend/response.js +305 -0
- package/lib/tools/backend/route.js +140 -0
- package/lib/tools/backend/runCode.js +77 -0
- package/lib/tools/backend/screenshot.js +88 -0
- package/lib/tools/backend/sessionLog.js +74 -0
- package/lib/tools/backend/snapshot.js +208 -0
- package/lib/tools/backend/storage.js +68 -0
- package/lib/tools/backend/tab.js +445 -0
- package/lib/tools/backend/tabs.js +67 -0
- package/lib/tools/backend/tool.js +47 -0
- package/lib/tools/backend/tools.js +102 -0
- package/lib/tools/backend/tracing.js +78 -0
- package/lib/tools/backend/utils.js +83 -0
- package/lib/tools/backend/verify.js +151 -0
- package/lib/tools/backend/video.js +98 -0
- package/lib/tools/backend/wait.js +63 -0
- package/lib/tools/backend/webstorage.js +223 -0
- package/lib/tools/cli-client/cli.js +6 -0
- package/lib/tools/cli-client/help.json +399 -0
- package/lib/tools/cli-client/minimist.js +128 -0
- package/lib/tools/cli-client/program.js +350 -0
- package/lib/tools/cli-client/registry.js +176 -0
- package/lib/tools/cli-client/session.js +289 -0
- package/lib/tools/cli-client/skill/SKILL.md +328 -0
- package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
- package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
- package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
- package/lib/tools/cli-client/skill/references/running-code.md +231 -0
- package/lib/tools/cli-client/skill/references/session-management.md +169 -0
- package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
- package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
- package/lib/tools/cli-client/skill/references/tracing.md +139 -0
- package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
- package/lib/tools/cli-daemon/command.js +73 -0
- package/lib/tools/cli-daemon/commands.js +956 -0
- package/lib/tools/cli-daemon/daemon.js +157 -0
- package/lib/tools/cli-daemon/helpGenerator.js +177 -0
- package/lib/tools/cli-daemon/program.js +129 -0
- package/lib/tools/dashboard/appIcon.png +0 -0
- package/lib/tools/dashboard/dashboardApp.js +284 -0
- package/lib/tools/dashboard/dashboardController.js +296 -0
- package/lib/tools/exports.js +60 -0
- package/lib/tools/mcp/browserFactory.js +233 -0
- package/lib/tools/mcp/cdpRelay.js +352 -0
- package/lib/tools/mcp/cli-stub.js +7 -0
- package/lib/tools/mcp/config.d.js +16 -0
- package/lib/tools/mcp/config.js +446 -0
- package/lib/tools/mcp/configIni.js +189 -0
- package/lib/tools/mcp/extensionContextFactory.js +55 -0
- package/lib/tools/mcp/index.js +62 -0
- package/lib/tools/mcp/log.js +35 -0
- package/lib/tools/mcp/program.js +107 -0
- package/lib/tools/mcp/protocol.js +28 -0
- package/lib/tools/mcp/watchdog.js +44 -0
- package/lib/tools/trace/SKILL.md +171 -0
- package/lib/{server/trace/viewer/traceParser.js → tools/trace/installSkill.js} +15 -39
- package/lib/tools/trace/traceActions.js +142 -0
- package/lib/tools/trace/traceAttachments.js +69 -0
- package/lib/tools/trace/traceCli.js +87 -0
- package/lib/tools/trace/traceConsole.js +97 -0
- package/lib/tools/trace/traceErrors.js +55 -0
- package/lib/tools/trace/traceOpen.js +69 -0
- package/lib/tools/trace/traceParser.js +96 -0
- package/lib/tools/trace/traceRequests.js +182 -0
- package/lib/tools/trace/traceScreenshot.js +68 -0
- package/lib/tools/trace/traceSnapshot.js +149 -0
- package/lib/tools/trace/traceUtils.js +153 -0
- package/lib/tools/utils/connect.js +32 -0
- package/lib/tools/utils/mcp/http.js +152 -0
- package/lib/tools/utils/mcp/server.js +230 -0
- package/lib/tools/utils/mcp/tool.js +47 -0
- package/lib/tools/utils/socketConnection.js +108 -0
- package/lib/utils/isomorphic/formatUtils.js +64 -0
- package/lib/utils/isomorphic/jsonSchema.js +89 -0
- package/lib/utils/isomorphic/mimeType.js +7 -2
- package/lib/utils/isomorphic/protocolFormatter.js +2 -2
- package/lib/utils/isomorphic/protocolMetainfo.js +127 -106
- package/lib/utils/isomorphic/stringUtils.js +3 -3
- package/lib/utils/isomorphic/timeoutRunner.js +3 -3
- package/lib/utils/isomorphic/trace/snapshotRenderer.js +35 -42
- package/lib/utils/isomorphic/trace/traceLoader.js +15 -14
- package/lib/utils/isomorphic/trace/traceModel.js +3 -2
- package/lib/utils/isomorphic/trace/traceModernizer.js +1 -0
- package/lib/utils/isomorphic/urlMatch.js +54 -1
- package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
- package/lib/utils.js +6 -2
- package/lib/utilsBundle.js +3 -21
- package/lib/utilsBundleImpl/index.js +132 -133
- package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
- package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
- package/lib/vite/dashboard/index.html +28 -0
- package/lib/vite/htmlReport/index.html +2 -70
- package/lib/vite/htmlReport/report.css +1 -0
- package/lib/vite/htmlReport/report.js +72 -0
- package/lib/vite/recorder/assets/{codeMirrorModule-CFUTFUO7.js → codeMirrorModule-C8KMvO9L.js} +20 -20
- package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-BVA4h_ZY.js → codeMirrorModule-DS0FLvoc.js} +20 -20
- package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
- package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
- package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.C5466mMT.js} +1 -1
- package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
- package/lib/vite/traceViewer/index.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +4 -4
- package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundleImpl.js +2 -2
- package/lib/zodBundle.js +39 -0
- package/lib/zodBundleImpl.js +40 -0
- package/package.json +6 -1
- package/types/protocol.d.ts +947 -51
- package/types/types.d.ts +854 -74
- package/lib/client/pageAgent.js +0 -64
- package/lib/mcpBundleImpl/index.js +0 -147
- package/lib/server/agent/actionRunner.js +0 -335
- package/lib/server/agent/actions.js +0 -128
- package/lib/server/agent/codegen.js +0 -111
- package/lib/server/agent/context.js +0 -150
- package/lib/server/agent/expectTools.js +0 -156
- package/lib/server/agent/pageAgent.js +0 -204
- package/lib/server/agent/performTools.js +0 -262
- package/lib/server/agent/tool.js +0 -109
- package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
- package/lib/server/pageBinding.js +0 -87
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
- package/lib/vite/recorder/assets/index-CVkBxsGf.js +0 -193
- package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +0 -266
- package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
- package/lib/vite/traceViewer/uiMode.fyrXARf2.js +0 -5
- /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
- /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
|
@@ -101,7 +101,7 @@ const tBinary = (arg, path, context) => {
|
|
|
101
101
|
return arg.toString("base64");
|
|
102
102
|
}
|
|
103
103
|
if (context.binary === "buffer") {
|
|
104
|
-
if (!(arg instanceof Buffer))
|
|
104
|
+
if (!(arg instanceof Buffer) && !(arg instanceof Object))
|
|
105
105
|
throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);
|
|
106
106
|
return arg;
|
|
107
107
|
}
|
|
@@ -29,10 +29,10 @@ var import_profiler = require("../server/utils/profiler");
|
|
|
29
29
|
var import_utils = require("../utils");
|
|
30
30
|
var import_debugLogger = require("../server/utils/debugLogger");
|
|
31
31
|
class PlaywrightConnection {
|
|
32
|
-
constructor(semaphore,
|
|
32
|
+
constructor(semaphore, transport, controller, playwright, initialize, id) {
|
|
33
33
|
this._cleanups = [];
|
|
34
34
|
this._disconnected = false;
|
|
35
|
-
this.
|
|
35
|
+
this._transport = transport;
|
|
36
36
|
this._semaphore = semaphore;
|
|
37
37
|
this._id = id;
|
|
38
38
|
this._profileName = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -40,16 +40,16 @@ class PlaywrightConnection {
|
|
|
40
40
|
this._dispatcherConnection = new import_server.DispatcherConnection();
|
|
41
41
|
this._dispatcherConnection.onmessage = async (message) => {
|
|
42
42
|
await lock;
|
|
43
|
-
if (
|
|
43
|
+
if (!transport.isClosed()) {
|
|
44
44
|
const messageString = JSON.stringify(message);
|
|
45
45
|
if (import_debugLogger.debugLogger.isEnabled("server:channel"))
|
|
46
46
|
import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} SEND \u25BA ${messageString}`);
|
|
47
47
|
if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
|
|
48
48
|
this.logServerMetadata(message, messageString, "SEND");
|
|
49
|
-
|
|
49
|
+
transport.send(messageString);
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
|
|
52
|
+
transport.on("message", async (message) => {
|
|
53
53
|
await lock;
|
|
54
54
|
const messageString = Buffer.from(message).toString();
|
|
55
55
|
const jsonMessage = JSON.parse(messageString);
|
|
@@ -59,8 +59,8 @@ class PlaywrightConnection {
|
|
|
59
59
|
this.logServerMetadata(jsonMessage, messageString, "RECV");
|
|
60
60
|
this._dispatcherConnection.dispatch(jsonMessage);
|
|
61
61
|
});
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
transport.on("close", () => this._onDisconnect());
|
|
63
|
+
transport.on("error", (error) => this._onDisconnect(error));
|
|
64
64
|
if (controller) {
|
|
65
65
|
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse controller mode`);
|
|
66
66
|
this._root = new import_debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
|
|
@@ -90,6 +90,8 @@ class PlaywrightConnection {
|
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
async _onDisconnect(error) {
|
|
93
|
+
if (this._disconnected)
|
|
94
|
+
return;
|
|
93
95
|
this._disconnected = true;
|
|
94
96
|
import_debugLogger.debugLogger.log("server", `[${this._id}] disconnected. error: ${error}`);
|
|
95
97
|
await this._root.stopPendingOperations(new Error("Disconnected")).catch(() => {
|
|
@@ -118,7 +120,7 @@ class PlaywrightConnection {
|
|
|
118
120
|
return;
|
|
119
121
|
import_debugLogger.debugLogger.log("server", `[${this._id}] force closing connection: ${reason?.reason || ""} (${reason?.code || 0})`);
|
|
120
122
|
try {
|
|
121
|
-
this.
|
|
123
|
+
this._transport.close(reason);
|
|
122
124
|
} catch (e) {
|
|
123
125
|
}
|
|
124
126
|
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
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 playwrightPipeServer_exports = {};
|
|
30
|
+
__export(playwrightPipeServer_exports, {
|
|
31
|
+
PlaywrightPipeServer: () => PlaywrightPipeServer
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(playwrightPipeServer_exports);
|
|
34
|
+
var import_net = __toESM(require("net"));
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_playwrightConnection = require("./playwrightConnection");
|
|
37
|
+
var import_serverTransport = require("./serverTransport");
|
|
38
|
+
var import_debugLogger = require("../server/utils/debugLogger");
|
|
39
|
+
var import_browser = require("../server/browser");
|
|
40
|
+
var import_utils = require("../utils");
|
|
41
|
+
class PlaywrightPipeServer {
|
|
42
|
+
constructor(browser) {
|
|
43
|
+
this._connections = /* @__PURE__ */ new Set();
|
|
44
|
+
this._connectionId = 0;
|
|
45
|
+
this._browser = browser;
|
|
46
|
+
browser.on(import_browser.Browser.Events.Disconnected, () => this.close());
|
|
47
|
+
}
|
|
48
|
+
async listen(pipeName) {
|
|
49
|
+
if (!pipeName.startsWith("\\\\.\\pipe\\")) {
|
|
50
|
+
try {
|
|
51
|
+
import_fs.default.unlinkSync(pipeName);
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
this._server = import_net.default.createServer((socket) => {
|
|
56
|
+
const id = String(++this._connectionId);
|
|
57
|
+
import_debugLogger.debugLogger.log("server", `[${id}] pipe client connected`);
|
|
58
|
+
const transport = new import_serverTransport.SocketServerTransport(socket);
|
|
59
|
+
const connection = new import_playwrightConnection.PlaywrightConnection(
|
|
60
|
+
new import_utils.Semaphore(1),
|
|
61
|
+
transport,
|
|
62
|
+
false,
|
|
63
|
+
this._browser.attribution.playwright,
|
|
64
|
+
() => this._initPreLaunchedBrowserMode(id),
|
|
65
|
+
id
|
|
66
|
+
);
|
|
67
|
+
this._connections.add(connection);
|
|
68
|
+
transport.on("close", () => this._connections.delete(connection));
|
|
69
|
+
});
|
|
70
|
+
(0, import_utils.decorateServer)(this._server);
|
|
71
|
+
await new Promise((resolve, reject) => {
|
|
72
|
+
this._server.listen(pipeName, () => resolve());
|
|
73
|
+
this._server.on("error", reject);
|
|
74
|
+
});
|
|
75
|
+
import_debugLogger.debugLogger.log("server", `Pipe server listening at ${pipeName}`);
|
|
76
|
+
}
|
|
77
|
+
async _initPreLaunchedBrowserMode(id) {
|
|
78
|
+
import_debugLogger.debugLogger.log("server", `[${id}] engaged pre-launched (browser) pipe mode`);
|
|
79
|
+
return {
|
|
80
|
+
preLaunchedBrowser: this._browser,
|
|
81
|
+
sharedBrowser: true,
|
|
82
|
+
denyLaunch: true
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async close() {
|
|
86
|
+
if (!this._server)
|
|
87
|
+
return;
|
|
88
|
+
import_debugLogger.debugLogger.log("server", "closing pipe server");
|
|
89
|
+
for (const connection of this._connections)
|
|
90
|
+
await connection.close({ code: 1001, reason: "Server closing" });
|
|
91
|
+
this._connections.clear();
|
|
92
|
+
await new Promise((f) => this._server.close(() => f()));
|
|
93
|
+
this._server = void 0;
|
|
94
|
+
import_debugLogger.debugLogger.log("server", "closed pipe server");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
98
|
+
0 && (module.exports = {
|
|
99
|
+
PlaywrightPipeServer
|
|
100
|
+
});
|
|
@@ -22,6 +22,7 @@ __export(playwrightServer_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(playwrightServer_exports);
|
|
24
24
|
var import_playwrightConnection = require("./playwrightConnection");
|
|
25
|
+
var import_serverTransport = require("./serverTransport");
|
|
25
26
|
var import_playwright = require("../server/playwright");
|
|
26
27
|
var import_semaphore = require("../utils/isomorphic/semaphore");
|
|
27
28
|
var import_time = require("../utils/isomorphic/time");
|
|
@@ -86,6 +87,8 @@ ${uaError}` };
|
|
|
86
87
|
const isExtension = this._options.mode === "extension";
|
|
87
88
|
const allowFSPaths = isExtension;
|
|
88
89
|
launchOptions = filterLaunchOptions(launchOptions, allowFSPaths);
|
|
90
|
+
if (this._options.artifactsDir)
|
|
91
|
+
launchOptions.artifactsDir = this._options.artifactsDir;
|
|
89
92
|
if (isExtension) {
|
|
90
93
|
const connectFilter = url.searchParams.get("connect");
|
|
91
94
|
if (connectFilter) {
|
|
@@ -93,7 +96,7 @@ ${uaError}` };
|
|
|
93
96
|
throw new Error(`Unknown connect filter: ${connectFilter}`);
|
|
94
97
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
95
98
|
browserSemaphore,
|
|
96
|
-
ws,
|
|
99
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
97
100
|
false,
|
|
98
101
|
this._playwright,
|
|
99
102
|
() => this._initConnectMode(id, connectFilter, browserName, launchOptions),
|
|
@@ -103,7 +106,7 @@ ${uaError}` };
|
|
|
103
106
|
if (url.searchParams.has("debug-controller")) {
|
|
104
107
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
105
108
|
controllerSemaphore,
|
|
106
|
-
ws,
|
|
109
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
107
110
|
true,
|
|
108
111
|
this._playwright,
|
|
109
112
|
async () => {
|
|
@@ -114,7 +117,7 @@ ${uaError}` };
|
|
|
114
117
|
}
|
|
115
118
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
116
119
|
reuseBrowserSemaphore,
|
|
117
|
-
ws,
|
|
120
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
118
121
|
false,
|
|
119
122
|
this._playwright,
|
|
120
123
|
() => this._initReuseBrowsersMode(browserName, launchOptions, id),
|
|
@@ -125,7 +128,7 @@ ${uaError}` };
|
|
|
125
128
|
if (this._options.preLaunchedBrowser) {
|
|
126
129
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
127
130
|
browserSemaphore,
|
|
128
|
-
ws,
|
|
131
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
129
132
|
false,
|
|
130
133
|
this._playwright,
|
|
131
134
|
() => this._initPreLaunchedBrowserMode(id),
|
|
@@ -134,7 +137,7 @@ ${uaError}` };
|
|
|
134
137
|
}
|
|
135
138
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
136
139
|
browserSemaphore,
|
|
137
|
-
ws,
|
|
140
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
138
141
|
false,
|
|
139
142
|
this._playwright,
|
|
140
143
|
() => this._initPreLaunchedAndroidMode(id),
|
|
@@ -143,7 +146,7 @@ ${uaError}` };
|
|
|
143
146
|
}
|
|
144
147
|
return new import_playwrightConnection.PlaywrightConnection(
|
|
145
148
|
browserSemaphore,
|
|
146
|
-
ws,
|
|
149
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
147
150
|
false,
|
|
148
151
|
this._playwright,
|
|
149
152
|
() => this._initLaunchBrowserMode(browserName, proxyValue, launchOptions, id),
|
|
@@ -313,7 +316,8 @@ function filterLaunchOptions(options, allowFSPaths) {
|
|
|
313
316
|
firefoxUserPrefs: options.firefoxUserPrefs,
|
|
314
317
|
slowMo: options.slowMo,
|
|
315
318
|
executablePath: (0, import_utils.isUnderTest)() || allowFSPaths ? options.executablePath : void 0,
|
|
316
|
-
downloadsPath: allowFSPaths ? options.downloadsPath : void 0
|
|
319
|
+
downloadsPath: allowFSPaths ? options.downloadsPath : void 0,
|
|
320
|
+
artifactsDir: (0, import_utils.isUnderTest)() || allowFSPaths ? options.artifactsDir : void 0
|
|
317
321
|
};
|
|
318
322
|
}
|
|
319
323
|
const defaultLaunchOptions = {
|
|
@@ -326,7 +330,8 @@ const defaultLaunchOptions = {
|
|
|
326
330
|
const optionsThatAllowBrowserReuse = [
|
|
327
331
|
"headless",
|
|
328
332
|
"timeout",
|
|
329
|
-
"tracesDir"
|
|
333
|
+
"tracesDir",
|
|
334
|
+
"artifactsDir"
|
|
330
335
|
];
|
|
331
336
|
// Annotate the CommonJS export names for ESM import in node:
|
|
332
337
|
0 && (module.exports = {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var playwrightWebSocketServer_exports = {};
|
|
20
|
+
__export(playwrightWebSocketServer_exports, {
|
|
21
|
+
PlaywrightWebSocketServer: () => PlaywrightWebSocketServer
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(playwrightWebSocketServer_exports);
|
|
24
|
+
var import_playwrightConnection = require("./playwrightConnection");
|
|
25
|
+
var import_serverTransport = require("./serverTransport");
|
|
26
|
+
var import_debugLogger = require("../server/utils/debugLogger");
|
|
27
|
+
var import_browser = require("../server/browser");
|
|
28
|
+
var import_utils = require("../utils");
|
|
29
|
+
var import_wsServer = require("../server/utils/wsServer");
|
|
30
|
+
class PlaywrightWebSocketServer {
|
|
31
|
+
constructor(browser, path) {
|
|
32
|
+
this._browser = browser;
|
|
33
|
+
browser.on(import_browser.Browser.Events.Disconnected, () => this.close());
|
|
34
|
+
const semaphore = new import_utils.Semaphore(Infinity);
|
|
35
|
+
this._wsServer = new import_wsServer.WSServer({
|
|
36
|
+
onRequest: (request, response) => {
|
|
37
|
+
response.end("Running");
|
|
38
|
+
},
|
|
39
|
+
onUpgrade: () => void 0,
|
|
40
|
+
onHeaders: () => {
|
|
41
|
+
},
|
|
42
|
+
onConnection: (request, url, ws, id) => {
|
|
43
|
+
import_debugLogger.debugLogger.log("server", `[${id}] ws client connected`);
|
|
44
|
+
return new import_playwrightConnection.PlaywrightConnection(
|
|
45
|
+
semaphore,
|
|
46
|
+
new import_serverTransport.WebSocketServerTransport(ws),
|
|
47
|
+
false,
|
|
48
|
+
this._browser.attribution.playwright,
|
|
49
|
+
() => this._initPreLaunchedBrowserMode(id),
|
|
50
|
+
id
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async _initPreLaunchedBrowserMode(id) {
|
|
56
|
+
import_debugLogger.debugLogger.log("server", `[${id}] engaged pre-launched (browser) ws mode`);
|
|
57
|
+
return {
|
|
58
|
+
preLaunchedBrowser: this._browser,
|
|
59
|
+
sharedBrowser: true,
|
|
60
|
+
denyLaunch: true
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async listen(port = 0, hostname, path) {
|
|
64
|
+
return await this._wsServer.listen(port, hostname, path || "/");
|
|
65
|
+
}
|
|
66
|
+
async close() {
|
|
67
|
+
await this._wsServer.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
PlaywrightWebSocketServer
|
|
73
|
+
});
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var serverTransport_exports = {};
|
|
20
|
+
__export(serverTransport_exports, {
|
|
21
|
+
SocketServerTransport: () => SocketServerTransport,
|
|
22
|
+
WebSocketServerTransport: () => WebSocketServerTransport
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(serverTransport_exports);
|
|
25
|
+
var import_events = require("events");
|
|
26
|
+
class WebSocketServerTransport {
|
|
27
|
+
constructor(ws) {
|
|
28
|
+
this._ws = ws;
|
|
29
|
+
}
|
|
30
|
+
send(message) {
|
|
31
|
+
this._ws.send(message);
|
|
32
|
+
}
|
|
33
|
+
close(reason) {
|
|
34
|
+
this._ws.close(reason?.code, reason?.reason);
|
|
35
|
+
}
|
|
36
|
+
on(event, handler) {
|
|
37
|
+
this._ws.on(event, handler);
|
|
38
|
+
}
|
|
39
|
+
isClosed() {
|
|
40
|
+
return this._ws.readyState === this._ws.CLOSING || this._ws.readyState === this._ws.CLOSED;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
class SocketServerTransport extends import_events.EventEmitter {
|
|
44
|
+
constructor(socket) {
|
|
45
|
+
super();
|
|
46
|
+
this._closed = false;
|
|
47
|
+
this._pendingBuffers = [];
|
|
48
|
+
this._socket = socket;
|
|
49
|
+
socket.on("data", (buffer) => this._dispatch(buffer));
|
|
50
|
+
socket.on("close", () => {
|
|
51
|
+
this._closed = true;
|
|
52
|
+
super.emit("close");
|
|
53
|
+
});
|
|
54
|
+
socket.on("error", (error) => {
|
|
55
|
+
super.emit("error", error);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
send(message) {
|
|
59
|
+
if (this._closed)
|
|
60
|
+
return;
|
|
61
|
+
this._socket.write(message);
|
|
62
|
+
this._socket.write("\0");
|
|
63
|
+
}
|
|
64
|
+
close(reason) {
|
|
65
|
+
if (this._closed)
|
|
66
|
+
return;
|
|
67
|
+
this._closed = true;
|
|
68
|
+
this._socket.end();
|
|
69
|
+
}
|
|
70
|
+
isClosed() {
|
|
71
|
+
return this._closed;
|
|
72
|
+
}
|
|
73
|
+
_dispatch(buffer) {
|
|
74
|
+
let end = buffer.indexOf("\0");
|
|
75
|
+
if (end === -1) {
|
|
76
|
+
this._pendingBuffers.push(buffer);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this._pendingBuffers.push(buffer.slice(0, end));
|
|
80
|
+
const message = Buffer.concat(this._pendingBuffers).toString();
|
|
81
|
+
super.emit("message", message);
|
|
82
|
+
let start = end + 1;
|
|
83
|
+
end = buffer.indexOf("\0", start);
|
|
84
|
+
while (end !== -1) {
|
|
85
|
+
super.emit("message", buffer.toString(void 0, start, end));
|
|
86
|
+
start = end + 1;
|
|
87
|
+
end = buffer.indexOf("\0", start);
|
|
88
|
+
}
|
|
89
|
+
this._pendingBuffers = [buffer.slice(start)];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
93
|
+
0 && (module.exports = {
|
|
94
|
+
SocketServerTransport,
|
|
95
|
+
WebSocketServerTransport
|
|
96
|
+
});
|
|
@@ -261,7 +261,7 @@ class AndroidDevice extends import_instrumentation.SdkObject {
|
|
|
261
261
|
const proxyBypassRules = [];
|
|
262
262
|
if (proxy.bypass)
|
|
263
263
|
proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
|
|
264
|
-
if (
|
|
264
|
+
if ((0, import_crBrowser.shouldProxyLoopback)(proxy.bypass))
|
|
265
265
|
proxyBypassRules.push("<-loopback>");
|
|
266
266
|
if (proxyBypassRules.length > 0)
|
|
267
267
|
chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
|
|
@@ -294,7 +294,7 @@ class AndroidDevice extends import_instrumentation.SdkObject {
|
|
|
294
294
|
});
|
|
295
295
|
const browserOptions = {
|
|
296
296
|
name: "clank",
|
|
297
|
-
|
|
297
|
+
browserType: "chromium",
|
|
298
298
|
slowMo: 0,
|
|
299
299
|
persistent: { ...options, noDefaultViewport: true },
|
|
300
300
|
artifactsDir,
|
|
@@ -48,6 +48,7 @@ class BidiBrowser extends import_browser.Browser {
|
|
|
48
48
|
super(parent, options);
|
|
49
49
|
this._contexts = /* @__PURE__ */ new Map();
|
|
50
50
|
this._bidiPages = /* @__PURE__ */ new Map();
|
|
51
|
+
this._cacheBehavior = "default";
|
|
51
52
|
this._connection = new import_bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
52
53
|
this._browserSession = this._connection.browserSession;
|
|
53
54
|
this._eventListeners = [
|
|
@@ -84,6 +85,7 @@ class BidiBrowser extends import_browser.Browser {
|
|
|
84
85
|
"input"
|
|
85
86
|
]
|
|
86
87
|
});
|
|
88
|
+
await browser._browserSession.send("network.addIntercept", { phases: [bidi.Network.InterceptPhase.AuthRequired] });
|
|
87
89
|
await browser._browserSession.send("network.addDataCollector", {
|
|
88
90
|
dataTypes: [bidi.Network.DataType.Response],
|
|
89
91
|
maxEncodedDataSize: 2e7
|
|
@@ -124,6 +126,13 @@ class BidiBrowser extends import_browser.Browser {
|
|
|
124
126
|
isConnected() {
|
|
125
127
|
return !this._connection.isClosed();
|
|
126
128
|
}
|
|
129
|
+
async updateCacheBehavior() {
|
|
130
|
+
const cacheBehavior = [...this._contexts.values()].some((context) => context.requestInterceptors.length > 0) ? "bypass" : "default";
|
|
131
|
+
if (this._cacheBehavior !== cacheBehavior) {
|
|
132
|
+
await this._browserSession.send("network.setCacheBehavior", { cacheBehavior });
|
|
133
|
+
this._cacheBehavior = cacheBehavior;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
127
136
|
_onBrowsingContextCreated(event) {
|
|
128
137
|
if (event.parent) {
|
|
129
138
|
const parentFrameId = event.parent;
|
|
@@ -135,6 +144,7 @@ class BidiBrowser extends import_browser.Browser {
|
|
|
135
144
|
page2._getFrameNode(frame).then((node) => {
|
|
136
145
|
const attributes = node?.value?.attributes;
|
|
137
146
|
frame._name = attributes?.name ?? attributes?.id ?? "";
|
|
147
|
+
}, () => {
|
|
138
148
|
});
|
|
139
149
|
return;
|
|
140
150
|
}
|
|
@@ -198,6 +208,11 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
198
208
|
const promises = [
|
|
199
209
|
super._initialize()
|
|
200
210
|
];
|
|
211
|
+
const downloadBehavior = this._options.acceptDownloads === "accept" ? { type: "allowed", destinationFolder: this._browser.options.downloadsPath } : { type: "denied" };
|
|
212
|
+
promises.push(this._browser._browserSession.send("browser.setDownloadBehavior", {
|
|
213
|
+
downloadBehavior,
|
|
214
|
+
userContexts: [this._userContextId()]
|
|
215
|
+
}));
|
|
201
216
|
promises.push(this.doUpdateDefaultViewport());
|
|
202
217
|
if (this._options.geolocation)
|
|
203
218
|
promises.push(this.setGeolocation(this._options.geolocation));
|
|
@@ -223,6 +238,8 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
223
238
|
promises.push(this.doUpdateExtraHTTPHeaders());
|
|
224
239
|
if (this._options.permissions)
|
|
225
240
|
promises.push(this.doGrantPermissions("*", this._options.permissions));
|
|
241
|
+
if (this._options.offline)
|
|
242
|
+
promises.push(this.doUpdateOffline());
|
|
226
243
|
await Promise.all(promises);
|
|
227
244
|
}
|
|
228
245
|
possiblyUninitializedPages() {
|
|
@@ -269,7 +286,7 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
269
286
|
};
|
|
270
287
|
return this._browser._browserSession.send(
|
|
271
288
|
"storage.setCookie",
|
|
272
|
-
{ cookie, partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
289
|
+
{ cookie, partition: { type: "storageKey", userContext: this._browserContextId, sourceOrigin: c.partitionKey } }
|
|
273
290
|
);
|
|
274
291
|
});
|
|
275
292
|
await Promise.all(promises);
|
|
@@ -347,6 +364,10 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
347
364
|
});
|
|
348
365
|
}
|
|
349
366
|
async doUpdateOffline() {
|
|
367
|
+
await this._browser._browserSession.send("emulation.setNetworkConditions", {
|
|
368
|
+
networkConditions: this._options.offline ? { type: "offline" } : null,
|
|
369
|
+
userContexts: [this._userContextId()]
|
|
370
|
+
});
|
|
350
371
|
}
|
|
351
372
|
async doSetHTTPCredentials(httpCredentials) {
|
|
352
373
|
this._options.httpCredentials = httpCredentials;
|
|
@@ -372,18 +393,18 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
372
393
|
await Promise.all(ids.map((script) => this._browser._browserSession.send("script.removePreloadScript", { script })));
|
|
373
394
|
}
|
|
374
395
|
async doUpdateRequestInterception() {
|
|
396
|
+
let interceptPromise = Promise.resolve(void 0);
|
|
375
397
|
if (this.requestInterceptors.length > 0 && !this._interceptId) {
|
|
376
|
-
|
|
377
|
-
phases: [bidi.Network.InterceptPhase.BeforeRequestSent]
|
|
378
|
-
|
|
379
|
-
});
|
|
380
|
-
this._interceptId = intercept;
|
|
398
|
+
interceptPromise = this._browser._browserSession.send("network.addIntercept", {
|
|
399
|
+
phases: [bidi.Network.InterceptPhase.BeforeRequestSent]
|
|
400
|
+
}).then(({ intercept }) => this._interceptId = intercept);
|
|
381
401
|
}
|
|
382
402
|
if (this.requestInterceptors.length === 0 && this._interceptId) {
|
|
383
403
|
const intercept = this._interceptId;
|
|
384
404
|
this._interceptId = void 0;
|
|
385
|
-
|
|
405
|
+
interceptPromise = this._browser._browserSession.send("network.removeIntercept", { intercept });
|
|
386
406
|
}
|
|
407
|
+
await Promise.all([this._browser.updateCacheBehavior(), interceptPromise]);
|
|
387
408
|
}
|
|
388
409
|
async doUpdateDefaultViewport() {
|
|
389
410
|
if (!this._options.viewport && !this._options.screen)
|
|
@@ -430,7 +451,7 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
430
451
|
userContexts: [this._userContextId()]
|
|
431
452
|
}));
|
|
432
453
|
promises.push(...this._bidiPages().map((page) => {
|
|
433
|
-
const realms = [...page.
|
|
454
|
+
const realms = [...page._contextIdToContext].filter(([realm, context]) => context.world === "main").map(([realm, context]) => realm);
|
|
434
455
|
return Promise.all(realms.map((realm) => {
|
|
435
456
|
return page._session.send("script.callFunction", {
|
|
436
457
|
functionDeclaration,
|
|
@@ -455,6 +476,7 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
455
476
|
await this._browser._browserSession.send("browser.removeUserContext", {
|
|
456
477
|
userContext: this._browserContextId
|
|
457
478
|
});
|
|
479
|
+
await Promise.all(this._bidiPages().map((bidiPage) => bidiPage._page.closedPromise));
|
|
458
480
|
this._browser._contexts.delete(this._browserContextId);
|
|
459
481
|
}
|
|
460
482
|
async cancelDownload(uuid) {
|
|
@@ -38,7 +38,7 @@ var import_bidiBrowser = require("./bidiBrowser");
|
|
|
38
38
|
var import_bidiConnection = require("./bidiConnection");
|
|
39
39
|
var import_chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
40
40
|
var import_chromium = require("../chromium/chromium");
|
|
41
|
-
var
|
|
41
|
+
var import_crBrowser = require("../chromium/crBrowser");
|
|
42
42
|
class BidiChromium extends import_browserType.BrowserType {
|
|
43
43
|
constructor(parent) {
|
|
44
44
|
super(parent, "chromium");
|
|
@@ -107,7 +107,7 @@ class BidiChromium extends import_browserType.BrowserType {
|
|
|
107
107
|
if (args.find((arg) => !arg.startsWith("-")))
|
|
108
108
|
throw new Error("Arguments can not specify page to be opened");
|
|
109
109
|
const chromeArguments = [...(0, import_chromiumSwitches.chromiumSwitches)(options.assistantMode)];
|
|
110
|
-
if (import_os.default.platform()
|
|
110
|
+
if (import_os.default.platform() === "darwin") {
|
|
111
111
|
chromeArguments.push("--enable-unsafe-swiftshader");
|
|
112
112
|
}
|
|
113
113
|
if (options.headless) {
|
|
@@ -129,11 +129,9 @@ class BidiChromium extends import_browserType.BrowserType {
|
|
|
129
129
|
}
|
|
130
130
|
chromeArguments.push(`--proxy-server=${proxy.server}`);
|
|
131
131
|
const proxyBypassRules = [];
|
|
132
|
-
if (options.socksProxyPort)
|
|
133
|
-
proxyBypassRules.push("<-loopback>");
|
|
134
132
|
if (proxy.bypass)
|
|
135
133
|
proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
|
|
136
|
-
if (
|
|
134
|
+
if (options.socksProxyPort || (0, import_crBrowser.shouldProxyLoopback)(proxy.bypass))
|
|
137
135
|
proxyBypassRules.push("<-loopback>");
|
|
138
136
|
if (proxyBypassRules.length > 0)
|
|
139
137
|
chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
|
|
@@ -141,6 +139,21 @@ class BidiChromium extends import_browserType.BrowserType {
|
|
|
141
139
|
chromeArguments.push(...args);
|
|
142
140
|
return chromeArguments;
|
|
143
141
|
}
|
|
142
|
+
getExecutableName(options) {
|
|
143
|
+
switch (options.channel) {
|
|
144
|
+
case "bidi-chromium":
|
|
145
|
+
return "chromium";
|
|
146
|
+
case "bidi-chrome":
|
|
147
|
+
return "chrome";
|
|
148
|
+
case "bidi-chrome-beta":
|
|
149
|
+
return "chrome-beta";
|
|
150
|
+
case "bidi-chrome-dev":
|
|
151
|
+
return "chrome-dev";
|
|
152
|
+
case "bidi-chrome-canary":
|
|
153
|
+
return "chrome-canary";
|
|
154
|
+
}
|
|
155
|
+
throw new Error(`Unsupported Bidi Chromium channel: ${options.channel}`);
|
|
156
|
+
}
|
|
144
157
|
}
|
|
145
158
|
const kBidiOverCdpWrapper = Symbol("kBidiConnectionWrapper");
|
|
146
159
|
// Annotate the CommonJS export names for ESM import in node:
|