patchright-core 1.52.5 → 1.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +65 -123
- package/bin/reinstall_chrome_beta_mac.sh +1 -1
- package/bin/reinstall_chrome_stable_mac.sh +1 -1
- package/bin/reinstall_msedge_beta_mac.sh +1 -1
- package/bin/reinstall_msedge_dev_mac.sh +1 -1
- package/bin/reinstall_msedge_stable_mac.sh +1 -1
- package/browsers.json +14 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +4 -2
- package/lib/browserServerImpl.js +47 -12
- package/lib/cli/program.js +116 -50
- package/lib/cli/programWithTestStub.js +1 -1
- package/lib/client/android.js +30 -34
- package/lib/client/browser.js +54 -17
- package/lib/client/browserContext.js +67 -71
- package/lib/client/browserType.js +25 -34
- package/lib/client/channelOwner.js +20 -24
- package/lib/client/connection.js +6 -10
- package/lib/client/electron.js +8 -3
- package/lib/client/elementHandle.js +18 -21
- package/lib/client/fetch.js +5 -3
- package/lib/client/frame.js +54 -32
- package/lib/client/input.js +3 -1
- package/lib/client/jsHandle.js +4 -0
- package/lib/client/localUtils.js +0 -1
- package/lib/client/locator.js +30 -26
- package/lib/client/network.js +5 -12
- package/lib/client/page.js +32 -32
- package/lib/client/playwright.js +6 -16
- package/lib/client/selectors.js +18 -38
- package/lib/client/timeoutSettings.js +12 -8
- package/lib/client/tracing.js +24 -20
- package/lib/client/waiter.js +2 -2
- package/lib/client/webSocket.js +4 -22
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/generated/webSocketMockSource.js +12 -50
- package/lib/inProcessFactory.js +9 -6
- package/lib/outofprocess.js +0 -2
- package/lib/protocol/validator.js +421 -345
- package/lib/protocol/validatorPrimitives.js +18 -4
- package/lib/remote/playwrightConnection.js +29 -166
- package/lib/remote/playwrightServer.js +233 -35
- package/lib/server/android/android.js +97 -83
- package/lib/server/android/backendAdb.js +0 -2
- package/lib/server/bidi/bidiBrowser.js +139 -73
- package/lib/server/bidi/bidiChromium.js +23 -22
- package/lib/server/bidi/bidiExecutionContext.js +2 -1
- package/lib/server/bidi/bidiFirefox.js +17 -14
- package/lib/server/bidi/bidiInput.js +22 -22
- package/lib/server/bidi/bidiNetworkManager.js +8 -11
- package/lib/server/bidi/bidiPage.js +42 -86
- package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
- package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
- package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
- package/lib/server/browser.js +30 -21
- package/lib/server/browserContext.js +203 -165
- package/lib/server/browserType.js +109 -107
- package/lib/server/chromium/chromium.js +84 -69
- package/lib/server/chromium/chromiumSwitches.js +13 -20
- package/lib/server/chromium/crBrowser.js +74 -40
- package/lib/server/chromium/crConnection.js +8 -9
- package/lib/server/chromium/crCoverage.js +11 -8
- package/lib/server/chromium/crDragDrop.js +25 -20
- package/lib/server/chromium/crExecutionContext.js +2 -1
- package/lib/server/chromium/crInput.js +32 -29
- package/lib/server/chromium/crNetworkManager.js +43 -31
- package/lib/server/chromium/crPage.js +98 -72
- package/lib/server/chromium/crServiceWorker.js +13 -18
- package/lib/server/chromium/videoRecorder.js +10 -18
- package/lib/server/clock.js +51 -39
- package/lib/server/codegen/csharp.js +10 -5
- package/lib/server/codegen/java.js +1 -1
- package/lib/server/codegen/javascript.js +1 -1
- package/lib/server/codegen/jsonl.js +2 -1
- package/lib/server/codegen/language.js +22 -1
- package/lib/server/codegen/languages.js +4 -4
- package/lib/server/codegen/python.js +1 -1
- package/lib/server/cookieStore.js +3 -1
- package/lib/server/debugController.js +105 -71
- package/lib/server/debugger.js +6 -23
- package/lib/server/deviceDescriptorsSource.json +237 -127
- package/lib/server/dialog.js +50 -6
- package/lib/server/dispatchers/androidDispatcher.js +77 -62
- package/lib/server/dispatchers/artifactDispatcher.js +18 -18
- package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
- package/lib/server/dispatchers/browserDispatcher.js +55 -88
- package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
- package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
- package/lib/server/dispatchers/dialogDispatcher.js +4 -4
- package/lib/server/dispatchers/dispatcher.js +78 -53
- package/lib/server/dispatchers/electronDispatcher.js +19 -20
- package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
- package/lib/server/dispatchers/frameDispatcher.js +98 -101
- package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
- package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
- package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
- package/lib/server/dispatchers/networkDispatchers.js +41 -35
- package/lib/server/dispatchers/pageDispatcher.js +156 -107
- package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
- package/lib/server/dispatchers/streamDispatcher.js +15 -8
- package/lib/server/dispatchers/tracingDispatcher.js +22 -13
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
- package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
- package/lib/server/dom.js +198 -266
- package/lib/server/download.js +3 -3
- package/lib/server/electron/electron.js +96 -103
- package/lib/server/electron/loader.js +1 -1
- package/lib/server/fetch.js +22 -41
- package/lib/server/fileUploadUtils.js +1 -1
- package/lib/server/firefox/ffBrowser.js +79 -55
- package/lib/server/firefox/ffExecutionContext.js +2 -1
- package/lib/server/firefox/ffInput.js +23 -23
- package/lib/server/firefox/ffNetworkManager.js +8 -6
- package/lib/server/firefox/ffPage.js +39 -36
- package/lib/server/firefox/firefox.js +9 -10
- package/lib/server/frameSelectors.js +63 -20
- package/lib/server/frames.js +495 -555
- package/lib/server/har/harRecorder.js +1 -1
- package/lib/server/har/harTracer.js +4 -2
- package/lib/server/helper.js +3 -7
- package/lib/server/index.js +0 -3
- package/lib/server/input.js +47 -54
- package/lib/server/instrumentation.js +8 -14
- package/lib/server/javascript.js +8 -16
- package/lib/server/launchApp.js +48 -30
- package/lib/server/localUtils.js +45 -38
- package/lib/server/network.js +44 -10
- package/lib/server/page.js +232 -177
- package/lib/server/pageBinding.js +6 -7
- package/lib/server/playwright.js +4 -14
- package/lib/server/progress.js +57 -49
- package/lib/server/recorder/recorderApp.js +298 -95
- package/lib/server/recorder/recorderRunner.js +23 -24
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +67 -10
- package/lib/server/recorder.js +284 -146
- package/lib/server/registry/index.js +83 -48
- package/lib/server/registry/nativeDeps.js +175 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
- package/lib/server/screenshotter.js +84 -83
- package/lib/server/selectors.js +12 -12
- package/lib/server/socksClientCertificatesInterceptor.js +198 -136
- package/lib/server/trace/recorder/snapshotter.js +12 -19
- package/lib/server/trace/recorder/tracing.js +36 -27
- package/lib/server/trace/viewer/traceViewer.js +11 -20
- package/lib/server/transport.js +20 -22
- package/lib/server/utils/comparators.js +2 -2
- package/lib/server/utils/debug.js +3 -8
- package/lib/server/utils/debugLogger.js +8 -0
- package/lib/server/utils/hostPlatform.js +3 -1
- package/lib/server/utils/network.js +35 -25
- package/lib/server/utils/nodePlatform.js +1 -1
- package/lib/server/utils/processLauncher.js +4 -1
- package/lib/server/utils/wsServer.js +11 -17
- package/lib/server/webkit/webkit.js +5 -2
- package/lib/server/webkit/wkBrowser.js +51 -28
- package/lib/server/webkit/wkExecutionContext.js +2 -1
- package/lib/server/webkit/wkInput.js +25 -25
- package/lib/server/webkit/wkInterceptableRequest.js +1 -1
- package/lib/server/webkit/wkPage.js +80 -59
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +7 -7
- package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
- package/lib/utils/isomorphic/cssParser.js +1 -2
- package/lib/utils/isomorphic/locatorGenerators.js +18 -0
- package/lib/utils/isomorphic/manualPromise.js +1 -2
- package/lib/utils/isomorphic/mimeType.js +1 -2
- package/lib/utils/isomorphic/multimap.js +1 -2
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
- package/lib/utils/isomorphic/protocolFormatter.js +78 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
- package/lib/utils/isomorphic/selectorParser.js +3 -4
- package/lib/utils/isomorphic/stringUtils.js +3 -24
- package/lib/utils/isomorphic/time.js +9 -4
- package/lib/utils/isomorphic/timeoutRunner.js +3 -4
- package/lib/utils/isomorphic/traceUtils.js +2 -3
- package/lib/utils/isomorphic/urlMatch.js +21 -7
- package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
- package/lib/utils.js +8 -2
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/vite/htmlReport/index.html +17 -17
- package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
- package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
- package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
- package/lib/vite/recorder/index.html +3 -3
- package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
- package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
- package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
- package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
- package/lib/vite/traceViewer/index.html +6 -6
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -4
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +712 -107
- package/types/types.d.ts +128 -17
- package/lib/generated/consoleApiSource.js +0 -28
- package/lib/protocol/debug.js +0 -211
- package/lib/server/recorder/contextRecorder.js +0 -286
- package/lib/server/recorder/recorderCollection.js +0 -116
- package/lib/server/recorder/recorderFrontend.js +0 -16
- package/lib/server/storageScript.js +0 -154
- package/lib/server/timeoutSettings.js +0 -89
- package/lib/utils/isomorphic/builtins.js +0 -86
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
package/lib/server/localUtils.js
CHANGED
|
@@ -49,7 +49,7 @@ var import_zipBundle = require("../zipBundle");
|
|
|
49
49
|
var import_traceUtils = require("../utils/isomorphic/traceUtils");
|
|
50
50
|
var import_assert = require("../utils/isomorphic/assert");
|
|
51
51
|
var import_fileUtils = require("./utils/fileUtils");
|
|
52
|
-
async function zip(stackSessions, params) {
|
|
52
|
+
async function zip(progress, stackSessions, params) {
|
|
53
53
|
const promise = new import_manualPromise.ManualPromise();
|
|
54
54
|
const zipFile = new import_zipBundle.yazl.ZipFile();
|
|
55
55
|
zipFile.on("error", (error) => promise.reject(error));
|
|
@@ -64,7 +64,7 @@ async function zip(stackSessions, params) {
|
|
|
64
64
|
addFile(entry.value, entry.name);
|
|
65
65
|
const stackSession = params.stacksId ? stackSessions.get(params.stacksId) : void 0;
|
|
66
66
|
if (stackSession?.callStacks.length) {
|
|
67
|
-
await stackSession.writer;
|
|
67
|
+
await progress.race(stackSession.writer);
|
|
68
68
|
if (process.env.PW_LIVE_TRACE_STACKS) {
|
|
69
69
|
zipFile.addFile(stackSession.file, "trace.stacks");
|
|
70
70
|
} else {
|
|
@@ -84,16 +84,16 @@ async function zip(stackSessions, params) {
|
|
|
84
84
|
addFile(sourceFile, "resources/src@" + await (0, import_crypto.calculateSha1)(sourceFile) + ".txt");
|
|
85
85
|
}
|
|
86
86
|
if (params.mode === "write") {
|
|
87
|
-
await import_fs.default.promises.mkdir(import_path.default.dirname(params.zipFile), { recursive: true });
|
|
87
|
+
await progress.race(import_fs.default.promises.mkdir(import_path.default.dirname(params.zipFile), { recursive: true }));
|
|
88
88
|
zipFile.end(void 0, () => {
|
|
89
89
|
zipFile.outputStream.pipe(import_fs.default.createWriteStream(params.zipFile)).on("close", () => promise.resolve()).on("error", (error) => promise.reject(error));
|
|
90
90
|
});
|
|
91
|
-
await promise;
|
|
92
|
-
await deleteStackSession(stackSessions, params.stacksId);
|
|
91
|
+
await progress.race(promise);
|
|
92
|
+
await deleteStackSession(progress, stackSessions, params.stacksId);
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
95
|
const tempFile = params.zipFile + ".tmp";
|
|
96
|
-
await import_fs.default.promises.rename(params.zipFile, tempFile);
|
|
96
|
+
await progress.race(import_fs.default.promises.rename(params.zipFile, tempFile));
|
|
97
97
|
import_zipBundle.yauzl.open(tempFile, (err, inZipFile) => {
|
|
98
98
|
if (err) {
|
|
99
99
|
promise.reject(err);
|
|
@@ -120,74 +120,81 @@ async function zip(stackSessions, params) {
|
|
|
120
120
|
});
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
|
-
await promise;
|
|
124
|
-
await deleteStackSession(stackSessions, params.stacksId);
|
|
123
|
+
await progress.race(promise);
|
|
124
|
+
await deleteStackSession(progress, stackSessions, params.stacksId);
|
|
125
125
|
}
|
|
126
|
-
async function deleteStackSession(stackSessions, stacksId) {
|
|
126
|
+
async function deleteStackSession(progress, stackSessions, stacksId) {
|
|
127
127
|
const session = stacksId ? stackSessions.get(stacksId) : void 0;
|
|
128
128
|
if (!session)
|
|
129
129
|
return;
|
|
130
|
-
await session.writer;
|
|
131
|
-
if (session.tmpDir)
|
|
132
|
-
await (0, import_fileUtils.removeFolders)([session.tmpDir]);
|
|
133
130
|
stackSessions.delete(stacksId);
|
|
131
|
+
if (session.tmpDir)
|
|
132
|
+
await progress.race((0, import_fileUtils.removeFolders)([session.tmpDir]));
|
|
134
133
|
}
|
|
135
|
-
async function harOpen(harBackends, params) {
|
|
134
|
+
async function harOpen(progress, harBackends, params) {
|
|
136
135
|
let harBackend;
|
|
137
136
|
if (params.file.endsWith(".zip")) {
|
|
138
137
|
const zipFile = new import_zipFile.ZipFile(params.file);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
138
|
+
try {
|
|
139
|
+
const entryNames = await progress.race(zipFile.entries());
|
|
140
|
+
const harEntryName = entryNames.find((e) => e.endsWith(".har"));
|
|
141
|
+
if (!harEntryName)
|
|
142
|
+
return { error: "Specified archive does not have a .har file" };
|
|
143
|
+
const har = await progress.race(zipFile.read(harEntryName));
|
|
144
|
+
const harFile = JSON.parse(har.toString());
|
|
145
|
+
harBackend = new import_harBackend.HarBackend(harFile, null, zipFile);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
zipFile.close();
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
146
150
|
} else {
|
|
147
|
-
const harFile = JSON.parse(await import_fs.default.promises.readFile(params.file, "utf-8"));
|
|
151
|
+
const harFile = JSON.parse(await progress.race(import_fs.default.promises.readFile(params.file, "utf-8")));
|
|
148
152
|
harBackend = new import_harBackend.HarBackend(harFile, import_path.default.dirname(params.file), null);
|
|
149
153
|
}
|
|
150
154
|
harBackends.set(harBackend.id, harBackend);
|
|
151
155
|
return { harId: harBackend.id };
|
|
152
156
|
}
|
|
153
|
-
async function harLookup(harBackends, params) {
|
|
157
|
+
async function harLookup(progress, harBackends, params) {
|
|
154
158
|
const harBackend = harBackends.get(params.harId);
|
|
155
159
|
if (!harBackend)
|
|
156
160
|
return { action: "error", message: `Internal error: har was not opened` };
|
|
157
|
-
return await harBackend.lookup(params.url, params.method, params.headers, params.postData, params.isNavigationRequest);
|
|
161
|
+
return await progress.race(harBackend.lookup(params.url, params.method, params.headers, params.postData, params.isNavigationRequest));
|
|
158
162
|
}
|
|
159
|
-
|
|
163
|
+
function harClose(harBackends, params) {
|
|
160
164
|
const harBackend = harBackends.get(params.harId);
|
|
161
165
|
if (harBackend) {
|
|
162
166
|
harBackends.delete(harBackend.id);
|
|
163
167
|
harBackend.dispose();
|
|
164
168
|
}
|
|
165
169
|
}
|
|
166
|
-
async function harUnzip(params) {
|
|
170
|
+
async function harUnzip(progress, params) {
|
|
167
171
|
const dir = import_path.default.dirname(params.zipFile);
|
|
168
172
|
const zipFile = new import_zipFile.ZipFile(params.zipFile);
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
try {
|
|
174
|
+
for (const entry of await progress.race(zipFile.entries())) {
|
|
175
|
+
const buffer = await progress.race(zipFile.read(entry));
|
|
176
|
+
if (entry === "har.har")
|
|
177
|
+
await progress.race(import_fs.default.promises.writeFile(params.harFile, buffer));
|
|
178
|
+
else
|
|
179
|
+
await progress.race(import_fs.default.promises.writeFile(import_path.default.join(dir, entry), buffer));
|
|
180
|
+
}
|
|
181
|
+
await progress.race(import_fs.default.promises.unlink(params.zipFile));
|
|
182
|
+
} finally {
|
|
183
|
+
zipFile.close();
|
|
175
184
|
}
|
|
176
|
-
zipFile.close();
|
|
177
|
-
await import_fs.default.promises.unlink(params.zipFile);
|
|
178
185
|
}
|
|
179
|
-
async function tracingStarted(stackSessions, params) {
|
|
186
|
+
async function tracingStarted(progress, stackSessions, params) {
|
|
180
187
|
let tmpDir = void 0;
|
|
181
188
|
if (!params.tracesDir)
|
|
182
|
-
tmpDir = await import_fs.default.promises.mkdtemp(import_path.default.join(import_os.default.tmpdir(), "playwright-tracing-"));
|
|
189
|
+
tmpDir = await progress.race(import_fs.default.promises.mkdtemp(import_path.default.join(import_os.default.tmpdir(), "playwright-tracing-")));
|
|
183
190
|
const traceStacksFile = import_path.default.join(params.tracesDir || tmpDir, params.traceName + ".stacks");
|
|
184
191
|
stackSessions.set(traceStacksFile, { callStacks: [], file: traceStacksFile, writer: Promise.resolve(), tmpDir });
|
|
185
192
|
return { stacksId: traceStacksFile };
|
|
186
193
|
}
|
|
187
|
-
async function traceDiscarded(stackSessions, params) {
|
|
188
|
-
await deleteStackSession(stackSessions, params.stacksId);
|
|
194
|
+
async function traceDiscarded(progress, stackSessions, params) {
|
|
195
|
+
await deleteStackSession(progress, stackSessions, params.stacksId);
|
|
189
196
|
}
|
|
190
|
-
|
|
197
|
+
function addStackToTracingNoReply(stackSessions, params) {
|
|
191
198
|
for (const session of stackSessions.values()) {
|
|
192
199
|
session.callStacks.push(params.callData);
|
|
193
200
|
if (process.env.PW_LIVE_TRACE_STACKS) {
|
package/lib/server/network.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(network_exports, {
|
|
|
23
23
|
Route: () => Route,
|
|
24
24
|
WebSocket: () => WebSocket,
|
|
25
25
|
filterCookies: () => filterCookies,
|
|
26
|
+
isLocalHostname: () => isLocalHostname,
|
|
26
27
|
kMaxCookieExpiresDateInSeconds: () => kMaxCookieExpiresDateInSeconds,
|
|
27
28
|
mergeHeaders: () => mergeHeaders,
|
|
28
29
|
parseURL: () => parseURL,
|
|
@@ -50,13 +51,16 @@ function filterCookies(cookies, urls) {
|
|
|
50
51
|
continue;
|
|
51
52
|
if (!parsedURL.pathname.startsWith(c.path))
|
|
52
53
|
continue;
|
|
53
|
-
if (parsedURL.protocol !== "https:" && parsedURL.hostname
|
|
54
|
+
if (parsedURL.protocol !== "https:" && !isLocalHostname(parsedURL.hostname) && c.secure)
|
|
54
55
|
continue;
|
|
55
56
|
return true;
|
|
56
57
|
}
|
|
57
58
|
return false;
|
|
58
59
|
});
|
|
59
60
|
}
|
|
61
|
+
function isLocalHostname(hostname) {
|
|
62
|
+
return hostname === "localhost" || hostname.endsWith(".localhost");
|
|
63
|
+
}
|
|
60
64
|
const kMaxCookieExpiresDateInSeconds = 253402300799;
|
|
61
65
|
function rewriteCookies(cookies) {
|
|
62
66
|
return cookies.map((c) => {
|
|
@@ -121,16 +125,17 @@ class Request extends import_instrumentation.SdkObject {
|
|
|
121
125
|
this._failureText = failureText;
|
|
122
126
|
this._waitForResponsePromise.resolve(null);
|
|
123
127
|
}
|
|
124
|
-
|
|
125
|
-
this._overrides = overrides;
|
|
128
|
+
_applyOverrides(overrides) {
|
|
129
|
+
this._overrides = { ...this._overrides, ...overrides };
|
|
126
130
|
this._updateHeadersMap();
|
|
131
|
+
return this._overrides;
|
|
127
132
|
}
|
|
128
133
|
_updateHeadersMap() {
|
|
129
134
|
for (const { name, value } of this.headers())
|
|
130
135
|
this._headersMap.set(name.toLowerCase(), value);
|
|
131
136
|
}
|
|
132
|
-
|
|
133
|
-
return
|
|
137
|
+
overrides() {
|
|
138
|
+
return this._overrides;
|
|
134
139
|
}
|
|
135
140
|
url() {
|
|
136
141
|
return this._overrides?.url || this._url;
|
|
@@ -212,10 +217,24 @@ class Route extends import_instrumentation.SdkObject {
|
|
|
212
217
|
constructor(request, delegate) {
|
|
213
218
|
super(request._frame || request._context, "route");
|
|
214
219
|
this._handled = false;
|
|
220
|
+
this._futureHandlers = [];
|
|
215
221
|
this._request = request;
|
|
216
222
|
this._delegate = delegate;
|
|
217
223
|
this._request._context.addRouteInFlight(this);
|
|
218
224
|
}
|
|
225
|
+
handle(handlers) {
|
|
226
|
+
this._futureHandlers = [...handlers];
|
|
227
|
+
this.continue({ isFallback: true }).catch(() => {
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async removeHandler(handler) {
|
|
231
|
+
this._futureHandlers = this._futureHandlers.filter((h) => h !== handler);
|
|
232
|
+
if (handler === this._currentHandler) {
|
|
233
|
+
await this.continue({ isFallback: true }).catch(() => {
|
|
234
|
+
});
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
219
238
|
request() {
|
|
220
239
|
return this._request;
|
|
221
240
|
}
|
|
@@ -225,10 +244,11 @@ class Route extends import_instrumentation.SdkObject {
|
|
|
225
244
|
await this._delegate.abort(errorCode);
|
|
226
245
|
this._endHandling();
|
|
227
246
|
}
|
|
228
|
-
|
|
247
|
+
redirectNavigationRequest(url) {
|
|
229
248
|
this._startHandling();
|
|
230
249
|
(0, import_utils.assert)(this._request.isNavigationRequest());
|
|
231
250
|
this._request.frame().redirectNavigation(url, this._request._documentId, this._request.headerValue("referer"));
|
|
251
|
+
this._endHandling();
|
|
232
252
|
}
|
|
233
253
|
async fulfill(overrides) {
|
|
234
254
|
this._startHandling();
|
|
@@ -274,26 +294,39 @@ class Route extends import_instrumentation.SdkObject {
|
|
|
274
294
|
headers.push({ name: "vary", value: "Origin" });
|
|
275
295
|
}
|
|
276
296
|
async continue(overrides) {
|
|
277
|
-
this._startHandling();
|
|
278
297
|
if (overrides.url) {
|
|
279
298
|
const newUrl = new URL(overrides.url);
|
|
280
299
|
const oldUrl = new URL(this._request.url());
|
|
281
300
|
if (oldUrl.protocol !== newUrl.protocol)
|
|
282
301
|
throw new Error("New URL must have same protocol as overridden URL");
|
|
283
302
|
}
|
|
284
|
-
if (overrides.headers)
|
|
285
|
-
overrides.headers = overrides.headers?.filter((header) =>
|
|
286
|
-
|
|
303
|
+
if (overrides.headers) {
|
|
304
|
+
overrides.headers = overrides.headers?.filter((header) => {
|
|
305
|
+
const headerName = header.name.toLowerCase();
|
|
306
|
+
return headerName !== "cookie" && headerName !== "host";
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
overrides = this._request._applyOverrides(overrides);
|
|
310
|
+
const nextHandler = this._futureHandlers.shift();
|
|
311
|
+
if (nextHandler) {
|
|
312
|
+
this._currentHandler = nextHandler;
|
|
313
|
+
nextHandler(this, this._request);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
287
316
|
if (!overrides.isFallback)
|
|
288
317
|
this._request._context.emit(import_browserContext.BrowserContext.Events.RequestContinued, this._request);
|
|
318
|
+
this._startHandling();
|
|
289
319
|
await this._delegate.continue(overrides);
|
|
290
320
|
this._endHandling();
|
|
291
321
|
}
|
|
292
322
|
_startHandling() {
|
|
293
323
|
(0, import_utils.assert)(!this._handled, "Route is already handled!");
|
|
294
324
|
this._handled = true;
|
|
325
|
+
this._currentHandler = void 0;
|
|
295
326
|
}
|
|
296
327
|
_endHandling() {
|
|
328
|
+
this._futureHandlers = [];
|
|
329
|
+
this._currentHandler = void 0;
|
|
297
330
|
this._request._context.removeRouteInFlight(this);
|
|
298
331
|
}
|
|
299
332
|
}
|
|
@@ -573,6 +606,7 @@ function mergeHeaders(headers) {
|
|
|
573
606
|
Route,
|
|
574
607
|
WebSocket,
|
|
575
608
|
filterCookies,
|
|
609
|
+
isLocalHostname,
|
|
576
610
|
kMaxCookieExpiresDateInSeconds,
|
|
577
611
|
mergeHeaders,
|
|
578
612
|
parseURL,
|