Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/network/RequestHeadersView.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) IBM Corp. 2009 All rights reserved. 3 * Copyright (C) IBM Corp. 2009 All rights reserved.
4 * Copyright (C) 2010 Google Inc. All rights reserved. 4 * Copyright (C) 2010 Google Inc. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
16 * its contributors may be used to endorse or promote products derived 16 * its contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission. 17 * from this software without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30
31 /** 30 /**
32 * @constructor 31 * @unrestricted
33 * @extends {WebInspector.VBox}
34 * @param {!WebInspector.NetworkRequest} request
35 */ 32 */
36 WebInspector.RequestHeadersView = function(request) 33 WebInspector.RequestHeadersView = class extends WebInspector.VBox {
37 { 34 /**
38 WebInspector.VBox.call(this); 35 * @param {!WebInspector.NetworkRequest} request
39 this.registerRequiredCSS("network/requestHeadersView.css"); 36 */
40 this.element.classList.add("request-headers-view"); 37 constructor(request) {
38 super();
39 this.registerRequiredCSS('network/requestHeadersView.css');
40 this.element.classList.add('request-headers-view');
41 41
42 this._request = request; 42 this._request = request;
43 this._decodeRequestParameters = true; 43 this._decodeRequestParameters = true;
44 this._showRequestHeadersText = false; 44 this._showRequestHeadersText = false;
45 this._showResponseHeadersText = false; 45 this._showResponseHeadersText = false;
46 46
47 var root = new TreeOutlineInShadow(); 47 var root = new TreeOutlineInShadow();
48 root.registerRequiredCSS("network/requestHeadersTree.css"); 48 root.registerRequiredCSS('network/requestHeadersTree.css');
49 root.element.classList.add("request-headers-tree"); 49 root.element.classList.add('request-headers-tree');
50 root.setFocusable(false); 50 root.setFocusable(false);
51 root.makeDense(); 51 root.makeDense();
52 root.expandTreeElementsWhenArrowing = true; 52 root.expandTreeElementsWhenArrowing = true;
53 this.element.appendChild(root.element); 53 this.element.appendChild(root.element);
54 54
55 var generalCategory = new WebInspector.RequestHeadersView.Category(root, "ge neral", WebInspector.UIString("General")); 55 var generalCategory =
56 new WebInspector.RequestHeadersView.Category(root, 'general', WebInspect or.UIString('General'));
56 generalCategory.hidden = false; 57 generalCategory.hidden = false;
57 this._urlItem = generalCategory.createLeaf(); 58 this._urlItem = generalCategory.createLeaf();
58 this._requestMethodItem = generalCategory.createLeaf(); 59 this._requestMethodItem = generalCategory.createLeaf();
59 this._statusCodeItem = generalCategory.createLeaf(); 60 this._statusCodeItem = generalCategory.createLeaf();
60 this._remoteAddressItem = generalCategory.createLeaf(); 61 this._remoteAddressItem = generalCategory.createLeaf();
61 this._remoteAddressItem.hidden = true; 62 this._remoteAddressItem.hidden = true;
62 63
63 this._responseHeadersCategory = new WebInspector.RequestHeadersView.Category (root, "responseHeaders", ""); 64 this._responseHeadersCategory = new WebInspector.RequestHeadersView.Category (root, 'responseHeaders', '');
64 this._requestHeadersCategory = new WebInspector.RequestHeadersView.Category( root, "requestHeaders", ""); 65 this._requestHeadersCategory = new WebInspector.RequestHeadersView.Category( root, 'requestHeaders', '');
65 this._queryStringCategory = new WebInspector.RequestHeadersView.Category(roo t, "queryString", ""); 66 this._queryStringCategory = new WebInspector.RequestHeadersView.Category(roo t, 'queryString', '');
66 this._formDataCategory = new WebInspector.RequestHeadersView.Category(root, "formData", ""); 67 this._formDataCategory = new WebInspector.RequestHeadersView.Category(root, 'formData', '');
67 this._requestPayloadCategory = new WebInspector.RequestHeadersView.Category( root, "requestPayload", WebInspector.UIString("Request Payload")); 68 this._requestPayloadCategory =
68 }; 69 new WebInspector.RequestHeadersView.Category(root, 'requestPayload', Web Inspector.UIString('Request Payload'));
69 70 }
70 WebInspector.RequestHeadersView.prototype = { 71
71 wasShown: function() 72 /**
72 { 73 * @override
73 this._request.addEventListener(WebInspector.NetworkRequest.Events.Remote AddressChanged, this._refreshRemoteAddress, this); 74 */
74 this._request.addEventListener(WebInspector.NetworkRequest.Events.Reques tHeadersChanged, this._refreshRequestHeaders, this); 75 wasShown() {
75 this._request.addEventListener(WebInspector.NetworkRequest.Events.Respon seHeadersChanged, this._refreshResponseHeaders, this); 76 this._request.addEventListener(
76 this._request.addEventListener(WebInspector.NetworkRequest.Events.Finish edLoading, this._refreshHTTPInformation, this); 77 WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRe moteAddress, this);
77 78 this._request.addEventListener(
78 this._refreshURL(); 79 WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshR equestHeaders, this);
79 this._refreshQueryString(); 80 this._request.addEventListener(
80 this._refreshRequestHeaders(); 81 WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refresh ResponseHeaders, this);
81 this._refreshResponseHeaders(); 82 this._request.addEventListener(
82 this._refreshHTTPInformation(); 83 WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInf ormation, this);
83 this._refreshRemoteAddress(); 84
84 }, 85 this._refreshURL();
85 86 this._refreshQueryString();
86 willHide: function() 87 this._refreshRequestHeaders();
87 { 88 this._refreshResponseHeaders();
88 this._request.removeEventListener(WebInspector.NetworkRequest.Events.Rem oteAddressChanged, this._refreshRemoteAddress, this); 89 this._refreshHTTPInformation();
89 this._request.removeEventListener(WebInspector.NetworkRequest.Events.Req uestHeadersChanged, this._refreshRequestHeaders, this); 90 this._refreshRemoteAddress();
90 this._request.removeEventListener(WebInspector.NetworkRequest.Events.Res ponseHeadersChanged, this._refreshResponseHeaders, this); 91 }
91 this._request.removeEventListener(WebInspector.NetworkRequest.Events.Fin ishedLoading, this._refreshHTTPInformation, this); 92
92 }, 93 /**
93 94 * @override
94 /** 95 */
95 * @param {string} name 96 willHide() {
96 * @param {string} value 97 this._request.removeEventListener(
97 * @return {!DocumentFragment} 98 WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRe moteAddress, this);
98 */ 99 this._request.removeEventListener(
99 _formatHeader: function(name, value) 100 WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshR equestHeaders, this);
100 { 101 this._request.removeEventListener(
101 var fragment = createDocumentFragment(); 102 WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refresh ResponseHeaders, this);
102 fragment.createChild("div", "header-name").textContent = name + ":"; 103 this._request.removeEventListener(
103 fragment.createChild("div", "header-value source-code").textContent = va lue; 104 WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInf ormation, this);
104 105 }
105 return fragment; 106
106 }, 107 /**
107 108 * @param {string} name
108 /** 109 * @param {string} value
109 * @param {string} value 110 * @return {!DocumentFragment}
110 * @param {string} className 111 */
111 * @param {boolean} decodeParameters 112 _formatHeader(name, value) {
112 * @return {!Element} 113 var fragment = createDocumentFragment();
113 */ 114 fragment.createChild('div', 'header-name').textContent = name + ':';
114 _formatParameter: function(value, className, decodeParameters) 115 fragment.createChild('div', 'header-value source-code').textContent = value;
115 { 116
116 var errorDecoding = false; 117 return fragment;
117 118 }
118 if (decodeParameters) { 119
119 value = value.replace(/\+/g, " "); 120 /**
120 if (value.indexOf("%") >= 0) { 121 * @param {string} value
121 try { 122 * @param {string} className
122 value = decodeURIComponent(value); 123 * @param {boolean} decodeParameters
123 } catch (e) { 124 * @return {!Element}
124 errorDecoding = true; 125 */
125 } 126 _formatParameter(value, className, decodeParameters) {
126 } 127 var errorDecoding = false;
128
129 if (decodeParameters) {
130 value = value.replace(/\+/g, ' ');
131 if (value.indexOf('%') >= 0) {
132 try {
133 value = decodeURIComponent(value);
134 } catch (e) {
135 errorDecoding = true;
127 } 136 }
128 var div = createElementWithClass("div", className); 137 }
129 if (value === "") 138 }
130 div.classList.add("empty-value"); 139 var div = createElementWithClass('div', className);
131 if (errorDecoding) 140 if (value === '')
132 div.createChild("span", "header-decode-error").textContent = WebInsp ector.UIString("(unable to decode value)"); 141 div.classList.add('empty-value');
133 else 142 if (errorDecoding)
134 div.textContent = value; 143 div.createChild('span', 'header-decode-error').textContent = WebInspector. UIString('(unable to decode value)');
135 return div; 144 else
136 }, 145 div.textContent = value;
137 146 return div;
138 _refreshURL: function() 147 }
139 { 148
140 this._urlItem.title = this._formatHeader(WebInspector.UIString("Request URL"), this._request.url); 149 _refreshURL() {
141 }, 150 this._urlItem.title = this._formatHeader(WebInspector.UIString('Request URL' ), this._request.url);
142 151 }
143 _refreshQueryString: function() 152
144 { 153 _refreshQueryString() {
145 var queryString = this._request.queryString(); 154 var queryString = this._request.queryString();
146 var queryParameters = this._request.queryParameters; 155 var queryParameters = this._request.queryParameters;
147 this._queryStringCategory.hidden = !queryParameters; 156 this._queryStringCategory.hidden = !queryParameters;
148 if (queryParameters) 157 if (queryParameters)
149 this._refreshParams(WebInspector.UIString("Query String Parameters") , queryParameters, queryString, this._queryStringCategory); 158 this._refreshParams(
150 }, 159 WebInspector.UIString('Query String Parameters'), queryParameters, que ryString, this._queryStringCategory);
151 160 }
152 _refreshFormData: function() 161
153 { 162 _refreshFormData() {
154 this._formDataCategory.hidden = true; 163 this._formDataCategory.hidden = true;
155 this._requestPayloadCategory.hidden = true; 164 this._requestPayloadCategory.hidden = true;
156 165
157 var formData = this._request.requestFormData; 166 var formData = this._request.requestFormData;
158 if (!formData) 167 if (!formData)
159 return; 168 return;
160 169
161 var formParameters = this._request.formParameters; 170 var formParameters = this._request.formParameters;
162 if (formParameters) { 171 if (formParameters) {
163 this._formDataCategory.hidden = false; 172 this._formDataCategory.hidden = false;
164 this._refreshParams(WebInspector.UIString("Form Data"), formParamete rs, formData, this._formDataCategory); 173 this._refreshParams(WebInspector.UIString('Form Data'), formParameters, fo rmData, this._formDataCategory);
165 } else { 174 } else {
166 this._requestPayloadCategory.hidden = false; 175 this._requestPayloadCategory.hidden = false;
167 try { 176 try {
168 var json = JSON.parse(formData); 177 var json = JSON.parse(formData);
169 this._refreshRequestJSONPayload(json, formData); 178 this._refreshRequestJSONPayload(json, formData);
170 } catch (e) { 179 } catch (e) {
171 this._populateTreeElementWithSourceText(this._requestPayloadCate gory, formData); 180 this._populateTreeElementWithSourceText(this._requestPayloadCategory, fo rmData);
172 } 181 }
173 } 182 }
174 }, 183 }
175 184
176 /** 185 /**
177 * @param {!TreeElement} treeElement 186 * @param {!TreeElement} treeElement
178 * @param {?string} sourceText 187 * @param {?string} sourceText
179 */ 188 */
180 _populateTreeElementWithSourceText: function(treeElement, sourceText) 189 _populateTreeElementWithSourceText(treeElement, sourceText) {
181 { 190 var sourceTextElement = createElementWithClass('span', 'header-value source- code');
182 var sourceTextElement = createElementWithClass("span", "header-value sou rce-code"); 191 sourceTextElement.textContent = String(sourceText || '').trim();
183 sourceTextElement.textContent = String(sourceText || "").trim(); 192
184 193 var sourceTreeElement = new TreeElement(sourceTextElement);
185 var sourceTreeElement = new TreeElement(sourceTextElement); 194 sourceTreeElement.selectable = false;
186 sourceTreeElement.selectable = false; 195 treeElement.removeChildren();
187 treeElement.removeChildren(); 196 treeElement.appendChild(sourceTreeElement);
188 treeElement.appendChild(sourceTreeElement); 197 }
189 }, 198
190 199 /**
191 /** 200 * @param {string} title
192 * @param {string} title 201 * @param {?Array.<!WebInspector.NetworkRequest.NameValue>} params
193 * @param {?Array.<!WebInspector.NetworkRequest.NameValue>} params 202 * @param {?string} sourceText
194 * @param {?string} sourceText 203 * @param {!TreeElement} paramsTreeElement
195 * @param {!TreeElement} paramsTreeElement 204 */
196 */ 205 _refreshParams(title, params, sourceText, paramsTreeElement) {
197 _refreshParams: function(title, params, sourceText, paramsTreeElement) 206 paramsTreeElement.removeChildren();
198 { 207
199 paramsTreeElement.removeChildren(); 208 paramsTreeElement.listItemElement.removeChildren();
200 209 paramsTreeElement.listItemElement.createTextChild(title);
201 paramsTreeElement.listItemElement.removeChildren(); 210
202 paramsTreeElement.listItemElement.createTextChild(title); 211 var headerCount = createElementWithClass('span', 'header-count');
203 212 headerCount.textContent = WebInspector.UIString('\u00A0(%d)', params.length) ;
204 var headerCount = createElementWithClass("span", "header-count"); 213 paramsTreeElement.listItemElement.appendChild(headerCount);
205 headerCount.textContent = WebInspector.UIString("\u00A0(%d)", params.len gth);
206 paramsTreeElement.listItemElement.appendChild(headerCount);
207
208 /**
209 * @param {!Event} event
210 * @this {WebInspector.RequestHeadersView}
211 */
212 function toggleViewSource(event)
213 {
214 paramsTreeElement._viewSource = !paramsTreeElement._viewSource;
215 this._refreshParams(title, params, sourceText, paramsTreeElement);
216 event.consume();
217 }
218
219 paramsTreeElement.listItemElement.appendChild(this._createViewSourceTogg le(paramsTreeElement._viewSource, toggleViewSource.bind(this)));
220
221 if (paramsTreeElement._viewSource) {
222 this._populateTreeElementWithSourceText(paramsTreeElement, sourceTex t);
223 return;
224 }
225
226 var toggleTitle = this._decodeRequestParameters ? WebInspector.UIString( "view URL encoded") : WebInspector.UIString("view decoded");
227 var toggleButton = this._createToggleButton(toggleTitle);
228 toggleButton.addEventListener("click", this._toggleURLDecoding.bind(this ), false);
229 paramsTreeElement.listItemElement.appendChild(toggleButton);
230
231 for (var i = 0; i < params.length; ++i) {
232 var paramNameValue = createDocumentFragment();
233 if (params[i].name !== "") {
234 var name = this._formatParameter(params[i].name + ":", "header-n ame", this._decodeRequestParameters);
235 var value = this._formatParameter(params[i].value, "header-value source-code", this._decodeRequestParameters);
236 paramNameValue.appendChild(name);
237 paramNameValue.appendChild(value);
238 } else {
239 paramNameValue.appendChild(this._formatParameter(WebInspector.UI String("(empty)"), "empty-request-header", this._decodeRequestParameters));
240 }
241
242 var paramTreeElement = new TreeElement(paramNameValue);
243 paramTreeElement.selectable = false;
244 paramsTreeElement.appendChild(paramTreeElement);
245 }
246 },
247
248 /**
249 * @param {*} parsedObject
250 * @param {string} sourceText
251 */
252 _refreshRequestJSONPayload: function(parsedObject, sourceText)
253 {
254 var treeElement = this._requestPayloadCategory;
255 treeElement.removeChildren();
256
257 var listItem = this._requestPayloadCategory.listItemElement;
258 listItem.removeChildren();
259 listItem.createTextChild(this._requestPayloadCategory.title);
260
261 /**
262 * @param {!Event} event
263 * @this {WebInspector.RequestHeadersView}
264 */
265 function toggleViewSource(event)
266 {
267 treeElement._viewSource = !treeElement._viewSource;
268 this._refreshRequestJSONPayload(parsedObject, sourceText);
269 event.consume();
270 }
271
272 listItem.appendChild(this._createViewSourceToggle(treeElement._viewSourc e, toggleViewSource.bind(this)));
273 if (treeElement._viewSource) {
274 this._populateTreeElementWithSourceText(this._requestPayloadCategory , sourceText);
275 } else {
276 var object = WebInspector.RemoteObject.fromLocalObject(parsedObject) ;
277 var section = new WebInspector.ObjectPropertiesSection(object, objec t.description);
278 section.expand();
279 section.editable = false;
280 treeElement.appendChild(new TreeElement(section.element));
281 }
282 },
283
284 /**
285 * @param {boolean} viewSource
286 * @param {function(!Event)} handler
287 * @return {!Element}
288 */
289 _createViewSourceToggle: function(viewSource, handler)
290 {
291 var viewSourceToggleTitle = viewSource ? WebInspector.UIString("view par sed") : WebInspector.UIString("view source");
292 var viewSourceToggleButton = this._createToggleButton(viewSourceToggleTi tle);
293 viewSourceToggleButton.addEventListener("click", handler, false);
294 return viewSourceToggleButton;
295 },
296 214
297 /** 215 /**
298 * @param {!Event} event 216 * @param {!Event} event
217 * @this {WebInspector.RequestHeadersView}
299 */ 218 */
300 _toggleURLDecoding: function(event) 219 function toggleViewSource(event) {
301 { 220 paramsTreeElement._viewSource = !paramsTreeElement._viewSource;
302 this._decodeRequestParameters = !this._decodeRequestParameters; 221 this._refreshParams(title, params, sourceText, paramsTreeElement);
303 this._refreshQueryString(); 222 event.consume();
304 this._refreshFormData(); 223 }
305 event.consume(); 224
306 }, 225 paramsTreeElement.listItemElement.appendChild(
307 226 this._createViewSourceToggle(paramsTreeElement._viewSource, toggleViewSo urce.bind(this)));
308 _refreshRequestHeaders: function() 227
309 { 228 if (paramsTreeElement._viewSource) {
310 var treeElement = this._requestHeadersCategory; 229 this._populateTreeElementWithSourceText(paramsTreeElement, sourceText);
311 var headers = this._request.requestHeaders().slice(); 230 return;
312 headers.sort(function(a, b) { return a.name.toLowerCase().compareTo(b.na me.toLowerCase()); }); 231 }
313 var headersText = this._request.requestHeadersText(); 232
314 233 var toggleTitle = this._decodeRequestParameters ? WebInspector.UIString('vie w URL encoded') :
315 if (this._showRequestHeadersText && headersText) 234 WebInspector.UIString('vie w decoded');
316 this._refreshHeadersText(WebInspector.UIString("Request Headers"), h eaders.length, headersText, treeElement); 235 var toggleButton = this._createToggleButton(toggleTitle);
317 else 236 toggleButton.addEventListener('click', this._toggleURLDecoding.bind(this), f alse);
318 this._refreshHeaders(WebInspector.UIString("Request Headers"), heade rs, treeElement, headersText === undefined); 237 paramsTreeElement.listItemElement.appendChild(toggleButton);
319 238
320 if (headersText) { 239 for (var i = 0; i < params.length; ++i) {
321 var toggleButton = this._createHeadersToggleButton(this._showRequest HeadersText); 240 var paramNameValue = createDocumentFragment();
322 toggleButton.addEventListener("click", this._toggleRequestHeadersTex t.bind(this), false); 241 if (params[i].name !== '') {
323 treeElement.listItemElement.appendChild(toggleButton); 242 var name = this._formatParameter(params[i].name + ':', 'header-name', th is._decodeRequestParameters);
324 } 243 var value = this._formatParameter(params[i].value, 'header-value source- code', this._decodeRequestParameters);
325 244 paramNameValue.appendChild(name);
326 this._refreshFormData(); 245 paramNameValue.appendChild(value);
327 }, 246 } else {
328 247 paramNameValue.appendChild(this._formatParameter(
329 _refreshResponseHeaders: function() 248 WebInspector.UIString('(empty)'), 'empty-request-header', this._deco deRequestParameters));
330 { 249 }
331 var treeElement = this._responseHeadersCategory; 250
332 var headers = this._request.sortedResponseHeaders.slice(); 251 var paramTreeElement = new TreeElement(paramNameValue);
333 var headersText = this._request.responseHeadersText; 252 paramTreeElement.selectable = false;
334 253 paramsTreeElement.appendChild(paramTreeElement);
335 if (this._showResponseHeadersText) 254 }
336 this._refreshHeadersText(WebInspector.UIString("Response Headers"), headers.length, headersText, treeElement); 255 }
337 else 256
338 this._refreshHeaders(WebInspector.UIString("Response Headers"), head ers, treeElement); 257 /**
339 258 * @param {*} parsedObject
340 if (headersText) { 259 * @param {string} sourceText
341 var toggleButton = this._createHeadersToggleButton(this._showRespons eHeadersText); 260 */
342 toggleButton.addEventListener("click", this._toggleResponseHeadersTe xt.bind(this), false); 261 _refreshRequestJSONPayload(parsedObject, sourceText) {
343 treeElement.listItemElement.appendChild(toggleButton); 262 var treeElement = this._requestPayloadCategory;
344 } 263 treeElement.removeChildren();
345 }, 264
346 265 var listItem = this._requestPayloadCategory.listItemElement;
347 _refreshHTTPInformation: function() 266 listItem.removeChildren();
348 { 267 listItem.createTextChild(this._requestPayloadCategory.title);
349 var requestMethodElement = this._requestMethodItem;
350 requestMethodElement.hidden = !this._request.statusCode;
351 var statusCodeElement = this._statusCodeItem;
352 statusCodeElement.hidden = !this._request.statusCode;
353
354 if (this._request.statusCode) {
355 var statusCodeFragment = createDocumentFragment();
356 statusCodeFragment.createChild("div", "header-name").textContent = W ebInspector.UIString("Status Code") + ":";
357
358 var statusCodeImage = statusCodeFragment.createChild("label", "resou rce-status-image", "dt-icon-label");
359 statusCodeImage.title = this._request.statusCode + " " + this._reque st.statusText;
360
361 if (this._request.statusCode < 300 || this._request.statusCode === 3 04)
362 statusCodeImage.type = "green-ball";
363 else if (this._request.statusCode < 400)
364 statusCodeImage.type = "orange-ball";
365 else
366 statusCodeImage.type = "red-ball";
367
368 requestMethodElement.title = this._formatHeader(WebInspector.UIStrin g("Request Method"), this._request.requestMethod);
369
370 var statusTextElement = statusCodeFragment.createChild("div", "heade r-value source-code");
371 var statusText = this._request.statusCode + " " + this._request.stat usText;
372 if (this._request.fetchedViaServiceWorker) {
373 statusText += " " + WebInspector.UIString("(from ServiceWorker)" );
374 statusTextElement.classList.add("status-from-cache");
375 } else if (this._request.cached()) {
376 if (this._request.cachedInMemory())
377 statusText += " " + WebInspector.UIString("(from memory cach e)");
378 else
379 statusText += " " + WebInspector.UIString("(from disk cache) ");
380 statusTextElement.classList.add("status-from-cache");
381 }
382 statusTextElement.textContent = statusText;
383
384 statusCodeElement.title = statusCodeFragment;
385 }
386 },
387
388 /**
389 * @param {string} title
390 * @param {!TreeElement} headersTreeElement
391 * @param {number} headersLength
392 */
393 _refreshHeadersTitle: function(title, headersTreeElement, headersLength)
394 {
395 headersTreeElement.listItemElement.removeChildren();
396 headersTreeElement.listItemElement.createTextChild(title);
397
398 var headerCount = WebInspector.UIString("\u00A0(%d)", headersLength);
399 headersTreeElement.listItemElement.createChild("span", "header-count").t extContent = headerCount;
400 },
401
402 /**
403 * @param {string} title
404 * @param {!Array.<!WebInspector.NetworkRequest.NameValue>} headers
405 * @param {!TreeElement} headersTreeElement
406 * @param {boolean=} provisionalHeaders
407 */
408 _refreshHeaders: function(title, headers, headersTreeElement, provisionalHea ders)
409 {
410 headersTreeElement.removeChildren();
411
412 var length = headers.length;
413 this._refreshHeadersTitle(title, headersTreeElement, length);
414
415 if (provisionalHeaders) {
416 var cautionText = WebInspector.UIString("Provisional headers are sho wn");
417 var cautionFragment = createDocumentFragment();
418 cautionFragment.createChild("label", "", "dt-icon-label").type = "wa rning-icon";
419 cautionFragment.createChild("div", "caution").textContent = cautionT ext;
420 var cautionTreeElement = new TreeElement(cautionFragment);
421 cautionTreeElement.selectable = false;
422 headersTreeElement.appendChild(cautionTreeElement);
423 }
424
425 headersTreeElement.hidden = !length && !provisionalHeaders;
426 for (var i = 0; i < length; ++i) {
427 var headerTreeElement = new TreeElement(this._formatHeader(headers[i ].name, headers[i].value));
428 headerTreeElement.selectable = false;
429 headersTreeElement.appendChild(headerTreeElement);
430 }
431 },
432
433 /**
434 * @param {string} title
435 * @param {number} count
436 * @param {string} headersText
437 * @param {!TreeElement} headersTreeElement
438 */
439 _refreshHeadersText: function(title, count, headersText, headersTreeElement)
440 {
441 this._populateTreeElementWithSourceText(headersTreeElement, headersText) ;
442 this._refreshHeadersTitle(title, headersTreeElement, count);
443 },
444
445 _refreshRemoteAddress: function()
446 {
447 var remoteAddress = this._request.remoteAddress();
448 var treeElement = this._remoteAddressItem;
449 treeElement.hidden = !remoteAddress;
450 if (remoteAddress)
451 treeElement.title = this._formatHeader(WebInspector.UIString("Remote Address"), remoteAddress);
452 },
453 268
454 /** 269 /**
455 * @param {!Event} event 270 * @param {!Event} event
271 * @this {WebInspector.RequestHeadersView}
456 */ 272 */
457 _toggleRequestHeadersText: function(event) 273 function toggleViewSource(event) {
458 { 274 treeElement._viewSource = !treeElement._viewSource;
459 this._showRequestHeadersText = !this._showRequestHeadersText; 275 this._refreshRequestJSONPayload(parsedObject, sourceText);
460 this._refreshRequestHeaders(); 276 event.consume();
461 event.consume(); 277 }
462 }, 278
463 279 listItem.appendChild(this._createViewSourceToggle(treeElement._viewSource, t oggleViewSource.bind(this)));
464 /** 280 if (treeElement._viewSource) {
465 * @param {!Event} event 281 this._populateTreeElementWithSourceText(this._requestPayloadCategory, sour ceText);
466 */ 282 } else {
467 _toggleResponseHeadersText: function(event) 283 var object = WebInspector.RemoteObject.fromLocalObject(parsedObject);
468 { 284 var section = new WebInspector.ObjectPropertiesSection(object, object.desc ription);
469 this._showResponseHeadersText = !this._showResponseHeadersText; 285 section.expand();
470 this._refreshResponseHeaders(); 286 section.editable = false;
471 event.consume(); 287 treeElement.appendChild(new TreeElement(section.element));
472 }, 288 }
473 289 }
474 /** 290
475 * @param {string} title 291 /**
476 * @return {!Element} 292 * @param {boolean} viewSource
477 */ 293 * @param {function(!Event)} handler
478 _createToggleButton: function(title) 294 * @return {!Element}
479 { 295 */
480 var button = createElementWithClass("span", "header-toggle"); 296 _createViewSourceToggle(viewSource, handler) {
481 button.textContent = title; 297 var viewSourceToggleTitle =
482 return button; 298 viewSource ? WebInspector.UIString('view parsed') : WebInspector.UIStrin g('view source');
483 }, 299 var viewSourceToggleButton = this._createToggleButton(viewSourceToggleTitle) ;
484 300 viewSourceToggleButton.addEventListener('click', handler, false);
485 /** 301 return viewSourceToggleButton;
486 * @param {boolean} isHeadersTextShown 302 }
487 * @return {!Element} 303
488 */ 304 /**
489 _createHeadersToggleButton: function(isHeadersTextShown) 305 * @param {!Event} event
490 { 306 */
491 var toggleTitle = isHeadersTextShown ? WebInspector.UIString("view parse d") : WebInspector.UIString("view source"); 307 _toggleURLDecoding(event) {
492 return this._createToggleButton(toggleTitle); 308 this._decodeRequestParameters = !this._decodeRequestParameters;
493 }, 309 this._refreshQueryString();
494 310 this._refreshFormData();
495 __proto__: WebInspector.VBox.prototype 311 event.consume();
312 }
313
314 _refreshRequestHeaders() {
315 var treeElement = this._requestHeadersCategory;
316 var headers = this._request.requestHeaders().slice();
317 headers.sort(function(a, b) {
318 return a.name.toLowerCase().compareTo(b.name.toLowerCase());
319 });
320 var headersText = this._request.requestHeadersText();
321
322 if (this._showRequestHeadersText && headersText)
323 this._refreshHeadersText(WebInspector.UIString('Request Headers'), headers .length, headersText, treeElement);
324 else
325 this._refreshHeaders(WebInspector.UIString('Request Headers'), headers, tr eeElement, headersText === undefined);
326
327 if (headersText) {
328 var toggleButton = this._createHeadersToggleButton(this._showRequestHeader sText);
329 toggleButton.addEventListener('click', this._toggleRequestHeadersText.bind (this), false);
330 treeElement.listItemElement.appendChild(toggleButton);
331 }
332
333 this._refreshFormData();
334 }
335
336 _refreshResponseHeaders() {
337 var treeElement = this._responseHeadersCategory;
338 var headers = this._request.sortedResponseHeaders.slice();
339 var headersText = this._request.responseHeadersText;
340
341 if (this._showResponseHeadersText)
342 this._refreshHeadersText(WebInspector.UIString('Response Headers'), header s.length, headersText, treeElement);
343 else
344 this._refreshHeaders(WebInspector.UIString('Response Headers'), headers, t reeElement);
345
346 if (headersText) {
347 var toggleButton = this._createHeadersToggleButton(this._showResponseHeade rsText);
348 toggleButton.addEventListener('click', this._toggleResponseHeadersText.bin d(this), false);
349 treeElement.listItemElement.appendChild(toggleButton);
350 }
351 }
352
353 _refreshHTTPInformation() {
354 var requestMethodElement = this._requestMethodItem;
355 requestMethodElement.hidden = !this._request.statusCode;
356 var statusCodeElement = this._statusCodeItem;
357 statusCodeElement.hidden = !this._request.statusCode;
358
359 if (this._request.statusCode) {
360 var statusCodeFragment = createDocumentFragment();
361 statusCodeFragment.createChild('div', 'header-name').textContent = WebInsp ector.UIString('Status Code') + ':';
362
363 var statusCodeImage = statusCodeFragment.createChild('label', 'resource-st atus-image', 'dt-icon-label');
364 statusCodeImage.title = this._request.statusCode + ' ' + this._request.sta tusText;
365
366 if (this._request.statusCode < 300 || this._request.statusCode === 304)
367 statusCodeImage.type = 'green-ball';
368 else if (this._request.statusCode < 400)
369 statusCodeImage.type = 'orange-ball';
370 else
371 statusCodeImage.type = 'red-ball';
372
373 requestMethodElement.title =
374 this._formatHeader(WebInspector.UIString('Request Method'), this._requ est.requestMethod);
375
376 var statusTextElement = statusCodeFragment.createChild('div', 'header-valu e source-code');
377 var statusText = this._request.statusCode + ' ' + this._request.statusText ;
378 if (this._request.fetchedViaServiceWorker) {
379 statusText += ' ' + WebInspector.UIString('(from ServiceWorker)');
380 statusTextElement.classList.add('status-from-cache');
381 } else if (this._request.cached()) {
382 if (this._request.cachedInMemory())
383 statusText += ' ' + WebInspector.UIString('(from memory cache)');
384 else
385 statusText += ' ' + WebInspector.UIString('(from disk cache)');
386 statusTextElement.classList.add('status-from-cache');
387 }
388 statusTextElement.textContent = statusText;
389
390 statusCodeElement.title = statusCodeFragment;
391 }
392 }
393
394 /**
395 * @param {string} title
396 * @param {!TreeElement} headersTreeElement
397 * @param {number} headersLength
398 */
399 _refreshHeadersTitle(title, headersTreeElement, headersLength) {
400 headersTreeElement.listItemElement.removeChildren();
401 headersTreeElement.listItemElement.createTextChild(title);
402
403 var headerCount = WebInspector.UIString('\u00A0(%d)', headersLength);
404 headersTreeElement.listItemElement.createChild('span', 'header-count').textC ontent = headerCount;
405 }
406
407 /**
408 * @param {string} title
409 * @param {!Array.<!WebInspector.NetworkRequest.NameValue>} headers
410 * @param {!TreeElement} headersTreeElement
411 * @param {boolean=} provisionalHeaders
412 */
413 _refreshHeaders(title, headers, headersTreeElement, provisionalHeaders) {
414 headersTreeElement.removeChildren();
415
416 var length = headers.length;
417 this._refreshHeadersTitle(title, headersTreeElement, length);
418
419 if (provisionalHeaders) {
420 var cautionText = WebInspector.UIString('Provisional headers are shown');
421 var cautionFragment = createDocumentFragment();
422 cautionFragment.createChild('label', '', 'dt-icon-label').type = 'warning- icon';
423 cautionFragment.createChild('div', 'caution').textContent = cautionText;
424 var cautionTreeElement = new TreeElement(cautionFragment);
425 cautionTreeElement.selectable = false;
426 headersTreeElement.appendChild(cautionTreeElement);
427 }
428
429 headersTreeElement.hidden = !length && !provisionalHeaders;
430 for (var i = 0; i < length; ++i) {
431 var headerTreeElement = new TreeElement(this._formatHeader(headers[i].name , headers[i].value));
432 headerTreeElement.selectable = false;
433 headersTreeElement.appendChild(headerTreeElement);
434 }
435 }
436
437 /**
438 * @param {string} title
439 * @param {number} count
440 * @param {string} headersText
441 * @param {!TreeElement} headersTreeElement
442 */
443 _refreshHeadersText(title, count, headersText, headersTreeElement) {
444 this._populateTreeElementWithSourceText(headersTreeElement, headersText);
445 this._refreshHeadersTitle(title, headersTreeElement, count);
446 }
447
448 _refreshRemoteAddress() {
449 var remoteAddress = this._request.remoteAddress();
450 var treeElement = this._remoteAddressItem;
451 treeElement.hidden = !remoteAddress;
452 if (remoteAddress)
453 treeElement.title = this._formatHeader(WebInspector.UIString('Remote Addre ss'), remoteAddress);
454 }
455
456 /**
457 * @param {!Event} event
458 */
459 _toggleRequestHeadersText(event) {
460 this._showRequestHeadersText = !this._showRequestHeadersText;
461 this._refreshRequestHeaders();
462 event.consume();
463 }
464
465 /**
466 * @param {!Event} event
467 */
468 _toggleResponseHeadersText(event) {
469 this._showResponseHeadersText = !this._showResponseHeadersText;
470 this._refreshResponseHeaders();
471 event.consume();
472 }
473
474 /**
475 * @param {string} title
476 * @return {!Element}
477 */
478 _createToggleButton(title) {
479 var button = createElementWithClass('span', 'header-toggle');
480 button.textContent = title;
481 return button;
482 }
483
484 /**
485 * @param {boolean} isHeadersTextShown
486 * @return {!Element}
487 */
488 _createHeadersToggleButton(isHeadersTextShown) {
489 var toggleTitle = isHeadersTextShown ? WebInspector.UIString('view parsed') : WebInspector.UIString('view source');
490 return this._createToggleButton(toggleTitle);
491 }
496 }; 492 };
497 493
498 /** 494 /**
499 * @constructor 495 * @unrestricted
500 * @extends {TreeElement}
501 * @param {!TreeOutline} root
502 * @param {string} name
503 * @param {string=} title
504 */ 496 */
505 WebInspector.RequestHeadersView.Category = function(root, name, title) 497 WebInspector.RequestHeadersView.Category = class extends TreeElement {
506 { 498 /**
507 TreeElement.call(this, title || "", true); 499 * @param {!TreeOutline} root
500 * @param {string} name
501 * @param {string=} title
502 */
503 constructor(root, name, title) {
504 super(title || '', true);
508 this.selectable = false; 505 this.selectable = false;
509 this.toggleOnClick = true; 506 this.toggleOnClick = true;
510 this.hidden = true; 507 this.hidden = true;
511 this._expandedSetting = WebInspector.settings.createSetting("request-info-" + name + "-category-expanded", true); 508 this._expandedSetting = WebInspector.settings.createSetting('request-info-' + name + '-category-expanded', true);
512 this.expanded = this._expandedSetting.get(); 509 this.expanded = this._expandedSetting.get();
513 root.appendChild(this); 510 root.appendChild(this);
511 }
512
513 /**
514 * @return {!TreeElement}
515 */
516 createLeaf() {
517 var leaf = new TreeElement();
518 leaf.selectable = false;
519 this.appendChild(leaf);
520 return leaf;
521 }
522
523 /**
524 * @override
525 */
526 onexpand() {
527 this._expandedSetting.set(true);
528 }
529
530 /**
531 * @override
532 */
533 oncollapse() {
534 this._expandedSetting.set(false);
535 }
514 }; 536 };
515
516 WebInspector.RequestHeadersView.Category.prototype = {
517 /**
518 * @return {!TreeElement}
519 */
520 createLeaf: function()
521 {
522 var leaf = new TreeElement();
523 leaf.selectable = false;
524 this.appendChild(leaf);
525 return leaf;
526 },
527
528 onexpand: function()
529 {
530 this._expandedSetting.set(true);
531 },
532
533 oncollapse: function()
534 {
535 this._expandedSetting.set(false);
536 },
537
538 __proto__: TreeElement.prototype
539 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698