patchright-core 1.51.2 → 1.52.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/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +190 -212
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +73 -75
- package/lib/client/elementHandle.js +111 -147
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +375 -4
- package/lib/inProcessFactory.js +53 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +288 -403
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +140 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +77 -111
- package/lib/server/frames.js +741 -891
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +329 -426
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +37 -28
- package/lib/server/utils/debugLogger.js +69 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +138 -123
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +143 -86
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +73 -69
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-DpJ-EmBQ.js → codeMirrorModule-dvXVzLxY.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.ChIUCJnj.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.html +3 -3
- package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +0 -259
- package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
- package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
|
@@ -1,73 +1,84 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var wkBrowser_exports = {};
|
|
30
|
+
__export(wkBrowser_exports, {
|
|
31
|
+
WKBrowser: () => WKBrowser,
|
|
32
|
+
WKBrowserContext: () => WKBrowserContext
|
|
5
33
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var network =
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15';
|
|
34
|
-
const BROWSER_VERSION = '18.4';
|
|
35
|
-
class WKBrowser extends _browser.Browser {
|
|
34
|
+
module.exports = __toCommonJS(wkBrowser_exports);
|
|
35
|
+
var import_utils = require("../../utils");
|
|
36
|
+
var import_browser = require("../browser");
|
|
37
|
+
var import_browserContext = require("../browserContext");
|
|
38
|
+
var network = __toESM(require("../network"));
|
|
39
|
+
var import_wkConnection = require("./wkConnection");
|
|
40
|
+
var import_wkPage = require("./wkPage");
|
|
41
|
+
var import_errors = require("../errors");
|
|
42
|
+
const DEFAULT_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15";
|
|
43
|
+
const BROWSER_VERSION = "18.4";
|
|
44
|
+
class WKBrowser extends import_browser.Browser {
|
|
45
|
+
constructor(parent, transport, options) {
|
|
46
|
+
super(parent, options);
|
|
47
|
+
this._contexts = /* @__PURE__ */ new Map();
|
|
48
|
+
this._wkPages = /* @__PURE__ */ new Map();
|
|
49
|
+
this._connection = new import_wkConnection.WKConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
50
|
+
this._browserSession = this._connection.browserSession;
|
|
51
|
+
this._browserSession.on("Playwright.pageProxyCreated", this._onPageProxyCreated.bind(this));
|
|
52
|
+
this._browserSession.on("Playwright.pageProxyDestroyed", this._onPageProxyDestroyed.bind(this));
|
|
53
|
+
this._browserSession.on("Playwright.provisionalLoadFailed", (event) => this._onProvisionalLoadFailed(event));
|
|
54
|
+
this._browserSession.on("Playwright.windowOpen", (event) => this._onWindowOpen(event));
|
|
55
|
+
this._browserSession.on("Playwright.downloadCreated", this._onDownloadCreated.bind(this));
|
|
56
|
+
this._browserSession.on("Playwright.downloadFilenameSuggested", this._onDownloadFilenameSuggested.bind(this));
|
|
57
|
+
this._browserSession.on("Playwright.downloadFinished", this._onDownloadFinished.bind(this));
|
|
58
|
+
this._browserSession.on("Playwright.screencastFinished", this._onScreencastFinished.bind(this));
|
|
59
|
+
this._browserSession.on(import_wkConnection.kPageProxyMessageReceived, this._onPageProxyMessageReceived.bind(this));
|
|
60
|
+
}
|
|
36
61
|
static async connect(parent, transport, options) {
|
|
37
62
|
const browser = new WKBrowser(parent, transport, options);
|
|
38
|
-
if (options.__testHookOnConnectToBrowser)
|
|
39
|
-
|
|
63
|
+
if (options.__testHookOnConnectToBrowser)
|
|
64
|
+
await options.__testHookOnConnectToBrowser();
|
|
65
|
+
const promises = [
|
|
66
|
+
browser._browserSession.send("Playwright.enable")
|
|
67
|
+
];
|
|
40
68
|
if (options.persistent) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
browser._defaultContext = new WKBrowserContext(browser, undefined, options.persistent);
|
|
69
|
+
options.persistent.userAgent ||= DEFAULT_USER_AGENT;
|
|
70
|
+
browser._defaultContext = new WKBrowserContext(browser, void 0, options.persistent);
|
|
44
71
|
promises.push(browser._defaultContext._initialize());
|
|
45
72
|
}
|
|
46
73
|
await Promise.all(promises);
|
|
47
74
|
return browser;
|
|
48
75
|
}
|
|
49
|
-
constructor(parent, transport, options) {
|
|
50
|
-
super(parent, options);
|
|
51
|
-
this._connection = void 0;
|
|
52
|
-
this._browserSession = void 0;
|
|
53
|
-
this._contexts = new Map();
|
|
54
|
-
this._wkPages = new Map();
|
|
55
|
-
this._connection = new _wkConnection.WKConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
56
|
-
this._browserSession = this._connection.browserSession;
|
|
57
|
-
this._browserSession.on('Playwright.pageProxyCreated', this._onPageProxyCreated.bind(this));
|
|
58
|
-
this._browserSession.on('Playwright.pageProxyDestroyed', this._onPageProxyDestroyed.bind(this));
|
|
59
|
-
this._browserSession.on('Playwright.provisionalLoadFailed', event => this._onProvisionalLoadFailed(event));
|
|
60
|
-
this._browserSession.on('Playwright.windowOpen', event => this._onWindowOpen(event));
|
|
61
|
-
this._browserSession.on('Playwright.downloadCreated', this._onDownloadCreated.bind(this));
|
|
62
|
-
this._browserSession.on('Playwright.downloadFilenameSuggested', this._onDownloadFilenameSuggested.bind(this));
|
|
63
|
-
this._browserSession.on('Playwright.downloadFinished', this._onDownloadFinished.bind(this));
|
|
64
|
-
this._browserSession.on('Playwright.screencastFinished', this._onScreencastFinished.bind(this));
|
|
65
|
-
this._browserSession.on(_wkConnection.kPageProxyMessageReceived, this._onPageProxyMessageReceived.bind(this));
|
|
66
|
-
}
|
|
67
76
|
_onDisconnect() {
|
|
68
|
-
for (const wkPage of this._wkPages.values())
|
|
77
|
+
for (const wkPage of this._wkPages.values())
|
|
78
|
+
wkPage.didClose();
|
|
69
79
|
this._wkPages.clear();
|
|
70
|
-
for (const video of this._idToVideo.values())
|
|
80
|
+
for (const video of this._idToVideo.values())
|
|
81
|
+
video.artifact.reportFinished(new import_errors.TargetClosedError());
|
|
71
82
|
this._idToVideo.clear();
|
|
72
83
|
this._didClose();
|
|
73
84
|
}
|
|
@@ -76,12 +87,10 @@ class WKBrowser extends _browser.Browser {
|
|
|
76
87
|
const createOptions = proxy ? {
|
|
77
88
|
// Enable socks5 hostname resolution on Windows.
|
|
78
89
|
// See https://github.com/microsoft/playwright/issues/20451
|
|
79
|
-
proxyServer: process.platform ===
|
|
90
|
+
proxyServer: process.platform === "win32" ? proxy.server.replace(/^socks5:\/\//, "socks5h://") : proxy.server,
|
|
80
91
|
proxyBypassList: proxy.bypass
|
|
81
|
-
} :
|
|
82
|
-
const {
|
|
83
|
-
browserContextId
|
|
84
|
-
} = await this._browserSession.send('Playwright.createContext', createOptions);
|
|
92
|
+
} : void 0;
|
|
93
|
+
const { browserContextId } = await this._browserSession.send("Playwright.createContext", createOptions);
|
|
85
94
|
options.userAgent = options.userAgent || DEFAULT_USER_AGENT;
|
|
86
95
|
const context = new WKBrowserContext(this, browserContextId, options);
|
|
87
96
|
await context._initialize();
|
|
@@ -99,24 +108,17 @@ class WKBrowser extends _browser.Browser {
|
|
|
99
108
|
}
|
|
100
109
|
_onDownloadCreated(payload) {
|
|
101
110
|
const page = this._wkPages.get(payload.pageProxyId);
|
|
102
|
-
if (!page)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// here by simulating cancelled provisional load which matches downloads from network.
|
|
106
|
-
//
|
|
107
|
-
// TODO: this is racy, because download might be unrelated any navigation, and we will
|
|
108
|
-
// abort navigation that is still running. We should be able to fix this by
|
|
109
|
-
// instrumenting policy decision start/proceed/cancel.
|
|
110
|
-
page._page._frameManager.frameAbortedNavigation(payload.frameId, 'Download is starting');
|
|
111
|
+
if (!page)
|
|
112
|
+
return;
|
|
113
|
+
page._page._frameManager.frameAbortedNavigation(payload.frameId, "Download is starting");
|
|
111
114
|
let originPage = page._page.initializedOrUndefined();
|
|
112
|
-
// If it's a new window download, report it on the opener page.
|
|
113
115
|
if (!originPage) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (page._opener) originPage = page._opener._page.initializedOrUndefined();
|
|
116
|
+
page._firstNonInitialNavigationCommittedReject(new Error("Starting new page download"));
|
|
117
|
+
if (page._opener)
|
|
118
|
+
originPage = page._opener._page.initializedOrUndefined();
|
|
118
119
|
}
|
|
119
|
-
if (!originPage)
|
|
120
|
+
if (!originPage)
|
|
121
|
+
return;
|
|
120
122
|
this._downloadCreated(originPage, payload.uuid, payload.url);
|
|
121
123
|
}
|
|
122
124
|
_onDownloadFilenameSuggested(payload) {
|
|
@@ -126,204 +128,185 @@ class WKBrowser extends _browser.Browser {
|
|
|
126
128
|
this._downloadFinished(payload.uuid, payload.error);
|
|
127
129
|
}
|
|
128
130
|
_onScreencastFinished(payload) {
|
|
129
|
-
|
|
130
|
-
(_this$_takeVideo = this._takeVideo(payload.screencastId)) === null || _this$_takeVideo === void 0 || _this$_takeVideo.reportFinished();
|
|
131
|
+
this._takeVideo(payload.screencastId)?.reportFinished();
|
|
131
132
|
}
|
|
132
133
|
_onPageProxyCreated(event) {
|
|
133
134
|
const pageProxyId = event.pageProxyId;
|
|
134
135
|
let context = null;
|
|
135
136
|
if (event.browserContextId) {
|
|
136
|
-
// FIXME: we don't know about the default context id, so assume that all targets from
|
|
137
|
-
// unknown contexts are created in the 'default' context which can in practice be represented
|
|
138
|
-
// by multiple actual contexts in WebKit. Solving this properly will require adding context
|
|
139
|
-
// lifecycle events.
|
|
140
137
|
context = this._contexts.get(event.browserContextId) || null;
|
|
141
138
|
}
|
|
142
|
-
if (!context)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
});
|
|
139
|
+
if (!context)
|
|
140
|
+
context = this._defaultContext;
|
|
141
|
+
if (!context)
|
|
142
|
+
return;
|
|
143
|
+
const pageProxySession = new import_wkConnection.WKSession(this._connection, pageProxyId, (message) => {
|
|
144
|
+
this._connection.rawSend({ ...message, pageProxyId });
|
|
149
145
|
});
|
|
150
|
-
const opener = event.openerId ? this._wkPages.get(event.openerId) :
|
|
151
|
-
const wkPage = new
|
|
146
|
+
const opener = event.openerId ? this._wkPages.get(event.openerId) : void 0;
|
|
147
|
+
const wkPage = new import_wkPage.WKPage(context, pageProxySession, opener || null);
|
|
152
148
|
this._wkPages.set(pageProxyId, wkPage);
|
|
153
149
|
}
|
|
154
150
|
_onPageProxyDestroyed(event) {
|
|
155
151
|
const pageProxyId = event.pageProxyId;
|
|
156
152
|
const wkPage = this._wkPages.get(pageProxyId);
|
|
157
|
-
if (!wkPage)
|
|
153
|
+
if (!wkPage)
|
|
154
|
+
return;
|
|
158
155
|
wkPage.didClose();
|
|
159
156
|
this._wkPages.delete(pageProxyId);
|
|
160
157
|
}
|
|
161
158
|
_onPageProxyMessageReceived(event) {
|
|
162
159
|
const wkPage = this._wkPages.get(event.pageProxyId);
|
|
163
|
-
if (!wkPage)
|
|
160
|
+
if (!wkPage)
|
|
161
|
+
return;
|
|
164
162
|
wkPage.dispatchMessageToSession(event.message);
|
|
165
163
|
}
|
|
166
164
|
_onProvisionalLoadFailed(event) {
|
|
167
165
|
const wkPage = this._wkPages.get(event.pageProxyId);
|
|
168
|
-
if (!wkPage)
|
|
166
|
+
if (!wkPage)
|
|
167
|
+
return;
|
|
169
168
|
wkPage.handleProvisionalLoadFailed(event);
|
|
170
169
|
}
|
|
171
170
|
_onWindowOpen(event) {
|
|
172
171
|
const wkPage = this._wkPages.get(event.pageProxyId);
|
|
173
|
-
if (!wkPage)
|
|
172
|
+
if (!wkPage)
|
|
173
|
+
return;
|
|
174
174
|
wkPage.handleWindowOpen(event);
|
|
175
175
|
}
|
|
176
176
|
isConnected() {
|
|
177
177
|
return !this._connection.isClosed();
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
|
|
181
|
-
class WKBrowserContext extends _browserContext.BrowserContext {
|
|
180
|
+
class WKBrowserContext extends import_browserContext.BrowserContext {
|
|
182
181
|
constructor(browser, browserContextId, options) {
|
|
183
182
|
super(browser, options, browserContextId);
|
|
184
183
|
this._validateEmulatedViewport(options.viewport);
|
|
185
184
|
this._authenticateProxyViaHeader();
|
|
186
185
|
}
|
|
187
186
|
async _initialize() {
|
|
188
|
-
(0,
|
|
187
|
+
(0, import_utils.assert)(!this._wkPages().length);
|
|
189
188
|
const browserContextId = this._browserContextId;
|
|
190
189
|
const promises = [super._initialize()];
|
|
191
|
-
promises.push(this._browser._browserSession.send(
|
|
192
|
-
behavior: this._options.acceptDownloads ===
|
|
190
|
+
promises.push(this._browser._browserSession.send("Playwright.setDownloadBehavior", {
|
|
191
|
+
behavior: this._options.acceptDownloads === "accept" ? "allow" : "deny",
|
|
193
192
|
downloadPath: this._browser.options.downloadsPath,
|
|
194
193
|
browserContextId
|
|
195
194
|
}));
|
|
196
|
-
if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)
|
|
197
|
-
browserContextId,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (this._options.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (this._options.
|
|
205
|
-
|
|
206
|
-
if (this._options.httpCredentials) promises.push(this.setHTTPCredentials(this._options.httpCredentials));
|
|
195
|
+
if (this._options.ignoreHTTPSErrors || this._options.internalIgnoreHTTPSErrors)
|
|
196
|
+
promises.push(this._browser._browserSession.send("Playwright.setIgnoreCertificateErrors", { browserContextId, ignore: true }));
|
|
197
|
+
if (this._options.locale)
|
|
198
|
+
promises.push(this._browser._browserSession.send("Playwright.setLanguages", { browserContextId, languages: [this._options.locale] }));
|
|
199
|
+
if (this._options.geolocation)
|
|
200
|
+
promises.push(this.setGeolocation(this._options.geolocation));
|
|
201
|
+
if (this._options.offline)
|
|
202
|
+
promises.push(this.setOffline(this._options.offline));
|
|
203
|
+
if (this._options.httpCredentials)
|
|
204
|
+
promises.push(this.setHTTPCredentials(this._options.httpCredentials));
|
|
207
205
|
await Promise.all(promises);
|
|
208
206
|
}
|
|
209
207
|
_wkPages() {
|
|
210
|
-
return Array.from(this._browser._wkPages.values()).filter(wkPage => wkPage._browserContext === this);
|
|
208
|
+
return Array.from(this._browser._wkPages.values()).filter((wkPage) => wkPage._browserContext === this);
|
|
211
209
|
}
|
|
212
210
|
possiblyUninitializedPages() {
|
|
213
|
-
return this._wkPages().map(wkPage => wkPage._page);
|
|
211
|
+
return this._wkPages().map((wkPage) => wkPage._page);
|
|
214
212
|
}
|
|
215
213
|
async doCreateNewPage() {
|
|
216
|
-
(0,
|
|
217
|
-
const {
|
|
218
|
-
pageProxyId
|
|
219
|
-
} = await this._browser._browserSession.send('Playwright.createPage', {
|
|
220
|
-
browserContextId: this._browserContextId
|
|
221
|
-
});
|
|
214
|
+
(0, import_browserContext.assertBrowserContextIsNotOwned)(this);
|
|
215
|
+
const { pageProxyId } = await this._browser._browserSession.send("Playwright.createPage", { browserContextId: this._browserContextId });
|
|
222
216
|
return this._browser._wkPages.get(pageProxyId)._page;
|
|
223
217
|
}
|
|
224
218
|
async doGetCookies(urls) {
|
|
225
|
-
const {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
});
|
|
230
|
-
return network.filterCookies(cookies.map(c => {
|
|
231
|
-
const copy = {
|
|
232
|
-
...c
|
|
233
|
-
};
|
|
234
|
-
copy.expires = c.expires === -1 ? -1 : c.expires / 1000;
|
|
219
|
+
const { cookies } = await this._browser._browserSession.send("Playwright.getAllCookies", { browserContextId: this._browserContextId });
|
|
220
|
+
return network.filterCookies(cookies.map((c) => {
|
|
221
|
+
const copy = { ...c };
|
|
222
|
+
copy.expires = c.expires === -1 ? -1 : c.expires / 1e3;
|
|
235
223
|
delete copy.session;
|
|
236
224
|
return copy;
|
|
237
225
|
}), urls);
|
|
238
226
|
}
|
|
239
227
|
async addCookies(cookies) {
|
|
240
|
-
const cc = network.rewriteCookies(cookies).map(c => ({
|
|
228
|
+
const cc = network.rewriteCookies(cookies).map((c) => ({
|
|
241
229
|
...c,
|
|
242
|
-
session: c.expires === -1 || c.expires ===
|
|
243
|
-
expires: c.expires && c.expires !== -1 ? c.expires *
|
|
230
|
+
session: c.expires === -1 || c.expires === void 0,
|
|
231
|
+
expires: c.expires && c.expires !== -1 ? c.expires * 1e3 : c.expires
|
|
244
232
|
}));
|
|
245
|
-
await this._browser._browserSession.send(
|
|
246
|
-
cookies: cc,
|
|
247
|
-
browserContextId: this._browserContextId
|
|
248
|
-
});
|
|
233
|
+
await this._browser._browserSession.send("Playwright.setCookies", { cookies: cc, browserContextId: this._browserContextId });
|
|
249
234
|
}
|
|
250
235
|
async doClearCookies() {
|
|
251
|
-
await this._browser._browserSession.send(
|
|
252
|
-
browserContextId: this._browserContextId
|
|
253
|
-
});
|
|
236
|
+
await this._browser._browserSession.send("Playwright.deleteAllCookies", { browserContextId: this._browserContextId });
|
|
254
237
|
}
|
|
255
238
|
async doGrantPermissions(origin, permissions) {
|
|
256
|
-
await Promise.all(this.pages().map(page => page._delegate._grantPermissions(origin, permissions)));
|
|
239
|
+
await Promise.all(this.pages().map((page) => page._delegate._grantPermissions(origin, permissions)));
|
|
257
240
|
}
|
|
258
241
|
async doClearPermissions() {
|
|
259
|
-
await Promise.all(this.pages().map(page => page._delegate._clearPermissions()));
|
|
242
|
+
await Promise.all(this.pages().map((page) => page._delegate._clearPermissions()));
|
|
260
243
|
}
|
|
261
244
|
async setGeolocation(geolocation) {
|
|
262
|
-
(0,
|
|
245
|
+
(0, import_browserContext.verifyGeolocation)(geolocation);
|
|
263
246
|
this._options.geolocation = geolocation;
|
|
264
|
-
const payload = geolocation ? {
|
|
265
|
-
|
|
266
|
-
timestamp: Date.now()
|
|
267
|
-
} : undefined;
|
|
268
|
-
await this._browser._browserSession.send('Playwright.setGeolocationOverride', {
|
|
269
|
-
browserContextId: this._browserContextId,
|
|
270
|
-
geolocation: payload
|
|
271
|
-
});
|
|
247
|
+
const payload = geolocation ? { ...geolocation, timestamp: Date.now() } : void 0;
|
|
248
|
+
await this._browser._browserSession.send("Playwright.setGeolocationOverride", { browserContextId: this._browserContextId, geolocation: payload });
|
|
272
249
|
}
|
|
273
250
|
async setExtraHTTPHeaders(headers) {
|
|
274
251
|
this._options.extraHTTPHeaders = headers;
|
|
275
|
-
for (const page of this.pages())
|
|
252
|
+
for (const page of this.pages())
|
|
253
|
+
await page._delegate.updateExtraHTTPHeaders();
|
|
276
254
|
}
|
|
277
255
|
async setUserAgent(userAgent) {
|
|
278
256
|
this._options.userAgent = userAgent;
|
|
279
|
-
for (const page of this.pages())
|
|
257
|
+
for (const page of this.pages())
|
|
258
|
+
await page._delegate.updateUserAgent();
|
|
280
259
|
}
|
|
281
260
|
async setOffline(offline) {
|
|
282
261
|
this._options.offline = offline;
|
|
283
|
-
for (const page of this.pages())
|
|
262
|
+
for (const page of this.pages())
|
|
263
|
+
await page._delegate.updateOffline();
|
|
284
264
|
}
|
|
285
265
|
async doSetHTTPCredentials(httpCredentials) {
|
|
286
266
|
this._options.httpCredentials = httpCredentials;
|
|
287
|
-
for (const page of this.pages())
|
|
267
|
+
for (const page of this.pages())
|
|
268
|
+
await page._delegate.updateHttpCredentials();
|
|
288
269
|
}
|
|
289
270
|
async doAddInitScript(initScript) {
|
|
290
|
-
for (const page of this.pages())
|
|
271
|
+
for (const page of this.pages())
|
|
272
|
+
await page._delegate._updateBootstrapScript();
|
|
291
273
|
}
|
|
292
274
|
async doRemoveNonInternalInitScripts() {
|
|
293
|
-
for (const page of this.pages())
|
|
275
|
+
for (const page of this.pages())
|
|
276
|
+
await page._delegate._updateBootstrapScript();
|
|
294
277
|
}
|
|
295
278
|
async doUpdateRequestInterception() {
|
|
296
|
-
for (const page of this.pages())
|
|
279
|
+
for (const page of this.pages())
|
|
280
|
+
await page._delegate.updateRequestInterception();
|
|
281
|
+
}
|
|
282
|
+
onClosePersistent() {
|
|
297
283
|
}
|
|
298
|
-
onClosePersistent() {}
|
|
299
284
|
async clearCache() {
|
|
300
|
-
|
|
301
|
-
await this._browser._browserSession.send('Playwright.clearMemoryCache', {
|
|
285
|
+
await this._browser._browserSession.send("Playwright.clearMemoryCache", {
|
|
302
286
|
browserContextId: this._browserContextId
|
|
303
287
|
});
|
|
304
288
|
}
|
|
305
289
|
async doClose(reason) {
|
|
306
290
|
if (!this._browserContextId) {
|
|
307
|
-
await Promise.all(this._wkPages().map(wkPage => wkPage._stopVideo()));
|
|
308
|
-
|
|
309
|
-
await this._browser.close({
|
|
310
|
-
reason
|
|
311
|
-
});
|
|
291
|
+
await Promise.all(this._wkPages().map((wkPage) => wkPage._stopVideo()));
|
|
292
|
+
await this._browser.close({ reason });
|
|
312
293
|
} else {
|
|
313
|
-
await this._browser._browserSession.send(
|
|
314
|
-
browserContextId: this._browserContextId
|
|
315
|
-
});
|
|
294
|
+
await this._browser._browserSession.send("Playwright.deleteContext", { browserContextId: this._browserContextId });
|
|
316
295
|
this._browser._contexts.delete(this._browserContextId);
|
|
317
296
|
}
|
|
318
297
|
}
|
|
319
298
|
async cancelDownload(uuid) {
|
|
320
|
-
await this._browser._browserSession.send(
|
|
321
|
-
uuid
|
|
322
|
-
});
|
|
299
|
+
await this._browser._browserSession.send("Playwright.cancelDownload", { uuid });
|
|
323
300
|
}
|
|
324
301
|
_validateEmulatedViewport(viewportSize) {
|
|
325
|
-
if (!viewportSize)
|
|
326
|
-
|
|
302
|
+
if (!viewportSize)
|
|
303
|
+
return;
|
|
304
|
+
if (process.platform === "win32" && this._browser.options.headful && (viewportSize.width < 250 || viewportSize.height < 240))
|
|
305
|
+
throw new Error(`WebKit on Windows has a minimal viewport of 250x240.`);
|
|
327
306
|
}
|
|
328
307
|
}
|
|
329
|
-
|
|
308
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
309
|
+
0 && (module.exports = {
|
|
310
|
+
WKBrowser,
|
|
311
|
+
WKBrowserContext
|
|
312
|
+
});
|