summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/inspector/front-end/NetworkManager.js
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/front-end/NetworkManager.js')
-rw-r--r--Source/WebCore/inspector/front-end/NetworkManager.js234
1 files changed, 149 insertions, 85 deletions
diff --git a/Source/WebCore/inspector/front-end/NetworkManager.js b/Source/WebCore/inspector/front-end/NetworkManager.js
index ed4309e..da043fe 100644
--- a/Source/WebCore/inspector/front-end/NetworkManager.js
+++ b/Source/WebCore/inspector/front-end/NetworkManager.js
@@ -31,86 +31,114 @@
WebInspector.NetworkManager = function(resourceTreeModel)
{
WebInspector.Object.call(this);
-
- this._inflightResources = {};
this._resourceTreeModel = resourceTreeModel;
- this._lastIdentifierForCachedResource = 0;
- InspectorBackend.registerDomainDispatcher("Network", this);
+ this._dispatcher = new WebInspector.NetworkDispatcher(resourceTreeModel, this);
+ InspectorBackend.cachedResources(this._processCachedResources.bind(this));
}
-WebInspector.NetworkManager.requestContent = function(resource, base64Encode, callback)
-{
- InspectorBackend.resourceContent(resource.loader.frameId, resource.url, base64Encode, callback);
-}
-
-WebInspector.NetworkManager.updateResourceWithRequest = function(resource, request)
-{
- resource.requestMethod = request.httpMethod;
- resource.requestHeaders = request.httpHeaderFields;
- resource.requestFormData = request.requestFormData;
+WebInspector.NetworkManager.EventTypes = {
+ ResourceStarted: "ResourceStarted",
+ ResourceUpdated: "ResourceUpdated",
+ ResourceFinished: "ResourceFinished",
+ MainResourceCommitLoad: "MainResourceCommitLoad"
}
-WebInspector.NetworkManager.updateResourceWithResponse = function(resource, response)
-{
- if (resource.isNull)
- return;
+WebInspector.NetworkManager.prototype = {
+ reset: function()
+ {
+ WebInspector.panels.network.clear();
+ this._resourceTreeModel.reset();
+ InspectorBackend.cachedResources(this._processCachedResources.bind(this));
+ },
- resource.mimeType = response.mimeType;
- resource.expectedContentLength = response.expectedContentLength;
- resource.textEncodingName = response.textEncodingName;
- resource.suggestedFilename = response.suggestedFilename;
- resource.statusCode = response.httpStatusCode;
- resource.statusText = response.httpStatusText;
+ requestContent: function(resource, base64Encode, callback)
+ {
+ function callbackWrapper(success, content)
+ {
+ callback(success ? content : null);
+ }
+ InspectorBackend.resourceContent(resource.loader.frameId, resource.url, base64Encode, callbackWrapper);
+ },
- resource.responseHeaders = response.httpHeaderFields;
- resource.connectionReused = response.connectionReused;
- resource.connectionID = response.connectionID;
+ _processCachedResources: function(mainFramePayload)
+ {
+ var mainResource = this._dispatcher._addFramesRecursively(mainFramePayload);
+ WebInspector.mainResource = mainResource;
+ mainResource.isMainResource = true;
+ },
- if (response.wasCached)
- resource.cached = true;
- else
- resource.timing = response.timing;
-
- if (response.loadInfo) {
- if (response.loadInfo.httpStatusCode)
- resource.statusCode = response.loadInfo.httpStatusCode;
- if (response.loadInfo.httpStatusText)
- resource.statusText = response.loadInfo.httpStatusText;
- resource.requestHeaders = response.loadInfo.requestHeaders;
- resource.responseHeaders = response.loadInfo.responseHeaders;
+ inflightResourceForURL: function(url)
+ {
+ return this._dispatcher._inflightResourcesByURL[url];
}
}
-WebInspector.NetworkManager.updateResourceWithCachedResource = function(resource, cachedResource)
+WebInspector.NetworkManager.prototype.__proto__ = WebInspector.Object.prototype;
+
+WebInspector.NetworkDispatcher = function(resourceTreeModel, manager)
{
- resource.type = WebInspector.Resource.Type[cachedResource.type];
- resource.resourceSize = cachedResource.encodedSize;
- WebInspector.NetworkManager.updateResourceWithResponse(resource, cachedResource.response);
+ this._manager = manager;
+ this._inflightResourcesById = {};
+ this._inflightResourcesByURL = {};
+ this._resourceTreeModel = resourceTreeModel;
+ this._lastIdentifierForCachedResource = 0;
+ InspectorBackend.registerDomainDispatcher("Network", this);
}
-WebInspector.NetworkManager.EventTypes = {
- ResourceStarted: "ResourceStarted",
- ResourceUpdated: "ResourceUpdated",
- ResourceFinished: "ResourceFinished",
- MainResourceCommitLoad: "MainResourceCommitLoad"
-}
+WebInspector.NetworkDispatcher.prototype = {
+ _updateResourceWithRequest: function(resource, request)
+ {
+ resource.requestMethod = request.httpMethod;
+ resource.requestHeaders = request.httpHeaderFields;
+ resource.requestFormData = request.requestFormData;
+ },
-WebInspector.NetworkManager.prototype = {
- reset: function()
+ _updateResourceWithResponse: function(resource, response)
{
- WebInspector.panels.network.clear();
- WebInspector.panels.resources.clear();
- this._resourceTreeModel.reloadCachedResources();
+ if (resource.isNull)
+ return;
+
+ resource.mimeType = response.mimeType;
+ resource.expectedContentLength = response.expectedContentLength;
+ resource.textEncodingName = response.textEncodingName;
+ resource.suggestedFilename = response.suggestedFilename;
+ resource.statusCode = response.httpStatusCode;
+ resource.statusText = response.httpStatusText;
+
+ resource.responseHeaders = response.httpHeaderFields;
+ resource.connectionReused = response.connectionReused;
+ resource.connectionID = response.connectionID;
+
+ if (response.wasCached)
+ resource.cached = true;
+ else
+ resource.timing = response.timing;
+
+ if (response.loadInfo) {
+ if (response.loadInfo.httpStatusCode)
+ resource.statusCode = response.loadInfo.httpStatusCode;
+ if (response.loadInfo.httpStatusText)
+ resource.statusText = response.loadInfo.httpStatusText;
+ resource.requestHeaders = response.loadInfo.requestHeaders;
+ resource.responseHeaders = response.loadInfo.responseHeaders;
+ }
+ },
+
+ _updateResourceWithCachedResource: function(resource, cachedResource)
+ {
+ resource.type = WebInspector.Resource.Type[cachedResource.type];
+ resource.resourceSize = cachedResource.encodedSize;
+ this._updateResourceWithResponse(resource, cachedResource.response);
},
identifierForInitialRequest: function(identifier, url, loader, callStack)
{
- this._startResource(this._resourceTreeModel.createResource(identifier, url, loader, callStack));
+ this._startResource(this._createResource(identifier, url, loader, callStack));
},
willSendRequest: function(identifier, time, request, redirectResponse)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -122,7 +150,7 @@ WebInspector.NetworkManager.prototype = {
resource = this._appendRedirect(resource.identifier, time, request.url);
}
- WebInspector.NetworkManager.updateResourceWithRequest(resource, request);
+ this._updateResourceWithRequest(resource, request);
resource.startTime = time;
if (isRedirect)
@@ -133,7 +161,7 @@ WebInspector.NetworkManager.prototype = {
markResourceAsCached: function(identifier)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -143,14 +171,14 @@ WebInspector.NetworkManager.prototype = {
didReceiveResponse: function(identifier, time, resourceType, response)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
resource.responseReceivedTime = time;
resource.type = WebInspector.Resource.Type[resourceType];
- WebInspector.NetworkManager.updateResourceWithResponse(resource, response);
+ this._updateResourceWithResponse(resource, response);
this._updateResource(resource);
this._resourceTreeModel.addResourceToFrame(resource.loader.frameId, resource);
@@ -158,7 +186,7 @@ WebInspector.NetworkManager.prototype = {
didReceiveContentLength: function(identifier, time, lengthReceived)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -170,7 +198,7 @@ WebInspector.NetworkManager.prototype = {
didFinishLoading: function(identifier, finishTime)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -179,7 +207,7 @@ WebInspector.NetworkManager.prototype = {
didFailLoading: function(identifier, time, localizedDescription)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -190,8 +218,8 @@ WebInspector.NetworkManager.prototype = {
didLoadResourceFromMemoryCache: function(time, cachedResource)
{
- var resource = this._resourceTreeModel.createResource("cached:" + ++this._lastIdentifierForCachedResource, cachedResource.url, cachedResource.loader);
- WebInspector.NetworkManager.updateResourceWithCachedResource(resource, cachedResource);
+ var resource = this._createResource("cached:" + ++this._lastIdentifierForCachedResource, cachedResource.url, cachedResource.loader);
+ this._updateResourceWithCachedResource(resource, cachedResource);
resource.cached = true;
resource.requestMethod = "GET";
this._startResource(resource);
@@ -224,21 +252,21 @@ WebInspector.NetworkManager.prototype = {
if (mainResource) {
WebInspector.mainResource = mainResource;
mainResource.isMainResource = true;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.MainResourceCommitLoad, mainResource);
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.MainResourceCommitLoad, mainResource);
}
}
},
didCreateWebSocket: function(identifier, requestURL)
{
- var resource = this._resourceTreeModel.createResource(identifier, requestURL);
+ var resource = this._createResource(identifier, requestURL);
resource.type = WebInspector.Resource.Type.WebSocket;
this._startResource(resource);
},
willSendWebSocketHandshakeRequest: function(identifier, time, request)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -252,7 +280,7 @@ WebInspector.NetworkManager.prototype = {
didReceiveWebSocketHandshakeResponse: function(identifier, time, response)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -267,7 +295,7 @@ WebInspector.NetworkManager.prototype = {
didCloseWebSocket: function(identifier, time)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
this._finishResource(resource, time);
@@ -275,40 +303,76 @@ WebInspector.NetworkManager.prototype = {
_appendRedirect: function(identifier, time, redirectURL)
{
- var originalResource = this._inflightResources[identifier];
+ var originalResource = this._inflightResourcesById[identifier];
var previousRedirects = originalResource.redirects || [];
originalResource.identifier = "redirected:" + identifier + "." + previousRedirects.length;
delete originalResource.redirects;
this._finishResource(originalResource, time);
- // We bound resource early, but it happened to be a redirect and won't make it through to
- // the resource tree -- so unbind it.
- // FIXME: we should bind upon adding to the tree only (encapsulated into ResourceTreeModel),
- // Script debugger should do explicit late binding on its own.
- this._resourceTreeModel.unbindResourceURL(originalResource);
-
- var newResource = this._resourceTreeModel.createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace);
+ var newResource = this._createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace);
newResource.redirects = previousRedirects.concat(originalResource);
return newResource;
},
_startResource: function(resource)
{
- this._inflightResources[resource.identifier] = resource;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceStarted, resource);
+ this._inflightResourcesById[resource.identifier] = resource;
+ this._inflightResourcesByURL[resource.url] = resource;
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceStarted, resource);
},
_updateResource: function(resource)
{
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceUpdated, resource);
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceUpdated, resource);
},
_finishResource: function(resource, finishTime)
{
resource.endTime = finishTime;
resource.finished = true;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceFinished, resource);
- delete this._inflightResources[resource.identifier];
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceFinished, resource);
+ delete this._inflightResourcesById[resource.identifier];
+ delete this._inflightResourcesByURL[resource.url];
+ },
+
+ _addFramesRecursively: function(framePayload)
+ {
+ var frameResource = this._createResource(null, framePayload.resource.url, framePayload.resource.loader);
+ this._updateResourceWithRequest(frameResource, framePayload.resource.request);
+ this._updateResourceWithResponse(frameResource, framePayload.resource.response);
+ frameResource.type = WebInspector.Resource.Type["Document"];
+ frameResource.finished = true;
+
+ this._resourceTreeModel.addOrUpdateFrame(framePayload);
+ this._resourceTreeModel.addResourceToFrame(framePayload.id, frameResource);
+
+ for (var i = 0; framePayload.children && i < framePayload.children.length; ++i)
+ this._addFramesRecursively(framePayload.children[i]);
+
+ if (!framePayload.subresources)
+ return;
+
+ for (var i = 0; i < framePayload.subresources.length; ++i) {
+ var cachedResource = framePayload.subresources[i];
+ var resource = this._createResource(null, cachedResource.url, cachedResource.loader);
+ this._updateResourceWithCachedResource(resource, cachedResource);
+ resource.finished = true;
+ this._resourceTreeModel.addResourceToFrame(framePayload.id, resource);
+ }
+ return frameResource;
+ },
+
+ _dispatchEventToListeners: function(eventType, resource)
+ {
+ this._manager.dispatchEventToListeners(eventType, resource);
+ },
+
+ _createResource: function(identifier, url, loader, stackTrace)
+ {
+ var resource = new WebInspector.Resource(identifier, url);
+ resource.loader = loader;
+ if (loader)
+ resource.documentURL = loader.url;
+ resource.stackTrace = stackTrace;
+ return resource;
}
}
-
-WebInspector.NetworkManager.prototype.__proto__ = WebInspector.Object.prototype;