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);
}
setExtraHTTPHeaders(extraHTTPHeaders: network.Headers): Promise<void> {
return this._networkManager.setExtraHTTPHeaders(extraHTTPHeaders);
async setExtraHTTPHeaders(headers: network.Headers): Promise<void> {
await this._client.send('Network.setExtraHTTPHeaders', { headers });
}
setUserAgent(userAgent: string): Promise<void> {

View File

@ -28,7 +28,6 @@ export class NetworkManager {
private _page: Page;
private _requestIdToRequest = new Map<string, InterceptableRequest>();
private _requestIdToRequestWillBeSentEvent = new Map<string, Protocol.Network.requestWillBeSentPayload>();
private _extraHTTPHeaders: network.Headers = {};
private _offline = false;
private _credentials: {username: string, password: string} | null = null;
private _attemptedAuthentications = new Set<string>();
@ -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;

View File

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

View File

@ -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});
}

View File

@ -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);
}

View File

@ -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<void> {
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<void> {
await session.send('Network.setExtraHTTPHeaders', { headers });
}
private async _setUserAgent(session: TargetSession, userAgent: string): Promise<void> {
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<void> {
await this._setExtraHTTPHeaders(this._session, headers);
}
async setUserAgent(userAgent: string): Promise<void> {
await this._setUserAgent(this._session, userAgent);
await this._page.reload();

View File

@ -26,7 +26,6 @@ export class NetworkManager {
private _session: TargetSession;
private _page: Page;
private _requestIdToRequest = new Map<string, InterceptableRequest>();
private _extraHTTPHeaders: network.Headers = {};
private _attemptedAuthentications = new Set<string>();
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();

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}) => {
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']);
});