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,10 +8,10 @@ var _fs = _interopRequireDefault(require("fs"));
|
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
9
|
var _artifact = require("../artifact");
|
|
10
10
|
var _harTracer = require("./harTracer");
|
|
11
|
+
var _crypto = require("../utils/crypto");
|
|
12
|
+
var _manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
11
13
|
var _zipBundle = require("../../zipBundle");
|
|
12
|
-
|
|
13
|
-
var _utils = require("../../utils");
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
15
|
/**
|
|
16
16
|
* Copyright (c) Microsoft Corporation.
|
|
17
17
|
*
|
|
@@ -36,7 +36,7 @@ class HarRecorder {
|
|
|
36
36
|
this._entries = [];
|
|
37
37
|
this._zipFile = null;
|
|
38
38
|
this._writtenZipEntries = new Set();
|
|
39
|
-
this._artifact = new _artifact.Artifact(context, _path.default.join(context._browser.options.artifactsDir, `${(0,
|
|
39
|
+
this._artifact = new _artifact.Artifact(context, _path.default.join(context._browser.options.artifactsDir, `${(0, _crypto.createGuid)()}.har`));
|
|
40
40
|
const urlFilterRe = options.urlRegexSource !== undefined && options.urlRegexFlags !== undefined ? new RegExp(options.urlRegexSource, options.urlRegexFlags) : undefined;
|
|
41
41
|
const expectsZip = options.path.endsWith('.zip');
|
|
42
42
|
const content = options.content || (expectsZip ? 'attach' : 'embed');
|
|
@@ -4,17 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.HarTracer = void 0;
|
|
7
|
+
var _utils = require("../../utils");
|
|
8
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
9
|
+
var _manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
10
|
+
var _utilsBundle = require("../../utilsBundle");
|
|
7
11
|
var _browserContext = require("../browserContext");
|
|
8
12
|
var _fetch = require("../fetch");
|
|
13
|
+
var _frames = require("../frames");
|
|
9
14
|
var _helper = require("../helper");
|
|
10
15
|
var network = _interopRequireWildcard(require("../network"));
|
|
11
|
-
var _utils = require("../../utils");
|
|
12
|
-
var _eventsHelper = require("../../utils/eventsHelper");
|
|
13
|
-
var _utilsBundle = require("../../utilsBundle");
|
|
14
|
-
var _manualPromise = require("../../utils/manualPromise");
|
|
15
|
-
var _frames = require("../frames");
|
|
16
16
|
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); }
|
|
17
|
-
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 &&
|
|
17
|
+
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; }
|
|
18
18
|
/**
|
|
19
19
|
* Copyright (c) Microsoft Corporation.
|
|
20
20
|
*
|
|
@@ -440,9 +440,8 @@ class HarTracer {
|
|
|
440
440
|
return this._postDataForBuffer(postData, contentType, content);
|
|
441
441
|
}
|
|
442
442
|
_postDataForBuffer(postData, contentType, content) {
|
|
443
|
-
var _contentType;
|
|
444
443
|
if (!postData) return;
|
|
445
|
-
|
|
444
|
+
contentType !== null && contentType !== void 0 ? contentType : contentType = 'application/octet-stream';
|
|
446
445
|
const result = {
|
|
447
446
|
mimeType: contentType,
|
|
448
447
|
text: '',
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.HarBackend = void 0;
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _crypto = require("./utils/crypto");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* Copyright (c) Microsoft Corporation.
|
|
13
|
+
*
|
|
14
|
+
* Licensed under the Apache License, Version 2.0 (the 'License");
|
|
15
|
+
* you may not use this file except in compliance with the License.
|
|
16
|
+
* You may obtain a copy of the License at
|
|
17
|
+
*
|
|
18
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
19
|
+
*
|
|
20
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
21
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
22
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
23
|
+
* See the License for the specific language governing permissions and
|
|
24
|
+
* limitations under the License.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
const redirectStatus = [301, 302, 303, 307, 308];
|
|
28
|
+
class HarBackend {
|
|
29
|
+
constructor(harFile, baseDir, zipFile) {
|
|
30
|
+
this.id = void 0;
|
|
31
|
+
this._harFile = void 0;
|
|
32
|
+
this._zipFile = void 0;
|
|
33
|
+
this._baseDir = void 0;
|
|
34
|
+
this.id = (0, _crypto.createGuid)();
|
|
35
|
+
this._harFile = harFile;
|
|
36
|
+
this._baseDir = baseDir;
|
|
37
|
+
this._zipFile = zipFile;
|
|
38
|
+
}
|
|
39
|
+
async lookup(url, method, headers, postData, isNavigationRequest) {
|
|
40
|
+
let entry;
|
|
41
|
+
try {
|
|
42
|
+
entry = await this._harFindResponse(url, method, headers, postData);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
return {
|
|
45
|
+
action: 'error',
|
|
46
|
+
message: 'HAR error: ' + e.message
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (!entry) return {
|
|
50
|
+
action: 'noentry'
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// If navigation is being redirected, restart it with the final url to ensure the document's url changes.
|
|
54
|
+
if (entry.request.url !== url && isNavigationRequest) return {
|
|
55
|
+
action: 'redirect',
|
|
56
|
+
redirectURL: entry.request.url
|
|
57
|
+
};
|
|
58
|
+
const response = entry.response;
|
|
59
|
+
try {
|
|
60
|
+
const buffer = await this._loadContent(response.content);
|
|
61
|
+
return {
|
|
62
|
+
action: 'fulfill',
|
|
63
|
+
status: response.status,
|
|
64
|
+
headers: response.headers,
|
|
65
|
+
body: buffer
|
|
66
|
+
};
|
|
67
|
+
} catch (e) {
|
|
68
|
+
return {
|
|
69
|
+
action: 'error',
|
|
70
|
+
message: e.message
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async _loadContent(content) {
|
|
75
|
+
const file = content._file;
|
|
76
|
+
let buffer;
|
|
77
|
+
if (file) {
|
|
78
|
+
if (this._zipFile) buffer = await this._zipFile.read(file);else buffer = await _fs.default.promises.readFile(_path.default.resolve(this._baseDir, file));
|
|
79
|
+
} else {
|
|
80
|
+
buffer = Buffer.from(content.text || '', content.encoding === 'base64' ? 'base64' : 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
return buffer;
|
|
83
|
+
}
|
|
84
|
+
async _harFindResponse(url, method, headers, postData) {
|
|
85
|
+
const harLog = this._harFile.log;
|
|
86
|
+
const visited = new Set();
|
|
87
|
+
while (true) {
|
|
88
|
+
const entries = [];
|
|
89
|
+
for (const candidate of harLog.entries) {
|
|
90
|
+
if (candidate.request.url !== url || candidate.request.method !== method) continue;
|
|
91
|
+
if (method === 'POST' && postData && candidate.request.postData) {
|
|
92
|
+
const buffer = await this._loadContent(candidate.request.postData);
|
|
93
|
+
if (!buffer.equals(postData)) {
|
|
94
|
+
const boundary = multipartBoundary(headers);
|
|
95
|
+
if (!boundary) continue;
|
|
96
|
+
const candidataBoundary = multipartBoundary(candidate.request.headers);
|
|
97
|
+
if (!candidataBoundary) continue;
|
|
98
|
+
// Try to match multipart/form-data ignroing boundary as it changes between requests.
|
|
99
|
+
if (postData.toString().replaceAll(boundary, '') !== buffer.toString().replaceAll(candidataBoundary, '')) continue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
entries.push(candidate);
|
|
103
|
+
}
|
|
104
|
+
if (!entries.length) return;
|
|
105
|
+
let entry = entries[0];
|
|
106
|
+
|
|
107
|
+
// Disambiguate using headers - then one with most matching headers wins.
|
|
108
|
+
if (entries.length > 1) {
|
|
109
|
+
const list = [];
|
|
110
|
+
for (const candidate of entries) {
|
|
111
|
+
const matchingHeaders = countMatchingHeaders(candidate.request.headers, headers);
|
|
112
|
+
list.push({
|
|
113
|
+
candidate,
|
|
114
|
+
matchingHeaders
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
list.sort((a, b) => b.matchingHeaders - a.matchingHeaders);
|
|
118
|
+
entry = list[0].candidate;
|
|
119
|
+
}
|
|
120
|
+
if (visited.has(entry)) throw new Error(`Found redirect cycle for ${url}`);
|
|
121
|
+
visited.add(entry);
|
|
122
|
+
|
|
123
|
+
// Follow redirects.
|
|
124
|
+
const locationHeader = entry.response.headers.find(h => h.name.toLowerCase() === 'location');
|
|
125
|
+
if (redirectStatus.includes(entry.response.status) && locationHeader) {
|
|
126
|
+
const locationURL = new URL(locationHeader.value, url);
|
|
127
|
+
url = locationURL.toString();
|
|
128
|
+
if ((entry.response.status === 301 || entry.response.status === 302) && method === 'POST' || entry.response.status === 303 && !['GET', 'HEAD'].includes(method)) {
|
|
129
|
+
// HTTP-redirect fetch step 13 (https://fetch.spec.whatwg.org/#http-redirect-fetch)
|
|
130
|
+
method = 'GET';
|
|
131
|
+
}
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
return entry;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
dispose() {
|
|
138
|
+
var _this$_zipFile;
|
|
139
|
+
(_this$_zipFile = this._zipFile) === null || _this$_zipFile === void 0 || _this$_zipFile.close();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.HarBackend = HarBackend;
|
|
143
|
+
function countMatchingHeaders(harHeaders, headers) {
|
|
144
|
+
const set = new Set(headers.map(h => h.name.toLowerCase() + ':' + h.value));
|
|
145
|
+
let matches = 0;
|
|
146
|
+
for (const h of harHeaders) {
|
|
147
|
+
if (set.has(h.name.toLowerCase() + ':' + h.value)) ++matches;
|
|
148
|
+
}
|
|
149
|
+
return matches;
|
|
150
|
+
}
|
|
151
|
+
function multipartBoundary(headers) {
|
|
152
|
+
const contentType = headers.find(h => h.name.toLowerCase() === 'content-type');
|
|
153
|
+
if (!(contentType !== null && contentType !== void 0 && contentType.value.includes('multipart/form-data'))) return undefined;
|
|
154
|
+
const boundary = contentType.value.match(/boundary=(\S+)/);
|
|
155
|
+
if (boundary) return boundary[1];
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
package/lib/server/helper.js
CHANGED
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.helper = void 0;
|
|
7
|
-
var _debugLogger = require("
|
|
8
|
-
var _eventsHelper = require("
|
|
7
|
+
var _debugLogger = require("./utils/debugLogger");
|
|
8
|
+
var _eventsHelper = require("./utils/eventsHelper");
|
|
9
9
|
/**
|
|
10
10
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
11
11
|
* Modifications copyright (c) Microsoft Corporation.
|
package/lib/server/index.js
CHANGED
|
@@ -27,12 +27,6 @@ Object.defineProperty(exports, "RootDispatcher", {
|
|
|
27
27
|
return _dispatcher.RootDispatcher;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
-
Object.defineProperty(exports, "SocksProxy", {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
get: function () {
|
|
33
|
-
return _socksProxy.SocksProxy;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
30
|
Object.defineProperty(exports, "createPlaywright", {
|
|
37
31
|
enumerable: true,
|
|
38
32
|
get: function () {
|
|
@@ -104,5 +98,4 @@ var _dispatcher = require("./dispatchers/dispatcher");
|
|
|
104
98
|
var _playwrightDispatcher = require("./dispatchers/playwrightDispatcher");
|
|
105
99
|
var _playwright = require("./playwright");
|
|
106
100
|
var _traceViewer = require("./trace/viewer/traceViewer");
|
|
107
|
-
var _instrumentation = require("./instrumentation");
|
|
108
|
-
var _socksProxy = require("../common/socksProxy");
|
|
101
|
+
var _instrumentation = require("./instrumentation");
|
package/lib/server/input.js
CHANGED
|
@@ -9,7 +9,7 @@ exports.resolveSmartModifierString = resolveSmartModifierString;
|
|
|
9
9
|
var _utils = require("../utils");
|
|
10
10
|
var keyboardLayout = _interopRequireWildcard(require("./usKeyboardLayout"));
|
|
11
11
|
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); }
|
|
12
|
-
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 &&
|
|
12
|
+
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; }
|
|
13
13
|
/**
|
|
14
14
|
* Copyright (c) Microsoft Corporation.
|
|
15
15
|
*
|
|
@@ -7,7 +7,7 @@ exports.SdkObject = void 0;
|
|
|
7
7
|
exports.createInstrumentation = createInstrumentation;
|
|
8
8
|
exports.serverSideCallMetadata = serverSideCallMetadata;
|
|
9
9
|
var _events = require("events");
|
|
10
|
-
var
|
|
10
|
+
var _crypto = require("./utils/crypto");
|
|
11
11
|
/**
|
|
12
12
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
13
13
|
*
|
|
@@ -30,7 +30,7 @@ class SdkObject extends _events.EventEmitter {
|
|
|
30
30
|
this.guid = void 0;
|
|
31
31
|
this.attribution = void 0;
|
|
32
32
|
this.instrumentation = void 0;
|
|
33
|
-
this.guid = guid || `${guidPrefix || ''}@${(0,
|
|
33
|
+
this.guid = guid || `${guidPrefix || ''}@${(0, _crypto.createGuid)()}`;
|
|
34
34
|
this.setMaxListeners(0);
|
|
35
35
|
this.attribution = {
|
|
36
36
|
...parent.attribution
|
|
@@ -101,8 +101,11 @@ function source() {
|
|
|
101
101
|
}
|
|
102
102
|
function serialize(value, handleSerializer, visitorInfo) {
|
|
103
103
|
if (value && typeof value === 'object') {
|
|
104
|
+
// eslint-disable-next-line no-restricted-globals
|
|
104
105
|
if (typeof globalThis.Window === 'function' && value instanceof globalThis.Window) return 'ref: <Window>';
|
|
106
|
+
// eslint-disable-next-line no-restricted-globals
|
|
105
107
|
if (typeof globalThis.Document === 'function' && value instanceof globalThis.Document) return 'ref: <Document>';
|
|
108
|
+
// eslint-disable-next-line no-restricted-globals
|
|
106
109
|
if (typeof globalThis.Node === 'function' && value instanceof globalThis.Node) return 'ref: <Node>';
|
|
107
110
|
}
|
|
108
111
|
return innerSerialize(value, handleSerializer, visitorInfo);
|
package/lib/server/javascript.js
CHANGED
|
@@ -10,13 +10,13 @@ exports.isJavaScriptErrorInEvaluate = isJavaScriptErrorInEvaluate;
|
|
|
10
10
|
exports.normalizeEvaluationExpression = normalizeEvaluationExpression;
|
|
11
11
|
exports.parseUnserializableValue = parseUnserializableValue;
|
|
12
12
|
exports.sparseArrayToString = sparseArrayToString;
|
|
13
|
-
var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityScriptSource"));
|
|
14
|
-
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
15
13
|
var _instrumentation = require("./instrumentation");
|
|
16
|
-
var
|
|
14
|
+
var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityScriptSource"));
|
|
17
15
|
var _utils = require("../utils");
|
|
16
|
+
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
17
|
+
var _manualPromise = require("../utils/isomorphic/manualPromise");
|
|
18
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
19
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
20
|
/**
|
|
21
21
|
* Copyright (c) Microsoft Corporation.
|
|
22
22
|
*
|
|
@@ -36,12 +36,12 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
36
36
|
class ExecutionContext extends _instrumentation.SdkObject {
|
|
37
37
|
constructor(parent, delegate, worldNameForTest) {
|
|
38
38
|
super(parent, 'execution-context');
|
|
39
|
-
this.
|
|
39
|
+
this.delegate = void 0;
|
|
40
40
|
this._utilityScriptPromise = void 0;
|
|
41
41
|
this._contextDestroyedScope = new _manualPromise.LongStandingScope();
|
|
42
42
|
this.worldNameForTest = void 0;
|
|
43
43
|
this.worldNameForTest = worldNameForTest;
|
|
44
|
-
this.
|
|
44
|
+
this.delegate = delegate;
|
|
45
45
|
}
|
|
46
46
|
contextDestroyed(reason) {
|
|
47
47
|
this._contextDestroyedScope.close(new Error(reason));
|
|
@@ -50,27 +50,25 @@ class ExecutionContext extends _instrumentation.SdkObject {
|
|
|
50
50
|
return this._contextDestroyedScope.race(promise);
|
|
51
51
|
}
|
|
52
52
|
rawEvaluateJSON(expression) {
|
|
53
|
-
return this._raceAgainstContextDestroyed(this.
|
|
53
|
+
return this._raceAgainstContextDestroyed(this.delegate.rawEvaluateJSON(expression));
|
|
54
54
|
}
|
|
55
55
|
rawEvaluateHandle(expression) {
|
|
56
|
-
return this._raceAgainstContextDestroyed(this.
|
|
57
|
-
}
|
|
58
|
-
evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds) {
|
|
59
|
-
return this._raceAgainstContextDestroyed(this._delegate.evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds));
|
|
56
|
+
return this._raceAgainstContextDestroyed(this.delegate.rawEvaluateHandle(this, expression));
|
|
60
57
|
}
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
async evaluateWithArguments(expression, returnByValue, values, handles) {
|
|
59
|
+
const utilityScript = await this._utilityScript();
|
|
60
|
+
return this._raceAgainstContextDestroyed(this.delegate.evaluateWithArguments(expression, returnByValue, utilityScript, values, handles));
|
|
63
61
|
}
|
|
64
|
-
|
|
65
|
-
return this.
|
|
62
|
+
getProperties(object) {
|
|
63
|
+
return this._raceAgainstContextDestroyed(this.delegate.getProperties(object));
|
|
66
64
|
}
|
|
67
|
-
releaseHandle(
|
|
68
|
-
return this.
|
|
65
|
+
releaseHandle(handle) {
|
|
66
|
+
return this.delegate.releaseHandle(handle);
|
|
69
67
|
}
|
|
70
68
|
adoptIfNeeded(handle) {
|
|
71
69
|
return null;
|
|
72
70
|
}
|
|
73
|
-
|
|
71
|
+
_utilityScript() {
|
|
74
72
|
if (!this._utilityScriptPromise) {
|
|
75
73
|
const source = `
|
|
76
74
|
(() => {
|
|
@@ -78,7 +76,10 @@ class ExecutionContext extends _instrumentation.SdkObject {
|
|
|
78
76
|
${utilityScriptSource.source}
|
|
79
77
|
return new (module.exports.UtilityScript())(${(0, _utils.isUnderTest)()});
|
|
80
78
|
})();`;
|
|
81
|
-
this._utilityScriptPromise = this._raceAgainstContextDestroyed(this.
|
|
79
|
+
this._utilityScriptPromise = this._raceAgainstContextDestroyed(this.delegate.rawEvaluateHandle(this, source)).then(handle => {
|
|
80
|
+
handle._setPreview('UtilityScript');
|
|
81
|
+
return handle;
|
|
82
|
+
});
|
|
82
83
|
}
|
|
83
84
|
return this._utilityScriptPromise;
|
|
84
85
|
}
|
|
@@ -111,20 +112,34 @@ class JSHandle extends _instrumentation.SdkObject {
|
|
|
111
112
|
async evaluateHandle(pageFunction, arg) {
|
|
112
113
|
return evaluate(this._context, false /* returnByValue */, pageFunction, this, arg);
|
|
113
114
|
}
|
|
114
|
-
async evaluateExpression(expression, options, arg) {
|
|
115
|
-
|
|
115
|
+
async evaluateExpression(expression, options, arg, isolatedContext) {
|
|
116
|
+
let context = this._context;
|
|
117
|
+
if (context.constructor.name === "FrameExecutionContext") {
|
|
118
|
+
const frame = context.frame;
|
|
119
|
+
if (frame) {
|
|
120
|
+
if (isolatedContext) context = await frame._utilityContext();else if (!isolatedContext) context = await frame._mainContext();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const value = await evaluateExpression(context, expression, {
|
|
116
124
|
...options,
|
|
117
125
|
returnByValue: true
|
|
118
126
|
}, this, arg);
|
|
119
|
-
await
|
|
127
|
+
await context.doSlowMo();
|
|
120
128
|
return value;
|
|
121
129
|
}
|
|
122
|
-
async evaluateExpressionHandle(expression, options, arg) {
|
|
123
|
-
|
|
130
|
+
async evaluateExpressionHandle(expression, options, arg, isolatedContext) {
|
|
131
|
+
let context = this._context;
|
|
132
|
+
if (this._context.constructor.name === "FrameExecutionContext") {
|
|
133
|
+
const frame = this._context.frame;
|
|
134
|
+
if (frame) {
|
|
135
|
+
if (isolatedContext) context = await frame._utilityContext();else if (!isolatedContext) context = await frame._mainContext();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const value = await evaluateExpression(context, expression, {
|
|
124
139
|
...options,
|
|
125
140
|
returnByValue: false
|
|
126
141
|
}, this, arg);
|
|
127
|
-
await
|
|
142
|
+
await context.doSlowMo();
|
|
128
143
|
return value;
|
|
129
144
|
}
|
|
130
145
|
async getProperty(propertyName) {
|
|
@@ -142,16 +157,15 @@ class JSHandle extends _instrumentation.SdkObject {
|
|
|
142
157
|
}
|
|
143
158
|
async getProperties() {
|
|
144
159
|
if (!this._objectId) return new Map();
|
|
145
|
-
return this._context.getProperties(this
|
|
160
|
+
return this._context.getProperties(this);
|
|
146
161
|
}
|
|
147
162
|
rawValue() {
|
|
148
163
|
return this._value;
|
|
149
164
|
}
|
|
150
165
|
async jsonValue() {
|
|
151
166
|
if (!this._objectId) return this._value;
|
|
152
|
-
const utilityScript = await this._context.utilityScript();
|
|
153
167
|
const script = `(utilityScript, ...args) => utilityScript.jsonValue(...args)`;
|
|
154
|
-
return this._context.evaluateWithArguments(script, true,
|
|
168
|
+
return this._context.evaluateWithArguments(script, true, [true], [this]);
|
|
155
169
|
}
|
|
156
170
|
asElement() {
|
|
157
171
|
return null;
|
|
@@ -160,7 +174,7 @@ class JSHandle extends _instrumentation.SdkObject {
|
|
|
160
174
|
if (this._disposed) return;
|
|
161
175
|
this._disposed = true;
|
|
162
176
|
if (this._objectId) {
|
|
163
|
-
this._context.releaseHandle(this
|
|
177
|
+
this._context.releaseHandle(this).catch(e => {});
|
|
164
178
|
if (globalThis.leakedJSHandles) globalThis.leakedJSHandles.delete(this);
|
|
165
179
|
}
|
|
166
180
|
}
|
|
@@ -189,7 +203,6 @@ async function evaluate(context, returnByValue, pageFunction, ...args) {
|
|
|
189
203
|
}, ...args);
|
|
190
204
|
}
|
|
191
205
|
async function evaluateExpression(context, expression, options, ...args) {
|
|
192
|
-
const utilityScript = await context.utilityScript();
|
|
193
206
|
expression = normalizeEvaluationExpression(expression, options.isFunction);
|
|
194
207
|
const handles = [];
|
|
195
208
|
const toDispose = [];
|
|
@@ -216,17 +229,17 @@ async function evaluateExpression(context, expression, options, ...args) {
|
|
|
216
229
|
fallThrough: handle
|
|
217
230
|
};
|
|
218
231
|
}));
|
|
219
|
-
const
|
|
232
|
+
const utilityScriptObjects = [];
|
|
220
233
|
for (const handle of await Promise.all(handles)) {
|
|
221
234
|
if (handle._context !== context) throw new JavaScriptErrorInEvaluate('JSHandles can be evaluated only in the context they were created!');
|
|
222
|
-
|
|
235
|
+
utilityScriptObjects.push(handle);
|
|
223
236
|
}
|
|
224
237
|
|
|
225
238
|
// See UtilityScript for arguments.
|
|
226
239
|
const utilityScriptValues = [options.isFunction, options.returnByValue, expression, args.length, ...args];
|
|
227
240
|
const script = `(utilityScript, ...args) => utilityScript.evaluate(...args)`;
|
|
228
241
|
try {
|
|
229
|
-
return await context.evaluateWithArguments(script, options.returnByValue || false,
|
|
242
|
+
return await context.evaluateWithArguments(script, options.returnByValue || false, utilityScriptValues, utilityScriptObjects);
|
|
230
243
|
} finally {
|
|
231
244
|
toDispose.map(handlePromise => handlePromise.then(handle => handle.dispose()));
|
|
232
245
|
}
|
package/lib/server/launchApp.js
CHANGED
|
@@ -7,10 +7,10 @@ exports.launchApp = launchApp;
|
|
|
7
7
|
exports.syncLocalStorageWithSettings = syncLocalStorageWithSettings;
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
|
10
|
-
var _registry = require("./registry");
|
|
11
10
|
var _utils = require("../utils");
|
|
12
11
|
var _instrumentation = require("./instrumentation");
|
|
13
|
-
|
|
12
|
+
var _registry = require("./registry");
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
/**
|
|
15
15
|
* Copyright (c) Microsoft Corporation.
|
|
16
16
|
*
|