15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 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
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object}
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkManager = function()
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.Object.call(this);
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._dispatcher = new WebInspector.NetworkDispatcher(this);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.settings.cacheDisabled.get())
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NetworkAgent.setCacheDisabled(true);
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NetworkAgent.enable();
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.settings.cacheDisabled.addChangeListener(this._cacheDisabledSettingChanged, this);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkManager.EventTypes = {
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RequestStarted: "RequestStarted",
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RequestUpdated: "RequestUpdated",
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RequestFinished: "RequestFinished",
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RequestUpdateDropped: "RequestUpdateDropped"
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkManager._MIMETypes = {
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/html":                   {"document": true},
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/xml":                    {"document": true},
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/plain":                  {"document": true},
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/xhtml+xml":       {"document": true},
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/css":                    {"stylesheet": true},
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/xsl":                    {"stylesheet": true},
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/jpg":                   {"image": true},
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/jpeg":                  {"image": true},
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/pjpeg":                 {"image": true},
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/png":                   {"image": true},
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/gif":                   {"image": true},
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/bmp":                   {"image": true},
6753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    "image/svg+xml":               {"image": true, "font": true, "document": true},
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/vnd.microsoft.icon":    {"image": true},
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/webp":                  {"image": true},
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/x-icon":                {"image": true},
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "image/x-xbitmap":             {"image": true},
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "font/ttf":                    {"font": true},
73591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    "font/otf":                    {"font": true},
74591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    "font/woff":                   {"font": true},
75591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    "font/woff2":                  {"font": true},
76591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    "font/truetype":               {"font": true},
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "font/opentype":               {"font": true},
78df95704c49daea886ddad70775bda23618d6274dBen Murdoch    "application/octet-stream":    {"font": true, "image": true},
79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    "application/font-woff":       {"font": true},
80591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    "application/x-font-woff":     {"font": true},
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/x-font-type1":    {"font": true},
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/x-font-ttf":      {"font": true},
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/x-truetype-font": {"font": true},
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/javascript":             {"script": true},
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/ecmascript":             {"script": true},
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/javascript":      {"script": true},
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/ecmascript":      {"script": true},
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/x-javascript":    {"script": true},
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "application/json":            {"script": true},
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/javascript1.1":          {"script": true},
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/javascript1.2":          {"script": true},
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/javascript1.3":          {"script": true},
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/jscript":                {"script": true},
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "text/livescript":             {"script": true},
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkManager.prototype = {
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
100a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.NetworkRequest}
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inflightRequestForURL: function(url)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._dispatcher._inflightRequestsByURL[url];
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
108a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _cacheDisabledSettingChanged: function(event)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var enabled = /** @type {boolean} */ (event.data);
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NetworkAgent.setCacheDisabled(enabled);
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.Object.prototype
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {NetworkAgent.Dispatcher}
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkDispatcher = function(manager)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._manager = manager;
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._inflightRequestsById = {};
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._inflightRequestsByURL = {};
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorBackend.registerNetworkDispatcher(this);
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.NetworkDispatcher.prototype = {
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
133a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Headers} headersMap
134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {!Array.<!WebInspector.NetworkRequest.NameValue>}
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _headersMapToHeadersArray: function(headersMap)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = [];
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var name in headersMap) {
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var values = headersMap[name].split("\n");
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < values.length; ++i)
142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                result.push({name: name, value: values[i]});
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return result;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
149a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Request} request
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateNetworkRequestWithRequest: function(networkRequest, request)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.requestMethod = request.method;
154f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.requestFormData = request.postData;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
159a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Response=} response
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateNetworkRequestWithResponse: function(networkRequest, response)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!response)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (response.url && networkRequest.url !== response.url)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest.url = response.url;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.mimeType = response.mimeType;
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.statusCode = response.status;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.statusText = response.statusText;
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers);
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (response.headersText)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest.responseHeadersText = response.headersText;
175f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (response.requestHeaders) {
176f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders));
177f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            networkRequest.setRequestHeadersText(response.requestHeadersText || "");
178f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        }
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.connectionReused = response.connectionReused;
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.connectionId = response.connectionId;
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (response.fromDiskCache)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest.cached = true;
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest.timing = response.timing;
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._mimeTypeIsConsistentWithType(networkRequest)) {
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.console.addMessage(WebInspector.ConsoleMessage.create(WebInspector.ConsoleMessage.MessageSource.Network,
190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                WebInspector.ConsoleMessage.MessageLevel.Log,
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector.UIString("Resource interpreted as %s but transferred with MIME type %s: \"%s\".", networkRequest.type.title(), networkRequest.mimeType, networkRequest.url),
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector.ConsoleMessage.MessageType.Log,
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                "",
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                0,
195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch                0,
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                1,
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                [],
198a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                undefined,
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                networkRequest.requestId));
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
204a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _mimeTypeIsConsistentWithType: function(networkRequest)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // If status is an error, content is likely to be of an inconsistent type,
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // as it's going to be an error message. We do not want to emit a warning
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // for this, though, as this will already be reported as resource loading failure.
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Also, if a URL like http://localhost/wiki/load.php?debug=true&lang=en produces text/css and gets reloaded,
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // it is 304 Not Modified and its guessed mime-type is text/php, which is wrong.
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Don't check for mime-types in 304-resources.
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (networkRequest.hasErrorStatusCode() || networkRequest.statusCode === 304 || networkRequest.statusCode === 204)
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (typeof networkRequest.type === "undefined"
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            || networkRequest.type === WebInspector.resourceTypes.Other
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            || networkRequest.type === WebInspector.resourceTypes.XHR
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            || networkRequest.type === WebInspector.resourceTypes.WebSocket)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest.mimeType)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true; // Might be not known for cached resources with null responses.
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (networkRequest.mimeType in WebInspector.NetworkManager._MIMETypes)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return networkRequest.type.name() in WebInspector.NetworkManager._MIMETypes[networkRequest.mimeType];
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
234a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Response} response
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _isNull: function(response)
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!response)
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !response.status && !response.mimeType && (!response.headers || !Object.keys(response.headers).length);
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
245a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
246a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!PageAgent.FrameId} frameId
247a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.LoaderId} loaderId
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} documentURL
249a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Request} request
250a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
251a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Initiator} initiator
252a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Response=} redirectResponse
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestWillBeSent: function(requestId, frameId, loaderId, documentURL, request, time, initiator, redirectResponse)
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (networkRequest) {
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // FIXME: move this check to the backend.
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!redirectResponse)
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this.responseReceived(requestId, frameId, loaderId, time, PageAgent.ResourceType.Other, redirectResponse);
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest = this._appendRedirect(requestId, time, request.url);
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest = this._createNetworkRequest(requestId, frameId, loaderId, request.url, documentURL, initiator);
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.hasNetworkData = true;
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequestWithRequest(networkRequest, request);
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.startTime = time;
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._startNetworkRequest(networkRequest);
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
273a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestServedFromCache: function(requestId)
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.cached = true;
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
285a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
286a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!PageAgent.FrameId} frameId
287a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.LoaderId} loaderId
288a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
289a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!PageAgent.ResourceType} resourceType
290a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Response} response
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    responseReceived: function(requestId, frameId, loaderId, time, resourceType, response)
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // FIXME: move this check to the backend.
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._isNull(response))
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest) {
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // We missed the requestWillBeSent.
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var eventData = {};
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            eventData.url = response.url;
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            eventData.frameId = frameId;
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            eventData.loaderId = loaderId;
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            eventData.resourceType = resourceType;
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            eventData.mimeType = response.mimeType;
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._manager.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.RequestUpdateDropped, eventData);
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseReceivedTime = time;
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.type = WebInspector.resourceTypes[resourceType];
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequestWithResponse(networkRequest, response);
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
320a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
321a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} dataLength
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} encodedDataLength
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dataReceived: function(requestId, time, dataLength, encodedDataLength)
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.resourceSize += dataLength;
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (encodedDataLength != -1)
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            networkRequest.increaseTransferSize(encodedDataLength);
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.endTime = time;
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
340a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
341a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} finishTime
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    loadingFinished: function(requestId, finishTime)
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._finishNetworkRequest(networkRequest, finishTime);
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
352a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
353a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} localizedDescription
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean=} canceled
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    loadingFailed: function(requestId, time, localizedDescription, canceled)
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.failed = true;
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.canceled = canceled;
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.localizedFailDescription = localizedDescription;
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._finishNetworkRequest(networkRequest, time);
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
370a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} requestURL
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketCreated: function(requestId, requestURL)
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = new WebInspector.NetworkRequest(requestId, requestURL, "", "", "");
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.type = WebInspector.resourceTypes.WebSocket;
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._startNetworkRequest(networkRequest);
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
381a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
382a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
383a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.WebSocketRequest} request
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketWillSendHandshakeRequest: function(requestId, time, request)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.requestMethod = "GET";
392f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.startTime = time;
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
399a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
400a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
401a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.WebSocketResponse} response
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketHandshakeResponseReceived: function(requestId, time, response)
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.statusCode = response.status;
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.statusText = response.statusText;
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers);
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseReceivedTime = time;
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
418a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
419a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
420a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.WebSocketFrame} response
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketFrameReceived: function(requestId, time, response)
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.addFrame(response, time);
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseReceivedTime = time;
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
435a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
436a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
437a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.WebSocketFrame} response
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketFrameSent: function(requestId, time, response)
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.addFrame(response, time, true);
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseReceivedTime = time;
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
452a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
453a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} errorMessage
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketFrameError: function(requestId, time, errorMessage)
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.addFrameError(errorMessage, time);
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.responseReceivedTime = time;
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateNetworkRequest(networkRequest);
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
469a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
470a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    webSocketClosed: function(requestId, time)
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = this._inflightRequestsById[requestId];
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!networkRequest)
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._finishNetworkRequest(networkRequest, time);
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
481a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
482a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} time
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} redirectURL
484a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.NetworkRequest}
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _appendRedirect: function(requestId, time, redirectURL)
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var originalNetworkRequest = this._inflightRequestsById[requestId];
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var previousRedirects = originalNetworkRequest.redirects || [];
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        originalNetworkRequest.requestId = "redirected:" + requestId + "." + previousRedirects.length;
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete originalNetworkRequest.redirects;
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (previousRedirects.length > 0)
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            originalNetworkRequest.redirectSource = previousRedirects[previousRedirects.length - 1];
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._finishNetworkRequest(originalNetworkRequest, time);
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var newNetworkRequest = this._createNetworkRequest(requestId, originalNetworkRequest.frameId, originalNetworkRequest.loaderId,
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)             redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.initiator);
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newNetworkRequest.redirects = previousRedirects.concat(originalNetworkRequest);
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return newNetworkRequest;
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
502a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _startNetworkRequest: function(networkRequest)
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._inflightRequestsById[networkRequest.requestId] = networkRequest;
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._inflightRequestsByURL[networkRequest.url] = networkRequest;
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.RequestStarted, networkRequest);
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
512a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateNetworkRequest: function(networkRequest)
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.RequestUpdated, networkRequest);
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
520a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
521a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Timestamp} finishTime
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _finishNetworkRequest: function(networkRequest, finishTime)
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.endTime = finishTime;
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.finished = true;
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.RequestFinished, networkRequest);
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._inflightRequestsById[networkRequest.requestId];
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._inflightRequestsByURL[networkRequest.url];
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} eventType
534a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.NetworkRequest} networkRequest
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _dispatchEventToListeners: function(eventType, networkRequest)
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._manager.dispatchEventToListeners(eventType, networkRequest);
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
542a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.RequestId} requestId
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} frameId
544a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.LoaderId} loaderId
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} documentURL
547a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!NetworkAgent.Initiator} initiator
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createNetworkRequest: function(requestId, frameId, loaderId, url, documentURL, initiator)
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var networkRequest = new WebInspector.NetworkRequest(requestId, url, documentURL, frameId, loaderId);
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        networkRequest.initiator = initiator;
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return networkRequest;
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
558e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @type {!WebInspector.NetworkManager}
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
560e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)WebInspector.networkManager;
561