patchright-core 1.58.2 → 1.59.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 +126 -650
- package/browsers.json +16 -14
- package/lib/bootstrap.js +77 -0
- package/lib/cli/browserActions.js +308 -0
- package/lib/cli/driver.js +3 -2
- package/lib/cli/installActions.js +171 -0
- package/lib/cli/program.js +47 -411
- package/lib/client/android.js +4 -4
- package/lib/client/api.js +3 -3
- package/lib/client/browser.js +8 -0
- package/lib/client/browserContext.js +22 -61
- package/lib/client/browserType.js +19 -51
- package/lib/client/cdpSession.js +6 -2
- package/lib/client/channelOwner.js +1 -1
- package/lib/client/clientHelper.js +2 -1
- package/lib/client/clock.js +0 -1
- package/lib/client/{webSocket.js → connect.js} +57 -7
- package/lib/client/connection.js +8 -4
- package/lib/client/consoleMessage.js +3 -0
- package/lib/client/debugger.js +57 -0
- package/lib/client/dialog.js +8 -1
- package/lib/client/disposable.js +76 -0
- package/lib/client/electron.js +1 -0
- package/lib/client/elementHandle.js +1 -4
- package/lib/client/events.js +3 -3
- package/lib/client/fetch.js +0 -1
- package/lib/client/frame.js +10 -23
- package/lib/client/harRouter.js +13 -1
- package/lib/client/jsHandle.js +4 -8
- package/lib/client/locator.js +13 -44
- package/lib/client/network.js +15 -16
- package/lib/client/page.js +41 -75
- package/lib/client/platform.js +0 -3
- package/lib/client/screencast.js +88 -0
- package/lib/client/selectors.js +3 -1
- package/lib/client/tracing.js +11 -5
- package/lib/client/video.js +13 -20
- package/lib/client/worker.js +6 -6
- package/lib/generated/bindingsControllerSource.js +1 -1
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/mcpBundle.js +0 -6
- package/lib/mcpBundleImpl.js +91 -0
- package/lib/protocol/validator.js +224 -138
- package/lib/protocol/validatorPrimitives.js +1 -1
- package/lib/remote/playwrightConnection.js +10 -8
- package/lib/remote/playwrightPipeServer.js +100 -0
- package/lib/remote/playwrightServer.js +13 -8
- package/lib/remote/playwrightWebSocketServer.js +73 -0
- package/lib/remote/serverTransport.js +96 -0
- package/lib/server/android/android.js +2 -2
- package/lib/server/bidi/bidiBrowser.js +30 -8
- package/lib/server/bidi/bidiChromium.js +18 -5
- package/lib/server/bidi/bidiNetworkManager.js +39 -11
- package/lib/server/bidi/bidiPage.js +31 -15
- package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
- package/lib/server/browser.js +84 -21
- package/lib/server/browserContext.js +110 -58
- package/lib/server/browserType.js +14 -12
- package/lib/server/chromium/chromium.js +15 -12
- package/lib/server/chromium/chromiumSwitches.js +14 -2
- package/lib/server/chromium/crBrowser.js +20 -17
- package/lib/server/chromium/crCoverage.js +1 -13
- package/lib/server/chromium/crDevTools.js +1 -0
- package/lib/server/chromium/crNetworkManager.js +12 -267
- package/lib/server/chromium/crPage.js +67 -199
- package/lib/server/chromium/crServiceWorker.js +7 -14
- package/lib/server/clock.js +33 -41
- package/lib/server/console.js +5 -1
- package/lib/server/debugController.js +12 -6
- package/lib/server/debugger.js +40 -47
- package/lib/server/deviceDescriptorsSource.json +137 -137
- package/lib/server/dispatchers/browserContextDispatcher.js +29 -30
- package/lib/server/dispatchers/browserDispatcher.js +11 -5
- package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
- package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
- package/lib/server/dispatchers/dispatcher.js +1 -1
- package/lib/server/dispatchers/disposableDispatcher.js +39 -0
- package/lib/server/dispatchers/electronDispatcher.js +2 -1
- package/lib/server/dispatchers/frameDispatcher.js +6 -6
- package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
- package/lib/server/dispatchers/networkDispatchers.js +6 -5
- package/lib/server/dispatchers/pageDispatcher.js +101 -38
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
- package/lib/server/disposable.js +41 -0
- package/lib/server/dom.js +44 -26
- package/lib/server/download.js +3 -2
- package/lib/server/electron/electron.js +12 -7
- package/lib/server/firefox/ffBrowser.js +9 -19
- package/lib/server/firefox/ffInput.js +21 -5
- package/lib/server/firefox/ffNetworkManager.js +2 -2
- package/lib/server/firefox/ffPage.js +24 -27
- package/lib/server/frameSelectors.js +5 -172
- package/lib/server/frames.js +234 -687
- package/lib/server/har/harRecorder.js +2 -2
- package/lib/server/har/harTracer.js +5 -4
- package/lib/server/input.js +49 -4
- package/lib/server/instrumentation.js +5 -0
- package/lib/server/javascript.js +6 -26
- package/lib/server/launchApp.js +1 -3
- package/lib/server/localUtils.js +6 -6
- package/lib/server/network.js +9 -8
- package/lib/server/overlay.js +138 -0
- package/lib/server/page.js +157 -105
- package/lib/server/progress.js +6 -0
- package/lib/server/recorder/recorderApp.js +9 -8
- package/lib/server/recorder.js +76 -40
- package/lib/server/registry/index.js +55 -82
- package/lib/server/registry/nativeDeps.js +1 -0
- package/lib/server/screencast.js +90 -143
- package/lib/server/screenshotter.js +0 -6
- package/lib/server/trace/recorder/snapshotter.js +8 -17
- package/lib/server/trace/recorder/snapshotterInjected.js +82 -20
- package/lib/server/trace/recorder/tracing.js +87 -44
- package/lib/server/trace/viewer/traceViewer.js +3 -4
- package/lib/server/usKeyboardLayout.js +7 -0
- package/lib/server/utils/comparators.js +1 -1
- package/lib/server/utils/disposable.js +32 -0
- package/lib/server/utils/eventsHelper.js +3 -1
- package/lib/server/utils/fileUtils.js +16 -2
- package/lib/server/utils/happyEyeballs.js +15 -12
- package/lib/server/utils/hostPlatform.js +0 -15
- package/lib/server/utils/httpServer.js +5 -3
- package/lib/server/utils/network.js +2 -1
- package/lib/server/utils/nodePlatform.js +0 -6
- package/lib/server/utils/processLauncher.js +8 -6
- package/lib/server/utils/zipFile.js +2 -2
- package/lib/server/videoRecorder.js +82 -12
- package/lib/server/webkit/wkBrowser.js +1 -6
- package/lib/server/webkit/wkPage.js +27 -25
- package/lib/server/webkit/wkWorkers.js +2 -1
- package/lib/serverRegistry.js +156 -0
- package/lib/tools/backend/browserBackend.js +79 -0
- package/lib/tools/backend/common.js +63 -0
- package/lib/tools/backend/config.js +41 -0
- package/lib/tools/backend/console.js +66 -0
- package/lib/tools/backend/context.js +296 -0
- package/lib/tools/backend/cookies.js +152 -0
- package/lib/tools/backend/devtools.js +69 -0
- package/lib/tools/backend/dialogs.js +59 -0
- package/lib/tools/backend/evaluate.js +64 -0
- package/lib/tools/backend/files.js +60 -0
- package/lib/tools/backend/form.js +64 -0
- package/lib/tools/backend/keyboard.js +155 -0
- package/lib/tools/backend/logFile.js +95 -0
- package/lib/tools/backend/mouse.js +168 -0
- package/lib/tools/backend/navigate.js +106 -0
- package/lib/tools/backend/network.js +135 -0
- package/lib/tools/backend/pdf.js +48 -0
- package/lib/tools/backend/response.js +305 -0
- package/lib/tools/backend/route.js +140 -0
- package/lib/tools/backend/runCode.js +77 -0
- package/lib/tools/backend/screenshot.js +88 -0
- package/lib/tools/backend/sessionLog.js +74 -0
- package/lib/tools/backend/snapshot.js +208 -0
- package/lib/tools/backend/storage.js +68 -0
- package/lib/tools/backend/tab.js +445 -0
- package/lib/tools/backend/tabs.js +67 -0
- package/lib/tools/backend/tool.js +47 -0
- package/lib/tools/backend/tools.js +102 -0
- package/lib/tools/backend/tracing.js +78 -0
- package/lib/tools/backend/utils.js +83 -0
- package/lib/tools/backend/verify.js +151 -0
- package/lib/tools/backend/video.js +98 -0
- package/lib/tools/backend/wait.js +63 -0
- package/lib/tools/backend/webstorage.js +223 -0
- package/lib/tools/cli-client/cli.js +6 -0
- package/lib/tools/cli-client/help.json +399 -0
- package/lib/tools/cli-client/minimist.js +128 -0
- package/lib/tools/cli-client/program.js +350 -0
- package/lib/tools/cli-client/registry.js +176 -0
- package/lib/tools/cli-client/session.js +289 -0
- package/lib/tools/cli-client/skill/SKILL.md +328 -0
- package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
- package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
- package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
- package/lib/tools/cli-client/skill/references/running-code.md +231 -0
- package/lib/tools/cli-client/skill/references/session-management.md +169 -0
- package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
- package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
- package/lib/tools/cli-client/skill/references/tracing.md +139 -0
- package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
- package/lib/tools/cli-daemon/command.js +73 -0
- package/lib/tools/cli-daemon/commands.js +956 -0
- package/lib/tools/cli-daemon/daemon.js +157 -0
- package/lib/tools/cli-daemon/helpGenerator.js +177 -0
- package/lib/tools/cli-daemon/program.js +129 -0
- package/lib/tools/dashboard/appIcon.png +0 -0
- package/lib/tools/dashboard/dashboardApp.js +284 -0
- package/lib/tools/dashboard/dashboardController.js +296 -0
- package/lib/tools/exports.js +60 -0
- package/lib/tools/mcp/browserFactory.js +233 -0
- package/lib/tools/mcp/cdpRelay.js +352 -0
- package/lib/tools/mcp/cli-stub.js +7 -0
- package/lib/tools/mcp/config.d.js +16 -0
- package/lib/tools/mcp/config.js +446 -0
- package/lib/tools/mcp/configIni.js +189 -0
- package/lib/tools/mcp/extensionContextFactory.js +55 -0
- package/lib/tools/mcp/index.js +62 -0
- package/lib/tools/mcp/log.js +35 -0
- package/lib/tools/mcp/program.js +107 -0
- package/lib/tools/mcp/protocol.js +28 -0
- package/lib/tools/mcp/watchdog.js +44 -0
- package/lib/tools/trace/SKILL.md +171 -0
- package/lib/{server/trace/viewer/traceParser.js → tools/trace/installSkill.js} +15 -39
- package/lib/tools/trace/traceActions.js +142 -0
- package/lib/tools/trace/traceAttachments.js +69 -0
- package/lib/tools/trace/traceCli.js +87 -0
- package/lib/tools/trace/traceConsole.js +97 -0
- package/lib/tools/trace/traceErrors.js +55 -0
- package/lib/tools/trace/traceOpen.js +69 -0
- package/lib/tools/trace/traceParser.js +96 -0
- package/lib/tools/trace/traceRequests.js +182 -0
- package/lib/tools/trace/traceScreenshot.js +68 -0
- package/lib/tools/trace/traceSnapshot.js +149 -0
- package/lib/tools/trace/traceUtils.js +153 -0
- package/lib/tools/utils/connect.js +32 -0
- package/lib/tools/utils/mcp/http.js +152 -0
- package/lib/tools/utils/mcp/server.js +230 -0
- package/lib/tools/utils/mcp/tool.js +47 -0
- package/lib/tools/utils/socketConnection.js +108 -0
- package/lib/utils/isomorphic/formatUtils.js +64 -0
- package/lib/utils/isomorphic/jsonSchema.js +89 -0
- package/lib/utils/isomorphic/mimeType.js +7 -2
- package/lib/utils/isomorphic/protocolFormatter.js +2 -2
- package/lib/utils/isomorphic/protocolMetainfo.js +127 -106
- package/lib/utils/isomorphic/stringUtils.js +3 -3
- package/lib/utils/isomorphic/timeoutRunner.js +3 -3
- package/lib/utils/isomorphic/trace/snapshotRenderer.js +35 -42
- package/lib/utils/isomorphic/trace/traceLoader.js +15 -14
- package/lib/utils/isomorphic/trace/traceModel.js +3 -2
- package/lib/utils/isomorphic/trace/traceModernizer.js +1 -0
- package/lib/utils/isomorphic/urlMatch.js +54 -1
- package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
- package/lib/utils.js +6 -2
- package/lib/utilsBundle.js +3 -21
- package/lib/utilsBundleImpl/index.js +132 -133
- package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
- package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
- package/lib/vite/dashboard/index.html +28 -0
- package/lib/vite/htmlReport/index.html +2 -70
- package/lib/vite/htmlReport/report.css +1 -0
- package/lib/vite/htmlReport/report.js +72 -0
- package/lib/vite/recorder/assets/{codeMirrorModule-CFUTFUO7.js → codeMirrorModule-C8KMvO9L.js} +20 -20
- package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-BVA4h_ZY.js → codeMirrorModule-DS0FLvoc.js} +20 -20
- package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
- package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
- package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
- package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.Dtstcb7U.js} +1 -1
- package/lib/vite/traceViewer/index.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +4 -4
- package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundleImpl.js +2 -2
- package/lib/zodBundle.js +39 -0
- package/lib/zodBundleImpl.js +40 -0
- package/package.json +6 -1
- package/types/protocol.d.ts +947 -51
- package/types/types.d.ts +854 -74
- package/lib/client/pageAgent.js +0 -64
- package/lib/mcpBundleImpl/index.js +0 -147
- package/lib/server/agent/actionRunner.js +0 -335
- package/lib/server/agent/actions.js +0 -128
- package/lib/server/agent/codegen.js +0 -111
- package/lib/server/agent/context.js +0 -150
- package/lib/server/agent/expectTools.js +0 -156
- package/lib/server/agent/pageAgent.js +0 -204
- package/lib/server/agent/performTools.js +0 -262
- package/lib/server/agent/tool.js +0 -109
- package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
- package/lib/server/pageBinding.js +0 -87
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
- package/lib/vite/recorder/assets/index-CVkBxsGf.js +0 -193
- package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +0 -266
- package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
- package/lib/vite/traceViewer/uiMode.fyrXARf2.js +0 -5
- /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
- /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
|
@@ -31,7 +31,6 @@ __export(crPage_exports, {
|
|
|
31
31
|
CRPage: () => CRPage
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(crPage_exports);
|
|
34
|
-
var import_crypto = __toESM(require("crypto"));
|
|
35
34
|
var import_assert = require("../../utils/isomorphic/assert");
|
|
36
35
|
var import_eventsHelper = require("../utils/eventsHelper");
|
|
37
36
|
var import_stackTrace = require("../../utils/isomorphic/stackTrace");
|
|
@@ -41,6 +40,7 @@ var frames = __toESM(require("../frames"));
|
|
|
41
40
|
var import_helper = require("../helper");
|
|
42
41
|
var network = __toESM(require("../network"));
|
|
43
42
|
var import_page = require("../page");
|
|
43
|
+
var import_browserContext = require("../browserContext");
|
|
44
44
|
var import_crCoverage = require("./crCoverage");
|
|
45
45
|
var import_crDragDrop = require("./crDragDrop");
|
|
46
46
|
var import_crExecutionContext = require("./crExecutionContext");
|
|
@@ -51,6 +51,7 @@ var import_crProtocolHelper = require("./crProtocolHelper");
|
|
|
51
51
|
var import_defaultFontFamilies = require("./defaultFontFamilies");
|
|
52
52
|
var import_errors = require("../errors");
|
|
53
53
|
var import_protocolError = require("../protocolError");
|
|
54
|
+
var import_videoRecorder = require("../videoRecorder");
|
|
54
55
|
class CRPage {
|
|
55
56
|
constructor(client, targetId, browserContext, opener, bits) {
|
|
56
57
|
this._sessions = /* @__PURE__ */ new Map();
|
|
@@ -75,8 +76,7 @@ class CRPage {
|
|
|
75
76
|
this.updateOffline();
|
|
76
77
|
this.updateExtraHTTPHeaders();
|
|
77
78
|
this.updateHttpCredentials();
|
|
78
|
-
this.
|
|
79
|
-
this.initScriptTag = import_crypto.default.randomBytes(20).toString("hex");
|
|
79
|
+
this.updateRequestInterception();
|
|
80
80
|
this._mainFrameSession = new FrameSession(this, client, targetId, null);
|
|
81
81
|
this._sessions.set(targetId, this._mainFrameSession);
|
|
82
82
|
if (opener && !browserContext._options.noDefaultViewport) {
|
|
@@ -110,7 +110,7 @@ class CRPage {
|
|
|
110
110
|
while (!this._sessions.has(frame._id)) {
|
|
111
111
|
const parent = frame.parentFrame();
|
|
112
112
|
if (!parent)
|
|
113
|
-
throw new Error(`Frame
|
|
113
|
+
throw new Error(`Frame has been detached.`);
|
|
114
114
|
frame = parent;
|
|
115
115
|
}
|
|
116
116
|
return this._sessions.get(frame._id);
|
|
@@ -185,7 +185,6 @@ class CRPage {
|
|
|
185
185
|
await this._mainFrameSession._client.send("HeapProfiler.collectGarbage");
|
|
186
186
|
}
|
|
187
187
|
async addInitScript(initScript, world = "main") {
|
|
188
|
-
this._page.initScripts.push(initScript);
|
|
189
188
|
await this._forAllFrameSessions((frame) => frame._evaluateOnNewDocument(initScript, world));
|
|
190
189
|
}
|
|
191
190
|
async exposePlaywrightBinding() {
|
|
@@ -204,7 +203,7 @@ class CRPage {
|
|
|
204
203
|
await this._mainFrameSession._client.send("Emulation.setDefaultBackgroundColorOverride", { color });
|
|
205
204
|
}
|
|
206
205
|
async takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, scale) {
|
|
207
|
-
const { visualViewport } = await progress.race(this._mainFrameSession._client.send("Page.getLayoutMetrics"));
|
|
206
|
+
const { visualViewport, contentSize, cssContentSize } = await progress.race(this._mainFrameSession._client.send("Page.getLayoutMetrics"));
|
|
208
207
|
if (!documentRect) {
|
|
209
208
|
documentRect = {
|
|
210
209
|
x: visualViewport.pageX + viewportRect.x,
|
|
@@ -217,7 +216,7 @@ class CRPage {
|
|
|
217
216
|
}
|
|
218
217
|
const clip = { ...documentRect, scale: viewportRect ? visualViewport.scale : 1 };
|
|
219
218
|
if (scale === "css") {
|
|
220
|
-
const deviceScaleFactor = this.
|
|
219
|
+
const deviceScaleFactor = this._mainFrameSession._metricsOverride?.deviceScaleFactor || contentSize.width / cssContentSize.width || 1;
|
|
221
220
|
clip.scale /= deviceScaleFactor;
|
|
222
221
|
}
|
|
223
222
|
const result = await progress.race(this._mainFrameSession._client.send("Page.captureScreenshot", { format, quality, clip, captureBeyondViewport: !fitsViewport }));
|
|
@@ -235,16 +234,18 @@ class CRPage {
|
|
|
235
234
|
async scrollRectIntoViewIfNeeded(handle, rect) {
|
|
236
235
|
return this._sessionForHandle(handle)._scrollRectIntoViewIfNeeded(handle, rect);
|
|
237
236
|
}
|
|
238
|
-
|
|
239
|
-
|
|
237
|
+
startScreencast(options) {
|
|
238
|
+
this._mainFrameSession._client.send("Page.startScreencast", {
|
|
240
239
|
format: "jpeg",
|
|
241
240
|
quality: options.quality,
|
|
242
241
|
maxWidth: options.width,
|
|
243
242
|
maxHeight: options.height
|
|
243
|
+
}).catch(() => {
|
|
244
244
|
});
|
|
245
245
|
}
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
stopScreencast() {
|
|
247
|
+
this._mainFrameSession._client._sendMayFail("Page.stopScreencast").catch(() => {
|
|
248
|
+
});
|
|
248
249
|
}
|
|
249
250
|
rafCountForStablePosition() {
|
|
250
251
|
return 1;
|
|
@@ -296,13 +297,8 @@ class CRPage {
|
|
|
296
297
|
shouldToggleStyleSheetToSyncAnimations() {
|
|
297
298
|
return false;
|
|
298
299
|
}
|
|
299
|
-
async
|
|
300
|
-
await this.
|
|
301
|
-
await Promise.all(this._page.frames().map((frame) => frame.evaluateExpression(binding.source).catch((e) => {
|
|
302
|
-
})));
|
|
303
|
-
}
|
|
304
|
-
async removeExposedBindings() {
|
|
305
|
-
await this._forAllFrameSessions((frame) => frame._removeExposedBindings());
|
|
300
|
+
async setDockTile(image) {
|
|
301
|
+
await this._mainFrameSession._client.send("Browser.setDockTile", { image: image.toString("base64") });
|
|
306
302
|
}
|
|
307
303
|
}
|
|
308
304
|
class FrameSession {
|
|
@@ -319,10 +315,6 @@ class FrameSession {
|
|
|
319
315
|
this._swappedIn = false;
|
|
320
316
|
this._workerSessions = /* @__PURE__ */ new Map();
|
|
321
317
|
this._initScriptIds = /* @__PURE__ */ new Map();
|
|
322
|
-
this._exposedBindingNames = [];
|
|
323
|
-
this._evaluateOnNewDocumentScripts = [];
|
|
324
|
-
this._parsedExecutionContextIds = [];
|
|
325
|
-
this._exposedBindingScripts = [];
|
|
326
318
|
this._client = client;
|
|
327
319
|
this._crPage = crPage;
|
|
328
320
|
this._page = crPage._page;
|
|
@@ -368,37 +360,36 @@ class FrameSession {
|
|
|
368
360
|
]);
|
|
369
361
|
}
|
|
370
362
|
async _initialize(hasUIWindow) {
|
|
371
|
-
const pageEnablePromise = this._client.send("Page.enable");
|
|
372
363
|
if (!this._page.isStorageStatePage && hasUIWindow && !this._crPage._browserContext._browser.isClank() && !this._crPage._browserContext._options.noDefaultViewport) {
|
|
373
364
|
const { windowId } = await this._client.send("Browser.getWindowForTarget");
|
|
374
365
|
this._windowId = windowId;
|
|
375
366
|
}
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
videoOptions = this._crPage._page.screencast.launchVideoRecorder();
|
|
367
|
+
if (this._isMainFrame() && hasUIWindow && !this._page.isStorageStatePage)
|
|
368
|
+
(0, import_videoRecorder.startAutomaticVideoRecording)(this._crPage._page);
|
|
379
369
|
let lifecycleEventsEnabled;
|
|
380
370
|
if (!this._isMainFrame())
|
|
381
371
|
this._addRendererListeners();
|
|
382
|
-
let bufferedDialogEvents = this._isMainFrame() ? [] : void 0;
|
|
383
|
-
if (bufferedDialogEvents)
|
|
384
|
-
this._eventListeners.push(import_eventsHelper.eventsHelper.addEventListener(this._client, "Page.javascriptDialogOpening", (event) => bufferedDialogEvents ? bufferedDialogEvents.push(event) : void 0));
|
|
385
372
|
this._addBrowserListeners();
|
|
386
373
|
this._bufferedAttachedToTargetEvents = [];
|
|
387
374
|
const promises = [
|
|
388
|
-
|
|
375
|
+
this._client.send("Page.enable"),
|
|
389
376
|
this._client.send("Page.getFrameTree").then(({ frameTree }) => {
|
|
390
377
|
if (this._isMainFrame()) {
|
|
391
378
|
this._handleFrameTree(frameTree);
|
|
392
379
|
this._addRendererListeners();
|
|
393
|
-
const pendingDialogEvents = bufferedDialogEvents || [];
|
|
394
|
-
bufferedDialogEvents = void 0;
|
|
395
|
-
for (const event of pendingDialogEvents)
|
|
396
|
-
this._onDialog(event);
|
|
397
380
|
}
|
|
398
381
|
const attachedToTargetEvents = this._bufferedAttachedToTargetEvents || [];
|
|
399
382
|
this._bufferedAttachedToTargetEvents = void 0;
|
|
400
383
|
for (const event of attachedToTargetEvents)
|
|
401
384
|
this._onAttachedToTarget(event);
|
|
385
|
+
const localFrames = this._isMainFrame() ? this._page.frames() : [this._page.frameManager.frame(this._targetId)];
|
|
386
|
+
for (const frame of localFrames) {
|
|
387
|
+
this._client._sendMayFail("Page.createIsolatedWorld", {
|
|
388
|
+
frameId: frame._id,
|
|
389
|
+
grantUniveralAccess: true,
|
|
390
|
+
worldName: this._crPage.utilityWorldName
|
|
391
|
+
});
|
|
392
|
+
}
|
|
402
393
|
const isInitialEmptyPage = this._isMainFrame() && this._page.mainFrame().url() === ":";
|
|
403
394
|
if (isInitialEmptyPage) {
|
|
404
395
|
lifecycleEventsEnabled.catch((e) => {
|
|
@@ -406,26 +397,13 @@ class FrameSession {
|
|
|
406
397
|
this._eventListeners.push(import_eventsHelper.eventsHelper.addEventListener(this._client, "Page.lifecycleEvent", (event) => this._onLifecycleEvent(event)));
|
|
407
398
|
});
|
|
408
399
|
} else {
|
|
409
|
-
const localFrames = this._isMainFrame() ? this._page.frames() : [this._page.frameManager.frame(this._targetId)];
|
|
410
|
-
for (const frame of localFrames) {
|
|
411
|
-
this._page.frameManager.frame(frame._id)._context("utility").catch(() => {
|
|
412
|
-
});
|
|
413
|
-
for (const binding of this._crPage._browserContext._pageBindings.values())
|
|
414
|
-
frame.evaluateExpression(binding.source).catch((e) => {
|
|
415
|
-
});
|
|
416
|
-
for (const source of this._crPage._browserContext.initScripts)
|
|
417
|
-
frame.evaluateExpression(source.source).catch((e) => {
|
|
418
|
-
});
|
|
419
|
-
for (const source of this._crPage._page.initScripts)
|
|
420
|
-
frame.evaluateExpression(source.source).catch((e) => {
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
400
|
this._firstNonInitialNavigationCommittedFulfill();
|
|
424
401
|
this._eventListeners.push(import_eventsHelper.eventsHelper.addEventListener(this._client, "Page.lifecycleEvent", (event) => this._onLifecycleEvent(event)));
|
|
425
402
|
}
|
|
426
403
|
}),
|
|
427
404
|
this._client.send("Log.enable", {}),
|
|
428
405
|
lifecycleEventsEnabled = this._client.send("Page.setLifecycleEventsEnabled", { enabled: true }),
|
|
406
|
+
this._client.send("Runtime.enable", {}),
|
|
429
407
|
this._client.send("Page.addScriptToEvaluateOnNewDocument", {
|
|
430
408
|
source: "",
|
|
431
409
|
worldName: this._crPage.utilityWorldName
|
|
@@ -436,7 +414,7 @@ class FrameSession {
|
|
|
436
414
|
if (!this._page.isStorageStatePage) {
|
|
437
415
|
if (this._crPage._browserContext.needsPlaywrightBinding())
|
|
438
416
|
promises.push(this.exposePlaywrightBinding());
|
|
439
|
-
if (this._isMainFrame()
|
|
417
|
+
if (this._isMainFrame())
|
|
440
418
|
promises.push(this._client.send("Emulation.setFocusEmulationEnabled", { enabled: true }));
|
|
441
419
|
const options = this._crPage._browserContext._options;
|
|
442
420
|
if (options.bypassCSP)
|
|
@@ -460,11 +438,13 @@ class FrameSession {
|
|
|
460
438
|
promises.push(this._updateGeolocation(true));
|
|
461
439
|
promises.push(this._updateEmulateMedia());
|
|
462
440
|
promises.push(this._updateFileChooserInterception(true));
|
|
463
|
-
for (const
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
441
|
+
for (const initScript of this._crPage._page.allInitScripts())
|
|
442
|
+
promises.push(this._evaluateOnNewDocument(
|
|
443
|
+
initScript,
|
|
444
|
+
"main",
|
|
445
|
+
true
|
|
446
|
+
/* runImmediately */
|
|
447
|
+
));
|
|
468
448
|
}
|
|
469
449
|
promises.push(this._client.send("Runtime.runIfWaitingForDebugger"));
|
|
470
450
|
promises.push(this._firstNonInitialNavigationCommittedPromise);
|
|
@@ -489,32 +469,13 @@ class FrameSession {
|
|
|
489
469
|
throw new frames.NavigationAbortedError(response.loaderId, `${response.errorText} at ${url}`);
|
|
490
470
|
return { newDocumentId: response.loaderId };
|
|
491
471
|
}
|
|
492
|
-
|
|
472
|
+
_onLifecycleEvent(event) {
|
|
493
473
|
if (this._eventBelongsToStaleFrame(event.frameId))
|
|
494
474
|
return;
|
|
495
475
|
if (event.name === "load")
|
|
496
476
|
this._page.frameManager.frameLifecycleEvent(event.frameId, "load");
|
|
497
477
|
else if (event.name === "DOMContentLoaded")
|
|
498
478
|
this._page.frameManager.frameLifecycleEvent(event.frameId, "domcontentloaded");
|
|
499
|
-
if (event.name !== "load") {
|
|
500
|
-
await this._client._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
await this._client._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
504
|
-
var document = await this._client._sendMayFail("DOM.getDocument");
|
|
505
|
-
if (!document) return;
|
|
506
|
-
var query = await this._client._sendMayFail("DOM.querySelectorAll", {
|
|
507
|
-
nodeId: document.root.nodeId,
|
|
508
|
-
selector: "[class=" + this._crPage.initScriptTag + "]"
|
|
509
|
-
});
|
|
510
|
-
if (!query) return;
|
|
511
|
-
for (const nodeId of query.nodeIds) await this._client._sendMayFail("DOM.removeNode", { nodeId });
|
|
512
|
-
await this._client._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
513
|
-
try {
|
|
514
|
-
await this._page.frameManager.frame(this._targetId)._context("utility");
|
|
515
|
-
} catch {
|
|
516
|
-
}
|
|
517
|
-
;
|
|
518
479
|
}
|
|
519
480
|
_handleFrameTree(frameTree) {
|
|
520
481
|
this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId || null);
|
|
@@ -545,35 +506,12 @@ class FrameSession {
|
|
|
545
506
|
}
|
|
546
507
|
this._page.frameManager.frameAttached(frameId, parentFrameId);
|
|
547
508
|
}
|
|
548
|
-
|
|
509
|
+
_onFrameNavigated(framePayload, initial) {
|
|
549
510
|
if (this._eventBelongsToStaleFrame(framePayload.id))
|
|
550
511
|
return;
|
|
551
512
|
this._page.frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url + (framePayload.urlFragment || ""), framePayload.name || "", framePayload.loaderId, initial);
|
|
552
513
|
if (!initial)
|
|
553
514
|
this._firstNonInitialNavigationCommittedFulfill();
|
|
554
|
-
await this._client._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
555
|
-
if (!initial) {
|
|
556
|
-
try {
|
|
557
|
-
await this._page.frameManager.frame(this._targetId)._context("utility");
|
|
558
|
-
} catch {
|
|
559
|
-
}
|
|
560
|
-
;
|
|
561
|
-
return;
|
|
562
|
-
}
|
|
563
|
-
var document = await this._client._sendMayFail("DOM.getDocument");
|
|
564
|
-
if (!document) return;
|
|
565
|
-
var query = await this._client._sendMayFail("DOM.querySelectorAll", {
|
|
566
|
-
nodeId: document.root.nodeId,
|
|
567
|
-
selector: "[class=" + this._crPage.initScriptTag + "]"
|
|
568
|
-
});
|
|
569
|
-
if (!query) return;
|
|
570
|
-
for (const nodeId of query.nodeIds) await this._client._sendMayFail("DOM.removeNode", { nodeId });
|
|
571
|
-
await this._client._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
572
|
-
try {
|
|
573
|
-
await this._page.frameManager.frame(this._targetId)._context("utility");
|
|
574
|
-
} catch {
|
|
575
|
-
}
|
|
576
|
-
;
|
|
577
515
|
}
|
|
578
516
|
_onFrameRequestedNavigation(payload) {
|
|
579
517
|
if (this._eventBelongsToStaleFrame(payload.frameId))
|
|
@@ -599,25 +537,19 @@ class FrameSession {
|
|
|
599
537
|
this._page.frameManager.frameDetached(frameId);
|
|
600
538
|
}
|
|
601
539
|
_onExecutionContextCreated(contextPayload) {
|
|
602
|
-
for (const name of this._exposedBindingNames)
|
|
603
|
-
this._client._sendMayFail("Runtime.addBinding", { name, executionContextId: contextPayload.id });
|
|
604
540
|
const frame = contextPayload.auxData ? this._page.frameManager.frame(contextPayload.auxData.frameId) : null;
|
|
605
|
-
if (contextPayload.auxData.type == "worker") throw new Error("ExecutionContext is worker");
|
|
606
541
|
if (!frame || this._eventBelongsToStaleFrame(frame._id))
|
|
607
542
|
return;
|
|
608
543
|
const delegate = new import_crExecutionContext.CRExecutionContext(this._client, contextPayload);
|
|
609
|
-
let worldName =
|
|
544
|
+
let worldName = null;
|
|
545
|
+
if (contextPayload.auxData && !!contextPayload.auxData.isDefault)
|
|
546
|
+
worldName = "main";
|
|
547
|
+
else if (contextPayload.name === this._crPage.utilityWorldName)
|
|
548
|
+
worldName = "utility";
|
|
610
549
|
const context = new dom.FrameExecutionContext(delegate, frame, worldName);
|
|
611
|
-
if (worldName
|
|
550
|
+
if (worldName)
|
|
612
551
|
frame._contextCreated(worldName, context);
|
|
613
552
|
this._contextIdToContext.set(contextPayload.id, context);
|
|
614
|
-
for (const source of this._exposedBindingScripts) {
|
|
615
|
-
this._client._sendMayFail("Runtime.evaluate", {
|
|
616
|
-
expression: source,
|
|
617
|
-
contextId: contextPayload.id,
|
|
618
|
-
awaitPromise: true
|
|
619
|
-
});
|
|
620
|
-
}
|
|
621
553
|
}
|
|
622
554
|
_onExecutionContextDestroyed(executionContextId) {
|
|
623
555
|
const context = this._contextIdToContext.get(executionContextId);
|
|
@@ -630,7 +562,7 @@ class FrameSession {
|
|
|
630
562
|
for (const contextId of Array.from(this._contextIdToContext.keys()))
|
|
631
563
|
this._onExecutionContextDestroyed(contextId);
|
|
632
564
|
}
|
|
633
|
-
|
|
565
|
+
_onAttachedToTarget(event) {
|
|
634
566
|
if (this._bufferedAttachedToTargetEvents) {
|
|
635
567
|
this._bufferedAttachedToTargetEvents.push(event);
|
|
636
568
|
return;
|
|
@@ -666,19 +598,11 @@ class FrameSession {
|
|
|
666
598
|
session.once("Runtime.executionContextCreated", async (event2) => {
|
|
667
599
|
worker.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, event2.context));
|
|
668
600
|
});
|
|
669
|
-
var globalThis = await session._sendMayFail("Runtime.evaluate", {
|
|
670
|
-
expression: "globalThis",
|
|
671
|
-
serializationOptions: { serialization: "idOnly" }
|
|
672
|
-
});
|
|
673
|
-
if (globalThis && globalThis.result) {
|
|
674
|
-
var globalThisObjId = globalThis.result.objectId;
|
|
675
|
-
var executionContextId = parseInt(globalThisObjId.split(".")[1], 10);
|
|
676
|
-
worker.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, { id: executionContextId }));
|
|
677
|
-
}
|
|
678
601
|
if (this._crPage._browserContext._browser.majorVersion() >= 143)
|
|
679
602
|
session.on("Inspector.workerScriptLoaded", () => worker.workerScriptLoaded());
|
|
680
603
|
else
|
|
681
604
|
worker.workerScriptLoaded();
|
|
605
|
+
session._sendMayFail("Runtime.enable");
|
|
682
606
|
this._crPage._networkManager.addSession(session, this._page.frameManager.frame(this._targetId) ?? void 0).catch(() => {
|
|
683
607
|
});
|
|
684
608
|
session._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
@@ -687,7 +611,7 @@ class FrameSession {
|
|
|
687
611
|
session.on("Target.detachedFromTarget", (event2) => this._onDetachedFromTarget(event2));
|
|
688
612
|
session.on("Runtime.consoleAPICalled", (event2) => {
|
|
689
613
|
const args = event2.args.map((o) => (0, import_crExecutionContext.createHandle)(worker.existingExecutionContext, o));
|
|
690
|
-
this._page.addConsoleMessage(worker, event2.type, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event2.stackTrace));
|
|
614
|
+
this._page.addConsoleMessage(worker, event2.type, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event2.stackTrace), void 0, event2.timestamp);
|
|
691
615
|
});
|
|
692
616
|
session.on("Runtime.exceptionThrown", (exception) => this._page.addPageError((0, import_crProtocolHelper.exceptionToError)(exception.exceptionDetails)));
|
|
693
617
|
}
|
|
@@ -722,7 +646,7 @@ class FrameSession {
|
|
|
722
646
|
if (!context)
|
|
723
647
|
return;
|
|
724
648
|
const values = event.args.map((arg) => (0, import_crExecutionContext.createHandle)(context, arg));
|
|
725
|
-
this._page.addConsoleMessage(null, event.type, values, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
|
|
649
|
+
this._page.addConsoleMessage(null, event.type, values, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace), void 0, event.timestamp);
|
|
726
650
|
}
|
|
727
651
|
async _onBindingCalled(event) {
|
|
728
652
|
const pageOrError = await this._crPage._page.waitForInitializedOrError();
|
|
@@ -764,7 +688,7 @@ class FrameSession {
|
|
|
764
688
|
lineNumber: lineNumber || 0,
|
|
765
689
|
columnNumber: 0
|
|
766
690
|
};
|
|
767
|
-
this._page.addConsoleMessage(null, level, [], location, text);
|
|
691
|
+
this._page.addConsoleMessage(null, level, [], location, text, event.entry.timestamp);
|
|
768
692
|
}
|
|
769
693
|
}
|
|
770
694
|
async _onFileChooserOpened(event) {
|
|
@@ -788,15 +712,14 @@ class FrameSession {
|
|
|
788
712
|
}
|
|
789
713
|
}
|
|
790
714
|
_onScreencastFrame(payload) {
|
|
791
|
-
this._page.screencast.throttleFrameAck(() => {
|
|
792
|
-
this._client._sendMayFail("Page.screencastFrameAck", { sessionId: payload.sessionId });
|
|
793
|
-
});
|
|
794
715
|
const buffer = Buffer.from(payload.data, "base64");
|
|
795
|
-
this._page.
|
|
716
|
+
this._page.screencast.onScreencastFrame({
|
|
796
717
|
buffer,
|
|
797
718
|
frameSwapWallTime: payload.metadata.timestamp ? payload.metadata.timestamp * 1e3 : Date.now(),
|
|
798
|
-
|
|
799
|
-
|
|
719
|
+
viewportWidth: payload.metadata.deviceWidth,
|
|
720
|
+
viewportHeight: payload.metadata.deviceHeight
|
|
721
|
+
}, () => {
|
|
722
|
+
this._client._sendMayFail("Page.screencastFrameAck", { sessionId: payload.sessionId });
|
|
800
723
|
});
|
|
801
724
|
}
|
|
802
725
|
async _updateGeolocation(initial) {
|
|
@@ -880,10 +803,12 @@ class FrameSession {
|
|
|
880
803
|
}
|
|
881
804
|
async _updateUserAgent() {
|
|
882
805
|
const options = this._crPage._browserContext._options;
|
|
806
|
+
const { navigatorPlatform, userAgentMetadata } = (0, import_browserContext.calculateUserAgentEmulation)(options);
|
|
883
807
|
await this._client.send("Emulation.setUserAgentOverride", {
|
|
884
808
|
userAgent: options.userAgent || "",
|
|
885
809
|
acceptLanguage: options.locale,
|
|
886
|
-
|
|
810
|
+
platform: navigatorPlatform,
|
|
811
|
+
userAgentMetadata
|
|
887
812
|
});
|
|
888
813
|
}
|
|
889
814
|
async _setDefaultFontFamilies(session) {
|
|
@@ -898,10 +823,20 @@ class FrameSession {
|
|
|
898
823
|
});
|
|
899
824
|
}
|
|
900
825
|
async _evaluateOnNewDocument(initScript, world, runImmediately) {
|
|
901
|
-
this.
|
|
826
|
+
const worldName = world === "utility" ? this._crPage.utilityWorldName : void 0;
|
|
827
|
+
const { identifier } = await this._client.send("Page.addScriptToEvaluateOnNewDocument", { source: initScript.source, worldName, runImmediately });
|
|
828
|
+
this._initScriptIds.set(initScript, identifier);
|
|
902
829
|
}
|
|
903
830
|
async _removeEvaluatesOnNewDocument(initScripts) {
|
|
904
|
-
|
|
831
|
+
const ids = [];
|
|
832
|
+
for (const script of initScripts) {
|
|
833
|
+
const id = this._initScriptIds.get(script);
|
|
834
|
+
if (id)
|
|
835
|
+
ids.push(id);
|
|
836
|
+
this._initScriptIds.delete(script);
|
|
837
|
+
}
|
|
838
|
+
await Promise.all(ids.map((identifier) => this._client.send("Page.removeScriptToEvaluateOnNewDocument", { identifier }).catch(() => {
|
|
839
|
+
})));
|
|
905
840
|
}
|
|
906
841
|
async exposePlaywrightBinding() {
|
|
907
842
|
await this._client.send("Runtime.addBinding", { name: import_page.PageBinding.kBindingName });
|
|
@@ -1001,30 +936,6 @@ class FrameSession {
|
|
|
1001
936
|
throw new Error(dom.kUnableToAdoptErrorMessage);
|
|
1002
937
|
return (0, import_crExecutionContext.createHandle)(to, result.object).asElement();
|
|
1003
938
|
}
|
|
1004
|
-
async _initBinding(binding = import_page.PageBinding) {
|
|
1005
|
-
this._exposedBindingNames.push(binding.name);
|
|
1006
|
-
this._exposedBindingScripts.push(binding.source);
|
|
1007
|
-
const contextIds = Array.from(this._contextIdToContext.keys());
|
|
1008
|
-
await Promise.all([
|
|
1009
|
-
this._client._sendMayFail("Runtime.addBinding", { name: binding.name }),
|
|
1010
|
-
...contextIds.map((executionContextId) => this._client._sendMayFail("Runtime.addBinding", { name: binding.name, executionContextId }))
|
|
1011
|
-
]);
|
|
1012
|
-
for (const contextId of contextIds) {
|
|
1013
|
-
this._client._sendMayFail("Runtime.evaluate", {
|
|
1014
|
-
expression: binding.source,
|
|
1015
|
-
contextId,
|
|
1016
|
-
awaitPromise: true
|
|
1017
|
-
});
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
async _removeExposedBindings() {
|
|
1021
|
-
const toRetain = [];
|
|
1022
|
-
const toRemove = [];
|
|
1023
|
-
for (const name of this._exposedBindingNames)
|
|
1024
|
-
(name.startsWith("__pw_") ? toRetain : toRemove).push(name);
|
|
1025
|
-
this._exposedBindingNames = toRetain;
|
|
1026
|
-
await Promise.all(toRemove.map((name) => this._client.send("Runtime.removeBinding", { name })));
|
|
1027
|
-
}
|
|
1028
939
|
}
|
|
1029
940
|
async function emulateLocale(session, locale) {
|
|
1030
941
|
try {
|
|
@@ -1046,49 +957,6 @@ async function emulateTimezone(session, timezoneId) {
|
|
|
1046
957
|
throw exception;
|
|
1047
958
|
}
|
|
1048
959
|
}
|
|
1049
|
-
function calculateUserAgentMetadata(options) {
|
|
1050
|
-
const ua = options.userAgent;
|
|
1051
|
-
if (!ua)
|
|
1052
|
-
return void 0;
|
|
1053
|
-
const metadata = {
|
|
1054
|
-
mobile: !!options.isMobile,
|
|
1055
|
-
model: "",
|
|
1056
|
-
architecture: "x86",
|
|
1057
|
-
platform: "Windows",
|
|
1058
|
-
platformVersion: ""
|
|
1059
|
-
};
|
|
1060
|
-
const androidMatch = ua.match(/Android (\d+(\.\d+)?(\.\d+)?)/);
|
|
1061
|
-
const iPhoneMatch = ua.match(/iPhone OS (\d+(_\d+)?)/);
|
|
1062
|
-
const iPadMatch = ua.match(/iPad; CPU OS (\d+(_\d+)?)/);
|
|
1063
|
-
const macOSMatch = ua.match(/Mac OS X (\d+(_\d+)?(_\d+)?)/);
|
|
1064
|
-
const windowsMatch = ua.match(/Windows\D+(\d+(\.\d+)?(\.\d+)?)/);
|
|
1065
|
-
if (androidMatch) {
|
|
1066
|
-
metadata.platform = "Android";
|
|
1067
|
-
metadata.platformVersion = androidMatch[1];
|
|
1068
|
-
metadata.architecture = "arm";
|
|
1069
|
-
} else if (iPhoneMatch) {
|
|
1070
|
-
metadata.platform = "iOS";
|
|
1071
|
-
metadata.platformVersion = iPhoneMatch[1];
|
|
1072
|
-
metadata.architecture = "arm";
|
|
1073
|
-
} else if (iPadMatch) {
|
|
1074
|
-
metadata.platform = "iOS";
|
|
1075
|
-
metadata.platformVersion = iPadMatch[1];
|
|
1076
|
-
metadata.architecture = "arm";
|
|
1077
|
-
} else if (macOSMatch) {
|
|
1078
|
-
metadata.platform = "macOS";
|
|
1079
|
-
metadata.platformVersion = macOSMatch[1];
|
|
1080
|
-
if (!ua.includes("Intel"))
|
|
1081
|
-
metadata.architecture = "arm";
|
|
1082
|
-
} else if (windowsMatch) {
|
|
1083
|
-
metadata.platform = "Windows";
|
|
1084
|
-
metadata.platformVersion = windowsMatch[1];
|
|
1085
|
-
} else if (ua.toLowerCase().includes("linux")) {
|
|
1086
|
-
metadata.platform = "Linux";
|
|
1087
|
-
}
|
|
1088
|
-
if (ua.includes("ARM"))
|
|
1089
|
-
metadata.architecture = "arm";
|
|
1090
|
-
return metadata;
|
|
1091
|
-
}
|
|
1092
960
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1093
961
|
0 && (module.exports = {
|
|
1094
962
|
CRPage
|
|
@@ -45,13 +45,14 @@ class CRServiceWorker extends import_page.Worker {
|
|
|
45
45
|
this.browserContext = browserContext;
|
|
46
46
|
if (!process.env.PLAYWRIGHT_DISABLE_SERVICE_WORKER_NETWORK)
|
|
47
47
|
this._networkManager = new import_crNetworkManager.CRNetworkManager(null, this);
|
|
48
|
-
session.
|
|
48
|
+
session.on("Inspector.targetCrashed", () => this._prepareContextForRestart());
|
|
49
|
+
session.on("Runtime.executionContextCreated", (event) => {
|
|
49
50
|
this.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, event.context));
|
|
51
|
+
if (this.browserContext._browser.majorVersion() < 143)
|
|
52
|
+
this.workerScriptLoaded();
|
|
50
53
|
});
|
|
51
54
|
if (this.browserContext._browser.majorVersion() >= 143)
|
|
52
55
|
session.on("Inspector.workerScriptLoaded", () => this.workerScriptLoaded());
|
|
53
|
-
else
|
|
54
|
-
this.workerScriptLoaded();
|
|
55
56
|
if (this._networkManager && this._isNetworkInspectionEnabled()) {
|
|
56
57
|
this.updateRequestInterception();
|
|
57
58
|
this.updateExtraHTTPHeaders();
|
|
@@ -69,24 +70,16 @@ class CRServiceWorker extends import_page.Worker {
|
|
|
69
70
|
if (!this.existingExecutionContext || process.env.PLAYWRIGHT_DISABLE_SERVICE_WORKER_CONSOLE)
|
|
70
71
|
return;
|
|
71
72
|
const args = event.args.map((o) => (0, import_crExecutionContext.createHandle)(this.existingExecutionContext, o));
|
|
72
|
-
const message = new import_console.ConsoleMessage(null, this, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
|
|
73
|
+
const message = new import_console.ConsoleMessage(null, this, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace), event.timestamp);
|
|
73
74
|
this.browserContext.emit(import_browserContext.BrowserContext.Events.Console, message);
|
|
74
75
|
});
|
|
76
|
+
session.send("Runtime.enable", {}).catch((e) => {
|
|
77
|
+
});
|
|
75
78
|
session.send("Runtime.runIfWaitingForDebugger").catch((e) => {
|
|
76
79
|
});
|
|
77
80
|
session.on("Inspector.targetReloadedAfterCrash", () => {
|
|
78
81
|
session._sendMayFail("Runtime.runIfWaitingForDebugger", {});
|
|
79
82
|
});
|
|
80
|
-
session._sendMayFail("Runtime.evaluate", {
|
|
81
|
-
expression: "globalThis",
|
|
82
|
-
serializationOptions: { serialization: "idOnly" }
|
|
83
|
-
}).then((globalThis) => {
|
|
84
|
-
if (globalThis && globalThis.result) {
|
|
85
|
-
var globalThisObjId = globalThis.result.objectId;
|
|
86
|
-
var executionContextId = parseInt(globalThisObjId.split(".")[1], 10);
|
|
87
|
-
this.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, { id: executionContextId }));
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
83
|
}
|
|
91
84
|
didClose() {
|
|
92
85
|
this._networkManager?.removeSession(this._session);
|