From c76f783f02a8acd3f5d184fdb5c48ab0dcc8781d Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 14 Jan 2020 10:20:39 -0800 Subject: [PATCH] addressed comments --- src/frames.ts | 5 ++++- src/page.ts | 12 ------------ src/webkit/wkPage.ts | 1 - test/navigation.spec.js | 25 ++++++------------------- 4 files changed, 10 insertions(+), 33 deletions(-) diff --git a/src/frames.ts b/src/frames.ts index df5b236f1a..90598143e3 100644 --- a/src/frames.ts +++ b/src/frames.ts @@ -309,8 +309,11 @@ export class Frame { async goto(url: string, options?: GotoOptions): Promise { let referer = (this._page._state.extraHTTPHeaders || {})['referer']; - if (options && options.referer !== undefined) + if (options && options.referer !== undefined) { + if (referer !== undefined && referer !== options.referer) + throw new Error('"referer" is already specified as extra HTTP header'); referer = options.referer; + } const watcher = new LifecycleWatcher(this, options, false /* supportUrlMatch */); let navigateResult: GotoResult; diff --git a/src/page.ts b/src/page.ts index 43534267cf..47bf3304e0 100644 --- a/src/page.ts +++ b/src/page.ts @@ -171,18 +171,6 @@ export class Page extends platform.EventEmitter { this.emit(Events.Page.FileChooser, fileChooser); } - _validateNavigationReferrer(referrer: string | undefined) { - if (!referrer) - return; - if (!this._state.extraHTTPHeaders) - return; - const header = this._state.extraHTTPHeaders['referer']; - if (!header) - return; - if (header !== referrer) - throw new Error('"referer" is already specified as extra HTTP header'); - } - browserContext(): BrowserContext { return this._browserContext; } diff --git a/src/webkit/wkPage.ts b/src/webkit/wkPage.ts index 185b04f29e..6416b8a8f3 100644 --- a/src/webkit/wkPage.ts +++ b/src/webkit/wkPage.ts @@ -223,7 +223,6 @@ export class WKPage implements PageDelegate { } async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise { - this._page._validateNavigationReferrer(referrer); if (this._pageProxySession.isDisposed()) throw new Error('Target closed'); const pageProxyId = this._pageProxySession.sessionId; diff --git a/test/navigation.spec.js b/test/navigation.spec.js index 46b717e7b2..552e4648db 100644 --- a/test/navigation.spec.js +++ b/test/navigation.spec.js @@ -322,26 +322,13 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROMI expect(request2.headers['referer']).toBe(server.PREFIX + '/grid.html'); expect(page.url()).toBe(server.PREFIX + '/grid.html'); }); - it('should use referer option when setExtraHTTPHeaders provides referer', async({page, server}) => { + it('should reject referer option when setExtraHTTPHeaders provides referer', async({page, server}) => { await page.setExtraHTTPHeaders({ 'referer': 'http://microsoft.com/' }); - try { - const [request1, request2] = await Promise.all([ - server.waitForRequest('/grid.html'), - server.waitForRequest('/digits/1.png'), - page.goto(server.PREFIX + '/grid.html', { - referer: 'http://google.com/', - }), - ]); - expect(request1.headers['referer']).toBe('http://google.com/'); - // Make sure subresources use referer specified by setExtraHTTPHeaders. - expect(request2.headers['referer']).toBe('http://microsoft.com/'); - expect(page.url()).toBe(server.PREFIX + '/grid.html'); - } catch (error) { - if (FFOX || WEBKIT) - expect(error.message).toBe('"referer" is already specified as extra HTTP header'); - else - throw error; - } + let error; + await page.goto(server.PREFIX + '/grid.html', { + referer: 'http://google.com/', + }).catch(e => error = e); + expect(error.message).toBe('"referer" is already specified as extra HTTP header'); }); it('should override referrer-policy', async({page, server}) => { server.setRoute('/grid.html', (req, res) => {