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) {
const waitForEvent = helper.waitForEvent(progress, this, BrowserContext.Events.Page);
progress.cleanupWhenAborted(() => waitForEvent.dispose);
await waitForEvent.promise;
const page = (await waitForEvent.promise) as Page;
if (page._pageIsError)
throw page._pageIsError;
}
const pages = this.pages();
if (pages[0]._pageIsError)
throw pages[0]._pageIsError;
await pages[0].mainFrame()._waitForLoadState(progress, 'load');
return pages;
}

View File

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