diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-02 13:07:03 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-02 13:07:03 +0000 |
commit | 51996efd0e452dc7cea81616783958cb3fbf81e2 (patch) | |
tree | db60636fbdd6668d24add5183e42c4d844cf2b8d /webkit/glue/devtools | |
parent | ce99295021b01038cd03d67e98b920c58c250578 (diff) | |
download | chromium_src-51996efd0e452dc7cea81616783958cb3fbf81e2.zip chromium_src-51996efd0e452dc7cea81616783958cb3fbf81e2.tar.gz chromium_src-51996efd0e452dc7cea81616783958cb3fbf81e2.tar.bz2 |
DevTools: add support for provisional load tracking.
Review URL: http://codereview.chromium.org/56149
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13008 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/devtools')
-rw-r--r-- | webkit/glue/devtools/js/devtools.js | 9 | ||||
-rw-r--r-- | webkit/glue/devtools/js/inspector_controller_impl.js | 3 | ||||
-rw-r--r-- | webkit/glue/devtools/js/net_agent.js | 21 | ||||
-rw-r--r-- | webkit/glue/devtools/net_agent_impl.cc | 75 | ||||
-rw-r--r-- | webkit/glue/devtools/net_agent_impl.h | 7 |
5 files changed, 81 insertions, 34 deletions
diff --git a/webkit/glue/devtools/js/devtools.js b/webkit/glue/devtools/js/devtools.js index 78f47da..c7b4777 100644 --- a/webkit/glue/devtools/js/devtools.js +++ b/webkit/glue/devtools/js/devtools.js @@ -33,6 +33,7 @@ devtools.ToolsAgent = function() { */ devtools.ToolsAgent.prototype.reset = function() { this.domAgent_.reset(); + this.netAgent_.reset(); this.domAgent_.getDocumentElementAsync(); }; @@ -114,11 +115,15 @@ devtools.ToolsAgent.prototype.updateFocusedNode = function(nodeId) { /** + * @param {string} url Url frame navigated to. + * @param {bool} topLevel True iff top level navigation occurred. * @see tools_agent.h */ devtools.ToolsAgent.prototype.frameNavigate = function(url, topLevel) { - this.reset(); - WebInspector.reset(); + if (topLevel) { + this.reset(); + WebInspector.reset(); + } }; diff --git a/webkit/glue/devtools/js/inspector_controller_impl.js b/webkit/glue/devtools/js/inspector_controller_impl.js index 2ce61f5..72897f5 100644 --- a/webkit/glue/devtools/js/inspector_controller_impl.js +++ b/webkit/glue/devtools/js/inspector_controller_impl.js @@ -61,7 +61,8 @@ devtools.InspectorControllerImpl.prototype.addSourceToFrame = devtools.InspectorControllerImpl.prototype.addResourceSourceToFrame = function(identifier, element) { var self = this; - tools.getNetAgent().getResourceContentAsync(identifier, function(source) { + var netAgent = devtools.tools.getNetAgent(); + netAgent.getResourceContentAsync(identifier, function(source) { var resource = netAgent.getResource(identifier); self.addSourceToFrame(resource.mimeType, source, element); }); diff --git a/webkit/glue/devtools/js/net_agent.js b/webkit/glue/devtools/js/net_agent.js index 0c0d9fe..2e54f58 100644 --- a/webkit/glue/devtools/js/net_agent.js +++ b/webkit/glue/devtools/js/net_agent.js @@ -27,6 +27,15 @@ devtools.NetAgent = function() { /** + * Resets dom agent to its initial state. + */ +devtools.NetAgent.prototype.reset = function() { + this.resources_ = {}; + this.id_for_url_ = {}; +}; + + +/** * Returns resource object for given identifier. * @param {number} identifier Identifier to get resource for. * @return {WebInspector.Resouce} Resulting resource. @@ -63,6 +72,12 @@ devtools.NetAgent.prototype.getResourceContentAsync = function(identifier, * {@inheritDoc}. */ devtools.NetAgent.prototype.willSendRequest = function(identifier, request) { + // Resource object is already created. + var resource = this.resources_[identifier]; + if (resource) { + return; + } + var mainResource = false; var cached = false; var resource = new WebInspector.Resource(request.requestHeaders, @@ -84,6 +99,7 @@ devtools.NetAgent.prototype.didReceiveResponse = function(identifier, response) if (!resource) { return; } + resource.expectedContentLength = response.expectedContentLength; resource.responseStatusCode = response.responseStatusCode; resource.mimeType = response.mimeType; @@ -108,6 +124,11 @@ devtools.NetAgent.prototype.didReceiveResponse = function(identifier, response) * {@inheritDoc}. */ devtools.NetAgent.prototype.didFinishLoading = function(identifier, value) { + // When loading main resource we are only getting the didFinishLoading + // that is happening after the reset. Replay previous commands here. + this.willSendRequest(identifier, value); + this.didReceiveResponse(identifier, value); + var resource = this.resources_[identifier]; if (!resource) { return; diff --git a/webkit/glue/devtools/net_agent_impl.cc b/webkit/glue/devtools/net_agent_impl.cc index 2202bd0..d4c1cd7 100644 --- a/webkit/glue/devtools/net_agent_impl.cc +++ b/webkit/glue/devtools/net_agent_impl.cc @@ -38,6 +38,11 @@ NetAgentImpl::NetAgentImpl(NetAgentDelegate* delegate) NetAgentImpl::~NetAgentImpl() { SetDocument(NULL); + for (CachedResources::iterator it = pending_resources_.begin(); + it != pending_resources_.end(); ++it) { + delete it->second; + } + pending_resources_.clear(); } void NetAgentImpl::SetDocument(Document* doc) { @@ -57,42 +62,43 @@ void NetAgentImpl::WillSendRequest( int identifier, const ResourceRequest& request) { KURL url = request.url(); - DictionaryValue value; - value.SetReal(L"startTime", WTF::currentTime()); - value.SetString(L"url", webkit_glue::StringToStdString(url.string())); - value.SetString(L"domain", webkit_glue::StringToStdString(url.host())); - value.SetString(L"path", webkit_glue::StringToStdString(url.path())); - value.SetString(L"lastPathComponent", + DictionaryValue* resource = new DictionaryValue(); + + resource->SetReal(L"startTime", WTF::currentTime()); + resource->SetString(L"url", webkit_glue::StringToStdString(url.string())); + resource->SetString(L"domain", webkit_glue::StringToStdString(url.host())); + resource->SetString(L"path", webkit_glue::StringToStdString(url.path())); + resource->SetString(L"lastPathComponent", webkit_glue::StringToStdString(url.lastPathComponent())); - value.Set(L"requestHeaders", + resource->Set(L"requestHeaders", BuildValueForHeaders(request.httpHeaderFields())); - delegate_->WillSendRequest(identifier, value); + delegate_->WillSendRequest(identifier, *resource); + pending_resources_.set(identifier, resource); } void NetAgentImpl::DidReceiveResponse( DocumentLoader* loader, int identifier, const ResourceResponse &response) { - if (!document_) { + KURL url = response.url(); + if (!pending_resources_.contains(identifier)) { return; } - KURL url = response.url(); - - DictionaryValue value; - value.SetReal(L"responseReceivedTime", WTF::currentTime()); - value.SetString(L"url", + DictionaryValue* resource = pending_resources_.get(identifier); + resource->SetReal(L"responseReceivedTime", WTF::currentTime()); + resource->SetString(L"url", webkit_glue::StringToStdWString(url.string())); - value.SetInteger(L"expectedContentLength", + resource->SetInteger(L"expectedContentLength", static_cast<int>(response.expectedContentLength())); - value.SetInteger(L"responseStatusCode", response.httpStatusCode()); - value.SetString(L"mimeType", + resource->SetInteger(L"responseStatusCode", response.httpStatusCode()); + resource->SetString(L"mimeType", webkit_glue::StringToStdWString(response.mimeType())); - value.SetString(L"suggestedFilename", + resource->SetString(L"suggestedFilename", webkit_glue::StringToStdWString(response.suggestedFilename())); - value.Set(L"responseHeaders", + resource->Set(L"responseHeaders", BuildValueForHeaders(response.httpHeaderFields())); - delegate_->DidReceiveResponse(identifier, value); + delegate_->DidReceiveResponse(identifier, *resource); } void NetAgentImpl::DidReceiveContentLength( @@ -104,21 +110,31 @@ void NetAgentImpl::DidReceiveContentLength( void NetAgentImpl::DidFinishLoading( DocumentLoader* loader, int identifier) { - DictionaryValue value; - value.SetReal(L"endTime", WTF::currentTime()); - delegate_->DidFinishLoading(identifier, value); + if (!pending_resources_.contains(identifier)) { + return; + } + DictionaryValue* resource = pending_resources_.get(identifier); + resource->SetReal(L"endTime", WTF::currentTime()); + delegate_->DidFinishLoading(identifier, *resource); + pending_resources_.remove(identifier); + delete resource; } void NetAgentImpl::DidFailLoading( DocumentLoader* loader, int identifier, const ResourceError& error) { - DictionaryValue value; - value.SetReal(L"endTime", WTF::currentTime()); - value.SetInteger(L"errorCode", error.errorCode()); - value.SetString(L"localizedDescription", + if (!pending_resources_.contains(identifier)) { + return; + } + DictionaryValue* resource = pending_resources_.get(identifier); + resource->SetReal(L"endTime", WTF::currentTime()); + resource->SetInteger(L"errorCode", error.errorCode()); + resource->SetString(L"localizedDescription", webkit_glue::StringToStdString(error.localizedDescription())); - delegate_->DidFailLoading(identifier, value); + delegate_->DidFailLoading(identifier, *resource); + pending_resources_.remove(identifier); + delete resource; } void NetAgentImpl::DidLoadResourceFromMemoryCache( @@ -137,8 +153,7 @@ void NetAgentImpl::GetResourceContent( if (!document_) { return; } - HashMap<int, RefPtr<DocumentLoader> >::iterator it = - loaders_.find(identifier); + CachedLoaders::iterator it = loaders_.find(identifier); if (it == loaders_.end() || !it->second) { return; } diff --git a/webkit/glue/devtools/net_agent_impl.h b/webkit/glue/devtools/net_agent_impl.h index 661ecb5..94f5e20 100644 --- a/webkit/glue/devtools/net_agent_impl.h +++ b/webkit/glue/devtools/net_agent_impl.h @@ -73,7 +73,12 @@ class NetAgentImpl : public NetAgent { NetAgentDelegate* delegate_; WebCore::Document* document_; - HashMap<int, RefPtr<WebCore::DocumentLoader> > loaders_; + typedef HashMap<int, DictionaryValue*, DefaultHash<int>::Hash, + WTF::UnsignedWithZeroKeyHashTraits<int> > CachedResources; + typedef HashMap<int, RefPtr<WebCore::DocumentLoader>, DefaultHash<int>::Hash, + WTF::UnsignedWithZeroKeyHashTraits<int> > CachedLoaders; + CachedResources pending_resources_; + CachedLoaders loaders_; int last_cached_identifier_; DISALLOW_COPY_AND_ASSIGN(NetAgentImpl); }; |