15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 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
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.ContentProvider}
35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!NetworkAgent.RequestId} requestId
36a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.Target} target
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} url
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} documentURL
39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!PageAgent.FrameId} frameId
40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!NetworkAgent.LoaderId} loaderId
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?NetworkAgent.Initiator} initiator
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.NetworkRequest = function(target, requestId, url, documentURL, frameId, loaderId, initiator)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, target);
46a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._requestId = requestId;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.url = url;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._documentURL = documentURL;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._frameId = frameId;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._loaderId = loaderId;
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /** @type {?NetworkAgent.Initiator} */
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._initiator = initiator;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._startTime = -1;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._endTime = -1;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.statusCode = 0;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.statusText = "";
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.requestMethod = "";
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.requestTime = 0;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._type = WebInspector.resourceTypes.Other;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._contentEncoded = false;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._pendingContentCallbacks = [];
65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /** @type {!Array.<!WebInspector.NetworkRequest.WebSocketFrame>} */
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._frames = [];
67591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
68591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    this._responseHeaderValues = {};
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._remoteAddress = "";
717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /** @type {string} */
737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this.connectionId = "0";
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkRequest.Events = {
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FinishedLoading: "FinishedLoading",
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TimingChanged: "TimingChanged",
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RemoteAddressChanged: "RemoteAddressChanged",
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RequestHeadersChanged: "RequestHeadersChanged",
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResponseHeadersChanged: "ResponseHeadersChanged",
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/** @enum {string} */
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NetworkRequest.InitiatorType = {
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Other: "other",
8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Parser: "parser",
8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Redirect: "redirect",
8953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    Script: "script"
90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
92a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/** @typedef {!{name: string, value: string}} */
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.NetworkRequest.NameValue;
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
95c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** @enum {string} */
96c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.NetworkRequest.WebSocketFrameType = {
97c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Send: "send",
98c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Receive: "receive",
99c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Error: "error"
100c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
101c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
102c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** @typedef {!{type: WebInspector.NetworkRequest.WebSocketFrameType, time: number, text: string, opCode: number, mask: boolean}} */
103c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.NetworkRequest.WebSocketFrame;
104c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkRequest.prototype = {
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
107197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!WebInspector.NetworkRequest} other
108197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {number}
109197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
110197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    indentityCompare: function(other) {
111197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (this._requestId > other._requestId)
112197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return 1;
113197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (this._requestId < other._requestId)
114197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return -1;
115197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return 0;
116197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
117197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
118197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
119a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!NetworkAgent.RequestId}
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get requestId()
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._requestId;
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set requestId(requestId)
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestId = requestId;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get url()
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._url;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set url(x)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._url === x)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._url = x;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parsedURL = new WebInspector.ParsedURL(x);
14651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        delete this._queryString;
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._parsedQueryParameters;
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._name;
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._path;
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get documentURL()
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._documentURL;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get parsedURL()
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedURL;
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!PageAgent.FrameId}
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get frameId()
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._frameId;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
174a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!NetworkAgent.LoaderId}
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get loaderId()
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._loaderId;
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} ip
18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} port
18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    setRemoteAddress: function(ip, port)
18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
187d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        if (ip.indexOf(":") !== -1)
188d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            ip = "[" + ip + "]";
18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._remoteAddress = ip + ":" + port;
19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this);
19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    remoteAddress: function()
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._remoteAddress;
19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get startTime()
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._startTime || -1;
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set startTime(x)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._startTime = x;
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get responseReceivedTime()
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._responseReceivedTime || -1;
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set responseReceivedTime(x)
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._responseReceivedTime = x;
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get endTime()
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._endTime || -1;
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set endTime(x)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.timing && this.timing.requestTime) {
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Check against accurate responseReceivedTime.
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._endTime = Math.max(x, this.responseReceivedTime);
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Prefer endTime since it might be from the network stack.
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._endTime = x;
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._responseReceivedTime > x)
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._responseReceivedTime = x;
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.TimingChanged, this);
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get duration()
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._endTime === -1 || this._startTime === -1)
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return -1;
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._endTime - this._startTime;
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get latency()
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._responseReceivedTime === -1 || this._startTime === -1)
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return -1;
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._responseReceivedTime - this._startTime;
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get resourceSize()
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._resourceSize || 0;
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set resourceSize(x)
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._resourceSize = x;
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get transferSize()
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
28709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._transferSize || 0;
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} x
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    increaseTransferSize: function(x)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._transferSize = (this._transferSize || 0) + x;
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
29909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} x
30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
30109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    setTransferSize: function(x)
30209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
30309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._transferSize = x;
30409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
30509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
30609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get finished()
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._finished;
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set finished(x)
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._finished === x)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._finished = x;
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (x) {
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.FinishedLoading, this);
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._pendingContentCallbacks.length)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._innerRequestContent();
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get failed()
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._failed;
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set failed(x)
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._failed = x;
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get canceled()
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._canceled;
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set canceled(x)
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._canceled = x;
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get cached()
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3599bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)        return !!this._cached && !this._transferSize;
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set cached(x)
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._cached = x;
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (x)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._timing;
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3709e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @return {boolean}
3719e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
3729e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    get fetchedViaServiceWorker()
3739e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
3749e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        return this._fetchedViaServiceWorker;
3759e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
3769e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    set fetchedViaServiceWorker(x)
3789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
3799e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this._fetchedViaServiceWorker = x;
3809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
3819e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3829e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
383a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!NetworkAgent.ResourceTiming|undefined}
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get timing()
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._timing;
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set timing(x)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (x && !this._cached) {
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Take startTime and responseReceivedTime from timing data for better accuracy.
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis.
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._startTime = x.requestTime;
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._responseReceivedTime = x.requestTime + x.receiveHeadersEnd / 1000.0;
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._timing = x;
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.TimingChanged, this);
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get mimeType()
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._mimeType;
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set mimeType(x)
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._mimeType = x;
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get displayName()
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedURL.displayName;
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
42409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
42509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
42609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name: function()
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._name)
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._name;
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parseNameAndPathFromURL();
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._name;
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
43609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
43709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    path: function()
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._path)
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._path;
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parseNameAndPathFromURL();
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._path;
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _parseNameAndPathFromURL: function()
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._parsedURL.isDataURL()) {
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._name = this._parsedURL.dataURLDisplayName();
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._path = "";
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else if (this._parsedURL.isAboutBlank()) {
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._name = this._parsedURL.url;
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._path = "";
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._path = this._parsedURL.host + this._parsedURL.folderPathComponents;
456a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            this._path = this._path.trimURL(this.target().resourceTreeModel.inspectedPageDomain());
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._parsedURL.lastPathComponent || this._parsedURL.queryParams)
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._name = this._parsedURL.lastPathComponent + (this._parsedURL.queryParams ? "?" + this._parsedURL.queryParams : "");
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else if (this._parsedURL.folderPathComponents) {
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._name = this._parsedURL.folderPathComponents.substring(this._parsedURL.folderPathComponents.lastIndexOf("/") + 1) + "/";
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._path = this._path.substring(0, this._path.lastIndexOf("/"));
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            } else {
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._name = this._parsedURL.host;
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._path = "";
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get folder()
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var path = this._parsedURL.path;
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var indexOfQuery = path.indexOf("?");
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (indexOfQuery !== -1)
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            path = path.substring(0, indexOfQuery);
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var lastSlashIndex = path.lastIndexOf("/");
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return lastSlashIndex !== -1 ? path.substring(0, lastSlashIndex) : "";
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
483a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.ResourceType}
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get type()
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._type;
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set type(x)
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._type = x;
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
496926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {string}
497926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
498926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    get domain()
499926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
500926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._parsedURL.host;
501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
502926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
503926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
504c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     * @return {string}
505c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
506c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    get scheme()
507c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
508c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        return this._parsedURL.scheme;
509c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
510c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
511c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
512926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {?WebInspector.NetworkRequest}
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get redirectSource()
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.redirects && this.redirects.length > 0)
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this.redirects[this.redirects.length - 1];
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._redirectSource;
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set redirectSource(x)
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._redirectSource = x;
52453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        delete this._initiatorInfo;
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
528926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.NameValue>}
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
530f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    requestHeaders: function()
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._requestHeaders || [];
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
536f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest.NameValue>} headers
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
538f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    setRequestHeaders: function(headers)
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
540f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        this._requestHeaders = headers;
541f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        delete this._requestCookies;
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RequestHeadersChanged);
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
547f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @return {string|undefined}
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
549f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    requestHeadersText: function()
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
551f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return this._requestHeadersText;
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
555f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {string} text
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
557f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    setRequestHeadersText: function(text)
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
559f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        this._requestHeadersText = text;
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
561f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RequestHeadersChanged);
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} headerName
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string|undefined}
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestHeaderValue: function(headerName)
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
570f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return this._headerValue(this.requestHeaders(), headerName);
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
574a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.Cookie>}
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get requestCookies()
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._requestCookies)
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._requestCookies = WebInspector.CookieParser.parseCookie(this.requestHeaderValue("Cookie"));
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._requestCookies;
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string|undefined}
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get requestFormData()
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._requestFormData;
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set requestFormData(x)
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestFormData = x;
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._parsedFormParameters;
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
598197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {string}
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
600f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    requestHttpVersion: function()
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
602f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var headersText = this.requestHeadersText();
603197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!headersText)
604197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return this.requestHeaderValue("version") || this.requestHeaderValue(":version") || "unknown";
605f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var firstLine = headersText.split(/\r\n/)[0];
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var match = firstLine.match(/(HTTP\/\d+\.\d+)$/);
607197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return match ? match[1] : "HTTP/0.9";
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.NameValue>}
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get responseHeaders()
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._responseHeaders || [];
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set responseHeaders(x)
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._responseHeaders = x;
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._sortedResponseHeaders;
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._responseCookies;
623591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._responseHeaderValues = {};
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.ResponseHeadersChanged);
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get responseHeadersText()
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._responseHeadersText;
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set responseHeadersText(x)
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._responseHeadersText = x;
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.ResponseHeadersChanged);
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
644926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.NameValue>}
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get sortedResponseHeaders()
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._sortedResponseHeaders !== undefined)
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._sortedResponseHeaders;
650926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._sortedResponseHeaders = this.responseHeaders.slice();
652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._sortedResponseHeaders.sort(function(a, b) { return a.name.toLowerCase().compareTo(b.name.toLowerCase()); });
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._sortedResponseHeaders;
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} headerName
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string|undefined}
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    responseHeaderValue: function(headerName)
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
662591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var value = this._responseHeaderValues[headerName];
663591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (value === undefined) {
664591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            value = this._headerValue(this.responseHeaders, headerName);
665591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            this._responseHeaderValues[headerName] = (value !== undefined) ? value : null;
666591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
667591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return (value !== null) ? value : undefined;
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
671a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.Cookie>}
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get responseCookies()
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._responseCookies)
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._responseCookies = WebInspector.CookieParser.parseSetCookie(this.responseHeaderValue("Set-Cookie"));
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._responseCookies;
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string}
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    queryString: function()
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
68551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        if (this._queryString !== undefined)
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._queryString;
68751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
68851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        var queryString = null;
68951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        var url = this.url;
69051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        var questionMarkPosition = url.indexOf("?");
69151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        if (questionMarkPosition !== -1) {
69251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)            queryString = url.substring(questionMarkPosition + 1);
69351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)            var hashSignPosition = queryString.indexOf("#");
69451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)            if (hashSignPosition !== -1)
69551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)                queryString = queryString.substring(0, hashSignPosition);
69651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        }
69751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        this._queryString = queryString;
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._queryString;
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
702926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {?Array.<!WebInspector.NetworkRequest.NameValue>}
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get queryParameters()
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._parsedQueryParameters)
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._parsedQueryParameters;
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var queryString = this.queryString();
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!queryString)
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parsedQueryParameters = this._parseParameters(queryString);
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedQueryParameters;
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
716926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {?Array.<!WebInspector.NetworkRequest.NameValue>}
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get formParameters()
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._parsedFormParameters)
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this._parsedFormParameters;
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this.requestFormData)
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var requestContentType = this.requestContentType();
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!requestContentType || !requestContentType.match(/^application\/x-www-form-urlencoded\s*(;.*)?$/i))
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parsedFormParameters = this._parseParameters(this.requestFormData);
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedFormParameters;
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
732197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {string}
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
734197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    responseHttpVersion: function()
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
736d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var headersText = this._responseHeadersText;
737197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!headersText)
738197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return this.responseHeaderValue("version") || this.responseHeaderValue(":version") || "unknown";
739197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var firstLine = headersText.split(/\r\n/)[0];
740197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var match = firstLine.match(/^(HTTP\/\d+\.\d+)/);
741197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return match ? match[1] : "HTTP/0.9";
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} queryString
746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.NameValue>}
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _parseParameters: function(queryString)
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function parseNameValue(pair)
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
752197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            var position = pair.indexOf("=");
753197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            if (position === -1)
754197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                return {name: pair, value: ""};
755197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            else
756197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                return {name: pair.substring(0, position), value: pair.substring(position + 1)};
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return queryString.split("&").map(parseNameValue);
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
762926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest.NameValue>} headers
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} headerName
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string|undefined}
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _headerValue: function(headers, headerName)
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        headerName = headerName.toLowerCase();
769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var values = [];
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < headers.length; ++i) {
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (headers[i].name.toLowerCase() === headerName)
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                values.push(headers[i].value);
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
775926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!values.length)
776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return undefined;
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Set-Cookie values should be separated by '\n', not comma, otherwise cookies could not be parsed.
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (headerName === "set-cookie")
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return values.join("\n");
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return values.join(", ");
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string|undefined}
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get content()
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._content;
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
792d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {?Protocol.Error|undefined}
793d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
794d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    contentError: function()
795d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
796d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return this._contentError;
797d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
798d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
799d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get contentEncoded()
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._contentEncoded;
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    contentURL: function()
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._url;
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
816a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.ResourceType}
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    contentType: function()
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._type;
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {function(?string)} callback
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestContent: function(callback)
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // We do not support content retrieval for WebSockets at the moment.
8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Since WebSockets are potentially long-living, fail requests immediately
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // to prevent caller blocking until resource is marked as finished.
8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.type === WebInspector.resourceTypes.WebSocket) {
8321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            callback(null);
8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (typeof this._content !== "undefined") {
8361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            callback(this.content || null);
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingContentCallbacks.push(callback);
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.finished)
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._innerRequestContent();
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} caseSensitive
8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} isRegex
848a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Array.<!WebInspector.ContentProvider.SearchMatch>)} callback
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    searchInContent: function(query, caseSensitive, isRegex, callback)
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        callback([]);
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isHttpFamily: function()
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this.url.match(/^https?:/i);
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string|undefined}
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestContentType: function()
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.requestHeaderValue("Content-Type");
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hasErrorStatusCode: function()
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.statusCode >= 400;
8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
880a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Element} image
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    populateImageSource: function(image)
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.NetworkRequest}
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?string} content
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
8881e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function onResourceContent(content)
8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var imageSrc = this.asDataURL();
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (imageSrc === null)
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                imageSrc = this.url;
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            image.src = imageSrc;
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.requestContent(onResourceContent.bind(this));
8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string}
9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    asDataURL: function()
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
904e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return WebInspector.Resource.contentAsDataURL(this._content, this.mimeType, this._contentEncoded);
9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _innerRequestContent: function()
9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._contentRequested)
9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._contentRequested = true;
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string} content
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean} contentEncoded
91709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.NetworkRequest}
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function onResourceContent(error, content, contentEncoded)
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._content = error ? null : content;
922d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            this._contentError = error;
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._contentEncoded = contentEncoded;
9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var callbacks = this._pendingContentCallbacks.slice();
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < callbacks.length; ++i)
9261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)                callbacks[i](this._content);
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingContentCallbacks.length = 0;
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._contentRequested;
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NetworkAgent.getResponseBody(this._requestId, onResourceContent.bind(this));
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
9347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {?NetworkAgent.Initiator}
9357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
9367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    initiator: function()
9377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
9387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return this._initiator;
9397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
9407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
9417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
942d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     * @return {!{type: !WebInspector.NetworkRequest.InitiatorType, url: string, lineNumber: number, columnNumber: number}}
94353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
94453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    initiatorInfo: function()
94553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
94653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._initiatorInfo)
94753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return this._initiatorInfo;
94853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
94953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var type = WebInspector.NetworkRequest.InitiatorType.Other;
95053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var url = "";
95153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var lineNumber = -Infinity;
95253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var columnNumber = -Infinity;
9537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var initiator = this._initiator;
95453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
95553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this.redirectSource) {
95653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            type = WebInspector.NetworkRequest.InitiatorType.Redirect;
95753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            url = this.redirectSource.url;
9587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        } else if (initiator) {
9597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            if (initiator.type === NetworkAgent.InitiatorType.Parser) {
96053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                type = WebInspector.NetworkRequest.InitiatorType.Parser;
9617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci                url = initiator.url ? initiator.url : url;
9627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci                lineNumber = initiator.lineNumber ? initiator.lineNumber : lineNumber;
9637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            } else if (initiator.type === NetworkAgent.InitiatorType.Script) {
9647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci                var topFrame = initiator.stackTrace[0];
96553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                if (topFrame.url) {
96653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                    type = WebInspector.NetworkRequest.InitiatorType.Script;
96753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                    url = topFrame.url;
96853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                    lineNumber = topFrame.lineNumber;
96953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                    columnNumber = topFrame.columnNumber;
97053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                }
97153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            }
97253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
97353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
974d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this._initiatorInfo = {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumber};
97553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return this._initiatorInfo;
97653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
97753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
97853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
979c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.WebSocketFrame>}
9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    frames: function()
9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._frames;
9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} errorMessage
9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} time
9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addFrameError: function(errorMessage, time)
9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
992c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._frames.push({ type: WebInspector.NetworkRequest.WebSocketFrameType.Error, text: errorMessage, time: time, opCode: -1, mask: false });
9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {!NetworkAgent.WebSocketFrame} response
9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} time
9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} sent
9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addFrame: function(response, time, sent)
10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1002c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var type = sent ? WebInspector.NetworkRequest.WebSocketFrameType.Send : WebInspector.NetworkRequest.WebSocketFrameType.Receive;
1003c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._frames.push({ type: type, text: response.payloadData, time: time, opCode: response.opcode, mask: response.mask });
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1006f542a0e9557608d421c9d165487573efa35a5f91Ben Murdoch    replayXHR: function()
1007f542a0e9557608d421c9d165487573efa35a5f91Ben Murdoch    {
1008f542a0e9557608d421c9d165487573efa35a5f91Ben Murdoch        this.target().networkAgent().replayXHR(this.requestId);
1009f542a0e9557608d421c9d165487573efa35a5f91Ben Murdoch    },
1010f542a0e9557608d421c9d165487573efa35a5f91Ben Murdoch
1011197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1013