patchright-core 1.51.3 → 1.52.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/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +190 -212
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +73 -75
- package/lib/client/elementHandle.js +111 -147
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +56 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +371 -4
- package/lib/inProcessFactory.js +53 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +284 -404
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +140 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +221 -112
- package/lib/server/frames.js +731 -894
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +326 -423
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +37 -28
- package/lib/server/utils/debugLogger.js +69 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +138 -123
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +143 -86
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +73 -69
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +86 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-CXVeovup.js} +1 -1
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-_GLjJL-7.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +2 -0
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-l0TyP_G8.js +0 -259
- package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
- package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
package/lib/server/download.js
CHANGED
|
@@ -1,51 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var download_exports = {};
|
|
30
|
+
__export(download_exports, {
|
|
31
|
+
Download: () => Download
|
|
5
32
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
/**
|
|
13
|
-
* Copyright (c) Microsoft Corporation.
|
|
14
|
-
*
|
|
15
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
16
|
-
* you may not use this file except in compliance with the License.
|
|
17
|
-
* You may obtain a copy of the License at
|
|
18
|
-
*
|
|
19
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
-
*
|
|
21
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
23
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
-
* See the License for the specific language governing permissions and
|
|
25
|
-
* limitations under the License.
|
|
26
|
-
*/
|
|
27
|
-
|
|
33
|
+
module.exports = __toCommonJS(download_exports);
|
|
34
|
+
var import_path = __toESM(require("path"));
|
|
35
|
+
var import_page = require("./page");
|
|
36
|
+
var import_utils = require("../utils");
|
|
37
|
+
var import_artifact = require("./artifact");
|
|
28
38
|
class Download {
|
|
29
39
|
constructor(page, downloadsPath, uuid, url, suggestedFilename) {
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
this._page = void 0;
|
|
33
|
-
this._suggestedFilename = void 0;
|
|
34
|
-
const unaccessibleErrorMessage = page._browserContext._options.acceptDownloads === 'deny' ? 'Pass { acceptDownloads: true } when you are creating your browser context.' : undefined;
|
|
35
|
-
this.artifact = new _artifact.Artifact(page, _path.default.join(downloadsPath, uuid), unaccessibleErrorMessage, () => {
|
|
40
|
+
const unaccessibleErrorMessage = page._browserContext._options.acceptDownloads === "deny" ? "Pass { acceptDownloads: true } when you are creating your browser context." : void 0;
|
|
41
|
+
this.artifact = new import_artifact.Artifact(page, import_path.default.join(downloadsPath, uuid), unaccessibleErrorMessage, () => {
|
|
36
42
|
return this._page._browserContext.cancelDownload(uuid);
|
|
37
43
|
});
|
|
38
44
|
this._page = page;
|
|
39
45
|
this.url = url;
|
|
40
46
|
this._suggestedFilename = suggestedFilename;
|
|
41
47
|
page._browserContext._downloads.add(this);
|
|
42
|
-
if (suggestedFilename !==
|
|
48
|
+
if (suggestedFilename !== void 0)
|
|
49
|
+
this._fireDownloadEvent();
|
|
43
50
|
}
|
|
44
51
|
page() {
|
|
45
52
|
return this._page;
|
|
46
53
|
}
|
|
47
54
|
_filenameSuggested(suggestedFilename) {
|
|
48
|
-
(0,
|
|
55
|
+
(0, import_utils.assert)(this._suggestedFilename === void 0);
|
|
49
56
|
this._suggestedFilename = suggestedFilename;
|
|
50
57
|
this._fireDownloadEvent();
|
|
51
58
|
}
|
|
@@ -54,7 +61,10 @@ class Download {
|
|
|
54
61
|
}
|
|
55
62
|
_fireDownloadEvent() {
|
|
56
63
|
this._page.instrumentation.onDownload(this._page, this);
|
|
57
|
-
this._page.emit(
|
|
64
|
+
this._page.emit(import_page.Page.Events.Download, this);
|
|
58
65
|
}
|
|
59
66
|
}
|
|
60
|
-
|
|
67
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
68
|
+
0 && (module.exports = {
|
|
69
|
+
Download
|
|
70
|
+
});
|
|
@@ -1,118 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var electron_exports = {};
|
|
30
|
+
__export(electron_exports, {
|
|
31
|
+
Electron: () => Electron,
|
|
32
|
+
ElectronApplication: () => ElectronApplication
|
|
5
33
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var readline =
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var js =
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* you may not use this file except in compliance with the License.
|
|
36
|
-
* You may obtain a copy of the License at
|
|
37
|
-
*
|
|
38
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
39
|
-
*
|
|
40
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
41
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
42
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
43
|
-
* See the License for the specific language governing permissions and
|
|
44
|
-
* limitations under the License.
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
const ARTIFACTS_FOLDER = _path.default.join(_os.default.tmpdir(), 'playwright-artifacts-');
|
|
48
|
-
class ElectronApplication extends _instrumentation.SdkObject {
|
|
49
|
-
constructor(parent, browser, nodeConnection, process) {
|
|
50
|
-
super(parent, 'electron-app');
|
|
51
|
-
this._browserContext = void 0;
|
|
52
|
-
this._nodeConnection = void 0;
|
|
53
|
-
this._nodeSession = void 0;
|
|
54
|
-
this._nodeExecutionContext = void 0;
|
|
55
|
-
this._nodeElectronHandlePromise = new _utils.ManualPromise();
|
|
56
|
-
this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
|
|
57
|
-
this._process = void 0;
|
|
58
|
-
this._process = process;
|
|
34
|
+
module.exports = __toCommonJS(electron_exports);
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_os = __toESM(require("os"));
|
|
37
|
+
var import_path = __toESM(require("path"));
|
|
38
|
+
var readline = __toESM(require("readline"));
|
|
39
|
+
var import_timeoutSettings = require("../timeoutSettings");
|
|
40
|
+
var import_utils = require("../../utils");
|
|
41
|
+
var import_ascii = require("../utils/ascii");
|
|
42
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
43
|
+
var import_eventsHelper = require("../utils/eventsHelper");
|
|
44
|
+
var import_browserContext = require("../browserContext");
|
|
45
|
+
var import_crBrowser = require("../chromium/crBrowser");
|
|
46
|
+
var import_crConnection = require("../chromium/crConnection");
|
|
47
|
+
var import_crExecutionContext = require("../chromium/crExecutionContext");
|
|
48
|
+
var import_crProtocolHelper = require("../chromium/crProtocolHelper");
|
|
49
|
+
var import_console = require("../console");
|
|
50
|
+
var import_helper = require("../helper");
|
|
51
|
+
var import_instrumentation = require("../instrumentation");
|
|
52
|
+
var js = __toESM(require("../javascript"));
|
|
53
|
+
var import_processLauncher = require("../utils/processLauncher");
|
|
54
|
+
var import_progress = require("../progress");
|
|
55
|
+
var import_transport = require("../transport");
|
|
56
|
+
const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
|
|
57
|
+
class ElectronApplication extends import_instrumentation.SdkObject {
|
|
58
|
+
constructor(parent, browser, nodeConnection, process2) {
|
|
59
|
+
super(parent, "electron-app");
|
|
60
|
+
this._nodeElectronHandlePromise = new import_utils.ManualPromise();
|
|
61
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings();
|
|
62
|
+
this._process = process2;
|
|
59
63
|
this._browserContext = browser._defaultContext;
|
|
60
64
|
this._nodeConnection = nodeConnection;
|
|
61
65
|
this._nodeSession = nodeConnection.rootSession;
|
|
62
|
-
this._nodeSession.on(
|
|
63
|
-
if (!event.context.auxData || !event.context.auxData.isDefault)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} = await crExecutionContext._client.send('Runtime.evaluate', {
|
|
66
|
+
this._nodeSession.on("Runtime.executionContextCreated", async (event) => {
|
|
67
|
+
if (!event.context.auxData || !event.context.auxData.isDefault)
|
|
68
|
+
return;
|
|
69
|
+
const crExecutionContext = new import_crExecutionContext.CRExecutionContext(this._nodeSession, event.context);
|
|
70
|
+
this._nodeExecutionContext = new js.ExecutionContext(this, crExecutionContext, "electron");
|
|
71
|
+
const { result: remoteObject } = await crExecutionContext._client.send("Runtime.evaluate", {
|
|
69
72
|
expression: `require('electron')`,
|
|
70
73
|
contextId: event.context.id,
|
|
71
74
|
// Needed after Electron 28 to get access to require: https://github.com/microsoft/playwright/issues/28048
|
|
72
75
|
includeCommandLineAPI: true
|
|
73
76
|
});
|
|
74
|
-
this._nodeElectronHandlePromise.resolve(new js.JSHandle(this._nodeExecutionContext,
|
|
77
|
+
this._nodeElectronHandlePromise.resolve(new js.JSHandle(this._nodeExecutionContext, "object", "ElectronModule", remoteObject.objectId));
|
|
75
78
|
});
|
|
76
|
-
this._nodeSession.on(
|
|
77
|
-
const appClosePromise = new Promise(f => this.once(ElectronApplication.Events.Close, f));
|
|
79
|
+
this._nodeSession.on("Runtime.consoleAPICalled", (event) => this._onConsoleAPI(event));
|
|
80
|
+
const appClosePromise = new Promise((f) => this.once(ElectronApplication.Events.Close, f));
|
|
78
81
|
this._browserContext.setCustomCloseHandler(async () => {
|
|
79
82
|
await this._browserContext.stopVideoRecording();
|
|
80
83
|
const electronHandle = await this._nodeElectronHandlePromise;
|
|
81
|
-
await electronHandle.evaluate(({
|
|
82
|
-
|
|
83
|
-
}) => app.quit()).catch(() => {});
|
|
84
|
+
await electronHandle.evaluate(({ app }) => app.quit()).catch(() => {
|
|
85
|
+
});
|
|
84
86
|
this._nodeConnection.close();
|
|
85
87
|
await appClosePromise;
|
|
86
88
|
});
|
|
87
89
|
}
|
|
90
|
+
static {
|
|
91
|
+
this.Events = {
|
|
92
|
+
Close: "close",
|
|
93
|
+
Console: "console"
|
|
94
|
+
};
|
|
95
|
+
}
|
|
88
96
|
async _onConsoleAPI(event) {
|
|
89
97
|
if (event.executionContextId === 0) {
|
|
90
|
-
// DevTools protocol stores the last 1000 console messages. These
|
|
91
|
-
// messages are always reported even for removed execution contexts. In
|
|
92
|
-
// this case, they are marked with executionContextId = 0 and are
|
|
93
|
-
// reported upon enabling Runtime agent.
|
|
94
|
-
//
|
|
95
|
-
// Ignore these messages since:
|
|
96
|
-
// - there's no execution context we can use to operate with message
|
|
97
|
-
// arguments
|
|
98
|
-
// - these messages are reported before Playwright clients can subscribe
|
|
99
|
-
// to the 'console'
|
|
100
|
-
// page event.
|
|
101
|
-
//
|
|
102
|
-
// @see https://github.com/GoogleChrome/puppeteer/issues/3865
|
|
103
98
|
return;
|
|
104
99
|
}
|
|
105
|
-
if (!this._nodeExecutionContext)
|
|
106
|
-
|
|
107
|
-
const
|
|
100
|
+
if (!this._nodeExecutionContext)
|
|
101
|
+
return;
|
|
102
|
+
const args = event.args.map((arg) => (0, import_crExecutionContext.createHandle)(this._nodeExecutionContext, arg));
|
|
103
|
+
const message = new import_console.ConsoleMessage(null, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
|
|
108
104
|
this.emit(ElectronApplication.Events.Console, message);
|
|
109
105
|
}
|
|
110
106
|
async initialize() {
|
|
111
|
-
await this._nodeSession.send(
|
|
112
|
-
|
|
113
|
-
await this._nodeSession.send('Runtime.evaluate', {
|
|
114
|
-
expression: '__playwright_run()'
|
|
115
|
-
});
|
|
107
|
+
await this._nodeSession.send("Runtime.enable", {});
|
|
108
|
+
await this._nodeSession.send("Runtime.evaluate", { expression: "__playwright_run()" });
|
|
116
109
|
}
|
|
117
110
|
process() {
|
|
118
111
|
return this._process;
|
|
@@ -121,129 +114,109 @@ class ElectronApplication extends _instrumentation.SdkObject {
|
|
|
121
114
|
return this._browserContext;
|
|
122
115
|
}
|
|
123
116
|
async close() {
|
|
124
|
-
|
|
125
|
-
await this._browserContext.close({
|
|
126
|
-
reason: 'Application exited'
|
|
127
|
-
});
|
|
117
|
+
await this._browserContext.close({ reason: "Application exited" });
|
|
128
118
|
}
|
|
129
119
|
async browserWindow(page) {
|
|
130
|
-
// Assume CRPage as Electron is always Chromium.
|
|
131
120
|
const targetId = page._delegate._targetId;
|
|
132
121
|
const electronHandle = await this._nodeElectronHandlePromise;
|
|
133
|
-
return await electronHandle.evaluateHandle(({
|
|
134
|
-
|
|
135
|
-
webContents
|
|
136
|
-
}, targetId) => {
|
|
137
|
-
const wc = webContents.fromDevToolsTargetId(targetId);
|
|
122
|
+
return await electronHandle.evaluateHandle(({ BrowserWindow, webContents }, targetId2) => {
|
|
123
|
+
const wc = webContents.fromDevToolsTargetId(targetId2);
|
|
138
124
|
return BrowserWindow.fromWebContents(wc);
|
|
139
125
|
}, targetId);
|
|
140
126
|
}
|
|
141
127
|
}
|
|
142
|
-
|
|
143
|
-
ElectronApplication.Events = {
|
|
144
|
-
Close: 'close',
|
|
145
|
-
Console: 'console'
|
|
146
|
-
};
|
|
147
|
-
class Electron extends _instrumentation.SdkObject {
|
|
128
|
+
class Electron extends import_instrumentation.SdkObject {
|
|
148
129
|
constructor(playwright) {
|
|
149
|
-
super(playwright,
|
|
130
|
+
super(playwright, "electron");
|
|
150
131
|
}
|
|
151
132
|
async launch(options) {
|
|
152
133
|
const {
|
|
153
134
|
args = []
|
|
154
135
|
} = options;
|
|
155
|
-
const controller = new
|
|
156
|
-
controller.setLogName(
|
|
157
|
-
return controller.run(async progress => {
|
|
158
|
-
let app =
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (_os.default.platform() === 'linux') {
|
|
136
|
+
const controller = new import_progress.ProgressController((0, import_instrumentation.serverSideCallMetadata)(), this);
|
|
137
|
+
controller.setLogName("browser");
|
|
138
|
+
return controller.run(async (progress) => {
|
|
139
|
+
let app = void 0;
|
|
140
|
+
let electronArguments = ["--inspect=0", "--remote-debugging-port=0", ...args];
|
|
141
|
+
if (import_os.default.platform() === "linux") {
|
|
162
142
|
const runningAsRoot = process.geteuid && process.geteuid() === 0;
|
|
163
|
-
if (runningAsRoot && electronArguments.indexOf(
|
|
143
|
+
if (runningAsRoot && electronArguments.indexOf("--no-sandbox") === -1)
|
|
144
|
+
electronArguments.unshift("--no-sandbox");
|
|
164
145
|
}
|
|
165
|
-
const artifactsDir = await
|
|
166
|
-
const browserLogsCollector = new
|
|
167
|
-
const env = options.env ? (0,
|
|
146
|
+
const artifactsDir = await import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
|
|
147
|
+
const browserLogsCollector = new import_debugLogger.RecentLogsCollector();
|
|
148
|
+
const env = options.env ? (0, import_processLauncher.envArrayToObject)(options.env) : process.env;
|
|
168
149
|
let command;
|
|
169
150
|
if (options.executablePath) {
|
|
170
151
|
command = options.executablePath;
|
|
171
152
|
} else {
|
|
172
153
|
try {
|
|
173
|
-
|
|
174
|
-
// 'electron/index.js' resolves to the actual Electron App.
|
|
175
|
-
command = require('electron/index.js');
|
|
154
|
+
command = require("electron/index.js");
|
|
176
155
|
} catch (error) {
|
|
177
|
-
if (
|
|
178
|
-
throw new Error(
|
|
156
|
+
if (error?.code === "MODULE_NOT_FOUND") {
|
|
157
|
+
throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)([
|
|
158
|
+
"Electron executablePath not found!",
|
|
159
|
+
"Please install it using `npm install -D electron` or set the executablePath to your Electron executable."
|
|
160
|
+
].join("\n"), 1));
|
|
179
161
|
}
|
|
180
162
|
throw error;
|
|
181
163
|
}
|
|
182
|
-
|
|
183
|
-
// Packaged apps might have their own command line handling.
|
|
184
|
-
electronArguments.unshift('-r', require.resolve('./loader'));
|
|
164
|
+
electronArguments.unshift("-r", require.resolve("./loader"));
|
|
185
165
|
}
|
|
186
166
|
let shell = false;
|
|
187
|
-
if (process.platform ===
|
|
188
|
-
// On Windows in order to run .cmd files, shell: true is required.
|
|
189
|
-
// https://github.com/nodejs/node/issues/52554
|
|
167
|
+
if (process.platform === "win32") {
|
|
190
168
|
shell = true;
|
|
191
|
-
// On Windows, we need to quote the executable path due to shell: true.
|
|
192
169
|
command = `"${command}"`;
|
|
193
|
-
|
|
194
|
-
electronArguments = electronArguments.map(arg => `"${arg}"`);
|
|
170
|
+
electronArguments = electronArguments.map((arg) => `"${arg}"`);
|
|
195
171
|
}
|
|
196
|
-
|
|
197
|
-
// When debugging Playwright test that runs Electron, NODE_OPTIONS
|
|
198
|
-
// will make the debugger attach to Electron's Node. But Playwright
|
|
199
|
-
// also needs to attach to drive the automation. Disable external debugging.
|
|
200
172
|
delete env.NODE_OPTIONS;
|
|
201
|
-
const {
|
|
202
|
-
launchedProcess,
|
|
203
|
-
gracefullyClose,
|
|
204
|
-
kill
|
|
205
|
-
} = await (0, _processLauncher.launchProcess)({
|
|
173
|
+
const { launchedProcess, gracefullyClose, kill } = await (0, import_processLauncher.launchProcess)({
|
|
206
174
|
command,
|
|
207
175
|
args: electronArguments,
|
|
208
176
|
env,
|
|
209
|
-
log: message => {
|
|
177
|
+
log: (message) => {
|
|
210
178
|
progress.log(message);
|
|
211
179
|
browserLogsCollector.log(message);
|
|
212
180
|
},
|
|
213
181
|
shell,
|
|
214
|
-
stdio:
|
|
182
|
+
stdio: "pipe",
|
|
215
183
|
cwd: options.cwd,
|
|
216
184
|
tempDirectories: [artifactsDir],
|
|
217
185
|
attemptToGracefullyClose: () => app.close(),
|
|
218
186
|
handleSIGINT: true,
|
|
219
187
|
handleSIGTERM: true,
|
|
220
188
|
handleSIGHUP: true,
|
|
221
|
-
onExit: () =>
|
|
222
|
-
var _app;
|
|
223
|
-
return (_app = app) === null || _app === void 0 ? void 0 : _app.emit(ElectronApplication.Events.Close);
|
|
224
|
-
}
|
|
189
|
+
onExit: () => app?.emit(ElectronApplication.Events.Close)
|
|
225
190
|
});
|
|
226
|
-
|
|
227
|
-
// All waitForLines must be started immediately.
|
|
228
|
-
// Otherwise the lines might come before we are ready.
|
|
229
191
|
const waitForXserverError = new Promise(async (resolve, reject) => {
|
|
230
|
-
waitForLine(progress, launchedProcess, /Unable to open X display/).then(() => reject(new Error([
|
|
192
|
+
waitForLine(progress, launchedProcess, /Unable to open X display/).then(() => reject(new Error([
|
|
193
|
+
"Unable to open X display!",
|
|
194
|
+
`================================`,
|
|
195
|
+
"Most likely this is because there is no X server available.",
|
|
196
|
+
"Use 'xvfb-run' on Linux to launch your tests with an emulated display server.",
|
|
197
|
+
"For example: 'xvfb-run npm run test:e2e'",
|
|
198
|
+
`================================`,
|
|
199
|
+
progress.metadata.log
|
|
200
|
+
].join("\n")))).catch(() => {
|
|
201
|
+
});
|
|
231
202
|
});
|
|
232
203
|
const nodeMatchPromise = waitForLine(progress, launchedProcess, /^Debugger listening on (ws:\/\/.*)$/);
|
|
233
204
|
const chromeMatchPromise = waitForLine(progress, launchedProcess, /^DevTools listening on (ws:\/\/.*)$/);
|
|
234
205
|
const debuggerDisconnectPromise = waitForLine(progress, launchedProcess, /Waiting for the debugger to disconnect\.\.\./);
|
|
235
206
|
const nodeMatch = await nodeMatchPromise;
|
|
236
|
-
const nodeTransport = await
|
|
237
|
-
const nodeConnection = new
|
|
238
|
-
|
|
239
|
-
// Immediately release exiting process under debug.
|
|
207
|
+
const nodeTransport = await import_transport.WebSocketTransport.connect(progress, nodeMatch[1]);
|
|
208
|
+
const nodeConnection = new import_crConnection.CRConnection(nodeTransport, import_helper.helper.debugProtocolLogger(), browserLogsCollector);
|
|
240
209
|
debuggerDisconnectPromise.then(() => {
|
|
241
210
|
nodeTransport.close();
|
|
242
|
-
}).catch(() => {
|
|
243
|
-
|
|
244
|
-
const
|
|
211
|
+
}).catch(() => {
|
|
212
|
+
});
|
|
213
|
+
const chromeMatch = await Promise.race([
|
|
214
|
+
chromeMatchPromise,
|
|
215
|
+
waitForXserverError
|
|
216
|
+
]);
|
|
217
|
+
const chromeTransport = await import_transport.WebSocketTransport.connect(progress, chromeMatch[1]);
|
|
245
218
|
const browserProcess = {
|
|
246
|
-
onclose:
|
|
219
|
+
onclose: void 0,
|
|
247
220
|
process: launchedProcess,
|
|
248
221
|
close: gracefullyClose,
|
|
249
222
|
kill
|
|
@@ -253,45 +226,52 @@ class Electron extends _instrumentation.SdkObject {
|
|
|
253
226
|
noDefaultViewport: true
|
|
254
227
|
};
|
|
255
228
|
const browserOptions = {
|
|
256
|
-
name:
|
|
229
|
+
name: "electron",
|
|
257
230
|
isChromium: true,
|
|
258
231
|
headful: true,
|
|
259
232
|
persistent: contextOptions,
|
|
260
233
|
browserProcess,
|
|
261
|
-
protocolLogger:
|
|
234
|
+
protocolLogger: import_helper.helper.debugProtocolLogger(),
|
|
262
235
|
browserLogsCollector,
|
|
263
236
|
artifactsDir,
|
|
264
237
|
downloadsPath: artifactsDir,
|
|
265
238
|
tracesDir: options.tracesDir || artifactsDir,
|
|
266
239
|
originalLaunchOptions: {}
|
|
267
240
|
};
|
|
268
|
-
(0,
|
|
269
|
-
const browser = await
|
|
241
|
+
(0, import_browserContext.validateBrowserContextOptions)(contextOptions, browserOptions);
|
|
242
|
+
const browser = await import_crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);
|
|
270
243
|
app = new ElectronApplication(this, browser, nodeConnection, launchedProcess);
|
|
271
244
|
await app.initialize();
|
|
272
245
|
return app;
|
|
273
|
-
},
|
|
246
|
+
}, import_timeoutSettings.TimeoutSettings.launchTimeout(options));
|
|
274
247
|
}
|
|
275
248
|
}
|
|
276
|
-
|
|
277
|
-
function waitForLine(progress, process, regex) {
|
|
249
|
+
function waitForLine(progress, process2, regex) {
|
|
278
250
|
return new Promise((resolve, reject) => {
|
|
279
|
-
const rl = readline.createInterface({
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
251
|
+
const rl = readline.createInterface({ input: process2.stderr });
|
|
252
|
+
const failError = new Error("Process failed to launch!");
|
|
253
|
+
const listeners = [
|
|
254
|
+
import_eventsHelper.eventsHelper.addEventListener(rl, "line", onLine),
|
|
255
|
+
import_eventsHelper.eventsHelper.addEventListener(rl, "close", reject.bind(null, failError)),
|
|
256
|
+
import_eventsHelper.eventsHelper.addEventListener(process2, "exit", reject.bind(null, failError)),
|
|
257
|
+
// It is Ok to remove error handler because we did not create process and there is another listener.
|
|
258
|
+
import_eventsHelper.eventsHelper.addEventListener(process2, "error", reject.bind(null, failError))
|
|
259
|
+
];
|
|
286
260
|
progress.cleanupWhenAborted(cleanup);
|
|
287
261
|
function onLine(line) {
|
|
288
262
|
const match = line.match(regex);
|
|
289
|
-
if (!match)
|
|
263
|
+
if (!match)
|
|
264
|
+
return;
|
|
290
265
|
cleanup();
|
|
291
266
|
resolve(match);
|
|
292
267
|
}
|
|
293
268
|
function cleanup() {
|
|
294
|
-
|
|
269
|
+
import_eventsHelper.eventsHelper.removeEventListeners(listeners);
|
|
295
270
|
}
|
|
296
271
|
});
|
|
297
|
-
}
|
|
272
|
+
}
|
|
273
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
274
|
+
0 && (module.exports = {
|
|
275
|
+
Electron,
|
|
276
|
+
ElectronApplication
|
|
277
|
+
});
|
|
@@ -1,57 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
* you may not use this file except in compliance with the License.
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
*
|
|
10
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
*
|
|
12
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
* See the License for the specific language governing permissions and
|
|
16
|
-
* limitations under the License.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
const {
|
|
20
|
-
app
|
|
21
|
-
} = require('electron');
|
|
22
|
-
const {
|
|
23
|
-
chromiumSwitches
|
|
24
|
-
} = require('../chromium/chromiumSwitches');
|
|
25
|
-
|
|
26
|
-
// Always pass user arguments first, see https://github.com/microsoft/playwright/issues/16614 and
|
|
27
|
-
// https://github.com/microsoft/playwright/issues/29198.
|
|
28
|
-
// [Electron, -r, loader.js[, --no-sandbox>], --inspect=0, --remote-debugging-port=0, ...args]
|
|
29
|
-
process.argv.splice(1, process.argv.indexOf('--remote-debugging-port=0'));
|
|
2
|
+
const { app } = require("electron");
|
|
3
|
+
const { chromiumSwitches } = require("../chromium/chromiumSwitches");
|
|
4
|
+
process.argv.splice(1, process.argv.indexOf("--remote-debugging-port=0"));
|
|
30
5
|
for (const arg of chromiumSwitches) {
|
|
31
6
|
const match = arg.match(/--([^=]*)=?(.*)/);
|
|
32
7
|
app.commandLine.appendSwitch(match[1], match[2]);
|
|
33
8
|
}
|
|
34
|
-
|
|
35
|
-
// Defer ready event.
|
|
36
9
|
const originalWhenReady = app.whenReady();
|
|
37
10
|
const originalEmit = app.emit.bind(app);
|
|
38
11
|
let readyEventArgs;
|
|
39
12
|
app.emit = (event, ...args) => {
|
|
40
|
-
if (event ===
|
|
13
|
+
if (event === "ready") {
|
|
41
14
|
readyEventArgs = args;
|
|
42
|
-
return app.listenerCount(
|
|
15
|
+
return app.listenerCount("ready") > 0;
|
|
43
16
|
}
|
|
44
17
|
return originalEmit(event, ...args);
|
|
45
18
|
};
|
|
46
19
|
let isReady = false;
|
|
47
20
|
let whenReadyCallback;
|
|
48
|
-
const whenReadyPromise = new Promise(f => whenReadyCallback = f);
|
|
21
|
+
const whenReadyPromise = new Promise((f) => whenReadyCallback = f);
|
|
49
22
|
app.isReady = () => isReady;
|
|
50
23
|
app.whenReady = () => whenReadyPromise;
|
|
51
24
|
globalThis.__playwright_run = async () => {
|
|
52
|
-
// Wait for app to be ready to avoid browser initialization races.
|
|
53
25
|
const event = await originalWhenReady;
|
|
54
26
|
isReady = true;
|
|
55
27
|
whenReadyCallback(event);
|
|
56
|
-
originalEmit(
|
|
57
|
-
};
|
|
28
|
+
originalEmit("ready", ...readyEventArgs);
|
|
29
|
+
};
|