@checkly/playwright-core 1.48.22 → 1.51.11-beta.2
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 +60 -48
- package/bin/reinstall_chrome_beta_linux.sh +10 -8
- package/bin/reinstall_chrome_stable_linux.sh +10 -8
- package/bin/reinstall_msedge_beta_linux.sh +17 -9
- package/bin/reinstall_msedge_dev_linux.sh +17 -9
- package/bin/reinstall_msedge_stable_linux.sh +17 -9
- package/browsers.json +33 -12
- package/index.js +0 -1
- package/lib/androidServerImpl.js +5 -5
- package/lib/browserServerImpl.js +18 -9
- package/lib/checkly/secretsFilter.js +1 -1
- package/lib/cli/driver.js +6 -6
- package/lib/cli/program.js +38 -43
- package/lib/cli/programWithTestStub.js +2 -1
- package/lib/client/android.js +37 -58
- package/lib/client/artifact.js +4 -7
- package/lib/client/browser.js +10 -15
- package/lib/client/browserContext.js +69 -62
- package/lib/client/browserType.js +30 -64
- package/lib/client/channelOwner.js +53 -68
- package/lib/client/clientHelper.js +4 -6
- package/lib/client/clientInstrumentation.js +2 -0
- package/lib/client/clientStackTrace.js +65 -0
- package/lib/client/connection.js +48 -41
- package/lib/client/consoleMessage.js +4 -7
- package/lib/client/electron.js +10 -10
- package/lib/client/elementHandle.js +32 -33
- package/lib/client/errors.js +2 -2
- package/lib/client/eventEmitter.js +5 -8
- package/lib/client/fetch.js +61 -62
- package/lib/client/fileUtils.js +31 -0
- package/lib/client/frame.js +22 -23
- package/lib/client/harRouter.js +7 -9
- package/lib/client/jsHandle.js +3 -4
- package/lib/client/localUtils.js +24 -0
- package/lib/client/locator.js +27 -13
- package/lib/client/network.js +44 -37
- package/lib/client/page.js +50 -41
- package/lib/client/platform.js +71 -0
- package/lib/client/playwright.js +21 -1
- package/lib/client/selectors.js +8 -2
- package/lib/client/stream.js +2 -21
- package/lib/client/timeoutSettings.js +65 -0
- package/lib/client/tracing.js +29 -7
- package/lib/client/video.js +2 -2
- package/lib/client/waiter.js +19 -16
- package/lib/client/webSocket.js +106 -0
- package/lib/client/worker.js +4 -4
- package/lib/client/writableStream.js +2 -21
- package/lib/generated/consoleApiSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/webSocketMockSource.js +1 -1
- package/lib/inProcessFactory.js +8 -3
- package/lib/outofprocess.js +12 -8
- package/lib/protocol/debug.js +1 -1
- package/lib/protocol/validator.js +77 -11
- package/lib/protocol/validatorPrimitives.js +1 -2
- package/lib/remote/playwrightConnection.js +21 -12
- package/lib/remote/playwrightServer.js +22 -8
- package/lib/server/android/android.js +17 -14
- package/lib/server/android/backendAdb.js +14 -14
- package/lib/server/artifact.js +3 -3
- package/lib/server/bidi/bidiBrowser.js +11 -8
- package/lib/server/bidi/bidiChromium.js +5 -4
- package/lib/server/bidi/bidiConnection.js +1 -3
- package/lib/server/bidi/bidiExecutionContext.js +71 -25
- package/lib/server/bidi/bidiFirefox.js +4 -3
- package/lib/server/bidi/bidiInput.js +11 -12
- package/lib/server/bidi/bidiNetworkManager.js +11 -12
- package/lib/server/bidi/bidiOverCdp.js +2 -2
- package/lib/server/bidi/bidiPage.js +39 -66
- package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
- package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +60 -55
- package/lib/server/browserType.js +22 -18
- package/lib/server/callLog.js +79 -0
- package/lib/server/chromium/chromium.js +20 -16
- package/lib/server/chromium/chromiumSwitches.js +32 -9
- package/lib/server/chromium/crBrowser.js +25 -24
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crCoverage.js +1 -1
- package/lib/server/chromium/crDevTools.js +1 -1
- package/lib/server/chromium/crDragDrop.js +1 -1
- package/lib/server/chromium/crExecutionContext.js +26 -35
- package/lib/server/chromium/crInput.js +17 -6
- package/lib/server/chromium/crNetworkManager.js +3 -3
- package/lib/server/chromium/crPage.js +43 -55
- package/lib/server/chromium/crPdf.js +1 -1
- package/lib/server/chromium/crProtocolHelper.js +3 -3
- package/lib/server/chromium/crServiceWorker.js +2 -2
- package/lib/server/chromium/videoRecorder.js +2 -2
- package/lib/server/clock.js +1 -1
- package/lib/server/codegen/csharp.js +21 -16
- package/lib/server/codegen/java.js +17 -9
- package/lib/server/codegen/javascript.js +37 -7
- package/lib/server/codegen/jsonl.js +1 -1
- package/lib/server/codegen/languages.js +2 -2
- package/lib/server/codegen/python.js +14 -17
- package/lib/server/debugController.js +23 -45
- package/lib/server/debugger.js +1 -1
- package/lib/server/deviceDescriptors.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dispatchers/androidDispatcher.js +14 -3
- package/lib/server/dispatchers/artifactDispatcher.js +3 -3
- package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
- package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
- package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
- package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
- package/lib/server/dispatchers/dispatcher.js +27 -25
- package/lib/server/dispatchers/electronDispatcher.js +3 -3
- package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
- package/lib/server/dispatchers/frameDispatcher.js +9 -3
- package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
- package/lib/server/dispatchers/networkDispatchers.js +3 -3
- package/lib/server/dispatchers/pageDispatcher.js +10 -8
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/streamDispatcher.js +4 -3
- package/lib/server/dispatchers/tracingDispatcher.js +10 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
- package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
- package/lib/server/dom.js +102 -48
- package/lib/server/download.js +1 -1
- package/lib/server/electron/electron.js +17 -16
- package/lib/server/errors.js +1 -1
- package/lib/server/fetch.js +49 -33
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +17 -9
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +25 -29
- package/lib/server/firefox/ffInput.js +15 -4
- package/lib/server/firefox/ffNetworkManager.js +3 -3
- package/lib/server/firefox/ffPage.js +29 -50
- package/lib/server/firefox/firefox.js +7 -9
- package/lib/server/frameSelectors.js +1 -1
- package/lib/server/frames.js +65 -55
- package/lib/server/har/harRecorder.js +4 -4
- package/lib/server/har/harTracer.js +8 -9
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +2 -2
- package/lib/server/index.js +1 -14
- package/lib/server/input.js +3 -4
- package/lib/server/instrumentation.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
- package/lib/server/javascript.js +26 -33
- package/lib/server/launchApp.js +7 -7
- package/lib/server/localUtils.js +203 -0
- package/lib/server/network.js +5 -5
- package/lib/server/page.js +76 -37
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +5 -5
- package/lib/server/progress.js +1 -4
- package/lib/server/protocolError.js +1 -1
- package/lib/server/recorder/chat.js +177 -0
- package/lib/server/recorder/codeGenerator.js +154 -0
- package/lib/server/recorder/contextRecorder.js +9 -18
- package/lib/server/recorder/csharp.js +311 -0
- package/lib/server/recorder/java.js +249 -0
- package/lib/server/recorder/javascript.js +230 -0
- package/lib/server/recorder/jsonl.js +48 -0
- package/lib/server/recorder/language.js +45 -0
- package/lib/server/recorder/python.js +276 -0
- package/lib/server/recorder/recorderActions.js +6 -0
- package/lib/server/recorder/recorderApp.js +25 -28
- package/lib/server/recorder/recorderCollection.js +9 -21
- package/lib/server/recorder/recorderInTraceViewer.js +1 -1
- package/lib/server/recorder/recorderRunner.js +7 -3
- package/lib/server/recorder/recorderUtils.js +5 -28
- package/lib/server/recorder/throttledFile.js +3 -4
- package/lib/server/recorder/utils.js +46 -0
- package/lib/server/recorder.js +83 -43
- package/lib/server/registry/browserFetcher.js +10 -8
- package/lib/server/registry/dependencies.js +20 -20
- package/lib/server/registry/index.js +215 -61
- package/lib/server/registry/nativeDeps.js +10 -4
- package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
- package/lib/server/screenshotter.js +1 -1
- package/lib/server/selectors.js +3 -3
- package/lib/server/socksClientCertificatesInterceptor.js +8 -8
- package/lib/server/socksInterceptor.js +8 -5
- package/lib/server/storageScript.js +160 -0
- package/lib/server/timeoutSettings.js +74 -0
- package/lib/server/trace/recorder/snapshotter.js +10 -20
- package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
- package/lib/server/trace/recorder/tracing.js +108 -45
- package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
- package/lib/server/trace/viewer/traceViewer.js +21 -7
- package/lib/server/transport.js +3 -2
- package/lib/server/utils/ascii.js +31 -0
- package/lib/server/utils/comparators.js +159 -0
- package/lib/server/utils/crypto.js +171 -0
- package/lib/server/utils/debug.js +38 -0
- package/lib/server/utils/debugLogger.js +93 -0
- package/lib/server/utils/env.js +53 -0
- package/lib/server/utils/eventsHelper.js +38 -0
- package/lib/server/utils/expectUtils.js +33 -0
- package/lib/server/utils/fileUtils.js +204 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +145 -0
- package/lib/server/utils/httpServer.js +233 -0
- package/lib/server/utils/image_tools/colorUtils.js +98 -0
- package/lib/server/utils/image_tools/compare.js +108 -0
- package/lib/server/utils/image_tools/imageChannel.js +70 -0
- package/lib/server/utils/image_tools/stats.js +102 -0
- package/lib/server/utils/linuxUtils.js +58 -0
- package/lib/server/utils/network.js +160 -0
- package/lib/server/utils/nodePlatform.js +140 -0
- package/lib/server/utils/pipeTransport.js +82 -0
- package/lib/server/utils/processLauncher.js +248 -0
- package/lib/server/utils/profiler.js +52 -0
- package/lib/server/utils/socksProxy.js +570 -0
- package/lib/server/utils/spawnAsync.js +45 -0
- package/lib/server/utils/task.js +58 -0
- package/lib/server/utils/userAgent.js +91 -0
- package/lib/server/utils/wsServer.js +128 -0
- package/lib/server/utils/zipFile.js +75 -0
- package/lib/server/utils/zones.js +54 -0
- package/lib/server/webkit/webkit.js +4 -4
- package/lib/server/webkit/wkBrowser.js +10 -10
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +26 -30
- package/lib/server/webkit/wkInput.js +17 -7
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +80 -66
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +2 -2
- package/lib/utils/fileUtils.js +1 -1
- package/lib/utils/glob.js +84 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
- package/lib/utils/isomorphic/assert.js +25 -0
- package/lib/utils/isomorphic/colors.js +65 -0
- package/lib/utils/isomorphic/cssParser.js +5 -5
- package/lib/utils/isomorphic/headers.js +52 -0
- package/lib/utils/isomorphic/locatorGenerators.js +38 -8
- package/lib/utils/isomorphic/locatorParser.js +19 -13
- package/lib/utils/isomorphic/manualPromise.js +107 -0
- package/lib/utils/isomorphic/mimeType.js +11 -3
- package/lib/utils/isomorphic/multimap.js +73 -0
- package/lib/utils/isomorphic/rtti.js +41 -0
- package/lib/utils/isomorphic/semaphore.js +51 -0
- package/lib/utils/isomorphic/stackTrace.js +169 -0
- package/lib/utils/isomorphic/stringUtils.js +31 -1
- package/lib/utils/isomorphic/time.js +25 -0
- package/lib/utils/isomorphic/timeoutRunner.js +66 -0
- package/lib/utils/isomorphic/traceUtils.js +23 -0
- package/lib/utils/isomorphic/types.js +5 -0
- package/lib/utils/isomorphic/urlMatch.js +7 -5
- package/lib/utils/mimeType.js +30 -0
- package/lib/utils/stackTrace.js +1 -1
- package/lib/utils.js +447 -0
- package/lib/utilsBundle.js +4 -29
- package/lib/utilsBundleImpl/index.js +188 -33
- package/lib/vite/htmlReport/index.html +20 -17
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
- package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
- package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
- package/lib/vite/traceViewer/embedded.html +6 -6
- package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
- package/lib/vite/traceViewer/index.html +27 -9
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
- package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
- package/lib/vite/traceViewer/recorder.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +7888 -3
- package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +8 -7
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +820 -153
- package/types/types.d.ts +285 -82
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
- package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
- package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
- package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
- package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
- package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
- package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
- package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
- package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
- package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
- package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
- package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -4,19 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.BidiPage = void 0;
|
|
7
|
-
var _eventsHelper = require("../../utils/eventsHelper");
|
|
8
7
|
var _utils = require("../../utils");
|
|
9
|
-
var
|
|
8
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
9
|
+
var _browserContext = require("../browserContext");
|
|
10
10
|
var dialog = _interopRequireWildcard(require("../dialog"));
|
|
11
|
+
var dom = _interopRequireWildcard(require("../dom"));
|
|
11
12
|
var _page = require("../page");
|
|
12
|
-
var _bidiInput = require("./bidiInput");
|
|
13
|
-
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
14
13
|
var _bidiExecutionContext = require("./bidiExecutionContext");
|
|
14
|
+
var _bidiInput = require("./bidiInput");
|
|
15
15
|
var _bidiNetworkManager = require("./bidiNetworkManager");
|
|
16
|
-
var _browserContext = require("../browserContext");
|
|
17
16
|
var _bidiPdf = require("./bidiPdf");
|
|
17
|
+
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
18
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); }
|
|
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 &&
|
|
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 && {}.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; }
|
|
20
20
|
/**
|
|
21
21
|
* Copyright (c) Microsoft Corporation.
|
|
22
22
|
*
|
|
@@ -41,7 +41,6 @@ class BidiPage {
|
|
|
41
41
|
this.rawKeyboard = void 0;
|
|
42
42
|
this.rawTouchscreen = void 0;
|
|
43
43
|
this._page = void 0;
|
|
44
|
-
this._pagePromise = void 0;
|
|
45
44
|
this._session = void 0;
|
|
46
45
|
this._opener = void 0;
|
|
47
46
|
this._realmToContext = void 0;
|
|
@@ -49,7 +48,6 @@ class BidiPage {
|
|
|
49
48
|
this._browserContext = void 0;
|
|
50
49
|
this._networkManager = void 0;
|
|
51
50
|
this._pdf = void 0;
|
|
52
|
-
this._initializedPage = null;
|
|
53
51
|
this._initScriptIds = [];
|
|
54
52
|
this._session = bidiSession;
|
|
55
53
|
this._opener = opener;
|
|
@@ -65,15 +63,13 @@ class BidiPage {
|
|
|
65
63
|
this._sessionListeners = [_eventsHelper.eventsHelper.addEventListener(bidiSession, 'script.realmCreated', this._onRealmCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'script.message', this._onScriptMessage.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.contextDestroyed', this._onBrowsingContextDestroyed.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationStarted', this._onNavigationStarted.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationAborted', this._onNavigationAborted.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.navigationFailed', this._onNavigationFailed.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.fragmentNavigated', this._onFragmentNavigated.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.domContentLoaded', this._onDomContentLoaded.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.load', this._onLoad.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'browsingContext.userPromptOpened', this._onUserPromptOpened.bind(this)), _eventsHelper.eventsHelper.addEventListener(bidiSession, 'log.entryAdded', this._onLogEntryAdded.bind(this))];
|
|
66
64
|
|
|
67
65
|
// Initialize main frame.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this._page.reportAsNew(e);
|
|
76
|
-
return e;
|
|
66
|
+
// TODO: Wait for first execution context to be created and maybe about:blank navigated.
|
|
67
|
+
this._initialize().then(() => {
|
|
68
|
+
var _this$_opener;
|
|
69
|
+
return this._page.reportAsNew((_this$_opener = this._opener) === null || _this$_opener === void 0 ? void 0 : _this$_opener._page);
|
|
70
|
+
}, error => {
|
|
71
|
+
var _this$_opener2;
|
|
72
|
+
return this._page.reportAsNew((_this$_opener2 = this._opener) === null || _this$_opener2 === void 0 ? void 0 : _this$_opener2._page, error);
|
|
77
73
|
});
|
|
78
74
|
}
|
|
79
75
|
async _initialize() {
|
|
@@ -84,18 +80,11 @@ class BidiPage {
|
|
|
84
80
|
async _addAllInitScripts() {
|
|
85
81
|
return Promise.all(this._page.allInitScripts().map(initScript => this.addInitScript(initScript)));
|
|
86
82
|
}
|
|
87
|
-
potentiallyUninitializedPage() {
|
|
88
|
-
return this._page;
|
|
89
|
-
}
|
|
90
83
|
didClose() {
|
|
91
84
|
this._session.dispose();
|
|
92
85
|
_eventsHelper.eventsHelper.removeEventListeners(this._sessionListeners);
|
|
93
86
|
this._page._didClose();
|
|
94
87
|
}
|
|
95
|
-
async pageOrError() {
|
|
96
|
-
// TODO: Wait for first execution context to be created and maybe about:blank navigated.
|
|
97
|
-
return this._pagePromise;
|
|
98
|
-
}
|
|
99
88
|
_onFrameAttached(frameId, parentFrameId) {
|
|
100
89
|
return this._page._frameManager.frameAttached(frameId, parentFrameId);
|
|
101
90
|
}
|
|
@@ -112,7 +101,6 @@ class BidiPage {
|
|
|
112
101
|
if (realmInfo.type !== 'window') return;
|
|
113
102
|
const frame = this._page._frameManager.frame(realmInfo.context);
|
|
114
103
|
if (!frame) return;
|
|
115
|
-
const delegate = new _bidiExecutionContext.BidiExecutionContext(this._session, realmInfo);
|
|
116
104
|
let worldName;
|
|
117
105
|
if (!realmInfo.sandbox) {
|
|
118
106
|
worldName = 'main';
|
|
@@ -123,8 +111,8 @@ class BidiPage {
|
|
|
123
111
|
} else {
|
|
124
112
|
return;
|
|
125
113
|
}
|
|
114
|
+
const delegate = new _bidiExecutionContext.BidiExecutionContext(this._session, realmInfo);
|
|
126
115
|
const context = new dom.FrameExecutionContext(delegate, frame, worldName);
|
|
127
|
-
context[contextDelegateSymbol] = delegate;
|
|
128
116
|
frame._contextCreated(worldName, context);
|
|
129
117
|
this._realmToContext.set(realmInfo.realm, context);
|
|
130
118
|
}
|
|
@@ -213,10 +201,7 @@ class BidiPage {
|
|
|
213
201
|
lineNumber: 1,
|
|
214
202
|
columnNumber: 1
|
|
215
203
|
};
|
|
216
|
-
this._page._addConsoleMessage(entry.method, entry.args.map(arg =>
|
|
217
|
-
objectId: arg.handle,
|
|
218
|
-
...arg
|
|
219
|
-
})), location, params.text || undefined);
|
|
204
|
+
this._page._addConsoleMessage(entry.method, entry.args.map(arg => (0, _bidiExecutionContext.createHandle)(context, arg)), location, params.text || undefined);
|
|
220
205
|
}
|
|
221
206
|
async navigateFrame(frame, url, referrer) {
|
|
222
207
|
const {
|
|
@@ -311,7 +296,7 @@ class BidiPage {
|
|
|
311
296
|
}
|
|
312
297
|
async _onScriptMessage(event) {
|
|
313
298
|
if (event.channel !== kPlaywrightBindingChannel) return;
|
|
314
|
-
const pageOrError = await this.
|
|
299
|
+
const pageOrError = await this._page.waitForInitializedOrError();
|
|
315
300
|
if (pageOrError instanceof Error) return;
|
|
316
301
|
const context = this._realmToContext.get(event.source.realm);
|
|
317
302
|
if (!context) return;
|
|
@@ -351,7 +336,7 @@ class BidiPage {
|
|
|
351
336
|
context: this._session.sessionId,
|
|
352
337
|
format: {
|
|
353
338
|
type: `image/${format === 'png' ? 'png' : 'jpeg'}`,
|
|
354
|
-
quality: quality
|
|
339
|
+
quality: quality ? quality / 100 : 0.8
|
|
355
340
|
},
|
|
356
341
|
origin: documentRect ? 'document' : 'viewport',
|
|
357
342
|
clip: {
|
|
@@ -363,21 +348,20 @@ class BidiPage {
|
|
|
363
348
|
}
|
|
364
349
|
async getContentFrame(handle) {
|
|
365
350
|
const executionContext = toBidiExecutionContext(handle._context);
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
if (contentWindow.type === 'window') {
|
|
370
|
-
const frameId = contentWindow.value.context;
|
|
371
|
-
const result = this._page._frameManager.frame(frameId);
|
|
372
|
-
return result;
|
|
373
|
-
}
|
|
374
|
-
return null;
|
|
351
|
+
const frameId = await executionContext.contentFrameIdForFrame(handle);
|
|
352
|
+
if (!frameId) return null;
|
|
353
|
+
return this._page._frameManager.frame(frameId);
|
|
375
354
|
}
|
|
376
355
|
async getOwnerFrame(handle) {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
356
|
+
// TODO: switch to utility world?
|
|
357
|
+
const windowHandle = await handle.evaluateHandle(node => {
|
|
358
|
+
var _node$ownerDocument;
|
|
359
|
+
const doc = (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 ? _node$ownerDocument : node;
|
|
360
|
+
return doc.defaultView;
|
|
361
|
+
});
|
|
362
|
+
if (!windowHandle) return null;
|
|
363
|
+
const executionContext = toBidiExecutionContext(handle._context);
|
|
364
|
+
return executionContext.frameIdForWindowHandle(windowHandle);
|
|
381
365
|
}
|
|
382
366
|
async getBoundingBox(handle) {
|
|
383
367
|
const box = await handle.evaluate(element => {
|
|
@@ -460,29 +444,19 @@ class BidiPage {
|
|
|
460
444
|
}));
|
|
461
445
|
return quads;
|
|
462
446
|
}
|
|
463
|
-
async setInputFiles(handle, files) {
|
|
464
|
-
throw new Error('Method not implemented.');
|
|
465
|
-
}
|
|
466
447
|
async setInputFilePaths(handle, paths) {
|
|
467
|
-
|
|
448
|
+
const fromContext = toBidiExecutionContext(handle._context);
|
|
449
|
+
await this._session.send('input.setFiles', {
|
|
450
|
+
context: this._session.sessionId,
|
|
451
|
+
element: await fromContext.nodeIdForElementHandle(handle),
|
|
452
|
+
files: paths
|
|
453
|
+
});
|
|
468
454
|
}
|
|
469
455
|
async adoptElementHandle(handle, to) {
|
|
470
456
|
const fromContext = toBidiExecutionContext(handle._context);
|
|
471
|
-
const
|
|
472
|
-
handle: handle._objectId
|
|
473
|
-
});
|
|
474
|
-
// TODO: store sharedId in the handle.
|
|
475
|
-
if (!('sharedId' in shared)) throw new Error('Element is not a node');
|
|
476
|
-
const sharedId = shared.sharedId;
|
|
457
|
+
const nodeId = await fromContext.nodeIdForElementHandle(handle);
|
|
477
458
|
const executionContext = toBidiExecutionContext(to);
|
|
478
|
-
|
|
479
|
-
sharedId
|
|
480
|
-
});
|
|
481
|
-
if ('handle' in result) return to.createHandle({
|
|
482
|
-
objectId: result.handle,
|
|
483
|
-
...result
|
|
484
|
-
});
|
|
485
|
-
throw new Error('Failed to adopt element handle.');
|
|
459
|
+
return await executionContext.remoteObjectForNodeId(to, nodeId);
|
|
486
460
|
}
|
|
487
461
|
async getAccessibilityTree(needle) {
|
|
488
462
|
throw new Error('Method not implemented.');
|
|
@@ -524,6 +498,5 @@ function addMainBinding(callback) {
|
|
|
524
498
|
globalThis['__playwright__binding__'] = callback;
|
|
525
499
|
}
|
|
526
500
|
function toBidiExecutionContext(executionContext) {
|
|
527
|
-
return executionContext
|
|
528
|
-
}
|
|
529
|
-
const contextDelegateSymbol = Symbol('delegate');
|
|
501
|
+
return executionContext.delegate;
|
|
502
|
+
}
|
|
@@ -13,18 +13,18 @@ exports.getBidiKeyValue = void 0;
|
|
|
13
13
|
|
|
14
14
|
/* eslint-disable curly */
|
|
15
15
|
|
|
16
|
-
const getBidiKeyValue =
|
|
17
|
-
switch (
|
|
16
|
+
const getBidiKeyValue = keyName => {
|
|
17
|
+
switch (keyName) {
|
|
18
18
|
case '\r':
|
|
19
19
|
case '\n':
|
|
20
|
-
|
|
20
|
+
keyName = 'Enter';
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
23
|
// Measures the number of code points rather than UTF-16 code units.
|
|
24
|
-
if ([...
|
|
25
|
-
return
|
|
24
|
+
if ([...keyName].length === 1) {
|
|
25
|
+
return keyName;
|
|
26
26
|
}
|
|
27
|
-
switch (
|
|
27
|
+
switch (keyName) {
|
|
28
28
|
case 'Cancel':
|
|
29
29
|
return '\uE001';
|
|
30
30
|
case 'Help':
|
|
@@ -137,6 +137,8 @@ const getBidiKeyValue = key => {
|
|
|
137
137
|
return '\uE052';
|
|
138
138
|
case 'MetaRight':
|
|
139
139
|
return '\uE053';
|
|
140
|
+
case 'Space':
|
|
141
|
+
return ' ';
|
|
140
142
|
case 'Digit0':
|
|
141
143
|
return '0';
|
|
142
144
|
case 'Digit1':
|
|
@@ -232,7 +234,7 @@ const getBidiKeyValue = key => {
|
|
|
232
234
|
case 'Quote':
|
|
233
235
|
return '"';
|
|
234
236
|
default:
|
|
235
|
-
throw new Error(`Unknown key: "${
|
|
237
|
+
throw new Error(`Unknown key: "${keyName}"`);
|
|
236
238
|
}
|
|
237
239
|
};
|
|
238
240
|
exports.getBidiKeyValue = getBidiKeyValue;
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.createProfile = createProfile;
|
|
7
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
/**
|
|
11
11
|
* @license
|
|
12
12
|
* Copyright 2023 Google Inc.
|
|
@@ -47,6 +47,13 @@ function defaultProfilePreferences(extraPrefs) {
|
|
|
47
47
|
// console
|
|
48
48
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1543115
|
|
49
49
|
'browser.dom.window.dump.enabled': true,
|
|
50
|
+
// Make sure newtab weather doesn't hit the network to retrieve weather data.
|
|
51
|
+
'browser.newtabpage.activity-stream.discoverystream.region-weather-config': '',
|
|
52
|
+
// Make sure newtab wallpapers don't hit the network to retrieve wallpaper data.
|
|
53
|
+
'browser.newtabpage.activity-stream.newtabWallpapers.enabled': false,
|
|
54
|
+
'browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled': false,
|
|
55
|
+
// Make sure Topsites doesn't hit the network to retrieve sponsored tiles.
|
|
56
|
+
'browser.newtabpage.activity-stream.showSponsoredTopSites': false,
|
|
50
57
|
// Disable topstories
|
|
51
58
|
'browser.newtabpage.activity-stream.feeds.system.topstories': false,
|
|
52
59
|
// Always display a blank page
|
|
@@ -112,6 +119,13 @@ function defaultProfilePreferences(extraPrefs) {
|
|
|
112
119
|
// Disable slow script dialogues
|
|
113
120
|
'dom.max_chrome_script_run_time': 0,
|
|
114
121
|
'dom.max_script_run_time': 0,
|
|
122
|
+
// Disable background timer throttling to allow tests to run in parallel
|
|
123
|
+
// without a decrease in performance.
|
|
124
|
+
'dom.min_background_timeout_value': 0,
|
|
125
|
+
'dom.min_background_timeout_value_without_budget_throttling': 0,
|
|
126
|
+
'dom.timeout.enable_budget_timer_throttling': false,
|
|
127
|
+
// Disable HTTPS-First upgrades
|
|
128
|
+
'dom.security.https_first': false,
|
|
115
129
|
// Only load extensions from the application and user profile
|
|
116
130
|
// AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
|
|
117
131
|
'extensions.autoDisableScopes': 0,
|
|
@@ -141,10 +155,14 @@ function defaultProfilePreferences(extraPrefs) {
|
|
|
141
155
|
'hangmonitor.timeout': 0,
|
|
142
156
|
// Show chrome errors and warnings in the error console
|
|
143
157
|
'javascript.options.showInConsole': true,
|
|
158
|
+
// Do not throttle rendering (requestAnimationFrame) in background tabs
|
|
159
|
+
'layout.testing.top-level-always-active': true,
|
|
144
160
|
// Disable download and usage of OpenH264: and Widevine plugins
|
|
145
161
|
'media.gmp-manager.updateEnabled': false,
|
|
146
162
|
// Disable the GFX sanity window
|
|
147
163
|
'media.sanity-test.disabled': true,
|
|
164
|
+
// Disable connectivity service pings
|
|
165
|
+
'network.connectivity-service.enabled': false,
|
|
148
166
|
// Disable experimental feature that is only available in Nightly
|
|
149
167
|
'network.cookie.sameSite.laxByDefault': false,
|
|
150
168
|
// Do not prompt for temporary redirects
|
|
@@ -169,8 +187,6 @@ function defaultProfilePreferences(extraPrefs) {
|
|
|
169
187
|
'security.fileuri.strict_origin_policy': false,
|
|
170
188
|
// Do not wait for the notification button security delay
|
|
171
189
|
'security.notification_enable_delay': 0,
|
|
172
|
-
// Ensure blocklist updates do not hit the network
|
|
173
|
-
'services.settings.server': `http://${server}/dummy/blocklist/`,
|
|
174
190
|
// Do not automatically fill sign-in forms with known usernames and
|
|
175
191
|
// passwords
|
|
176
192
|
'signon.autofillForms': false,
|
package/lib/server/browser.js
CHANGED
|
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Browser = void 0;
|
|
7
|
+
var _artifact = require("./artifact");
|
|
7
8
|
var _browserContext = require("./browserContext");
|
|
8
|
-
var _page = require("./page");
|
|
9
9
|
var _download = require("./download");
|
|
10
10
|
var _instrumentation = require("./instrumentation");
|
|
11
|
-
var
|
|
11
|
+
var _page = require("./page");
|
|
12
12
|
var _socksClientCertificatesInterceptor = require("./socksClientCertificatesInterceptor");
|
|
13
13
|
/**
|
|
14
14
|
* Copyright (c) Microsoft Corporation.
|
|
@@ -9,26 +9,29 @@ exports.normalizeProxySettings = normalizeProxySettings;
|
|
|
9
9
|
exports.validateBrowserContextOptions = validateBrowserContextOptions;
|
|
10
10
|
exports.verifyClientCertificates = verifyClientCertificates;
|
|
11
11
|
exports.verifyGeolocation = verifyGeolocation;
|
|
12
|
-
var _timeoutSettings = require("../common/timeoutSettings");
|
|
13
|
-
var _utils = require("../utils");
|
|
14
|
-
var _fileUtils = require("../utils/fileUtils");
|
|
15
|
-
var _helper = require("./helper");
|
|
16
|
-
var network = _interopRequireWildcard(require("./network"));
|
|
17
|
-
var _page6 = require("./page");
|
|
18
|
-
var _path = _interopRequireDefault(require("path"));
|
|
19
12
|
var _fs = _interopRequireDefault(require("fs"));
|
|
20
|
-
var
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
var _timeoutSettings = require("./timeoutSettings");
|
|
15
|
+
var _crypto = require("./utils/crypto");
|
|
16
|
+
var _debug = require("./utils/debug");
|
|
17
|
+
var _clock = require("./clock");
|
|
21
18
|
var _debugger = require("./debugger");
|
|
22
|
-
var
|
|
19
|
+
var _fetch = require("./fetch");
|
|
20
|
+
var _fileUtils = require("./utils/fileUtils");
|
|
23
21
|
var _harRecorder = require("./har/harRecorder");
|
|
22
|
+
var _helper = require("./helper");
|
|
23
|
+
var _instrumentation = require("./instrumentation");
|
|
24
|
+
var utilityScriptSerializers = _interopRequireWildcard(require("./isomorphic/utilityScriptSerializers"));
|
|
25
|
+
var network = _interopRequireWildcard(require("./network"));
|
|
26
|
+
var _page6 = require("./page");
|
|
24
27
|
var _recorder = require("./recorder");
|
|
25
|
-
var consoleApiSource = _interopRequireWildcard(require("../generated/consoleApiSource"));
|
|
26
|
-
var _fetch = require("./fetch");
|
|
27
|
-
var _clock = require("./clock");
|
|
28
28
|
var _recorderApp = require("./recorder/recorderApp");
|
|
29
|
-
|
|
29
|
+
var storageScript = _interopRequireWildcard(require("./storageScript"));
|
|
30
|
+
var consoleApiSource = _interopRequireWildcard(require("../generated/consoleApiSource"));
|
|
31
|
+
var _tracing = require("./trace/recorder/tracing");
|
|
30
32
|
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); }
|
|
31
|
-
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 &&
|
|
33
|
+
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 && {}.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; }
|
|
34
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
32
35
|
/**
|
|
33
36
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
34
37
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -102,7 +105,7 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
102
105
|
this._debugger = new _debugger.Debugger(this);
|
|
103
106
|
|
|
104
107
|
// When PWDEBUG=1, show inspector for each context.
|
|
105
|
-
if ((0,
|
|
108
|
+
if ((0, _debug.debugMode)() === 'inspector') await _recorder.Recorder.show(this, _recorderApp.RecorderApp.factory(this), {
|
|
106
109
|
pauseOnNextStatement: true
|
|
107
110
|
});
|
|
108
111
|
|
|
@@ -111,7 +114,7 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
111
114
|
this._debugger.on(_debugger.Debugger.Events.PausedStateChanged, () => {
|
|
112
115
|
if (this._debugger.isPaused()) _recorder.Recorder.showInspectorNoReply(this, _recorderApp.RecorderApp.factory(this));
|
|
113
116
|
});
|
|
114
|
-
if ((0,
|
|
117
|
+
if ((0, _debug.debugMode)() === 'console') await this.extendInjectedScript(consoleApiSource.source);
|
|
115
118
|
if (this._options.serviceWorkers === 'block') await this.addInitScript(`\nif (navigator.serviceWorker) navigator.serviceWorker.register = async () => { console.warn('Service Worker registration blocked by Playwright'); };\n`);
|
|
116
119
|
if (this._options.permissions) await this.grantPermissions(this._options.permissions);
|
|
117
120
|
}
|
|
@@ -201,6 +204,9 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
201
204
|
this._closePromiseFulfill(new Error('Context closed'));
|
|
202
205
|
this.emit(BrowserContext.Events.Close);
|
|
203
206
|
}
|
|
207
|
+
pages() {
|
|
208
|
+
return this.possiblyUninitializedPages().filter(page => page.initializedOrUndefined());
|
|
209
|
+
}
|
|
204
210
|
|
|
205
211
|
// BrowserContext methods.
|
|
206
212
|
|
|
@@ -227,6 +233,9 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
227
233
|
setHTTPCredentials(httpCredentials) {
|
|
228
234
|
return this.doSetHTTPCredentials(httpCredentials);
|
|
229
235
|
}
|
|
236
|
+
hasBinding(name) {
|
|
237
|
+
return this._pageBindings.has(name);
|
|
238
|
+
}
|
|
230
239
|
async exposeBinding(name, needsHandle, playwrightBinding) {
|
|
231
240
|
if (this._pageBindings.has(name)) throw new Error(`Function "${name}" has been already registered`);
|
|
232
241
|
for (const page of this.pages()) {
|
|
@@ -266,27 +275,29 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
266
275
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
267
276
|
}
|
|
268
277
|
async _loadDefaultContextAsIs(progress) {
|
|
269
|
-
if (!this.
|
|
278
|
+
if (!this.possiblyUninitializedPages().length) {
|
|
270
279
|
const waitForEvent = _helper.helper.waitForEvent(progress, this, BrowserContext.Events.Page);
|
|
271
280
|
progress.cleanupWhenAborted(() => waitForEvent.dispose);
|
|
272
|
-
|
|
273
|
-
|
|
281
|
+
// Race against BrowserContext.close
|
|
282
|
+
await Promise.race([waitForEvent.promise, this._closePromise]);
|
|
274
283
|
}
|
|
275
|
-
const
|
|
276
|
-
if (
|
|
277
|
-
await
|
|
278
|
-
|
|
284
|
+
const page = this.possiblyUninitializedPages()[0];
|
|
285
|
+
if (!page) return;
|
|
286
|
+
const pageOrError = await page.waitForInitializedOrError();
|
|
287
|
+
if (pageOrError instanceof Error) throw pageOrError;
|
|
288
|
+
await page.mainFrame()._waitForLoadState(progress, 'load');
|
|
289
|
+
return page;
|
|
279
290
|
}
|
|
280
291
|
async _loadDefaultContext(progress) {
|
|
281
|
-
const
|
|
292
|
+
const defaultPage = await this._loadDefaultContextAsIs(progress);
|
|
293
|
+
if (!defaultPage) return;
|
|
282
294
|
const browserName = this._browser.options.name;
|
|
283
295
|
if (this._options.isMobile && browserName === 'chromium' || this._options.locale && browserName === 'webkit') {
|
|
284
296
|
// Workaround for:
|
|
285
297
|
// - chromium fails to change isMobile for existing page;
|
|
286
298
|
// - webkit fails to change locale for existing page.
|
|
287
|
-
const oldPage = pages[0];
|
|
288
299
|
await this.newPage(progress.metadata);
|
|
289
|
-
await
|
|
300
|
+
await defaultPage.close(progress.metadata);
|
|
290
301
|
}
|
|
291
302
|
}
|
|
292
303
|
_authenticateProxyViaHeader() {
|
|
@@ -319,8 +330,8 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
319
330
|
password: password || ''
|
|
320
331
|
};
|
|
321
332
|
}
|
|
322
|
-
async addInitScript(source) {
|
|
323
|
-
const initScript = new _page6.InitScript(source);
|
|
333
|
+
async addInitScript(source, name) {
|
|
334
|
+
const initScript = new _page6.InitScript(source, false /* internal */, name);
|
|
324
335
|
this.initScripts.push(initScript);
|
|
325
336
|
await this.doAddInitScript(initScript);
|
|
326
337
|
}
|
|
@@ -380,9 +391,9 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
380
391
|
await this._closePromise;
|
|
381
392
|
}
|
|
382
393
|
async newPage(metadata) {
|
|
383
|
-
const
|
|
384
|
-
if (metadata.isServerSide)
|
|
385
|
-
const pageOrError = await
|
|
394
|
+
const page = await this.doCreateNewPage();
|
|
395
|
+
if (metadata.isServerSide) page.markAsServerSideOnly();
|
|
396
|
+
const pageOrError = await page.waitForInitializedOrError();
|
|
386
397
|
if (pageOrError instanceof _page6.Page) {
|
|
387
398
|
if (pageOrError.isClosed()) throw new Error('Page has been closed.');
|
|
388
399
|
return pageOrError;
|
|
@@ -392,24 +403,25 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
392
403
|
addVisitedOrigin(origin) {
|
|
393
404
|
this._origins.add(origin);
|
|
394
405
|
}
|
|
395
|
-
async storageState() {
|
|
406
|
+
async storageState(indexedDB = false) {
|
|
396
407
|
const result = {
|
|
397
408
|
cookies: await this.cookies(),
|
|
398
409
|
origins: []
|
|
399
410
|
};
|
|
400
411
|
const originsToSave = new Set(this._origins);
|
|
412
|
+
const collectScript = `(${storageScript.collect})((${utilityScriptSerializers.source})(), ${this._browser.options.name === 'firefox'}, ${indexedDB})`;
|
|
401
413
|
|
|
402
414
|
// First try collecting storage stage from existing pages.
|
|
403
415
|
for (const page of this.pages()) {
|
|
404
416
|
const origin = page.mainFrame().origin();
|
|
405
417
|
if (!origin || !originsToSave.has(origin)) continue;
|
|
406
418
|
try {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
if (storage.localStorage.length) result.origins.push({
|
|
419
|
+
var _storage$indexedDB;
|
|
420
|
+
const storage = await page.mainFrame().nonStallingEvaluateInExistingContext(collectScript, 'utility');
|
|
421
|
+
if (storage.localStorage.length || (_storage$indexedDB = storage.indexedDB) !== null && _storage$indexedDB !== void 0 && _storage$indexedDB.length) result.origins.push({
|
|
411
422
|
origin,
|
|
412
|
-
localStorage: storage.localStorage
|
|
423
|
+
localStorage: storage.localStorage,
|
|
424
|
+
indexedDB: storage.indexedDB
|
|
413
425
|
});
|
|
414
426
|
originsToSave.delete(origin);
|
|
415
427
|
} catch {
|
|
@@ -428,19 +440,17 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
428
440
|
return true;
|
|
429
441
|
});
|
|
430
442
|
for (const origin of originsToSave) {
|
|
431
|
-
|
|
432
|
-
origin,
|
|
433
|
-
localStorage: []
|
|
434
|
-
};
|
|
443
|
+
var _storage$indexedDB2;
|
|
435
444
|
const frame = page.mainFrame();
|
|
436
445
|
await frame.goto(internalMetadata, origin);
|
|
437
|
-
const storage = await frame.evaluateExpression(
|
|
438
|
-
localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name) })),
|
|
439
|
-
})`, {
|
|
446
|
+
const storage = await frame.evaluateExpression(collectScript, {
|
|
440
447
|
world: 'utility'
|
|
441
448
|
});
|
|
442
|
-
|
|
443
|
-
|
|
449
|
+
if (storage.localStorage.length || (_storage$indexedDB2 = storage.indexedDB) !== null && _storage$indexedDB2 !== void 0 && _storage$indexedDB2.length) result.origins.push({
|
|
450
|
+
origin,
|
|
451
|
+
localStorage: storage.localStorage,
|
|
452
|
+
indexedDB: storage.indexedDB
|
|
453
|
+
});
|
|
444
454
|
}
|
|
445
455
|
await page.close(internalMetadata);
|
|
446
456
|
}
|
|
@@ -498,14 +508,9 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
498
508
|
for (const originState of state.origins) {
|
|
499
509
|
const frame = page.mainFrame();
|
|
500
510
|
await frame.goto(metadata, originState.origin);
|
|
501
|
-
await frame.evaluateExpression(`
|
|
502
|
-
originState => {
|
|
503
|
-
for (const { name, value } of (originState.localStorage || []))
|
|
504
|
-
localStorage.setItem(name, value);
|
|
505
|
-
}`, {
|
|
506
|
-
isFunction: true,
|
|
511
|
+
await frame.evaluateExpression(`(${storageScript.restore})(${JSON.stringify(originState)}, (${utilityScriptSerializers.source})())`, {
|
|
507
512
|
world: 'utility'
|
|
508
|
-
}
|
|
513
|
+
});
|
|
509
514
|
}
|
|
510
515
|
await page.close(internalMetadata);
|
|
511
516
|
}
|
|
@@ -526,7 +531,7 @@ class BrowserContext extends _instrumentation.SdkObject {
|
|
|
526
531
|
await Promise.all(this.pages().map(page => page.safeNonStallingEvaluateInAllFrames(expression, world, options)));
|
|
527
532
|
}
|
|
528
533
|
async _harStart(page, options) {
|
|
529
|
-
const harId = (0,
|
|
534
|
+
const harId = (0, _crypto.createGuid)();
|
|
530
535
|
this._harRecorders.set(harId, new _harRecorder.HarRecorder(this, page, options));
|
|
531
536
|
return harId;
|
|
532
537
|
}
|
|
@@ -651,7 +656,7 @@ function normalizeProxySettings(proxy) {
|
|
|
651
656
|
bypass
|
|
652
657
|
};
|
|
653
658
|
}
|
|
654
|
-
const paramsThatAllowContextReuse = ['colorScheme', 'forcedColors', 'reducedMotion', 'screen', 'userAgent', 'viewport'];
|
|
659
|
+
const paramsThatAllowContextReuse = ['colorScheme', 'forcedColors', 'reducedMotion', 'contrast', 'screen', 'userAgent', 'viewport'];
|
|
655
660
|
const defaultNewContextParamValues = {
|
|
656
661
|
noDefaultViewport: false,
|
|
657
662
|
ignoreHTTPSErrors: false,
|