fix(pageOrError): throw in launchPersistentContext if context page has errors (#5868)

This commit is contained in:
Pavel Feldman 2021-03-18 23:14:57 +08:00 committed by GitHub
parent bb21faf450
commit d53cea7029
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 4 deletions

View File

@ -195,9 +195,13 @@ export abstract class BrowserContext extends SdkObject {
if (!this.pages().length) { if (!this.pages().length) {
const waitForEvent = helper.waitForEvent(progress, this, BrowserContext.Events.Page); const waitForEvent = helper.waitForEvent(progress, this, BrowserContext.Events.Page);
progress.cleanupWhenAborted(() => waitForEvent.dispose); progress.cleanupWhenAborted(() => waitForEvent.dispose);
await waitForEvent.promise; const page = (await waitForEvent.promise) as Page;
if (page._pageIsError)
throw page._pageIsError;
} }
const pages = this.pages(); const pages = this.pages();
if (pages[0]._pageIsError)
throw pages[0]._pageIsError;
await pages[0].mainFrame()._waitForLoadState(progress, 'load'); await pages[0].mainFrame()._waitForLoadState(progress, 'load');
return pages; return pages;
} }

View File

@ -148,6 +148,7 @@ export class Page extends SdkObject {
readonly selectors: Selectors; readonly selectors: Selectors;
_video: Video | null = null; _video: Video | null = null;
readonly uniqueId: string; readonly uniqueId: string;
_pageIsError: Error | undefined;
constructor(delegate: PageDelegate, browserContext: BrowserContext) { constructor(delegate: PageDelegate, browserContext: BrowserContext) {
super(browserContext); super(browserContext);
@ -187,7 +188,7 @@ export class Page extends SdkObject {
// context/browser closure. Just ignore the page. // context/browser closure. Just ignore the page.
if (this._browserContext.isClosingOrClosed()) if (this._browserContext.isClosingOrClosed())
return; return;
this._setIsError(); this._setIsError(pageOrError);
} }
this._browserContext.emit(BrowserContext.Events.Page, this); this._browserContext.emit(BrowserContext.Events.Page, this);
const openerDelegate = this._delegate.openerDelegate(); const openerDelegate = this._delegate.openerDelegate();
@ -444,7 +445,8 @@ export class Page extends SdkObject {
await this._ownedContext.close(metadata); await this._ownedContext.close(metadata);
} }
private _setIsError() { private _setIsError(error: Error) {
this._pageIsError = error;
if (!this._frameManager.mainFrame()) if (!this._frameManager.mainFrame())
this._frameManager.frameAttached('<dummy>', null); this._frameManager.frameAttached('<dummy>', null);
} }

View File

@ -164,4 +164,3 @@ it('should not treat navigations as new popups', async ({context, server}) => {
await context.close(); await context.close();
expect(badSecondPopup).toBe(false); expect(badSecondPopup).toBe(false);
}); });