mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
chore(webdriver): scaffold HTTPRequest.respond()
(#12147)
This commit is contained in:
parent
2cadcff06e
commit
cd88110456
@ -10,9 +10,14 @@ import type {
|
|||||||
ContinueRequestOverrides,
|
ContinueRequestOverrides,
|
||||||
ResponseForRequest,
|
ResponseForRequest,
|
||||||
} from '../api/HTTPRequest.js';
|
} from '../api/HTTPRequest.js';
|
||||||
import {HTTPRequest, type ResourceType} from '../api/HTTPRequest.js';
|
import {
|
||||||
|
HTTPRequest,
|
||||||
|
STATUS_TEXTS,
|
||||||
|
type ResourceType,
|
||||||
|
} from '../api/HTTPRequest.js';
|
||||||
import {PageEvent} from '../api/Page.js';
|
import {PageEvent} from '../api/Page.js';
|
||||||
import {UnsupportedOperation} from '../common/Errors.js';
|
import {UnsupportedOperation} from '../common/Errors.js';
|
||||||
|
import {isString} from '../common/util.js';
|
||||||
|
|
||||||
import type {Request} from './core/Request.js';
|
import type {Request} from './core/Request.js';
|
||||||
import type {BidiFrame} from './Frame.js';
|
import type {BidiFrame} from './Frame.js';
|
||||||
@ -173,9 +178,60 @@ export class BidiHTTPRequest extends HTTPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override async respond(
|
override async respond(
|
||||||
_response: Partial<ResponseForRequest>,
|
response: Partial<ResponseForRequest>,
|
||||||
_priority?: number
|
_priority?: number
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
throw new UnsupportedOperation();
|
const responseBody: Buffer | null =
|
||||||
|
response.body && isString(response.body)
|
||||||
|
? Buffer.from(response.body)
|
||||||
|
: (response.body as Buffer) || null;
|
||||||
|
|
||||||
|
const headers: Bidi.Network.Header[] = [];
|
||||||
|
let hasContentLength = false;
|
||||||
|
for (const [name, value] of Object.entries(response.headers ?? [])) {
|
||||||
|
if (name.toLocaleLowerCase() === 'content-length') {
|
||||||
|
hasContentLength = true;
|
||||||
|
}
|
||||||
|
headers.push({
|
||||||
|
name: name.toLowerCase(),
|
||||||
|
value: {
|
||||||
|
type: 'string',
|
||||||
|
value: String(value),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.contentType) {
|
||||||
|
headers.push({
|
||||||
|
name: 'content-type',
|
||||||
|
value: {
|
||||||
|
type: 'string',
|
||||||
|
value: response.contentType,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (responseBody && !hasContentLength) {
|
||||||
|
headers.push({
|
||||||
|
name: 'content-length',
|
||||||
|
value: {
|
||||||
|
type: 'string',
|
||||||
|
value: String(Buffer.byteLength(responseBody)),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const status = response.status || 200;
|
||||||
|
|
||||||
|
return await this.#request.provideResponse({
|
||||||
|
statusCode: status,
|
||||||
|
headers: headers.length > 0 ? headers : undefined,
|
||||||
|
reasonPhrase: STATUS_TEXTS[status],
|
||||||
|
body: responseBody
|
||||||
|
? {
|
||||||
|
type: 'base64',
|
||||||
|
value: responseBody.toString('base64'),
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -166,6 +166,10 @@ export interface Commands {
|
|||||||
params: Bidi.Network.FailRequestParameters;
|
params: Bidi.Network.FailRequestParameters;
|
||||||
returnType: Bidi.EmptyResult;
|
returnType: Bidi.EmptyResult;
|
||||||
};
|
};
|
||||||
|
'network.provideResponse': {
|
||||||
|
params: Bidi.Network.ProvideResponseParameters;
|
||||||
|
returnType: Bidi.EmptyResult;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -169,6 +169,28 @@ export class Request extends EventEmitter<{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async provideResponse({
|
||||||
|
statusCode,
|
||||||
|
reasonPhrase,
|
||||||
|
headers,
|
||||||
|
body,
|
||||||
|
}: Omit<Bidi.Network.ProvideResponseParameters, 'request'>): Promise<void> {
|
||||||
|
if (!this.#event.isBlocked) {
|
||||||
|
throw new Error('Request Interception is not enabled!');
|
||||||
|
}
|
||||||
|
// Request interception is not supported for data: urls.
|
||||||
|
if (this.url.startsWith('data:')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.#session.send('network.provideResponse', {
|
||||||
|
request: this.id,
|
||||||
|
statusCode,
|
||||||
|
reasonPhrase,
|
||||||
|
headers,
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@inertIfDisposed
|
@inertIfDisposed
|
||||||
private dispose(): void {
|
private dispose(): void {
|
||||||
this[disposeSymbol]();
|
this[disposeSymbol]();
|
||||||
|
@ -637,13 +637,6 @@
|
|||||||
"expectations": ["SKIP"],
|
"expectations": ["SKIP"],
|
||||||
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
|
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"testIdPattern": "[oopif.spec] OOPIF should report google.com frame",
|
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
|
||||||
"parameters": ["webDriverBiDi"],
|
|
||||||
"expectations": ["FAIL", "TIMEOUT"],
|
|
||||||
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
@ -2942,6 +2935,13 @@
|
|||||||
"expectations": ["SKIP"],
|
"expectations": ["SKIP"],
|
||||||
"comment": "Failed previously and currently times out"
|
"comment": "Failed previously and currently times out"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[oopif.spec] OOPIF should report google.com frame",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["firefox", "webDriverBiDi"],
|
||||||
|
"expectations": ["FAIL", "TIMEOUT"],
|
||||||
|
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[oopif.spec] OOPIF should support lazy OOP frames",
|
"testIdPattern": "[oopif.spec] OOPIF should support lazy OOP frames",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
Loading…
Reference in New Issue
Block a user