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 frames from '../frames';
|
||||||
import * as types from '../types';
|
import * as types from '../types';
|
||||||
import { Protocol } from './protocol';
|
import { Protocol } from './protocol';
|
||||||
|
import { InterceptedResponse } from '../network';
|
||||||
|
|
||||||
export class FFNetworkManager {
|
export class FFNetworkManager {
|
||||||
private _session: FFSession;
|
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);
|
payload.url, internalCauseToResourceType[payload.internalCause] || causeToResourceType[payload.cause] || 'other', payload.method, postDataBuffer, payload.headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
responseBody(): Promise<Buffer> {
|
async responseBody(forFulfill: boolean): Promise<Buffer> {
|
||||||
throw new Error('Method not implemented.');
|
// 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> {
|
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,
|
requestId: this._id,
|
||||||
url: overrides.url,
|
url: overrides.url,
|
||||||
method: overrides.method,
|
method: overrides.method,
|
||||||
headers: overrides.headers,
|
headers: overrides.headers,
|
||||||
postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined
|
postData: overrides.postData ? Buffer.from(overrides.postData).toString('base64') : undefined,
|
||||||
});
|
interceptResponse: overrides.interceptResponse,
|
||||||
if (overrides.interceptResponse)
|
}) as any;
|
||||||
throw new Error('Response interception not implemented');
|
if (!overrides.interceptResponse)
|
||||||
return null;
|
return null;
|
||||||
|
return new InterceptedResponse(this.request, result.response.status, result.response.statusText, result.response.headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fulfill(response: types.NormalizedFulfillResponse) {
|
async fulfill(response: types.NormalizedFulfillResponse) {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import type { Route } from '../../index';
|
||||||
import { test as it, expect } from './pageTest';
|
import { test as it, expect } from './pageTest';
|
||||||
|
|
||||||
it('should fulfill intercepted response', async ({page, server, browserName}) => {
|
it('should fulfill intercepted response', async ({page, server, browserName}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
await page.route('**/*', async route => {
|
await page.route('**/*', async route => {
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
await route._intercept({});
|
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('should throw on continue after intercept', async ({page, server, browserName}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
|
|
||||||
let routeCallback;
|
let routeCallback;
|
||||||
const routePromise = new Promise<Route>(f => routeCallback = f);
|
const routePromise = new Promise<Route>(f => routeCallback = f);
|
||||||
await page.route('**', routeCallback);
|
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('should support fulfill after intercept', async ({page, server, browserName, browserMajorVersion}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
||||||
const requestPromise = server.waitForRequest('/empty.html');
|
const requestPromise = server.waitForRequest('/empty.html');
|
||||||
await page.route('**', async route => {
|
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('should support request overrides', async ({page, server, browserName, browserMajorVersion}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
it.skip(browserName === 'chromium' && browserMajorVersion <= 91);
|
||||||
const requestPromise = server.waitForRequest('/empty.html');
|
const requestPromise = server.waitForRequest('/empty.html');
|
||||||
await page.route('**/foo', async route => {
|
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('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);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
|
||||||
let routeCallback;
|
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('should give access to the intercepted response body', async ({page, server, browserName}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
|
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
|
||||||
let routeCallback;
|
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('should be abortable after interception', async ({page, server, browserName}) => {
|
||||||
it.fixme(browserName === 'firefox');
|
|
||||||
it.fixme(browserName === 'webkit');
|
it.fixme(browserName === 'webkit');
|
||||||
|
|
||||||
await page.route(/\.css$/, async route => {
|
await page.route(/\.css$/, async route => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue