@@ -13,35 +13,43 @@ const {
13
13
kResourceType,
14
14
getMonotonicTime,
15
15
getNextRequestId,
16
+ sniffMimeType,
16
17
} = require ( 'internal/inspector/network' ) ;
17
18
const dc = require ( 'diagnostics_channel' ) ;
18
19
const { Network } = require ( 'inspector' ) ;
19
- const { MIMEType } = require ( 'internal/mime' ) ;
20
20
21
21
const kRequestUrl = Symbol ( 'kRequestUrl' ) ;
22
22
23
23
// Convert a Headers object (Map<string, number | string | string[]>) to a plain object (Map<string, string>)
24
24
const convertHeaderObject = ( headers = { } ) => {
25
25
// The 'host' header that contains the host and port of the URL.
26
26
let host ;
27
+ let charset ;
28
+ let mimeType ;
27
29
const dict = { } ;
28
30
for ( const { 0 : key , 1 : value } of ObjectEntries ( headers ) ) {
29
- if ( key . toLowerCase ( ) === 'host' ) {
31
+ const lowerCasedKey = key . toLowerCase ( ) ;
32
+ if ( lowerCasedKey === 'host' ) {
30
33
host = value ;
31
34
}
35
+ if ( lowerCasedKey === 'content-type' ) {
36
+ const result = sniffMimeType ( value ) ;
37
+ charset = result . charset ;
38
+ mimeType = result . mimeType ;
39
+ }
32
40
if ( typeof value === 'string' ) {
33
41
dict [ key ] = value ;
34
42
} else if ( ArrayIsArray ( value ) ) {
35
- if ( key . toLowerCase ( ) === 'cookie' ) dict [ key ] = value . join ( '; ' ) ;
43
+ if ( lowerCasedKey === 'cookie' ) dict [ key ] = value . join ( '; ' ) ;
36
44
// ChromeDevTools frontend treats 'set-cookie' as a special case
37
45
// 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' ) ;
39
47
else dict [ key ] = value . join ( ', ' ) ;
40
48
} else {
41
49
dict [ key ] = String ( value ) ;
42
50
}
43
51
}
44
- return [ host , dict ] ;
52
+ return [ dict , host , charset , mimeType ] ;
45
53
} ;
46
54
47
55
/**
@@ -52,14 +60,15 @@ const convertHeaderObject = (headers = {}) => {
52
60
function onClientRequestCreated ( { request } ) {
53
61
request [ kInspectorRequestId ] = getNextRequestId ( ) ;
54
62
55
- const { 0 : host , 1 : headers } = convertHeaderObject ( request . getHeaders ( ) ) ;
63
+ const { 0 : headers , 1 : host , 2 : charset } = convertHeaderObject ( request . getHeaders ( ) ) ;
56
64
const url = `${ request . protocol } //${ host } ${ request . path } ` ;
57
65
request [ kRequestUrl ] = url ;
58
66
59
67
Network . requestWillBeSent ( {
60
68
requestId : request [ kInspectorRequestId ] ,
61
69
timestamp : getMonotonicTime ( ) ,
62
70
wallTime : DateNow ( ) ,
71
+ charset,
63
72
request : {
64
73
url,
65
74
method : request . method ,
@@ -95,16 +104,7 @@ function onClientResponseFinish({ request, response }) {
95
104
return ;
96
105
}
97
106
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 ) ;
108
108
109
109
Network . responseReceived ( {
110
110
requestId : request [ kInspectorRequestId ] ,
@@ -114,7 +114,7 @@ function onClientResponseFinish({ request, response }) {
114
114
url : request [ kRequestUrl ] ,
115
115
status : response . statusCode ,
116
116
statusText : response . statusMessage ?? '' ,
117
- headers : convertHeaderObject ( response . headers ) [ 1 ] ,
117
+ headers,
118
118
mimeType,
119
119
charset,
120
120
} ,
0 commit comments