@checkly/playwright-core 1.42.18 → 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-W69B4LBB.js +0 -24
- package/lib/vite/recorder/assets/index-Ly3PcVUb.js +0 -47
- package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
- package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-wLpsbIhd.js +0 -24
- package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-f2dAQL4I.js +0 -69
- package/lib/vite/traceViewer/index.-_8-eHEE.js +0 -2
- package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
- package/lib/vite/traceViewer/uiMode.9CwNsWc6.js +0 -10
- 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
|
@@ -9,6 +9,7 @@ var _utils = require("../../utils");
|
|
|
9
9
|
var _browser = require("../browser");
|
|
10
10
|
var _browserContext = require("../browserContext");
|
|
11
11
|
var network = _interopRequireWildcard(require("../network"));
|
|
12
|
+
var _page = require("../page");
|
|
12
13
|
var _ffConnection = require("./ffConnection");
|
|
13
14
|
var _ffPage = require("./ffPage");
|
|
14
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); }
|
|
@@ -165,7 +166,11 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
165
166
|
async _initialize() {
|
|
166
167
|
(0, _utils.assert)(!this._ffPages().length);
|
|
167
168
|
const browserContextId = this._browserContextId;
|
|
168
|
-
const promises = [super._initialize()
|
|
169
|
+
const promises = [super._initialize(), this._browser.session.send('Browser.addBinding', {
|
|
170
|
+
browserContextId: this._browserContextId,
|
|
171
|
+
name: _page.PageBinding.kPlaywrightBinding,
|
|
172
|
+
script: ''
|
|
173
|
+
})];
|
|
169
174
|
if (this._options.acceptDownloads !== 'internal-browser-default') {
|
|
170
175
|
promises.push(this._browser.session.send('Browser.setDownloadOptions', {
|
|
171
176
|
browserContextId,
|
|
@@ -301,7 +306,7 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
301
306
|
cookies: cc
|
|
302
307
|
});
|
|
303
308
|
}
|
|
304
|
-
async
|
|
309
|
+
async doClearCookies() {
|
|
305
310
|
await this._browser.session.send('Browser.clearCookies', {
|
|
306
311
|
browserContextId: this._browserContextId
|
|
307
312
|
});
|
|
@@ -356,42 +361,48 @@ class FFBrowserContext extends _browserContext.BrowserContext {
|
|
|
356
361
|
}
|
|
357
362
|
async doSetHTTPCredentials(httpCredentials) {
|
|
358
363
|
this._options.httpCredentials = httpCredentials;
|
|
364
|
+
let credentials = null;
|
|
365
|
+
if (httpCredentials) {
|
|
366
|
+
const {
|
|
367
|
+
username,
|
|
368
|
+
password,
|
|
369
|
+
origin
|
|
370
|
+
} = httpCredentials;
|
|
371
|
+
credentials = {
|
|
372
|
+
username,
|
|
373
|
+
password,
|
|
374
|
+
origin
|
|
375
|
+
};
|
|
376
|
+
}
|
|
359
377
|
await this._browser.session.send('Browser.setHTTPCredentials', {
|
|
360
378
|
browserContextId: this._browserContextId,
|
|
361
|
-
credentials
|
|
379
|
+
credentials
|
|
362
380
|
});
|
|
363
381
|
}
|
|
364
|
-
async doAddInitScript(
|
|
382
|
+
async doAddInitScript(initScript) {
|
|
383
|
+
await this._updateInitScripts();
|
|
384
|
+
}
|
|
385
|
+
async doRemoveNonInternalInitScripts() {
|
|
386
|
+
await this._updateInitScripts();
|
|
387
|
+
}
|
|
388
|
+
async _updateInitScripts() {
|
|
389
|
+
const bindingScripts = [...this._pageBindings.values()].map(binding => binding.initScript.source);
|
|
390
|
+
const initScripts = this.initScripts.map(script => script.source);
|
|
365
391
|
await this._browser.session.send('Browser.setInitScripts', {
|
|
366
392
|
browserContextId: this._browserContextId,
|
|
367
|
-
scripts:
|
|
393
|
+
scripts: [...bindingScripts, ...initScripts].map(script => ({
|
|
368
394
|
script
|
|
369
395
|
}))
|
|
370
396
|
});
|
|
371
397
|
}
|
|
372
|
-
async doRemoveInitScripts() {
|
|
373
|
-
await this._browser.session.send('Browser.setInitScripts', {
|
|
374
|
-
browserContextId: this._browserContextId,
|
|
375
|
-
scripts: []
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
async doExposeBinding(binding) {
|
|
379
|
-
await this._browser.session.send('Browser.addBinding', {
|
|
380
|
-
browserContextId: this._browserContextId,
|
|
381
|
-
name: binding.name,
|
|
382
|
-
script: binding.source
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
async doRemoveExposedBindings() {
|
|
386
|
-
// TODO: implement me.
|
|
387
|
-
// This is not a critical problem, what ends up happening is
|
|
388
|
-
// an old binding will be restored upon page reload and will point nowhere.
|
|
389
|
-
}
|
|
390
398
|
async doUpdateRequestInterception() {
|
|
391
|
-
await this._browser.session.send('Browser.setRequestInterception', {
|
|
399
|
+
await Promise.all([this._browser.session.send('Browser.setRequestInterception', {
|
|
392
400
|
browserContextId: this._browserContextId,
|
|
393
401
|
enabled: !!this._requestInterceptor
|
|
394
|
-
})
|
|
402
|
+
}), this._browser.session.send('Browser.setCacheDisabled', {
|
|
403
|
+
browserContextId: this._browserContextId,
|
|
404
|
+
cacheDisabled: !!this._requestInterceptor
|
|
405
|
+
})]);
|
|
395
406
|
}
|
|
396
407
|
onClosePersistent() {}
|
|
397
408
|
async clearCache() {
|
|
@@ -69,11 +69,11 @@ class FFConnection extends _events.EventEmitter {
|
|
|
69
69
|
const session = this._sessions.get(message.sessionId || '');
|
|
70
70
|
if (session) session.dispatchMessage(message);
|
|
71
71
|
}
|
|
72
|
-
_onClose() {
|
|
72
|
+
_onClose(reason) {
|
|
73
73
|
this._closed = true;
|
|
74
74
|
this._transport.onmessage = undefined;
|
|
75
75
|
this._transport.onclose = undefined;
|
|
76
|
-
this._browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs());
|
|
76
|
+
this._browserDisconnectedLogs = _helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);
|
|
77
77
|
this.rootSession.dispose();
|
|
78
78
|
Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));
|
|
79
79
|
}
|
|
@@ -40,9 +40,11 @@ class FFNetworkManager {
|
|
|
40
40
|
_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
41
41
|
}
|
|
42
42
|
async setRequestInterception(enabled) {
|
|
43
|
-
await this._session.send('Network.setRequestInterception', {
|
|
43
|
+
await Promise.all([this._session.send('Network.setRequestInterception', {
|
|
44
44
|
enabled
|
|
45
|
-
})
|
|
45
|
+
}), this._session.send('Page.setCacheDisabled', {
|
|
46
|
+
cacheDisabled: enabled
|
|
47
|
+
})]);
|
|
46
48
|
}
|
|
47
49
|
_onRequestWillBeSent(event) {
|
|
48
50
|
const redirectedFrom = event.redirectedFrom ? this._requests.get(event.redirectedFrom) || null : null;
|
|
@@ -191,7 +193,7 @@ class FFRouteImpl {
|
|
|
191
193
|
this._session = session;
|
|
192
194
|
this._request = request;
|
|
193
195
|
}
|
|
194
|
-
async continue(
|
|
196
|
+
async continue(overrides) {
|
|
195
197
|
await this._session.sendMayFail('Network.resumeInterceptedRequest', {
|
|
196
198
|
requestId: this._request._id,
|
|
197
199
|
url: overrides.url,
|
|
@@ -205,7 +207,7 @@ class FFRouteImpl {
|
|
|
205
207
|
await this._session.sendMayFail('Network.fulfillInterceptedRequest', {
|
|
206
208
|
requestId: this._request._id,
|
|
207
209
|
status: response.status,
|
|
208
|
-
statusText: network.
|
|
210
|
+
statusText: network.statusText(response.status),
|
|
209
211
|
headers: response.headers,
|
|
210
212
|
base64body
|
|
211
213
|
});
|
|
@@ -40,7 +40,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
40
40
|
const UTILITY_WORLD_NAME = exports.UTILITY_WORLD_NAME = '__playwright_utility_world__';
|
|
41
41
|
class FFPage {
|
|
42
42
|
constructor(session, browserContext, opener) {
|
|
43
|
-
this.
|
|
43
|
+
this.cspErrorsAsynchronousForInlineScripts = true;
|
|
44
44
|
this.rawMouse = void 0;
|
|
45
45
|
this.rawKeyboard = void 0;
|
|
46
46
|
this.rawTouchscreen = void 0;
|
|
@@ -81,7 +81,7 @@ class FFPage {
|
|
|
81
81
|
});
|
|
82
82
|
// Ideally, we somehow ensure that utility world is created before Page.ready arrives, but currently it is racy.
|
|
83
83
|
// Therefore, we can end up with an initialized page without utility world, although very unlikely.
|
|
84
|
-
this.addInitScript('', UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
|
|
84
|
+
this.addInitScript(new _page.InitScript('', true), UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
|
|
85
85
|
}
|
|
86
86
|
potentiallyUninitializedPage() {
|
|
87
87
|
return this._page;
|
|
@@ -121,11 +121,11 @@ class FFPage {
|
|
|
121
121
|
const frame = this._page._frameManager.frame(auxData.frameId);
|
|
122
122
|
if (!frame) return;
|
|
123
123
|
const delegate = new _ffExecutionContext.FFExecutionContext(this._session, executionContextId);
|
|
124
|
-
let worldName
|
|
125
|
-
if (auxData.name === UTILITY_WORLD_NAME) worldName = 'utility';else if (!auxData.name) worldName = 'main';
|
|
124
|
+
let worldName;
|
|
125
|
+
if (auxData.name === UTILITY_WORLD_NAME) worldName = 'utility';else if (!auxData.name) worldName = 'main';else return;
|
|
126
126
|
const context = new dom.FrameExecutionContext(delegate, frame, worldName);
|
|
127
127
|
context[contextDelegateSymbol] = delegate;
|
|
128
|
-
|
|
128
|
+
frame._contextCreated(worldName, context);
|
|
129
129
|
this._contextIdToContext.set(executionContextId, context);
|
|
130
130
|
}
|
|
131
131
|
_onExecutionContextDestroyed(payload) {
|
|
@@ -200,7 +200,8 @@ class FFPage {
|
|
|
200
200
|
} = payload;
|
|
201
201
|
const context = this._contextIdToContext.get(executionContextId);
|
|
202
202
|
if (!context) return;
|
|
203
|
-
|
|
203
|
+
// Juggler reports 'warn' for some internal messages generated by the browser.
|
|
204
|
+
this._page._addConsoleMessage(type === 'warn' ? 'warning' : type, args.map(arg => context.createHandle(arg)), location);
|
|
204
205
|
}
|
|
205
206
|
_onDialogOpened(params) {
|
|
206
207
|
this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, params.type, params.message, async (accept, promptText) => {
|
|
@@ -287,15 +288,6 @@ class FFPage {
|
|
|
287
288
|
_onVideoRecordingStarted(event) {
|
|
288
289
|
this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this.pageOrError());
|
|
289
290
|
}
|
|
290
|
-
async exposeBinding(binding) {
|
|
291
|
-
await this._session.send('Page.addBinding', {
|
|
292
|
-
name: binding.name,
|
|
293
|
-
script: binding.source
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
async removeExposedBindings() {
|
|
297
|
-
// TODO: implement me.
|
|
298
|
-
}
|
|
299
291
|
didClose() {
|
|
300
292
|
this._markAsError(new _errors.TargetClosedError());
|
|
301
293
|
this._session.dispose();
|
|
@@ -368,19 +360,25 @@ class FFPage {
|
|
|
368
360
|
});
|
|
369
361
|
return success;
|
|
370
362
|
}
|
|
371
|
-
async addInitScript(
|
|
363
|
+
async addInitScript(initScript, worldName) {
|
|
372
364
|
this._initScripts.push({
|
|
373
|
-
|
|
365
|
+
initScript,
|
|
374
366
|
worldName
|
|
375
367
|
});
|
|
376
368
|
await this._session.send('Page.setInitScripts', {
|
|
377
|
-
scripts: this._initScripts
|
|
369
|
+
scripts: this._initScripts.map(s => ({
|
|
370
|
+
script: s.initScript.source,
|
|
371
|
+
worldName: s.worldName
|
|
372
|
+
}))
|
|
378
373
|
});
|
|
379
374
|
}
|
|
380
|
-
async
|
|
381
|
-
this._initScripts =
|
|
375
|
+
async removeNonInternalInitScripts() {
|
|
376
|
+
this._initScripts = this._initScripts.filter(s => s.initScript.internal);
|
|
382
377
|
await this._session.send('Page.setInitScripts', {
|
|
383
|
-
scripts:
|
|
378
|
+
scripts: this._initScripts.map(s => ({
|
|
379
|
+
script: s.initScript.source,
|
|
380
|
+
worldName: s.worldName
|
|
381
|
+
}))
|
|
384
382
|
});
|
|
385
383
|
}
|
|
386
384
|
async closePage(runBeforeUnload) {
|
|
@@ -509,12 +507,12 @@ class FFPage {
|
|
|
509
507
|
async setInputFiles(handle, files) {
|
|
510
508
|
await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files);
|
|
511
509
|
}
|
|
512
|
-
async setInputFilePaths(
|
|
513
|
-
await
|
|
510
|
+
async setInputFilePaths(handle, files) {
|
|
511
|
+
await this._session.send('Page.setFileInputFiles', {
|
|
514
512
|
frameId: handle._context.frame._id,
|
|
515
513
|
objectId: handle._objectId,
|
|
516
514
|
files
|
|
517
|
-
})
|
|
515
|
+
});
|
|
518
516
|
}
|
|
519
517
|
async adoptElementHandle(handle, to) {
|
|
520
518
|
const result = await this._session.send('Page.adoptNode', {
|
|
@@ -34,17 +34,17 @@ class Firefox extends _browserType.BrowserType {
|
|
|
34
34
|
constructor(parent) {
|
|
35
35
|
super(parent, 'firefox');
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
connectToTransport(transport, options) {
|
|
38
38
|
return _ffBrowser.FFBrowser.connect(this.attribution.playwright, transport, options);
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
doRewriteStartupLog(error) {
|
|
41
41
|
if (!error.logs) return error;
|
|
42
42
|
// https://github.com/microsoft/playwright/issues/6500
|
|
43
43
|
if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
|
|
44
44
|
if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
|
|
45
45
|
return error;
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
amendEnvironment(env, userDataDir, executable, browserArguments) {
|
|
48
48
|
if (!_path.default.isAbsolute(os.homedir())) throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);
|
|
49
49
|
if (os.platform() === 'linux') {
|
|
50
50
|
// Always remove SNAP_NAME and SNAP_INSTANCE_NAME env variables since they
|
|
@@ -58,7 +58,7 @@ class Firefox extends _browserType.BrowserType {
|
|
|
58
58
|
}
|
|
59
59
|
return env;
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
attemptToGracefullyCloseBrowser(transport) {
|
|
62
62
|
const message = {
|
|
63
63
|
method: 'Browser.close',
|
|
64
64
|
params: {},
|
|
@@ -66,7 +66,7 @@ class Firefox extends _browserType.BrowserType {
|
|
|
66
66
|
};
|
|
67
67
|
transport.send(message);
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
defaultArgs(options, isPersistent, userDataDir) {
|
|
70
70
|
const {
|
|
71
71
|
args = [],
|
|
72
72
|
headless
|
|
@@ -87,5 +87,24 @@ class Firefox extends _browserType.BrowserType {
|
|
|
87
87
|
if (isPersistent) firefoxArguments.push('about:blank');else firefoxArguments.push('-silent');
|
|
88
88
|
return firefoxArguments;
|
|
89
89
|
}
|
|
90
|
+
readyState(options) {
|
|
91
|
+
return new JugglerReadyState();
|
|
92
|
+
}
|
|
90
93
|
}
|
|
91
|
-
exports.Firefox = Firefox;
|
|
94
|
+
exports.Firefox = Firefox;
|
|
95
|
+
class JugglerReadyState {
|
|
96
|
+
constructor() {
|
|
97
|
+
this._jugglerPromise = new _utils.ManualPromise();
|
|
98
|
+
}
|
|
99
|
+
onBrowserOutput(message) {
|
|
100
|
+
if (message.includes('Juggler listening to the pipe')) this._jugglerPromise.resolve();
|
|
101
|
+
}
|
|
102
|
+
onBrowserExit() {
|
|
103
|
+
// Unblock launch when browser prematurely exits.
|
|
104
|
+
this._jugglerPromise.resolve();
|
|
105
|
+
}
|
|
106
|
+
async waitUntilReady() {
|
|
107
|
+
await this._jugglerPromise;
|
|
108
|
+
return {};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.FrameSelectors = void 0;
|
|
7
7
|
var _selectorParser = require("../utils/isomorphic/selectorParser");
|
|
8
|
-
var
|
|
8
|
+
var _utils = require("../utils");
|
|
9
9
|
/**
|
|
10
10
|
* Copyright (c) Microsoft Corporation.
|
|
11
11
|
*
|
|
@@ -111,7 +111,7 @@ class FrameSelectors {
|
|
|
111
111
|
for (const chunk of frameChunks) {
|
|
112
112
|
(0, _selectorParser.visitAllSelectorParts)(chunk, (part, nested) => {
|
|
113
113
|
if (nested && part.name === 'internal:control' && part.body === 'enter-frame') {
|
|
114
|
-
const locator = (0,
|
|
114
|
+
const locator = (0, _utils.asLocator)(this.frame._page.attribution.playwright.options.sdkLanguage, selector);
|
|
115
115
|
throw new _selectorParser.InvalidSelectorError(`Frame locators are not allowed inside composite locators, while querying "${locator}"`);
|
|
116
116
|
}
|
|
117
117
|
});
|