@checkly/playwright-core 1.42.17 → 1.47.11
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 +144 -109
- package/browsers.json +15 -25
- package/lib/androidServerImpl.js +1 -1
- package/lib/browserServerImpl.js +1 -1
- package/lib/cli/driver.js +1 -3
- package/lib/cli/program.js +5 -10
- package/lib/client/android.js +1 -1
- package/lib/client/api.js +7 -0
- package/lib/client/browserContext.js +37 -5
- package/lib/client/browserType.js +19 -11
- package/lib/client/channelOwner.js +19 -16
- package/lib/client/clientInstrumentation.js +17 -7
- package/lib/client/clock.js +68 -0
- package/lib/client/connection.js +9 -6
- package/lib/client/electron.js +7 -5
- package/lib/client/elementHandle.js +44 -14
- package/lib/client/eventEmitter.js +314 -0
- package/lib/client/fetch.js +81 -28
- package/lib/client/frame.js +2 -4
- package/lib/client/jsHandle.js +7 -1
- package/lib/client/locator.js +9 -0
- package/lib/client/network.js +12 -9
- package/lib/client/page.js +45 -23
- package/lib/client/playwright.js +3 -0
- package/lib/client/tracing.js +7 -4
- package/lib/common/socksProxy.js +2 -2
- package/lib/generated/clockSource.js +7 -0
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/recorderSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/protocol/serializers.js +12 -11
- package/lib/protocol/validator.js +137 -55
- package/lib/server/bidi/bidiBrowser.js +296 -0
- package/lib/server/bidi/bidiConnection.js +206 -0
- package/lib/server/bidi/bidiExecutionContext.js +162 -0
- package/lib/server/bidi/bidiFirefox.js +110 -0
- package/lib/server/bidi/bidiInput.js +174 -0
- package/lib/server/bidi/bidiNetworkManager.js +304 -0
- package/lib/server/bidi/bidiPage.js +456 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
- package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
- package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
- package/lib/server/browser.js +9 -1
- package/lib/server/browserContext.js +97 -22
- package/lib/server/browserType.js +27 -20
- package/lib/server/chromium/chromium.js +30 -15
- package/lib/server/chromium/chromiumSwitches.js +6 -3
- package/lib/server/chromium/crBrowser.js +11 -17
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crDragDrop.js +28 -29
- package/lib/server/chromium/crNetworkManager.js +130 -84
- package/lib/server/chromium/crPage.js +34 -79
- package/lib/server/chromium/crProtocolHelper.js +3 -1
- package/lib/server/chromium/crServiceWorker.js +20 -23
- package/lib/server/chromium/videoRecorder.js +1 -1
- package/lib/server/clock.js +125 -0
- package/lib/server/codegen/csharp.js +299 -0
- package/lib/server/codegen/java.js +235 -0
- package/lib/server/codegen/javascript.js +223 -0
- package/lib/server/codegen/jsonl.js +47 -0
- package/lib/server/codegen/language.js +76 -0
- package/lib/server/codegen/languages.js +30 -0
- package/lib/server/codegen/python.js +265 -0
- package/lib/server/codegen/types.js +5 -0
- package/lib/server/debugController.js +3 -5
- package/lib/server/deviceDescriptors.js +9 -4
- package/lib/server/deviceDescriptorsSource.json +239 -119
- package/lib/server/dispatchers/androidDispatcher.js +1 -1
- package/lib/server/dispatchers/browserContextDispatcher.js +51 -7
- package/lib/server/dispatchers/dispatcher.js +36 -40
- package/lib/server/dispatchers/frameDispatcher.js +1 -2
- package/lib/server/dispatchers/jsHandleDispatcher.js +1 -1
- package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -6
- package/lib/server/dispatchers/localUtilsDispatcher.js +19 -5
- package/lib/server/dispatchers/networkDispatchers.js +2 -2
- package/lib/server/dispatchers/pageDispatcher.js +5 -2
- package/lib/server/dispatchers/playwrightDispatcher.js +1 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +8 -5
- package/lib/server/dom.js +90 -53
- package/lib/server/electron/electron.js +21 -4
- package/lib/server/fetch.js +74 -25
- package/lib/server/fileUploadUtils.js +7 -3
- package/lib/server/firefox/ffBrowser.js +36 -25
- package/lib/server/firefox/ffConnection.js +2 -2
- package/lib/server/firefox/ffNetworkManager.js +6 -4
- package/lib/server/firefox/ffPage.js +22 -24
- package/lib/server/firefox/firefox.js +25 -6
- package/lib/server/frameSelectors.js +2 -2
- package/lib/server/frames.js +205 -159
- package/lib/server/har/harTracer.js +4 -12
- package/lib/server/helper.js +3 -3
- package/lib/server/index.js +18 -0
- package/lib/server/input.js +18 -8
- package/lib/server/instrumentation.js +0 -4
- package/lib/server/isomorphic/utilityScriptSerializers.js +19 -5
- package/lib/server/javascript.js +3 -2
- package/lib/server/launchApp.js +3 -2
- package/lib/server/network.js +14 -4
- package/lib/server/page.js +75 -46
- package/lib/server/playwright.js +5 -2
- package/lib/server/recorder/codeGenerator.js +2 -1
- package/lib/server/recorder/contextRecorder.js +316 -0
- package/lib/server/recorder/csharp.js +2 -1
- package/lib/server/recorder/java.js +2 -1
- package/lib/server/recorder/javascript.js +2 -1
- package/lib/server/recorder/jsonl.js +2 -1
- package/lib/server/recorder/language.js +2 -1
- package/lib/server/recorder/python.js +2 -1
- package/lib/server/recorder/recorderApp.js +14 -5
- package/lib/server/recorder/recorderCollection.js +127 -0
- package/lib/server/recorder/recorderRunner.js +177 -0
- package/lib/server/recorder/recorderUtils.js +23 -0
- package/lib/server/recorder/throttledFile.js +46 -0
- package/lib/server/recorder/utils.js +2 -1
- package/lib/server/recorder.js +42 -418
- package/lib/server/registry/index.js +99 -100
- package/lib/server/registry/nativeDeps.js +107 -0
- package/lib/server/screenshotter.js +6 -12
- package/lib/server/socksClientCertificatesInterceptor.js +328 -0
- package/lib/server/trace/recorder/snapshotter.js +4 -1
- package/lib/server/trace/recorder/tracing.js +27 -96
- package/lib/server/trace/viewer/traceViewer.js +54 -67
- package/lib/server/transport.js +1 -1
- package/lib/server/webkit/webkit.js +5 -5
- package/lib/server/webkit/wkBrowser.js +14 -14
- package/lib/server/webkit/wkConnection.js +3 -3
- package/lib/server/webkit/wkInterceptableRequest.js +8 -4
- package/lib/server/webkit/wkPage.js +52 -34
- package/lib/server/webkit/wkProvisionalPage.js +36 -1
- package/lib/utils/crypto.js +141 -0
- package/lib/utils/debugLogger.js +2 -0
- package/lib/utils/env.js +4 -2
- package/lib/utils/expectUtils.js +33 -0
- package/lib/utils/fileUtils.js +140 -1
- package/lib/utils/glob.js +2 -1
- package/lib/utils/happy-eyeballs.js +29 -2
- package/lib/utils/hostPlatform.js +13 -4
- package/lib/utils/httpServer.js +54 -13
- package/lib/utils/index.js +53 -31
- package/lib/utils/isomorphic/cssTokenizer.js +1 -1
- package/lib/utils/isomorphic/locatorParser.js +1 -1
- package/lib/utils/isomorphic/mimeType.js +29 -0
- package/lib/utils/isomorphic/stringUtils.js +28 -1
- package/lib/utils/isomorphic/urlMatch.js +120 -0
- package/lib/utils/mimeType.js +2 -1
- package/lib/utils/network.js +7 -35
- package/lib/utils/stackTrace.js +2 -4
- package/lib/utils/timeoutRunner.js +11 -76
- package/lib/utils/zones.js +23 -60
- package/lib/utilsBundle.js +2 -1
- package/lib/utilsBundleImpl/index.js +33 -31
- package/lib/vite/htmlReport/index.html +12 -12
- package/lib/vite/recorder/assets/codeMirrorModule-BN0yUF4I.js +24 -0
- package/lib/vite/recorder/assets/{codicon-zGuYmc9o.ttf → codicon-DCmgc-ay.ttf} +0 -0
- package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
- package/lib/vite/recorder/assets/index-DVt3E1Ef.js +47 -0
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-5yiV-3wl.js +16831 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-B7Z3vq11.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-C6p3E9Zg.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-CcviAl53.js +16831 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-CqYUz5ms.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-DS3v0XrQ.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-Dx6AXgMV.js +16838 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-T_sdMrbM.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
- package/lib/vite/traceViewer/assets/testServerConnection-D-tXL3sj.js +224 -0
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
- package/lib/vite/traceViewer/assets/workbench-Bjkiwcr1.js +19119 -0
- package/lib/vite/traceViewer/assets/workbench-C43LWZEX.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-C5OQh9VX.js +19119 -0
- package/lib/vite/traceViewer/assets/workbench-Crj6jzdv.js +19119 -0
- package/lib/vite/traceViewer/assets/workbench-DrQjKdyE.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-Pa1v1Ojh.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-caTaZnzx.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-u2lRPMOT.js +72 -0
- package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
- package/lib/vite/traceViewer/assets/xtermModule-CZ7sDYXB.js +6529 -0
- package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
- package/lib/vite/traceViewer/codeMirrorModule.Cy8X9Wtw.css +344 -0
- package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/embedded.BBZ9gQEw.js +104 -0
- package/lib/vite/traceViewer/embedded.BQq6Psnz.js +104 -0
- package/lib/vite/traceViewer/embedded.BVDVQOzc.js +2 -0
- package/lib/vite/traceViewer/embedded.Bn8Ptzv6.js +2 -0
- package/lib/vite/traceViewer/embedded.CvhnUgIi.js +2 -0
- package/lib/vite/traceViewer/embedded.D27cnKiB.js +104 -0
- package/lib/vite/traceViewer/embedded.DPqrDeET.js +2 -0
- package/lib/vite/traceViewer/embedded.DbzY7Q8w.js +2 -0
- package/lib/vite/traceViewer/embedded.DjZq4InJ.css +68 -0
- package/lib/vite/traceViewer/embedded.html +16 -0
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
- package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
- package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
- package/lib/vite/traceViewer/index.B8dgQwuN.js +2 -0
- package/lib/vite/traceViewer/index.BGj8jY3H.js +2 -0
- package/lib/vite/traceViewer/index.BSak5QT9.js +2 -0
- package/lib/vite/traceViewer/index.C0EgJ4oW.js +195 -0
- package/lib/vite/traceViewer/index.CUpI-BFe.js +195 -0
- package/lib/vite/traceViewer/{index.-g_5lMbJ.css → index.CrbWWHbf.css} +1 -1
- package/lib/vite/traceViewer/index.DkRbtWVo.js +195 -0
- package/lib/vite/traceViewer/index.QanXxRUb.css +131 -0
- package/lib/vite/traceViewer/index._cX8k4co.js +2 -0
- package/lib/vite/traceViewer/index.html +5 -4
- package/lib/vite/traceViewer/index.pMAN88y-.js +2 -0
- package/lib/vite/traceViewer/snapshot.html +1 -1
- package/lib/vite/traceViewer/sw.bundle.js +3 -4
- package/lib/vite/traceViewer/uiMode.D-tg1Oci.js +1730 -0
- package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
- package/lib/vite/traceViewer/uiMode.DKjMBMlc.js +1730 -0
- package/lib/vite/traceViewer/uiMode.DVWUEIHq.css +1424 -0
- package/lib/vite/traceViewer/uiMode.DVrL7a1K.js +10 -0
- package/lib/vite/traceViewer/uiMode.Dg9oJCQU.js +10 -0
- package/lib/vite/traceViewer/uiMode.DwZAzstF.js +10 -0
- package/lib/vite/traceViewer/uiMode.O07awP3T.js +10 -0
- package/lib/vite/traceViewer/uiMode.gGHHTsyL.js +1730 -0
- package/lib/vite/traceViewer/uiMode.html +5 -4
- package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
- package/lib/vite/traceViewer/uiMode.jY2s-9ps.js +10 -0
- package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
- package/lib/vite/traceViewer/workbench.B3X2QtYa.css +3702 -0
- package/lib/vite/traceViewer/workbench.DjbIuxix.css +1 -0
- package/lib/vite/traceViewer/workbench.DyTpxWVb.css +1 -0
- package/lib/vite/traceViewer/workbench.wuxQoE2z.css +3703 -0
- package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
- package/lib/vite/traceViewer/xtermModule.4oRVGWQ-.css +209 -0
- package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
- package/package.json +2 -2
- package/types/protocol.d.ts +960 -78
- package/types/structs.d.ts +1 -1
- package/types/types.d.ts +3083 -2448
- package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +0 -24
- package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
- package/lib/vite/recorder/assets/index-yg8ypzl6.js +0 -47
- package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
- package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
- package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
- package/lib/vite/traceViewer/uiMode.Fb0bNA4H.js +0 -10
- package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +0 -1
- package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-Hs9-1ZG4.css → codeMirrorModule-ez37Vkbh.css} +0 -0
- /package/lib/vite/traceViewer/assets/{xtermModule-Yt6xwiJ_.js → xtermModule-BeNbaIVa.js} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.Hs9-1ZG4.css → codeMirrorModule.ez37Vkbh.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.0lwXJFHT.css → xtermModule.DSXBckUd.css} +0 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Network = exports.BidiBrowserContext = exports.BidiBrowser = void 0;
|
|
7
|
+
var _eventsHelper = require("../../utils/eventsHelper");
|
|
8
|
+
var _browser = require("../browser");
|
|
9
|
+
var _browserContext = require("../browserContext");
|
|
10
|
+
var network = _interopRequireWildcard(require("../network"));
|
|
11
|
+
var _bidiConnection = require("./bidiConnection");
|
|
12
|
+
var _bidiNetworkManager = require("./bidiNetworkManager");
|
|
13
|
+
var _bidiPage = require("./bidiPage");
|
|
14
|
+
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
/**
|
|
18
|
+
* Copyright (c) Microsoft Corporation.
|
|
19
|
+
*
|
|
20
|
+
* Licensed under the Apache License, Version 2.0 (the 'License');
|
|
21
|
+
* you may not use this file except in compliance with the License.
|
|
22
|
+
* You may obtain a copy of the License at
|
|
23
|
+
*
|
|
24
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
25
|
+
*
|
|
26
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
27
|
+
* distributed under the License is distributed on an 'AS IS' BASIS,
|
|
28
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
29
|
+
* See the License for the specific language governing permissions and
|
|
30
|
+
* limitations under the License.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
class BidiBrowser extends _browser.Browser {
|
|
34
|
+
static async connect(parent, transport, options) {
|
|
35
|
+
const browser = new BidiBrowser(parent, transport, options);
|
|
36
|
+
if (options.__testHookOnConnectToBrowser) await options.__testHookOnConnectToBrowser();
|
|
37
|
+
const sessionStatus = await browser._browserSession.send('session.status', {});
|
|
38
|
+
if (!sessionStatus.ready) throw new Error('Bidi session is not ready. ' + sessionStatus.message);
|
|
39
|
+
let proxy;
|
|
40
|
+
if (options.proxy) {
|
|
41
|
+
proxy = {
|
|
42
|
+
proxyType: 'manual'
|
|
43
|
+
};
|
|
44
|
+
const url = new URL(options.proxy.server); // Validate proxy server.
|
|
45
|
+
switch (url.protocol) {
|
|
46
|
+
case 'http:':
|
|
47
|
+
proxy.httpProxy = url.host;
|
|
48
|
+
break;
|
|
49
|
+
case 'https:':
|
|
50
|
+
proxy.httpsProxy = url.host;
|
|
51
|
+
break;
|
|
52
|
+
case 'socks4:':
|
|
53
|
+
proxy.socksProxy = url.host;
|
|
54
|
+
proxy.socksVersion = 4;
|
|
55
|
+
break;
|
|
56
|
+
case 'socks5:':
|
|
57
|
+
proxy.socksProxy = url.host;
|
|
58
|
+
proxy.socksVersion = 5;
|
|
59
|
+
break;
|
|
60
|
+
default:
|
|
61
|
+
throw new Error('Invalid proxy server protocol: ' + options.proxy.server);
|
|
62
|
+
}
|
|
63
|
+
if (options.proxy.bypass) proxy.noProxy = options.proxy.bypass.split(',');
|
|
64
|
+
// TODO: support authentication.
|
|
65
|
+
}
|
|
66
|
+
browser._bidiSessionInfo = await browser._browserSession.send('session.new', {
|
|
67
|
+
capabilities: {
|
|
68
|
+
alwaysMatch: {
|
|
69
|
+
acceptInsecureCerts: false,
|
|
70
|
+
proxy,
|
|
71
|
+
unhandledPromptBehavior: {
|
|
72
|
+
default: bidi.Session.UserPromptHandlerType.Ignore
|
|
73
|
+
},
|
|
74
|
+
webSocketUrl: true
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
await browser._browserSession.send('session.subscribe', {
|
|
79
|
+
events: ['browsingContext', 'network', 'log', 'script']
|
|
80
|
+
});
|
|
81
|
+
return browser;
|
|
82
|
+
}
|
|
83
|
+
constructor(parent, transport, options) {
|
|
84
|
+
super(parent, options);
|
|
85
|
+
this._connection = void 0;
|
|
86
|
+
this._browserSession = void 0;
|
|
87
|
+
this._bidiSessionInfo = void 0;
|
|
88
|
+
this._contexts = new Map();
|
|
89
|
+
this._bidiPages = new Map();
|
|
90
|
+
this._eventListeners = void 0;
|
|
91
|
+
this._connection = new _bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
92
|
+
this._browserSession = this._connection.browserSession;
|
|
93
|
+
this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._browserSession, 'browsingContext.contextCreated', this._onBrowsingContextCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._browserSession, 'script.realmDestroyed', this._onScriptRealmDestroyed.bind(this))];
|
|
94
|
+
}
|
|
95
|
+
_onDisconnect() {
|
|
96
|
+
this._didClose();
|
|
97
|
+
}
|
|
98
|
+
async doCreateNewContext(options) {
|
|
99
|
+
const {
|
|
100
|
+
userContext
|
|
101
|
+
} = await this._browserSession.send('browser.createUserContext', {});
|
|
102
|
+
const context = new BidiBrowserContext(this, userContext, options);
|
|
103
|
+
await context._initialize();
|
|
104
|
+
this._contexts.set(userContext, context);
|
|
105
|
+
return context;
|
|
106
|
+
}
|
|
107
|
+
contexts() {
|
|
108
|
+
return Array.from(this._contexts.values());
|
|
109
|
+
}
|
|
110
|
+
version() {
|
|
111
|
+
return this._bidiSessionInfo.capabilities.browserVersion;
|
|
112
|
+
}
|
|
113
|
+
userAgent() {
|
|
114
|
+
return this._bidiSessionInfo.capabilities.userAgent;
|
|
115
|
+
}
|
|
116
|
+
isConnected() {
|
|
117
|
+
return !this._connection.isClosed();
|
|
118
|
+
}
|
|
119
|
+
_onBrowsingContextCreated(event) {
|
|
120
|
+
if (event.parent) {
|
|
121
|
+
const parentFrameId = event.parent;
|
|
122
|
+
for (const page of this._bidiPages.values()) {
|
|
123
|
+
const parentFrame = page._page._frameManager.frame(parentFrameId);
|
|
124
|
+
if (!parentFrame) continue;
|
|
125
|
+
page._session.addFrameBrowsingContext(event.context);
|
|
126
|
+
page._page._frameManager.frameAttached(event.context, parentFrameId);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
let context = this._contexts.get(event.userContext);
|
|
132
|
+
if (!context) context = this._defaultContext;
|
|
133
|
+
if (!context) return;
|
|
134
|
+
const session = this._connection.createMainFrameBrowsingContextSession(event.context);
|
|
135
|
+
const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);
|
|
136
|
+
const page = new _bidiPage.BidiPage(context, session, opener || null);
|
|
137
|
+
this._bidiPages.set(event.context, page);
|
|
138
|
+
}
|
|
139
|
+
_onBrowsingContextDestroyed(event) {
|
|
140
|
+
if (event.parent) {
|
|
141
|
+
this._browserSession.removeFrameBrowsingContext(event.context);
|
|
142
|
+
const parentFrameId = event.parent;
|
|
143
|
+
for (const page of this._bidiPages.values()) {
|
|
144
|
+
const parentFrame = page._page._frameManager.frame(parentFrameId);
|
|
145
|
+
if (!parentFrame) continue;
|
|
146
|
+
page._page._frameManager.frameDetached(event.context);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const bidiPage = this._bidiPages.get(event.context);
|
|
152
|
+
if (!bidiPage) return;
|
|
153
|
+
bidiPage.didClose();
|
|
154
|
+
this._bidiPages.delete(event.context);
|
|
155
|
+
}
|
|
156
|
+
_onScriptRealmDestroyed(event) {
|
|
157
|
+
for (const page of this._bidiPages.values()) {
|
|
158
|
+
if (page._onRealmDestroyed(event)) return;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.BidiBrowser = BidiBrowser;
|
|
163
|
+
class BidiBrowserContext extends _browserContext.BrowserContext {
|
|
164
|
+
constructor(browser, browserContextId, options) {
|
|
165
|
+
super(browser, options, browserContextId);
|
|
166
|
+
this._authenticateProxyViaHeader();
|
|
167
|
+
}
|
|
168
|
+
pages() {
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
async newPageDelegate() {
|
|
172
|
+
(0, _browserContext.assertBrowserContextIsNotOwned)(this);
|
|
173
|
+
const {
|
|
174
|
+
context
|
|
175
|
+
} = await this._browser._browserSession.send('browsingContext.create', {
|
|
176
|
+
type: bidi.BrowsingContext.CreateType.Window,
|
|
177
|
+
userContext: this._browserContextId
|
|
178
|
+
});
|
|
179
|
+
return this._browser._bidiPages.get(context);
|
|
180
|
+
}
|
|
181
|
+
async doGetCookies(urls) {
|
|
182
|
+
const {
|
|
183
|
+
cookies
|
|
184
|
+
} = await this._browser._browserSession.send('storage.getCookies', {
|
|
185
|
+
partition: {
|
|
186
|
+
type: 'storageKey',
|
|
187
|
+
userContext: this._browserContextId
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
return network.filterCookies(cookies.map(c => {
|
|
191
|
+
var _c$expiry;
|
|
192
|
+
const copy = {
|
|
193
|
+
name: c.name,
|
|
194
|
+
value: (0, _bidiNetworkManager.bidiBytesValueToString)(c.value),
|
|
195
|
+
domain: c.domain,
|
|
196
|
+
path: c.path,
|
|
197
|
+
httpOnly: c.httpOnly,
|
|
198
|
+
secure: c.secure,
|
|
199
|
+
expires: (_c$expiry = c.expiry) !== null && _c$expiry !== void 0 ? _c$expiry : -1,
|
|
200
|
+
sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) : 'None'
|
|
201
|
+
};
|
|
202
|
+
return copy;
|
|
203
|
+
}), urls);
|
|
204
|
+
}
|
|
205
|
+
async addCookies(cookies) {
|
|
206
|
+
cookies = network.rewriteCookies(cookies);
|
|
207
|
+
const promises = cookies.map(c => {
|
|
208
|
+
const cookie = {
|
|
209
|
+
name: c.name,
|
|
210
|
+
value: {
|
|
211
|
+
type: 'string',
|
|
212
|
+
value: c.value
|
|
213
|
+
},
|
|
214
|
+
domain: c.domain,
|
|
215
|
+
path: c.path,
|
|
216
|
+
httpOnly: c.httpOnly,
|
|
217
|
+
secure: c.secure,
|
|
218
|
+
sameSite: c.sameSite && toBidiSameSite(c.sameSite),
|
|
219
|
+
expiry: c.expires === -1 || c.expires === undefined ? undefined : Math.round(c.expires)
|
|
220
|
+
};
|
|
221
|
+
return this._browser._browserSession.send('storage.setCookie', {
|
|
222
|
+
cookie,
|
|
223
|
+
partition: {
|
|
224
|
+
type: 'storageKey',
|
|
225
|
+
userContext: this._browserContextId
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
await Promise.all(promises);
|
|
230
|
+
}
|
|
231
|
+
async doClearCookies() {
|
|
232
|
+
await this._browser._browserSession.send('storage.deleteCookies', {
|
|
233
|
+
partition: {
|
|
234
|
+
type: 'storageKey',
|
|
235
|
+
userContext: this._browserContextId
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async doGrantPermissions(origin, permissions) {}
|
|
240
|
+
async doClearPermissions() {}
|
|
241
|
+
async setGeolocation(geolocation) {}
|
|
242
|
+
async setExtraHTTPHeaders(headers) {}
|
|
243
|
+
async setUserAgent(userAgent) {}
|
|
244
|
+
async setOffline(offline) {}
|
|
245
|
+
async doSetHTTPCredentials(httpCredentials) {}
|
|
246
|
+
async doAddInitScript(initScript) {
|
|
247
|
+
// for (const page of this.pages())
|
|
248
|
+
// await (page._delegate as WKPage)._updateBootstrapScript();
|
|
249
|
+
}
|
|
250
|
+
async doRemoveNonInternalInitScripts() {}
|
|
251
|
+
async doUpdateRequestInterception() {}
|
|
252
|
+
onClosePersistent() {}
|
|
253
|
+
async clearCache() {}
|
|
254
|
+
async doClose(reason) {
|
|
255
|
+
// TODO: implement for persistent context
|
|
256
|
+
if (!this._browserContextId) return;
|
|
257
|
+
await this._browser._browserSession.send('browser.removeUserContext', {
|
|
258
|
+
userContext: this._browserContextId
|
|
259
|
+
});
|
|
260
|
+
this._browser._contexts.delete(this._browserContextId);
|
|
261
|
+
}
|
|
262
|
+
async cancelDownload(uuid) {}
|
|
263
|
+
}
|
|
264
|
+
exports.BidiBrowserContext = BidiBrowserContext;
|
|
265
|
+
function fromBidiSameSite(sameSite) {
|
|
266
|
+
switch (sameSite) {
|
|
267
|
+
case 'strict':
|
|
268
|
+
return 'Strict';
|
|
269
|
+
case 'lax':
|
|
270
|
+
return 'Lax';
|
|
271
|
+
case 'none':
|
|
272
|
+
return 'None';
|
|
273
|
+
}
|
|
274
|
+
return 'None';
|
|
275
|
+
}
|
|
276
|
+
function toBidiSameSite(sameSite) {
|
|
277
|
+
switch (sameSite) {
|
|
278
|
+
case 'Strict':
|
|
279
|
+
return bidi.Network.SameSite.Strict;
|
|
280
|
+
case 'Lax':
|
|
281
|
+
return bidi.Network.SameSite.Lax;
|
|
282
|
+
case 'None':
|
|
283
|
+
return bidi.Network.SameSite.None;
|
|
284
|
+
}
|
|
285
|
+
return bidi.Network.SameSite.None;
|
|
286
|
+
}
|
|
287
|
+
let Network = exports.Network = void 0;
|
|
288
|
+
(function (_Network) {
|
|
289
|
+
let SameSite = /*#__PURE__*/function (SameSite) {
|
|
290
|
+
SameSite["Strict"] = "strict";
|
|
291
|
+
SameSite["Lax"] = "lax";
|
|
292
|
+
SameSite["None"] = "none";
|
|
293
|
+
return SameSite;
|
|
294
|
+
}({});
|
|
295
|
+
_Network.SameSite = SameSite;
|
|
296
|
+
})(Network || (exports.Network = Network = {}));
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.kBrowserCloseMessageId = exports.BidiSession = exports.BidiConnection = void 0;
|
|
7
|
+
var _events = require("events");
|
|
8
|
+
var _utils = require("../../utils");
|
|
9
|
+
var _debugLogger = require("../../utils/debugLogger");
|
|
10
|
+
var _helper = require("../helper");
|
|
11
|
+
var _protocolError = require("../protocolError");
|
|
12
|
+
/**
|
|
13
|
+
* Copyright (c) Microsoft Corporation.
|
|
14
|
+
*
|
|
15
|
+
* Licensed under the Apache License, Version 2.0 (the 'License');
|
|
16
|
+
* you may not use this file except in compliance with the License.
|
|
17
|
+
* You may obtain a copy of the License at
|
|
18
|
+
*
|
|
19
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
+
*
|
|
21
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
+
* distributed under the License is distributed on an 'AS IS' BASIS,
|
|
23
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
+
* See the License for the specific language governing permissions and
|
|
25
|
+
* limitations under the License.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
// BidiPlaywright uses this special id to issue Browser.close command which we
|
|
29
|
+
// should ignore.
|
|
30
|
+
const kBrowserCloseMessageId = exports.kBrowserCloseMessageId = 0;
|
|
31
|
+
class BidiConnection {
|
|
32
|
+
constructor(transport, onDisconnect, protocolLogger, browserLogsCollector) {
|
|
33
|
+
this._transport = void 0;
|
|
34
|
+
this._onDisconnect = void 0;
|
|
35
|
+
this._protocolLogger = void 0;
|
|
36
|
+
this._browserLogsCollector = void 0;
|
|
37
|
+
this._browserDisconnectedLogs = void 0;
|
|
38
|
+
this._lastId = 0;
|
|
39
|
+
this._closed = false;
|
|
40
|
+
this.browserSession = void 0;
|
|
41
|
+
this._browsingContextToSession = new Map();
|
|
42
|
+
this._transport = transport;
|
|
43
|
+
this._onDisconnect = onDisconnect;
|
|
44
|
+
this._protocolLogger = protocolLogger;
|
|
45
|
+
this._browserLogsCollector = browserLogsCollector;
|
|
46
|
+
this.browserSession = new BidiSession(this, '', message => {
|
|
47
|
+
this.rawSend(message);
|
|
48
|
+
});
|
|
49
|
+
this._transport.onmessage = this._dispatchMessage.bind(this);
|
|
50
|
+
// onclose should be set last, since it can be immediately called.
|
|
51
|
+
this._transport.onclose = this._onClose.bind(this);
|
|
52
|
+
}
|
|
53
|
+
nextMessageId() {
|
|
54
|
+
return ++this._lastId;
|
|
55
|
+
}
|
|
56
|
+
rawSend(message) {
|
|
57
|
+
this._protocolLogger('send', message);
|
|
58
|
+
this._transport.send(message);
|
|
59
|
+
}
|
|
60
|
+
_dispatchMessage(message) {
|
|
61
|
+
this._protocolLogger('receive', message);
|
|
62
|
+
const object = message;
|
|
63
|
+
// Bidi messages do not have a common session identifier, so we
|
|
64
|
+
// route them based on BrowsingContext.
|
|
65
|
+
if (object.type === 'event') {
|
|
66
|
+
var _object$params$source;
|
|
67
|
+
// Route page events to the right session.
|
|
68
|
+
let context;
|
|
69
|
+
if ('context' in object.params) context = object.params.context;else if (object.method === 'log.entryAdded') context = (_object$params$source = object.params.source) === null || _object$params$source === void 0 ? void 0 : _object$params$source.context;
|
|
70
|
+
if (context) {
|
|
71
|
+
const session = this._browsingContextToSession.get(context);
|
|
72
|
+
if (session) {
|
|
73
|
+
session.dispatchMessage(message);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
} else if (message.id) {
|
|
78
|
+
// Find caller session.
|
|
79
|
+
for (const session of this._browsingContextToSession.values()) {
|
|
80
|
+
if (session.hasCallback(message.id)) {
|
|
81
|
+
session.dispatchMessage(message);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.browserSession.dispatchMessage(message);
|
|
87
|
+
}
|
|
88
|
+
_onClose(reason) {
|
|
89
|
+
this._closed = true;
|
|
90
|
+
this._transport.onmessage = undefined;
|
|
91
|
+
this._transport.onclose = undefined;
|
|
92
|
+
this._browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);
|
|
93
|
+
this.browserSession.dispose();
|
|
94
|
+
this._onDisconnect();
|
|
95
|
+
}
|
|
96
|
+
isClosed() {
|
|
97
|
+
return this._closed;
|
|
98
|
+
}
|
|
99
|
+
close() {
|
|
100
|
+
if (!this._closed) this._transport.close();
|
|
101
|
+
}
|
|
102
|
+
createMainFrameBrowsingContextSession(bowsingContextId) {
|
|
103
|
+
const result = new BidiSession(this, bowsingContextId, message => this.rawSend(message));
|
|
104
|
+
this._browsingContextToSession.set(bowsingContextId, result);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.BidiConnection = BidiConnection;
|
|
109
|
+
class BidiSession extends _events.EventEmitter {
|
|
110
|
+
constructor(connection, sessionId, rawSend) {
|
|
111
|
+
super();
|
|
112
|
+
this.connection = void 0;
|
|
113
|
+
this.sessionId = void 0;
|
|
114
|
+
this._disposed = false;
|
|
115
|
+
this._rawSend = void 0;
|
|
116
|
+
this._callbacks = new Map();
|
|
117
|
+
this._crashed = false;
|
|
118
|
+
this._browsingContexts = new Set();
|
|
119
|
+
this.on = void 0;
|
|
120
|
+
this.addListener = void 0;
|
|
121
|
+
this.off = void 0;
|
|
122
|
+
this.removeListener = void 0;
|
|
123
|
+
this.once = void 0;
|
|
124
|
+
this.setMaxListeners(0);
|
|
125
|
+
this.connection = connection;
|
|
126
|
+
this.sessionId = sessionId;
|
|
127
|
+
this._rawSend = rawSend;
|
|
128
|
+
this.on = super.on;
|
|
129
|
+
this.off = super.removeListener;
|
|
130
|
+
this.addListener = super.addListener;
|
|
131
|
+
this.removeListener = super.removeListener;
|
|
132
|
+
this.once = super.once;
|
|
133
|
+
}
|
|
134
|
+
addFrameBrowsingContext(context) {
|
|
135
|
+
this._browsingContexts.add(context);
|
|
136
|
+
this.connection._browsingContextToSession.set(context, this);
|
|
137
|
+
}
|
|
138
|
+
removeFrameBrowsingContext(context) {
|
|
139
|
+
this._browsingContexts.delete(context);
|
|
140
|
+
this.connection._browsingContextToSession.delete(context);
|
|
141
|
+
}
|
|
142
|
+
async send(method, params) {
|
|
143
|
+
if (this._crashed || this._disposed || this.connection._browserDisconnectedLogs) throw new _protocolError.ProtocolError(this._crashed ? 'crashed' : 'closed', undefined, this.connection._browserDisconnectedLogs);
|
|
144
|
+
const id = this.connection.nextMessageId();
|
|
145
|
+
const messageObj = {
|
|
146
|
+
id,
|
|
147
|
+
method,
|
|
148
|
+
params
|
|
149
|
+
};
|
|
150
|
+
this._rawSend(messageObj);
|
|
151
|
+
return new Promise((resolve, reject) => {
|
|
152
|
+
this._callbacks.set(id, {
|
|
153
|
+
resolve,
|
|
154
|
+
reject,
|
|
155
|
+
error: new _protocolError.ProtocolError('error', method)
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
sendMayFail(method, params) {
|
|
160
|
+
return this.send(method, params).catch(error => _debugLogger.debugLogger.log('error', error));
|
|
161
|
+
}
|
|
162
|
+
markAsCrashed() {
|
|
163
|
+
this._crashed = true;
|
|
164
|
+
}
|
|
165
|
+
isDisposed() {
|
|
166
|
+
return this._disposed;
|
|
167
|
+
}
|
|
168
|
+
dispose() {
|
|
169
|
+
this._disposed = true;
|
|
170
|
+
this.connection._browsingContextToSession.delete(this.sessionId);
|
|
171
|
+
for (const context of this._browsingContexts) this.connection._browsingContextToSession.delete(context);
|
|
172
|
+
this._browsingContexts.clear();
|
|
173
|
+
for (const callback of this._callbacks.values()) {
|
|
174
|
+
callback.error.type = this._crashed ? 'crashed' : 'closed';
|
|
175
|
+
callback.error.logs = this.connection._browserDisconnectedLogs;
|
|
176
|
+
callback.reject(callback.error);
|
|
177
|
+
}
|
|
178
|
+
this._callbacks.clear();
|
|
179
|
+
}
|
|
180
|
+
hasCallback(id) {
|
|
181
|
+
return this._callbacks.has(id);
|
|
182
|
+
}
|
|
183
|
+
dispatchMessage(message) {
|
|
184
|
+
const object = message;
|
|
185
|
+
if (object.id === kBrowserCloseMessageId) return;
|
|
186
|
+
if (object.id && this._callbacks.has(object.id)) {
|
|
187
|
+
const callback = this._callbacks.get(object.id);
|
|
188
|
+
this._callbacks.delete(object.id);
|
|
189
|
+
if (object.type === 'error') {
|
|
190
|
+
callback.error.setMessage(object.error + '\nMessage: ' + object.message);
|
|
191
|
+
callback.reject(callback.error);
|
|
192
|
+
} else if (object.type === 'success') {
|
|
193
|
+
callback.resolve(object.result);
|
|
194
|
+
} else {
|
|
195
|
+
callback.error.setMessage('Internal error, unexpected response type: ' + JSON.stringify(object));
|
|
196
|
+
callback.reject(callback.error);
|
|
197
|
+
}
|
|
198
|
+
} else if (object.id) {
|
|
199
|
+
// Response might come after session has been disposed and rejected all callbacks.
|
|
200
|
+
(0, _utils.assert)(this.isDisposed());
|
|
201
|
+
} else {
|
|
202
|
+
Promise.resolve().then(() => this.emit(object.method, object.params));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.BidiSession = BidiSession;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BidiExecutionContext = void 0;
|
|
7
|
+
var _utilityScriptSerializers = require("../isomorphic/utilityScriptSerializers");
|
|
8
|
+
var js = _interopRequireWildcard(require("../javascript"));
|
|
9
|
+
var _bidiDeserializer = require("./third_party/bidiDeserializer");
|
|
10
|
+
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
11
|
+
var _bidiSerializer = require("./third_party/bidiSerializer");
|
|
12
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
13
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
14
|
+
/**
|
|
15
|
+
* Copyright (c) Microsoft Corporation.
|
|
16
|
+
*
|
|
17
|
+
* Licensed under the Apache License, Version 2.0 (the 'License');
|
|
18
|
+
* you may not use this file except in compliance with the License.
|
|
19
|
+
* You may obtain a copy of the License at
|
|
20
|
+
*
|
|
21
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
*
|
|
23
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
* distributed under the License is distributed on an 'AS IS' BASIS,
|
|
25
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
* See the License for the specific language governing permissions and
|
|
27
|
+
* limitations under the License.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
class BidiExecutionContext {
|
|
31
|
+
constructor(session, realmInfo) {
|
|
32
|
+
this._session = void 0;
|
|
33
|
+
this._target = void 0;
|
|
34
|
+
this._session = session;
|
|
35
|
+
if (realmInfo.type === 'window') {
|
|
36
|
+
// Simple realm does not seem to work for Window contexts.
|
|
37
|
+
this._target = {
|
|
38
|
+
context: realmInfo.context,
|
|
39
|
+
sandbox: realmInfo.sandbox
|
|
40
|
+
};
|
|
41
|
+
} else {
|
|
42
|
+
this._target = {
|
|
43
|
+
realm: realmInfo.realm
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async rawEvaluateJSON(expression) {
|
|
48
|
+
const response = await this._session.send('script.evaluate', {
|
|
49
|
+
expression,
|
|
50
|
+
target: this._target,
|
|
51
|
+
serializationOptions: {
|
|
52
|
+
maxObjectDepth: 10,
|
|
53
|
+
maxDomDepth: 10
|
|
54
|
+
},
|
|
55
|
+
awaitPromise: true,
|
|
56
|
+
userActivation: true
|
|
57
|
+
});
|
|
58
|
+
if (response.type === 'success') return _bidiDeserializer.BidiDeserializer.deserialize(response.result);
|
|
59
|
+
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
60
|
+
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
61
|
+
}
|
|
62
|
+
async rawEvaluateHandle(expression) {
|
|
63
|
+
const response = await this._session.send('script.evaluate', {
|
|
64
|
+
expression,
|
|
65
|
+
target: this._target,
|
|
66
|
+
resultOwnership: bidi.Script.ResultOwnership.Root,
|
|
67
|
+
// Necessary for the handle to be returned.
|
|
68
|
+
serializationOptions: {
|
|
69
|
+
maxObjectDepth: 0,
|
|
70
|
+
maxDomDepth: 0
|
|
71
|
+
},
|
|
72
|
+
awaitPromise: true,
|
|
73
|
+
userActivation: true
|
|
74
|
+
});
|
|
75
|
+
if (response.type === 'success') {
|
|
76
|
+
if ('handle' in response.result) return response.result.handle;
|
|
77
|
+
throw new js.JavaScriptErrorInEvaluate('Cannot get handle: ' + JSON.stringify(response.result));
|
|
78
|
+
}
|
|
79
|
+
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
80
|
+
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
81
|
+
}
|
|
82
|
+
rawCallFunctionNoReply(func, ...args) {
|
|
83
|
+
throw new Error('Method not implemented.');
|
|
84
|
+
}
|
|
85
|
+
async evaluateWithArguments(functionDeclaration, returnByValue, utilityScript, values, objectIds) {
|
|
86
|
+
const response = await this._session.send('script.callFunction', {
|
|
87
|
+
functionDeclaration,
|
|
88
|
+
target: this._target,
|
|
89
|
+
arguments: [{
|
|
90
|
+
handle: utilityScript._objectId
|
|
91
|
+
}, ...values.map(_bidiSerializer.BidiSerializer.serialize), ...objectIds.map(handle => ({
|
|
92
|
+
handle
|
|
93
|
+
}))],
|
|
94
|
+
resultOwnership: returnByValue ? undefined : bidi.Script.ResultOwnership.Root,
|
|
95
|
+
// Necessary for the handle to be returned.
|
|
96
|
+
serializationOptions: returnByValue ? {} : {
|
|
97
|
+
maxObjectDepth: 0,
|
|
98
|
+
maxDomDepth: 0
|
|
99
|
+
},
|
|
100
|
+
awaitPromise: true,
|
|
101
|
+
userActivation: true
|
|
102
|
+
});
|
|
103
|
+
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
104
|
+
if (response.type === 'success') {
|
|
105
|
+
if (returnByValue) return (0, _utilityScriptSerializers.parseEvaluationResultValue)(_bidiDeserializer.BidiDeserializer.deserialize(response.result));
|
|
106
|
+
const objectId = 'handle' in response.result ? response.result.handle : undefined;
|
|
107
|
+
return utilityScript._context.createHandle({
|
|
108
|
+
objectId,
|
|
109
|
+
...response.result
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
113
|
+
}
|
|
114
|
+
async getProperties(context, objectId) {
|
|
115
|
+
throw new Error('Method not implemented.');
|
|
116
|
+
}
|
|
117
|
+
createHandle(context, jsRemoteObject) {
|
|
118
|
+
const remoteObject = jsRemoteObject;
|
|
119
|
+
return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), jsRemoteObject.objectId, remoteObjectValue(remoteObject));
|
|
120
|
+
}
|
|
121
|
+
async releaseHandle(objectId) {
|
|
122
|
+
await this._session.send('script.disown', {
|
|
123
|
+
target: this._target,
|
|
124
|
+
handles: [objectId]
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
objectCount(objectId) {
|
|
128
|
+
throw new Error('Method not implemented.');
|
|
129
|
+
}
|
|
130
|
+
async rawCallFunction(functionDeclaration, arg) {
|
|
131
|
+
const response = await this._session.send('script.callFunction', {
|
|
132
|
+
functionDeclaration,
|
|
133
|
+
target: this._target,
|
|
134
|
+
arguments: [arg],
|
|
135
|
+
resultOwnership: bidi.Script.ResultOwnership.Root,
|
|
136
|
+
// Necessary for the handle to be returned.
|
|
137
|
+
serializationOptions: {
|
|
138
|
+
maxObjectDepth: 0,
|
|
139
|
+
maxDomDepth: 0
|
|
140
|
+
},
|
|
141
|
+
awaitPromise: true,
|
|
142
|
+
userActivation: true
|
|
143
|
+
});
|
|
144
|
+
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
145
|
+
if (response.type === 'success') return response.result;
|
|
146
|
+
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.BidiExecutionContext = BidiExecutionContext;
|
|
150
|
+
function renderPreview(remoteObject) {
|
|
151
|
+
if (remoteObject.type === 'undefined') return 'undefined';
|
|
152
|
+
if (remoteObject.type === 'null') return 'null';
|
|
153
|
+
if ('value' in remoteObject) return String(remoteObject.value);
|
|
154
|
+
return `<${remoteObject.type}>`;
|
|
155
|
+
}
|
|
156
|
+
function remoteObjectValue(remoteObject) {
|
|
157
|
+
if (remoteObject.type === 'undefined') return undefined;
|
|
158
|
+
if (remoteObject.type === 'null') return null;
|
|
159
|
+
if (remoteObject.type === 'number' && typeof remoteObject.value === 'string') return js.parseUnserializableValue(remoteObject.value);
|
|
160
|
+
if ('value' in remoteObject) return remoteObject.value;
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|