diff --git a/src/chromium/FrameManager.ts b/src/chromium/FrameManager.ts index dfdd536bc1..2c8f1ae775 100644 --- a/src/chromium/FrameManager.ts +++ b/src/chromium/FrameManager.ts @@ -272,8 +272,8 @@ export class FrameManager implements PageDelegate { this._page._onFileChooserOpened(handle); } - setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise { - return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders); + async setExtraHTTPHeaders(headers: network.Headers): Promise { + await this._client.send('Network.setExtraHTTPHeaders', { headers }); } setUserAgent(userAgent: string): Promise { diff --git a/src/chromium/NetworkManager.ts b/src/chromium/NetworkManager.ts index b20756deb5..df929bd15e 100644 --- a/src/chromium/NetworkManager.ts +++ b/src/chromium/NetworkManager.ts @@ -28,7 +28,6 @@ export class NetworkManager { private _page: Page; private _requestIdToRequest = new Map(); private _requestIdToRequestWillBeSentEvent = new Map(); - private _extraHTTPHeaders: network.Headers = {}; private _offline = false; private _credentials: {username: string, password: string} | null = null; private _attemptedAuthentications = new Set(); @@ -68,20 +67,6 @@ export class NetworkManager { await this._updateProtocolRequestInterception(); } - async setExtraHTTPHeaders(extraHTTPHeaders: network.Headers) { - this._extraHTTPHeaders = {}; - for (const key of Object.keys(extraHTTPHeaders)) { - const value = extraHTTPHeaders[key]; - assert(helper.isString(value), `Expected value of header "${key}" to be String, but "${typeof value}" is found.`); - this._extraHTTPHeaders[key.toLowerCase()] = value; - } - await this._client.send('Network.setExtraHTTPHeaders', { headers: this._extraHTTPHeaders }); - } - - extraHTTPHeaders(): network.Headers { - return Object.assign({}, this._extraHTTPHeaders); - } - async setOfflineMode(value: boolean) { if (this._offline === value) return; diff --git a/src/firefox/FrameManager.ts b/src/firefox/FrameManager.ts index 79940a3552..2194abf24c 100644 --- a/src/firefox/FrameManager.ts +++ b/src/firefox/FrameManager.ts @@ -182,8 +182,11 @@ export class FrameManager implements PageDelegate { return true; } - setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise { - return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders); + async setExtraHTTPHeaders(headers: network.Headers): Promise { + const array = []; + for (const [name, value] of Object.entries(headers)) + array.push({ name, value }); + await this._session.send('Network.setExtraHTTPHeaders', { headers: array }); } async setUserAgent(userAgent: string): Promise { diff --git a/src/firefox/NetworkManager.ts b/src/firefox/NetworkManager.ts index 2673178989..b93cbe5c61 100644 --- a/src/firefox/NetworkManager.ts +++ b/src/firefox/NetworkManager.ts @@ -45,15 +45,6 @@ export class NetworkManager { helper.removeEventListeners(this._eventListeners); } - async setExtraHTTPHeaders(headers: network.Headers) { - const array = []; - for (const [name, value] of Object.entries(headers)) { - assert(helper.isString(value), `Expected value of header "${name}" to be String, but "${typeof value}" is found.`); - array.push({name, value}); - } - await this._session.send('Network.setExtraHTTPHeaders', {headers: array}); - } - async setRequestInterception(enabled) { await this._session.send('Network.setRequestInterception', {enabled}); } diff --git a/src/page.ts b/src/page.ts index a84951baa0..9e85bdca35 100644 --- a/src/page.ts +++ b/src/page.ts @@ -253,7 +253,12 @@ export class Page extends EventEmitter { } setExtraHTTPHeaders(headers: network.Headers) { - this._state.extraHTTPHeaders = {...headers}; + this._state.extraHTTPHeaders = {}; + for (const key of Object.keys(headers)) { + const value = headers[key]; + assert(helper.isString(value), `Expected value of header "${key}" to be String, but "${typeof value}" is found.`); + this._state.extraHTTPHeaders[key.toLowerCase()] = value; + } return this._delegate.setExtraHTTPHeaders(headers); } diff --git a/src/webkit/FrameManager.ts b/src/webkit/FrameManager.ts index 30fae8dba8..bd41857616 100644 --- a/src/webkit/FrameManager.ts +++ b/src/webkit/FrameManager.ts @@ -94,6 +94,8 @@ export class FrameManager implements PageDelegate { promises.push(this._setJavaScriptEnabled(session, this._page._state.javascriptEnabled)); if (this._page._state.bypassCSP !== null) promises.push(this._setBypassCSP(session, this._page._state.bypassCSP)); + if (this._page._state.extraHTTPHeaders !== null) + promises.push(this._setExtraHTTPHeaders(session, this._page._state.extraHTTPHeaders)); await Promise.all(promises); } @@ -240,10 +242,6 @@ export class FrameManager implements PageDelegate { this._page._onFileChooserOpened(handle); } - setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise { - return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders); - } - async _ensureIsolatedWorld(name: string) { if (this._isolatedWorlds.has(name)) return; @@ -254,6 +252,10 @@ export class FrameManager implements PageDelegate { }); } + private async _setExtraHTTPHeaders(session: TargetSession, headers: network.Headers): Promise { + await session.send('Network.setExtraHTTPHeaders', { headers }); + } + private async _setUserAgent(session: TargetSession, userAgent: string): Promise { await session.send('Page.overrideUserAgent', { value: userAgent }); } @@ -280,6 +282,10 @@ export class FrameManager implements PageDelegate { await Promise.all(promises); } + async setExtraHTTPHeaders(headers: network.Headers): Promise { + await this._setExtraHTTPHeaders(this._session, headers); + } + async setUserAgent(userAgent: string): Promise { await this._setUserAgent(this._session, userAgent); await this._page.reload(); diff --git a/src/webkit/NetworkManager.ts b/src/webkit/NetworkManager.ts index 12335dada4..d4a981849d 100644 --- a/src/webkit/NetworkManager.ts +++ b/src/webkit/NetworkManager.ts @@ -26,7 +26,6 @@ export class NetworkManager { private _session: TargetSession; private _page: Page; private _requestIdToRequest = new Map(); - private _extraHTTPHeaders: network.Headers = {}; private _attemptedAuthentications = new Set(); private _userCacheDisabled = false; private _sessionListeners: RegisteredListener[] = []; @@ -47,30 +46,13 @@ export class NetworkManager { } async initializeSession(session: TargetSession) { - await Promise.all([ - session.send('Network.enable'), - session.send('Network.setExtraHTTPHeaders', { headers: this._extraHTTPHeaders }), - ]); + await session.send('Network.enable'); } dispose() { helper.removeEventListeners(this._sessionListeners); } - async setExtraHTTPHeaders(extraHTTPHeaders: { [s: string]: string; }) { - this._extraHTTPHeaders = {}; - for (const key of Object.keys(extraHTTPHeaders)) { - const value = extraHTTPHeaders[key]; - assert(helper.isString(value), `Expected value of header "${key}" to be String, but "${typeof value}" is found.`); - this._extraHTTPHeaders[key.toLowerCase()] = value; - } - await this._session.send('Network.setExtraHTTPHeaders', { headers: this._extraHTTPHeaders }); - } - - extraHTTPHeaders(): { [s: string]: string; } { - return Object.assign({}, this._extraHTTPHeaders); - } - async setCacheEnabled(enabled: boolean) { this._userCacheDisabled = !enabled; await this._updateProtocolCacheDisabled(); diff --git a/test/network.spec.js b/test/network.spec.js index 9a152825fa..73da2c21b4 100644 --- a/test/network.spec.js +++ b/test/network.spec.js @@ -270,9 +270,9 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) { }); it('should fire events in proper order', async({page, server}) => { const events = []; - page.on('request', request => events.push('request')); - page.on('response', response => events.push('response')); - page.on('requestfinished', request => events.push('requestfinished')); + page.on('request', request => !utils.isFavicon(request) && events.push('request')); + page.on('response', response => !utils.isFavicon(response.request()) && events.push('response')); + page.on('requestfinished', request => !utils.isFavicon(request) && events.push('requestfinished')); await page.goto(server.EMPTY_PAGE); expect(events).toEqual(['request', 'response', 'requestfinished']); });