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,67 +1,90 @@
|
|
|
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 bidiBrowser_exports = {};
|
|
30
|
+
__export(bidiBrowser_exports, {
|
|
31
|
+
BidiBrowser: () => BidiBrowser,
|
|
32
|
+
BidiBrowserContext: () => BidiBrowserContext,
|
|
33
|
+
Network: () => Network
|
|
5
34
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var network =
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var bidi =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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 {
|
|
35
|
+
module.exports = __toCommonJS(bidiBrowser_exports);
|
|
36
|
+
var import_eventsHelper = require("../utils/eventsHelper");
|
|
37
|
+
var import_browser = require("../browser");
|
|
38
|
+
var import_browserContext = require("../browserContext");
|
|
39
|
+
var network = __toESM(require("../network"));
|
|
40
|
+
var import_bidiConnection = require("./bidiConnection");
|
|
41
|
+
var import_bidiNetworkManager = require("./bidiNetworkManager");
|
|
42
|
+
var import_bidiPage = require("./bidiPage");
|
|
43
|
+
var bidi = __toESM(require("./third_party/bidiProtocol"));
|
|
44
|
+
class BidiBrowser extends import_browser.Browser {
|
|
45
|
+
constructor(parent, transport, options) {
|
|
46
|
+
super(parent, options);
|
|
47
|
+
this._contexts = /* @__PURE__ */ new Map();
|
|
48
|
+
this._bidiPages = /* @__PURE__ */ new Map();
|
|
49
|
+
this._connection = new import_bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
50
|
+
this._browserSession = this._connection.browserSession;
|
|
51
|
+
this._eventListeners = [
|
|
52
|
+
import_eventsHelper.eventsHelper.addEventListener(this._browserSession, "browsingContext.contextCreated", this._onBrowsingContextCreated.bind(this)),
|
|
53
|
+
import_eventsHelper.eventsHelper.addEventListener(this._browserSession, "script.realmDestroyed", this._onScriptRealmDestroyed.bind(this))
|
|
54
|
+
];
|
|
55
|
+
}
|
|
34
56
|
static async connect(parent, transport, options) {
|
|
35
57
|
const browser = new BidiBrowser(parent, transport, options);
|
|
36
|
-
if (options.__testHookOnConnectToBrowser)
|
|
58
|
+
if (options.__testHookOnConnectToBrowser)
|
|
59
|
+
await options.__testHookOnConnectToBrowser();
|
|
37
60
|
let proxy;
|
|
38
61
|
if (options.proxy) {
|
|
39
62
|
proxy = {
|
|
40
|
-
proxyType:
|
|
63
|
+
proxyType: "manual"
|
|
41
64
|
};
|
|
42
|
-
const url = new URL(options.proxy.server);
|
|
65
|
+
const url = new URL(options.proxy.server);
|
|
43
66
|
switch (url.protocol) {
|
|
44
|
-
case
|
|
67
|
+
case "http:":
|
|
45
68
|
proxy.httpProxy = url.host;
|
|
46
69
|
break;
|
|
47
|
-
case
|
|
70
|
+
case "https:":
|
|
48
71
|
proxy.httpsProxy = url.host;
|
|
49
72
|
break;
|
|
50
|
-
case
|
|
73
|
+
case "socks4:":
|
|
51
74
|
proxy.socksProxy = url.host;
|
|
52
75
|
proxy.socksVersion = 4;
|
|
53
76
|
break;
|
|
54
|
-
case
|
|
77
|
+
case "socks5:":
|
|
55
78
|
proxy.socksProxy = url.host;
|
|
56
79
|
proxy.socksVersion = 5;
|
|
57
80
|
break;
|
|
58
81
|
default:
|
|
59
|
-
throw new Error(
|
|
82
|
+
throw new Error("Invalid proxy server protocol: " + options.proxy.server);
|
|
60
83
|
}
|
|
61
|
-
if (options.proxy.bypass)
|
|
62
|
-
|
|
84
|
+
if (options.proxy.bypass)
|
|
85
|
+
proxy.noProxy = options.proxy.bypass.split(",");
|
|
63
86
|
}
|
|
64
|
-
browser._bidiSessionInfo = await browser._browserSession.send(
|
|
87
|
+
browser._bidiSessionInfo = await browser._browserSession.send("session.new", {
|
|
65
88
|
capabilities: {
|
|
66
89
|
alwaysMatch: {
|
|
67
90
|
acceptInsecureCerts: false,
|
|
@@ -73,37 +96,28 @@ class BidiBrowser extends _browser.Browser {
|
|
|
73
96
|
}
|
|
74
97
|
}
|
|
75
98
|
});
|
|
76
|
-
await browser._browserSession.send(
|
|
77
|
-
events: [
|
|
99
|
+
await browser._browserSession.send("session.subscribe", {
|
|
100
|
+
events: [
|
|
101
|
+
"browsingContext",
|
|
102
|
+
"network",
|
|
103
|
+
"log",
|
|
104
|
+
"script"
|
|
105
|
+
]
|
|
78
106
|
});
|
|
79
107
|
if (options.persistent) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
108
|
+
const context = new BidiBrowserContext(browser, void 0, options.persistent);
|
|
109
|
+
browser._defaultContext = context;
|
|
110
|
+
await context._initialize();
|
|
83
111
|
const page = await browser._defaultContext.doCreateNewPage();
|
|
84
112
|
await page.waitForInitializedOrError();
|
|
85
113
|
}
|
|
86
114
|
return browser;
|
|
87
115
|
}
|
|
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
116
|
_onDisconnect() {
|
|
101
117
|
this._didClose();
|
|
102
118
|
}
|
|
103
119
|
async doCreateNewContext(options) {
|
|
104
|
-
const {
|
|
105
|
-
userContext
|
|
106
|
-
} = await this._browserSession.send('browser.createUserContext', {});
|
|
120
|
+
const { userContext } = await this._browserSession.send("browser.createUserContext", {});
|
|
107
121
|
const context = new BidiBrowserContext(this, userContext, options);
|
|
108
122
|
await context._initialize();
|
|
109
123
|
this._contexts.set(userContext, context);
|
|
@@ -124,23 +138,27 @@ class BidiBrowser extends _browser.Browser {
|
|
|
124
138
|
_onBrowsingContextCreated(event) {
|
|
125
139
|
if (event.parent) {
|
|
126
140
|
const parentFrameId = event.parent;
|
|
127
|
-
for (const
|
|
128
|
-
const parentFrame =
|
|
129
|
-
if (!parentFrame)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
141
|
+
for (const page2 of this._bidiPages.values()) {
|
|
142
|
+
const parentFrame = page2._page._frameManager.frame(parentFrameId);
|
|
143
|
+
if (!parentFrame)
|
|
144
|
+
continue;
|
|
145
|
+
page2._session.addFrameBrowsingContext(event.context);
|
|
146
|
+
page2._page._frameManager.frameAttached(event.context, parentFrameId);
|
|
147
|
+
const frame = page2._page._frameManager.frame(event.context);
|
|
148
|
+
if (frame)
|
|
149
|
+
frame._url = event.url;
|
|
134
150
|
return;
|
|
135
151
|
}
|
|
136
152
|
return;
|
|
137
153
|
}
|
|
138
154
|
let context = this._contexts.get(event.userContext);
|
|
139
|
-
if (!context)
|
|
140
|
-
|
|
155
|
+
if (!context)
|
|
156
|
+
context = this._defaultContext;
|
|
157
|
+
if (!context)
|
|
158
|
+
return;
|
|
141
159
|
const session = this._connection.createMainFrameBrowsingContextSession(event.context);
|
|
142
160
|
const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);
|
|
143
|
-
const page = new
|
|
161
|
+
const page = new import_bidiPage.BidiPage(context, session, opener || null);
|
|
144
162
|
page._page.mainFrame()._url = event.url;
|
|
145
163
|
this._bidiPages.set(event.context, page);
|
|
146
164
|
}
|
|
@@ -150,165 +168,213 @@ class BidiBrowser extends _browser.Browser {
|
|
|
150
168
|
const parentFrameId = event.parent;
|
|
151
169
|
for (const page of this._bidiPages.values()) {
|
|
152
170
|
const parentFrame = page._page._frameManager.frame(parentFrameId);
|
|
153
|
-
if (!parentFrame)
|
|
171
|
+
if (!parentFrame)
|
|
172
|
+
continue;
|
|
154
173
|
page._page._frameManager.frameDetached(event.context);
|
|
155
174
|
return;
|
|
156
175
|
}
|
|
157
176
|
return;
|
|
158
177
|
}
|
|
159
178
|
const bidiPage = this._bidiPages.get(event.context);
|
|
160
|
-
if (!bidiPage)
|
|
179
|
+
if (!bidiPage)
|
|
180
|
+
return;
|
|
161
181
|
bidiPage.didClose();
|
|
162
182
|
this._bidiPages.delete(event.context);
|
|
163
183
|
}
|
|
164
184
|
_onScriptRealmDestroyed(event) {
|
|
165
185
|
for (const page of this._bidiPages.values()) {
|
|
166
|
-
if (page._onRealmDestroyed(event))
|
|
186
|
+
if (page._onRealmDestroyed(event))
|
|
187
|
+
return;
|
|
167
188
|
}
|
|
168
189
|
}
|
|
169
190
|
}
|
|
170
|
-
|
|
171
|
-
class BidiBrowserContext extends _browserContext.BrowserContext {
|
|
191
|
+
class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
172
192
|
constructor(browser, browserContextId, options) {
|
|
173
193
|
super(browser, options, browserContextId);
|
|
194
|
+
this._initScriptIds = [];
|
|
174
195
|
this._authenticateProxyViaHeader();
|
|
175
196
|
}
|
|
176
197
|
_bidiPages() {
|
|
177
|
-
return [...this._browser._bidiPages.values()].filter(bidiPage => bidiPage._browserContext === this);
|
|
198
|
+
return [...this._browser._bidiPages.values()].filter((bidiPage) => bidiPage._browserContext === this);
|
|
199
|
+
}
|
|
200
|
+
async _initialize() {
|
|
201
|
+
const promises = [
|
|
202
|
+
super._initialize(),
|
|
203
|
+
this._installMainBinding()
|
|
204
|
+
];
|
|
205
|
+
if (this._options.viewport) {
|
|
206
|
+
promises.push(this._browser._browserSession.send("browsingContext.setViewport", {
|
|
207
|
+
viewport: {
|
|
208
|
+
width: this._options.viewport.width,
|
|
209
|
+
height: this._options.viewport.height
|
|
210
|
+
},
|
|
211
|
+
devicePixelRatio: this._options.deviceScaleFactor || 1,
|
|
212
|
+
userContexts: [this._userContextId()]
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
await Promise.all(promises);
|
|
216
|
+
}
|
|
217
|
+
// TODO: consider calling this only when bindings are added.
|
|
218
|
+
async _installMainBinding() {
|
|
219
|
+
const functionDeclaration = import_bidiPage.addMainBinding.toString();
|
|
220
|
+
const args = [{
|
|
221
|
+
type: "channel",
|
|
222
|
+
value: {
|
|
223
|
+
channel: import_bidiPage.kPlaywrightBindingChannel,
|
|
224
|
+
ownership: bidi.Script.ResultOwnership.Root
|
|
225
|
+
}
|
|
226
|
+
}];
|
|
227
|
+
await this._browser._browserSession.send("script.addPreloadScript", {
|
|
228
|
+
functionDeclaration,
|
|
229
|
+
arguments: args,
|
|
230
|
+
userContexts: [this._userContextId()]
|
|
231
|
+
});
|
|
178
232
|
}
|
|
179
233
|
possiblyUninitializedPages() {
|
|
180
|
-
return this._bidiPages().map(bidiPage => bidiPage._page);
|
|
234
|
+
return this._bidiPages().map((bidiPage) => bidiPage._page);
|
|
181
235
|
}
|
|
182
236
|
async doCreateNewPage() {
|
|
183
|
-
(0,
|
|
184
|
-
const {
|
|
185
|
-
context
|
|
186
|
-
} = await this._browser._browserSession.send('browsingContext.create', {
|
|
237
|
+
(0, import_browserContext.assertBrowserContextIsNotOwned)(this);
|
|
238
|
+
const { context } = await this._browser._browserSession.send("browsingContext.create", {
|
|
187
239
|
type: bidi.BrowsingContext.CreateType.Window,
|
|
188
240
|
userContext: this._browserContextId
|
|
189
241
|
});
|
|
190
242
|
return this._browser._bidiPages.get(context)._page;
|
|
191
243
|
}
|
|
192
244
|
async doGetCookies(urls) {
|
|
193
|
-
const {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
userContext: this._browserContextId
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
return network.filterCookies(cookies.map(c => {
|
|
202
|
-
var _c$expiry;
|
|
245
|
+
const { cookies } = await this._browser._browserSession.send(
|
|
246
|
+
"storage.getCookies",
|
|
247
|
+
{ partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
248
|
+
);
|
|
249
|
+
return network.filterCookies(cookies.map((c) => {
|
|
203
250
|
const copy = {
|
|
204
251
|
name: c.name,
|
|
205
|
-
value: (0,
|
|
252
|
+
value: (0, import_bidiNetworkManager.bidiBytesValueToString)(c.value),
|
|
206
253
|
domain: c.domain,
|
|
207
254
|
path: c.path,
|
|
208
255
|
httpOnly: c.httpOnly,
|
|
209
256
|
secure: c.secure,
|
|
210
|
-
expires:
|
|
211
|
-
sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) :
|
|
257
|
+
expires: c.expiry ?? -1,
|
|
258
|
+
sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) : "None"
|
|
212
259
|
};
|
|
213
260
|
return copy;
|
|
214
261
|
}), urls);
|
|
215
262
|
}
|
|
216
263
|
async addCookies(cookies) {
|
|
217
264
|
cookies = network.rewriteCookies(cookies);
|
|
218
|
-
const promises = cookies.map(c => {
|
|
265
|
+
const promises = cookies.map((c) => {
|
|
219
266
|
const cookie = {
|
|
220
267
|
name: c.name,
|
|
221
|
-
value: {
|
|
222
|
-
type: 'string',
|
|
223
|
-
value: c.value
|
|
224
|
-
},
|
|
268
|
+
value: { type: "string", value: c.value },
|
|
225
269
|
domain: c.domain,
|
|
226
270
|
path: c.path,
|
|
227
271
|
httpOnly: c.httpOnly,
|
|
228
272
|
secure: c.secure,
|
|
229
273
|
sameSite: c.sameSite && toBidiSameSite(c.sameSite),
|
|
230
|
-
expiry: c.expires === -1 || c.expires ===
|
|
274
|
+
expiry: c.expires === -1 || c.expires === void 0 ? void 0 : Math.round(c.expires)
|
|
231
275
|
};
|
|
232
|
-
return this._browser._browserSession.send(
|
|
233
|
-
|
|
234
|
-
partition: {
|
|
235
|
-
|
|
236
|
-
userContext: this._browserContextId
|
|
237
|
-
}
|
|
238
|
-
});
|
|
276
|
+
return this._browser._browserSession.send(
|
|
277
|
+
"storage.setCookie",
|
|
278
|
+
{ cookie, partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
279
|
+
);
|
|
239
280
|
});
|
|
240
281
|
await Promise.all(promises);
|
|
241
282
|
}
|
|
242
283
|
async doClearCookies() {
|
|
243
|
-
await this._browser._browserSession.send(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
284
|
+
await this._browser._browserSession.send(
|
|
285
|
+
"storage.deleteCookies",
|
|
286
|
+
{ partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
async doGrantPermissions(origin, permissions) {
|
|
290
|
+
}
|
|
291
|
+
async doClearPermissions() {
|
|
292
|
+
}
|
|
293
|
+
async setGeolocation(geolocation) {
|
|
294
|
+
}
|
|
295
|
+
async setExtraHTTPHeaders(headers) {
|
|
296
|
+
}
|
|
297
|
+
async setUserAgent(userAgent) {
|
|
298
|
+
}
|
|
299
|
+
async setOffline(offline) {
|
|
249
300
|
}
|
|
250
|
-
async doGrantPermissions(origin, permissions) {}
|
|
251
|
-
async doClearPermissions() {}
|
|
252
|
-
async setGeolocation(geolocation) {}
|
|
253
|
-
async setExtraHTTPHeaders(headers) {}
|
|
254
|
-
async setUserAgent(userAgent) {}
|
|
255
|
-
async setOffline(offline) {}
|
|
256
301
|
async doSetHTTPCredentials(httpCredentials) {
|
|
257
302
|
this._options.httpCredentials = httpCredentials;
|
|
258
|
-
for (const page of this.pages())
|
|
303
|
+
for (const page of this.pages())
|
|
304
|
+
await page._delegate.updateHttpCredentials();
|
|
259
305
|
}
|
|
260
306
|
async doAddInitScript(initScript) {
|
|
261
|
-
await
|
|
307
|
+
const { script } = await this._browser._browserSession.send("script.addPreloadScript", {
|
|
308
|
+
// TODO: remove function call from the source.
|
|
309
|
+
functionDeclaration: `() => { return ${initScript.source} }`,
|
|
310
|
+
userContexts: [this._browserContextId || "default"]
|
|
311
|
+
});
|
|
312
|
+
if (!initScript.internal)
|
|
313
|
+
this._initScriptIds.push(script);
|
|
314
|
+
}
|
|
315
|
+
async doRemoveNonInternalInitScripts() {
|
|
316
|
+
const promise = Promise.all(this._initScriptIds.map((script) => this._browser._browserSession.send("script.removePreloadScript", { script })));
|
|
317
|
+
this._initScriptIds = [];
|
|
318
|
+
await promise;
|
|
319
|
+
}
|
|
320
|
+
async doUpdateRequestInterception() {
|
|
321
|
+
}
|
|
322
|
+
onClosePersistent() {
|
|
323
|
+
}
|
|
324
|
+
async clearCache() {
|
|
262
325
|
}
|
|
263
|
-
async doRemoveNonInternalInitScripts() {}
|
|
264
|
-
async doUpdateRequestInterception() {}
|
|
265
|
-
onClosePersistent() {}
|
|
266
|
-
async clearCache() {}
|
|
267
326
|
async doClose(reason) {
|
|
268
327
|
if (!this._browserContextId) {
|
|
269
|
-
|
|
270
|
-
await this._browser.close({
|
|
271
|
-
reason
|
|
272
|
-
});
|
|
328
|
+
await this._browser.close({ reason });
|
|
273
329
|
return;
|
|
274
330
|
}
|
|
275
|
-
await this._browser._browserSession.send(
|
|
331
|
+
await this._browser._browserSession.send("browser.removeUserContext", {
|
|
276
332
|
userContext: this._browserContextId
|
|
277
333
|
});
|
|
278
334
|
this._browser._contexts.delete(this._browserContextId);
|
|
279
335
|
}
|
|
280
|
-
async cancelDownload(uuid) {
|
|
336
|
+
async cancelDownload(uuid) {
|
|
337
|
+
}
|
|
338
|
+
_userContextId() {
|
|
339
|
+
if (this._browserContextId)
|
|
340
|
+
return this._browserContextId;
|
|
341
|
+
return "default";
|
|
342
|
+
}
|
|
281
343
|
}
|
|
282
|
-
exports.BidiBrowserContext = BidiBrowserContext;
|
|
283
344
|
function fromBidiSameSite(sameSite) {
|
|
284
345
|
switch (sameSite) {
|
|
285
|
-
case
|
|
286
|
-
return
|
|
287
|
-
case
|
|
288
|
-
return
|
|
289
|
-
case
|
|
290
|
-
return
|
|
291
|
-
}
|
|
292
|
-
return
|
|
346
|
+
case "strict":
|
|
347
|
+
return "Strict";
|
|
348
|
+
case "lax":
|
|
349
|
+
return "Lax";
|
|
350
|
+
case "none":
|
|
351
|
+
return "None";
|
|
352
|
+
}
|
|
353
|
+
return "None";
|
|
293
354
|
}
|
|
294
355
|
function toBidiSameSite(sameSite) {
|
|
295
356
|
switch (sameSite) {
|
|
296
|
-
case
|
|
357
|
+
case "Strict":
|
|
297
358
|
return bidi.Network.SameSite.Strict;
|
|
298
|
-
case
|
|
359
|
+
case "Lax":
|
|
299
360
|
return bidi.Network.SameSite.Lax;
|
|
300
|
-
case
|
|
361
|
+
case "None":
|
|
301
362
|
return bidi.Network.SameSite.None;
|
|
302
363
|
}
|
|
303
364
|
return bidi.Network.SameSite.None;
|
|
304
365
|
}
|
|
305
|
-
|
|
306
|
-
(
|
|
307
|
-
let SameSite
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
}({});
|
|
313
|
-
|
|
314
|
-
|
|
366
|
+
var Network;
|
|
367
|
+
((Network2) => {
|
|
368
|
+
let SameSite;
|
|
369
|
+
((SameSite2) => {
|
|
370
|
+
SameSite2["Strict"] = "strict";
|
|
371
|
+
SameSite2["Lax"] = "lax";
|
|
372
|
+
SameSite2["None"] = "none";
|
|
373
|
+
})(SameSite = Network2.SameSite || (Network2.SameSite = {}));
|
|
374
|
+
})(Network || (Network = {}));
|
|
375
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
376
|
+
0 && (module.exports = {
|
|
377
|
+
BidiBrowser,
|
|
378
|
+
BidiBrowserContext,
|
|
379
|
+
Network
|
|
380
|
+
});
|