| OLD | NEW |
| 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 }; | |
| OLD | NEW |