Add SPA session validation and buglist, update migration docs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-12-03 21:28:08 +00:00
parent 9be3dfc14e
commit cff287e870
24169 changed files with 10223 additions and 7120 deletions

View File

@@ -1,69 +0,0 @@
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var accessibility_exports = {};
__export(accessibility_exports, {
Accessibility: () => Accessibility
});
module.exports = __toCommonJS(accessibility_exports);
class Accessibility {
constructor(getAXTree) {
this._getAXTree = getAXTree;
}
async snapshot(options = {}) {
const {
interestingOnly = true,
root = null
} = options;
const { tree, needle } = await this._getAXTree(root || void 0);
if (!interestingOnly) {
if (root)
return needle && serializeTree(needle)[0];
return serializeTree(tree)[0];
}
const interestingNodes = /* @__PURE__ */ new Set();
collectInterestingNodes(interestingNodes, tree, false);
if (root && (!needle || !interestingNodes.has(needle)))
return null;
return serializeTree(needle || tree, interestingNodes)[0];
}
}
function collectInterestingNodes(collection, node, insideControl) {
if (node.isInteresting(insideControl))
collection.add(node);
if (node.isLeafNode())
return;
insideControl = insideControl || node.isControl();
for (const child of node.children())
collectInterestingNodes(collection, child, insideControl);
}
function serializeTree(node, whitelistedNodes) {
const children = [];
for (const child of node.children())
children.push(...serializeTree(child, whitelistedNodes));
if (whitelistedNodes && !whitelistedNodes.has(node))
return children;
const serializedNode = node.serialize();
if (children.length)
serializedNode.children = children;
return [serializedNode];
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Accessibility
});

2
node_modules/playwright-core/lib/server/android/android.js generated vendored Normal file → Executable file
View File

@@ -248,7 +248,7 @@ class AndroidDevice extends import_instrumentation.SdkObject {
"--disable-fre",
"--no-default-browser-check",
`--remote-debugging-socket-name=${socketName}`,
...(0, import_chromiumSwitches.chromiumSwitches)(),
...(0, import_chromiumSwitches.chromiumSwitches)(void 0, void 0, true),
...this._innerDefaultArgs(options)
];
return chromeArguments;

0
node_modules/playwright-core/lib/server/android/backendAdb.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/artifact.js generated vendored Normal file → Executable file
View File

37
node_modules/playwright-core/lib/server/bidi/bidiBrowser.js generated vendored Normal file → Executable file
View File

@@ -62,12 +62,16 @@ class BidiBrowser extends import_browser.Browser {
browser._bidiSessionInfo = await browser._browserSession.send("session.new", {
capabilities: {
alwaysMatch: {
acceptInsecureCerts: options.persistent?.internalIgnoreHTTPSErrors || options.persistent?.ignoreHTTPSErrors,
proxy: getProxyConfiguration(options.originalLaunchOptions.proxyOverride ?? options.proxy),
unhandledPromptBehavior: {
"acceptInsecureCerts": options.persistent?.internalIgnoreHTTPSErrors || options.persistent?.ignoreHTTPSErrors,
"proxy": getProxyConfiguration(options.originalLaunchOptions.proxyOverride ?? options.proxy),
"unhandledPromptBehavior": {
default: bidi.Session.UserPromptHandlerType.Ignore
},
webSocketUrl: true
"webSocketUrl": true,
// Chrome with WebDriver BiDi does not support prerendering
// yet because WebDriver BiDi behavior is not specified. See
// https://github.com/w3c/webdriver-bidi/issues/321.
"goog:prerenderingDisabled": true
}
}
});
@@ -76,7 +80,8 @@ class BidiBrowser extends import_browser.Browser {
"browsingContext",
"network",
"log",
"script"
"script",
"input"
]
});
await browser._browserSession.send("network.addDataCollector", {
@@ -122,16 +127,13 @@ class BidiBrowser extends import_browser.Browser {
_onBrowsingContextCreated(event) {
if (event.parent) {
const parentFrameId = event.parent;
for (const page2 of this._bidiPages.values()) {
const parentFrame = page2._page.frameManager.frame(parentFrameId);
if (!parentFrame)
continue;
const page2 = this._findPageForFrame(parentFrameId);
if (page2) {
page2._session.addFrameBrowsingContext(event.context);
page2._page.frameManager.frameAttached(event.context, parentFrameId);
const frame = page2._page.frameManager.frame(event.context);
if (frame)
frame._url = event.url;
return;
}
return;
}
@@ -141,7 +143,7 @@ class BidiBrowser extends import_browser.Browser {
if (!context)
return;
const session = this._connection.createMainFrameBrowsingContextSession(event.context);
const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);
const opener = event.originalOpener && this._findPageForFrame(event.originalOpener);
const page = new import_bidiPage.BidiPage(context, session, opener || null);
page._page.mainFrame()._url = event.url;
this._bidiPages.set(event.context, page);
@@ -171,6 +173,12 @@ class BidiBrowser extends import_browser.Browser {
return;
}
}
_findPageForFrame(frameId) {
for (const page of this._bidiPages.values()) {
if (page._page.frameManager.frame(frameId))
return page;
}
}
}
class BidiBrowserContext extends import_browserContext.BrowserContext {
constructor(browser, browserContextId, options) {
@@ -207,6 +215,8 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
userContexts: [this._userContextId()]
}));
}
if (this._options.extraHTTPHeaders)
promises.push(this.doUpdateExtraHTTPHeaders());
await Promise.all(promises);
}
possiblyUninitializedPages() {
@@ -300,6 +310,11 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
});
}
async doUpdateExtraHTTPHeaders() {
const allHeaders = this._options.extraHTTPHeaders || [];
await this._browser._browserSession.send("network.setExtraHeaders", {
headers: allHeaders.map(({ name, value }) => ({ name, value: { type: "string", value } })),
userContexts: [this._userContextId()]
});
}
async setUserAgent(userAgent) {
this._options.userAgent = userAgent;

2
node_modules/playwright-core/lib/server/bidi/bidiChromium.js generated vendored Normal file → Executable file
View File

@@ -40,7 +40,7 @@ var import_chromiumSwitches = require("../chromium/chromiumSwitches");
var import_chromium = require("../chromium/chromium");
class BidiChromium extends import_browserType.BrowserType {
constructor(parent) {
super(parent, "_bidiChromium");
super(parent, "chromium");
}
async connectToTransport(transport, options, browserLogsCollector) {
const bidiTransport = await require("./bidiOverCdp").connectBidiOverCdp(transport);

0
node_modules/playwright-core/lib/server/bidi/bidiConnection.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js generated vendored Normal file → Executable file
View File

2
node_modules/playwright-core/lib/server/bidi/bidiFirefox.js generated vendored Normal file → Executable file
View File

@@ -41,7 +41,7 @@ var import_firefoxPrefs = require("./third_party/firefoxPrefs");
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
class BidiFirefox extends import_browserType.BrowserType {
constructor(parent) {
super(parent, "_bidiFirefox");
super(parent, "firefox");
}
executablePath() {
return "";

0
node_modules/playwright-core/lib/server/bidi/bidiInput.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/bidiOverCdp.js generated vendored Normal file → Executable file
View File

30
node_modules/playwright-core/lib/server/bidi/bidiPage.js generated vendored Normal file → Executable file
View File

@@ -42,6 +42,7 @@ var import_bidiInput = require("./bidiInput");
var import_bidiNetworkManager = require("./bidiNetworkManager");
var import_bidiPdf = require("./bidiPdf");
var bidi = __toESM(require("./third_party/bidiProtocol"));
var network = __toESM(require("../network"));
const UTILITY_WORLD_NAME = "__playwright_utility_world__";
const kPlaywrightBindingChannel = "playwrightChannel";
class BidiPage {
@@ -75,7 +76,8 @@ class BidiPage {
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.downloadWillBegin", this._onDownloadWillBegin.bind(this)),
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.downloadEnd", this._onDownloadEnded.bind(this)),
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.userPromptOpened", this._onUserPromptOpened.bind(this)),
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "log.entryAdded", this._onLogEntryAdded.bind(this))
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "log.entryAdded", this._onLogEntryAdded.bind(this)),
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "input.fileDialogOpened", this._onFileDialogOpened.bind(this))
];
this._initialize().then(
() => this._page.reportAsNew(this._opener?._page),
@@ -113,6 +115,7 @@ class BidiPage {
const delegate2 = new import_bidiExecutionContext.BidiExecutionContext(this._session, realmInfo);
const worker = new import_page.Worker(this._page, realmInfo.origin);
this._realmToWorkerContext.set(realmInfo.realm, worker.createExecutionContext(delegate2));
worker.workerScriptLoaded();
this._page.addWorker(realmInfo.realm, worker);
return;
}
@@ -260,7 +263,17 @@ ${params.stackTrace?.callFrames.map((f) => {
return;
const callFrame = params.stackTrace?.callFrames[0];
const location = callFrame ?? { url: "", lineNumber: 1, columnNumber: 1 };
this._page.addConsoleMessage(entry.method, entry.args.map((arg) => (0, import_bidiExecutionContext.createHandle)(context, arg)), location, params.text || void 0);
this._page.addConsoleMessage(null, entry.method, entry.args.map((arg) => (0, import_bidiExecutionContext.createHandle)(context, arg)), location, params.text || void 0);
}
async _onFileDialogOpened(params) {
if (!params.element)
return;
const frame = this._page.frameManager.frame(params.context);
if (!frame)
return;
const executionContext = await frame._mainContext();
const handle = await toBidiExecutionContext(executionContext).remoteObjectForNodeId(executionContext, { sharedId: params.element.sharedId });
await this._page._onFileChooserOpened(handle);
}
async navigateFrame(frame, url, referrer) {
const { navigation } = await this._session.send("browsingContext.navigate", {
@@ -270,6 +283,14 @@ ${params.stackTrace?.callFrames.map((f) => {
return { newDocumentId: navigation || void 0 };
}
async updateExtraHTTPHeaders() {
const allHeaders = network.mergeHeaders([
this._browserContext._options.extraHTTPHeaders,
this._page.extraHTTPHeaders()
]);
await this._session.send("network.setExtraHeaders", {
headers: allHeaders.map(({ name, value }) => ({ name, value: { type: "string", value } })),
contexts: [this._session.sessionId]
});
}
async updateEmulateMedia() {
}
@@ -379,6 +400,8 @@ ${params.stackTrace?.callFrames.map((f) => {
}
}
async setBackgroundColor(color) {
if (color)
throw new Error("Not implemented");
}
async takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, scale) {
const rect = documentRect || viewportRect;
@@ -503,9 +526,6 @@ ${params.stackTrace?.callFrames.map((f) => {
const executionContext = toBidiExecutionContext(to);
return await executionContext.remoteObjectForNodeId(to, nodeId);
}
async getAccessibilityTree(needle) {
throw new Error("Method not implemented.");
}
async inputActionEpilogue() {
}
async resetForReuse(progress) {

0
node_modules/playwright-core/lib/server/bidi/bidiPdf.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiCommands.d.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiDeserializer.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolCore.js generated vendored Normal file → Executable file
View File

View File

0
node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/browser.js generated vendored Normal file → Executable file
View File

19
node_modules/playwright-core/lib/server/browserContext.js generated vendored Normal file → Executable file
View File

@@ -69,7 +69,6 @@ class BrowserContext extends import_instrumentation.SdkObject {
this._creatingStorageStatePage = false;
this.initScripts = [];
this._routesInFlight = /* @__PURE__ */ new Set();
this._playwrightBindingExposed = false;
this.attribution.context = this;
this._browser = browser;
this._options = options;
@@ -231,17 +230,17 @@ if (navigator.serviceWorker) navigator.serviceWorker.register = async () => { co
return this._pageBindings.get(name)?.forClient;
}
async exposePlaywrightBindingIfNeeded() {
if (this._playwrightBindingExposed)
return;
this._playwrightBindingExposed = true;
await this.doExposePlaywrightBinding();
this.bindingsInitScript = import_page2.PageBinding.createInitScript();
this.initScripts.push(this.bindingsInitScript);
await this.doAddInitScript(this.bindingsInitScript);
await this.safeNonStallingEvaluateInAllFrames(this.bindingsInitScript.source, "main");
this._playwrightBindingExposed ??= (async () => {
await this.doExposePlaywrightBinding();
this.bindingsInitScript = import_page2.PageBinding.createInitScript();
this.initScripts.push(this.bindingsInitScript);
await this.doAddInitScript(this.bindingsInitScript);
await this.safeNonStallingEvaluateInAllFrames(this.bindingsInitScript.source, "main");
})();
return await this._playwrightBindingExposed;
}
needsPlaywrightBinding() {
return this._playwrightBindingExposed;
return this._playwrightBindingExposed !== void 0;
}
async exposeBinding(progress, name, needsHandle, playwrightBinding, forClient) {
if (this._pageBindings.has(name))

0
node_modules/playwright-core/lib/server/browserType.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/callLog.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/appIcon.png generated vendored Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

13
node_modules/playwright-core/lib/server/chromium/chromium.js generated vendored Normal file → Executable file
View File

@@ -55,11 +55,22 @@ var import_fileUtils = require("../utils/fileUtils");
var import_processLauncher = require("../utils/processLauncher");
const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
class Chromium extends import_browserType.BrowserType {
constructor(parent) {
constructor(parent, bidiChromium) {
super(parent, "chromium");
this._bidiChromium = bidiChromium;
if ((0, import_utils.debugMode)() === "inspector")
this._devtools = this._createDevTools();
}
launch(progress, options, protocolLogger) {
if (options.channel?.startsWith("bidi-"))
return this._bidiChromium.launch(progress, options, protocolLogger);
return super.launch(progress, options, protocolLogger);
}
async launchPersistentContext(progress, userDataDir, options) {
if (options.channel?.startsWith("bidi-"))
return this._bidiChromium.launchPersistentContext(progress, userDataDir, options);
return super.launchPersistentContext(progress, userDataDir, options);
}
async connectOverCDP(progress, endpointURL, options) {
return await this._connectOverCDPInternal(progress, endpointURL, options);
}

13
node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js generated vendored Normal file → Executable file
View File

@@ -46,9 +46,11 @@ const disabledFeatures = (assistantMode) => [
"AutoDeElevate",
// See https://github.com/microsoft/playwright/issues/37714
"RenderDocument",
// Prevents downloading optimization hints on startup.
"OptimizationHints",
assistantMode ? "AutomationControlled" : ""
].filter(Boolean);
const chromiumSwitches = (assistantMode, channel) => [
const chromiumSwitches = (assistantMode, channel, android) => [
"--disable-field-trial-config",
// https://source.chromium.org/chromium/chromium/src/+/main:testing/variations/README.md
"--disable-background-networking",
@@ -87,7 +89,14 @@ const chromiumSwitches = (assistantMode, channel) => [
"--unsafely-disable-devtools-self-xss-warnings",
// Edge can potentially restart on Windows (msRelaunchNoCompatLayer) which looses its file descriptors (stdout/stderr) and CDP (3/4). Disable until fixed upstream.
"--edge-skip-compat-layer-relaunch",
assistantMode ? "" : "--enable-automation"
assistantMode ? "" : "--enable-automation",
// This disables Chrome for Testing infobar that is visible in the persistent context.
// The switch is ignored everywhere else, including Chromium/Chrome/Edge.
"--disable-infobars",
// Less annoying popups.
"--disable-search-engine-choice-screen",
// Prevents the "three dots" menu crash in IdentityManager::HasPrimaryAccount for ephemeral contexts.
android ? "" : "--disable-sync"
].filter(Boolean);
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {

View File

@@ -1,263 +0,0 @@
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var crAccessibility_exports = {};
__export(crAccessibility_exports, {
getAccessibilityTree: () => getAccessibilityTree
});
module.exports = __toCommonJS(crAccessibility_exports);
async function getAccessibilityTree(client, needle) {
const { nodes } = await client.send("Accessibility.getFullAXTree");
const tree = CRAXNode.createTree(client, nodes);
return {
tree,
needle: needle ? await tree._findElement(needle) : null
};
}
class CRAXNode {
constructor(client, payload) {
this._children = [];
this._richlyEditable = false;
this._editable = false;
this._focusable = false;
this._expanded = false;
this._hidden = false;
this._client = client;
this._payload = payload;
this._name = this._payload.name ? this._payload.name.value : "";
this._role = this._payload.role ? this._payload.role.value : "Unknown";
for (const property of this._payload.properties || []) {
if (property.name === "editable") {
this._richlyEditable = property.value.value === "richtext";
this._editable = true;
}
if (property.name === "focusable")
this._focusable = property.value.value;
if (property.name === "expanded")
this._expanded = property.value.value;
if (property.name === "hidden")
this._hidden = property.value.value;
}
}
_isPlainTextField() {
if (this._richlyEditable)
return false;
if (this._editable)
return true;
return this._role === "textbox" || this._role === "ComboBox" || this._role === "searchbox";
}
_isTextOnlyObject() {
const role = this._role;
return role === "LineBreak" || role === "text" || role === "InlineTextBox" || role === "StaticText";
}
_hasFocusableChild() {
if (this._cachedHasFocusableChild === void 0) {
this._cachedHasFocusableChild = false;
for (const child of this._children) {
if (child._focusable || child._hasFocusableChild()) {
this._cachedHasFocusableChild = true;
break;
}
}
}
return this._cachedHasFocusableChild;
}
children() {
return this._children;
}
async _findElement(element) {
const objectId = element._objectId;
const { node: { backendNodeId } } = await this._client.send("DOM.describeNode", { objectId });
const needle = this.find((node) => node._payload.backendDOMNodeId === backendNodeId);
return needle || null;
}
find(predicate) {
if (predicate(this))
return this;
for (const child of this._children) {
const result = child.find(predicate);
if (result)
return result;
}
return null;
}
isLeafNode() {
if (!this._children.length)
return true;
if (this._isPlainTextField() || this._isTextOnlyObject())
return true;
switch (this._role) {
case "doc-cover":
case "graphics-symbol":
case "img":
case "Meter":
case "scrollbar":
case "slider":
case "separator":
case "progressbar":
return true;
default:
break;
}
if (this._hasFocusableChild())
return false;
if (this._focusable && this._role !== "WebArea" && this._role !== "RootWebArea" && this._name)
return true;
if (this._role === "heading" && this._name)
return true;
return false;
}
isControl() {
switch (this._role) {
case "button":
case "checkbox":
case "ColorWell":
case "combobox":
case "DisclosureTriangle":
case "listbox":
case "menu":
case "menubar":
case "menuitem":
case "menuitemcheckbox":
case "menuitemradio":
case "radio":
case "scrollbar":
case "searchbox":
case "slider":
case "spinbutton":
case "switch":
case "tab":
case "textbox":
case "tree":
return true;
default:
return false;
}
}
isInteresting(insideControl) {
const role = this._role;
if (role === "Ignored" || this._hidden)
return false;
if (this._focusable || this._richlyEditable)
return true;
if (this.isControl())
return true;
if (insideControl)
return false;
return this.isLeafNode() && !!this._name;
}
normalizedRole() {
switch (this._role) {
case "RootWebArea":
return "WebArea";
case "StaticText":
return "text";
default:
return this._role;
}
}
serialize() {
const properties = /* @__PURE__ */ new Map();
for (const property of this._payload.properties || [])
properties.set(property.name.toLowerCase(), property.value.value);
if (this._payload.description)
properties.set("description", this._payload.description.value);
const node = {
role: this.normalizedRole(),
name: this._payload.name ? this._payload.name.value || "" : ""
};
const userStringProperties = [
"description",
"keyshortcuts",
"roledescription",
"valuetext"
];
for (const userStringProperty of userStringProperties) {
if (!properties.has(userStringProperty))
continue;
node[userStringProperty] = properties.get(userStringProperty);
}
const booleanProperties = [
"disabled",
"expanded",
"focused",
"modal",
"multiline",
"multiselectable",
"readonly",
"required",
"selected"
];
for (const booleanProperty of booleanProperties) {
if (booleanProperty === "focused" && (this._role === "WebArea" || this._role === "RootWebArea"))
continue;
const value = properties.get(booleanProperty);
if (!value)
continue;
node[booleanProperty] = value;
}
const numericalProperties = [
"level",
"valuemax",
"valuemin"
];
for (const numericalProperty of numericalProperties) {
if (!properties.has(numericalProperty))
continue;
node[numericalProperty] = properties.get(numericalProperty);
}
const tokenProperties = [
"autocomplete",
"haspopup",
"invalid",
"orientation"
];
for (const tokenProperty of tokenProperties) {
const value = properties.get(tokenProperty);
if (!value || value === "false")
continue;
node[tokenProperty] = value;
}
const axNode = node;
if (this._payload.value) {
if (typeof this._payload.value.value === "string")
axNode.valueString = this._payload.value.value;
if (typeof this._payload.value.value === "number")
axNode.valueNumber = this._payload.value.value;
}
if (properties.has("checked"))
axNode.checked = properties.get("checked") === "true" ? "checked" : properties.get("checked") === "false" ? "unchecked" : "mixed";
if (properties.has("pressed"))
axNode.pressed = properties.get("pressed") === "true" ? "pressed" : properties.get("pressed") === "false" ? "released" : "mixed";
return axNode;
}
static createTree(client, payloads) {
const nodeById = /* @__PURE__ */ new Map();
for (const payload of payloads)
nodeById.set(payload.nodeId, new CRAXNode(client, payload));
for (const node of nodeById.values()) {
for (const childId of node._payload.childIds || [])
node._children.push(nodeById.get(childId));
}
return nodeById.values().next().value;
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getAccessibilityTree
});

8
node_modules/playwright-core/lib/server/chromium/crBrowser.js generated vendored Normal file → Executable file
View File

@@ -53,6 +53,7 @@ class CRBrowser extends import_browser.Browser {
this._crPages = /* @__PURE__ */ new Map();
this._serviceWorkers = /* @__PURE__ */ new Map();
this._version = "";
this._majorVersion = 0;
this._tracingRecording = false;
this._userAgent = "";
this._connection = connection;
@@ -75,6 +76,10 @@ class CRBrowser extends import_browser.Browser {
await options.__testHookOnConnectToBrowser();
const version = await session.send("Browser.getVersion");
browser._version = version.product.substring(version.product.indexOf("/") + 1);
try {
browser._majorVersion = +browser._version.split(".")[0];
} catch {
}
browser._userAgent = version.userAgent;
browser.options.headful = !version.userAgent.includes("Headless");
if (!options.persistent) {
@@ -116,6 +121,9 @@ class CRBrowser extends import_browser.Browser {
version() {
return this._version;
}
majorVersion() {
return this._majorVersion;
}
userAgent() {
return this._userAgent;
}

0
node_modules/playwright-core/lib/server/chromium/crConnection.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crCoverage.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crDevTools.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crDragDrop.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crExecutionContext.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crInput.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crNetworkManager.js generated vendored Normal file → Executable file
View File

14
node_modules/playwright-core/lib/server/chromium/crPage.js generated vendored Normal file → Executable file
View File

@@ -43,7 +43,6 @@ var import_helper = require("../helper");
var network = __toESM(require("../network"));
var import_page = require("../page");
var import_registry = require("../registry");
var import_crAccessibility = require("./crAccessibility");
var import_crCoverage = require("./crCoverage");
var import_crDragDrop = require("./crDragDrop");
var import_crExecutionContext = require("./crExecutionContext");
@@ -268,9 +267,6 @@ class CRPage {
async adoptElementHandle(handle, to) {
return this._sessionForHandle(handle)._adoptElementHandle(handle, to);
}
async getAccessibilityTree(needle) {
return (0, import_crAccessibility.getAccessibilityTree)(this._mainFrameSession._client, needle);
}
async inputActionEpilogue() {
await this._mainFrameSession._client.send("Page.enable").catch((e) => {
});
@@ -620,6 +616,10 @@ class FrameSession {
session.once("Runtime.executionContextCreated", async (event2) => {
worker.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, event2.context));
});
if (this._crPage._browserContext._browser.majorVersion() >= 143)
session.on("Inspector.workerScriptLoaded", () => worker.workerScriptLoaded());
else
worker.workerScriptLoaded();
session._sendMayFail("Runtime.enable");
this._crPage._networkManager.addSession(session, this._page.frameManager.frame(this._targetId) ?? void 0).catch(() => {
});
@@ -629,7 +629,7 @@ class FrameSession {
session.on("Target.detachedFromTarget", (event2) => this._onDetachedFromTarget(event2));
session.on("Runtime.consoleAPICalled", (event2) => {
const args = event2.args.map((o) => (0, import_crExecutionContext.createHandle)(worker.existingExecutionContext, o));
this._page.addConsoleMessage(event2.type, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event2.stackTrace));
this._page.addConsoleMessage(worker, event2.type, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event2.stackTrace));
});
session.on("Runtime.exceptionThrown", (exception) => this._page.addPageError((0, import_crProtocolHelper.exceptionToError)(exception.exceptionDetails)));
}
@@ -664,7 +664,7 @@ class FrameSession {
if (!context)
return;
const values = event.args.map((arg) => (0, import_crExecutionContext.createHandle)(context, arg));
this._page.addConsoleMessage(event.type, values, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
this._page.addConsoleMessage(null, event.type, values, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
}
async _onBindingCalled(event) {
const pageOrError = await this._crPage._page.waitForInitializedOrError();
@@ -706,7 +706,7 @@ class FrameSession {
lineNumber: lineNumber || 0,
columnNumber: 0
};
this._page.addConsoleMessage(level, [], location, text);
this._page.addConsoleMessage(null, level, [], location, text);
}
}
async _onFileChooserOpened(event) {

0
node_modules/playwright-core/lib/server/chromium/crPdf.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js generated vendored Normal file → Executable file
View File

15
node_modules/playwright-core/lib/server/chromium/crServiceWorker.js generated vendored Normal file → Executable file
View File

@@ -36,16 +36,22 @@ var import_crExecutionContext = require("./crExecutionContext");
var import_crNetworkManager = require("./crNetworkManager");
var import_browserContext = require("../browserContext");
var network = __toESM(require("../network"));
var import_console = require("../console");
var import_crProtocolHelper = require("./crProtocolHelper");
class CRServiceWorker extends import_page.Worker {
constructor(browserContext, session, url) {
super(browserContext, url);
this._session = session;
this.browserContext = browserContext;
if (!!process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS)
if (!process.env.PLAYWRIGHT_DISABLE_SERVICE_WORKER_NETWORK)
this._networkManager = new import_crNetworkManager.CRNetworkManager(null, this);
session.once("Runtime.executionContextCreated", (event) => {
this.createExecutionContext(new import_crExecutionContext.CRExecutionContext(session, event.context));
});
if (this.browserContext._browser.majorVersion() >= 143)
session.on("Inspector.workerScriptLoaded", () => this.workerScriptLoaded());
else
this.workerScriptLoaded();
if (this._networkManager && this._isNetworkInspectionEnabled()) {
this.updateRequestInterception();
this.updateExtraHTTPHeaders();
@@ -59,6 +65,13 @@ class CRServiceWorker extends import_page.Worker {
).catch(() => {
});
}
session.on("Runtime.consoleAPICalled", (event) => {
if (!this.existingExecutionContext || process.env.PLAYWRIGHT_DISABLE_SERVICE_WORKER_CONSOLE)
return;
const args = event.args.map((o) => (0, import_crExecutionContext.createHandle)(this.existingExecutionContext, o));
const message = new import_console.ConsoleMessage(null, this, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
this.browserContext.emit(import_browserContext.BrowserContext.Events.Console, message);
});
session.send("Runtime.enable", {}).catch((e) => {
});
session.send("Runtime.runIfWaitingForDebugger").catch((e) => {

0
node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/chromium/protocol.d.js generated vendored Normal file → Executable file
View File

26
node_modules/playwright-core/lib/server/chromium/videoRecorder.js generated vendored Normal file → Executable file
View File

@@ -30,9 +30,9 @@ class VideoRecorder {
this._process = null;
this._gracefullyClose = null;
this._lastWritePromise = Promise.resolve();
this._lastFrameTimestamp = 0;
this._lastFrameBuffer = null;
this._lastWriteTimestamp = 0;
this._firstFrameTimestamp = 0;
this._lastFrame = null;
this._lastWriteNodeTime = 0;
this._frameQueue = [];
this._isStopped = false;
this._ffmpegPath = ffmpegPath;
@@ -77,16 +77,17 @@ class VideoRecorder {
(0, import_utils.assert)(this._process);
if (this._isStopped)
return;
if (this._lastFrameBuffer) {
const durationSec = timestamp - this._lastFrameTimestamp;
const repeatCount = Math.max(1, Math.round(fps * durationSec));
if (!this._firstFrameTimestamp)
this._firstFrameTimestamp = timestamp;
const frameNumber = Math.floor((timestamp - this._firstFrameTimestamp) * fps);
if (this._lastFrame) {
const repeatCount = frameNumber - this._lastFrame.frameNumber;
for (let i = 0; i < repeatCount; ++i)
this._frameQueue.push(this._lastFrameBuffer);
this._frameQueue.push(this._lastFrame.buffer);
this._lastWritePromise = this._lastWritePromise.then(() => this._sendFrames());
}
this._lastFrameBuffer = frame;
this._lastFrameTimestamp = timestamp;
this._lastWriteTimestamp = (0, import_utils.monotonicTime)();
this._lastFrame = { buffer: frame, timestamp, frameNumber };
this._lastWriteNodeTime = (0, import_utils.monotonicTime)();
}
async _sendFrames() {
while (this._frameQueue.length)
@@ -99,9 +100,10 @@ class VideoRecorder {
});
}
async stop() {
if (this._isStopped)
if (this._isStopped || !this._lastFrame)
return;
this.writeFrame(Buffer.from([]), this._lastFrameTimestamp + ((0, import_utils.monotonicTime)() - this._lastWriteTimestamp) / 1e3);
const addTime = Math.max(((0, import_utils.monotonicTime)() - this._lastWriteNodeTime) / 1e3, 1);
this.writeFrame(Buffer.from([]), this._lastFrame.timestamp + addTime);
this._isStopped = true;
await this._lastWritePromise;
await this._gracefullyClose();

0
node_modules/playwright-core/lib/server/clock.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/csharp.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/java.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/javascript.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/jsonl.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/language.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/languages.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/python.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/codegen/types.js generated vendored Normal file → Executable file
View File

6
node_modules/playwright-core/lib/server/console.js generated vendored Normal file → Executable file
View File

@@ -22,8 +22,9 @@ __export(console_exports, {
});
module.exports = __toCommonJS(console_exports);
class ConsoleMessage {
constructor(page, type, text, args, location) {
constructor(page, worker, type, text, args, location) {
this._page = page;
this._worker = worker;
this._type = type;
this._text = text;
this._args = args;
@@ -32,6 +33,9 @@ class ConsoleMessage {
page() {
return this._page;
}
worker() {
return this._worker;
}
type() {
return this._type;
}

0
node_modules/playwright-core/lib/server/cookieStore.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/debugController.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/debugger.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/deviceDescriptors.js generated vendored Normal file → Executable file
View File

112
node_modules/playwright-core/lib/server/deviceDescriptorsSource.json generated vendored Normal file → Executable file
View File

@@ -110,7 +110,7 @@
"defaultBrowserType": "webkit"
},
"Galaxy S5": {
"userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 360,
"height": 640
@@ -121,7 +121,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S5 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 640,
"height": 360
@@ -132,7 +132,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S8": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 360,
"height": 740
@@ -143,7 +143,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S8 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 740,
"height": 360
@@ -154,7 +154,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S9+": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 320,
"height": 658
@@ -165,7 +165,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S9+ landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 658,
"height": 320
@@ -176,7 +176,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S24": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-S921U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-S921U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 360,
"height": 780
@@ -187,7 +187,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy S24 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-S921U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-S921U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 780,
"height": 360
@@ -198,7 +198,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy A55": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-A556B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-A556B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 480,
"height": 1040
@@ -209,7 +209,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy A55 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-A556B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-A556B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 1040,
"height": 480
@@ -220,7 +220,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy Tab S4": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 712,
"height": 1138
@@ -231,7 +231,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy Tab S4 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 1138,
"height": 712
@@ -242,7 +242,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy Tab S9": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 640,
"height": 1024
@@ -253,7 +253,7 @@
"defaultBrowserType": "chromium"
},
"Galaxy Tab S9 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 1024,
"height": 640
@@ -1208,7 +1208,7 @@
"defaultBrowserType": "webkit"
},
"LG Optimus L70": {
"userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 384,
"height": 640
@@ -1219,7 +1219,7 @@
"defaultBrowserType": "chromium"
},
"LG Optimus L70 landscape": {
"userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 640,
"height": 384
@@ -1230,7 +1230,7 @@
"defaultBrowserType": "chromium"
},
"Microsoft Lumia 550": {
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36 Edge/14.14263",
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36 Edge/14.14263",
"viewport": {
"width": 360,
"height": 640
@@ -1241,7 +1241,7 @@
"defaultBrowserType": "chromium"
},
"Microsoft Lumia 550 landscape": {
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36 Edge/14.14263",
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36 Edge/14.14263",
"viewport": {
"width": 640,
"height": 360
@@ -1252,7 +1252,7 @@
"defaultBrowserType": "chromium"
},
"Microsoft Lumia 950": {
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36 Edge/14.14263",
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36 Edge/14.14263",
"viewport": {
"width": 360,
"height": 640
@@ -1263,7 +1263,7 @@
"defaultBrowserType": "chromium"
},
"Microsoft Lumia 950 landscape": {
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36 Edge/14.14263",
"userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36 Edge/14.14263",
"viewport": {
"width": 640,
"height": 360
@@ -1274,7 +1274,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 10": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 800,
"height": 1280
@@ -1285,7 +1285,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 10 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 1280,
"height": 800
@@ -1296,7 +1296,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 4": {
"userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 384,
"height": 640
@@ -1307,7 +1307,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 4 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 640,
"height": 384
@@ -1318,7 +1318,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 5": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 360,
"height": 640
@@ -1329,7 +1329,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 5 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 640,
"height": 360
@@ -1340,7 +1340,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 5X": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 412,
"height": 732
@@ -1351,7 +1351,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 5X landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 732,
"height": 412
@@ -1362,7 +1362,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 6": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 412,
"height": 732
@@ -1373,7 +1373,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 6 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 732,
"height": 412
@@ -1384,7 +1384,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 6P": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 412,
"height": 732
@@ -1395,7 +1395,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 6P landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 732,
"height": 412
@@ -1406,7 +1406,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 7": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 600,
"height": 960
@@ -1417,7 +1417,7 @@
"defaultBrowserType": "chromium"
},
"Nexus 7 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"viewport": {
"width": 960,
"height": 600
@@ -1472,7 +1472,7 @@
"defaultBrowserType": "webkit"
},
"Pixel 2": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 411,
"height": 731
@@ -1483,7 +1483,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 2 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 731,
"height": 411
@@ -1494,7 +1494,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 2 XL": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 411,
"height": 823
@@ -1505,7 +1505,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 2 XL landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 823,
"height": 411
@@ -1516,7 +1516,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 3": {
"userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 393,
"height": 786
@@ -1527,7 +1527,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 3 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 786,
"height": 393
@@ -1538,7 +1538,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 4": {
"userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 353,
"height": 745
@@ -1549,7 +1549,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 4 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 745,
"height": 353
@@ -1560,7 +1560,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 4a (5G)": {
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"width": 412,
"height": 892
@@ -1575,7 +1575,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 4a (5G) landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"height": 892,
"width": 412
@@ -1590,7 +1590,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 5": {
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"width": 393,
"height": 851
@@ -1605,7 +1605,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 5 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"width": 851,
"height": 393
@@ -1620,7 +1620,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 7": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"width": 412,
"height": 915
@@ -1635,7 +1635,7 @@
"defaultBrowserType": "chromium"
},
"Pixel 7 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"screen": {
"width": 915,
"height": 412
@@ -1650,7 +1650,7 @@
"defaultBrowserType": "chromium"
},
"Moto G4": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 360,
"height": 640
@@ -1661,7 +1661,7 @@
"defaultBrowserType": "chromium"
},
"Moto G4 landscape": {
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Mobile Safari/537.36",
"userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Mobile Safari/537.36",
"viewport": {
"width": 640,
"height": 360
@@ -1672,7 +1672,7 @@
"defaultBrowserType": "chromium"
},
"Desktop Chrome HiDPI": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"screen": {
"width": 1792,
"height": 1120
@@ -1687,7 +1687,7 @@
"defaultBrowserType": "chromium"
},
"Desktop Edge HiDPI": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36 Edg/141.0.7390.37",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36 Edg/143.0.7499.4",
"screen": {
"width": 1792,
"height": 1120
@@ -1702,7 +1702,7 @@
"defaultBrowserType": "chromium"
},
"Desktop Firefox HiDPI": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0.1) Gecko/20100101 Firefox/142.0.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0.2) Gecko/20100101 Firefox/144.0.2",
"screen": {
"width": 1792,
"height": 1120
@@ -1732,7 +1732,7 @@
"defaultBrowserType": "webkit"
},
"Desktop Chrome": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36",
"screen": {
"width": 1920,
"height": 1080
@@ -1747,7 +1747,7 @@
"defaultBrowserType": "chromium"
},
"Desktop Edge": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.7390.37 Safari/537.36 Edg/141.0.7390.37",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.7499.4 Safari/537.36 Edg/143.0.7499.4",
"screen": {
"width": 1920,
"height": 1080
@@ -1762,7 +1762,7 @@
"defaultBrowserType": "chromium"
},
"Desktop Firefox": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0.1) Gecko/20100101 Firefox/142.0.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0.2) Gecko/20100101 Firefox/144.0.2",
"screen": {
"width": 1920,
"height": 1080

0
node_modules/playwright-core/lib/server/dialog.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js generated vendored Normal file → Executable file
View File

29
node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js generated vendored Normal file → Executable file
View File

@@ -38,6 +38,7 @@ var import_artifactDispatcher = require("./artifactDispatcher");
var import_cdpSessionDispatcher = require("./cdpSessionDispatcher");
var import_dialogDispatcher = require("./dialogDispatcher");
var import_dispatcher = require("./dispatcher");
var import_frameDispatcher = require("./frameDispatcher");
var import_networkDispatchers = require("./networkDispatchers");
var import_pageDispatcher = require("./pageDispatcher");
var import_crBrowser = require("../chromium/crBrowser");
@@ -49,6 +50,8 @@ var import_crypto = require("../utils/crypto");
var import_urlMatch = require("../../utils/isomorphic/urlMatch");
var import_recorder = require("../recorder");
var import_recorderApp = require("../recorder/recorderApp");
var import_elementHandlerDispatcher = require("./elementHandlerDispatcher");
var import_jsHandleDispatcher = require("./jsHandleDispatcher");
class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
constructor(parentScope, context) {
const requestContext = import_networkDispatchers.APIRequestContextDispatcher.from(parentScope, context.fetchRequest);
@@ -102,12 +105,13 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
this._dispatchEvent("pageError", { error: (0, import_errors.serializeError)(error), page: import_pageDispatcher.PageDispatcher.from(this, page) });
});
this.addObjectListener(import_browserContext.BrowserContext.Events.Console, (message) => {
const page = message.page();
if (this._shouldDispatchEvent(page, "console")) {
const pageDispatcher = import_pageDispatcher.PageDispatcher.from(this, page);
const pageDispatcher = import_pageDispatcher.PageDispatcher.fromNullable(this, message.page());
const workerDispatcher = import_pageDispatcher.WorkerDispatcher.fromNullable(this, message.worker());
if (this._shouldDispatchEvent(message.page(), "console") || workerDispatcher?._subscriptions.has("console")) {
this._dispatchEvent("console", {
page: pageDispatcher,
...pageDispatcher.serializeConsoleMessage(message)
worker: workerDispatcher,
...this.serializeConsoleMessage(message, workerDispatcher || pageDispatcher)
});
}
});
@@ -118,7 +122,7 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
return true;
};
context.dialogManager.addDialogHandler(this._dialogHandler);
if (context._browser.options.name === "chromium") {
if (context._browser.options.name === "chromium" && this._object._browser instanceof import_crBrowser.CRBrowser) {
for (const serviceWorker of context.serviceWorkers())
this._dispatchEvent("serviceWorker", { worker: new import_pageDispatcher.WorkerDispatcher(this, serviceWorker) });
this.addObjectListener(import_crBrowser.CRBrowserContext.CREvents.ServiceWorker, (serviceWorker) => this._dispatchEvent("serviceWorker", { worker: new import_pageDispatcher.WorkerDispatcher(this, serviceWorker) }));
@@ -183,6 +187,19 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
return true;
return false;
}
serializeConsoleMessage(message, jsScope) {
return {
type: message.type(),
text: message.text(),
args: message.args().map((a) => {
const elementHandle = a.asElement();
if (elementHandle)
return import_elementHandlerDispatcher.ElementHandleDispatcher.from(import_frameDispatcher.FrameDispatcher.from(this, elementHandle._frame), elementHandle);
return import_jsHandleDispatcher.JSHandleDispatcher.fromJSHandle(jsScope, a);
}),
location: message.location()
};
}
async createTempFiles(params, progress) {
const dir = this._context._browser.options.artifactsDir;
const tmpDir = import_path.default.join(dir, "upload-" + (0, import_crypto.createGuid)());
@@ -277,7 +294,7 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
await import_recorderApp.RecorderApp.show(this._context, params);
}
async disableRecorder(params, progress) {
const recorder = import_recorder.Recorder.existingForContext(this._context);
const recorder = await import_recorder.Recorder.existingForContext(this._context);
if (recorder)
recorder.setMode("none");
}

0
node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/dispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js generated vendored Normal file → Executable file
View File

32
node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js generated vendored Normal file → Executable file
View File

@@ -103,19 +103,6 @@ class PageDispatcher extends import_dispatcher.Dispatcher {
page() {
return this._page;
}
serializeConsoleMessage(message) {
return {
type: message.type(),
text: message.text(),
args: message.args().map((a) => {
const elementHandle = a.asElement();
if (elementHandle)
return import_elementHandlerDispatcher.ElementHandleDispatcher.from(import_frameDispatcher.FrameDispatcher.from(this.parentScope(), elementHandle._frame), elementHandle);
return import_jsHandleDispatcher.JSHandleDispatcher.fromJSHandle(this, a);
}),
location: message.location()
};
}
async exposeBinding(params, progress) {
const binding = await this._page.exposeBinding(progress, params.name, !!params.needsHandle, (source, ...args) => {
if (this._disposed)
@@ -237,7 +224,7 @@ class PageDispatcher extends import_dispatcher.Dispatcher {
}
async consoleMessages(params, progress) {
this._subscriptions.add("console");
return { messages: this._page.consoleMessages().map((message) => this.serializeConsoleMessage(message)) };
return { messages: this._page.consoleMessages().map((message) => this.parentScope().serializeConsoleMessage(message, this)) };
}
async pageErrors(params, progress) {
return { errors: this._page.pageErrors().map((error) => (0, import_errors.serializeError)(error)) };
@@ -265,13 +252,6 @@ class PageDispatcher extends import_dispatcher.Dispatcher {
progress.metadata.point = { x: params.x, y: params.y };
await this._page.touchscreen.tap(progress, params.x, params.y);
}
async accessibilitySnapshot(params, progress) {
const rootAXNode = await progress.race(this._page.accessibility.snapshot({
interestingOnly: params.interestingOnly,
root: params.root ? params.root._elementHandle : void 0
}));
return { rootAXNode: rootAXNode || void 0 };
}
async pdf(params, progress) {
if (!this._page.pdf)
throw new Error("PDF generation is only supported for Headless Chromium");
@@ -283,7 +263,7 @@ class PageDispatcher extends import_dispatcher.Dispatcher {
return { requests: this._page.networkRequests().map((request) => import_networkDispatchers.RequestDispatcher.from(this.parentScope(), request)) };
}
async snapshotForAI(params, progress) {
return { snapshot: await this._page.snapshotForAI(progress) };
return await this._page.snapshotForAI(progress, params);
}
async bringToFront(params, progress) {
await progress.race(this._page.bringToFront());
@@ -351,6 +331,8 @@ class WorkerDispatcher extends import_dispatcher.Dispatcher {
url: worker.url
});
this._type_Worker = true;
this._type_EventTarget = true;
this._subscriptions = /* @__PURE__ */ new Set();
this.addObjectListener(import_page.Worker.Events.Close, () => this._dispatchEvent("close"));
}
static fromNullable(scope, worker) {
@@ -365,6 +347,12 @@ class WorkerDispatcher extends import_dispatcher.Dispatcher {
async evaluateExpressionHandle(params, progress) {
return { handle: import_jsHandleDispatcher.JSHandleDispatcher.fromJSHandle(this, await progress.race(this._object.evaluateExpressionHandle(params.expression, params.isFunction, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
}
async updateSubscription(params, progress) {
if (params.enabled)
this._subscriptions.add(params.event);
else
this._subscriptions.delete(params.event);
}
}
class BindingCallDispatcher extends import_dispatcher.Dispatcher {
constructor(scope, name, needsHandle, source, args) {

4
node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js generated vendored Normal file → Executable file
View File

@@ -39,15 +39,11 @@ class PlaywrightDispatcher extends import_dispatcher.Dispatcher {
const chromium = new import_browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.chromium, denyLaunch);
const firefox = new import_browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.firefox, denyLaunch);
const webkit = new import_browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.webkit, denyLaunch);
const _bidiChromium = new import_browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright._bidiChromium, denyLaunch);
const _bidiFirefox = new import_browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright._bidiFirefox, denyLaunch);
const android = new import_androidDispatcher.AndroidDispatcher(scope, playwright.android);
const initializer = {
chromium,
firefox,
webkit,
_bidiChromium,
_bidiFirefox,
android,
electron: new import_electronDispatcher.ElectronDispatcher(scope, playwright.electron, denyLaunch),
utils: playwright.options.isServer ? void 0 : new import_localUtilsDispatcher.LocalUtilsDispatcher(scope, playwright),

0
node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/webSocketRouteDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/dom.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/download.js generated vendored Normal file → Executable file
View File

2
node_modules/playwright-core/lib/server/electron/electron.js generated vendored Normal file → Executable file
View File

@@ -97,7 +97,7 @@ class ElectronApplication extends import_instrumentation.SdkObject {
if (!this._nodeExecutionContext)
return;
const args = event.args.map((arg) => (0, import_crExecutionContext.createHandle)(this._nodeExecutionContext, arg));
const message = new import_console.ConsoleMessage(null, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
const message = new import_console.ConsoleMessage(null, null, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
this.emit(ElectronApplication.Events.Console, message);
}
async initialize() {

0
node_modules/playwright-core/lib/server/electron/loader.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/errors.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/fetch.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/fileChooser.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/fileUploadUtils.js generated vendored Normal file → Executable file
View File

View File

@@ -1,238 +0,0 @@
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var ffAccessibility_exports = {};
__export(ffAccessibility_exports, {
getAccessibilityTree: () => getAccessibilityTree
});
module.exports = __toCommonJS(ffAccessibility_exports);
async function getAccessibilityTree(session, needle) {
const objectId = needle ? needle._objectId : void 0;
const { tree } = await session.send("Accessibility.getFullAXTree", { objectId });
const axNode = new FFAXNode(tree);
return {
tree: axNode,
needle: needle ? axNode._findNeedle() : null
};
}
const FFRoleToARIARole = new Map(Object.entries({
"pushbutton": "button",
"checkbutton": "checkbox",
"editcombobox": "combobox",
"content deletion": "deletion",
"footnote": "doc-footnote",
"non-native document": "document",
"grouping": "group",
"graphic": "img",
"content insertion": "insertion",
"animation": "marquee",
"flat equation": "math",
"menupopup": "menu",
"check menu item": "menuitemcheckbox",
"radio menu item": "menuitemradio",
"listbox option": "option",
"radiobutton": "radio",
"statusbar": "status",
"pagetab": "tab",
"pagetablist": "tablist",
"propertypage": "tabpanel",
"entry": "textbox",
"outline": "tree",
"tree table": "treegrid",
"outlineitem": "treeitem"
}));
class FFAXNode {
constructor(payload) {
this._payload = payload;
this._children = (payload.children || []).map((x) => new FFAXNode(x));
this._editable = !!payload.editable;
this._richlyEditable = this._editable && (payload.tag !== "textarea" && payload.tag !== "input");
this._focusable = !!payload.focusable;
this._expanded = !!payload.expanded;
this._name = this._payload.name;
this._role = this._payload.role;
}
_isPlainTextField() {
if (this._richlyEditable)
return false;
if (this._editable)
return true;
return this._role === "entry";
}
_isTextOnlyObject() {
const role = this._role;
return role === "text leaf" || role === "text" || role === "statictext";
}
_hasFocusableChild() {
if (this._cachedHasFocusableChild === void 0) {
this._cachedHasFocusableChild = false;
for (const child of this._children) {
if (child._focusable || child._hasFocusableChild()) {
this._cachedHasFocusableChild = true;
break;
}
}
}
return this._cachedHasFocusableChild;
}
children() {
return this._children;
}
_findNeedle() {
if (this._payload.foundObject)
return this;
for (const child of this._children) {
const found = child._findNeedle();
if (found)
return found;
}
return null;
}
isLeafNode() {
if (!this._children.length)
return true;
if (this._isPlainTextField() || this._isTextOnlyObject())
return true;
switch (this._role) {
case "graphic":
case "scrollbar":
case "slider":
case "separator":
case "progressbar":
return true;
default:
break;
}
if (this._hasFocusableChild())
return false;
if (this._focusable && this._role !== "document" && this._name)
return true;
if (this._role === "heading" && this._name)
return true;
return false;
}
isControl() {
switch (this._role) {
case "checkbutton":
case "check menu item":
case "check rich option":
case "combobox":
case "combobox option":
case "color chooser":
case "listbox":
case "listbox option":
case "listbox rich option":
case "popup menu":
case "menupopup":
case "menuitem":
case "menubar":
case "button":
case "pushbutton":
case "radiobutton":
case "radio menuitem":
case "scrollbar":
case "slider":
case "spinbutton":
case "switch":
case "pagetab":
case "entry":
case "tree table":
return true;
default:
return false;
}
}
isInteresting(insideControl) {
if (this._focusable || this._richlyEditable)
return true;
if (this.isControl())
return true;
if (insideControl)
return false;
return this.isLeafNode() && !!this._name.trim();
}
serialize() {
const node = {
role: FFRoleToARIARole.get(this._role) || this._role,
name: this._name || ""
};
const userStringProperties = [
"name",
"description",
"roledescription",
"valuetext",
"keyshortcuts"
];
for (const userStringProperty of userStringProperties) {
if (!(userStringProperty in this._payload))
continue;
node[userStringProperty] = this._payload[userStringProperty];
}
const booleanProperties = [
"disabled",
"expanded",
"focused",
"modal",
"multiline",
"multiselectable",
"readonly",
"required",
"selected"
];
for (const booleanProperty of booleanProperties) {
if (this._role === "document" && booleanProperty === "focused")
continue;
const value = this._payload[booleanProperty];
if (!value)
continue;
node[booleanProperty] = value;
}
const numericalProperties = [
"level"
];
for (const numericalProperty of numericalProperties) {
if (!(numericalProperty in this._payload))
continue;
node[numericalProperty] = this._payload[numericalProperty];
}
const tokenProperties = [
"autocomplete",
"haspopup",
"orientation"
];
for (const tokenProperty of tokenProperties) {
const value = this._payload[tokenProperty];
if (!value || value === "false")
continue;
node[tokenProperty] = value;
}
const axNode = node;
axNode.valueString = this._payload.value;
if ("checked" in this._payload)
axNode.checked = this._payload.checked === true ? "checked" : this._payload.checked === "mixed" ? "mixed" : "unchecked";
if ("pressed" in this._payload)
axNode.pressed = this._payload.pressed === true ? "pressed" : "released";
if ("invalid" in this._payload)
axNode.invalid = this._payload.invalid === true ? "true" : "false";
return axNode;
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getAccessibilityTree
});

0
node_modules/playwright-core/lib/server/firefox/ffBrowser.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/firefox/ffConnection.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/firefox/ffInput.js generated vendored Normal file → Executable file
View File

0
node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js generated vendored Normal file → Executable file
View File

9
node_modules/playwright-core/lib/server/firefox/ffPage.js generated vendored Normal file → Executable file
View File

@@ -37,7 +37,6 @@ var dialog = __toESM(require("../dialog"));
var dom = __toESM(require("../dom"));
var import_page = require("../page");
var import_page2 = require("../page");
var import_ffAccessibility = require("./ffAccessibility");
var import_ffConnection = require("./ffConnection");
var import_ffExecutionContext = require("./ffExecutionContext");
var import_ffInput = require("./ffInput");
@@ -201,7 +200,7 @@ class FFPage {
const context = this._contextIdToContext.get(executionContextId);
if (!context)
return;
this._page.addConsoleMessage(type === "warn" ? "warning" : type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
this._page.addConsoleMessage(null, type === "warn" ? "warning" : type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
}
_onDialogOpened(params) {
this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(
@@ -246,11 +245,12 @@ class FFPage {
this._page.addWorker(workerId, worker);
workerSession.once("Runtime.executionContextCreated", (event2) => {
worker.createExecutionContext(new import_ffExecutionContext.FFExecutionContext(workerSession, event2.executionContextId));
worker.workerScriptLoaded();
});
workerSession.on("Runtime.console", (event2) => {
const { type, args, location } = event2;
const context = worker.existingExecutionContext;
this._page.addConsoleMessage(type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
this._page.addConsoleMessage(worker, type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
});
}
_onWorkerDestroyed(event) {
@@ -468,9 +468,6 @@ class FFPage {
throw new Error(dom.kUnableToAdoptErrorMessage);
return (0, import_ffExecutionContext.createHandle)(to, result.remoteObject);
}
async getAccessibilityTree(needle) {
return (0, import_ffAccessibility.getAccessibilityTree)(this._session, needle);
}
async inputActionEpilogue() {
}
async resetForReuse(progress) {

13
node_modules/playwright-core/lib/server/firefox/firefox.js generated vendored Normal file → Executable file
View File

@@ -39,8 +39,19 @@ var import_ascii = require("../utils/ascii");
var import_browserType = require("../browserType");
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
class Firefox extends import_browserType.BrowserType {
constructor(parent) {
constructor(parent, bidiFirefox) {
super(parent, "firefox");
this._bidiFirefox = bidiFirefox;
}
launch(progress, options, protocolLogger) {
if (options.channel?.startsWith("moz-"))
return this._bidiFirefox.launch(progress, options, protocolLogger);
return super.launch(progress, options, protocolLogger);
}
async launchPersistentContext(progress, userDataDir, options) {
if (options.channel?.startsWith("moz-"))
return this._bidiFirefox.launchPersistentContext(progress, userDataDir, options);
return super.launchPersistentContext(progress, userDataDir, options);
}
connectToTransport(transport, options) {
return import_ffBrowser.FFBrowser.connect(this.attribution.playwright, transport, options);

0
node_modules/playwright-core/lib/server/firefox/protocol.d.js generated vendored Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More