From 04dbd8f39a5f1a6df360f9ab094ff7f8f24a9682 Mon Sep 17 00:00:00 2001 From: Alex Rudenko Date: Thu, 19 May 2022 14:05:33 +0200 Subject: [PATCH] Revert "fix: do not use loaderId for Lifecycle events (#8353)" (#8369) This reverts commit 7107d2d300f9a5b5c38210163ff5df42d19d8453. --- src/common/FrameManager.ts | 7 +++++-- src/common/LifecycleWatcher.ts | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/common/FrameManager.ts b/src/common/FrameManager.ts index f3dcc324883..c9e3960e6f9 100644 --- a/src/common/FrameManager.ts +++ b/src/common/FrameManager.ts @@ -194,6 +194,7 @@ export class FrameManager extends EventEmitter { } = options; const watcher = new LifecycleWatcher(this, frame, waitUntil, timeout); + let ensureNewDocumentNavigation = false; let error = await Promise.race([ navigate(this._client, url, referer, frame._id), watcher.timeoutOrTerminationPromise(), @@ -201,8 +202,9 @@ export class FrameManager extends EventEmitter { if (!error) { error = await Promise.race([ watcher.timeoutOrTerminationPromise(), - watcher.newDocumentNavigationPromise(), - watcher.sameDocumentNavigationPromise(), + ensureNewDocumentNavigation + ? watcher.newDocumentNavigationPromise() + : watcher.sameDocumentNavigationPromise(), ]); } watcher.dispose(); @@ -221,6 +223,7 @@ export class FrameManager extends EventEmitter { referrer, frameId, }); + ensureNewDocumentNavigation = !!response.loaderId; return response.errorText ? new Error(`${response.errorText} at ${url}`) : null; diff --git a/src/common/LifecycleWatcher.ts b/src/common/LifecycleWatcher.ts index 3cff0c859e8..276ddde42ed 100644 --- a/src/common/LifecycleWatcher.ts +++ b/src/common/LifecycleWatcher.ts @@ -64,6 +64,7 @@ export class LifecycleWatcher { _timeout: number; _navigationRequest?: HTTPRequest; _eventListeners: PuppeteerEventListener[]; + _initialLoaderId: string; _sameDocumentNavigationPromise: Promise; _sameDocumentNavigationCompleteCallback: (x?: Error) => void; @@ -81,7 +82,6 @@ export class LifecycleWatcher { _maximumTimer?: NodeJS.Timeout; _hasSameDocumentNavigation?: boolean; - _newDocumentNavigation?: boolean; _swapped?: boolean; constructor( @@ -100,6 +100,7 @@ export class LifecycleWatcher { this._frameManager = frameManager; this._frame = frame; + this._initialLoaderId = frame._loaderId; this._timeout = timeout; this._navigationRequest = null; this._eventListeners = [ @@ -121,11 +122,6 @@ export class LifecycleWatcher { FrameManagerEmittedEvents.FrameNavigatedWithinDocument, this._navigatedWithinDocument.bind(this) ), - helper.addEventListener( - this._frameManager, - FrameManagerEmittedEvents.FrameNavigated, - this._navigated.bind(this) - ), helper.addEventListener( this._frameManager, FrameManagerEmittedEvents.FrameSwapped, @@ -221,12 +217,6 @@ export class LifecycleWatcher { this._checkLifecycleComplete(); } - _navigated(frame: Frame): void { - if (frame !== this._frame) return; - this._newDocumentNavigation = true; - this._checkLifecycleComplete(); - } - _frameSwapped(frame: Frame): void { if (frame !== this._frame) return; this._swapped = true; @@ -237,9 +227,19 @@ export class LifecycleWatcher { // We expect navigation to commit. if (!checkLifecycle(this._frame, this._expectedLifecycle)) return; this._lifecycleCallback(); + if ( + this._frame._loaderId === this._initialLoaderId && + !this._hasSameDocumentNavigation + ) { + if (this._swapped) { + this._swapped = false; + this._newDocumentNavigationCompleteCallback(); + } + return; + } if (this._hasSameDocumentNavigation) this._sameDocumentNavigationCompleteCallback(); - if (this._swapped || this._newDocumentNavigation) + if (this._frame._loaderId !== this._initialLoaderId) this._newDocumentNavigationCompleteCallback(); /**