@@ -123,14 +123,70 @@ templates._response = function(response, is_last, do_raw)
123123 ]
124124} ;
125125
126+ templates . _make_header_template_func = function ( is_request_headers )
127+ {
128+ // add data-spec attributes on certain firstline tokens, depending on if it's request_headers.
129+ // todo: while this has firstline_tokens, it can't be reused.
130+ var firstline_tokens = 0 ;
131+ var add_data_spec ;
132+ if ( is_request_headers )
133+ {
134+ add_data_spec = {
135+ 0 : true
136+ } ;
137+ }
138+ else
139+ {
140+ add_data_spec = {
141+ 1 : true
142+ } ;
143+ }
144+
145+ return function ( token )
146+ {
147+ var TYPE = 0 ;
148+ var STR = 1 ;
149+ var attrs = [ "class" , "header-token-type-" + cls . HTTPHeaderTokenizer . classnames [ token [ TYPE ] ] ] ;
150+ if ( token [ TYPE ] === cls . HTTPHeaderTokenizer . types . FIRST_LINE_PART )
151+ {
152+ if ( firstline_tokens in add_data_spec )
153+ {
154+ attrs . extend ( [ "data-spec" , "http#" + token [ STR ] ] )
155+ }
156+ firstline_tokens ++ ;
157+ }
158+ return [ "span" , token [ STR ] ] . concat ( attrs ) ;
159+ }
160+ }
161+
162+ templates . _token_receiver = function ( tokens , token_type , token )
163+ {
164+ tokens . push ( [ token_type , token ] ) ;
165+ } ;
166+
126167templates . _request_headers = function ( req , do_raw )
127168{
128169 if ( do_raw )
129170 {
130- return [
131- [ "h2" , ui_strings . S_NETWORK_REQUEST_DETAIL_REQUEST_TITLE ] ,
132- [ "pre" , req . request_headers_raw , "class" , "mono" ]
133- ] ;
171+ if ( req . request_headers_raw ) // todo: we explicitely mention missing request headers in parsed. this check here is a bit ugly.
172+ {
173+ if ( ! req . header_tokens )
174+ {
175+ var tokens = [ ] ;
176+ var tokenizer = new cls . HTTPHeaderTokenizer ( ) ;
177+ tokenizer . tokenize ( req . request_headers_raw , templates . _token_receiver . bind ( this , tokens ) ) ;
178+ req . header_tokens = tokens ;
179+ }
180+ if ( req . header_tokens . length )
181+ {
182+ var map_func = templates . _make_header_template_func ( true ) ;
183+ return [
184+ [ "h2" , ui_strings . S_NETWORK_REQUEST_DETAIL_REQUEST_TITLE ] ,
185+ [ "pre" , req . header_tokens . map ( map_func ) , "class" , "mono" ]
186+ ] ;
187+ }
188+ }
189+ return [ ] ;
134190 }
135191
136192 var ret = [ ] ;
@@ -166,16 +222,28 @@ templates._request_headers = function(req, do_raw)
166222
167223templates . _response_headers = function ( resp , do_raw )
168224{
225+ if ( ! resp . response_headers ) // todo: we explicitely mention missing request headers but not missing response headers // ui_strings.S_NETWORK_REQUEST_NO_HEADERS_LABEL
226+ return [ ] ;
227+
169228 if ( do_raw )
170229 {
171- return [
172- [ "h2" , ui_strings . S_NETWORK_REQUEST_DETAIL_RESPONSE_TITLE ] ,
173- [ "pre" , resp . response_headers_raw , "class" , "mono" ]
174- ] ;
175- }
176-
177- if ( ! resp . response_headers ) // todo: we explicitely mention missing request headers but not missing response headers // ui_strings.S_NETWORK_REQUEST_NO_HEADERS_LABEL
230+ if ( ! resp . header_tokens )
231+ {
232+ var tokens = [ ] ;
233+ var tokenizer = new cls . HTTPHeaderTokenizer ( ) ;
234+ tokenizer . tokenize ( resp . response_headers_raw , templates . _token_receiver . bind ( this , tokens ) ) ;
235+ resp . header_tokens = tokens ;
236+ }
237+ if ( resp . header_tokens . length )
238+ {
239+ var map_func = templates . _make_header_template_func ( false ) ;
240+ return [
241+ [ "h2" , ui_strings . S_NETWORK_REQUEST_DETAIL_RESPONSE_TITLE ] ,
242+ [ "pre" , resp . header_tokens . map ( map_func ) , "class" , "mono" ]
243+ ] ;
244+ }
178245 return [ ] ;
246+ }
179247
180248 var ret = [ ] ;
181249
0 commit comments