@@ -13,35 +13,43 @@ const {
1313 kResourceType,
1414 getMonotonicTime,
1515 getNextRequestId,
16+ sniffMimeType,
1617} = require ( 'internal/inspector/network' ) ;
1718const dc = require ( 'diagnostics_channel' ) ;
1819const { Network } = require ( 'inspector' ) ;
19- const { MIMEType } = require ( 'internal/mime' ) ;
2020
2121const kRequestUrl = Symbol ( 'kRequestUrl' ) ;
2222
2323// Convert a Headers object (Map<string, number | string | string[]>) to a plain object (Map<string, string>)
2424const convertHeaderObject = ( headers = { } ) => {
2525 // The 'host' header that contains the host and port of the URL.
2626 let host ;
27+ let charset ;
28+ let mimeType ;
2729 const dict = { } ;
2830 for ( const { 0 : key , 1 : value } of ObjectEntries ( headers ) ) {
29- if ( key . toLowerCase ( ) === 'host' ) {
31+ const lowerCasedKey = key . toLowerCase ( ) ;
32+ if ( lowerCasedKey === 'host' ) {
3033 host = value ;
3134 }
35+ if ( lowerCasedKey === 'content-type' ) {
36+ const result = sniffMimeType ( value ) ;
37+ charset = result . charset ;
38+ mimeType = result . mimeType ;
39+ }
3240 if ( typeof value === 'string' ) {
3341 dict [ key ] = value ;
3442 } else if ( ArrayIsArray ( value ) ) {
35- if ( key . toLowerCase ( ) === 'cookie' ) dict [ key ] = value . join ( '; ' ) ;
43+ if ( lowerCasedKey === 'cookie' ) dict [ key ] = value . join ( '; ' ) ;
3644 // ChromeDevTools frontend treats 'set-cookie' as a special case
3745 // https://github.com/ChromeDevTools/devtools-frontend/blob/4275917f84266ef40613db3c1784a25f902ea74e/front_end/core/sdk/NetworkRequest.ts#L1368
38- else if ( key . toLowerCase ( ) === 'set-cookie' ) dict [ key ] = value . join ( '\n' ) ;
46+ else if ( lowerCasedKey === 'set-cookie' ) dict [ key ] = value . join ( '\n' ) ;
3947 else dict [ key ] = value . join ( ', ' ) ;
4048 } else {
4149 dict [ key ] = String ( value ) ;
4250 }
4351 }
44- return [ host , dict ] ;
52+ return [ dict , host , charset , mimeType ] ;
4553} ;
4654
4755/**
@@ -52,14 +60,15 @@ const convertHeaderObject = (headers = {}) => {
5260function onClientRequestCreated ( { request } ) {
5361 request [ kInspectorRequestId ] = getNextRequestId ( ) ;
5462
55- const { 0 : host , 1 : headers } = convertHeaderObject ( request . getHeaders ( ) ) ;
63+ const { 0 : headers , 1 : host , 2 : charset } = convertHeaderObject ( request . getHeaders ( ) ) ;
5664 const url = `${ request . protocol } //${ host } ${ request . path } ` ;
5765 request [ kRequestUrl ] = url ;
5866
5967 Network . requestWillBeSent ( {
6068 requestId : request [ kInspectorRequestId ] ,
6169 timestamp : getMonotonicTime ( ) ,
6270 wallTime : DateNow ( ) ,
71+ charset,
6372 request : {
6473 url,
6574 method : request . method ,
@@ -95,16 +104,7 @@ function onClientResponseFinish({ request, response }) {
95104 return ;
96105 }
97106
98- let mimeType ;
99- let charset ;
100- try {
101- const mimeTypeObj = new MIMEType ( response . headers [ 'content-type' ] ) ;
102- mimeType = mimeTypeObj . essence || '' ;
103- charset = mimeTypeObj . params . get ( 'charset' ) || '' ;
104- } catch {
105- mimeType = '' ;
106- charset = '' ;
107- }
107+ const { 0 : headers , 2 : charset , 3 : mimeType } = convertHeaderObject ( response . headers ) ;
108108
109109 Network . responseReceived ( {
110110 requestId : request [ kInspectorRequestId ] ,
@@ -114,7 +114,7 @@ function onClientResponseFinish({ request, response }) {
114114 url : request [ kRequestUrl ] ,
115115 status : response . statusCode ,
116116 statusText : response . statusMessage ?? '' ,
117- headers : convertHeaderObject ( response . headers ) [ 1 ] ,
117+ headers,
118118 mimeType,
119119 charset,
120120 } ,
0 commit comments