mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
chore: simplify extra http headers handling across browsers (#274)
This commit is contained in:
parent
916158656c
commit
24eb6d8671
@ -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> {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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> {
|
||||
|
||||
@ -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});
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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']);
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user