11'use strict' ;
22
33const {
4- ArrayPrototypeFindIndex,
54 DateNow,
65} = primordials ;
76
@@ -10,10 +9,10 @@ const {
109 kResourceType,
1110 getMonotonicTime,
1211 getNextRequestId,
12+ sniffMimeType,
1313} = require ( 'internal/inspector/network' ) ;
1414const dc = require ( 'diagnostics_channel' ) ;
1515const { Network } = require ( 'inspector' ) ;
16- const { MIMEType } = require ( 'internal/mime' ) ;
1716
1817// Convert an undici request headers array to a plain object (Map<string, string>)
1918function requestHeadersArrayToDictionary ( headers ) {
@@ -29,21 +28,30 @@ function requestHeadersArrayToDictionary(headers) {
2928// Convert an undici response headers array to a plain object (Map<string, string>)
3029function responseHeadersArrayToDictionary ( headers ) {
3130const dict = { } ;
31+ let charset ;
32+ let mimeType ;
3233for ( let idx = 0 ; idx < headers . length ; idx += 2 ) {
3334const key = `${ headers [ idx ] } ` ;
35+ const lowerCasedKey = key . toLowerCase ( ) ;
3436const value = `${ headers [ idx + 1 ] } ` ;
3537const prevValue = dict [ key ] ;
3638
39+ if ( lowerCasedKey === 'content-type' ) {
40+ const result = sniffMimeType ( value ) ;
41+ charset = result . charset ;
42+ mimeType = result . mimeType ;
43+ }
44+
3745if ( typeof prevValue === 'string' ) {
3846// ChromeDevTools frontend treats 'set-cookie' as a special case
3947// https://github.com/ChromeDevTools/devtools-frontend/blob/4275917f84266ef40613db3c1784a25f902ea74e/front_end/core/sdk/NetworkRequest.ts#L1368
40- if ( key . toLowerCase ( ) === 'set-cookie' ) dict [ key ] = `${ prevValue } \n${ value } ` ;
48+ if ( lowerCasedKey === 'set-cookie' ) dict [ key ] = `${ prevValue } \n${ value } ` ;
4149else dict [ key ] = `${ prevValue } , ${ value } ` ;
4250} else {
4351dict [ key ] = value ;
4452}
4553}
46- return dict ;
54+ return [ dict , charset , mimeType ] ;
4755} ;
4856
4957/**
@@ -54,10 +62,15 @@ function responseHeadersArrayToDictionary(headers) {
5462function onClientRequestStart ( { request } ) {
5563const url = `${ request . origin } ${ request . path } ` ;
5664request [ kInspectorRequestId ] = getNextRequestId ( ) ;
65+
66+ const headers = requestHeadersArrayToDictionary ( request . headers ) ;
67+ const { charset } = sniffMimeType ( headers ) ;
68+
5769Network . requestWillBeSent ( {
5870requestId : request [ kInspectorRequestId ] ,
5971timestamp : getMonotonicTime ( ) ,
6072wallTime : DateNow ( ) ,
73+ charset,
6174request : {
6275 url,
6376method : request . method ,
@@ -94,19 +107,7 @@ function onClientResponseHeaders({ request, response }) {
94107return ;
95108}
96109
97- let mimeType ;
98- let charset ;
99- try {
100- const contentTypeKeyIndex =
101- ArrayPrototypeFindIndex ( response . headers , ( header ) => header . toString ( ) . toLowerCase ( ) === 'content-type' ) ;
102- const contentType = contentTypeKeyIndex !== - 1 ? response . headers [ contentTypeKeyIndex + 1 ] . toString ( ) : '' ;
103- const mimeTypeObj = new MIMEType ( contentType ) ;
104- mimeType = mimeTypeObj . essence || '' ;
105- charset = mimeTypeObj . params . get ( 'charset' ) || '' ;
106- } catch {
107- mimeType = '' ;
108- charset = '' ;
109- }
110+ const { 0 : headers , 1 : charset , 2 : mimeType } = responseHeadersArrayToDictionary ( response . headers ) ;
110111
111112const url = `${ request . origin } ${ request . path } ` ;
112113Network . responseReceived ( {
@@ -118,7 +119,7 @@ function onClientResponseHeaders({ request, response }) {
118119 url,
119120status : response . statusCode ,
120121statusText : response . statusText ,
121- headers : responseHeadersArrayToDictionary ( response . headers ) ,
122+ headers,
122123 mimeType,
123124 charset,
124125} ,
0 commit comments