feat(firefox): response interception (#7510)
This commit is contained in:
parent
07c1c4bfb1
commit
722f0606c4
|
|
@ -22,6 +22,7 @@ import * as network from '../network';
|
|||
import * as frames from '../frames';
|
||||
import * as types from '../types';
|
||||
import { Protocol } from './protocol';
|
||||
import { InterceptedResponse } from '../network';
|
||||
|
||||
export class FFNetworkManager {
|
||||
private _session: FFSession;
|
||||
|
|
@ -187,21 +188,28 @@ class InterceptableRequest implements network.RouteDelegate {
|
|||
payload.url, internalCauseToResourceType[payload.internalCause] || causeToResourceType[payload.cause] || 'other', payload.method, postDataBuffer, payload.headers);
|
||||
}
|
||||
|
||||
responseBody(): Promise<Buffer> {
|
||||
throw new Error('Method not implemented.');
|
||||
async responseBody(forFulfill: boolean): Promise<Buffer> {
|
||||
// Empty buffer will result in the response being used.
|
||||
if (forFulfill)
|
||||
return Buffer.from('');
|
||||
const response = await this._session.send('Network.getResponseBody', {
|
||||
requestId: this._id
|
||||
});
|
||||
return Buffer.from(response.base64body, 'base64');
|
||||
}
|
||||
|
||||
async continue(overrides: types.NormalizedContinueOverrides): Promise<network.InterceptedResponse|null> {
|
||||
await this._session.sendMayFail('Network.resumeInterceptedRequest', {
|
||||
const result = await this._session.sendMayFail('Network.resumeInterceptedRequest', {
|
||||
requestId: this._id,
|
||||
url: overrides.url,
|
||||
method: overrides.method,
|
||||
headers: overrides.headers,
|
||||
postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined
|
||||
});
|
||||
if (overrides.interceptResponse)
|
||||
throw new Error('Response interception not implemented');
|
||||
return null;
|
||||
postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined,
|
||||
interceptResponse: overrides.interceptResponse,
|
||||
}) as any;
|
||||
if (!overrides.interceptResponse)
|
||||
return null;
|
||||
return new InterceptedResponse(this.request, result.response.status, result.response.statusText, result.response.headers);
|
||||
}
|
||||
|
||||
async fulfill(response: types.NormalizedFulfillResponse) {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import type { Route } from '../../index';
|
|||
import { test as it, expect } from './pageTest';
|
||||
|
||||
it('should fulfill intercepted response', async ({page, server, browserName}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
await page.route('**/*', async route => {
|
||||
// @ts-expect-error
|
||||
await route._intercept({});
|
||||
|
|
@ -41,8 +40,6 @@ it('should fulfill intercepted response', async ({page, server, browserName}) =>
|
|||
});
|
||||
|
||||
it('should throw on continue after intercept', async ({page, server, browserName}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
|
||||
let routeCallback;
|
||||
const routePromise = new Promise<Route>(f => routeCallback = f);
|
||||
await page.route('**', routeCallback);
|
||||
|
|
@ -60,7 +57,6 @@ it('should throw on continue after intercept', async ({page, server, browserName
|
|||
});
|
||||
|
||||
it('should support fulfill after intercept', async ({page, server, browserName, browserMajorVersion}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
||||
const requestPromise = server.waitForRequest('/empty.html');
|
||||
await page.route('**', async route => {
|
||||
|
|
@ -75,7 +71,6 @@ it('should support fulfill after intercept', async ({page, server, browserName,
|
|||
|
||||
|
||||
it('should support request overrides', async ({page, server, browserName, browserMajorVersion}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
||||
const requestPromise = server.waitForRequest('/empty.html');
|
||||
await page.route('**/foo', async route => {
|
||||
|
|
@ -97,9 +92,6 @@ it('should support request overrides', async ({page, server, browserName, browse
|
|||
});
|
||||
|
||||
it('should give access to the intercepted response', async ({page, server, browserName}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
// it.fixme(browserName === 'webkit');
|
||||
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
|
||||
let routeCallback;
|
||||
|
|
@ -121,8 +113,6 @@ it('should give access to the intercepted response', async ({page, server, brows
|
|||
});
|
||||
|
||||
it('should give access to the intercepted response body', async ({page, server, browserName}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
|
||||
let routeCallback;
|
||||
|
|
@ -141,7 +131,6 @@ it('should give access to the intercepted response body', async ({page, server,
|
|||
});
|
||||
|
||||
it('should be abortable after interception', async ({page, server, browserName}) => {
|
||||
it.fixme(browserName === 'firefox');
|
||||
it.fixme(browserName === 'webkit');
|
||||
|
||||
await page.route(/\.css$/, async route => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue