patchright-core 1.50.1 → 1.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +1 -43
- 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/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 +36 -25
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +8 -2
- 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 +3 -3
- 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 +8 -8
- 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 -8
- package/lib/{utils → server/utils}/linuxUtils.js +3 -23
- package/lib/{utils → server/utils}/network.js +4 -4
- 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 +114 -116
- 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 +1 -1
- 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-c-SNdYZy.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 +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +123 -99
- package/types/types.d.ts +91 -37
- package/lib/utils/stackTrace.js +0 -134
- package/lib/utils/traceUtils.js +0 -44
- package/lib/vite/recorder/assets/codeMirrorModule-CNAqJrkA.js +0 -24
- package/lib/vite/recorder/assets/index-DGS0JLxS.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-D55P_UuL.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B-uNoFsX.js +0 -243
- package/lib/vite/traceViewer/defaultSettingsView.2xeEXCXv.css +0 -1
- package/lib/vite/traceViewer/index.BfvuujqP.js +0 -2
- package/lib/vite/traceViewer/uiMode.CStJu6jo.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/client/locator.js
CHANGED
|
@@ -6,13 +6,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.Locator = exports.FrameLocator = void 0;
|
|
7
7
|
exports.setTestIdAttribute = setTestIdAttribute;
|
|
8
8
|
exports.testIdAttributeName = testIdAttributeName;
|
|
9
|
-
var util = _interopRequireWildcard(require("util"));
|
|
10
|
-
var _utils = require("../utils");
|
|
11
|
-
var _elementHandle = require("./elementHandle");
|
|
12
9
|
var _jsHandle = require("./jsHandle");
|
|
13
|
-
var
|
|
10
|
+
var _elementHandle = require("./elementHandle");
|
|
11
|
+
var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
|
|
14
12
|
var _locatorUtils = require("../utils/isomorphic/locatorUtils");
|
|
15
|
-
|
|
13
|
+
var _stringUtils = require("../utils/isomorphic/stringUtils");
|
|
14
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
15
|
+
var _time = require("../utils/isomorphic/time");
|
|
16
|
+
// undetected-undetected_playwright-patch - custom imports
|
|
17
|
+
|
|
16
18
|
/**
|
|
17
19
|
* Copyright (c) Microsoft Corporation.
|
|
18
20
|
*
|
|
@@ -28,9 +30,7 @@ let _util$inspect$custom;
|
|
|
28
30
|
* See the License for the specific language governing permissions and
|
|
29
31
|
* limitations under the License.
|
|
30
32
|
*/
|
|
31
|
-
|
|
32
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
33
|
-
_util$inspect$custom = util.inspect.custom;
|
|
33
|
+
|
|
34
34
|
class Locator {
|
|
35
35
|
constructor(frame, selector, options) {
|
|
36
36
|
this._frame = void 0;
|
|
@@ -49,12 +49,14 @@ class Locator {
|
|
|
49
49
|
if (locator._frame !== frame) throw new Error(`Inner "hasNot" locator must belong to the same frame.`);
|
|
50
50
|
this._selector += ` >> internal:has-not=` + JSON.stringify(locator._selector);
|
|
51
51
|
}
|
|
52
|
+
if ((options === null || options === void 0 ? void 0 : options.visible) !== undefined) this._selector += ` >> visible=${options.visible ? 'true' : 'false'}`;
|
|
53
|
+
if (this._frame._platform.inspectCustom) this[this._frame._platform.inspectCustom] = () => this._inspect();
|
|
52
54
|
}
|
|
53
55
|
async _withElement(task, timeout) {
|
|
54
56
|
timeout = this._frame.page()._timeoutSettings.timeout({
|
|
55
57
|
timeout
|
|
56
58
|
});
|
|
57
|
-
const deadline = timeout ? (0,
|
|
59
|
+
const deadline = timeout ? (0, _time.monotonicTime)() + timeout : 0;
|
|
58
60
|
return await this._frame._wrapApiCall(async () => {
|
|
59
61
|
const result = await this._frame._channel.waitForSelector({
|
|
60
62
|
selector: this._selector,
|
|
@@ -65,7 +67,7 @@ class Locator {
|
|
|
65
67
|
const handle = _elementHandle.ElementHandle.fromNullable(result.element);
|
|
66
68
|
if (!handle) throw new Error(`Could not resolve ${this._selector} to DOM Element`);
|
|
67
69
|
try {
|
|
68
|
-
return await task(handle, deadline ? deadline - (0,
|
|
70
|
+
return await task(handle, deadline ? deadline - (0, _time.monotonicTime)() : 0);
|
|
69
71
|
} finally {
|
|
70
72
|
await handle.dispose();
|
|
71
73
|
}
|
|
@@ -110,14 +112,24 @@ class Locator {
|
|
|
110
112
|
...options
|
|
111
113
|
});
|
|
112
114
|
}
|
|
113
|
-
async evaluate(pageFunction, arg, options) {
|
|
114
|
-
return await this._withElement(h =>
|
|
115
|
+
async evaluate(pageFunction, arg, options, isolatedContext = true) {
|
|
116
|
+
return await this._withElement(async h => (0, _jsHandle.parseResult)((await h._channel.evaluateExpression({
|
|
117
|
+
expression: String(pageFunction),
|
|
118
|
+
isFunction: typeof pageFunction === "function",
|
|
119
|
+
arg: (0, _jsHandle.serializeArgument)(arg),
|
|
120
|
+
isolatedContext: isolatedContext
|
|
121
|
+
})).value), options === null || options === void 0 ? void 0 : options.timeout);
|
|
115
122
|
}
|
|
116
123
|
async evaluateAll(pageFunction, arg) {
|
|
117
124
|
return await this._frame.$$eval(this._selector, pageFunction, arg);
|
|
118
125
|
}
|
|
119
|
-
async evaluateHandle(pageFunction, arg, options) {
|
|
120
|
-
return await this._withElement(h =>
|
|
126
|
+
async evaluateHandle(pageFunction, arg, options, isolatedContext = true) {
|
|
127
|
+
return await this._withElement(async h => _jsHandle.JSHandle.from((await h._channel.evaluateExpressionHandle({
|
|
128
|
+
expression: String(pageFunction),
|
|
129
|
+
isFunction: typeof pageFunction === "function",
|
|
130
|
+
arg: (0, _jsHandle.serializeArgument)(arg),
|
|
131
|
+
isolatedContext: isolatedContext
|
|
132
|
+
})).handle), options === null || options === void 0 ? void 0 : options.timeout);
|
|
121
133
|
}
|
|
122
134
|
async fill(value, options = {}) {
|
|
123
135
|
return await this._frame.fill(this._selector, value, {
|
|
@@ -136,7 +148,7 @@ class Locator {
|
|
|
136
148
|
return await this._frame._highlight(this._selector);
|
|
137
149
|
}
|
|
138
150
|
locator(selectorOrLocator, options) {
|
|
139
|
-
if ((0,
|
|
151
|
+
if ((0, _rtti.isString)(selectorOrLocator)) return new Locator(this._frame, this._selector + ' >> ' + selectorOrLocator, options);
|
|
140
152
|
if (selectorOrLocator._frame !== this._frame) throw new Error(`Locators must belong to the same frame.`);
|
|
141
153
|
return new Locator(this._frame, this._selector + ' >> internal:chain=' + JSON.stringify(selectorOrLocator._selector), options);
|
|
142
154
|
}
|
|
@@ -213,6 +225,9 @@ class Locator {
|
|
|
213
225
|
async count() {
|
|
214
226
|
return await this._frame._queryCount(this._selector);
|
|
215
227
|
}
|
|
228
|
+
async _generateLocatorString() {
|
|
229
|
+
return await this._withElement(h => h._generateLocatorString());
|
|
230
|
+
}
|
|
216
231
|
async getAttribute(name, options) {
|
|
217
232
|
return await this._frame.getAttribute(this._selector, name, {
|
|
218
233
|
strict: true,
|
|
@@ -286,14 +301,18 @@ class Locator {
|
|
|
286
301
|
});
|
|
287
302
|
}
|
|
288
303
|
async screenshot(options = {}) {
|
|
304
|
+
const mask = options.mask;
|
|
289
305
|
return await this._withElement((h, timeout) => h.screenshot({
|
|
290
306
|
...options,
|
|
307
|
+
mask,
|
|
291
308
|
timeout
|
|
292
309
|
}), options.timeout);
|
|
293
310
|
}
|
|
294
311
|
async ariaSnapshot(options) {
|
|
295
312
|
const result = await this._frame._channel.ariaSnapshot({
|
|
296
313
|
...options,
|
|
314
|
+
id: options === null || options === void 0 ? void 0 : options._id,
|
|
315
|
+
mode: options === null || options === void 0 ? void 0 : options._mode,
|
|
297
316
|
selector: this._selector
|
|
298
317
|
});
|
|
299
318
|
return result.snapshot;
|
|
@@ -381,11 +400,11 @@ class Locator {
|
|
|
381
400
|
if (result.received !== undefined) result.received = (0, _jsHandle.parseResult)(result.received);
|
|
382
401
|
return result;
|
|
383
402
|
}
|
|
384
|
-
|
|
403
|
+
_inspect() {
|
|
385
404
|
return this.toString();
|
|
386
405
|
}
|
|
387
406
|
toString() {
|
|
388
|
-
return (0,
|
|
407
|
+
return (0, _locatorGenerators.asLocator)('javascript', this._selector);
|
|
389
408
|
}
|
|
390
409
|
}
|
|
391
410
|
exports.Locator = Locator;
|
|
@@ -397,7 +416,7 @@ class FrameLocator {
|
|
|
397
416
|
this._frameSelector = selector;
|
|
398
417
|
}
|
|
399
418
|
locator(selectorOrLocator, options) {
|
|
400
|
-
if ((0,
|
|
419
|
+
if ((0, _rtti.isString)(selectorOrLocator)) return new Locator(this._frame, this._frameSelector + ' >> internal:control=enter-frame >> ' + selectorOrLocator, options);
|
|
401
420
|
if (selectorOrLocator._frame !== this._frame) throw new Error(`Locators must belong to the same frame.`);
|
|
402
421
|
return new Locator(this._frame, this._frameSelector + ' >> internal:control=enter-frame >> ' + selectorOrLocator._selector, options);
|
|
403
422
|
}
|
package/lib/client/network.js
CHANGED
|
@@ -5,19 +5,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.WebSocketRouteHandler = exports.WebSocketRoute = exports.WebSocket = exports.RouteHandler = exports.Route = exports.Response = exports.Request = exports.RawHeaders = void 0;
|
|
7
7
|
exports.validateHeaders = validateHeaders;
|
|
8
|
-
var _url = require("url");
|
|
9
8
|
var _channelOwner = require("./channelOwner");
|
|
10
|
-
var
|
|
11
|
-
var _worker = require("./worker");
|
|
12
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
13
|
-
var _utilsBundle = require("../utilsBundle");
|
|
14
|
-
var _utils = require("../utils");
|
|
15
|
-
var _manualPromise = require("../utils/manualPromise");
|
|
9
|
+
var _errors = require("./errors");
|
|
16
10
|
var _events = require("./events");
|
|
17
|
-
var _waiter = require("./waiter");
|
|
18
11
|
var _fetch = require("./fetch");
|
|
19
|
-
var
|
|
20
|
-
|
|
12
|
+
var _frame = require("./frame");
|
|
13
|
+
var _waiter = require("./waiter");
|
|
14
|
+
var _worker = require("./worker");
|
|
15
|
+
var _assert = require("../utils/isomorphic/assert");
|
|
16
|
+
var _headers = require("../utils/isomorphic/headers");
|
|
17
|
+
var _urlMatch = require("../utils/isomorphic/urlMatch");
|
|
18
|
+
var _manualPromise = require("../utils/isomorphic/manualPromise");
|
|
19
|
+
var _multimap = require("../utils/isomorphic/multimap");
|
|
20
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
21
|
+
var _stackTrace = require("../utils/isomorphic/stackTrace");
|
|
22
|
+
var _mimeType = require("../utils/isomorphic/mimeType");
|
|
21
23
|
/**
|
|
22
24
|
* Copyright (c) Microsoft Corporation.
|
|
23
25
|
*
|
|
@@ -33,7 +35,7 @@ let _Symbol$asyncDispose;
|
|
|
33
35
|
* See the License for the specific language governing permissions and
|
|
34
36
|
* limitations under the License.
|
|
35
37
|
*/
|
|
36
|
-
|
|
38
|
+
|
|
37
39
|
class Request extends _channelOwner.ChannelOwner {
|
|
38
40
|
static from(request) {
|
|
39
41
|
return request._object;
|
|
@@ -88,7 +90,7 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
88
90
|
const contentType = this.headers()['content-type'];
|
|
89
91
|
if (contentType !== null && contentType !== void 0 && contentType.includes('application/x-www-form-urlencoded')) {
|
|
90
92
|
const entries = {};
|
|
91
|
-
const parsed = new
|
|
93
|
+
const parsed = new URLSearchParams(postData);
|
|
92
94
|
for (const [k, v] of parsed.entries()) entries[k] = v;
|
|
93
95
|
return entries;
|
|
94
96
|
}
|
|
@@ -134,7 +136,7 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
134
136
|
}
|
|
135
137
|
frame() {
|
|
136
138
|
if (!this._initializer.frame) {
|
|
137
|
-
(0,
|
|
139
|
+
(0, _assert.assert)(this.serviceWorker());
|
|
138
140
|
throw new Error('Service Worker requests do not have an associated frame.');
|
|
139
141
|
}
|
|
140
142
|
const frame = _frame.Frame.from(this._initializer.frame);
|
|
@@ -184,7 +186,7 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
184
186
|
if (overrides.url) this._fallbackOverrides.url = overrides.url;
|
|
185
187
|
if (overrides.method) this._fallbackOverrides.method = overrides.method;
|
|
186
188
|
if (overrides.headers) this._fallbackOverrides.headers = overrides.headers;
|
|
187
|
-
if ((0,
|
|
189
|
+
if ((0, _rtti.isString)(overrides.postData)) this._fallbackOverrides.postDataBuffer = Buffer.from(overrides.postData, 'utf-8');else if (overrides.postData instanceof Buffer) this._fallbackOverrides.postDataBuffer = overrides.postData;else if (overrides.postData) this._fallbackOverrides.postDataBuffer = Buffer.from(JSON.stringify(overrides.postData), 'utf-8');
|
|
188
190
|
}
|
|
189
191
|
_fallbackOverridesForContinue() {
|
|
190
192
|
return this._fallbackOverrides;
|
|
@@ -272,13 +274,12 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
272
274
|
body
|
|
273
275
|
} = options;
|
|
274
276
|
if (options.json !== undefined) {
|
|
275
|
-
(0,
|
|
277
|
+
(0, _assert.assert)(options.body === undefined, 'Can specify either body or json parameters');
|
|
276
278
|
body = JSON.stringify(options.json);
|
|
277
279
|
}
|
|
278
280
|
if (options.response instanceof _fetch.APIResponse) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
(_headersOption = headersOption) !== null && _headersOption !== void 0 ? _headersOption : headersOption = options.response.headers();
|
|
281
|
+
statusOption !== null && statusOption !== void 0 ? statusOption : statusOption = options.response.status();
|
|
282
|
+
headersOption !== null && headersOption !== void 0 ? headersOption : headersOption = options.response.headers();
|
|
282
283
|
if (body === undefined && options.path === undefined) {
|
|
283
284
|
if (options.response._request._connection === this._connection) fetchResponseUid = options.response._fetchUid();else body = await options.response.body();
|
|
284
285
|
}
|
|
@@ -286,11 +287,11 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
286
287
|
let isBase64 = false;
|
|
287
288
|
let length = 0;
|
|
288
289
|
if (options.path) {
|
|
289
|
-
const buffer = await
|
|
290
|
+
const buffer = await this._platform.fs().promises.readFile(options.path);
|
|
290
291
|
body = buffer.toString('base64');
|
|
291
292
|
isBase64 = true;
|
|
292
293
|
length = buffer.length;
|
|
293
|
-
} else if ((0,
|
|
294
|
+
} else if ((0, _rtti.isString)(body)) {
|
|
294
295
|
isBase64 = false;
|
|
295
296
|
length = Buffer.byteLength(body);
|
|
296
297
|
} else if (body) {
|
|
@@ -300,11 +301,11 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
300
301
|
}
|
|
301
302
|
const headers = {};
|
|
302
303
|
for (const header of Object.keys(headersOption || {})) headers[header.toLowerCase()] = String(headersOption[header]);
|
|
303
|
-
if (options.contentType) headers['content-type'] = String(options.contentType);else if (options.json) headers['content-type'] = 'application/json';else if (options.path) headers['content-type'] =
|
|
304
|
+
if (options.contentType) headers['content-type'] = String(options.contentType);else if (options.json) headers['content-type'] = 'application/json';else if (options.path) headers['content-type'] = (0, _mimeType.getMimeTypeForPath)(options.path) || 'application/octet-stream';
|
|
304
305
|
if (length && !('content-length' in headers)) headers['content-length'] = String(length);
|
|
305
306
|
await this._raceWithTargetClose(this._channel.fulfill({
|
|
306
307
|
status: statusOption || 200,
|
|
307
|
-
headers: (0,
|
|
308
|
+
headers: (0, _headers.headersObjectToArray)(headers),
|
|
308
309
|
body,
|
|
309
310
|
isBase64,
|
|
310
311
|
fetchResponseUid
|
|
@@ -329,14 +330,13 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
329
330
|
return await this._raceWithTargetClose(this._channel.continue({
|
|
330
331
|
url: options.url,
|
|
331
332
|
method: options.method,
|
|
332
|
-
headers: options.headers ? (0,
|
|
333
|
+
headers: options.headers ? (0, _headers.headersObjectToArray)(options.headers) : undefined,
|
|
333
334
|
postData: options.postDataBuffer,
|
|
334
335
|
isFallback
|
|
335
336
|
}));
|
|
336
337
|
}
|
|
337
338
|
}
|
|
338
339
|
exports.Route = Route;
|
|
339
|
-
_Symbol$asyncDispose = Symbol.asyncDispose;
|
|
340
340
|
class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
341
341
|
static from(route) {
|
|
342
342
|
return route._object;
|
|
@@ -370,7 +370,7 @@ class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
|
370
370
|
}).catch(() => {});
|
|
371
371
|
},
|
|
372
372
|
send: message => {
|
|
373
|
-
if ((0,
|
|
373
|
+
if ((0, _rtti.isString)(message)) this._channel.sendToServer({
|
|
374
374
|
message,
|
|
375
375
|
isBase64: false
|
|
376
376
|
}).catch(() => {});else this._channel.sendToServer({
|
|
@@ -439,7 +439,7 @@ class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
|
439
439
|
return this._server;
|
|
440
440
|
}
|
|
441
441
|
send(message) {
|
|
442
|
-
if ((0,
|
|
442
|
+
if ((0, _rtti.isString)(message)) this._channel.sendToPage({
|
|
443
443
|
message,
|
|
444
444
|
isBase64: false
|
|
445
445
|
}).catch(() => {});else this._channel.sendToPage({
|
|
@@ -453,7 +453,7 @@ class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
|
453
453
|
onClose(handler) {
|
|
454
454
|
this._onPageClose = handler;
|
|
455
455
|
}
|
|
456
|
-
async [
|
|
456
|
+
async [Symbol.asyncDispose]() {
|
|
457
457
|
await this.close();
|
|
458
458
|
}
|
|
459
459
|
async _afterHandle() {
|
|
@@ -476,9 +476,9 @@ class WebSocketRouteHandler {
|
|
|
476
476
|
const patterns = [];
|
|
477
477
|
let all = false;
|
|
478
478
|
for (const handler of handlers) {
|
|
479
|
-
if ((0,
|
|
479
|
+
if ((0, _rtti.isString)(handler.url)) patterns.push({
|
|
480
480
|
glob: handler.url
|
|
481
|
-
});else if ((0,
|
|
481
|
+
});else if ((0, _rtti.isRegExp)(handler.url)) patterns.push({
|
|
482
482
|
regexSource: handler.url.source,
|
|
483
483
|
regexFlags: handler.url.flags
|
|
484
484
|
});else all = true;
|
|
@@ -489,7 +489,7 @@ class WebSocketRouteHandler {
|
|
|
489
489
|
return patterns;
|
|
490
490
|
}
|
|
491
491
|
matches(wsURL) {
|
|
492
|
-
return (0,
|
|
492
|
+
return (0, _urlMatch.urlMatches)(this._baseURL, wsURL, this.url);
|
|
493
493
|
}
|
|
494
494
|
async handle(webSocketRoute) {
|
|
495
495
|
const handler = this.handler;
|
|
@@ -644,11 +644,11 @@ exports.WebSocket = WebSocket;
|
|
|
644
644
|
function validateHeaders(headers) {
|
|
645
645
|
for (const key of Object.keys(headers)) {
|
|
646
646
|
const value = headers[key];
|
|
647
|
-
if (!Object.is(value, undefined) && !(0,
|
|
647
|
+
if (!Object.is(value, undefined) && !(0, _rtti.isString)(value)) throw new Error(`Expected value of header "${key}" to be String, but "${typeof value}" is found.`);
|
|
648
648
|
}
|
|
649
649
|
}
|
|
650
650
|
class RouteHandler {
|
|
651
|
-
constructor(baseURL, url, handler, times = Number.MAX_SAFE_INTEGER) {
|
|
651
|
+
constructor(platform, baseURL, url, handler, times = Number.MAX_SAFE_INTEGER) {
|
|
652
652
|
this.handledCount = 0;
|
|
653
653
|
this._baseURL = void 0;
|
|
654
654
|
this._times = void 0;
|
|
@@ -656,20 +656,20 @@ class RouteHandler {
|
|
|
656
656
|
this.handler = void 0;
|
|
657
657
|
this._ignoreException = false;
|
|
658
658
|
this._activeInvocations = new Set();
|
|
659
|
-
this.
|
|
659
|
+
this._savedZone = void 0;
|
|
660
660
|
this._baseURL = baseURL;
|
|
661
661
|
this._times = times;
|
|
662
662
|
this.url = url;
|
|
663
663
|
this.handler = handler;
|
|
664
|
-
this.
|
|
664
|
+
this._savedZone = platform.zones.current().pop();
|
|
665
665
|
}
|
|
666
666
|
static prepareInterceptionPatterns(handlers) {
|
|
667
667
|
const patterns = [];
|
|
668
668
|
let all = false;
|
|
669
669
|
for (const handler of handlers) {
|
|
670
|
-
if ((0,
|
|
670
|
+
if ((0, _rtti.isString)(handler.url)) patterns.push({
|
|
671
671
|
glob: handler.url
|
|
672
|
-
});else if ((0,
|
|
672
|
+
});else if ((0, _rtti.isRegExp)(handler.url)) patterns.push({
|
|
673
673
|
regexSource: handler.url.source,
|
|
674
674
|
regexFlags: handler.url.flags
|
|
675
675
|
});else all = true;
|
|
@@ -680,10 +680,10 @@ class RouteHandler {
|
|
|
680
680
|
return patterns;
|
|
681
681
|
}
|
|
682
682
|
matches(requestURL) {
|
|
683
|
-
return (0,
|
|
683
|
+
return (0, _urlMatch.urlMatches)(this._baseURL, requestURL, this.url);
|
|
684
684
|
}
|
|
685
685
|
async handle(route) {
|
|
686
|
-
return await this.
|
|
686
|
+
return await this._savedZone.run(async () => this._handleImpl(route));
|
|
687
687
|
}
|
|
688
688
|
async _handleImpl(route) {
|
|
689
689
|
const handlerInvocation = {
|
|
@@ -699,7 +699,7 @@ class RouteHandler {
|
|
|
699
699
|
if ((0, _errors.isTargetClosedError)(e)) {
|
|
700
700
|
// We are failing in the handler because the target close closed.
|
|
701
701
|
// Give user a hint!
|
|
702
|
-
(0,
|
|
702
|
+
(0, _stackTrace.rewriteErrorMessage)(e, `"${e.message}" while running route callback.\nConsider awaiting \`await page.unrouteAll({ behavior: 'ignoreErrors' })\`\nbefore the end of the test to ignore remaining routes in flight.`);
|
|
703
703
|
}
|
|
704
704
|
throw e;
|
|
705
705
|
} finally {
|
|
@@ -745,7 +745,7 @@ class RawHeaders {
|
|
|
745
745
|
}
|
|
746
746
|
constructor(headers) {
|
|
747
747
|
this._headersArray = void 0;
|
|
748
|
-
this._headersMap = new
|
|
748
|
+
this._headersMap = new _multimap.MultiMap();
|
|
749
749
|
this._headersArray = headers;
|
|
750
750
|
for (const header of headers) this._headersMap.set(header.name.toLowerCase(), header.value);
|
|
751
751
|
}
|