Skip to content

Commit

Permalink
core: set network responseHeadersText from extra info event (#15639)
Browse files Browse the repository at this point in the history
  • Loading branch information
connorjclark authored Dec 1, 2023
1 parent 0c7a019 commit b75a9d9
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 2 deletions.
13 changes: 13 additions & 0 deletions core/lib/network-recorder.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,18 @@ class NetworkRecorder extends RequestEventEmitter {
request.onResponseReceived(data);
}

/**
* @param {{params: LH.Crdp.Network.ResponseReceivedExtraInfoEvent, targetType: LH.Protocol.TargetType, sessionId?: string}} event
*/
onResponseReceivedExtraInfo(event) {
const data = event.params;
const request = this._findRealRequestAndSetSession(
data.requestId, event.targetType, event.sessionId);
if (!request) return;
log.verbose('network', `${request.url} response received extra info`);
request.onResponseReceivedExtraInfo(data);
}

/**
* @param {{params: LH.Crdp.Network.DataReceivedEvent, targetType: LH.Protocol.TargetType, sessionId?: string}} event
*/
Expand Down Expand Up @@ -196,6 +208,7 @@ class NetworkRecorder extends RequestEventEmitter {
case 'Network.requestWillBeSent': return this.onRequestWillBeSent(event);
case 'Network.requestServedFromCache': return this.onRequestServedFromCache(event);
case 'Network.responseReceived': return this.onResponseReceived(event);
case 'Network.responseReceivedExtraInfo': return this.onResponseReceivedExtraInfo(event);
case 'Network.dataReceived': return this.onDataReceived(event);
case 'Network.loadingFinished': return this.onLoadingFinished(event);
case 'Network.loadingFailed': return this.onLoadingFailed(event);
Expand Down
8 changes: 7 additions & 1 deletion core/lib/network-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,13 @@ class NetworkRequest {
this.frameId = data.frameId;
}

/**
* @param {LH.Crdp.Network.ResponseReceivedExtraInfoEvent} data
*/
onResponseReceivedExtraInfo(data) {
this.responseHeadersText = data.headersText || '';
}

/**
* @param {LH.Crdp.Network.DataReceivedEvent} data
*/
Expand Down Expand Up @@ -354,7 +361,6 @@ class NetworkRequest {
this.timing = response.timing;
if (resourceType) this.resourceType = RESOURCE_TYPES[resourceType];
this.mimeType = response.mimeType;
this.responseHeadersText = response.headersText || '';
this.responseHeaders = NetworkRequest._headersDictToHeadersArray(response.headers);

this.fetchedViaServiceWorker = !!response.fromServiceWorker;
Expand Down
7 changes: 6 additions & 1 deletion core/test/network-records-to-devtools-log-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ describe('networkRecordsToDevtoolsLog', () => {
const roundTripLogs = networkRecordsToDevtoolsLog(records, {skipVerification: true});
const roundTripRecords = NetworkRecorder.recordsFromLogs(roundTripLogs);

expect(roundTripRecords).toEqual(records);
// First compare element-wise, as doing all at once results in too verbose an error message.
const len = Math.min(roundTripRecords.length, records.length);
for (let i = 0; i < len; i++) {
expect(roundTripRecords[i]).toEqual(records[i]);
}
expect(roundTripRecords.length).toEqual(records.length);
});

it('should roundtrip fake network records multiple times', () => {
Expand Down
24 changes: 24 additions & 0 deletions core/test/network-records-to-devtools-log.js
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,27 @@ function getResponseReceivedEvent(networkRecord, index, normalizedTiming) {
};
}

/**
* @param {Partial<NetworkRequest>} networkRecord
* @param {number} index
* @return {LH.Protocol.RawEventMessage}
*/
function getResponseReceivedExtraInfoEvent(networkRecord, index) {
const headers = headersArrayToHeadersDict(networkRecord.responseHeaders);

return {
method: 'Network.responseReceivedExtraInfo',
params: {
requestId: getBaseRequestId(networkRecord) || `${idBase}.${index}`,
statusCode: networkRecord.statusCode || 200,
headers,
headersText: networkRecord.responseHeadersText,
},
targetType: 'sessionTargetType' in networkRecord ? networkRecord.sessionTargetType : 'page',
sessionId: networkRecord.sessionId,
};
}

/**
* @param {Partial<NetworkRequest>} networkRecord
* @return {LH.Protocol.RawEventMessage}
Expand Down Expand Up @@ -440,6 +461,9 @@ function networkRecordsToDevtoolsLog(networkRecords, options = {}) {
}

devtoolsLog.push(getResponseReceivedEvent(networkRecord, index, normalizedTiming));
if (networkRecord.responseHeadersText) {
devtoolsLog.push(getResponseReceivedExtraInfoEvent(networkRecord, index));
}
devtoolsLog.push(getDataReceivedEvent(networkRecord, index));

if (networkRecord.finished !== false) {
Expand Down

0 comments on commit b75a9d9

Please sign in to comment.