whopper 0.5.9 → 0.7.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/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +56 -3
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.test.js +133 -0
- package/dist/browser/index.test.js.map +1 -1
- package/dist/browser/types.d.ts +1 -0
- package/dist/browser/types.d.ts.map +1 -1
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +2 -0
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/detect.test.js +5 -0
- package/dist/commands/detect.test.js.map +1 -1
- package/dist/commands/detect_utils.d.ts.map +1 -1
- package/dist/commands/detect_utils.js +23 -5
- package/dist/commands/detect_utils.js.map +1 -1
- package/dist/commands/detect_utils.test.js +86 -9
- package/dist/commands/detect_utils.test.js.map +1 -1
- package/dist/signatures/_types.d.ts +1 -0
- package/dist/signatures/_types.d.ts.map +1 -1
- package/dist/signatures/index.d.ts.map +1 -1
- package/dist/signatures/index.js +4 -0
- package/dist/signatures/index.js.map +1 -1
- package/dist/signatures/signatures.test.js +16 -0
- package/dist/signatures/signatures.test.js.map +1 -1
- package/dist/signatures/technologies/drupal.d.ts.map +1 -1
- package/dist/signatures/technologies/drupal.js +17 -0
- package/dist/signatures/technologies/drupal.js.map +1 -1
- package/dist/signatures/technologies/drupal.test.d.ts +2 -0
- package/dist/signatures/technologies/drupal.test.d.ts.map +1 -0
- package/dist/signatures/technologies/drupal.test.js +76 -0
- package/dist/signatures/technologies/drupal.test.js.map +1 -0
- package/dist/signatures/technologies/power_cms.d.ts +3 -0
- package/dist/signatures/technologies/power_cms.d.ts.map +1 -0
- package/dist/signatures/technologies/power_cms.js +51 -0
- package/dist/signatures/technologies/power_cms.js.map +1 -0
- package/dist/signatures/technologies/power_cms.test.d.ts +2 -0
- package/dist/signatures/technologies/power_cms.test.d.ts.map +1 -0
- package/dist/signatures/technologies/power_cms.test.js +83 -0
- package/dist/signatures/technologies/power_cms.test.js.map +1 -0
- package/dist/signatures/technologies/thinkphp.d.ts +3 -0
- package/dist/signatures/technologies/thinkphp.d.ts.map +1 -0
- package/dist/signatures/technologies/thinkphp.js +41 -0
- package/dist/signatures/technologies/thinkphp.js.map +1 -0
- package/dist/signatures/technologies/thinkphp.test.d.ts +2 -0
- package/dist/signatures/technologies/thinkphp.test.d.ts.map +1 -0
- package/dist/signatures/technologies/thinkphp.test.js +132 -0
- package/dist/signatures/technologies/thinkphp.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAiD/E,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,MAAM,EAAE,EACjC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAiD/E,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,MAAM,EAAE,EACjC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAqelB"}
|
package/dist/browser/index.js
CHANGED
|
@@ -39,7 +39,7 @@ function colorizeStatusCode(statusCode) {
|
|
|
39
39
|
return chalk.gray(code);
|
|
40
40
|
}
|
|
41
41
|
export async function openPage(url, timeoutMs, javascriptVariableNames, options = {}) {
|
|
42
|
-
const { userAgent, locale, extraHTTPHeaders, blockCrossDomainRedirect = false, networkIdleThresholdMs = NETWORK_IDLE_THRESHOLD_MS, extractionTimeoutMs = DEFAULT_EXTRACTION_TIMEOUT_MS, } = options;
|
|
42
|
+
const { userAgent, locale, extraHTTPHeaders, blockCrossDomainRedirect = false, networkIdleThresholdMs = NETWORK_IDLE_THRESHOLD_MS, extractionTimeoutMs = DEFAULT_EXTRACTION_TIMEOUT_MS, blockMedia = true, } = options;
|
|
43
43
|
const pageHost = getHostFromUrl(url);
|
|
44
44
|
if (!pageHost) {
|
|
45
45
|
throw new Error(`Invalid URL: ${url}`);
|
|
@@ -53,12 +53,59 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
|
|
|
53
53
|
});
|
|
54
54
|
const page = await context.newPage();
|
|
55
55
|
let blockedByRedirectPolicy = false;
|
|
56
|
+
// Once the capture phase ends we keep the route handler installed (so media
|
|
57
|
+
// is still aborted for the rest of the scan) but stop appending to the
|
|
58
|
+
// frozen urls/responses snapshot. Guards the media branch's pushes below.
|
|
59
|
+
let captureFrozen = false;
|
|
56
60
|
let lastNavigationUrl = url;
|
|
57
61
|
let inspectedUrls = new Set();
|
|
58
62
|
let reentryCount = 0;
|
|
59
63
|
const preInspectedUrls = new Set();
|
|
64
|
+
// Declared before the route handler so its media-block branch can push to
|
|
65
|
+
// them (the handler is a closure over these; the network-idle listeners
|
|
66
|
+
// below also share them).
|
|
67
|
+
const urls = [];
|
|
68
|
+
const responses = [];
|
|
60
69
|
await page.route("**/*", async (route) => {
|
|
61
70
|
const request = route.request();
|
|
71
|
+
// Drop media (video / audio) requests up front when enabled. These
|
|
72
|
+
// rarely contribute to technology detection (signatures match on URLs,
|
|
73
|
+
// bodies, headers, cookies, or JS variables) but can dominate the
|
|
74
|
+
// page's main-thread / network budget — autoplaying videos in
|
|
75
|
+
// particular keep the scan running long after the meaningful
|
|
76
|
+
// resources have loaded. Recording the URL in `urls` preserves the
|
|
77
|
+
// audit trail of what would have been fetched.
|
|
78
|
+
if (blockMedia && request.resourceType() === "media") {
|
|
79
|
+
const blockedUrl = request.url();
|
|
80
|
+
// Always abort media, even after the capture phase is frozen: autoplay
|
|
81
|
+
// or lazy media that starts during the post-load cookie / JS extraction
|
|
82
|
+
// phase would otherwise reintroduce the main-thread / network cost this
|
|
83
|
+
// blocking is meant to avoid. We only *record* the block while capture
|
|
84
|
+
// is live — once frozen, pushing would mutate the returned snapshot
|
|
85
|
+
// (see the capture-freeze point below) non-deterministically.
|
|
86
|
+
if (!captureFrozen) {
|
|
87
|
+
logger.debug(`Blocked media resource: ${blockedUrl}`);
|
|
88
|
+
urls.push({ url: blockedUrl, error: "blocked: media" });
|
|
89
|
+
// URL signatures are matched only against `context.responses[].url`
|
|
90
|
+
// (see analyzer/apply.ts), not the `urls` audit log. Aborting the
|
|
91
|
+
// request would otherwise drop it from `responses` and turn any
|
|
92
|
+
// media-URL-based detection into a false negative. Record a body-less
|
|
93
|
+
// response so URL matching is preserved while we still skip the
|
|
94
|
+
// (irrelevant and costly) media body.
|
|
95
|
+
const blockedHost = getHostFromUrl(blockedUrl) ?? "";
|
|
96
|
+
responses.push({
|
|
97
|
+
url: blockedUrl,
|
|
98
|
+
host: blockedHost,
|
|
99
|
+
isFirstParty: blockedHost
|
|
100
|
+
? isFirstPartyHost(pageHost, blockedHost)
|
|
101
|
+
: false,
|
|
102
|
+
status: 0,
|
|
103
|
+
headers: {},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
await route.abort("blockedbyclient");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
62
109
|
if (!request.isNavigationRequest() ||
|
|
63
110
|
request.frame() !== page.mainFrame()) {
|
|
64
111
|
await route.continue();
|
|
@@ -176,8 +223,6 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
|
|
|
176
223
|
}
|
|
177
224
|
await route.fulfill({ response: firstResponse });
|
|
178
225
|
});
|
|
179
|
-
const urls = [];
|
|
180
|
-
const responses = [];
|
|
181
226
|
// Timestamp of the most recent network activity (request sent or
|
|
182
227
|
// response received). Used by the custom idle-decision loop below.
|
|
183
228
|
let lastNetworkActivityAt = Date.now();
|
|
@@ -314,6 +359,14 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
|
|
|
314
359
|
page.off("requestfinished", onRequestFinished);
|
|
315
360
|
page.off("requestfailed", onRequestFailed);
|
|
316
361
|
page.off("response", onResponse);
|
|
362
|
+
// Freeze the capture. We intentionally keep the route handler installed so
|
|
363
|
+
// media requests are still aborted for the remainder of the scan (cookie / JS
|
|
364
|
+
// extraction can trigger autoplay / lazy media, whose main-thread / network
|
|
365
|
+
// cost is exactly what this blocking avoids). The `captureFrozen` guard stops
|
|
366
|
+
// the media branch from appending to the now-frozen `urls`/`responses`
|
|
367
|
+
// snapshot, so late/lazy requests can neither bloat memory nor make the
|
|
368
|
+
// returned capture non-deterministic.
|
|
369
|
+
captureFrozen = true;
|
|
317
370
|
logger.info(`${responses.length} responses captured`);
|
|
318
371
|
if (result === "loaded") {
|
|
319
372
|
if (idleWaitTimedOut) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAuC,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,+DAA+D;AAC/D,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,2CAA2C;AAC3C,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,oDAAoD;AACpD,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAC1C,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,oEAAoE;AACpE,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEhC,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,SAAiB,EACjB,uBAAiC,EACjC,UAA2B,EAAE;IAE7B,MAAM,EACJ,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,wBAAwB,GAAG,KAAK,EAChC,sBAAsB,GAAG,yBAAyB,EAClD,mBAAmB,GAAG,6BAA6B,GACpD,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,iBAAiB,EAAE,IAAI;QACvB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAErC,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,IAAI,iBAAiB,GAAG,GAAG,CAAC;IAC5B,IAAI,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IACE,CAAC,OAAO,CAAC,mBAAmB,EAAE;YAC9B,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,EACpC,CAAC;YACD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,oEAAoE;QACpE,qEAAqE;QACrE,iEAAiE;QACjE,+DAA+D;QAC/D,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,YAAY,EAAE,CAAC;YACf,IAAI,YAAY,GAAG,iBAAiB,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACtD,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,wBAAwB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;YAC3D,uBAAuB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,uBAAuB,iBAAiB,OAAO,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,iBAAiB,GAAG,SAAS,CAAC;QAE9B,6DAA6D;QAC7D,+DAA+D;QAC/D,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,YAAY,GAAG,CAAC,CAAC;QAEjB,+DAA+D;QAC/D,IAAI,UAAU,GAAG,SAAS,CAAC;QAC3B,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GACX,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,mEAAmE;QACnE,oEAAoE;QACpE,sEAAsE;QACtE,+DAA+D;QAC/D,mEAAmE;QACnE,MAAM,aAAa,GAAG,QAAQ,CAAC;QAC/B,KACE,IAAI,GAAG,GAAG,CAAC,EACX,GAAG,GAAG,iBAAiB;YACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG;YACxB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EACvB,GAAG,EAAE,EACL,CAAC;YACD,oEAAoE;YACpE,mEAAmE;YACnE,uCAAuC;YACvC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACjD,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,WAAW,GAAa;gBAC5B,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;gBACnE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;aAC5B,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC;YAC7B,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAE1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,MAAM;YAErB,IAAI,WAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM;YACR,CAAC;YAED,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YACjD,IACE,wBAAwB;gBACxB,YAAY;gBACZ,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,EACnC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;gBAC7D,uBAAuB,GAAG,IAAI,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBACxE,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,OAAO,WAAW,EAAE,CAAC,CAAC;YACnE,iBAAiB,GAAG,WAAW,CAAC;YAChC,UAAU,GAAG,WAAW,CAAC;YACzB,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAE/B,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,OAAO,GACX,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChD,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,iEAAiE;IACjE,mEAAmE;IACnE,IAAI,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvC,sEAAsE;IACtE,mEAAmE;IACnE,kEAAkE;IAClE,wBAAwB;IACxB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,iEAAiE;IACjE,uEAAuE;IACvE,oEAAoE;IACpE,6CAA6C;IAC7C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAErD,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC;QAC7D,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC;QAC7D,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,QAA4B,EAAE,EAAE;QAClD,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAErC,gEAAgE;YAChE,oBAAoB;YACpB,IACE,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;gBACjC,UAAU,IAAI,GAAG;gBACjB,UAAU,GAAG,GAAG,EAChB,CAAC;gBACD,MAAM,CAAC,KAAK,CACV,uCAAuC,kBAAkB,CAAC,UAAU,CAAC,KAAK,WAAW,EAAE,CACxF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,CAAC,KAAK,CACV,sBAAsB,kBAAkB,CAAC,UAAU,CAAC,KAAK,WAAW,EAAE,CACvE,CAAC;YACF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,IACE,OAAO,CAAC,mBAAmB,EAAE;gBAC7B,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,EACpC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,GAAG,GAAa;gBACpB,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,YAAY;oBACxB,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;oBAC1C,CAAC,CAAC,KAAK;gBACT,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;aAC5B,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC;QACL,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEhC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvC,wEAAwE;IACxE,kEAAkE;IAClE,iEAAiE;IACjE,4BAA4B;IAC5B,EAAE;IACF,wEAAwE;IACxE,2EAA2E;IAC3E,wEAAwE;IACxE,yBAAyB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjD,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KACvC,CAAC,CAAC;IAEH,sEAAsE;IACtE,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,uDAAuD;IACvD,+CAA+C;IAC/C,EAAE;IACF,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,iDAAiD;IACjD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,GAAG,mBAAmB,CAAC;YAC1C,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;gBACzB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,GAAG,qBAAqB,CAAC;YAC5C,IAAI,oBAAoB,KAAK,CAAC,IAAI,OAAO,IAAI,sBAAsB,EAAE,CAAC;gBACpE,MAAM;YACR,CAAC;YACD,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC;YAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,gEAAgE;QAChE,kEAAkE;QAClE,oEAAoE;QACpE,qEAAqE;QACrE,mEAAmE;QACnE,kEAAkE;QAClE,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,CAAC,EACD,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC,CAC/C,CAAC;YACF,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,IAAI,CAAC;oBACjB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBACnD,KAAK,CAAC,eAAe,CAAC;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,qBAAqB,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,gBAAgB,EAAE,CAAC;YACrB,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,cAAc,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,4DAA4D,GAAG,EAAE,CACjH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,eAAe,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,CACT,cAAc,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,6BAA6B,GAAG,EAAE,CAClF,CAAC;IACJ,CAAC;SAAM,IAAI,uBAAuB,EAAE,CAAC;QACnC,sEAAsE;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,sBAAsB,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3B,mEAAmE;QACnE,sEAAsE;QACtE,mEAAmE;QACnE,4DAA4D;QAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAuB,EAAE,CAAC;IACrC,IAAI,mBAAmB,GAA4B,EAAE,CAAC;IAEtD,oEAAoE;IACpE,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,EAAK,CAAa,EAAE,KAAa,EAAc,EAAE;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBACzB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,aAAa,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CACtE,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,YAAY,CACnC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EACxB,SAAS,CACV,CAAC;QACF,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAClE,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACpD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,mBAAmB,GAAG,MAAM,YAAY,CACtC,IAAI,CAAC,QAAQ,CACX,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAC1B,4CAA4C;YAC5C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC,EACD;YACE,QAAQ,EAAE,uBAAuB;YACjC,SAAS,EAAE,kBAAkB,CAAC,QAAQ,EAAE;SACzC,CACF,EACD,cAAc,CACf,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI;QACJ,IAAI;QACJ,SAAS;QACT,mBAAmB;QACnB,OAAO;QACP,SAAS;QACT,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -162,6 +162,7 @@ describe("openPage", () => {
|
|
|
162
162
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
163
163
|
await routeHandler({
|
|
164
164
|
request: () => ({
|
|
165
|
+
resourceType: () => "document",
|
|
165
166
|
isNavigationRequest: () => true,
|
|
166
167
|
frame: () => mockMainFrame,
|
|
167
168
|
url: () => "https://www.example.com",
|
|
@@ -191,6 +192,7 @@ describe("openPage", () => {
|
|
|
191
192
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
192
193
|
await routeHandler({
|
|
193
194
|
request: () => ({
|
|
195
|
+
resourceType: () => "document",
|
|
194
196
|
isNavigationRequest: () => true,
|
|
195
197
|
frame: () => mockMainFrame,
|
|
196
198
|
url: () => "https://example.net",
|
|
@@ -216,6 +218,7 @@ describe("openPage", () => {
|
|
|
216
218
|
const abortMock = vi.fn(() => Promise.resolve());
|
|
217
219
|
await routeHandler({
|
|
218
220
|
request: () => ({
|
|
221
|
+
resourceType: () => "document",
|
|
219
222
|
isNavigationRequest: () => false,
|
|
220
223
|
frame: () => mockMainFrame,
|
|
221
224
|
url: () => "https://example.net/script.js",
|
|
@@ -226,6 +229,102 @@ describe("openPage", () => {
|
|
|
226
229
|
expect(continueMock).toHaveBeenCalledTimes(1);
|
|
227
230
|
expect(abortMock).not.toHaveBeenCalled();
|
|
228
231
|
});
|
|
232
|
+
it("should abort media requests by default and record them in urls", async () => {
|
|
233
|
+
const continueMock = vi.fn(() => Promise.resolve());
|
|
234
|
+
const abortMock = vi.fn(() => Promise.resolve());
|
|
235
|
+
// Invoke the handler during route registration, i.e. while the capture
|
|
236
|
+
// phase is still live (before the snapshot is frozen), matching the
|
|
237
|
+
// timing of a real media request.
|
|
238
|
+
mockPage.route.mockImplementation(async (_pattern, handler) => {
|
|
239
|
+
await handler({
|
|
240
|
+
request: () => ({
|
|
241
|
+
resourceType: () => "media",
|
|
242
|
+
isNavigationRequest: () => false,
|
|
243
|
+
frame: () => mockMainFrame,
|
|
244
|
+
url: () => "https://example.com/intro.mov",
|
|
245
|
+
}),
|
|
246
|
+
continue: continueMock,
|
|
247
|
+
abort: abortMock,
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
const result = await openPage("https://example.com", 10000, []);
|
|
251
|
+
expect(abortMock).toHaveBeenCalledWith("blockedbyclient");
|
|
252
|
+
expect(continueMock).not.toHaveBeenCalled();
|
|
253
|
+
expect(result.urls).toContainEqual({
|
|
254
|
+
url: "https://example.com/intro.mov",
|
|
255
|
+
error: "blocked: media",
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
it("should record blocked media as a body-less response to preserve URL detection", async () => {
|
|
259
|
+
mockPage.route.mockImplementation(async (_pattern, handler) => {
|
|
260
|
+
await handler({
|
|
261
|
+
request: () => ({
|
|
262
|
+
resourceType: () => "media",
|
|
263
|
+
isNavigationRequest: () => false,
|
|
264
|
+
frame: () => mockMainFrame,
|
|
265
|
+
url: () => "https://example.com/intro.mov",
|
|
266
|
+
}),
|
|
267
|
+
continue: vi.fn(() => Promise.resolve()),
|
|
268
|
+
abort: vi.fn(() => Promise.resolve()),
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
const result = await openPage("https://example.com", 10000, []);
|
|
272
|
+
// URL signatures match against responses[].url (analyzer/apply.ts), so the
|
|
273
|
+
// blocked media URL must still appear in responses (body-less) so that
|
|
274
|
+
// URL-based detection on a media URL is not silently lost.
|
|
275
|
+
const blocked = result.responses.find((response) => response.url === "https://example.com/intro.mov");
|
|
276
|
+
expect(blocked).toBeDefined();
|
|
277
|
+
expect(blocked?.body).toBeUndefined();
|
|
278
|
+
expect(blocked?.isFirstParty).toBe(true);
|
|
279
|
+
});
|
|
280
|
+
it("should keep aborting media after capture but stop recording it", async () => {
|
|
281
|
+
// After the capture snapshot is frozen the route handler stays installed
|
|
282
|
+
// so media is still aborted (autoplay / lazy media during cookie / JS
|
|
283
|
+
// extraction would otherwise reintroduce the cost this blocking avoids),
|
|
284
|
+
// but it must no longer append to the now-frozen urls/responses set.
|
|
285
|
+
let routeHandler = async () => { };
|
|
286
|
+
mockPage.route.mockImplementation(async (_pattern, handler) => {
|
|
287
|
+
routeHandler = handler;
|
|
288
|
+
});
|
|
289
|
+
const result = await openPage("https://example.com", 10000, []);
|
|
290
|
+
const urlsBefore = result.urls.length;
|
|
291
|
+
const responsesBefore = result.responses.length;
|
|
292
|
+
const abortMock = vi.fn(() => Promise.resolve());
|
|
293
|
+
await routeHandler({
|
|
294
|
+
request: () => ({
|
|
295
|
+
resourceType: () => "media",
|
|
296
|
+
isNavigationRequest: () => false,
|
|
297
|
+
frame: () => mockMainFrame,
|
|
298
|
+
url: () => "https://example.com/late.mov",
|
|
299
|
+
}),
|
|
300
|
+
continue: vi.fn(() => Promise.resolve()),
|
|
301
|
+
abort: abortMock,
|
|
302
|
+
});
|
|
303
|
+
expect(abortMock).toHaveBeenCalledWith("blockedbyclient");
|
|
304
|
+
expect(result.urls.length).toBe(urlsBefore);
|
|
305
|
+
expect(result.responses.length).toBe(responsesBefore);
|
|
306
|
+
});
|
|
307
|
+
it("should not abort media requests when blockMedia is false", async () => {
|
|
308
|
+
let routeHandler = async () => { };
|
|
309
|
+
mockPage.route.mockImplementation(async (_pattern, handler) => {
|
|
310
|
+
routeHandler = handler;
|
|
311
|
+
});
|
|
312
|
+
await openPage("https://example.com", 10000, [], { blockMedia: false });
|
|
313
|
+
const continueMock = vi.fn(() => Promise.resolve());
|
|
314
|
+
const abortMock = vi.fn(() => Promise.resolve());
|
|
315
|
+
await routeHandler({
|
|
316
|
+
request: () => ({
|
|
317
|
+
resourceType: () => "media",
|
|
318
|
+
isNavigationRequest: () => false,
|
|
319
|
+
frame: () => mockMainFrame,
|
|
320
|
+
url: () => "https://example.com/intro.mov",
|
|
321
|
+
}),
|
|
322
|
+
continue: continueMock,
|
|
323
|
+
abort: abortMock,
|
|
324
|
+
});
|
|
325
|
+
expect(continueMock).toHaveBeenCalledTimes(1);
|
|
326
|
+
expect(abortMock).not.toHaveBeenCalled();
|
|
327
|
+
});
|
|
229
328
|
it("should continue for non-main-frame navigation requests", async () => {
|
|
230
329
|
let routeHandler = async () => { };
|
|
231
330
|
mockPage.route.mockImplementation(async (_pattern, handler) => {
|
|
@@ -238,6 +337,7 @@ describe("openPage", () => {
|
|
|
238
337
|
const abortMock = vi.fn(() => Promise.resolve());
|
|
239
338
|
await routeHandler({
|
|
240
339
|
request: () => ({
|
|
340
|
+
resourceType: () => "document",
|
|
241
341
|
isNavigationRequest: () => true,
|
|
242
342
|
frame: () => ({ id: "iframe-1" }),
|
|
243
343
|
url: () => "https://example.net/embedded",
|
|
@@ -264,6 +364,7 @@ describe("openPage", () => {
|
|
|
264
364
|
// first top-level navigation
|
|
265
365
|
await routeHandler({
|
|
266
366
|
request: () => ({
|
|
367
|
+
resourceType: () => "document",
|
|
267
368
|
isNavigationRequest: () => true,
|
|
268
369
|
frame: () => mockMainFrame,
|
|
269
370
|
url: () => "https://example.com",
|
|
@@ -276,6 +377,7 @@ describe("openPage", () => {
|
|
|
276
377
|
// second top-level navigation with invalid URL should still continue
|
|
277
378
|
await routeHandler({
|
|
278
379
|
request: () => ({
|
|
380
|
+
resourceType: () => "document",
|
|
279
381
|
isNavigationRequest: () => true,
|
|
280
382
|
frame: () => mockMainFrame,
|
|
281
383
|
url: () => "not-a-url",
|
|
@@ -306,6 +408,7 @@ describe("openPage", () => {
|
|
|
306
408
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
307
409
|
await routeHandler({
|
|
308
410
|
request: () => ({
|
|
411
|
+
resourceType: () => "document",
|
|
309
412
|
isNavigationRequest: () => true,
|
|
310
413
|
frame: () => mockMainFrame,
|
|
311
414
|
url: () => "https://app.example.com",
|
|
@@ -317,6 +420,7 @@ describe("openPage", () => {
|
|
|
317
420
|
});
|
|
318
421
|
await routeHandler({
|
|
319
422
|
request: () => ({
|
|
423
|
+
resourceType: () => "document",
|
|
320
424
|
isNavigationRequest: () => true,
|
|
321
425
|
frame: () => mockMainFrame,
|
|
322
426
|
url: () => "https://cdn.example.com",
|
|
@@ -349,6 +453,7 @@ describe("openPage", () => {
|
|
|
349
453
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
350
454
|
await routeHandler({
|
|
351
455
|
request: () => ({
|
|
456
|
+
resourceType: () => "document",
|
|
352
457
|
isNavigationRequest: () => true,
|
|
353
458
|
frame: () => mockMainFrame,
|
|
354
459
|
url: () => "https://www.example.com",
|
|
@@ -383,6 +488,7 @@ describe("openPage", () => {
|
|
|
383
488
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
384
489
|
await routeHandler({
|
|
385
490
|
request: () => ({
|
|
491
|
+
resourceType: () => "document",
|
|
386
492
|
isNavigationRequest: () => true,
|
|
387
493
|
frame: () => mockMainFrame,
|
|
388
494
|
url: () => "https://example.com",
|
|
@@ -416,6 +522,7 @@ describe("openPage", () => {
|
|
|
416
522
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
417
523
|
await routeHandler({
|
|
418
524
|
request: () => ({
|
|
525
|
+
resourceType: () => "document",
|
|
419
526
|
isNavigationRequest: () => true,
|
|
420
527
|
frame: () => mockMainFrame,
|
|
421
528
|
url: () => "https://example.com",
|
|
@@ -449,6 +556,7 @@ describe("openPage", () => {
|
|
|
449
556
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
450
557
|
await routeHandler({
|
|
451
558
|
request: () => ({
|
|
559
|
+
resourceType: () => "document",
|
|
452
560
|
isNavigationRequest: () => true,
|
|
453
561
|
frame: () => mockMainFrame,
|
|
454
562
|
url: () => "https://example.com",
|
|
@@ -478,6 +586,7 @@ describe("openPage", () => {
|
|
|
478
586
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
479
587
|
await routeHandler({
|
|
480
588
|
request: () => ({
|
|
589
|
+
resourceType: () => "document",
|
|
481
590
|
isNavigationRequest: () => true,
|
|
482
591
|
frame: () => mockMainFrame,
|
|
483
592
|
url: () => "https://example.com",
|
|
@@ -502,6 +611,7 @@ describe("openPage", () => {
|
|
|
502
611
|
const fetchMock = vi.fn(() => Promise.reject("string error"));
|
|
503
612
|
await routeHandler({
|
|
504
613
|
request: () => ({
|
|
614
|
+
resourceType: () => "document",
|
|
505
615
|
isNavigationRequest: () => true,
|
|
506
616
|
frame: () => mockMainFrame,
|
|
507
617
|
url: () => "https://example.com",
|
|
@@ -542,6 +652,7 @@ describe("openPage", () => {
|
|
|
542
652
|
const abortMock = vi.fn(() => Promise.resolve());
|
|
543
653
|
await routeHandler({
|
|
544
654
|
request: () => ({
|
|
655
|
+
resourceType: () => "document",
|
|
545
656
|
isNavigationRequest: () => true,
|
|
546
657
|
frame: () => mockMainFrame,
|
|
547
658
|
url: () => "https://example.com",
|
|
@@ -555,6 +666,7 @@ describe("openPage", () => {
|
|
|
555
666
|
const continueMock = vi.fn(() => Promise.resolve());
|
|
556
667
|
await routeHandler({
|
|
557
668
|
request: () => ({
|
|
669
|
+
resourceType: () => "document",
|
|
558
670
|
isNavigationRequest: () => true,
|
|
559
671
|
frame: () => mockMainFrame,
|
|
560
672
|
url: () => "https://example.com/page",
|
|
@@ -591,6 +703,7 @@ describe("openPage", () => {
|
|
|
591
703
|
.mockResolvedValueOnce(mock200Response);
|
|
592
704
|
await routeHandler({
|
|
593
705
|
request: () => ({
|
|
706
|
+
resourceType: () => "document",
|
|
594
707
|
isNavigationRequest: () => true,
|
|
595
708
|
frame: () => mockMainFrame,
|
|
596
709
|
url: () => "https://example.com",
|
|
@@ -604,6 +717,7 @@ describe("openPage", () => {
|
|
|
604
717
|
for (let i = 0; i < 20; i++) {
|
|
605
718
|
await routeHandler({
|
|
606
719
|
request: () => ({
|
|
720
|
+
resourceType: () => "document",
|
|
607
721
|
isNavigationRequest: () => true,
|
|
608
722
|
frame: () => mockMainFrame,
|
|
609
723
|
url: () => "https://example.com/page",
|
|
@@ -618,6 +732,7 @@ describe("openPage", () => {
|
|
|
618
732
|
const abortMock = vi.fn(() => Promise.resolve());
|
|
619
733
|
await routeHandler({
|
|
620
734
|
request: () => ({
|
|
735
|
+
resourceType: () => "document",
|
|
621
736
|
isNavigationRequest: () => true,
|
|
622
737
|
frame: () => mockMainFrame,
|
|
623
738
|
url: () => "https://example.com/page",
|
|
@@ -652,6 +767,7 @@ describe("openPage", () => {
|
|
|
652
767
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
653
768
|
await routeHandler({
|
|
654
769
|
request: () => ({
|
|
770
|
+
resourceType: () => "document",
|
|
655
771
|
isNavigationRequest: () => true,
|
|
656
772
|
frame: () => mockMainFrame,
|
|
657
773
|
url: () => "https://example.com",
|
|
@@ -684,6 +800,7 @@ describe("openPage", () => {
|
|
|
684
800
|
.mockRejectedValueOnce("string error");
|
|
685
801
|
await routeHandler({
|
|
686
802
|
request: () => ({
|
|
803
|
+
resourceType: () => "document",
|
|
687
804
|
isNavigationRequest: () => true,
|
|
688
805
|
frame: () => mockMainFrame,
|
|
689
806
|
url: () => "https://example.com",
|
|
@@ -719,6 +836,7 @@ describe("openPage", () => {
|
|
|
719
836
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
720
837
|
await routeHandler({
|
|
721
838
|
request: () => ({
|
|
839
|
+
resourceType: () => "document",
|
|
722
840
|
isNavigationRequest: () => true,
|
|
723
841
|
frame: () => mockMainFrame,
|
|
724
842
|
url: () => "https://example.com",
|
|
@@ -758,6 +876,7 @@ describe("openPage", () => {
|
|
|
758
876
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
759
877
|
await routeHandler({
|
|
760
878
|
request: () => ({
|
|
879
|
+
resourceType: () => "document",
|
|
761
880
|
isNavigationRequest: () => true,
|
|
762
881
|
frame: () => mockMainFrame,
|
|
763
882
|
url: () => "https://example.com",
|
|
@@ -812,6 +931,7 @@ describe("openPage", () => {
|
|
|
812
931
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
813
932
|
await routeHandler({
|
|
814
933
|
request: () => ({
|
|
934
|
+
resourceType: () => "document",
|
|
815
935
|
isNavigationRequest: () => true,
|
|
816
936
|
frame: () => mockMainFrame,
|
|
817
937
|
url: () => "https://example.com",
|
|
@@ -865,6 +985,7 @@ describe("openPage", () => {
|
|
|
865
985
|
.mockResolvedValueOnce(mock200Response);
|
|
866
986
|
await routeHandler({
|
|
867
987
|
request: () => ({
|
|
988
|
+
resourceType: () => "document",
|
|
868
989
|
isNavigationRequest: () => true,
|
|
869
990
|
frame: () => mockMainFrame,
|
|
870
991
|
url: () => "https://example.com",
|
|
@@ -910,6 +1031,7 @@ describe("openPage", () => {
|
|
|
910
1031
|
.mockResolvedValueOnce(mock200Response);
|
|
911
1032
|
await routeHandler({
|
|
912
1033
|
request: () => ({
|
|
1034
|
+
resourceType: () => "document",
|
|
913
1035
|
isNavigationRequest: () => true,
|
|
914
1036
|
frame: () => mockMainFrame,
|
|
915
1037
|
url: () => "https://example.com",
|
|
@@ -940,6 +1062,7 @@ describe("openPage", () => {
|
|
|
940
1062
|
const fulfillMock = vi.fn(() => Promise.resolve());
|
|
941
1063
|
await routeHandler({
|
|
942
1064
|
request: () => ({
|
|
1065
|
+
resourceType: () => "document",
|
|
943
1066
|
isNavigationRequest: () => true,
|
|
944
1067
|
frame: () => mockMainFrame,
|
|
945
1068
|
url: () => "https://example.com",
|
|
@@ -983,6 +1106,7 @@ describe("openPage", () => {
|
|
|
983
1106
|
// Use a data: URL that getHostFromUrl returns null for
|
|
984
1107
|
await routeHandler({
|
|
985
1108
|
request: () => ({
|
|
1109
|
+
resourceType: () => "document",
|
|
986
1110
|
isNavigationRequest: () => true,
|
|
987
1111
|
frame: () => mockMainFrame,
|
|
988
1112
|
url: () => "https://example.com",
|
|
@@ -1094,6 +1218,7 @@ describe("openPage", () => {
|
|
|
1094
1218
|
headers: () => ({}),
|
|
1095
1219
|
text: () => textPromise,
|
|
1096
1220
|
request: () => ({
|
|
1221
|
+
resourceType: () => "document",
|
|
1097
1222
|
isNavigationRequest: () => false,
|
|
1098
1223
|
frame: () => null,
|
|
1099
1224
|
}),
|
|
@@ -1124,6 +1249,7 @@ describe("openPage", () => {
|
|
|
1124
1249
|
headers: () => ({}),
|
|
1125
1250
|
text: () => neverResolves,
|
|
1126
1251
|
request: () => ({
|
|
1252
|
+
resourceType: () => "document",
|
|
1127
1253
|
isNavigationRequest: () => false,
|
|
1128
1254
|
frame: () => null,
|
|
1129
1255
|
}),
|
|
@@ -1159,6 +1285,7 @@ describe("openPage", () => {
|
|
|
1159
1285
|
// Route handler records a fetch error
|
|
1160
1286
|
await routeHandler({
|
|
1161
1287
|
request: () => ({
|
|
1288
|
+
resourceType: () => "document",
|
|
1162
1289
|
isNavigationRequest: () => true,
|
|
1163
1290
|
frame: () => mockMainFrame,
|
|
1164
1291
|
url: () => "https://example.com",
|
|
@@ -1185,6 +1312,7 @@ describe("openPage", () => {
|
|
|
1185
1312
|
// Simulate the route handler blocking a cross-host redirect
|
|
1186
1313
|
await routeHandler({
|
|
1187
1314
|
request: () => ({
|
|
1315
|
+
resourceType: () => "document",
|
|
1188
1316
|
isNavigationRequest: () => true,
|
|
1189
1317
|
frame: () => mockMainFrame,
|
|
1190
1318
|
url: () => "https://other.example",
|
|
@@ -1297,6 +1425,7 @@ describe("openPage", () => {
|
|
|
1297
1425
|
headers: () => ({ "content-type": "application/json" }),
|
|
1298
1426
|
text: () => Promise.resolve('{"data": "test"}'),
|
|
1299
1427
|
request: () => ({
|
|
1428
|
+
resourceType: () => "document",
|
|
1300
1429
|
isNavigationRequest: () => false,
|
|
1301
1430
|
frame: () => null,
|
|
1302
1431
|
}),
|
|
@@ -1329,6 +1458,7 @@ describe("openPage", () => {
|
|
|
1329
1458
|
headers: () => ({ "content-type": "application/octet-stream" }),
|
|
1330
1459
|
text: () => Promise.reject(new Error("Cannot read binary")),
|
|
1331
1460
|
request: () => ({
|
|
1461
|
+
resourceType: () => "document",
|
|
1332
1462
|
isNavigationRequest: () => false,
|
|
1333
1463
|
frame: () => null,
|
|
1334
1464
|
}),
|
|
@@ -1360,6 +1490,7 @@ describe("openPage", () => {
|
|
|
1360
1490
|
headers: () => ({ "content-type": "text/javascript" }),
|
|
1361
1491
|
text: () => Promise.resolve("console.log('ok')"),
|
|
1362
1492
|
request: () => ({
|
|
1493
|
+
resourceType: () => "document",
|
|
1363
1494
|
isNavigationRequest: () => false,
|
|
1364
1495
|
frame: () => null,
|
|
1365
1496
|
}),
|
|
@@ -1388,6 +1519,7 @@ describe("openPage", () => {
|
|
|
1388
1519
|
headers: () => ({ "content-type": "text/html" }),
|
|
1389
1520
|
text: () => Promise.resolve("<html></html>"),
|
|
1390
1521
|
request: () => ({
|
|
1522
|
+
resourceType: () => "document",
|
|
1391
1523
|
isNavigationRequest: () => true,
|
|
1392
1524
|
frame: () => mockMainFrame,
|
|
1393
1525
|
}),
|
|
@@ -1413,6 +1545,7 @@ describe("openPage", () => {
|
|
|
1413
1545
|
headers: () => ({ "content-type": "text/css" }),
|
|
1414
1546
|
text: () => Promise.resolve("body {}"),
|
|
1415
1547
|
request: () => ({
|
|
1548
|
+
resourceType: () => "document",
|
|
1416
1549
|
isNavigationRequest: () => false,
|
|
1417
1550
|
frame: () => null,
|
|
1418
1551
|
}),
|