diff --git a/packages/playwright-core/src/server/dispatchers/artifactDispatcher.ts b/packages/playwright-core/src/server/dispatchers/artifactDispatcher.ts index ee549222f1..1996f11776 100644 --- a/packages/playwright-core/src/server/dispatchers/artifactDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/artifactDispatcher.ts @@ -107,7 +107,7 @@ export class ArtifactDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._object.delete(); this._dispose(); } diff --git a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts index 8bfc2ade0b..1805f0db64 100644 --- a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts @@ -273,7 +273,7 @@ export class BrowserContextDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._context.close(params); } diff --git a/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts index 7a24f55ab8..99ce5f961f 100644 --- a/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserDispatcher.ts @@ -56,12 +56,12 @@ export class BrowserDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._object.close(params); } async killForTests(_: any, metadata: CallMetadata): Promise { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._object.killForTests(); } diff --git a/packages/playwright-core/src/server/dispatchers/cdpSessionDispatcher.ts b/packages/playwright-core/src/server/dispatchers/cdpSessionDispatcher.ts index bf9dc61d76..33fa19f5e7 100644 --- a/packages/playwright-core/src/server/dispatchers/cdpSessionDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/cdpSessionDispatcher.ts @@ -35,7 +35,7 @@ export class CDPSessionDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._object.detach(); } } diff --git a/packages/playwright-core/src/server/dispatchers/dispatcher.ts b/packages/playwright-core/src/server/dispatchers/dispatcher.ts index c55558efd4..31931d1d31 100644 --- a/packages/playwright-core/src/server/dispatchers/dispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/dispatcher.ts @@ -99,7 +99,7 @@ export class Dispatcher { + metadata.potentiallyClosesScope = true; return await this._frame.click(metadata, params.selector, params); } @@ -265,7 +266,7 @@ export class FrameDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; const expectedValue = params.expectedValue ? parseArgument(params.expectedValue) : undefined; const result = await this._frame.expect(metadata, params.selector, { ...params, expectedValue }); if (result.received !== undefined) diff --git a/packages/playwright-core/src/server/dispatchers/jsHandleDispatcher.ts b/packages/playwright-core/src/server/dispatchers/jsHandleDispatcher.ts index 8fa5093560..547c499746 100644 --- a/packages/playwright-core/src/server/dispatchers/jsHandleDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/jsHandleDispatcher.ts @@ -68,7 +68,7 @@ export class JSHandleDispatcher extends Dispatcher { - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._object.dispose(); this._dispose(); } diff --git a/packages/playwright-core/src/server/dispatchers/pageDispatcher.ts b/packages/playwright-core/src/server/dispatchers/pageDispatcher.ts index 814538dbee..60e53a7ea9 100644 --- a/packages/playwright-core/src/server/dispatchers/pageDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/pageDispatcher.ts @@ -201,7 +201,7 @@ export class PageDispatcher extends Dispatcher { if (!params.runBeforeUnload) - metadata.closesScope = true; + metadata.potentiallyClosesScope = true; await this._page.close(metadata, params); } diff --git a/packages/protocol/src/callMetadata.ts b/packages/protocol/src/callMetadata.ts index 3f5fc78764..b011e9bf61 100644 --- a/packages/protocol/src/callMetadata.ts +++ b/packages/protocol/src/callMetadata.ts @@ -42,5 +42,5 @@ export type CallMetadata = { objectId?: string; pageId?: string; frameId?: string; - closesScope?: boolean; + potentiallyClosesScope?: boolean; }; diff --git a/tests/library/popup.spec.ts b/tests/library/popup.spec.ts index 8100fd28da..52e13c5175 100644 --- a/tests/library/popup.spec.ts +++ b/tests/library/popup.spec.ts @@ -261,6 +261,19 @@ it('should not throttle rAF in the opener page', async ({ page, server }) => { ]); }); +it('should not throw when click closes popup', async ({ browserName, page, server }) => { + it.fixme(browserName === 'firefox'); + await page.goto(server.EMPTY_PAGE); + const [popup] = await Promise.all([ + page.waitForEvent('popup'), + page.evaluate(() => { + const w = window.open('about:blank'); + w.document.body.innerHTML = ``; + }), + ]); + await popup.getByRole('button').click(); +}); + async function waitForRafs(page: Page, count: number): Promise { await page.evaluate(count => new Promise(resolve => { const onRaf = () => {