15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) IBM Corp. 2009  All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
34a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.NetworkRequest} request
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.RequestHeadersView = function(request)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("resourceView.css");
40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this.registerRequiredCSS("requestHeadersView.css");
41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this.element.classList.add("request-headers-view");
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._request = request;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersListElement = document.createElement("ol");
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersListElement.className = "outline-disclosure";
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element.appendChild(this._headersListElement);
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline = new TreeOutline(this._headersListElement);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.expandTreeElementsWhenArrowing = true;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._remoteAddressTreeElement = new TreeElement("", null, false);
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._remoteAddressTreeElement.selectable = false;
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._remoteAddressTreeElement.hidden = true;
5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._remoteAddressTreeElement);
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._urlTreeElement = new TreeElement("", null, false);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._urlTreeElement.selectable = false;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._urlTreeElement);
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestMethodTreeElement = new TreeElement("", null, false);
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestMethodTreeElement.selectable = false;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._requestMethodTreeElement);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._statusCodeTreeElement = new TreeElement("", null, false);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._statusCodeTreeElement.selectable = false;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._statusCodeTreeElement);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestHeadersTreeElement = new TreeElement("", null, true);
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestHeadersTreeElement.expanded = true;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestHeadersTreeElement.selectable = false;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._requestHeadersTreeElement);
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._decodeRequestParameters = true;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._showRequestHeadersText = false;
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._showResponseHeadersText = false;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._queryStringTreeElement = new TreeElement("", null, true);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._queryStringTreeElement.expanded = true;
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._queryStringTreeElement.selectable = false;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._queryStringTreeElement.hidden = true;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._queryStringTreeElement);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._formDataTreeElement = new TreeElement("", null, true);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._formDataTreeElement.expanded = true;
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._formDataTreeElement.selectable = false;
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._formDataTreeElement.hidden = true;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._formDataTreeElement);
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestPayloadTreeElement = new TreeElement(WebInspector.UIString("Request Payload"), null, true);
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestPayloadTreeElement.expanded = true;
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestPayloadTreeElement.selectable = false;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestPayloadTreeElement.hidden = true;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._requestPayloadTreeElement);
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._responseHeadersTreeElement = new TreeElement("", null, true);
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._responseHeadersTreeElement.expanded = true;
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._responseHeadersTreeElement.selectable = false;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._responseHeadersTreeElement);
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.RequestHeadersView.prototype = {
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    wasShown: function()
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._request.addEventListener(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRemoteAddress, this);
108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.addEventListener(WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshRequestHeaders, this);
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.addEventListener(WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refreshResponseHeaders, this);
110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInformation, this);
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshURL();
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshQueryString();
114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshRequestHeaders();
115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshResponseHeaders();
116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshHTTPInformation();
11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._refreshRemoteAddress();
118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    willHide: function()
121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
12209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._request.removeEventListener(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRemoteAddress, this);
123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.removeEventListener(WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshRequestHeaders, this);
124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.removeEventListener(WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refreshResponseHeaders, this);
125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInformation, this);
126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
13106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {!DocumentFragment}
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _formatHeader: function(name, value)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var fragment = document.createDocumentFragment();
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        fragment.createChild("div", "header-name").textContent = name + ":";
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        fragment.createChild("div", "header-value source-code").textContent = value;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return fragment;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} className
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} decodeParameters
14606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {!Element}
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _formatParameter: function(value, className, decodeParameters)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var errorDecoding = false;
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (decodeParameters) {
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            value = value.replace(/\+/g, " ");
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (value.indexOf("%") >= 0) {
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                try {
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    value = decodeURIComponent(value);
157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                } catch (e) {
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    errorDecoding = true;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var div = document.createElement("div");
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        div.className = className;
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (errorDecoding)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            div.createChild("span", "error-message").textContent = WebInspector.UIString("(unable to decode value)");
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            div.textContent = value;
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return div;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshURL: function()
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._urlTreeElement.title = this._formatHeader(WebInspector.UIString("Request URL"), this._request.url);
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshQueryString: function()
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var queryString = this._request.queryString();
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var queryParameters = this._request.queryParameters;
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._queryStringTreeElement.hidden = !queryParameters;
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (queryParameters)
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._refreshParams(WebInspector.UIString("Query String Parameters"), queryParameters, queryString, this._queryStringTreeElement);
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshFormData: function()
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._formDataTreeElement.hidden = true;
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestPayloadTreeElement.hidden = true;
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var formData = this._request.requestFormData;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!formData)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var formParameters = this._request.formParameters;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (formParameters) {
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._formDataTreeElement.hidden = false;
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._refreshParams(WebInspector.UIString("Form Data"), formParameters, formData, this._formDataTreeElement);
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._requestPayloadTreeElement.hidden = false;
200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            try {
201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                var json = JSON.parse(formData);
20206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                this._refreshRequestJSONPayload(json, formData);
203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            } catch (e) {
204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                this._populateTreeElementWithSourceText(this._requestPayloadTreeElement, formData);
205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            }
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
20906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
21006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!TreeElement} treeElement
21106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {?string} sourceText
21206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _populateTreeElementWithSourceText: function(treeElement, sourceText)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
215a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var sourceTextElement = document.createElement("span");
216a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        sourceTextElement.classList.add("header-value");
217a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        sourceTextElement.classList.add("source-code");
218a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        sourceTextElement.textContent = String(sourceText || "").trim();
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
220a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var sourceTreeElement = new TreeElement(sourceTextElement);
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        sourceTreeElement.selectable = false;
222a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        treeElement.removeChildren();
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        treeElement.appendChild(sourceTreeElement);
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
22606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
22706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} title
22806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {?Array.<!WebInspector.NetworkRequest.NameValue>} params
22906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {?string} sourceText
23006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!TreeElement} paramsTreeElement
23106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshParams: function(title, params, sourceText, paramsTreeElement)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        paramsTreeElement.removeChildren();
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        paramsTreeElement.listItemElement.removeChildren();
2377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        paramsTreeElement.listItemElement.createTextChild(title);
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var headerCount = document.createElement("span");
240a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        headerCount.classList.add("header-count");
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        headerCount.textContent = WebInspector.UIString(" (%d)", params.length);
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        paramsTreeElement.listItemElement.appendChild(headerCount);
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
24406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        /**
245197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @param {!Event} event
24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.RequestHeadersView}
24706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)         */
24806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        function toggleViewSource(event)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            paramsTreeElement._viewSource = !paramsTreeElement._viewSource;
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._refreshParams(title, params, sourceText, paramsTreeElement);
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        paramsTreeElement.listItemElement.appendChild(this._createViewSourceToggle(paramsTreeElement._viewSource, toggleViewSource.bind(this)));
25506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (paramsTreeElement._viewSource) {
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._populateTreeElementWithSourceText(paramsTreeElement, sourceText);
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var toggleTitle = this._decodeRequestParameters ? WebInspector.UIString("view URL encoded") : WebInspector.UIString("view decoded");
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var toggleButton = this._createToggleButton(toggleTitle);
26306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        toggleButton.addEventListener("click", this._toggleURLDecoding.bind(this), false);
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        paramsTreeElement.listItemElement.appendChild(toggleButton);
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < params.length; ++i) {
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var paramNameValue = document.createDocumentFragment();
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var name = this._formatParameter(params[i].name + ":", "header-name", this._decodeRequestParameters);
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var value = this._formatParameter(params[i].value, "header-value source-code", this._decodeRequestParameters);
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            paramNameValue.appendChild(name);
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            paramNameValue.appendChild(value);
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var parmTreeElement = new TreeElement(paramNameValue, null, false);
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            parmTreeElement.selectable = false;
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            paramsTreeElement.appendChild(parmTreeElement);
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
28053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {*} parsedObject
281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} sourceText
282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
28306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _refreshRequestJSONPayload: function(parsedObject, sourceText)
284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
28506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var treeElement = this._requestPayloadTreeElement;
28606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        treeElement.removeChildren();
287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var listItem = this._requestPayloadTreeElement.listItemElement;
289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        listItem.removeChildren();
2907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        listItem.createTextChild(this._requestPayloadTreeElement.title);
291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
29206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        /**
293197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @param {!Event} event
29409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.RequestHeadersView}
29506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)         */
29606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        function toggleViewSource(event)
29706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        {
29806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            treeElement._viewSource = !treeElement._viewSource;
29906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._refreshRequestJSONPayload(parsedObject, sourceText);
30006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        }
301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
30206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        listItem.appendChild(this._createViewSourceToggle(treeElement._viewSource, toggleViewSource.bind(this)));
30306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (treeElement._viewSource) {
304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._populateTreeElementWithSourceText(this._requestPayloadTreeElement, sourceText);
305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        } else {
306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var object = WebInspector.RemoteObject.fromLocalObject(parsedObject);
307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var section = new WebInspector.ObjectPropertiesSection(object, object.description);
308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            section.expand();
309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            section.editable = false;
310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            listItem.appendChild(section.element);
311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {boolean} viewSource
316197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {function(!Event)} handler
31706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {!Element}
318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _createViewSourceToggle: function(viewSource, handler)
320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var viewSourceToggleTitle = viewSource ? WebInspector.UIString("view parsed") : WebInspector.UIString("view source");
322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var viewSourceToggleButton = this._createToggleButton(viewSourceToggleTitle);
32306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        viewSourceToggleButton.addEventListener("click", handler, false);
324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return viewSourceToggleButton;
325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
32706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
328197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
32906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _toggleURLDecoding: function(event)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._decodeRequestParameters = !this._decodeRequestParameters;
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshQueryString();
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshFormData();
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshRequestHeaders: function()
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
33906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var treeElement = this._requestHeadersTreeElement;
34006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
341f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var headers = this._request.requestHeaders();
342f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        headers = headers.slice();
343f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        headers.sort(function(a, b) { return a.name.toLowerCase().compareTo(b.name.toLowerCase()) });
344f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var headersText = this._request.requestHeadersText();
345f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
346f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (this._showRequestHeadersText && headersText)
34706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._refreshHeadersText(WebInspector.UIString("Request Headers"), headers.length, headersText, treeElement);
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
349323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            this._refreshHeaders(WebInspector.UIString("Request Headers"), headers, treeElement, headersText === undefined);
350f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
35106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (headersText) {
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var toggleButton = this._createHeadersToggleButton(this._showRequestHeadersText);
35306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            toggleButton.addEventListener("click", this._toggleRequestHeadersText.bind(this), false);
35406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            treeElement.listItemElement.appendChild(toggleButton);
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshFormData();
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshResponseHeaders: function()
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
36206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var treeElement = this._responseHeadersTreeElement;
36306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var headers = this._request.sortedResponseHeaders;
36406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var headersText = this._request.responseHeadersText;
36506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._showResponseHeadersText)
36706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._refreshHeadersText(WebInspector.UIString("Response Headers"), headers.length, headersText, treeElement);
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
36906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._refreshHeaders(WebInspector.UIString("Response Headers"), headers, treeElement);
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (headersText) {
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var toggleButton = this._createHeadersToggleButton(this._showResponseHeadersText);
37306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            toggleButton.addEventListener("click", this._toggleResponseHeadersText.bind(this), false);
37406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            treeElement.listItemElement.appendChild(toggleButton);
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshHTTPInformation: function()
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var requestMethodElement = this._requestMethodTreeElement;
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        requestMethodElement.hidden = !this._request.statusCode;
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var statusCodeElement = this._statusCodeTreeElement;
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        statusCodeElement.hidden = !this._request.statusCode;
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._request.statusCode) {
38653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var statusCodeFragment = document.createDocumentFragment();
38753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            statusCodeFragment.createChild("div", "header-name").textContent = WebInspector.UIString("Status Code") + ":";
38853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
38953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var statusCodeImage = statusCodeFragment.createChild("div", "resource-status-image");
39053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            statusCodeImage.title = this._request.statusCode + " " + this._request.statusText;
39153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._request.statusCode < 300 || this._request.statusCode === 304)
393a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                statusCodeImage.classList.add("green-ball");
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else if (this._request.statusCode < 400)
395a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                statusCodeImage.classList.add("orange-ball");
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
397a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                statusCodeImage.classList.add("red-ball");
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            requestMethodElement.title = this._formatHeader(WebInspector.UIString("Request Method"), this._request.requestMethod);
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
401f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)            var statusTextElement = statusCodeFragment.createChild("div", "header-value source-code");
402f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)            var statusText = this._request.statusCode + " " + this._request.statusText;
4039e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            if (this._request.fetchedViaServiceWorker) {
4049e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)                statusText += " " + WebInspector.UIString("(from ServiceWorker)");
4059e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)                statusTextElement.classList.add("status-from-cache");
4069e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            } else if (this._request.cached) {
407f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)                statusText += " " + WebInspector.UIString("(from cache)");
408f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)                statusTextElement.classList.add("status-from-cache");
409f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)            }
410f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)            statusTextElement.textContent = statusText;
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            statusCodeElement.title = statusCodeFragment;
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
41706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} title
41806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!TreeElement} headersTreeElement
41906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {number} headersLength
42006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshHeadersTitle: function(title, headersTreeElement, headersLength)
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        headersTreeElement.listItemElement.removeChildren();
42406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        headersTreeElement.listItemElement.createTextChild(title);
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
42606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var headerCount = WebInspector.UIString(" (%d)", headersLength);
42706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        headersTreeElement.listItemElement.createChild("span", "header-count").textContent = headerCount;
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
43106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} title
43206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest.NameValue>} headers
43306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!TreeElement} headersTreeElement
434f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {boolean=} provisionalHeaders
43506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
436f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    _refreshHeaders: function(title, headers, headersTreeElement, provisionalHeaders)
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        headersTreeElement.removeChildren();
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var length = headers.length;
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshHeadersTitle(title, headersTreeElement, length);
442323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
443f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        if (provisionalHeaders) {
444323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            var cautionText = WebInspector.UIString("Provisional headers are shown");
445323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            var cautionFragment = document.createDocumentFragment();
446323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            cautionFragment.createChild("div", "warning-icon-small");
447323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            cautionFragment.createChild("div", "caution").textContent = cautionText;
448323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            var cautionTreeElement = new TreeElement(cautionFragment);
449323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            cautionTreeElement.selectable = false;
450323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            headersTreeElement.appendChild(cautionTreeElement);
451323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        }
452323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
453f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        headersTreeElement.hidden = !length && !provisionalHeaders;
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < length; ++i) {
455a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            var headerTreeElement = new TreeElement(this._formatHeader(headers[i].name, headers[i].value));
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            headerTreeElement.selectable = false;
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            headersTreeElement.appendChild(headerTreeElement);
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
46106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
46206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} title
46306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {number} count
46406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} headersText
46506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {!TreeElement} headersTreeElement
46606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
46706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _refreshHeadersText: function(title, count, headersText, headersTreeElement)
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._populateTreeElementWithSourceText(headersTreeElement, headersText);
47006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._refreshHeadersTitle(title, headersTreeElement, count);
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    _refreshRemoteAddress: function()
47409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
47509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var remoteAddress = this._request.remoteAddress();
47609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var treeElement = this._remoteAddressTreeElement;
47709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        treeElement.hidden = !remoteAddress;
47809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (remoteAddress)
47909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            treeElement.title = this._formatHeader(WebInspector.UIString("Remote Address"), remoteAddress);
48009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
48109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
48206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
483197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
48406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _toggleRequestHeadersText: function(event)
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._showRequestHeadersText = !this._showRequestHeadersText;
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshRequestHeaders();
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
492197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
49306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _toggleResponseHeadersText: function(event)
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._showResponseHeadersText = !this._showResponseHeadersText;
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshResponseHeaders();
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
50106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {string} title
50206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {!Element}
50306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createToggleButton: function(title)
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var button = document.createElement("span");
507a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        button.classList.add("header-toggle");
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        button.textContent = title;
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return button;
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
51206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
51306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @param {boolean} isHeadersTextShown
51406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {!Element}
51506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createHeadersToggleButton: function(isHeadersTextShown)
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var toggleTitle = isHeadersTextShown ? WebInspector.UIString("view parsed") : WebInspector.UIString("view source");
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._createToggleButton(toggleTitle);
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
522d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
524