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