playwright-core 1.56.0-alpha-2025-09-08 → 1.56.0-alpha-1757456950000
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/bin/install_webkit_wsl.ps1 +35 -0
- package/browsers.json +10 -10
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/server/bidi/bidiBrowser.js +6 -0
- package/lib/server/bidi/bidiChromium.js +1 -1
- package/lib/server/bidi/bidiFirefox.js +1 -1
- package/lib/server/bidi/bidiNetworkManager.js +54 -3
- package/lib/server/bidi/bidiPage.js +38 -0
- package/lib/server/browserType.js +3 -3
- package/lib/server/chromium/chromium.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +54 -54
- package/lib/server/firefox/firefox.js +1 -1
- package/lib/server/registry/index.js +27 -0
- package/lib/server/webkit/webkit.js +24 -8
- package/lib/server/webkit/wkBrowser.js +3 -2
- package/lib/server/webkit/wkPage.js +4 -1
- package/lib/server/webkit/wsl/webkit-wsl-transport-client.js +74 -0
- package/lib/server/webkit/wsl/webkit-wsl-transport-server.js +113 -0
- package/lib/vite/traceViewer/assets/{codeMirrorModule-DGbxHDST.js → codeMirrorModule-B4W0Uhec.js} +1 -1
- package/lib/vite/traceViewer/assets/{defaultSettingsView-O-FwlkAx.js → defaultSettingsView-BJRKCgaF.js} +111 -111
- package/lib/vite/traceViewer/{index.DRGQ-a-u.js → index.BPJJi9h8.js} +1 -1
- package/lib/vite/traceViewer/index.html +2 -2
- package/lib/vite/traceViewer/{uiMode.Dzulv6q5.js → uiMode.BfbpAk7n.js} +1 -1
- package/lib/vite/traceViewer/uiMode.html +2 -2
- package/package.json +1 -1
- package/types/protocol.d.ts +7084 -6870
|
@@ -189,6 +189,12 @@ class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
|
189
189
|
userContexts: [this._userContextId()]
|
|
190
190
|
}));
|
|
191
191
|
}
|
|
192
|
+
if (this._options.timezoneId) {
|
|
193
|
+
promises.push(this._browser._browserSession.send("emulation.setTimezoneOverride", {
|
|
194
|
+
timezone: this._options.timezoneId,
|
|
195
|
+
userContexts: [this._userContextId()]
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
192
198
|
await Promise.all(promises);
|
|
193
199
|
}
|
|
194
200
|
possiblyUninitializedPages() {
|
|
@@ -86,7 +86,7 @@ class BidiChromium extends import_browserType.BrowserType {
|
|
|
86
86
|
supportsPipeTransport() {
|
|
87
87
|
return false;
|
|
88
88
|
}
|
|
89
|
-
defaultArgs(options, isPersistent, userDataDir) {
|
|
89
|
+
async defaultArgs(options, isPersistent, userDataDir) {
|
|
90
90
|
const chromeArguments = this._innerDefaultArgs(options);
|
|
91
91
|
chromeArguments.push(`--user-data-dir=${userDataDir}`);
|
|
92
92
|
chromeArguments.push("--remote-debugging-port=0");
|
|
@@ -85,7 +85,7 @@ Workaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ?
|
|
|
85
85
|
preferences: options.firefoxUserPrefs || {}
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
|
-
defaultArgs(options, isPersistent, userDataDir) {
|
|
88
|
+
async defaultArgs(options, isPersistent, userDataDir) {
|
|
89
89
|
const { args = [], headless } = options;
|
|
90
90
|
const userDataDirArg = args.find((arg) => arg.startsWith("-profile") || arg.startsWith("--profile"));
|
|
91
91
|
if (userDataDirArg)
|
|
@@ -148,7 +148,7 @@ class BidiNetworkManager {
|
|
|
148
148
|
_onAuthRequired(params) {
|
|
149
149
|
const isBasic = params.response.authChallenges?.some((challenge) => challenge.scheme.startsWith("Basic"));
|
|
150
150
|
const credentials = this._page.browserContext._options.httpCredentials;
|
|
151
|
-
if (isBasic && credentials) {
|
|
151
|
+
if (isBasic && credentials && (!credentials.origin || new URL(params.request.url).origin.toLowerCase() === credentials.origin.toLowerCase())) {
|
|
152
152
|
if (this._attemptedAuthentications.has(params.request.request)) {
|
|
153
153
|
this._session.sendMayFail("network.continueWithAuth", {
|
|
154
154
|
request: params.request.request,
|
|
@@ -169,7 +169,7 @@ class BidiNetworkManager {
|
|
|
169
169
|
} else {
|
|
170
170
|
this._session.sendMayFail("network.continueWithAuth", {
|
|
171
171
|
request: params.request.request,
|
|
172
|
-
action: "
|
|
172
|
+
action: "cancel"
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -222,7 +222,7 @@ class BidiRequest {
|
|
|
222
222
|
redirectedFrom ? redirectedFrom.request : null,
|
|
223
223
|
payload.navigation ?? void 0,
|
|
224
224
|
payload.request.url,
|
|
225
|
-
|
|
225
|
+
resourceTypeFromBidi(payload.request.destination, payload.request.initiatorType, payload.initiator?.type),
|
|
226
226
|
payload.request.method,
|
|
227
227
|
postDataBuffer,
|
|
228
228
|
fromBidiHeaders(payload.request.headers)
|
|
@@ -323,6 +323,57 @@ function toBidiSameSite(sameSite) {
|
|
|
323
323
|
return bidi.Network.SameSite.Lax;
|
|
324
324
|
return bidi.Network.SameSite.None;
|
|
325
325
|
}
|
|
326
|
+
function resourceTypeFromBidi(requestDestination, requestInitiatorType, eventInitiatorType) {
|
|
327
|
+
switch (requestDestination) {
|
|
328
|
+
case "audio":
|
|
329
|
+
return "media";
|
|
330
|
+
case "audioworklet":
|
|
331
|
+
return "script";
|
|
332
|
+
case "document":
|
|
333
|
+
return "document";
|
|
334
|
+
case "font":
|
|
335
|
+
return "font";
|
|
336
|
+
case "frame":
|
|
337
|
+
return "document";
|
|
338
|
+
case "iframe":
|
|
339
|
+
return "document";
|
|
340
|
+
case "image":
|
|
341
|
+
return "image";
|
|
342
|
+
case "object":
|
|
343
|
+
return "object";
|
|
344
|
+
case "paintworklet":
|
|
345
|
+
return "script";
|
|
346
|
+
case "script":
|
|
347
|
+
return "script";
|
|
348
|
+
case "serviceworker":
|
|
349
|
+
return "script";
|
|
350
|
+
case "sharedworker":
|
|
351
|
+
return "script";
|
|
352
|
+
case "style":
|
|
353
|
+
return "stylesheet";
|
|
354
|
+
case "track":
|
|
355
|
+
return "texttrack";
|
|
356
|
+
case "video":
|
|
357
|
+
return "media";
|
|
358
|
+
case "worker":
|
|
359
|
+
return "script";
|
|
360
|
+
case "":
|
|
361
|
+
switch (requestInitiatorType) {
|
|
362
|
+
case "fetch":
|
|
363
|
+
return "fetch";
|
|
364
|
+
case "font":
|
|
365
|
+
return "font";
|
|
366
|
+
case "xmlhttprequest":
|
|
367
|
+
return "xhr";
|
|
368
|
+
case null:
|
|
369
|
+
return eventInitiatorType === "script" ? "xhr" : "document";
|
|
370
|
+
default:
|
|
371
|
+
return "other";
|
|
372
|
+
}
|
|
373
|
+
default:
|
|
374
|
+
return "other";
|
|
375
|
+
}
|
|
376
|
+
}
|
|
326
377
|
// Annotate the CommonJS export names for ESM import in node:
|
|
327
378
|
0 && (module.exports = {
|
|
328
379
|
BidiNetworkManager,
|
|
@@ -36,6 +36,7 @@ var import_eventsHelper = require("../utils/eventsHelper");
|
|
|
36
36
|
var dialog = __toESM(require("../dialog"));
|
|
37
37
|
var dom = __toESM(require("../dom"));
|
|
38
38
|
var import_page = require("../page");
|
|
39
|
+
var import_bidiBrowser = require("./bidiBrowser");
|
|
39
40
|
var import_bidiExecutionContext = require("./bidiExecutionContext");
|
|
40
41
|
var import_bidiInput = require("./bidiInput");
|
|
41
42
|
var import_bidiNetworkManager = require("./bidiNetworkManager");
|
|
@@ -70,6 +71,8 @@ class BidiPage {
|
|
|
70
71
|
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.historyUpdated", this._onHistoryUpdated.bind(this)),
|
|
71
72
|
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.domContentLoaded", this._onDomContentLoaded.bind(this)),
|
|
72
73
|
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.load", this._onLoad.bind(this)),
|
|
74
|
+
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.downloadWillBegin", this._onDownloadWillBegin.bind(this)),
|
|
75
|
+
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.downloadEnd", this._onDownloadEnded.bind(this)),
|
|
73
76
|
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "browsingContext.userPromptOpened", this._onUserPromptOpened.bind(this)),
|
|
74
77
|
import_eventsHelper.eventsHelper.addEventListener(bidiSession, "log.entryAdded", this._onLogEntryAdded.bind(this))
|
|
75
78
|
];
|
|
@@ -198,7 +201,42 @@ class BidiPage {
|
|
|
198
201
|
event.defaultValue
|
|
199
202
|
));
|
|
200
203
|
}
|
|
204
|
+
_onDownloadWillBegin(event) {
|
|
205
|
+
if (!event.navigation)
|
|
206
|
+
return;
|
|
207
|
+
let originPage = this._page.initializedOrUndefined();
|
|
208
|
+
if (!originPage && this._opener)
|
|
209
|
+
originPage = this._opener._page.initializedOrUndefined();
|
|
210
|
+
if (!originPage)
|
|
211
|
+
return;
|
|
212
|
+
this._browserContext._browser._downloadCreated(originPage, event.navigation, event.url, event.suggestedFilename);
|
|
213
|
+
}
|
|
214
|
+
_onDownloadEnded(event) {
|
|
215
|
+
if (!event.navigation)
|
|
216
|
+
return;
|
|
217
|
+
this._browserContext._browser._downloadFinished(event.navigation, event.status === "canceled" ? "canceled" : void 0);
|
|
218
|
+
}
|
|
201
219
|
_onLogEntryAdded(params) {
|
|
220
|
+
if (params.type === "javascript" && params.level === "error") {
|
|
221
|
+
let errorName = "";
|
|
222
|
+
let errorMessage;
|
|
223
|
+
if (params.text?.includes(": ")) {
|
|
224
|
+
const index = params.text.indexOf(": ");
|
|
225
|
+
errorName = params.text.substring(0, index);
|
|
226
|
+
errorMessage = params.text.substring(index + 2);
|
|
227
|
+
} else {
|
|
228
|
+
errorMessage = params.text ?? void 0;
|
|
229
|
+
}
|
|
230
|
+
const error = new Error(errorMessage);
|
|
231
|
+
error.name = errorName;
|
|
232
|
+
error.stack = `${params.text}
|
|
233
|
+
${params.stackTrace?.callFrames.map((f) => {
|
|
234
|
+
const location2 = `${f.url}:${f.lineNumber + 1}:${f.columnNumber + 1}`;
|
|
235
|
+
return f.functionName ? ` at ${f.functionName} (${location2})` : ` at ${location2}`;
|
|
236
|
+
}).join("\n")}`;
|
|
237
|
+
this._page.emitOnContextOnceInitialized(import_bidiBrowser.BidiBrowserContext.Events.PageError, error, this._page);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
202
240
|
if (params.type !== "console")
|
|
203
241
|
return;
|
|
204
242
|
const entry = params;
|
|
@@ -169,9 +169,9 @@ class BrowserType extends import_instrumentation.SdkObject {
|
|
|
169
169
|
if (ignoreAllDefaultArgs)
|
|
170
170
|
browserArguments.push(...args);
|
|
171
171
|
else if (ignoreDefaultArgs)
|
|
172
|
-
browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter((arg) => ignoreDefaultArgs.indexOf(arg) === -1));
|
|
172
|
+
browserArguments.push(...(await this.defaultArgs(options, isPersistent, userDataDir)).filter((arg) => ignoreDefaultArgs.indexOf(arg) === -1));
|
|
173
173
|
else
|
|
174
|
-
browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));
|
|
174
|
+
browserArguments.push(...await this.defaultArgs(options, isPersistent, userDataDir));
|
|
175
175
|
let executable;
|
|
176
176
|
if (executablePath) {
|
|
177
177
|
if (!await (0, import_fileUtils.existsAsync)(executablePath))
|
|
@@ -200,7 +200,7 @@ class BrowserType extends import_instrumentation.SdkObject {
|
|
|
200
200
|
const { launchedProcess, gracefullyClose, kill } = await (0, import_processLauncher.launchProcess)({
|
|
201
201
|
command: prepared.executable,
|
|
202
202
|
args: prepared.browserArguments,
|
|
203
|
-
env: this.amendEnvironment(env, prepared.userDataDir, isPersistent),
|
|
203
|
+
env: this.amendEnvironment(env, prepared.userDataDir, isPersistent, options),
|
|
204
204
|
handleSIGINT,
|
|
205
205
|
handleSIGTERM,
|
|
206
206
|
handleSIGHUP,
|
|
@@ -250,7 +250,7 @@ class Chromium extends import_browserType.BrowserType {
|
|
|
250
250
|
throw e;
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
defaultArgs(options, isPersistent, userDataDir) {
|
|
253
|
+
async defaultArgs(options, isPersistent, userDataDir) {
|
|
254
254
|
const chromeArguments = this._innerDefaultArgs(options);
|
|
255
255
|
chromeArguments.push(`--user-data-dir=${userDataDir}`);
|
|
256
256
|
if (options.cdpPort !== void 0)
|