refactor: extract toggling of Network Interception (#12266)

This commit is contained in:
Nikolay Vitkov 2024-04-12 14:29:06 +02:00 committed by GitHub
parent df986ef2dd
commit 402b4a4812
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 28 deletions

View File

@ -511,18 +511,13 @@ export class BidiPage extends Page {
return [...this.#workers]; return [...this.#workers];
} }
#interception?: string; #userInterception?: string;
override async setRequestInterception(enable: boolean): Promise<void> { override async setRequestInterception(enable: boolean): Promise<void> {
if (enable && !this.#interception) { this.#userInterception = await this.#toggleInterception(
this.#interception = await this.#frame.browsingContext.addIntercept({ [Bidi.Network.InterceptPhase.BeforeRequestSent],
phases: [Bidi.Network.InterceptPhase.BeforeRequestSent], this.#userInterception,
}); enable
} else if (!enable && this.#interception) {
await this.#frame.browsingContext.userContext.browser.removeIntercept(
this.#interception
); );
this.#interception = undefined;
}
} }
/** /**
@ -531,19 +526,33 @@ export class BidiPage extends Page {
_credentials: Credentials | null = null; _credentials: Credentials | null = null;
#authInterception?: string; #authInterception?: string;
override async authenticate(credentials: Credentials | null): Promise<void> { override async authenticate(credentials: Credentials | null): Promise<void> {
if (credentials && !this.#authInterception) { this.#authInterception = await this.#toggleInterception(
this.#authInterception = await this.#frame.browsingContext.addIntercept({ [Bidi.Network.InterceptPhase.AuthRequired],
phases: [Bidi.Network.InterceptPhase.AuthRequired], this.#authInterception,
}); Boolean(credentials)
} else if (!credentials && this.#authInterception) {
await this.#frame.browsingContext.userContext.browser.removeIntercept(
this.#authInterception
); );
this.#authInterception = undefined;
}
this._credentials = credentials; this._credentials = credentials;
} }
async #toggleInterception(
phases: [Bidi.Network.InterceptPhase, ...Bidi.Network.InterceptPhase[]],
interception: string | undefined,
expected: boolean
): Promise<string | undefined> {
if (expected && !interception) {
return await this.#frame.browsingContext.addIntercept({
phases,
});
} else if (!expected && interception) {
await this.#frame.browsingContext.userContext.browser.removeIntercept(
interception
);
return;
}
return interception;
}
override setDragInterception(): never { override setDragInterception(): never {
throw new UnsupportedOperation(); throw new UnsupportedOperation();
} }

View File

@ -140,18 +140,16 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
); );
} }
async setExtraHTTPHeaders( async setExtraHTTPHeaders(headers: Record<string, string>): Promise<void> {
extraHTTPHeaders: Record<string, string> const extraHTTPHeaders: Record<string, string> = {};
): Promise<void> { for (const [key, value] of Object.entries(headers)) {
this.#extraHTTPHeaders = {};
for (const key of Object.keys(extraHTTPHeaders)) {
const value = extraHTTPHeaders[key];
assert( assert(
isString(value), isString(value),
`Expected value of header "${key}" to be String, but "${typeof value}" is found.` `Expected value of header "${key}" to be String, but "${typeof value}" is found.`
); );
this.#extraHTTPHeaders[key.toLowerCase()] = value; extraHTTPHeaders[key.toLowerCase()] = value;
} }
this.#extraHTTPHeaders = extraHTTPHeaders;
await this.#applyToAllClients(this.#applyExtraHTTPHeaders.bind(this)); await this.#applyToAllClients(this.#applyExtraHTTPHeaders.bind(this));
} }