@checkly/playwright-core 1.48.22 → 1.51.11-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +3 -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
|
@@ -6,31 +6,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.BrowserContext = void 0;
|
|
7
7
|
exports.prepareBrowserContextParams = prepareBrowserContextParams;
|
|
8
8
|
exports.toClientCertificatesProtocol = toClientCertificatesProtocol;
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
13
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _artifact = require("./artifact");
|
|
10
|
+
var _browser = require("./browser");
|
|
11
|
+
var _cdpSession = require("./cdpSession");
|
|
14
12
|
var _channelOwner = require("./channelOwner");
|
|
15
13
|
var _clientHelper = require("./clientHelper");
|
|
16
|
-
var
|
|
17
|
-
var
|
|
14
|
+
var _clock = require("./clock");
|
|
15
|
+
var _consoleMessage = require("./consoleMessage");
|
|
16
|
+
var _dialog = require("./dialog");
|
|
17
|
+
var _errors = require("./errors");
|
|
18
18
|
var _events = require("./events");
|
|
19
|
-
var _timeoutSettings = require("../common/timeoutSettings");
|
|
20
|
-
var _waiter = require("./waiter");
|
|
21
|
-
var _utils = require("../utils");
|
|
22
|
-
var _cdpSession = require("./cdpSession");
|
|
23
|
-
var _tracing = require("./tracing");
|
|
24
|
-
var _artifact = require("./artifact");
|
|
25
19
|
var _fetch = require("./fetch");
|
|
26
|
-
var
|
|
20
|
+
var _frame = require("./frame");
|
|
27
21
|
var _harRouter = require("./harRouter");
|
|
28
|
-
var
|
|
29
|
-
var
|
|
22
|
+
var network = _interopRequireWildcard(require("./network"));
|
|
23
|
+
var _page = require("./page");
|
|
24
|
+
var _tracing = require("./tracing");
|
|
25
|
+
var _waiter = require("./waiter");
|
|
30
26
|
var _webError = require("./webError");
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
|
|
27
|
+
var _worker = require("./worker");
|
|
28
|
+
var _timeoutSettings = require("./timeoutSettings");
|
|
29
|
+
var _fileUtils = require("./fileUtils");
|
|
30
|
+
var _headers = require("../utils/isomorphic/headers");
|
|
31
|
+
var _urlMatch = require("../utils/isomorphic/urlMatch");
|
|
32
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
33
|
+
var _stackTrace = require("../utils/isomorphic/stackTrace");
|
|
34
|
+
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); }
|
|
35
|
+
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
36
|
/**
|
|
35
37
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
36
38
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -47,10 +49,7 @@ let _Symbol$asyncDispose;
|
|
|
47
49
|
* See the License for the specific language governing permissions and
|
|
48
50
|
* limitations under the License.
|
|
49
51
|
*/
|
|
50
|
-
|
|
51
|
-
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); }
|
|
52
|
-
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; }
|
|
53
|
-
_Symbol$asyncDispose = Symbol.asyncDispose;
|
|
52
|
+
|
|
54
53
|
class BrowserContext extends _channelOwner.ChannelOwner {
|
|
55
54
|
static from(context) {
|
|
56
55
|
return context._object;
|
|
@@ -67,7 +66,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
67
66
|
this._browser = null;
|
|
68
67
|
this._browserType = void 0;
|
|
69
68
|
this._bindings = new Map();
|
|
70
|
-
this._timeoutSettings =
|
|
69
|
+
this._timeoutSettings = void 0;
|
|
71
70
|
this._ownerPage = void 0;
|
|
72
71
|
this._closedPromise = void 0;
|
|
73
72
|
this._options = {};
|
|
@@ -81,6 +80,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
81
80
|
this._closeWasCalled = false;
|
|
82
81
|
this._closeReason = void 0;
|
|
83
82
|
this._harRouters = [];
|
|
83
|
+
this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform);
|
|
84
84
|
if (parent instanceof _browser.Browser) this._browser = parent;
|
|
85
85
|
(_this$_browser = this._browser) === null || _this$_browser === void 0 || _this$_browser._contexts.add(this);
|
|
86
86
|
this._isChromium = ((_this$_browser2 = this._browser) === null || _this$_browser2 === void 0 ? void 0 : _this$_browser2._name) === 'chromium';
|
|
@@ -116,7 +116,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
116
116
|
this.emit(_events.Events.BrowserContext.ServiceWorker, serviceWorker);
|
|
117
117
|
});
|
|
118
118
|
this._channel.on('console', event => {
|
|
119
|
-
const consoleMessage = new _consoleMessage.ConsoleMessage(event);
|
|
119
|
+
const consoleMessage = new _consoleMessage.ConsoleMessage(this._platform, event);
|
|
120
120
|
this.emit(_events.Events.BrowserContext.Console, consoleMessage);
|
|
121
121
|
const page = consoleMessage.page();
|
|
122
122
|
if (page) page.emit(_events.Events.Page.Console, consoleMessage);
|
|
@@ -233,18 +233,18 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
233
233
|
setDefaultNavigationTimeout(timeout) {
|
|
234
234
|
this._timeoutSettings.setDefaultNavigationTimeout(timeout);
|
|
235
235
|
this._wrapApiCall(async () => {
|
|
236
|
-
this._channel.setDefaultNavigationTimeoutNoReply({
|
|
236
|
+
await this._channel.setDefaultNavigationTimeoutNoReply({
|
|
237
237
|
timeout
|
|
238
|
-
})
|
|
239
|
-
}, true);
|
|
238
|
+
});
|
|
239
|
+
}, true).catch(() => {});
|
|
240
240
|
}
|
|
241
241
|
setDefaultTimeout(timeout) {
|
|
242
242
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
243
243
|
this._wrapApiCall(async () => {
|
|
244
|
-
this._channel.setDefaultTimeoutNoReply({
|
|
244
|
+
await this._channel.setDefaultTimeoutNoReply({
|
|
245
245
|
timeout
|
|
246
|
-
})
|
|
247
|
-
}, true);
|
|
246
|
+
});
|
|
247
|
+
}, true).catch(() => {});
|
|
248
248
|
}
|
|
249
249
|
browser() {
|
|
250
250
|
return this._browser;
|
|
@@ -270,15 +270,15 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
270
270
|
}
|
|
271
271
|
async clearCookies(options = {}) {
|
|
272
272
|
await this._channel.clearCookies({
|
|
273
|
-
name: (0,
|
|
274
|
-
nameRegexSource: (0,
|
|
275
|
-
nameRegexFlags: (0,
|
|
276
|
-
domain: (0,
|
|
277
|
-
domainRegexSource: (0,
|
|
278
|
-
domainRegexFlags: (0,
|
|
279
|
-
path: (0,
|
|
280
|
-
pathRegexSource: (0,
|
|
281
|
-
pathRegexFlags: (0,
|
|
273
|
+
name: (0, _rtti.isString)(options.name) ? options.name : undefined,
|
|
274
|
+
nameRegexSource: (0, _rtti.isRegExp)(options.name) ? options.name.source : undefined,
|
|
275
|
+
nameRegexFlags: (0, _rtti.isRegExp)(options.name) ? options.name.flags : undefined,
|
|
276
|
+
domain: (0, _rtti.isString)(options.domain) ? options.domain : undefined,
|
|
277
|
+
domainRegexSource: (0, _rtti.isRegExp)(options.domain) ? options.domain.source : undefined,
|
|
278
|
+
domainRegexFlags: (0, _rtti.isRegExp)(options.domain) ? options.domain.flags : undefined,
|
|
279
|
+
path: (0, _rtti.isString)(options.path) ? options.path : undefined,
|
|
280
|
+
pathRegexSource: (0, _rtti.isRegExp)(options.path) ? options.path.source : undefined,
|
|
281
|
+
pathRegexFlags: (0, _rtti.isRegExp)(options.path) ? options.path.flags : undefined
|
|
282
282
|
});
|
|
283
283
|
}
|
|
284
284
|
async grantPermissions(permissions, options) {
|
|
@@ -298,7 +298,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
298
298
|
async setExtraHTTPHeaders(headers) {
|
|
299
299
|
network.validateHeaders(headers);
|
|
300
300
|
await this._channel.setExtraHTTPHeaders({
|
|
301
|
-
headers: (0,
|
|
301
|
+
headers: (0, _headers.headersObjectToArray)(headers)
|
|
302
302
|
});
|
|
303
303
|
}
|
|
304
304
|
async setOffline(offline) {
|
|
@@ -312,7 +312,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
312
312
|
});
|
|
313
313
|
}
|
|
314
314
|
async addInitScript(script, arg) {
|
|
315
|
-
const source = await (0, _clientHelper.evaluationScript)(script, arg);
|
|
315
|
+
const source = await (0, _clientHelper.evaluationScript)(this._platform, script, arg);
|
|
316
316
|
await this._channel.addInitScript({
|
|
317
317
|
source
|
|
318
318
|
});
|
|
@@ -332,7 +332,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
332
332
|
this._bindings.set(name, binding);
|
|
333
333
|
}
|
|
334
334
|
async route(url, handler, options = {}) {
|
|
335
|
-
this._routes.unshift(new network.RouteHandler(this._options.baseURL, url, handler, options.times));
|
|
335
|
+
this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));
|
|
336
336
|
await this._updateInterceptionPatterns();
|
|
337
337
|
}
|
|
338
338
|
async routeWebSocket(url, handler) {
|
|
@@ -358,11 +358,13 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
358
358
|
});
|
|
359
359
|
}
|
|
360
360
|
async routeFromHAR(har, options = {}) {
|
|
361
|
+
const localUtils = this._connection.localUtils();
|
|
362
|
+
if (!localUtils) throw new Error('Route from har is not supported in thin clients');
|
|
361
363
|
if (options.update) {
|
|
362
364
|
await this._recordIntoHAR(har, null, options);
|
|
363
365
|
return;
|
|
364
366
|
}
|
|
365
|
-
const harRouter = await _harRouter.HarRouter.create(
|
|
367
|
+
const harRouter = await _harRouter.HarRouter.create(localUtils, har, options.notFound || 'abort', {
|
|
366
368
|
urlMatch: options.url
|
|
367
369
|
});
|
|
368
370
|
this._harRouters.push(harRouter);
|
|
@@ -380,7 +382,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
380
382
|
const removed = [];
|
|
381
383
|
const remaining = [];
|
|
382
384
|
for (const route of this._routes) {
|
|
383
|
-
if ((0,
|
|
385
|
+
if ((0, _urlMatch.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler)) removed.push(route);else remaining.push(route);
|
|
384
386
|
}
|
|
385
387
|
await this._unrouteInternal(removed, remaining, 'default');
|
|
386
388
|
}
|
|
@@ -420,10 +422,12 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
420
422
|
});
|
|
421
423
|
}
|
|
422
424
|
async storageState(options = {}) {
|
|
423
|
-
const state = await this._channel.storageState(
|
|
425
|
+
const state = await this._channel.storageState({
|
|
426
|
+
indexedDB: options.indexedDB
|
|
427
|
+
});
|
|
424
428
|
if (options.path) {
|
|
425
|
-
await (0,
|
|
426
|
-
await
|
|
429
|
+
await (0, _fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
430
|
+
await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');
|
|
427
431
|
}
|
|
428
432
|
return state;
|
|
429
433
|
}
|
|
@@ -451,7 +455,7 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
451
455
|
this.tracing._resetStackCounter();
|
|
452
456
|
this.emit(_events.Events.BrowserContext.Close, this);
|
|
453
457
|
}
|
|
454
|
-
async [
|
|
458
|
+
async [Symbol.asyncDispose]() {
|
|
455
459
|
await this.close();
|
|
456
460
|
}
|
|
457
461
|
async close(options = {}) {
|
|
@@ -473,8 +477,10 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
473
477
|
const isCompressed = harParams.content === 'attach' || harParams.path.endsWith('.zip');
|
|
474
478
|
const needCompressed = harParams.path.endsWith('.zip');
|
|
475
479
|
if (isCompressed && !needCompressed) {
|
|
480
|
+
const localUtils = this._connection.localUtils();
|
|
481
|
+
if (!localUtils) throw new Error('Uncompressed har is not supported in thin clients');
|
|
476
482
|
await artifact.saveAs(harParams.path + '.tmp');
|
|
477
|
-
await
|
|
483
|
+
await localUtils.harUnzip({
|
|
478
484
|
zipFile: harParams.path + '.tmp',
|
|
479
485
|
harFile: harParams.path
|
|
480
486
|
});
|
|
@@ -492,10 +498,10 @@ class BrowserContext extends _channelOwner.ChannelOwner {
|
|
|
492
498
|
}
|
|
493
499
|
}
|
|
494
500
|
exports.BrowserContext = BrowserContext;
|
|
495
|
-
async function prepareStorageState(options) {
|
|
501
|
+
async function prepareStorageState(platform, options) {
|
|
496
502
|
if (typeof options.storageState !== 'string') return options.storageState;
|
|
497
503
|
try {
|
|
498
|
-
return JSON.parse(await
|
|
504
|
+
return JSON.parse(await platform.fs().promises.readFile(options.storageState, 'utf8'));
|
|
499
505
|
} catch (e) {
|
|
500
506
|
(0, _stackTrace.rewriteErrorMessage)(e, `Error reading storage state from ${options.storageState}:\n` + e.message);
|
|
501
507
|
throw e;
|
|
@@ -506,28 +512,29 @@ function prepareRecordHarOptions(options) {
|
|
|
506
512
|
return {
|
|
507
513
|
path: options.path,
|
|
508
514
|
content: options.content || (options.omitContent ? 'omit' : undefined),
|
|
509
|
-
urlGlob: (0,
|
|
510
|
-
urlRegexSource: (0,
|
|
511
|
-
urlRegexFlags: (0,
|
|
515
|
+
urlGlob: (0, _rtti.isString)(options.urlFilter) ? options.urlFilter : undefined,
|
|
516
|
+
urlRegexSource: (0, _rtti.isRegExp)(options.urlFilter) ? options.urlFilter.source : undefined,
|
|
517
|
+
urlRegexFlags: (0, _rtti.isRegExp)(options.urlFilter) ? options.urlFilter.flags : undefined,
|
|
512
518
|
mode: options.mode
|
|
513
519
|
};
|
|
514
520
|
}
|
|
515
|
-
async function prepareBrowserContextParams(options) {
|
|
521
|
+
async function prepareBrowserContextParams(platform, options) {
|
|
516
522
|
if (options.videoSize && !options.videosPath) throw new Error(`"videoSize" option requires "videosPath" to be specified`);
|
|
517
523
|
if (options.extraHTTPHeaders) network.validateHeaders(options.extraHTTPHeaders);
|
|
518
524
|
const contextParams = {
|
|
519
525
|
...options,
|
|
520
526
|
viewport: options.viewport === null ? undefined : options.viewport,
|
|
521
527
|
noDefaultViewport: options.viewport === null,
|
|
522
|
-
extraHTTPHeaders: options.extraHTTPHeaders ? (0,
|
|
523
|
-
storageState: await prepareStorageState(options),
|
|
528
|
+
extraHTTPHeaders: options.extraHTTPHeaders ? (0, _headers.headersObjectToArray)(options.extraHTTPHeaders) : undefined,
|
|
529
|
+
storageState: await prepareStorageState(platform, options),
|
|
524
530
|
serviceWorkers: options.serviceWorkers,
|
|
525
531
|
recordHar: prepareRecordHarOptions(options.recordHar),
|
|
526
532
|
colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,
|
|
527
533
|
reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,
|
|
528
534
|
forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,
|
|
535
|
+
contrast: options.contrast === null ? 'no-override' : options.contrast,
|
|
529
536
|
acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),
|
|
530
|
-
clientCertificates: await toClientCertificatesProtocol(options.clientCertificates)
|
|
537
|
+
clientCertificates: await toClientCertificatesProtocol(platform, options.clientCertificates)
|
|
531
538
|
};
|
|
532
539
|
if (!contextParams.recordVideo && options.videosPath) {
|
|
533
540
|
contextParams.recordVideo = {
|
|
@@ -535,7 +542,7 @@ async function prepareBrowserContextParams(options) {
|
|
|
535
542
|
size: options.videoSize
|
|
536
543
|
};
|
|
537
544
|
}
|
|
538
|
-
if (contextParams.recordVideo && contextParams.recordVideo.dir) contextParams.recordVideo.dir =
|
|
545
|
+
if (contextParams.recordVideo && contextParams.recordVideo.dir) contextParams.recordVideo.dir = platform.path().resolve(contextParams.recordVideo.dir);
|
|
539
546
|
return contextParams;
|
|
540
547
|
}
|
|
541
548
|
function toAcceptDownloadsProtocol(acceptDownloads) {
|
|
@@ -543,11 +550,11 @@ function toAcceptDownloadsProtocol(acceptDownloads) {
|
|
|
543
550
|
if (acceptDownloads) return 'accept';
|
|
544
551
|
return 'deny';
|
|
545
552
|
}
|
|
546
|
-
async function toClientCertificatesProtocol(certs) {
|
|
553
|
+
async function toClientCertificatesProtocol(platform, certs) {
|
|
547
554
|
if (!certs) return undefined;
|
|
548
555
|
const bufferizeContent = async (value, path) => {
|
|
549
556
|
if (value) return value;
|
|
550
|
-
if (path) return await
|
|
557
|
+
if (path) return await platform.fs().promises.readFile(path);
|
|
551
558
|
};
|
|
552
559
|
return await Promise.all(certs.map(async cert => ({
|
|
553
560
|
origin: cert.origin,
|
|
@@ -7,11 +7,13 @@ exports.BrowserType = void 0;
|
|
|
7
7
|
var _browser3 = require("./browser");
|
|
8
8
|
var _browserContext = require("./browserContext");
|
|
9
9
|
var _channelOwner = require("./channelOwner");
|
|
10
|
-
var _connection = require("./connection");
|
|
11
|
-
var _events = require("./events");
|
|
12
10
|
var _clientHelper = require("./clientHelper");
|
|
13
|
-
var
|
|
14
|
-
var
|
|
11
|
+
var _events = require("./events");
|
|
12
|
+
var _assert = require("../utils/isomorphic/assert");
|
|
13
|
+
var _headers = require("../utils/isomorphic/headers");
|
|
14
|
+
var _time = require("../utils/isomorphic/time");
|
|
15
|
+
var _timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
16
|
+
var _webSocket = require("./webSocket");
|
|
15
17
|
/**
|
|
16
18
|
* Copyright (c) Microsoft Corporation.
|
|
17
19
|
*
|
|
@@ -36,11 +38,6 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
36
38
|
this._serverLauncher = void 0;
|
|
37
39
|
this._contexts = new Set();
|
|
38
40
|
this._playwright = void 0;
|
|
39
|
-
// Instrumentation.
|
|
40
|
-
this._defaultContextOptions = void 0;
|
|
41
|
-
this._defaultContextTimeout = void 0;
|
|
42
|
-
this._defaultContextNavigationTimeout = void 0;
|
|
43
|
-
this._defaultLaunchOptions = void 0;
|
|
44
41
|
}
|
|
45
42
|
static from(browserType) {
|
|
46
43
|
return browserType._object;
|
|
@@ -53,12 +50,12 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
53
50
|
return this._initializer.name;
|
|
54
51
|
}
|
|
55
52
|
async launch(options = {}) {
|
|
56
|
-
var _this$
|
|
57
|
-
(0,
|
|
58
|
-
(0,
|
|
59
|
-
const logger = options.logger || ((_this$
|
|
53
|
+
var _this$_playwright$_de;
|
|
54
|
+
(0, _assert.assert)(!options.userDataDir, 'userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistentContext` instead');
|
|
55
|
+
(0, _assert.assert)(!options.port, 'Cannot specify a port without launching as a server.');
|
|
56
|
+
const logger = options.logger || ((_this$_playwright$_de = this._playwright._defaultLaunchOptions) === null || _this$_playwright$_de === void 0 ? void 0 : _this$_playwright$_de.logger);
|
|
60
57
|
options = {
|
|
61
|
-
...this._defaultLaunchOptions,
|
|
58
|
+
...this._playwright._defaultLaunchOptions,
|
|
62
59
|
...options
|
|
63
60
|
};
|
|
64
61
|
const launchOptions = {
|
|
@@ -76,28 +73,28 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
76
73
|
async launchServer(options = {}) {
|
|
77
74
|
if (!this._serverLauncher) throw new Error('Launching server is not supported');
|
|
78
75
|
options = {
|
|
79
|
-
...this._defaultLaunchOptions,
|
|
76
|
+
...this._playwright._defaultLaunchOptions,
|
|
80
77
|
...options
|
|
81
78
|
};
|
|
82
79
|
return await this._serverLauncher.launchServer(options);
|
|
83
80
|
}
|
|
84
81
|
async launchPersistentContext(userDataDir, options = {}) {
|
|
85
|
-
var _this$
|
|
86
|
-
const logger = options.logger || ((_this$
|
|
87
|
-
(0,
|
|
82
|
+
var _this$_playwright$_de2;
|
|
83
|
+
const logger = options.logger || ((_this$_playwright$_de2 = this._playwright._defaultLaunchOptions) === null || _this$_playwright$_de2 === void 0 ? void 0 : _this$_playwright$_de2.logger);
|
|
84
|
+
(0, _assert.assert)(!options.port, 'Cannot specify a port without launching as a server.');
|
|
88
85
|
options = {
|
|
89
|
-
...this._defaultLaunchOptions,
|
|
90
|
-
...this._defaultContextOptions,
|
|
86
|
+
...this._playwright._defaultLaunchOptions,
|
|
87
|
+
...this._playwright._defaultContextOptions,
|
|
91
88
|
...options
|
|
92
89
|
};
|
|
93
|
-
const contextParams = await (0, _browserContext.prepareBrowserContextParams)(options);
|
|
90
|
+
const contextParams = await (0, _browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
94
91
|
const persistentParams = {
|
|
95
92
|
...contextParams,
|
|
96
93
|
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
|
97
94
|
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
|
98
95
|
env: options.env ? (0, _clientHelper.envObjectToArray)(options.env) : undefined,
|
|
99
96
|
channel: options.channel,
|
|
100
|
-
userDataDir
|
|
97
|
+
userDataDir: this._platform.path().isAbsolute(userDataDir) || !userDataDir ? userDataDir : this._platform.path().resolve(userDataDir)
|
|
101
98
|
};
|
|
102
99
|
return await this._wrapApiCall(async () => {
|
|
103
100
|
const result = await this._channel.launchPersistentContext(persistentParams);
|
|
@@ -111,19 +108,18 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
111
108
|
...options,
|
|
112
109
|
wsEndpoint: optionsOrWsEndpoint
|
|
113
110
|
});
|
|
114
|
-
(0,
|
|
111
|
+
(0, _assert.assert)(optionsOrWsEndpoint.wsEndpoint, 'options.wsEndpoint is required');
|
|
115
112
|
return await this._connect(optionsOrWsEndpoint);
|
|
116
113
|
}
|
|
117
114
|
async _connect(params) {
|
|
118
115
|
const logger = params.logger;
|
|
119
116
|
return await this._wrapApiCall(async () => {
|
|
120
117
|
var _params$exposeNetwork;
|
|
121
|
-
const deadline = params.timeout ? (0,
|
|
118
|
+
const deadline = params.timeout ? (0, _time.monotonicTime)() + params.timeout : 0;
|
|
122
119
|
const headers = {
|
|
123
120
|
'x-playwright-browser': this.name(),
|
|
124
121
|
...params.headers
|
|
125
122
|
};
|
|
126
|
-
const localUtils = this._connection.localUtils();
|
|
127
123
|
const connectParams = {
|
|
128
124
|
wsEndpoint: params.wsEndpoint,
|
|
129
125
|
headers,
|
|
@@ -132,69 +128,39 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
132
128
|
timeout: params.timeout
|
|
133
129
|
};
|
|
134
130
|
if (params.__testHookRedirectPortForwarding) connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
|
|
135
|
-
const
|
|
136
|
-
pipe,
|
|
137
|
-
headers: connectHeaders
|
|
138
|
-
} = await localUtils._channel.connect(connectParams);
|
|
139
|
-
const closePipe = () => pipe.close().catch(() => {});
|
|
140
|
-
const connection = new _connection.Connection(localUtils, this._instrumentation);
|
|
141
|
-
connection.markAsRemote();
|
|
142
|
-
connection.on('close', closePipe);
|
|
131
|
+
const connection = await (0, _webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
143
132
|
let browser;
|
|
144
|
-
|
|
145
|
-
const onPipeClosed = reason => {
|
|
133
|
+
connection.on('close', () => {
|
|
146
134
|
// Emulate all pages, contexts and the browser closing upon disconnect.
|
|
147
135
|
for (const context of ((_browser = browser) === null || _browser === void 0 ? void 0 : _browser.contexts()) || []) {
|
|
148
136
|
var _browser;
|
|
149
137
|
for (const page of context.pages()) page._onClose();
|
|
150
138
|
context._onClose();
|
|
151
139
|
}
|
|
152
|
-
connection.close(reason || closeError);
|
|
153
|
-
// Give a chance to any API call promises to reject upon page/context closure.
|
|
154
|
-
// This happens naturally when we receive page.onClose and browser.onClose from the server
|
|
155
|
-
// in separate tasks. However, upon pipe closure we used to dispatch them all synchronously
|
|
156
|
-
// here and promises did not have a chance to reject.
|
|
157
|
-
// The order of rejects vs closure is a part of the API contract and our test runner
|
|
158
|
-
// relies on it to attribute rejections to the right test.
|
|
159
140
|
setTimeout(() => {
|
|
160
141
|
var _browser2;
|
|
161
142
|
return (_browser2 = browser) === null || _browser2 === void 0 ? void 0 : _browser2._didClose();
|
|
162
143
|
}, 0);
|
|
163
|
-
};
|
|
164
|
-
pipe.on('closed', params => onPipeClosed(params.reason));
|
|
165
|
-
connection.onmessage = message => this._wrapApiCall(() => pipe.send({
|
|
166
|
-
message
|
|
167
|
-
}).catch(() => onPipeClosed()), /* isInternal */true);
|
|
168
|
-
pipe.on('message', ({
|
|
169
|
-
message
|
|
170
|
-
}) => {
|
|
171
|
-
try {
|
|
172
|
-
connection.dispatch(message);
|
|
173
|
-
} catch (e) {
|
|
174
|
-
closeError = String(e);
|
|
175
|
-
closePipe();
|
|
176
|
-
}
|
|
177
144
|
});
|
|
178
145
|
const result = await (0, _timeoutRunner.raceAgainstDeadline)(async () => {
|
|
179
146
|
// For tests.
|
|
180
147
|
if (params.__testHookBeforeCreateBrowser) await params.__testHookBeforeCreateBrowser();
|
|
181
148
|
const playwright = await connection.initializePlaywright();
|
|
182
149
|
if (!playwright._initializer.preLaunchedBrowser) {
|
|
183
|
-
|
|
150
|
+
connection.close();
|
|
184
151
|
throw new Error('Malformed endpoint. Did you use BrowserType.launchServer method?');
|
|
185
152
|
}
|
|
186
153
|
playwright._setSelectors(this._playwright.selectors);
|
|
187
154
|
browser = _browser3.Browser.from(playwright._initializer.preLaunchedBrowser);
|
|
188
155
|
this._didLaunchBrowser(browser, {}, logger);
|
|
189
156
|
browser._shouldCloseConnectionOnClose = true;
|
|
190
|
-
browser.
|
|
191
|
-
browser.on(_events.Events.Browser.Disconnected, () => this._wrapApiCall(() => closePipe(), /* isInternal */true));
|
|
157
|
+
browser.on(_events.Events.Browser.Disconnected, () => connection.close());
|
|
192
158
|
return browser;
|
|
193
159
|
}, deadline);
|
|
194
160
|
if (!result.timedOut) {
|
|
195
161
|
return result.result;
|
|
196
162
|
} else {
|
|
197
|
-
|
|
163
|
+
connection.close();
|
|
198
164
|
throw new Error(`Timeout ${params.timeout}ms exceeded`);
|
|
199
165
|
}
|
|
200
166
|
});
|
|
@@ -202,12 +168,12 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
202
168
|
async connectOverCDP(endpointURLOrOptions, options) {
|
|
203
169
|
if (typeof endpointURLOrOptions === 'string') return await this._connectOverCDP(endpointURLOrOptions, options);
|
|
204
170
|
const endpointURL = 'endpointURL' in endpointURLOrOptions ? endpointURLOrOptions.endpointURL : endpointURLOrOptions.wsEndpoint;
|
|
205
|
-
(0,
|
|
171
|
+
(0, _assert.assert)(endpointURL, 'Cannot connect over CDP without wsEndpoint.');
|
|
206
172
|
return await this.connectOverCDP(endpointURL, endpointURLOrOptions);
|
|
207
173
|
}
|
|
208
174
|
async _connectOverCDP(endpointURL, params = {}) {
|
|
209
175
|
if (this.name() !== 'chromium') throw new Error('Connecting over CDP is only supported in Chromium.');
|
|
210
|
-
const headers = params.headers ? (0,
|
|
176
|
+
const headers = params.headers ? (0, _headers.headersObjectToArray)(params.headers) : undefined;
|
|
211
177
|
const result = await this._channel.connectOverCDP({
|
|
212
178
|
endpointURL,
|
|
213
179
|
headers,
|
|
@@ -229,8 +195,8 @@ class BrowserType extends _channelOwner.ChannelOwner {
|
|
|
229
195
|
context._browserType = this;
|
|
230
196
|
this._contexts.add(context);
|
|
231
197
|
context._setOptions(contextOptions, browserOptions);
|
|
232
|
-
if (this._defaultContextTimeout !== undefined) context.setDefaultTimeout(this._defaultContextTimeout);
|
|
233
|
-
if (this._defaultContextNavigationTimeout !== undefined) context.setDefaultNavigationTimeout(this._defaultContextNavigationTimeout);
|
|
198
|
+
if (this._playwright._defaultContextTimeout !== undefined) context.setDefaultTimeout(this._playwright._defaultContextTimeout);
|
|
199
|
+
if (this._playwright._defaultContextNavigationTimeout !== undefined) context.setDefaultNavigationTimeout(this._playwright._defaultContextNavigationTimeout);
|
|
234
200
|
await this._instrumentation.runAfterCreateBrowserContext(context);
|
|
235
201
|
}
|
|
236
202
|
async _willCloseContext(context) {
|