diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js')
-rw-r--r-- | chromium/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js b/chromium/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js new file mode 100644 index 00000000000..c7a2eb82886 --- /dev/null +++ b/chromium/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @constructor + * @extends {WebInspector.TargetAware} + * @param {!WebInspector.Target} target + */ +WebInspector.NetworkLog = function(target) +{ + WebInspector.TargetAware.call(this, target); + + this._requests = []; + this._requestForId = {}; + target.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this); + target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._onMainFrameNavigated, this); + target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._onLoad, this); + target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.DOMContentLoaded, this._onDOMContentLoaded, this); +} + +WebInspector.NetworkLog.prototype = { + /** + * @return {!Array.<!WebInspector.NetworkRequest>} + */ + get requests() + { + return this._requests; + }, + + /** + * @param {string} url + * @return {?WebInspector.NetworkRequest} + */ + requestForURL: function(url) + { + for (var i = 0; i < this._requests.length; ++i) { + if (this._requests[i].url === url) + return this._requests[i]; + } + return null; + }, + + /** + * @param {!WebInspector.NetworkRequest} request + * @return {!WebInspector.PageLoad} + */ + pageLoadForRequest: function(request) + { + return request.__page; + }, + + /** + * @param {!WebInspector.Event} event + */ + _onMainFrameNavigated: function(event) + { + var mainFrame = /** type {WebInspector.ResourceTreeFrame} */ event.data; + // Preserve requests from the new session. + this._currentPageLoad = null; + var oldRequests = this._requests.splice(0, this._requests.length); + this._requestForId = {}; + for (var i = 0; i < oldRequests.length; ++i) { + var request = oldRequests[i]; + if (request.loaderId === mainFrame.loaderId) { + if (!this._currentPageLoad) + this._currentPageLoad = new WebInspector.PageLoad(request); + this._requests.push(request); + this._requestForId[request.requestId] = request; + request.__page = this._currentPageLoad; + } + } + }, + + /** + * @param {!WebInspector.Event} event + */ + _onRequestStarted: function(event) + { + var request = /** @type {!WebInspector.NetworkRequest} */ (event.data); + this._requests.push(request); + this._requestForId[request.requestId] = request; + request.__page = this._currentPageLoad; + }, + + /** + * @param {!WebInspector.Event} event + */ + _onDOMContentLoaded: function(event) + { + if (this._currentPageLoad) + this._currentPageLoad.contentLoadTime = event.data; + }, + + /** + * @param {!WebInspector.Event} event + */ + _onLoad: function(event) + { + if (this._currentPageLoad) + this._currentPageLoad.loadTime = event.data; + }, + + /** + * @param {!NetworkAgent.RequestId} requestId + * @return {?WebInspector.NetworkRequest} + */ + requestForId: function(requestId) + { + return this._requestForId[requestId]; + }, + + __proto__: WebInspector.TargetAware.prototype +} + +/** + * @type {!WebInspector.NetworkLog} + */ +WebInspector.networkLog; + +/** + * @constructor + * @param {!WebInspector.NetworkRequest} mainRequest + */ +WebInspector.PageLoad = function(mainRequest) +{ + this.id = ++WebInspector.PageLoad._lastIdentifier; + this.url = mainRequest.url; + this.startTime = mainRequest.startTime; +} + +WebInspector.PageLoad._lastIdentifier = 0; |