Skip to content

Commit 28d0489

Browse files
author
Thiago Perrotta
authored
network: populate response headers size (#875)
Note: In the absence of WPT tests that verify this field, it may be slightly off by a few bytes. Bug: #765
1 parent 09666a9 commit 28d0489

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

src/bidiMapper/domains/network/networkRequest.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,10 @@ export class NetworkRequest {
292292
this.#responseReceivedExtraInfoEvent = undefined;
293293
}
294294

295+
const headers = NetworkRequest.#getHeaders(
296+
this.#responseReceivedEvent.response.headers
297+
);
298+
295299
return {
296300
method: Network.EventNames.ResponseCompletedEvent,
297301
params: {
@@ -307,13 +311,10 @@ export class NetworkRequest {
307311
this.#responseReceivedEvent.response.fromDiskCache ||
308312
this.#responseReceivedEvent.response.fromPrefetchCache ||
309313
this.#servedFromCache,
310-
headers: NetworkRequest.#getHeaders(
311-
this.#responseReceivedEvent.response.headers
312-
),
314+
headers,
313315
mimeType: this.#responseReceivedEvent.response.mimeType,
314316
bytesReceived: this.#responseReceivedEvent.response.encodedDataLength,
315-
headersSize:
316-
this.#responseReceivedExtraInfoEvent?.headersText?.length ?? 0,
317+
headersSize: this.#computeResponseHeadersSize(headers),
317318
// TODO: consider removing from spec.
318319
bodySize: 0,
319320
content: {
@@ -325,6 +326,12 @@ export class NetworkRequest {
325326
};
326327
}
327328

329+
#computeResponseHeadersSize(headers: Network.Header[]): number {
330+
return headers.reduce((total, header) => {
331+
return total + header.name.length + (header.value?.length ?? 0) + 4; // 4 = ': ' + '\r\n'
332+
}, 0);
333+
}
334+
328335
#isIgnoredEvent(): boolean {
329336
return (
330337
this.#requestWillBeSentEvent?.request.url.endsWith('/favicon.ico') ??

tests/test_network.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ async def test_network_network_response_completed_event_emitted(
205205
})
206206

207207
resp = await read_JSON_message(websocket)
208+
headersSize = compute_response_headers_size(
209+
resp["params"]["response"]["headers"])
208210

209211
assert resp == {
210212
"method": "network.responseCompleted",
@@ -232,7 +234,7 @@ async def test_network_network_response_completed_event_emitted(
232234
"headers": ANY_LIST,
233235
"mimeType": "text/html",
234236
"bytesReceived": ANY_NUMBER,
235-
"headersSize": ANY_NUMBER,
237+
"headersSize": headersSize,
236238
"bodySize": 0,
237239
"content": {
238240
"size": 0
@@ -319,3 +321,7 @@ async def test_network_before_request_sent_event_with_data_url_emitted(
319321
"timestamp": ANY_TIMESTAMP
320322
}
321323
}
324+
325+
326+
def compute_response_headers_size(headers: list[dict[str, str]]) -> int:
327+
return sum(sum(len(v) for v in header.values()) + 4 for header in headers)

0 commit comments

Comments
 (0)