@checkly/playwright-core 1.42.17 → 1.47.20-alpha
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-C-fQ5QZD.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-D-5S5PPN.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-CqYUz5ms.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-DrQjKdyE.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.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.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.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.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.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.DyTpxWVb.css +1 -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
package/lib/server/input.js
CHANGED
|
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.keypadLocation = exports.Touchscreen = exports.Mouse = exports.Keyboard = void 0;
|
|
7
|
+
exports.resolveSmartModifier = resolveSmartModifier;
|
|
8
|
+
exports.resolveSmartModifierString = resolveSmartModifierString;
|
|
7
9
|
var _utils = require("../utils");
|
|
8
10
|
var keyboardLayout = _interopRequireWildcard(require("./usKeyboardLayout"));
|
|
9
11
|
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); }
|
|
@@ -27,13 +29,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
27
29
|
const keypadLocation = exports.keypadLocation = keyboardLayout.keypadLocation;
|
|
28
30
|
const kModifiers = ['Alt', 'Control', 'Meta', 'Shift'];
|
|
29
31
|
class Keyboard {
|
|
30
|
-
constructor(raw
|
|
32
|
+
constructor(raw) {
|
|
31
33
|
this._pressedModifiers = new Set();
|
|
32
34
|
this._pressedKeys = new Set();
|
|
33
35
|
this._raw = void 0;
|
|
34
|
-
this._page = void 0;
|
|
35
36
|
this._raw = raw;
|
|
36
|
-
this._page = page;
|
|
37
37
|
}
|
|
38
38
|
async down(key) {
|
|
39
39
|
const description = this._keyDescriptionForString(key);
|
|
@@ -43,7 +43,8 @@ class Keyboard {
|
|
|
43
43
|
const text = description.text;
|
|
44
44
|
await this._raw.keydown(this._pressedModifiers, description.code, description.keyCode, description.keyCodeWithoutLocation, description.key, description.location, autoRepeat, text);
|
|
45
45
|
}
|
|
46
|
-
_keyDescriptionForString(
|
|
46
|
+
_keyDescriptionForString(str) {
|
|
47
|
+
const keyString = resolveSmartModifierString(str);
|
|
47
48
|
let description = usKeyboardLayout.get(keyString);
|
|
48
49
|
(0, _utils.assert)(description, `Unknown key: "${keyString}"`);
|
|
49
50
|
const shift = this._pressedModifiers.has('Shift');
|
|
@@ -101,7 +102,8 @@ class Keyboard {
|
|
|
101
102
|
await this.up(key);
|
|
102
103
|
for (let i = tokens.length - 2; i >= 0; --i) await this.up(tokens[i]);
|
|
103
104
|
}
|
|
104
|
-
async
|
|
105
|
+
async ensureModifiers(mm) {
|
|
106
|
+
const modifiers = mm.map(resolveSmartModifier);
|
|
105
107
|
for (const modifier of modifiers) {
|
|
106
108
|
if (!kModifiers.includes(modifier)) throw new Error('Unknown modifier ' + modifier);
|
|
107
109
|
}
|
|
@@ -118,6 +120,13 @@ class Keyboard {
|
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
122
|
exports.Keyboard = Keyboard;
|
|
123
|
+
function resolveSmartModifierString(key) {
|
|
124
|
+
if (key === 'ControlOrMeta') return process.platform === 'darwin' ? 'Meta' : 'Control';
|
|
125
|
+
return key;
|
|
126
|
+
}
|
|
127
|
+
function resolveSmartModifier(m) {
|
|
128
|
+
return resolveSmartModifierString(m);
|
|
129
|
+
}
|
|
121
130
|
class Mouse {
|
|
122
131
|
constructor(raw, page) {
|
|
123
132
|
this._keyboard = void 0;
|
|
@@ -177,9 +186,10 @@ class Mouse {
|
|
|
177
186
|
}
|
|
178
187
|
async click(x, y, options = {}, metadata) {
|
|
179
188
|
if (metadata) metadata.point = {
|
|
180
|
-
x
|
|
181
|
-
y
|
|
189
|
+
x,
|
|
190
|
+
y
|
|
182
191
|
};
|
|
192
|
+
if (this._raw.click) return await this._raw.click(x, y, options);
|
|
183
193
|
const {
|
|
184
194
|
delay = null,
|
|
185
195
|
clickCount = 1
|
|
@@ -257,7 +267,7 @@ function buildLayoutClosure(layout) {
|
|
|
257
267
|
if (definition.shiftKeyCode) shiftedDescription.keyCode = definition.shiftKeyCode;
|
|
258
268
|
}
|
|
259
269
|
|
|
260
|
-
// Map from code: Digit3 -> { ...
|
|
270
|
+
// Map from code: Digit3 -> { ... description, shifted }
|
|
261
271
|
result.set(code, {
|
|
262
272
|
...description,
|
|
263
273
|
shifted: shiftedDescription
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.SdkObject = void 0;
|
|
7
7
|
exports.createInstrumentation = createInstrumentation;
|
|
8
|
-
exports.kTestSdkObjects = void 0;
|
|
9
8
|
exports.serverSideCallMetadata = serverSideCallMetadata;
|
|
10
9
|
var _events = require("events");
|
|
11
10
|
var _utils = require("../utils");
|
|
@@ -25,7 +24,6 @@ var _utils = require("../utils");
|
|
|
25
24
|
* limitations under the License.
|
|
26
25
|
*/
|
|
27
26
|
|
|
28
|
-
const kTestSdkObjects = exports.kTestSdkObjects = new WeakSet();
|
|
29
27
|
class SdkObject extends _events.EventEmitter {
|
|
30
28
|
constructor(parent, guidPrefix, guid) {
|
|
31
29
|
super();
|
|
@@ -38,7 +36,6 @@ class SdkObject extends _events.EventEmitter {
|
|
|
38
36
|
...parent.attribution
|
|
39
37
|
};
|
|
40
38
|
this.instrumentation = parent.instrumentation;
|
|
41
|
-
if (process.env._PW_INTERNAL_COUNT_SDK_OBJECTS) kTestSdkObjects.add(this);
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
41
|
exports.SdkObject = SdkObject;
|
|
@@ -64,7 +61,6 @@ function serverSideCallMetadata() {
|
|
|
64
61
|
id: '',
|
|
65
62
|
startTime: 0,
|
|
66
63
|
endTime: 0,
|
|
67
|
-
wallTime: Date.now(),
|
|
68
64
|
type: 'Internal',
|
|
69
65
|
method: '',
|
|
70
66
|
params: {},
|
|
@@ -67,6 +67,12 @@ function source() {
|
|
|
67
67
|
if ('d' in value) return new Date(value.d);
|
|
68
68
|
if ('u' in value) return new URL(value.u);
|
|
69
69
|
if ('bi' in value) return BigInt(value.bi);
|
|
70
|
+
if ('e' in value) {
|
|
71
|
+
const error = new Error(value.e.m);
|
|
72
|
+
error.name = value.e.n;
|
|
73
|
+
error.stack = value.e.s;
|
|
74
|
+
return error;
|
|
75
|
+
}
|
|
70
76
|
if ('r' in value) return new RegExp(value.r.p, value.r.f);
|
|
71
77
|
if ('a' in value) {
|
|
72
78
|
const result = [];
|
|
@@ -132,13 +138,21 @@ function source() {
|
|
|
132
138
|
bi: value.toString()
|
|
133
139
|
};
|
|
134
140
|
if (isError(value)) {
|
|
135
|
-
var
|
|
136
|
-
|
|
137
|
-
if ((
|
|
141
|
+
var _value$stack;
|
|
142
|
+
let stack;
|
|
143
|
+
if ((_value$stack = value.stack) !== null && _value$stack !== void 0 && _value$stack.startsWith(value.name + ': ' + value.message)) {
|
|
138
144
|
// v8
|
|
139
|
-
|
|
145
|
+
stack = value.stack;
|
|
146
|
+
} else {
|
|
147
|
+
stack = `${value.name}: ${value.message}\n${value.stack}`;
|
|
140
148
|
}
|
|
141
|
-
return
|
|
149
|
+
return {
|
|
150
|
+
e: {
|
|
151
|
+
n: value.name,
|
|
152
|
+
m: value.message,
|
|
153
|
+
s: stack
|
|
154
|
+
}
|
|
155
|
+
};
|
|
142
156
|
}
|
|
143
157
|
if (isDate(value)) return {
|
|
144
158
|
d: value.toJSON()
|
package/lib/server/javascript.js
CHANGED
|
@@ -14,6 +14,7 @@ var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityS
|
|
|
14
14
|
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
15
15
|
var _instrumentation = require("./instrumentation");
|
|
16
16
|
var _manualPromise = require("../utils/manualPromise");
|
|
17
|
+
var _utils = require("../utils");
|
|
17
18
|
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); }
|
|
18
19
|
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; }
|
|
19
20
|
/**
|
|
@@ -78,7 +79,7 @@ class ExecutionContext extends _instrumentation.SdkObject {
|
|
|
78
79
|
(() => {
|
|
79
80
|
const module = {};
|
|
80
81
|
${utilityScriptSource.source}
|
|
81
|
-
return new (module.exports.UtilityScript())();
|
|
82
|
+
return new (module.exports.UtilityScript())(${(0, _utils.isUnderTest)()});
|
|
82
83
|
})();`;
|
|
83
84
|
this._utilityScriptPromise = this._raceAgainstContextDestroyed(this._delegate.rawEvaluateHandle(source).then(objectId => new JSHandle(this, 'object', 'UtilityScript', objectId)));
|
|
84
85
|
}
|
|
@@ -235,7 +236,7 @@ async function evaluateExpression(context, expression, options, ...args) {
|
|
|
235
236
|
}
|
|
236
237
|
|
|
237
238
|
// See UtilityScript for arguments.
|
|
238
|
-
const utilityScriptValues = [options.isFunction, options.returnByValue,
|
|
239
|
+
const utilityScriptValues = [options.isFunction, options.returnByValue, expression, args.length, ...args];
|
|
239
240
|
const script = `(utilityScript, ...args) => utilityScript.evaluate(...args)`;
|
|
240
241
|
try {
|
|
241
242
|
return await context.evaluateWithArguments(script, options.returnByValue || false, utilityScript, utilityScriptValues, utilityScriptObjectIds);
|
package/lib/server/launchApp.js
CHANGED
|
@@ -28,13 +28,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
async function launchApp(browserType, options) {
|
|
31
|
-
var _options$persistentCo, _options$persistentCo2;
|
|
31
|
+
var _options$persistentCo, _options$persistentCo2, _options$persistentCo3;
|
|
32
32
|
const args = [...((_options$persistentCo = (_options$persistentCo2 = options.persistentContextOptions) === null || _options$persistentCo2 === void 0 ? void 0 : _options$persistentCo2.args) !== null && _options$persistentCo !== void 0 ? _options$persistentCo : [])];
|
|
33
33
|
if (browserType.name() === 'chromium') {
|
|
34
34
|
args.push('--app=data:text/html,', `--window-size=${options.windowSize.width},${options.windowSize.height}`, ...(options.windowPosition ? [`--window-position=${options.windowPosition.x},${options.windowPosition.y}`] : []), '--test-type=');
|
|
35
35
|
}
|
|
36
36
|
const context = await browserType.launchPersistentContext((0, _instrumentation.serverSideCallMetadata)(), '', {
|
|
37
|
-
channel: (0, _registry.findChromiumChannel)(options.sdkLanguage),
|
|
37
|
+
channel: !((_options$persistentCo3 = options.persistentContextOptions) !== null && _options$persistentCo3 !== void 0 && _options$persistentCo3.executablePath) ? (0, _registry.findChromiumChannel)(options.sdkLanguage) : undefined,
|
|
38
38
|
noDefaultViewport: true,
|
|
39
39
|
ignoreDefaultArgs: ['--enable-automation'],
|
|
40
40
|
colorScheme: 'no-override',
|
|
@@ -79,6 +79,7 @@ async function syncLocalStorageWithSettings(page, appName) {
|
|
|
79
79
|
await page.addInitScript(`(${String(settings => {
|
|
80
80
|
// iframes w/ snapshots, etc.
|
|
81
81
|
if (location && location.protocol === 'data:') return;
|
|
82
|
+
if (window.top !== window) return;
|
|
82
83
|
Object.entries(settings).map(([k, v]) => localStorage[k] = v);
|
|
83
84
|
window.saveSettings = () => {
|
|
84
85
|
window._saveSerializedSettings(JSON.stringify({
|
package/lib/server/network.js
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WebSocket = exports.
|
|
6
|
+
exports.WebSocket = exports.Route = exports.Response = exports.Request = void 0;
|
|
7
7
|
exports.filterCookies = filterCookies;
|
|
8
8
|
exports.kMaxCookieExpiresDateInSeconds = void 0;
|
|
9
9
|
exports.mergeHeaders = mergeHeaders;
|
|
10
10
|
exports.parsedURL = parsedURL;
|
|
11
11
|
exports.rewriteCookies = rewriteCookies;
|
|
12
12
|
exports.singleHeader = singleHeader;
|
|
13
|
+
exports.statusText = statusText;
|
|
13
14
|
exports.stripFragmentFromUrl = stripFragmentFromUrl;
|
|
14
15
|
var _utils = require("../utils");
|
|
15
16
|
var _manualPromise = require("../utils/manualPromise");
|
|
@@ -107,6 +108,7 @@ class Request extends _instrumentation.SdkObject {
|
|
|
107
108
|
this._waitForResponsePromise = new _manualPromise.ManualPromise();
|
|
108
109
|
this._responseEndTiming = -1;
|
|
109
110
|
this._overrides = void 0;
|
|
111
|
+
this._bodySize = void 0;
|
|
110
112
|
(0, _utils.assert)(!url.startsWith('data:'), 'Data urls should not fire requests');
|
|
111
113
|
this._context = context;
|
|
112
114
|
this._frame = frame;
|
|
@@ -201,9 +203,14 @@ class Request extends _instrumentation.SdkObject {
|
|
|
201
203
|
errorText: this._failureText
|
|
202
204
|
};
|
|
203
205
|
}
|
|
206
|
+
|
|
207
|
+
// TODO(bidi): remove once post body is available.
|
|
208
|
+
_setBodySize(size) {
|
|
209
|
+
this._bodySize = size;
|
|
210
|
+
}
|
|
204
211
|
bodySize() {
|
|
205
212
|
var _this$postDataBuffer;
|
|
206
|
-
return ((_this$postDataBuffer = this.postDataBuffer()) === null || _this$postDataBuffer === void 0 ? void 0 : _this$postDataBuffer.length) || 0;
|
|
213
|
+
return this._bodySize || ((_this$postDataBuffer = this.postDataBuffer()) === null || _this$postDataBuffer === void 0 ? void 0 : _this$postDataBuffer.length) || 0;
|
|
207
214
|
}
|
|
208
215
|
async requestHeadersSize() {
|
|
209
216
|
let headersSize = 4; // 4 = 2 spaces + 2 line breaks (GET /path \r\n)
|
|
@@ -300,7 +307,7 @@ class Route extends _instrumentation.SdkObject {
|
|
|
300
307
|
}
|
|
301
308
|
this._request._setOverrides(overrides);
|
|
302
309
|
if (!overrides.isFallback) this._request._context.emit(_browserContext.BrowserContext.Events.RequestContinued, this._request);
|
|
303
|
-
await this._delegate.continue(
|
|
310
|
+
await this._delegate.continue(overrides);
|
|
304
311
|
this._endHandling();
|
|
305
312
|
}
|
|
306
313
|
_startHandling() {
|
|
@@ -513,7 +520,7 @@ WebSocket.Events = {
|
|
|
513
520
|
FrameSent: 'framesent'
|
|
514
521
|
};
|
|
515
522
|
// List taken from https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml with extra 306 and 418 codes.
|
|
516
|
-
const STATUS_TEXTS =
|
|
523
|
+
const STATUS_TEXTS = {
|
|
517
524
|
'100': 'Continue',
|
|
518
525
|
'101': 'Switching Protocols',
|
|
519
526
|
'102': 'Processing',
|
|
@@ -578,6 +585,9 @@ const STATUS_TEXTS = exports.STATUS_TEXTS = {
|
|
|
578
585
|
'510': 'Not Extended',
|
|
579
586
|
'511': 'Network Authentication Required'
|
|
580
587
|
};
|
|
588
|
+
function statusText(status) {
|
|
589
|
+
return STATUS_TEXTS[String(status)] || 'Unknown';
|
|
590
|
+
}
|
|
581
591
|
function singleHeader(name, value) {
|
|
582
592
|
return [{
|
|
583
593
|
name,
|
package/lib/server/page.js
CHANGED
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Worker = exports.PageBinding = exports.Page = void 0;
|
|
6
|
+
exports.Worker = exports.PageBinding = exports.Page = exports.InitScript = void 0;
|
|
7
7
|
var frames = _interopRequireWildcard(require("./frames"));
|
|
8
8
|
var input = _interopRequireWildcard(require("./input"));
|
|
9
9
|
var js = _interopRequireWildcard(require("./javascript"));
|
|
10
|
-
var network = _interopRequireWildcard(require("./network"));
|
|
11
10
|
var _screenshotter = require("./screenshotter");
|
|
12
11
|
var _timeoutSettings = require("../common/timeoutSettings");
|
|
13
12
|
var _browserContext = require("./browserContext");
|
|
@@ -23,7 +22,6 @@ var _instrumentation = require("./instrumentation");
|
|
|
23
22
|
var _selectorParser = require("../utils/isomorphic/selectorParser");
|
|
24
23
|
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
25
24
|
var _errors = require("./errors");
|
|
26
|
-
var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
|
|
27
25
|
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); }
|
|
28
26
|
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; }
|
|
29
27
|
/**
|
|
@@ -88,7 +86,7 @@ class Page extends _instrumentation.SdkObject {
|
|
|
88
86
|
this._delegate = delegate;
|
|
89
87
|
this._browserContext = browserContext;
|
|
90
88
|
this.accessibility = new accessibility.Accessibility(delegate.getAccessibilityTree.bind(delegate));
|
|
91
|
-
this.keyboard = new input.Keyboard(delegate.rawKeyboard
|
|
89
|
+
this.keyboard = new input.Keyboard(delegate.rawKeyboard);
|
|
92
90
|
this.mouse = new input.Mouse(delegate.rawMouse, this);
|
|
93
91
|
this.touchscreen = new input.Touchscreen(delegate.rawTouchscreen, this);
|
|
94
92
|
this._timeoutSettings = new _timeoutSettings.TimeoutSettings(browserContext._timeoutSettings);
|
|
@@ -214,13 +212,13 @@ class Page extends _instrumentation.SdkObject {
|
|
|
214
212
|
if (this._browserContext._pageBindings.has(name)) throw new Error(`Function "${name}" has been already registered in the browser context`);
|
|
215
213
|
const binding = new PageBinding(name, playwrightBinding, needsHandle);
|
|
216
214
|
this._pageBindings.set(name, binding);
|
|
217
|
-
await this._delegate.
|
|
215
|
+
await this._delegate.addInitScript(binding.initScript);
|
|
216
|
+
await Promise.all(this.frames().map(frame => frame.evaluateExpression(binding.initScript.source).catch(e => {})));
|
|
218
217
|
}
|
|
219
218
|
async _removeExposedBindings() {
|
|
220
|
-
for (const key of this._pageBindings
|
|
221
|
-
if (!
|
|
219
|
+
for (const [key, binding] of this._pageBindings) {
|
|
220
|
+
if (!binding.internal) this._pageBindings.delete(key);
|
|
222
221
|
}
|
|
223
|
-
await this._delegate.removeExposedBindings();
|
|
224
222
|
}
|
|
225
223
|
setExtraHTTPHeaders(headers) {
|
|
226
224
|
this._extraHTTPHeaders = headers;
|
|
@@ -287,21 +285,26 @@ class Page extends _instrumentation.SdkObject {
|
|
|
287
285
|
return response;
|
|
288
286
|
}), this._timeoutSettings.navigationTimeout(options));
|
|
289
287
|
}
|
|
290
|
-
registerLocatorHandler(selector) {
|
|
288
|
+
registerLocatorHandler(selector, noWaitAfter) {
|
|
291
289
|
const uid = ++this._lastLocatorHandlerUid;
|
|
292
290
|
this._locatorHandlers.set(uid, {
|
|
293
|
-
selector
|
|
291
|
+
selector,
|
|
292
|
+
noWaitAfter
|
|
294
293
|
});
|
|
295
294
|
return uid;
|
|
296
295
|
}
|
|
297
|
-
resolveLocatorHandler(uid) {
|
|
296
|
+
resolveLocatorHandler(uid, remove) {
|
|
298
297
|
const handler = this._locatorHandlers.get(uid);
|
|
298
|
+
if (remove) this._locatorHandlers.delete(uid);
|
|
299
299
|
if (handler) {
|
|
300
300
|
var _handler$resolved;
|
|
301
301
|
(_handler$resolved = handler.resolved) === null || _handler$resolved === void 0 || _handler$resolved.resolve();
|
|
302
302
|
handler.resolved = undefined;
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
|
+
unregisterLocatorHandler(uid) {
|
|
306
|
+
this._locatorHandlers.delete(uid);
|
|
307
|
+
}
|
|
305
308
|
async performLocatorHandlersCheckpoint(progress) {
|
|
306
309
|
// Do not run locator handlers from inside locator handler callbacks to avoid deadlocks.
|
|
307
310
|
if (this._locatorHandlerRunningCounter) return;
|
|
@@ -316,8 +319,19 @@ class Page extends _instrumentation.SdkObject {
|
|
|
316
319
|
}
|
|
317
320
|
if (handler.resolved) {
|
|
318
321
|
++this._locatorHandlerRunningCounter;
|
|
319
|
-
progress.log(` found ${(0,
|
|
320
|
-
|
|
322
|
+
progress.log(` found ${(0, _utils.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)}, intercepting action to run the handler`);
|
|
323
|
+
const promise = handler.resolved.then(async () => {
|
|
324
|
+
progress.throwIfAborted();
|
|
325
|
+
if (!handler.noWaitAfter) {
|
|
326
|
+
progress.log(` locator handler has finished, waiting for ${(0, _utils.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)} to be hidden`);
|
|
327
|
+
await this.mainFrame().waitForSelectorInternal(progress, handler.selector, {
|
|
328
|
+
state: 'hidden'
|
|
329
|
+
});
|
|
330
|
+
} else {
|
|
331
|
+
progress.log(` locator handler has finished`);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
await this.openScope.race(promise).finally(() => --this._locatorHandlerRunningCounter);
|
|
321
335
|
// Avoid side-effects after long-running operation.
|
|
322
336
|
progress.throwIfAborted();
|
|
323
337
|
progress.log(` interception handler has finished, continuing`);
|
|
@@ -368,12 +382,13 @@ class Page extends _instrumentation.SdkObject {
|
|
|
368
382
|
await this._delegate.bringToFront();
|
|
369
383
|
}
|
|
370
384
|
async addInitScript(source) {
|
|
371
|
-
|
|
372
|
-
|
|
385
|
+
const initScript = new InitScript(source);
|
|
386
|
+
this.initScripts.push(initScript);
|
|
387
|
+
await this._delegate.addInitScript(initScript);
|
|
373
388
|
}
|
|
374
389
|
async _removeInitScripts() {
|
|
375
|
-
this.initScripts
|
|
376
|
-
await this._delegate.
|
|
390
|
+
this.initScripts = this.initScripts.filter(script => script.internal);
|
|
391
|
+
await this._delegate.removeNonInternalInitScripts();
|
|
377
392
|
}
|
|
378
393
|
needsRequestInterception() {
|
|
379
394
|
return !!this._clientRequestInterceptor || !!this._serverRequestInterceptor || !!this._browserContext._requestInterceptor;
|
|
@@ -525,13 +540,12 @@ class Page extends _instrumentation.SdkObject {
|
|
|
525
540
|
}
|
|
526
541
|
frameNavigatedToNewDocument(frame) {
|
|
527
542
|
this.emit(Page.Events.InternalFrameNavigatedToNewDocument, frame);
|
|
528
|
-
const
|
|
529
|
-
if (
|
|
530
|
-
const purl = network.parsedURL(url);
|
|
531
|
-
if (purl) this._browserContext.addVisitedOrigin(purl.origin);
|
|
543
|
+
const origin = frame.origin();
|
|
544
|
+
if (origin) this._browserContext.addVisitedOrigin(origin);
|
|
532
545
|
}
|
|
533
|
-
|
|
534
|
-
|
|
546
|
+
allInitScripts() {
|
|
547
|
+
const bindings = [...this._browserContext._pageBindings.values(), ...this._pageBindings.values()];
|
|
548
|
+
return [...bindings.map(binding => binding.initScript), ...this._browserContext.initScripts, ...this.initScripts];
|
|
535
549
|
}
|
|
536
550
|
getBinding(name) {
|
|
537
551
|
return this._pageBindings.get(name) || this._browserContext._pageBindings.get(name);
|
|
@@ -547,6 +561,15 @@ class Page extends _instrumentation.SdkObject {
|
|
|
547
561
|
temporarilyDisableTracingScreencastThrottling() {
|
|
548
562
|
this._frameThrottler.recharge();
|
|
549
563
|
}
|
|
564
|
+
async safeNonStallingEvaluateInAllFrames(expression, world, options = {}) {
|
|
565
|
+
await Promise.all(this.frames().map(async frame => {
|
|
566
|
+
try {
|
|
567
|
+
await frame.nonStallingEvaluateInExistingContext(expression, world);
|
|
568
|
+
} catch (e) {
|
|
569
|
+
if (options.throwOnJSErrors && js.isJavaScriptErrorInEvaluate(e)) throw e;
|
|
570
|
+
}
|
|
571
|
+
}));
|
|
572
|
+
}
|
|
550
573
|
async hideHighlight() {
|
|
551
574
|
await Promise.all(this.frames().map(frame => frame.hideHighlight().catch(() => {})));
|
|
552
575
|
}
|
|
@@ -614,12 +637,14 @@ class PageBinding {
|
|
|
614
637
|
constructor(name, playwrightFunction, needsHandle) {
|
|
615
638
|
this.name = void 0;
|
|
616
639
|
this.playwrightFunction = void 0;
|
|
617
|
-
this.
|
|
640
|
+
this.initScript = void 0;
|
|
618
641
|
this.needsHandle = void 0;
|
|
642
|
+
this.internal = void 0;
|
|
619
643
|
this.name = name;
|
|
620
644
|
this.playwrightFunction = playwrightFunction;
|
|
621
|
-
this.
|
|
645
|
+
this.initScript = new InitScript(`(${addPageBinding.toString()})(${JSON.stringify(PageBinding.kPlaywrightBinding)}, ${JSON.stringify(name)}, ${needsHandle}, (${_utilityScriptSerializers.source})())`, true /* internal */);
|
|
622
646
|
this.needsHandle = needsHandle;
|
|
647
|
+
this.internal = name.startsWith('__pw');
|
|
623
648
|
}
|
|
624
649
|
static async dispatch(page, payload, context) {
|
|
625
650
|
const {
|
|
@@ -630,6 +655,7 @@ class PageBinding {
|
|
|
630
655
|
try {
|
|
631
656
|
(0, _utils.assert)(context.world);
|
|
632
657
|
const binding = page.getBinding(name);
|
|
658
|
+
if (!binding) throw new Error(`Function "${name}" is not exposed`);
|
|
633
659
|
let result;
|
|
634
660
|
if (binding.needsHandle) {
|
|
635
661
|
const handle = await context.evaluateHandle(takeHandle, {
|
|
@@ -655,12 +681,7 @@ class PageBinding {
|
|
|
655
681
|
result
|
|
656
682
|
}).catch(e => _debugLogger.debugLogger.log('error', e));
|
|
657
683
|
} catch (error) {
|
|
658
|
-
|
|
659
|
-
name,
|
|
660
|
-
seq,
|
|
661
|
-
message: error.message,
|
|
662
|
-
stack: error.stack
|
|
663
|
-
}).catch(e => _debugLogger.debugLogger.log('error', e));else context.evaluate(deliverErrorValue, {
|
|
684
|
+
context.evaluate(deliverResult, {
|
|
664
685
|
name,
|
|
665
686
|
seq,
|
|
666
687
|
error
|
|
@@ -672,25 +693,16 @@ class PageBinding {
|
|
|
672
693
|
return handle;
|
|
673
694
|
}
|
|
674
695
|
function deliverResult(arg) {
|
|
675
|
-
globalThis[arg.name]['callbacks']
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
function deliverError(arg) {
|
|
679
|
-
const error = new Error(arg.message);
|
|
680
|
-
error.stack = arg.stack;
|
|
681
|
-
globalThis[arg.name]['callbacks'].get(arg.seq).reject(error);
|
|
682
|
-
globalThis[arg.name]['callbacks'].delete(arg.seq);
|
|
683
|
-
}
|
|
684
|
-
function deliverErrorValue(arg) {
|
|
685
|
-
globalThis[arg.name]['callbacks'].get(arg.seq).reject(arg.error);
|
|
686
|
-
globalThis[arg.name]['callbacks'].delete(arg.seq);
|
|
696
|
+
const callbacks = globalThis[arg.name]['callbacks'];
|
|
697
|
+
if ('error' in arg) callbacks.get(arg.seq).reject(arg.error);else callbacks.get(arg.seq).resolve(arg.result);
|
|
698
|
+
callbacks.delete(arg.seq);
|
|
687
699
|
}
|
|
688
700
|
}
|
|
689
701
|
}
|
|
690
702
|
exports.PageBinding = PageBinding;
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
703
|
+
PageBinding.kPlaywrightBinding = '__playwright__binding__';
|
|
704
|
+
function addPageBinding(playwrightBinding, bindingName, needsHandle, utilityScriptSerializers) {
|
|
705
|
+
const binding = globalThis[playwrightBinding];
|
|
694
706
|
globalThis[bindingName] = (...args) => {
|
|
695
707
|
const me = globalThis[bindingName];
|
|
696
708
|
if (needsHandle && args.slice(1).some(arg => arg !== undefined)) throw new Error(`exposeBindingHandle supports a single argument, ${args.length} received`);
|
|
@@ -737,6 +749,23 @@ function addPageBinding(bindingName, needsHandle, utilityScriptSerializers) {
|
|
|
737
749
|
};
|
|
738
750
|
globalThis[bindingName].__installed = true;
|
|
739
751
|
}
|
|
752
|
+
class InitScript {
|
|
753
|
+
constructor(source, internal) {
|
|
754
|
+
this.source = void 0;
|
|
755
|
+
this.internal = void 0;
|
|
756
|
+
const guid = (0, _utils.createGuid)();
|
|
757
|
+
this.source = `(() => {
|
|
758
|
+
globalThis.__pwInitScripts = globalThis.__pwInitScripts || {};
|
|
759
|
+
const hasInitScript = globalThis.__pwInitScripts[${JSON.stringify(guid)}];
|
|
760
|
+
if (hasInitScript)
|
|
761
|
+
return;
|
|
762
|
+
globalThis.__pwInitScripts[${JSON.stringify(guid)}] = true;
|
|
763
|
+
${source}
|
|
764
|
+
})();`;
|
|
765
|
+
this.internal = !!internal;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
exports.InitScript = InitScript;
|
|
740
769
|
class FrameThrottler {
|
|
741
770
|
constructor(nonThrottledFrames, defaultInterval, throttlingInterval) {
|
|
742
771
|
this._acks = [];
|
package/lib/server/playwright.js
CHANGED
|
@@ -13,8 +13,9 @@ var _firefox = require("./firefox/firefox");
|
|
|
13
13
|
var _selectors = require("./selectors");
|
|
14
14
|
var _webkit = require("./webkit/webkit");
|
|
15
15
|
var _instrumentation = require("./instrumentation");
|
|
16
|
-
var
|
|
16
|
+
var _utils = require("../utils");
|
|
17
17
|
var _debugController = require("./debugController");
|
|
18
|
+
var _bidiFirefox = require("./bidi/bidiFirefox");
|
|
18
19
|
/**
|
|
19
20
|
* Copyright (c) Microsoft Corporation.
|
|
20
21
|
*
|
|
@@ -41,6 +42,7 @@ class Playwright extends _instrumentation.SdkObject {
|
|
|
41
42
|
this.chromium = void 0;
|
|
42
43
|
this.android = void 0;
|
|
43
44
|
this.electron = void 0;
|
|
45
|
+
this.bidi = void 0;
|
|
44
46
|
this.firefox = void 0;
|
|
45
47
|
this.webkit = void 0;
|
|
46
48
|
this.options = void 0;
|
|
@@ -55,10 +57,11 @@ class Playwright extends _instrumentation.SdkObject {
|
|
|
55
57
|
onPageOpen: page => this._allPages.add(page),
|
|
56
58
|
onPageClose: page => this._allPages.delete(page),
|
|
57
59
|
onCallLog: (sdkObject, metadata, logName, message) => {
|
|
58
|
-
|
|
60
|
+
_utils.debugLogger.log(logName, message);
|
|
59
61
|
}
|
|
60
62
|
}, null);
|
|
61
63
|
this.chromium = new _chromium.Chromium(this);
|
|
64
|
+
this.bidi = new _bidiFirefox.BidiFirefox(this);
|
|
62
65
|
this.firefox = new _firefox.Firefox(this);
|
|
63
66
|
this.webkit = new _webkit.WebKit(this);
|
|
64
67
|
this.electron = new _electron.Electron(this);
|