chore: simplify extra http headers handling across browsers (#274)

This commit is contained in:
Dmitry Gozman 2019-12-17 11:31:52 -08:00 committed by GitHub
parent 916158656c
commit 24eb6d8671
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 27 additions and 55 deletions

View File

@ -272,8 +272,8 @@ export class FrameManager implements PageDelegate {
this._page._onFileChooserOpened(handle); this._page._onFileChooserOpened(handle);
} }
setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise<void> { async setExtraHTTPHeaders(headers: network.Headers): Promise<void> {
return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders); await this._client.send('Network.setExtraHTTPHeaders', { headers });
} }
setUserAgent(userAgent: string): Promise<void> { setUserAgent(userAgent: string): Promise<void> {

View File

@ -28,7 +28,6 @@ export class NetworkManager {
private _page: Page; private _page: Page;
private _requestIdToRequest = new Map<string, InterceptableRequest>(); private _requestIdToRequest = new Map<string, InterceptableRequest>();
private _requestIdToRequestWillBeSentEvent = new Map<string, Protocol.Network.requestWillBeSentPayload>(); private _requestIdToRequestWillBeSentEvent = new Map<string, Protocol.Network.requestWillBeSentPayload>();
private _extraHTTPHeaders: network.Headers = {};
private _offline = false; private _offline = false;
private _credentials: {username: string, password: string} | null = null; private _credentials: {username: string, password: string} | null = null;
private _attemptedAuthentications = new Set<string>(); private _attemptedAuthentications = new Set<string>();
@ -68,20 +67,6 @@ export class NetworkManager {
await this._updateProtocolRequestInterception(); 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) { async setOfflineMode(value: boolean) {
if (this._offline === value) if (this._offline === value)
return; return;

View File

@ -182,8 +182,11 @@ export class FrameManager implements PageDelegate {
return true; return true;
} }
setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise<void> { async setExtraHTTPHeaders(headers: network.Headers): Promise<void> {
return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders); 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<void> { async setUserAgent(userAgent: string): Promise<void> {

View File

@ -45,15 +45,6 @@ export class NetworkManager {
helper.removeEventListeners(this._eventListeners); 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) { async setRequestInterception(enabled) {
await this._session.send('Network.setRequestInterception', {enabled}); await this._session.send('Network.setRequestInterception', {enabled});
} }

View File

@ -253,7 +253,12 @@ export class Page extends EventEmitter {
} }
setExtraHTTPHeaders(headers: network.Headers) { 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); return this._delegate.setExtraHTTPHeaders(headers);
} }

View File

@ -94,6 +94,8 @@ export class FrameManager implements PageDelegate {
promises.push(this._setJavaScriptEnabled(session, this._page._state.javascriptEnabled)); promises.push(this._setJavaScriptEnabled(session, this._page._state.javascriptEnabled));
if (this._page._state.bypassCSP !== null) if (this._page._state.bypassCSP !== null)
promises.push(this._setBypassCSP(session, this._page._state.bypassCSP)); 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); await Promise.all(promises);
} }
@ -240,10 +242,6 @@ export class FrameManager implements PageDelegate {
this._page._onFileChooserOpened(handle); this._page._onFileChooserOpened(handle);
} }
setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise<void> {
return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders);
}
async _ensureIsolatedWorld(name: string) { async _ensureIsolatedWorld(name: string) {
if (this._isolatedWorlds.has(name)) if (this._isolatedWorlds.has(name))
return; return;
@ -254,6 +252,10 @@ export class FrameManager implements PageDelegate {
}); });
} }
private async _setExtraHTTPHeaders(session: TargetSession, headers: network.Headers): Promise<void> {
await session.send('Network.setExtraHTTPHeaders', { headers });
}
private async _setUserAgent(session: TargetSession, userAgent: string): Promise<void> { private async _setUserAgent(session: TargetSession, userAgent: string): Promise<void> {
await session.send('Page.overrideUserAgent', { value: userAgent }); await session.send('Page.overrideUserAgent', { value: userAgent });
} }
@ -280,6 +282,10 @@ export class FrameManager implements PageDelegate {
await Promise.all(promises); await Promise.all(promises);
} }
async setExtraHTTPHeaders(headers: network.Headers): Promise<void> {
await this._setExtraHTTPHeaders(this._session, headers);
}
async setUserAgent(userAgent: string): Promise<void> { async setUserAgent(userAgent: string): Promise<void> {
await this._setUserAgent(this._session, userAgent); await this._setUserAgent(this._session, userAgent);
await this._page.reload(); await this._page.reload();

View File

@ -26,7 +26,6 @@ export class NetworkManager {
private _session: TargetSession; private _session: TargetSession;
private _page: Page; private _page: Page;
private _requestIdToRequest = new Map<string, InterceptableRequest>(); private _requestIdToRequest = new Map<string, InterceptableRequest>();
private _extraHTTPHeaders: network.Headers = {};
private _attemptedAuthentications = new Set<string>(); private _attemptedAuthentications = new Set<string>();
private _userCacheDisabled = false; private _userCacheDisabled = false;
private _sessionListeners: RegisteredListener[] = []; private _sessionListeners: RegisteredListener[] = [];
@ -47,30 +46,13 @@ export class NetworkManager {
} }
async initializeSession(session: TargetSession) { async initializeSession(session: TargetSession) {
await Promise.all([ await session.send('Network.enable');
session.send('Network.enable'),
session.send('Network.setExtraHTTPHeaders', { headers: this._extraHTTPHeaders }),
]);
} }
dispose() { dispose() {
helper.removeEventListeners(this._sessionListeners); 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) { async setCacheEnabled(enabled: boolean) {
this._userCacheDisabled = !enabled; this._userCacheDisabled = !enabled;
await this._updateProtocolCacheDisabled(); await this._updateProtocolCacheDisabled();

View File

@ -270,9 +270,9 @@ module.exports.addTests = function({testRunner, expect, FFOX, CHROME, WEBKIT}) {
}); });
it('should fire events in proper order', async({page, server}) => { it('should fire events in proper order', async({page, server}) => {
const events = []; const events = [];
page.on('request', request => events.push('request')); page.on('request', request => !utils.isFavicon(request) && events.push('request'));
page.on('response', response => events.push('response')); page.on('response', response => !utils.isFavicon(response.request()) && events.push('response'));
page.on('requestfinished', request => events.push('requestfinished')); page.on('requestfinished', request => !utils.isFavicon(request) && events.push('requestfinished'));
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);
expect(events).toEqual(['request', 'response', 'requestfinished']); expect(events).toEqual(['request', 'response', 'requestfinished']);
}); });