diff --git a/package-lock.json b/package-lock.json index d46a31549c..27fedbc5a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "playwright-core", - "version": "0.15.0-post", + "version": "0.16.0-post", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/chromium/crPage.ts b/src/chromium/crPage.ts index 47de9e6ebe..871dfa5949 100644 --- a/src/chromium/crPage.ts +++ b/src/chromium/crPage.ts @@ -502,7 +502,8 @@ class FrameSession { } _onFrameRequestedNavigation(payload: Protocol.Page.frameRequestedNavigationPayload) { - this._page._frameManager.frameRequestedNavigation(payload.frameId, ''); + if (payload.disposition === 'currentTab') + this._page._frameManager.frameRequestedNavigation(payload.frameId, ''); } _onFrameNavigatedWithinDocument(frameId: string, url: string) { diff --git a/test/browsercontext.spec.js b/test/browsercontext.spec.js index 78a264b204..31a526a9c8 100644 --- a/test/browsercontext.spec.js +++ b/test/browsercontext.spec.js @@ -651,9 +651,7 @@ describe('Events.BrowserContext.Page', function() { ]); await context.close(); }); - it.fail(CHROMIUM || WEBKIT)('should work with Shift-clicking', async({browser, server}) => { - // Chromium: Shift+Click fires frameRequestedNavigation that never materializes - // because it actually opens a new window. + it.fail(WEBKIT)('should work with Shift-clicking', async({browser, server}) => { // WebKit: Shift+Click does not open a new window. const context = await browser.newContext(); const page = await context.newPage(); @@ -663,13 +661,11 @@ describe('Events.BrowserContext.Page', function() { context.waitForEvent('page'), page.click('a', { modifiers: ['Shift'] }), ]); - expect(await page.evaluate(() => !!window.opener)).toBe(false); - expect(await popup.evaluate(() => !!window.opener)).toBe(false); + expect(await popup.opener()).toBe(null); await context.close(); }); - it.fail(CHROMIUM || WEBKIT)('should work with Ctrl-clicking', async({browser, server}) => { - // Chromium: Ctrl+Click fires frameRequestedNavigation that never materializes - // because it actually opens a new tab. + it.fail(WEBKIT || FFOX)('should work with Ctrl-clicking', async({browser, server}) => { + // Firefox: reports an opener in this case. // WebKit: Ctrl+Click does not open a new tab. const context = await browser.newContext(); const page = await context.newPage(); @@ -679,8 +675,7 @@ describe('Events.BrowserContext.Page', function() { context.waitForEvent('page'), page.click('a', { modifiers: [ MAC ? 'Meta' : 'Control'] }), ]); - expect(await page.evaluate(() => !!window.opener)).toBe(false); - expect(await popup.evaluate(() => !!window.opener)).toBe(false); + expect(await popup.opener()).toBe(null); await context.close(); }); }); diff --git a/test/download.spec.js b/test/download.spec.js index bac21e72a3..1daf73ecdf 100644 --- a/test/download.spec.js +++ b/test/download.spec.js @@ -96,10 +96,9 @@ describe('Download', function() { expect(fs.readFileSync(path).toString()).toBe('Hello world'); await page.close(); }) - it.skip(FFOX).fail(CHROMIUM || WEBKIT)('should report alt-click downloads', async({browser, server}) => { + it.skip(FFOX).fail(WEBKIT)('should report alt-click downloads', async({browser, server}) => { // Firefox does not download on alt-click by default. // Our WebKit embedder does not download on alt-click, although Safari does. - // Chromium hangs waiting for navigation because of Page.frameRequestedNavigation. server.setRoute('/download', (req, res) => { res.setHeader('Content-Type', 'application/octet-stream'); res.end(`Hello world`); diff --git a/test/popup.spec.js b/test/popup.spec.js index a5c3400151..9f798ea060 100644 --- a/test/popup.spec.js +++ b/test/popup.spec.js @@ -304,43 +304,6 @@ describe('Page.Events.Popup', function() { expect(await popup.evaluate(() => !!window.opener)).toBe(true); await context.close(); }); - it.fail(true)('should work with Shift-clicking', async({browser, server}) => { - // Chromium: - // - Shift+Click fires frameRequestedNavigation that never materializes - // because it actually opens a new window. - // - New window does not report an opener. - // WebKit: Shift+Click does not open a new window. - // Firefox: new window does not report an opener. - const context = await browser.newContext(); - const page = await context.newPage(); - await page.goto(server.EMPTY_PAGE); - await page.setContent('yo'); - const [popup] = await Promise.all([ - page.waitForEvent('popup'), - page.click('a', { modifiers: ['Shift'] }), - ]); - expect(await page.evaluate(() => !!window.opener)).toBe(false); - expect(await popup.evaluate(() => !!window.opener)).toBe(true); - await context.close(); - }); - it.fail(CHROMIUM || WEBKIT)('should work with Control-clicking', async({browser, server}) => { - // Chromium: - // - Shift+Click fires frameRequestedNavigation that never materializes - // because it actually opens a new tab. - // - New tab does not report an opener. - // WebKit: Shift+Click does not open a new tab. - const context = await browser.newContext(); - const page = await context.newPage(); - await page.goto(server.EMPTY_PAGE); - await page.setContent('yo'); - const [popup] = await Promise.all([ - page.waitForEvent('popup'), - page.click('a', { modifiers: [MAC ? 'Meta' : 'Control'] }), - ]); - expect(await page.evaluate(() => !!window.opener)).toBe(false); - expect(await popup.evaluate(() => !!window.opener)).toBe(false); - await context.close(); - }); it('should work with fake-clicking target=_blank and rel=noopener', async({browser, server}) => { const context = await browser.newContext(); const page = await context.newPage();