patchright-core 1.50.0 → 1.51.0
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 +381 -55
- package/browsers.json +22 -10
- package/index.js +0 -1
- package/lib/androidServerImpl.js +4 -4
- package/lib/browserServerImpl.js +18 -9
- package/lib/cli/driver.js +6 -6
- package/lib/cli/program.js +9 -9
- 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 +77 -73
- package/lib/client/browserType.js +30 -64
- package/lib/client/channelOwner.js +23 -20
- package/lib/client/clientHelper.js +5 -7
- package/lib/client/clientStackTrace.js +65 -0
- package/lib/client/connection.js +46 -39
- 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 +60 -61
- package/lib/client/fileUtils.js +31 -0
- package/lib/client/frame.js +30 -29
- 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 +37 -18
- package/lib/client/network.js +40 -40
- package/lib/client/page.js +59 -55
- 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 +10 -7
- package/lib/client/video.js +2 -2
- package/lib/client/waiter.js +5 -6
- package/lib/client/webSocket.js +106 -0
- package/lib/client/worker.js +12 -10
- 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/inProcessFactory.js +6 -3
- package/lib/outofprocess.js +12 -8
- package/lib/protocol/validator.js +64 -13
- package/lib/protocol/validatorPrimitives.js +1 -2
- package/lib/remote/playwrightConnection.js +18 -10
- package/lib/remote/playwrightServer.js +20 -7
- 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 +2 -2
- package/lib/server/bidi/bidiChromium.js +4 -3
- package/lib/server/bidi/bidiConnection.js +1 -1
- package/lib/server/bidi/bidiExecutionContext.js +70 -40
- package/lib/server/bidi/bidiFirefox.js +4 -3
- package/lib/server/bidi/bidiInput.js +5 -8
- package/lib/server/bidi/bidiNetworkManager.js +3 -3
- package/lib/server/bidi/bidiOverCdp.js +2 -2
- package/lib/server/bidi/bidiPage.js +30 -46
- package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +37 -40
- package/lib/server/browserType.js +18 -17
- package/lib/{utils/sequence.js → server/callLog.js} +18 -3
- package/lib/server/chromium/chromium.js +14 -14
- package/lib/server/chromium/chromiumSwitches.js +32 -1
- package/lib/server/chromium/crBrowser.js +15 -14
- 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 +25 -17
- package/lib/server/chromium/crInput.js +2 -2
- package/lib/server/chromium/crNetworkManager.js +73 -26
- package/lib/server/chromium/crPage.js +22 -23
- 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/javascript.js +1 -1
- package/lib/server/codegen/languages.js +2 -2
- package/lib/server/debugController.js +3 -3
- package/lib/server/deviceDescriptors.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dispatchers/androidDispatcher.js +1 -1
- package/lib/server/dispatchers/artifactDispatcher.js +3 -3
- package/lib/server/dispatchers/browserContextDispatcher.js +19 -19
- package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
- package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
- 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 +4 -4
- package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
- package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +25 -298
- package/lib/server/dispatchers/networkDispatchers.js +3 -3
- package/lib/server/dispatchers/pageDispatcher.js +11 -9
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/streamDispatcher.js +4 -3
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +8 -7
- package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
- package/lib/server/dom.js +18 -12
- 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 +50 -45
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +11 -3
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +25 -17
- package/lib/server/firefox/ffNetworkManager.js +2 -2
- package/lib/server/firefox/ffPage.js +15 -21
- package/lib/server/firefox/firefox.js +7 -9
- package/lib/server/frameSelectors.js +1 -1
- package/lib/server/frames.js +366 -209
- package/lib/server/har/harRecorder.js +4 -4
- package/lib/server/har/harTracer.js +7 -8
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +2 -2
- package/lib/server/index.js +1 -8
- package/lib/server/input.js +1 -1
- package/lib/server/instrumentation.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
- package/lib/server/javascript.js +46 -33
- package/lib/server/launchApp.js +2 -2
- package/lib/server/localUtils.js +203 -0
- package/lib/server/network.js +3 -3
- package/lib/server/page.js +41 -22
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +5 -5
- package/lib/server/progress.js +1 -1
- package/lib/server/protocolError.js +1 -1
- package/lib/server/recorder/contextRecorder.js +3 -3
- package/lib/server/recorder/recorderApp.js +18 -12
- package/lib/server/recorder/recorderCollection.js +4 -4
- package/lib/server/recorder/throttledFile.js +3 -4
- package/lib/server/recorder.js +7 -5
- package/lib/server/registry/browserFetcher.js +9 -7
- package/lib/server/registry/dependencies.js +15 -15
- package/lib/server/registry/index.js +38 -44
- 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 +9 -9
- package/lib/server/socksInterceptor.js +8 -5
- package/lib/server/storageScript.js +160 -0
- package/lib/{common → server}/timeoutSettings.js +6 -5
- package/lib/server/trace/recorder/snapshotter.js +9 -8
- package/lib/server/trace/recorder/tracing.js +40 -31
- package/lib/server/trace/test/inMemorySnapshotter.js +4 -4
- package/lib/server/trace/viewer/traceViewer.js +13 -5
- package/lib/server/transport.js +2 -2
- package/lib/{utils → server/utils}/comparators.js +4 -4
- package/lib/{utils → server/utils}/crypto.js +4 -4
- package/lib/{utils → server/utils}/debug.js +4 -12
- package/lib/{utils → server/utils}/debugLogger.js +2 -2
- package/lib/{utils → server/utils}/env.js +4 -0
- package/lib/{utils → server/utils}/expectUtils.js +1 -1
- package/lib/{utils → server/utils}/fileUtils.js +4 -5
- package/lib/{utils/happy-eyeballs.js → server/utils/happyEyeballs.js} +22 -24
- package/lib/{utils → server/utils}/hostPlatform.js +1 -1
- package/lib/{utils → server/utils}/httpServer.js +8 -12
- package/lib/{utils → server/utils}/linuxUtils.js +3 -23
- package/lib/{utils → server/utils}/network.js +5 -5
- package/lib/server/utils/nodePlatform.js +140 -0
- package/lib/{protocol/transport.js → server/utils/pipeTransport.js} +2 -2
- package/lib/{utils → server/utils}/processLauncher.js +5 -5
- package/lib/{utils → server/utils}/profiler.js +5 -6
- package/lib/{common → server/utils}/socksProxy.js +10 -9
- package/lib/{utils → server/utils}/userAgent.js +2 -16
- package/lib/{utils → server/utils}/wsServer.js +3 -3
- package/lib/{utils → server/utils}/zipFile.js +1 -1
- package/lib/{utils → server/utils}/zones.js +9 -24
- package/lib/server/webkit/webkit.js +4 -4
- package/lib/server/webkit/wkBrowser.js +4 -4
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +25 -17
- package/lib/server/webkit/wkInput.js +2 -2
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +41 -40
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +2 -2
- package/lib/utils/isomorphic/ariaSnapshot.js +2 -1
- package/lib/utils/isomorphic/assert.js +25 -0
- package/lib/utils/isomorphic/colors.js +65 -0
- package/lib/utils/isomorphic/cssParser.js +1 -1
- package/lib/utils/isomorphic/locatorGenerators.js +13 -1
- package/lib/utils/isomorphic/locatorParser.js +2 -2
- package/lib/utils/{manualPromise.js → isomorphic/manualPromise.js} +3 -5
- package/lib/utils/isomorphic/mimeType.js +11 -3
- package/lib/utils/{multimap.js → isomorphic/multimap.js} +1 -3
- package/lib/utils/{rtti.js → isomorphic/rtti.js} +2 -5
- package/lib/utils/isomorphic/stackTrace.js +169 -0
- package/lib/utils/isomorphic/stringUtils.js +1 -1
- package/lib/utils/{time.js → isomorphic/time.js} +1 -13
- package/lib/utils/{timeoutRunner.js → isomorphic/timeoutRunner.js} +4 -4
- package/lib/utils/isomorphic/traceUtils.js +23 -0
- package/lib/{utils/index.js → utils.js} +200 -121
- package/lib/utilsBundle.js +1 -25
- package/lib/utilsBundleImpl/index.js +119 -121
- package/lib/vite/htmlReport/index.html +20 -20
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DpJ-EmBQ.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +259 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.5fN5lw10.css +1 -0
- package/lib/vite/traceViewer/index.CUq7VgrV.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -4
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +123 -99
- package/types/types.d.ts +110 -38
- package/lib/utils/stackTrace.js +0 -134
- package/lib/utils/traceUtils.js +0 -44
- package/lib/vite/recorder/assets/codeMirrorModule-3Qn3tPnZ.js +0 -24
- package/lib/vite/recorder/assets/index-Bek6JFv8.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-aLkSUGpW.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-CxUo6zd3.js +0 -243
- package/lib/vite/traceViewer/defaultSettingsView.DtIkrKWn.css +0 -1
- package/lib/vite/traceViewer/index.Bhu5cv5R.js +0 -2
- package/lib/vite/traceViewer/uiMode.BBy7FOVd.js +0 -5
- /package/lib/{utils → server/utils}/ascii.js +0 -0
- /package/lib/{utils → server/utils}/eventsHelper.js +0 -0
- /package/lib/{image_tools → server/utils/image_tools}/colorUtils.js +0 -0
- /package/lib/{image_tools → server/utils/image_tools}/compare.js +0 -0
- /package/lib/{image_tools → server/utils/image_tools}/imageChannel.js +0 -0
- /package/lib/{image_tools → server/utils/image_tools}/stats.js +0 -0
- /package/lib/{utils → server/utils}/spawnAsync.js +0 -0
- /package/lib/{utils → server/utils}/task.js +0 -0
- /package/lib/utils/{headers.js → isomorphic/headers.js} +0 -0
- /package/lib/utils/{semaphore.js → isomorphic/semaphore.js} +0 -0
- /package/lib/{common → utils/isomorphic}/types.js +0 -0
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/recorder/assets/{index-CAQewHss.css → index-eHBmevrY.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{uiMode.Be_ME-Go.css → uiMode.BatfzHMG.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -8,7 +8,6 @@ exports.createMetadataValidator = createMetadataValidator;
|
|
|
8
8
|
exports.findValidator = findValidator;
|
|
9
9
|
exports.maybeFindValidator = maybeFindValidator;
|
|
10
10
|
exports.tUndefined = exports.tType = exports.tString = exports.tOptional = exports.tObject = exports.tNumber = exports.tEnum = exports.tChannel = exports.tBoolean = exports.tBinary = exports.tArray = exports.tAny = exports.scheme = void 0;
|
|
11
|
-
var _utils = require("../utils");
|
|
12
11
|
/**
|
|
13
12
|
* Copyright (c) Microsoft Corporation.
|
|
14
13
|
*
|
|
@@ -107,7 +106,7 @@ const tObject = s => {
|
|
|
107
106
|
const value = v(arg[key], path ? path + '.' + key : key, context);
|
|
108
107
|
if (!Object.is(value, undefined)) result[key] = value;
|
|
109
108
|
}
|
|
110
|
-
if (
|
|
109
|
+
if (context.isUnderTest()) {
|
|
111
110
|
for (const [key, value] of Object.entries(arg)) {
|
|
112
111
|
if (key.startsWith('__testHook')) result[key] = value;
|
|
113
112
|
}
|
|
@@ -4,14 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PlaywrightConnection = void 0;
|
|
7
|
+
var _socksProxy = require("../server/utils/socksProxy");
|
|
7
8
|
var _server = require("../server");
|
|
9
|
+
var _android = require("../server/android/android");
|
|
8
10
|
var _browser = require("../server/browser");
|
|
11
|
+
var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
|
|
9
12
|
var _instrumentation = require("../server/instrumentation");
|
|
10
|
-
var
|
|
13
|
+
var _assert = require("../utils/isomorphic/assert");
|
|
14
|
+
var _debug = require("../server/utils/debug");
|
|
15
|
+
var _profiler = require("../server/utils/profiler");
|
|
11
16
|
var _utils = require("../utils");
|
|
12
|
-
var
|
|
13
|
-
var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
|
|
14
|
-
var _debugLogger = require("../utils/debugLogger");
|
|
17
|
+
var _debugLogger = require("../server/utils/debugLogger");
|
|
15
18
|
/**
|
|
16
19
|
* Copyright (c) Microsoft Corporation.
|
|
17
20
|
*
|
|
@@ -44,8 +47,8 @@ class PlaywrightConnection {
|
|
|
44
47
|
this._preLaunched = preLaunched;
|
|
45
48
|
this._options = options;
|
|
46
49
|
options.launchOptions = filterLaunchOptions(options.launchOptions, options.allowFSPaths);
|
|
47
|
-
if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0,
|
|
48
|
-
if (clientType === 'pre-launched-browser-or-android') (0,
|
|
50
|
+
if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.playwright);
|
|
51
|
+
if (clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.browser || preLaunched.androidDevice);
|
|
49
52
|
this._onClose = onClose;
|
|
50
53
|
this._id = id;
|
|
51
54
|
this._profileName = `${new Date().toISOString()}-${clientType}`;
|
|
@@ -74,7 +77,7 @@ class PlaywrightConnection {
|
|
|
74
77
|
return;
|
|
75
78
|
}
|
|
76
79
|
this._root = new _server.RootDispatcher(this._dispatcherConnection, async (scope, options) => {
|
|
77
|
-
await (0,
|
|
80
|
+
await (0, _profiler.startProfiling)();
|
|
78
81
|
if (clientType === 'reuse-browser') return await this._initReuseBrowsersMode(scope);
|
|
79
82
|
if (clientType === 'pre-launched-browser-or-android') return this._preLaunched.browser ? await this._initPreLaunchedBrowserMode(scope) : await this._initPreLaunchedAndroidMode(scope);
|
|
80
83
|
if (clientType === 'launch-browser') return await this._initLaunchBrowserMode(scope, options);
|
|
@@ -88,7 +91,12 @@ class PlaywrightConnection {
|
|
|
88
91
|
isServer: true
|
|
89
92
|
});
|
|
90
93
|
const ownedSocksProxy = await this._createOwnedSocksProxy(playwright);
|
|
91
|
-
|
|
94
|
+
let browserName = this._options.browserName;
|
|
95
|
+
if ('bidi' === browserName) {
|
|
96
|
+
var _this$_options$launch;
|
|
97
|
+
if ((_this$_options$launch = this._options.launchOptions) !== null && _this$_options$launch !== void 0 && (_this$_options$launch = _this$_options$launch.channel) !== null && _this$_options$launch !== void 0 && _this$_options$launch.toLocaleLowerCase().includes('firefox')) browserName = 'bidiFirefox';else browserName = 'bidiChromium';
|
|
98
|
+
}
|
|
99
|
+
const browser = await playwright[browserName].launch((0, _instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
|
|
92
100
|
this._cleanups.push(async () => {
|
|
93
101
|
for (const browser of playwright.allBrowsers()) await browser.close({
|
|
94
102
|
reason: 'Connection terminated'
|
|
@@ -214,7 +222,7 @@ class PlaywrightConnection {
|
|
|
214
222
|
this._root._dispose();
|
|
215
223
|
_debugLogger.debugLogger.log('server', `[${this._id}] starting cleanup`);
|
|
216
224
|
for (const cleanup of this._cleanups) await cleanup().catch(() => {});
|
|
217
|
-
await (0,
|
|
225
|
+
await (0, _profiler.stopProfiling)(this._profileName);
|
|
218
226
|
this._onClose();
|
|
219
227
|
_debugLogger.debugLogger.log('server', `[${this._id}] finished cleanup`);
|
|
220
228
|
}
|
|
@@ -260,7 +268,7 @@ function filterLaunchOptions(options, allowFSPaths) {
|
|
|
260
268
|
chromiumSandbox: options.chromiumSandbox,
|
|
261
269
|
firefoxUserPrefs: options.firefoxUserPrefs,
|
|
262
270
|
slowMo: options.slowMo,
|
|
263
|
-
executablePath: (0,
|
|
271
|
+
executablePath: (0, _debug.isUnderTest)() || allowFSPaths ? options.executablePath : undefined,
|
|
264
272
|
downloadsPath: allowFSPaths ? options.downloadsPath : undefined
|
|
265
273
|
};
|
|
266
274
|
}
|
|
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PlaywrightServer = void 0;
|
|
7
|
-
var _playwright = require("../server/playwright");
|
|
8
7
|
var _playwrightConnection = require("./playwrightConnection");
|
|
9
|
-
var
|
|
10
|
-
var _debugLogger = require("../utils/debugLogger");
|
|
11
|
-
var
|
|
12
|
-
var _wsServer = require("../utils/wsServer");
|
|
8
|
+
var _playwright = require("../server/playwright");
|
|
9
|
+
var _debugLogger = require("../server/utils/debugLogger");
|
|
10
|
+
var _semaphore = require("../utils/isomorphic/semaphore");
|
|
11
|
+
var _wsServer = require("../server/utils/wsServer");
|
|
12
|
+
var _ascii = require("../server/utils/ascii");
|
|
13
|
+
var _userAgent = require("../server/utils/userAgent");
|
|
13
14
|
/**
|
|
14
15
|
* Copyright (c) Microsoft Corporation.
|
|
15
16
|
*
|
|
@@ -39,7 +40,7 @@ class PlaywrightServer {
|
|
|
39
40
|
const reuseBrowserSemaphore = new _semaphore.Semaphore(1);
|
|
40
41
|
this._wsServer = new _wsServer.WSServer({
|
|
41
42
|
onUpgrade: (request, socket) => {
|
|
42
|
-
const uaError =
|
|
43
|
+
const uaError = userAgentVersionMatchesErrorMessage(request.headers['user-agent'] || '');
|
|
43
44
|
if (uaError) return {
|
|
44
45
|
error: `HTTP/${request.httpVersion} 428 Precondition Required\r\n\r\n${uaError}`
|
|
45
46
|
};
|
|
@@ -108,4 +109,16 @@ class PlaywrightServer {
|
|
|
108
109
|
await this._wsServer.close();
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
|
-
exports.PlaywrightServer = PlaywrightServer;
|
|
112
|
+
exports.PlaywrightServer = PlaywrightServer;
|
|
113
|
+
function userAgentVersionMatchesErrorMessage(userAgent) {
|
|
114
|
+
const match = userAgent.match(/^Playwright\/(\d+\.\d+\.\d+)/);
|
|
115
|
+
if (!match) {
|
|
116
|
+
// Cannot parse user agent - be lax.
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const received = match[1].split('.').slice(0, 2).join('.');
|
|
120
|
+
const expected = (0, _userAgent.getPlaywrightVersion)(true);
|
|
121
|
+
if (received !== expected) {
|
|
122
|
+
return (0, _ascii.wrapInASCIIBox)([`Playwright version mismatch:`, ` - server version: v${expected}`, ` - client version: v${received}`, ``, `If you are using VSCode extension, restart VSCode.`, ``, `If you are connecting to a remote service,`, `keep your local Playwright version in sync`, `with the remote service version.`, ``, `<3 Playwright Team`].join('\n'), 1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -4,25 +4,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.AndroidDevice = exports.Android = void 0;
|
|
7
|
-
var _utilsBundle = require("../../utilsBundle");
|
|
8
7
|
var _events = require("events");
|
|
9
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
10
9
|
var _os = _interopRequireDefault(require("os"));
|
|
11
10
|
var _path = _interopRequireDefault(require("path"));
|
|
12
|
-
var
|
|
13
|
-
var
|
|
11
|
+
var _timeoutSettings = require("../timeoutSettings");
|
|
12
|
+
var _pipeTransport = require("../utils/pipeTransport");
|
|
13
|
+
var _crypto = require("../utils/crypto");
|
|
14
|
+
var _debug = require("../utils/debug");
|
|
15
|
+
var _env = require("../utils/env");
|
|
16
|
+
var _task = require("../utils/task");
|
|
17
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
18
|
+
var _utilsBundle = require("../../utilsBundle");
|
|
14
19
|
var _browserContext = require("../browserContext");
|
|
15
|
-
var
|
|
20
|
+
var _chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
16
21
|
var _crBrowser = require("../chromium/crBrowser");
|
|
22
|
+
var _fileUtils = require("../utils/fileUtils");
|
|
17
23
|
var _helper = require("../helper");
|
|
18
|
-
var _transport = require("../../protocol/transport");
|
|
19
|
-
var _debugLogger = require("../../utils/debugLogger");
|
|
20
|
-
var _processLauncher = require("../../utils/processLauncher");
|
|
21
|
-
var _timeoutSettings = require("../../common/timeoutSettings");
|
|
22
24
|
var _instrumentation = require("../instrumentation");
|
|
23
|
-
var
|
|
25
|
+
var _processLauncher = require("../utils/processLauncher");
|
|
26
|
+
var _progress = require("../progress");
|
|
24
27
|
var _registry = require("../registry");
|
|
25
|
-
function _interopRequireDefault(
|
|
28
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
29
|
/**
|
|
27
30
|
* Copyright Microsoft Corporation. All rights reserved.
|
|
28
31
|
*
|
|
@@ -140,7 +143,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
140
143
|
await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`);
|
|
141
144
|
(0, _utilsBundle.debug)('pw:android')('Installing the new driver');
|
|
142
145
|
const executable = _registry.registry.findExecutable('android');
|
|
143
|
-
const packageManagerCommand = (0,
|
|
146
|
+
const packageManagerCommand = (0, _env.getPackageManagerExecCommand)();
|
|
144
147
|
for (const file of ['android-driver.apk', 'android-driver-target.apk']) {
|
|
145
148
|
const fullName = _path.default.join(executable.directory, file);
|
|
146
149
|
if (!_fs.default.existsSync(fullName)) throw new Error(`Please install Android driver apk using '${packageManagerCommand} playwright install android'`);
|
|
@@ -152,7 +155,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
152
155
|
(0, _utilsBundle.debug)('pw:android')('Starting the new driver');
|
|
153
156
|
this.shell('am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner').catch(e => (0, _utilsBundle.debug)('pw:android')(e));
|
|
154
157
|
const socket = await this._waitForLocalAbstract('playwright_android_driver_socket');
|
|
155
|
-
const transport = new
|
|
158
|
+
const transport = new _pipeTransport.PipeTransport(socket, socket, socket, 'be');
|
|
156
159
|
transport.onmessage = message => {
|
|
157
160
|
const response = JSON.parse(message);
|
|
158
161
|
const {
|
|
@@ -213,7 +216,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
213
216
|
async launchBrowser(pkg = 'com.android.chrome', options) {
|
|
214
217
|
(0, _utilsBundle.debug)('pw:android')('Force-stopping', pkg);
|
|
215
218
|
await this._backend.runCommand(`shell:am force-stop ${pkg}`);
|
|
216
|
-
const socketName = (0,
|
|
219
|
+
const socketName = (0, _debug.isUnderTest)() ? 'webview_devtools_remote_playwright_test' : 'playwright_' + (0, _crypto.createGuid)() + '_devtools_remote';
|
|
217
220
|
const commandLine = this._defaultArgs(options, socketName).join(' ');
|
|
218
221
|
(0, _utilsBundle.debug)('pw:android')('Starting', pkg, commandLine);
|
|
219
222
|
// encode commandLine to base64 to avoid issues (bash encoding) with special characters
|
|
@@ -381,7 +384,7 @@ class AndroidBrowser extends _events.EventEmitter {
|
|
|
381
384
|
this.device = void 0;
|
|
382
385
|
this._socket = void 0;
|
|
383
386
|
this._receiver = void 0;
|
|
384
|
-
this._waitForNextTask = (0,
|
|
387
|
+
this._waitForNextTask = (0, _task.makeWaitForNextTask)();
|
|
385
388
|
this.onmessage = void 0;
|
|
386
389
|
this.onclose = void 0;
|
|
387
390
|
this.setMaxListeners(0);
|
|
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.AdbBackend = void 0;
|
|
7
|
-
var _utilsBundle = require("../../utilsBundle");
|
|
8
|
-
var net = _interopRequireWildcard(require("net"));
|
|
9
7
|
var _events = require("events");
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
var _net = _interopRequireDefault(require("net"));
|
|
9
|
+
var _assert = require("../../utils/isomorphic/assert");
|
|
10
|
+
var _crypto = require("../utils/crypto");
|
|
11
|
+
var _utilsBundle = require("../../utilsBundle");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
/**
|
|
14
14
|
* Copyright Microsoft Corporation. All rights reserved.
|
|
15
15
|
*
|
|
@@ -66,7 +66,7 @@ class AdbDevice {
|
|
|
66
66
|
}
|
|
67
67
|
async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
|
|
68
68
|
(0, _utilsBundle.debug)('pw:adb:runCommand')(command, serial);
|
|
69
|
-
const socket = new BufferedSocketWrapper(command,
|
|
69
|
+
const socket = new BufferedSocketWrapper(command, _net.default.createConnection({
|
|
70
70
|
host,
|
|
71
71
|
port
|
|
72
72
|
}));
|
|
@@ -74,11 +74,11 @@ async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
|
|
|
74
74
|
if (serial) {
|
|
75
75
|
await socket.write(encodeMessage(`host:transport:${serial}`));
|
|
76
76
|
const status = await socket.read(4);
|
|
77
|
-
(0,
|
|
77
|
+
(0, _assert.assert)(status.toString() === 'OKAY', status.toString());
|
|
78
78
|
}
|
|
79
79
|
await socket.write(encodeMessage(command));
|
|
80
80
|
const status = await socket.read(4);
|
|
81
|
-
(0,
|
|
81
|
+
(0, _assert.assert)(status.toString() === 'OKAY', status.toString());
|
|
82
82
|
let commandOutput;
|
|
83
83
|
if (!command.startsWith('shell:')) {
|
|
84
84
|
const remainingLength = parseInt((await socket.read(4)).toString(), 16);
|
|
@@ -92,18 +92,18 @@ async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
async function open(command, host = '127.0.0.1', port = 5037, serial) {
|
|
95
|
-
const socket = new BufferedSocketWrapper(command,
|
|
95
|
+
const socket = new BufferedSocketWrapper(command, _net.default.createConnection({
|
|
96
96
|
host,
|
|
97
97
|
port
|
|
98
98
|
}));
|
|
99
99
|
if (serial) {
|
|
100
100
|
await socket.write(encodeMessage(`host:transport:${serial}`));
|
|
101
101
|
const status = await socket.read(4);
|
|
102
|
-
(0,
|
|
102
|
+
(0, _assert.assert)(status.toString() === 'OKAY', status.toString());
|
|
103
103
|
}
|
|
104
104
|
await socket.write(encodeMessage(command));
|
|
105
105
|
const status = await socket.read(4);
|
|
106
|
-
(0,
|
|
106
|
+
(0, _assert.assert)(status.toString() === 'OKAY', status.toString());
|
|
107
107
|
return socket;
|
|
108
108
|
}
|
|
109
109
|
function encodeMessage(message) {
|
|
@@ -114,7 +114,7 @@ function encodeMessage(message) {
|
|
|
114
114
|
class BufferedSocketWrapper extends _events.EventEmitter {
|
|
115
115
|
constructor(command, socket) {
|
|
116
116
|
super();
|
|
117
|
-
this.guid = (0,
|
|
117
|
+
this.guid = (0, _crypto.createGuid)();
|
|
118
118
|
this._socket = void 0;
|
|
119
119
|
this._buffer = Buffer.from([]);
|
|
120
120
|
this._isSocket = false;
|
|
@@ -154,7 +154,7 @@ class BufferedSocketWrapper extends _events.EventEmitter {
|
|
|
154
154
|
}
|
|
155
155
|
async read(length) {
|
|
156
156
|
await this._connectPromise;
|
|
157
|
-
(0,
|
|
157
|
+
(0, _assert.assert)(!this._isSocket, 'Can not read by length in socket mode');
|
|
158
158
|
while (this._buffer.length < length) await new Promise(f => this._notifyReader = f);
|
|
159
159
|
const result = this._buffer.slice(0, length);
|
|
160
160
|
this._buffer = this._buffer.slice(length);
|
|
@@ -166,7 +166,7 @@ class BufferedSocketWrapper extends _events.EventEmitter {
|
|
|
166
166
|
return this._buffer;
|
|
167
167
|
}
|
|
168
168
|
becomeSocket() {
|
|
169
|
-
(0,
|
|
169
|
+
(0, _assert.assert)(!this._buffer.length);
|
|
170
170
|
this._isSocket = true;
|
|
171
171
|
}
|
|
172
172
|
}
|
package/lib/server/artifact.js
CHANGED
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.Artifact = void 0;
|
|
7
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
8
8
|
var _utils = require("../utils");
|
|
9
|
-
var _manualPromise = require("../utils/manualPromise");
|
|
10
|
-
var _instrumentation = require("./instrumentation");
|
|
11
9
|
var _errors = require("./errors");
|
|
12
|
-
|
|
10
|
+
var _instrumentation = require("./instrumentation");
|
|
11
|
+
var _manualPromise = require("../utils/isomorphic/manualPromise");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
/**
|
|
14
14
|
* Copyright (c) Microsoft Corporation.
|
|
15
15
|
*
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Network = exports.BidiBrowserContext = exports.BidiBrowser = void 0;
|
|
7
|
-
var _eventsHelper = require("
|
|
7
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
8
8
|
var _browser = require("../browser");
|
|
9
9
|
var _browserContext = require("../browserContext");
|
|
10
10
|
var network = _interopRequireWildcard(require("../network"));
|
|
@@ -13,7 +13,7 @@ var _bidiNetworkManager = require("./bidiNetworkManager");
|
|
|
13
13
|
var _bidiPage = require("./bidiPage");
|
|
14
14
|
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
15
15
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
-
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 &&
|
|
16
|
+
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; }
|
|
17
17
|
/**
|
|
18
18
|
* Copyright (c) Microsoft Corporation.
|
|
19
19
|
*
|
|
@@ -6,11 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.BidiChromium = void 0;
|
|
7
7
|
var _os = _interopRequireDefault(require("os"));
|
|
8
8
|
var _utils = require("../../utils");
|
|
9
|
+
var _ascii = require("../utils/ascii");
|
|
9
10
|
var _browserType = require("../browserType");
|
|
10
|
-
var _chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
11
11
|
var _bidiBrowser = require("./bidiBrowser");
|
|
12
12
|
var _bidiConnection = require("./bidiConnection");
|
|
13
|
-
|
|
13
|
+
var _chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
15
|
/**
|
|
15
16
|
* Copyright (c) Microsoft Corporation.
|
|
16
17
|
*
|
|
@@ -42,7 +43,7 @@ class BidiChromium extends _browserType.BrowserType {
|
|
|
42
43
|
}
|
|
43
44
|
doRewriteStartupLog(error) {
|
|
44
45
|
if (!error.logs) return error;
|
|
45
|
-
if (error.logs.includes('Missing X server')) error.logs = '\n' + (0,
|
|
46
|
+
if (error.logs.includes('Missing X server')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
|
|
46
47
|
// These error messages are taken from Chromium source code as of July, 2020:
|
|
47
48
|
// https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc
|
|
48
49
|
if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180')) return error;
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.kBrowserCloseMessageId = exports.BidiSession = exports.BidiConnection = void 0;
|
|
7
7
|
var _events = require("events");
|
|
8
|
-
var _debugLogger = require("
|
|
8
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
9
9
|
var _helper = require("../helper");
|
|
10
10
|
var _protocolError = require("../protocolError");
|
|
11
11
|
/**
|
|
@@ -4,13 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.BidiExecutionContext = void 0;
|
|
7
|
+
exports.createHandle = createHandle;
|
|
8
|
+
var _utils = require("../../utils");
|
|
7
9
|
var _utilityScriptSerializers = require("../isomorphic/utilityScriptSerializers");
|
|
8
10
|
var js = _interopRequireWildcard(require("../javascript"));
|
|
11
|
+
var dom = _interopRequireWildcard(require("../dom"));
|
|
9
12
|
var _bidiDeserializer = require("./third_party/bidiDeserializer");
|
|
10
13
|
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
11
14
|
var _bidiSerializer = require("./third_party/bidiSerializer");
|
|
12
15
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
13
|
-
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 &&
|
|
16
|
+
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; }
|
|
14
17
|
/**
|
|
15
18
|
* Copyright (c) Microsoft Corporation.
|
|
16
19
|
*
|
|
@@ -59,7 +62,7 @@ class BidiExecutionContext {
|
|
|
59
62
|
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
60
63
|
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
61
64
|
}
|
|
62
|
-
async rawEvaluateHandle(expression) {
|
|
65
|
+
async rawEvaluateHandle(context, expression) {
|
|
63
66
|
const response = await this._session.send('script.evaluate', {
|
|
64
67
|
expression,
|
|
65
68
|
target: this._target,
|
|
@@ -73,20 +76,20 @@ class BidiExecutionContext {
|
|
|
73
76
|
userActivation: true
|
|
74
77
|
});
|
|
75
78
|
if (response.type === 'success') {
|
|
76
|
-
if ('handle' in response.result) return response.result
|
|
79
|
+
if ('handle' in response.result) return createHandle(context, response.result);
|
|
77
80
|
throw new js.JavaScriptErrorInEvaluate('Cannot get handle: ' + JSON.stringify(response.result));
|
|
78
81
|
}
|
|
79
82
|
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
80
83
|
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
81
84
|
}
|
|
82
|
-
async evaluateWithArguments(functionDeclaration, returnByValue, utilityScript, values,
|
|
85
|
+
async evaluateWithArguments(functionDeclaration, returnByValue, utilityScript, values, handles) {
|
|
83
86
|
const response = await this._session.send('script.callFunction', {
|
|
84
87
|
functionDeclaration,
|
|
85
88
|
target: this._target,
|
|
86
89
|
arguments: [{
|
|
87
90
|
handle: utilityScript._objectId
|
|
88
|
-
}, ...values.map(_bidiSerializer.BidiSerializer.serialize), ...
|
|
89
|
-
handle
|
|
91
|
+
}, ...values.map(_bidiSerializer.BidiSerializer.serialize), ...handles.map(handle => ({
|
|
92
|
+
handle: handle._objectId
|
|
90
93
|
}))],
|
|
91
94
|
resultOwnership: returnByValue ? undefined : bidi.Script.ResultOwnership.Root,
|
|
92
95
|
// Necessary for the handle to be returned.
|
|
@@ -100,53 +103,72 @@ class BidiExecutionContext {
|
|
|
100
103
|
if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
|
|
101
104
|
if (response.type === 'success') {
|
|
102
105
|
if (returnByValue) return (0, _utilityScriptSerializers.parseEvaluationResultValue)(_bidiDeserializer.BidiDeserializer.deserialize(response.result));
|
|
103
|
-
|
|
104
|
-
return utilityScript._context.createHandle({
|
|
105
|
-
objectId,
|
|
106
|
-
...response.result
|
|
107
|
-
});
|
|
106
|
+
return createHandle(utilityScript._context, response.result);
|
|
108
107
|
}
|
|
109
108
|
throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
|
|
110
109
|
}
|
|
111
|
-
async getProperties(
|
|
112
|
-
const
|
|
113
|
-
|
|
110
|
+
async getProperties(handle) {
|
|
111
|
+
const names = await handle.evaluate(object => {
|
|
112
|
+
const names = [];
|
|
113
|
+
const descriptors = Object.getOwnPropertyDescriptors(object);
|
|
114
|
+
for (const name in descriptors) {
|
|
115
|
+
var _descriptors$name;
|
|
116
|
+
if ((_descriptors$name = descriptors[name]) !== null && _descriptors$name !== void 0 && _descriptors$name.enumerable) names.push(name);
|
|
117
|
+
}
|
|
118
|
+
return names;
|
|
114
119
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
for (const name in descriptors) {
|
|
120
|
-
var _descriptors$name;
|
|
121
|
-
if ((_descriptors$name = descriptors[name]) !== null && _descriptors$name !== void 0 && _descriptors$name.enumerable) names.push(name);
|
|
122
|
-
}
|
|
123
|
-
return names;
|
|
124
|
-
});
|
|
125
|
-
const values = await Promise.all(names.map(name => handle.evaluateHandle((object, name) => object[name], name)));
|
|
126
|
-
const map = new Map();
|
|
127
|
-
for (let i = 0; i < names.length; i++) map.set(names[i], values[i]);
|
|
128
|
-
return map;
|
|
129
|
-
} finally {
|
|
130
|
-
handle.dispose();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
createHandle(context, jsRemoteObject) {
|
|
134
|
-
const remoteObject = jsRemoteObject;
|
|
135
|
-
return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), jsRemoteObject.objectId, remoteObjectValue(remoteObject));
|
|
120
|
+
const values = await Promise.all(names.map(name => handle.evaluateHandle((object, name) => object[name], name)));
|
|
121
|
+
const map = new Map();
|
|
122
|
+
for (let i = 0; i < names.length; i++) map.set(names[i], values[i]);
|
|
123
|
+
return map;
|
|
136
124
|
}
|
|
137
|
-
async releaseHandle(
|
|
125
|
+
async releaseHandle(handle) {
|
|
126
|
+
if (!handle._objectId) return;
|
|
138
127
|
await this._session.send('script.disown', {
|
|
139
128
|
target: this._target,
|
|
140
|
-
handles: [
|
|
129
|
+
handles: [handle._objectId]
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async nodeIdForElementHandle(handle) {
|
|
133
|
+
const shared = await this._remoteValueForReference({
|
|
134
|
+
handle: handle._objectId
|
|
135
|
+
});
|
|
136
|
+
// TODO: store sharedId in the handle.
|
|
137
|
+
if (!('sharedId' in shared)) throw new Error('Element is not a node');
|
|
138
|
+
return {
|
|
139
|
+
sharedId: shared.sharedId
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
async remoteObjectForNodeId(context, nodeId) {
|
|
143
|
+
const result = await this._remoteValueForReference(nodeId, true);
|
|
144
|
+
if (!('handle' in result)) throw new Error('Can\'t get remote object for nodeId');
|
|
145
|
+
return createHandle(context, result);
|
|
146
|
+
}
|
|
147
|
+
async contentFrameIdForFrame(handle) {
|
|
148
|
+
const contentWindow = await this._rawCallFunction('e => e.contentWindow', {
|
|
149
|
+
handle: handle._objectId
|
|
141
150
|
});
|
|
151
|
+
if ((contentWindow === null || contentWindow === void 0 ? void 0 : contentWindow.type) === 'window') return contentWindow.value.context;
|
|
152
|
+
return null;
|
|
142
153
|
}
|
|
143
|
-
async
|
|
154
|
+
async frameIdForWindowHandle(handle) {
|
|
155
|
+
if (!handle._objectId) throw new Error('JSHandle is not a DOM node handle');
|
|
156
|
+
const contentWindow = await this._remoteValueForReference({
|
|
157
|
+
handle: handle._objectId
|
|
158
|
+
});
|
|
159
|
+
if (contentWindow.type === 'window') return contentWindow.value.context;
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
async _remoteValueForReference(reference, createHandle) {
|
|
163
|
+
return await this._rawCallFunction('e => e', reference, createHandle);
|
|
164
|
+
}
|
|
165
|
+
async _rawCallFunction(functionDeclaration, arg, createHandle) {
|
|
144
166
|
const response = await this._session.send('script.callFunction', {
|
|
145
167
|
functionDeclaration,
|
|
146
168
|
target: this._target,
|
|
147
169
|
arguments: [arg],
|
|
148
|
-
|
|
149
|
-
|
|
170
|
+
// "Root" is necessary for the handle to be returned.
|
|
171
|
+
resultOwnership: createHandle ? bidi.Script.ResultOwnership.Root : bidi.Script.ResultOwnership.None,
|
|
150
172
|
serializationOptions: {
|
|
151
173
|
maxObjectDepth: 0,
|
|
152
174
|
maxDomDepth: 0
|
|
@@ -172,4 +194,12 @@ function remoteObjectValue(remoteObject) {
|
|
|
172
194
|
if (remoteObject.type === 'number' && typeof remoteObject.value === 'string') return js.parseUnserializableValue(remoteObject.value);
|
|
173
195
|
if ('value' in remoteObject) return remoteObject.value;
|
|
174
196
|
return undefined;
|
|
197
|
+
}
|
|
198
|
+
function createHandle(context, remoteObject) {
|
|
199
|
+
if (remoteObject.type === 'node') {
|
|
200
|
+
(0, _utils.assert)(context instanceof dom.FrameExecutionContext);
|
|
201
|
+
return new dom.ElementHandle(context, remoteObject.handle);
|
|
202
|
+
}
|
|
203
|
+
const objectId = 'handle' in remoteObject ? remoteObject.handle : undefined;
|
|
204
|
+
return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), objectId, remoteObjectValue(remoteObject));
|
|
175
205
|
}
|
|
@@ -7,11 +7,12 @@ exports.BidiFirefox = void 0;
|
|
|
7
7
|
var _os = _interopRequireDefault(require("os"));
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
9
|
var _utils = require("../../utils");
|
|
10
|
+
var _ascii = require("../utils/ascii");
|
|
10
11
|
var _browserType = require("../browserType");
|
|
11
12
|
var _bidiBrowser = require("./bidiBrowser");
|
|
12
13
|
var _bidiConnection = require("./bidiConnection");
|
|
13
14
|
var _firefoxPrefs = require("./third_party/firefoxPrefs");
|
|
14
|
-
function _interopRequireDefault(
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
16
|
/**
|
|
16
17
|
* Copyright (c) Microsoft Corporation.
|
|
17
18
|
*
|
|
@@ -39,8 +40,8 @@ class BidiFirefox extends _browserType.BrowserType {
|
|
|
39
40
|
doRewriteStartupLog(error) {
|
|
40
41
|
if (!error.logs) return error;
|
|
41
42
|
// https://github.com/microsoft/playwright/issues/6500
|
|
42
|
-
if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0,
|
|
43
|
-
if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0,
|
|
43
|
+
if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
|
|
44
|
+
if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
|
|
44
45
|
return error;
|
|
45
46
|
}
|
|
46
47
|
amendEnvironment(env, userDataDir, executable, browserArguments) {
|
|
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.RawTouchscreenImpl = exports.RawMouseImpl = exports.RawKeyboardImpl = void 0;
|
|
7
|
-
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
8
|
-
var _bidiKeyboard = require("./third_party/bidiKeyboard");
|
|
9
7
|
var _input = require("../input");
|
|
8
|
+
var _bidiKeyboard = require("./third_party/bidiKeyboard");
|
|
9
|
+
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
10
10
|
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); }
|
|
11
|
-
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 &&
|
|
11
|
+
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; }
|
|
12
12
|
/**
|
|
13
13
|
* Copyright (c) Microsoft Corporation.
|
|
14
14
|
*
|
|
@@ -84,9 +84,6 @@ class RawMouseImpl {
|
|
|
84
84
|
this._session = session;
|
|
85
85
|
}
|
|
86
86
|
async move(x, y, button, buttons, modifiers, forClick) {
|
|
87
|
-
// Bidi throws when x/y are not integers.
|
|
88
|
-
x = Math.round(x);
|
|
89
|
-
y = Math.round(y);
|
|
90
87
|
await this._performActions([{
|
|
91
88
|
type: 'pointerMove',
|
|
92
89
|
x,
|
|
@@ -107,8 +104,8 @@ class RawMouseImpl {
|
|
|
107
104
|
}
|
|
108
105
|
async wheel(x, y, buttons, modifiers, deltaX, deltaY) {
|
|
109
106
|
// Bidi throws when x/y are not integers.
|
|
110
|
-
x = Math.
|
|
111
|
-
y = Math.
|
|
107
|
+
x = Math.floor(x);
|
|
108
|
+
y = Math.floor(y);
|
|
112
109
|
await this._session.send('input.performActions', {
|
|
113
110
|
context: this._session.sessionId,
|
|
114
111
|
actions: [{
|
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.BidiNetworkManager = void 0;
|
|
7
7
|
exports.bidiBytesValueToString = bidiBytesValueToString;
|
|
8
|
-
var _eventsHelper = require("
|
|
8
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
9
|
+
var _cookieStore = require("../cookieStore");
|
|
9
10
|
var network = _interopRequireWildcard(require("../network"));
|
|
10
11
|
var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
|
|
11
|
-
var _cookieStore = require("../cookieStore");
|
|
12
12
|
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); }
|
|
13
|
-
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 &&
|
|
13
|
+
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; }
|
|
14
14
|
/**
|
|
15
15
|
* Copyright (c) Microsoft Corporation.
|
|
16
16
|
*
|