testplane 8.47.3 → 8.47.5
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/build/package.json +4 -4
- package/build/src/browser/cdp/selectivity/click-command-guard.d.ts +10 -0
- package/build/src/browser/cdp/selectivity/click-command-guard.js +57 -0
- package/build/src/browser/cdp/selectivity/click-command-guard.js.map +1 -0
- package/build/src/browser/cdp/selectivity/coverage-hooks.d.ts +13 -0
- package/build/src/browser/cdp/selectivity/coverage-hooks.js +43 -0
- package/build/src/browser/cdp/selectivity/coverage-hooks.js.map +1 -0
- package/build/src/browser/cdp/selectivity/index.js +71 -12
- package/build/src/browser/cdp/selectivity/index.js.map +1 -1
- package/build/src/browser/cdp/selectivity/js-selectivity.d.ts +42 -5
- package/build/src/browser/cdp/selectivity/js-selectivity.js +139 -66
- package/build/src/browser/cdp/selectivity/js-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/navigation-guard.d.ts +18 -0
- package/build/src/browser/cdp/selectivity/navigation-guard.js +234 -0
- package/build/src/browser/cdp/selectivity/navigation-guard.js.map +1 -0
- package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -8,9 +8,29 @@ const utils_1 = require("./utils");
|
|
|
8
8
|
const fs_cache_1 = require("./fs-cache");
|
|
9
9
|
const debug_1 = require("./debug");
|
|
10
10
|
const SOURCE_CODE_EXTENSIONS = [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs", ".mts", ".cts"];
|
|
11
|
+
const PRECISE_COVERAGE_PARAMS = { callCount: false, detailed: false, allowTriggeredUpdates: false };
|
|
12
|
+
const isMissingScriptError = (error, scriptId) => {
|
|
13
|
+
const [cdpMessage] = error.message.split("\n", 1);
|
|
14
|
+
return error.code === -32000 && cdpMessage === `No script for id: ${scriptId}`;
|
|
15
|
+
};
|
|
11
16
|
const isSourceCodeFile = (sourceFileName) => {
|
|
12
17
|
return SOURCE_CODE_EXTENSIONS.some(ext => sourceFileName.endsWith(ext));
|
|
13
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* CDP "scriptId" is NOT stable across a test: it is reused for different scripts over time (a cross-process
|
|
21
|
+
* navigation restarts the counter; bfcache restore re-issues the previous document's ids; freed ids get reassigned
|
|
22
|
+
* to new scripts). "Profiler.takePreciseCoverage" reports only the raw "scriptId", with no way to tell which script
|
|
23
|
+
* a given id currently means. Therefore coverage can only be attributed correctly if it is resolved WHILE the
|
|
24
|
+
* scripts are still live and the "scriptId -> source" mapping is current.
|
|
25
|
+
*
|
|
26
|
+
* The orchestration in index.ts pauses the renderer at two boundaries and drives this class:
|
|
27
|
+
* - on "beforeunload": takeCoverageSnapshot() — resolve the leaving page while its isolate is still alive
|
|
28
|
+
* (required for cross-process navigation, where the old isolate is gone by the time the next document starts);
|
|
29
|
+
* - at the new document start (and bfcache "pageshow"): flushPage() — resolve whatever is left of the previous
|
|
30
|
+
* page (same-process, incl. code that ran during unload), then RESET precise coverage and CLEAR the script maps
|
|
31
|
+
* so the next page parses into an empty map and its coverage window cannot mix with the previous page's.
|
|
32
|
+
* Because the maps are cleared at every page boundary, plain "scriptId" keys are unambiguous within a page.
|
|
33
|
+
*/
|
|
14
34
|
class JSSelectivity {
|
|
15
35
|
constructor(cdp, sessionId, sourceRoot, mapSourceMapUrl) {
|
|
16
36
|
this._debuggerOnScriptParsedFn = null;
|
|
@@ -18,16 +38,40 @@ class JSSelectivity {
|
|
|
18
38
|
this._scriptsSourceMap = {};
|
|
19
39
|
this._scriptIdToSourceUrl = {};
|
|
20
40
|
this._scriptIdToSourceMapUrl = {};
|
|
21
|
-
|
|
41
|
+
/** Last seen content hash per "scriptId" — used to detect a "scriptId" reused for a different script */
|
|
42
|
+
this._scriptIdToHash = {};
|
|
43
|
+
/** Source files collected across all pages of the current test */
|
|
44
|
+
this._dependingSourceFiles = new Set();
|
|
22
45
|
this._cdp = cdp;
|
|
23
46
|
this._sessionId = sessionId;
|
|
24
47
|
this._sourceRoot = sourceRoot;
|
|
25
48
|
this._mapSourceMapUrl = mapSourceMapUrl;
|
|
26
49
|
}
|
|
27
|
-
|
|
50
|
+
_loadScriptSource(scriptId, sourceUrl) {
|
|
51
|
+
return this._cdp.debugger
|
|
52
|
+
.getScriptSource(this._sessionId, scriptId)
|
|
53
|
+
.then(res => res.scriptSource)
|
|
54
|
+
.catch((err) => {
|
|
55
|
+
return isMissingScriptError(err, scriptId)
|
|
56
|
+
? (0, utils_1.fetchTextWithBrowserFallback)(sourceUrl, this._cdp.runtime, this._sessionId).catch(() => err)
|
|
57
|
+
: err;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
_processScript({ scriptId, url, sourceMapURL, hash }, cdpSessionId) {
|
|
28
61
|
if (!this._sessionId || cdpSessionId !== this._sessionId) {
|
|
29
62
|
return;
|
|
30
63
|
}
|
|
64
|
+
// A "scriptId" can be reused for a DIFFERENT script within a single page window (a cross-process forward
|
|
65
|
+
// navigation may restart ids before the next boundary clears the maps). Detect reuse by content hash and drop
|
|
66
|
+
// the now-stale mapping, so the "||=" below repopulates it for the new script instead of keeping the old one.
|
|
67
|
+
const previousHash = this._scriptIdToHash[scriptId];
|
|
68
|
+
if (previousHash !== undefined && previousHash !== hash) {
|
|
69
|
+
delete this._scriptsSource[scriptId];
|
|
70
|
+
delete this._scriptsSourceMap[scriptId];
|
|
71
|
+
delete this._scriptIdToSourceUrl[scriptId];
|
|
72
|
+
delete this._scriptIdToSourceMapUrl[scriptId];
|
|
73
|
+
}
|
|
74
|
+
this._scriptIdToHash[scriptId] = hash;
|
|
31
75
|
this._scriptIdToSourceUrl[scriptId] ||= url;
|
|
32
76
|
if (!url || !sourceMapURL || url.startsWith("chrome-error://")) {
|
|
33
77
|
this._scriptsSource[scriptId] ||= null;
|
|
@@ -52,16 +96,14 @@ class JSSelectivity {
|
|
|
52
96
|
this._scriptsSource[scriptId] ||= (0, fs_cache_1.hasCachedSelectivityFile)(fs_cache_1.CacheType.Asset, url).then(isCached => {
|
|
53
97
|
return isCached
|
|
54
98
|
? true
|
|
55
|
-
: this.
|
|
56
|
-
|
|
57
|
-
.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}))
|
|
64
|
-
.catch((err) => err);
|
|
99
|
+
: this._loadScriptSource(scriptId, url).then(data => data instanceof Error
|
|
100
|
+
? data
|
|
101
|
+
: (0, fs_cache_1.setCachedSelectivityFile)(fs_cache_1.CacheType.Asset, url, data)
|
|
102
|
+
.then(() => true)
|
|
103
|
+
.catch(err => {
|
|
104
|
+
(0, debug_1.debugSelectivity)(`Couldn't offload asset from "${url}" to fs-cache: %O`, err);
|
|
105
|
+
return data;
|
|
106
|
+
}));
|
|
65
107
|
});
|
|
66
108
|
// Embedded source maps are not cached on file system because of their large cache key
|
|
67
109
|
if ((0, utils_1.isDataProtocol)(sourceMapResolvedUrl)) {
|
|
@@ -104,13 +146,11 @@ class JSSelectivity {
|
|
|
104
146
|
if (cacheResolvedValue && typeof cacheResolvedValue === "string") {
|
|
105
147
|
return cacheResolvedValue;
|
|
106
148
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.then(({ scriptSource }) => {
|
|
149
|
+
const scriptSource = await this._loadScriptSource(scriptId, fixedUrl);
|
|
150
|
+
if (!(scriptSource instanceof Error)) {
|
|
110
151
|
(0, fs_cache_1.setCachedSelectivityFile)(fs_cache_1.CacheType.Asset, fixedUrl, scriptSource).catch(() => { });
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
.catch((err) => err);
|
|
152
|
+
}
|
|
153
|
+
return scriptSource;
|
|
114
154
|
})();
|
|
115
155
|
this._scriptIdToSourceUrl[scriptId] ||= url;
|
|
116
156
|
this._scriptsSource[scriptId] ||= scriptSourcePromise;
|
|
@@ -167,21 +207,93 @@ class JSSelectivity {
|
|
|
167
207
|
Promise.allSettled(Object.values(this._scriptsSourceMap)),
|
|
168
208
|
]);
|
|
169
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Resolves the given coverage into original source files and accumulates them into "_dependingSourceFiles".
|
|
212
|
+
* Must run while the "scriptId -> source" maps still describe the scripts the coverage was taken from
|
|
213
|
+
* (i.e. before the page is navigated away and the maps are cleared).
|
|
214
|
+
*/
|
|
215
|
+
async _resolveCoverageToDeps(coverageScripts) {
|
|
216
|
+
const grouppedByScriptCoverage = (0, lodash_1.groupBy)(coverageScripts, "scriptId");
|
|
217
|
+
const scriptIds = Object.keys(grouppedByScriptCoverage);
|
|
218
|
+
await Promise.all(scriptIds.map(async (scriptId) => {
|
|
219
|
+
const [source, sourceMaps] = await Promise.all([
|
|
220
|
+
this._scriptsSource[scriptId],
|
|
221
|
+
this._scriptsSourceMap[scriptId],
|
|
222
|
+
]);
|
|
223
|
+
const sourceMapUrl = this._scriptIdToSourceMapUrl[scriptId];
|
|
224
|
+
// Every "scriptId" has only one uniq "url"
|
|
225
|
+
const sourceUrl = this._scriptIdToSourceUrl[scriptId] || grouppedByScriptCoverage[scriptId][0].url;
|
|
226
|
+
// Function was called, but source maps were not generated for the file
|
|
227
|
+
// Or its anonymous script, without source url
|
|
228
|
+
if (!source || !sourceMaps || !sourceUrl) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (source instanceof Error) {
|
|
232
|
+
throw new Error([`JS Selectivity: Couldn't load source code from ${sourceUrl}:`, String(source)].join("\n"));
|
|
233
|
+
}
|
|
234
|
+
if (sourceMaps instanceof Error) {
|
|
235
|
+
throw new Error([`JS Selectivity: Couldn't load source maps from ${sourceMapUrl}`, String(sourceMaps)].join("\n"));
|
|
236
|
+
}
|
|
237
|
+
if ((0, utils_1.isCachedOnFs)(sourceMaps) && !sourceMapUrl) {
|
|
238
|
+
throw new Error("Assertation failed: souce map url has to present if source maps are fs-cached");
|
|
239
|
+
}
|
|
240
|
+
const [sourceString, sourceMapsString] = await Promise.all([
|
|
241
|
+
(0, utils_1.isCachedOnFs)(source) ? (0, fs_cache_1.getCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceUrl) : source,
|
|
242
|
+
(0, utils_1.isCachedOnFs)(sourceMaps)
|
|
243
|
+
? (0, fs_cache_1.getCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceMapUrl)
|
|
244
|
+
: sourceMaps,
|
|
245
|
+
]);
|
|
246
|
+
if (!sourceString || !sourceMapsString) {
|
|
247
|
+
throw new Error(`JS Selectivity: fs-cache is broken for ${sourceUrl}`);
|
|
248
|
+
}
|
|
249
|
+
const parsedSourceMapRanges = await (0, utils_1.parseSourceMapRanges)(sourceString, sourceMapsString, this._sourceRoot);
|
|
250
|
+
const dependingSourceFiles = (0, utils_1.extractSourceFilesDeps)(parsedSourceMapRanges, grouppedByScriptCoverage[scriptId], isSourceCodeFile);
|
|
251
|
+
for (const sourceFile of dependingSourceFiles.values()) {
|
|
252
|
+
this._dependingSourceFiles.add(sourceFile);
|
|
253
|
+
}
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
170
256
|
async start() {
|
|
171
257
|
const debuggerOnScriptParsedFn = (this._debuggerOnScriptParsedFn = this._processScript.bind(this));
|
|
172
258
|
const sessionId = this._sessionId;
|
|
173
259
|
this._cdp.debugger.on("scriptParsed", debuggerOnScriptParsedFn);
|
|
174
|
-
await this._cdp.profiler.startPreciseCoverage(sessionId,
|
|
175
|
-
callCount: false,
|
|
176
|
-
detailed: false,
|
|
177
|
-
allowTriggeredUpdates: false,
|
|
178
|
-
});
|
|
260
|
+
await this._cdp.profiler.startPreciseCoverage(sessionId, PRECISE_COVERAGE_PARAMS);
|
|
179
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Called on "beforeunload", while the leaving page is still alive (its isolate not yet destroyed). Resolves the
|
|
264
|
+
* page's coverage into dependencies. Does NOT reset coverage or clear maps — that happens later, at the next
|
|
265
|
+
* page boundary (flushPage), once the leaving page has fully finished executing.
|
|
266
|
+
*/
|
|
180
267
|
async takeCoverageSnapshot() {
|
|
181
268
|
const coveragePart = await this._cdp.profiler.takePreciseCoverage(this._sessionId);
|
|
182
269
|
this._ensureScriptsAreLoading(coveragePart.result);
|
|
183
270
|
await this._waitForLoadingScripts();
|
|
184
|
-
|
|
271
|
+
// Missing a dependency is worse than failing the test, so resolution errors are propagated (and turned into a
|
|
272
|
+
// test failure by the orchestrator in index.ts), never swallowed into a partial dump.
|
|
273
|
+
await this._resolveCoverageToDeps(coveragePart.result);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Called at a page boundary — the new document's start, and on bfcache "pageshow" — while the renderer is paused
|
|
277
|
+
* before the incoming page's scripts run. Resolves whatever is left of the previous page (same-process code that
|
|
278
|
+
* ran during unload), then RESETS precise coverage and CLEARS the script maps. This guarantees the next page's
|
|
279
|
+
* coverage window and "scriptId" namespace start empty, so reused ids cannot be mistaken for the previous page's.
|
|
280
|
+
*/
|
|
281
|
+
async flushPage() {
|
|
282
|
+
const coveragePart = await this._cdp.profiler.takePreciseCoverage(this._sessionId);
|
|
283
|
+
this._ensureScriptsAreLoading(coveragePart.result);
|
|
284
|
+
await this._waitForLoadingScripts();
|
|
285
|
+
await this._resolveCoverageToDeps(coveragePart.result);
|
|
286
|
+
// Reset coverage so the next page's window starts empty (a persisting same-process isolate would otherwise
|
|
287
|
+
// keep re-reporting this page's scripts under ids that the next page reuses).
|
|
288
|
+
await this._cdp.profiler.stopPreciseCoverage(this._sessionId);
|
|
289
|
+
await this._cdp.profiler.startPreciseCoverage(this._sessionId, PRECISE_COVERAGE_PARAMS);
|
|
290
|
+
// Clear the script maps so the next page parses into an empty namespace and reused "scriptId"s can't hit a
|
|
291
|
+
// stale mapping from the previous page.
|
|
292
|
+
this._scriptsSource = {};
|
|
293
|
+
this._scriptsSourceMap = {};
|
|
294
|
+
this._scriptIdToSourceUrl = {};
|
|
295
|
+
this._scriptIdToSourceMapUrl = {};
|
|
296
|
+
this._scriptIdToHash = {};
|
|
185
297
|
}
|
|
186
298
|
/** @param drop only performs cleanup without providing actual deps. Should be "true" if test is failed */
|
|
187
299
|
async stop(drop) {
|
|
@@ -190,49 +302,10 @@ class JSSelectivity {
|
|
|
190
302
|
return null;
|
|
191
303
|
}
|
|
192
304
|
const coverageLastPart = await this._cdp.profiler.takePreciseCoverage(this._sessionId);
|
|
193
|
-
const coverageScripts = [...this._coverageResult, ...coverageLastPart.result];
|
|
194
305
|
this._ensureScriptsAreLoading(coverageLastPart.result);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
await Promise.all(scriptIds.map(async (scriptId) => {
|
|
199
|
-
const [source, sourceMaps] = await Promise.all([
|
|
200
|
-
this._scriptsSource[scriptId],
|
|
201
|
-
this._scriptsSourceMap[scriptId],
|
|
202
|
-
]);
|
|
203
|
-
const sourceMapUrl = this._scriptIdToSourceMapUrl[scriptId];
|
|
204
|
-
// Every "scriptId" has only one uniq "url"
|
|
205
|
-
const sourceUrl = this._scriptIdToSourceUrl[scriptId] || grouppedByScriptCoverage[scriptId][0].url;
|
|
206
|
-
// Function was called, but source maps were not generated for the file
|
|
207
|
-
// Or its anonymous script, without source url
|
|
208
|
-
if (!source || !sourceMaps || !sourceUrl) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (source instanceof Error) {
|
|
212
|
-
throw new Error([`JS Selectivity: Couldn't load source code from ${sourceUrl}:`, String(source)].join("\n"));
|
|
213
|
-
}
|
|
214
|
-
if (sourceMaps instanceof Error) {
|
|
215
|
-
throw new Error([`JS Selectivity: Couldn't load source maps from ${sourceMapUrl}`, String(sourceMaps)].join("\n"));
|
|
216
|
-
}
|
|
217
|
-
if ((0, utils_1.isCachedOnFs)(sourceMaps) && !sourceMapUrl) {
|
|
218
|
-
throw new Error("Assertation failed: souce map url has to present if source maps are fs-cached");
|
|
219
|
-
}
|
|
220
|
-
const [sourceString, sourceMapsString] = await Promise.all([
|
|
221
|
-
(0, utils_1.isCachedOnFs)(source) ? (0, fs_cache_1.getCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceUrl) : source,
|
|
222
|
-
(0, utils_1.isCachedOnFs)(sourceMaps)
|
|
223
|
-
? (0, fs_cache_1.getCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceMapUrl)
|
|
224
|
-
: sourceMaps,
|
|
225
|
-
]);
|
|
226
|
-
if (!sourceString || !sourceMapsString) {
|
|
227
|
-
throw new Error(`JS Selectivity: fs-cache is broken for ${sourceUrl}`);
|
|
228
|
-
}
|
|
229
|
-
const parsedSourceMapRanges = await (0, utils_1.parseSourceMapRanges)(sourceString, sourceMapsString, this._sourceRoot);
|
|
230
|
-
const dependingSourceFiles = (0, utils_1.extractSourceFilesDeps)(parsedSourceMapRanges, grouppedByScriptCoverage[scriptId], isSourceCodeFile);
|
|
231
|
-
for (const sourceFile of dependingSourceFiles.values()) {
|
|
232
|
-
totalDependingSourceFiles.add(sourceFile);
|
|
233
|
-
}
|
|
234
|
-
}));
|
|
235
|
-
return totalDependingSourceFiles;
|
|
306
|
+
await this._waitForLoadingScripts();
|
|
307
|
+
await this._resolveCoverageToDeps(coverageLastPart.result);
|
|
308
|
+
return this._dependingSourceFiles;
|
|
236
309
|
}
|
|
237
310
|
finally {
|
|
238
311
|
this._debuggerOnScriptParsedFn && this._cdp.debugger.off("scriptParsed", this._debuggerOnScriptParsedFn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-selectivity.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/js-selectivity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"js-selectivity.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/js-selectivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CDP } from "..";
|
|
2
|
+
import type { CDPSessionId } from "../types";
|
|
3
|
+
export interface ClickNavigationGuard {
|
|
4
|
+
onBeforeUnloadPause: () => void;
|
|
5
|
+
onBfcacheRestorePause: () => boolean;
|
|
6
|
+
completeBfcacheRestore: () => void;
|
|
7
|
+
dispose: () => void;
|
|
8
|
+
}
|
|
9
|
+
interface CreateClickNavigationGuardOptions {
|
|
10
|
+
browser: WebdriverIO.Browser;
|
|
11
|
+
cdp: CDP;
|
|
12
|
+
cdpSessionId: CDPSessionId;
|
|
13
|
+
pageLoadStrategy: "normal" | "eager";
|
|
14
|
+
pageLoadTimeout: number | null;
|
|
15
|
+
waitForPageSwitch: () => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const createClickNavigationGuard: (options: CreateClickNavigationGuardOptions) => ClickNavigationGuard;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createClickNavigationGuard = void 0;
|
|
4
|
+
const click_command_guard_1 = require("./click-command-guard");
|
|
5
|
+
const createDeferred = () => {
|
|
6
|
+
let resolve;
|
|
7
|
+
const promise = new Promise(done => {
|
|
8
|
+
resolve = done;
|
|
9
|
+
});
|
|
10
|
+
return { promise, resolve };
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Tracks click-triggered top-frame navigation using stable CDP 1.3 signals.
|
|
14
|
+
*
|
|
15
|
+
* Selectivity pauses the renderer in beforeunload to preserve coverage. ChromeDriver can return from an element click
|
|
16
|
+
* while that pause is active, before its own navigation wait sees the new document. The guard keeps the click pending
|
|
17
|
+
* through the coverage page-switch queue, navigation commit, and the configured page-load milestone.
|
|
18
|
+
*/
|
|
19
|
+
class ClickNavigationTracker {
|
|
20
|
+
constructor(_options) {
|
|
21
|
+
this._options = _options;
|
|
22
|
+
this._navigationState = null;
|
|
23
|
+
this._navigationWait = null;
|
|
24
|
+
this._navigationGeneration = {};
|
|
25
|
+
this._rendererRoundtripWait = null;
|
|
26
|
+
this._openJavaScriptDialogType = null;
|
|
27
|
+
this._isBfcacheRestoreObserved = false;
|
|
28
|
+
this._activeClick = null;
|
|
29
|
+
this.startClick = () => {
|
|
30
|
+
this._isBfcacheRestoreObserved = false;
|
|
31
|
+
this._clearNavigation();
|
|
32
|
+
this._activeClick = {};
|
|
33
|
+
};
|
|
34
|
+
this.waitForNavigationCompletion = async () => {
|
|
35
|
+
try {
|
|
36
|
+
await this._options.waitForPageSwitch();
|
|
37
|
+
if (!this._activeClick) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
await this._waitForRendererRoundtrip();
|
|
41
|
+
if (!this._activeClick) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
await this._waitForNavigation();
|
|
45
|
+
await this._options.waitForPageSwitch();
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
this._activeClick = null;
|
|
49
|
+
this._isBfcacheRestoreObserved = false;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.cancelClick = () => {
|
|
53
|
+
this._activeClick = null;
|
|
54
|
+
this._isBfcacheRestoreObserved = false;
|
|
55
|
+
this._rendererRoundtripWait?.resolve();
|
|
56
|
+
this._clearNavigation();
|
|
57
|
+
};
|
|
58
|
+
this.onBeforeUnloadPause = () => {
|
|
59
|
+
this._isBfcacheRestoreObserved = false;
|
|
60
|
+
this._markNavigationIntent();
|
|
61
|
+
};
|
|
62
|
+
this.onBfcacheRestorePause = () => {
|
|
63
|
+
if (!this._activeClick) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
this._isBfcacheRestoreObserved = true;
|
|
67
|
+
return true;
|
|
68
|
+
};
|
|
69
|
+
this.completeBfcacheRestore = () => {
|
|
70
|
+
this._clearNavigation();
|
|
71
|
+
};
|
|
72
|
+
this.addListeners = () => {
|
|
73
|
+
const { cdp } = this._options;
|
|
74
|
+
cdp.page.on("frameNavigated", this._onFrameNavigated);
|
|
75
|
+
cdp.page.on("domContentEventFired", this._onDomContentEventFired);
|
|
76
|
+
cdp.page.on("loadEventFired", this._onLoadEventFired);
|
|
77
|
+
cdp.page.on("javascriptDialogOpening", this._onJavaScriptDialogOpening);
|
|
78
|
+
cdp.page.on("javascriptDialogClosed", this._onJavaScriptDialogClosed);
|
|
79
|
+
};
|
|
80
|
+
this.removeListeners = () => {
|
|
81
|
+
const { cdp } = this._options;
|
|
82
|
+
cdp.page.off("frameNavigated", this._onFrameNavigated);
|
|
83
|
+
cdp.page.off("domContentEventFired", this._onDomContentEventFired);
|
|
84
|
+
cdp.page.off("loadEventFired", this._onLoadEventFired);
|
|
85
|
+
cdp.page.off("javascriptDialogOpening", this._onJavaScriptDialogOpening);
|
|
86
|
+
cdp.page.off("javascriptDialogClosed", this._onJavaScriptDialogClosed);
|
|
87
|
+
};
|
|
88
|
+
this._clearNavigation = () => {
|
|
89
|
+
this._navigationGeneration = {};
|
|
90
|
+
this._navigationWait?.resolve();
|
|
91
|
+
this._navigationWait = null;
|
|
92
|
+
this._navigationState = null;
|
|
93
|
+
};
|
|
94
|
+
this._markNavigationIntent = () => {
|
|
95
|
+
if (!this._activeClick || this._navigationState) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this._navigationState = "waitingForCommit";
|
|
99
|
+
this._navigationWait = createDeferred();
|
|
100
|
+
};
|
|
101
|
+
this._waitForNavigation = async () => {
|
|
102
|
+
if (this._openJavaScriptDialogType === "beforeunload") {
|
|
103
|
+
// Return control so the caller can accept or dismiss the prompt. Automatically accepted prompts close before
|
|
104
|
+
// this check and remain guarded until commit and load.
|
|
105
|
+
this._clearNavigation();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const navigationWait = this._navigationWait;
|
|
109
|
+
const pageLoadTimeout = this._options.pageLoadTimeout;
|
|
110
|
+
if (!navigationWait || !pageLoadTimeout) {
|
|
111
|
+
await navigationWait?.promise;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let timeoutId = null;
|
|
115
|
+
try {
|
|
116
|
+
await Promise.race([
|
|
117
|
+
navigationWait.promise,
|
|
118
|
+
new Promise((_, reject) => {
|
|
119
|
+
timeoutId = setTimeout(() => {
|
|
120
|
+
reject(new Error("Selectivity: timed out waiting for a click-triggered navigation to complete"));
|
|
121
|
+
}, pageLoadTimeout);
|
|
122
|
+
}),
|
|
123
|
+
]);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
if (timeoutId) {
|
|
127
|
+
clearTimeout(timeoutId);
|
|
128
|
+
}
|
|
129
|
+
this._clearNavigation();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
this._waitForRendererRoundtrip = async () => {
|
|
133
|
+
if (this._openJavaScriptDialogType !== null) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const rendererRoundtripWait = createDeferred();
|
|
137
|
+
const activeClick = this._activeClick;
|
|
138
|
+
const navigationGeneration = this._navigationGeneration;
|
|
139
|
+
this._rendererRoundtripWait = rendererRoundtripWait;
|
|
140
|
+
try {
|
|
141
|
+
await Promise.race([
|
|
142
|
+
this._options.cdp.runtime
|
|
143
|
+
.evaluate(this._options.cdpSessionId, { expression: "1", returnByValue: true })
|
|
144
|
+
.then(() => undefined)
|
|
145
|
+
.catch(() => {
|
|
146
|
+
// The context can disappear after navigation starts. Ignore stale failures delivered after this
|
|
147
|
+
// click or navigation generation already completed.
|
|
148
|
+
if (this._activeClick === activeClick && this._navigationGeneration === navigationGeneration) {
|
|
149
|
+
this._markNavigationIntent();
|
|
150
|
+
}
|
|
151
|
+
}),
|
|
152
|
+
rendererRoundtripWait.promise,
|
|
153
|
+
]);
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
if (this._rendererRoundtripWait === rendererRoundtripWait) {
|
|
157
|
+
this._rendererRoundtripWait = null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
this._onFrameNavigated = ({ frame }, eventCdpSessionId) => {
|
|
162
|
+
if (eventCdpSessionId !== this._options.cdpSessionId || frame.parentId || !this._activeClick) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (this._isBfcacheRestoreObserved) {
|
|
166
|
+
// The pageshow.persisted pause already guards the restore through coverage flush and Debugger.resume.
|
|
167
|
+
this._isBfcacheRestoreObserved = false;
|
|
168
|
+
this._clearNavigation();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this._markNavigationIntent();
|
|
172
|
+
if (this._navigationState === "waitingForCommit") {
|
|
173
|
+
this._navigationState = "committed";
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
this._onDomContentEventFired = (_params, eventCdpSessionId) => {
|
|
177
|
+
if (this._options.pageLoadStrategy === "eager" &&
|
|
178
|
+
eventCdpSessionId === this._options.cdpSessionId &&
|
|
179
|
+
this._navigationState === "committed") {
|
|
180
|
+
this._clearNavigation();
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
this._onLoadEventFired = (_params, eventCdpSessionId) => {
|
|
184
|
+
if (this._options.pageLoadStrategy === "normal" &&
|
|
185
|
+
eventCdpSessionId === this._options.cdpSessionId &&
|
|
186
|
+
this._navigationState === "committed") {
|
|
187
|
+
this._clearNavigation();
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
this._onJavaScriptDialogOpening = ({ type }, eventCdpSessionId) => {
|
|
191
|
+
if (eventCdpSessionId !== this._options.cdpSessionId) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this._openJavaScriptDialogType = type;
|
|
195
|
+
this._rendererRoundtripWait?.resolve();
|
|
196
|
+
if (type !== "beforeunload") {
|
|
197
|
+
this._clearNavigation();
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
this._onJavaScriptDialogClosed = ({ result }, eventCdpSessionId) => {
|
|
201
|
+
if (eventCdpSessionId !== this._options.cdpSessionId) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const dialogType = this._openJavaScriptDialogType;
|
|
205
|
+
this._openJavaScriptDialogType = null;
|
|
206
|
+
if (dialogType === "beforeunload" && !result) {
|
|
207
|
+
this._clearNavigation();
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const createClickNavigationGuard = (options) => {
|
|
213
|
+
const tracker = new ClickNavigationTracker(options);
|
|
214
|
+
let disableClickCommandGuard;
|
|
215
|
+
try {
|
|
216
|
+
tracker.addListeners();
|
|
217
|
+
disableClickCommandGuard = (0, click_command_guard_1.enableClickCommandGuard)(options.browser, tracker);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
tracker.removeListeners();
|
|
221
|
+
throw err;
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
onBeforeUnloadPause: tracker.onBeforeUnloadPause,
|
|
225
|
+
onBfcacheRestorePause: tracker.onBfcacheRestorePause,
|
|
226
|
+
completeBfcacheRestore: tracker.completeBfcacheRestore,
|
|
227
|
+
dispose: () => {
|
|
228
|
+
disableClickCommandGuard();
|
|
229
|
+
tracker.removeListeners();
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
exports.createClickNavigationGuard = createClickNavigationGuard;
|
|
234
|
+
//# sourceMappingURL=navigation-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-guard.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/navigation-guard.ts"],"names":[],"mappings":"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"}
|