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.
@@ -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
- this._coverageResult = [];
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
- _processScript({ scriptId, url, sourceMapURL }, cdpSessionId) {
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._cdp.debugger
56
- .getScriptSource(this._sessionId, scriptId)
57
- .then(res => res.scriptSource)
58
- .then(data => (0, fs_cache_1.setCachedSelectivityFile)(fs_cache_1.CacheType.Asset, url, data)
59
- .then(() => true)
60
- .catch(err => {
61
- (0, debug_1.debugSelectivity)(`Couldn't offload asset from "${url}" to fs-cache: %O`, err);
62
- return data;
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
- return this._cdp.debugger
108
- .getScriptSource(this._sessionId, scriptId)
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
- return scriptSource;
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
- this._coverageResult.push(...coveragePart.result);
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
- const totalDependingSourceFiles = new Set();
196
- const grouppedByScriptCoverage = (0, lodash_1.groupBy)(coverageScripts, "scriptId");
197
- const scriptIds = Object.keys(grouppedByScriptCoverage);
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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"}