diff options
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 1 | ||||
-rw-r--r-- | chrome/renderer/devtools_agent.cc | 1 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 20 | ||||
-rw-r--r-- | webkit/glue/devtools/js/net_agent.js | 19 | ||||
-rw-r--r-- | webkit/glue/devtools/net_agent.h | 3 | ||||
-rw-r--r-- | webkit/glue/devtools/net_agent_impl.cc | 84 | ||||
-rw-r--r-- | webkit/glue/devtools/net_agent_impl.h | 23 | ||||
-rw-r--r-- | webkit/glue/webdevtoolsagent_impl.cc | 10 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 11 |
9 files changed, 62 insertions, 110 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index 141bf3e..2082c0c 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -270,7 +270,6 @@ bool BrowserRenderProcessHost::Init() { switches::kEnableWebWorkers, switches::kEnableStatsTable, switches::kEnableExtensions, - switches::kEnableOutOfProcessDevTools, }; for (size_t i = 0; i < arraysize(switch_names); ++i) { diff --git a/chrome/renderer/devtools_agent.cc b/chrome/renderer/devtools_agent.cc index 046b755..633203c 100644 --- a/chrome/renderer/devtools_agent.cc +++ b/chrome/renderer/devtools_agent.cc @@ -61,7 +61,6 @@ void DevToolsAgent::OnRpcMessage(const std::string& raw_msg) { void DevToolsAgent::OnInspectElement(int x, int y) { WebDevToolsAgent* web_agent = GetWebAgent(); if (web_agent) { - web_agent->Attach(); web_agent->InspectElement(x, y); } } diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 9cef455..b4fc6d5 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -299,19 +299,13 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, decrement_shared_popup_at_destruction_ = false; } - const CommandLine& command_line = *CommandLine::ForCurrentProcess(); - - bool dev_tools_enabled = command_line.HasSwitch( - switches::kEnableOutOfProcessDevTools); - if (dev_tools_enabled) - devtools_agent_.reset(new DevToolsAgent(routing_id, this)); + devtools_agent_.reset(new DevToolsAgent(routing_id, this)); webwidget_ = WebView::Create(this, webkit_prefs); - if (dev_tools_enabled) - devtools_agent_filter_ = new DevToolsAgentFilter( - webview()->GetWebDevToolsAgent(), - routing_id); + devtools_agent_filter_ = new DevToolsAgentFilter( + webview()->GetWebDevToolsAgent(), + routing_id); #if defined(OS_LINUX) // We have to enable ourselves as the editor delegate on linux so we can copy @@ -340,6 +334,7 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, host_window_ = parent_hwnd; modal_dialog_event_.reset(modal_dialog_event); + const CommandLine& command_line = *CommandLine::ForCurrentProcess(); if (command_line.HasSwitch(switches::kDomAutomationController)) enabled_bindings_ |= BindingsPolicy::DOM_AUTOMATION; disable_popup_blocking_ = @@ -347,8 +342,7 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, debug_message_handler_ = new DebugMessageHandler(this); render_thread_->AddFilter(debug_message_handler_); - if (dev_tools_enabled) - render_thread_->AddFilter(devtools_agent_filter_); + render_thread_->AddFilter(devtools_agent_filter_); } void RenderView::OnMessageReceived(const IPC::Message& message) { @@ -359,7 +353,7 @@ void RenderView::OnMessageReceived(const IPC::Message& message) { // If this is developer tools renderer intercept tools messages first. if (devtools_client_.get() && devtools_client_->OnMessageReceived(message)) return; - if (devtools_agent_.get() && devtools_agent_->OnMessageReceived(message)) + if (devtools_agent_->OnMessageReceived(message)) return; IPC_BEGIN_MESSAGE_MAP(RenderView, message) diff --git a/webkit/glue/devtools/js/net_agent.js b/webkit/glue/devtools/js/net_agent.js index 64ef4a6..00b511c 100644 --- a/webkit/glue/devtools/js/net_agent.js +++ b/webkit/glue/devtools/js/net_agent.js @@ -21,6 +21,8 @@ devtools.NetAgent = function() { goog.bind(this.didReceiveResponse, this); RemoteNetAgent.DidFinishLoading = goog.bind(this.didFinishLoading, this); + RemoteNetAgent.DidFailLoading = + goog.bind(this.didFailLoading, this); }; @@ -136,5 +138,20 @@ devtools.NetAgent.prototype.didFinishLoading = function(identifier, value) { } resource.endTime = value.endTime; resource.finished = true; - resource.failed = !!value.errorCode; + resource.failed = false; +}; + + +/** + * @see NetAgentDelegate. + * {@inheritDoc}. + */ +devtools.NetAgent.prototype.didFailLoading = function(identifier, value) { + var resource = this.resources_[identifier]; + if (!resource) { + return; + } + resource.endTime = value.endTime; + resource.finished = false; + resource.failed = true; }; diff --git a/webkit/glue/devtools/net_agent.h b/webkit/glue/devtools/net_agent.h index 38db57d..87459f0 100644 --- a/webkit/glue/devtools/net_agent.h +++ b/webkit/glue/devtools/net_agent.h @@ -31,6 +31,9 @@ DEFINE_RPC_CLASS(NetAgent, NET_AGENT_STRUCT) errors */ \ METHOD2(DidFinishLoading, int /* identifier */, Value /* response */) \ \ + /* Notifies the delegate that resource loading has failed. */ \ + METHOD2(DidFailLoading, int /* identifier */, Value /* response */) \ + \ /* Response to the async call. */ \ METHOD2(GetResourceContentResult, int /* call_id */, std::string /* content */) diff --git a/webkit/glue/devtools/net_agent_impl.cc b/webkit/glue/devtools/net_agent_impl.cc index 5aba9bb..a34667f 100644 --- a/webkit/glue/devtools/net_agent_impl.cc +++ b/webkit/glue/devtools/net_agent_impl.cc @@ -33,47 +33,28 @@ using namespace WebCore; NetAgentImpl::NetAgentImpl(NetAgentDelegate* delegate) : delegate_(delegate), document_(NULL), - main_loader_(NULL), - last_cached_identifier_(-2), - attached_(false) { + last_cached_identifier_(-2) { } NetAgentImpl::~NetAgentImpl() { SetDocument(NULL); - DidCommitMainResourceLoad(); - deleteAllValues(pending_resources_); + for (CachedResources::iterator it = pending_resources_.begin(); + it != pending_resources_.end(); ++it) { + delete it->second; + } pending_resources_.clear(); } void NetAgentImpl::SetDocument(Document* doc) { +// loaders_.clear(); document_ = doc; } -void NetAgentImpl::Attach() { - for (FinishedResources::iterator it = finished_resources_.begin(); - it != finished_resources_.end(); ++it) { - delegate_->DidFinishLoading(it->first, *it->second); - } - attached_ = true; -} - -void NetAgentImpl::Detach() { - attached_ = false; -} - -void NetAgentImpl::DidCommitMainResourceLoad() { - for (FinishedResources::iterator it = finished_resources_.begin(); - it != finished_resources_.end(); ++it) { - delete it->second; - } - finished_resources_.clear(); - main_loader_ = NULL; -} - void NetAgentImpl::AssignIdentifierToRequest( DocumentLoader* loader, int identifier, const ResourceRequest& request) { + loaders_.set(identifier, loader); } void NetAgentImpl::WillSendRequest( @@ -91,22 +72,18 @@ void NetAgentImpl::WillSendRequest( webkit_glue::StringToStdString(url.lastPathComponent())); resource->Set(L"requestHeaders", BuildValueForHeaders(request.httpHeaderFields())); + delegate_->WillSendRequest(identifier, *resource); pending_resources_.set(identifier, resource); - - if (attached_) { - delegate_->WillSendRequest(identifier, *resource); - } } void NetAgentImpl::DidReceiveResponse( DocumentLoader* loader, int identifier, const ResourceResponse &response) { + KURL url = response.url(); if (!pending_resources_.contains(identifier)) { return; } - - KURL url = response.url(); DictionaryValue* resource = pending_resources_.get(identifier); resource->SetReal(L"responseReceivedTime", WTF::currentTime()); resource->SetString(L"url", @@ -121,9 +98,7 @@ void NetAgentImpl::DidReceiveResponse( resource->Set(L"responseHeaders", BuildValueForHeaders(response.httpHeaderFields())); - if (attached_) { - delegate_->DidReceiveResponse(identifier, *resource); - } + delegate_->DidReceiveResponse(identifier, *resource); } void NetAgentImpl::DidReceiveContentLength( @@ -138,31 +113,11 @@ void NetAgentImpl::DidFinishLoading( if (!pending_resources_.contains(identifier)) { return; } - - // This is the first command being dispatched after - // DidCommitMainResourceLoad, we know that the first resource to be reported - // as loaded is main resource. - if (!main_loader_.get()) { - main_loader_ = loader; - } - DictionaryValue* resource = pending_resources_.get(identifier); resource->SetReal(L"endTime", WTF::currentTime()); - + delegate_->DidFinishLoading(identifier, *resource); pending_resources_.remove(identifier); - finished_resources_.append(std::make_pair(identifier, resource)); - - // Start removing resources from the cache once there are too many of them. - if (finished_resources_.size() > 200) { - for (int i = 0; i < 50; ++i) { - delete finished_resources_[i].second; - } - finished_resources_.remove(0, 50); - } - - if (attached_) { - delegate_->DidFinishLoading(identifier, *resource); - } + delete resource; } void NetAgentImpl::DidFailLoading( @@ -173,10 +128,13 @@ void NetAgentImpl::DidFailLoading( 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())); - DidFinishLoading(loader, identifier); + delegate_->DidFailLoading(identifier, *resource); + pending_resources_.remove(identifier); + delete resource; } void NetAgentImpl::DidLoadResourceFromMemoryCache( @@ -185,6 +143,7 @@ void NetAgentImpl::DidLoadResourceFromMemoryCache( const ResourceResponse& response, int length) { int identifier = last_cached_identifier_--; + loaders_.set(identifier, loader); } void NetAgentImpl::GetResourceContent( @@ -194,11 +153,16 @@ void NetAgentImpl::GetResourceContent( if (!document_) { return; } + CachedLoaders::iterator it = loaders_.find(identifier); + if (it == loaders_.end() || !it->second) { + return; + } + RefPtr<DocumentLoader> loader = it->second; String source; - if (main_loader_.get() && main_loader_->requestURL() == url) { - RefPtr<SharedBuffer> buffer = main_loader_->mainResourceData(); + if (url == loader->requestURL()) { + RefPtr<SharedBuffer> buffer = loader->mainResourceData(); String text_encoding_name = document_->inputEncoding(); if (buffer) { WebCore::TextEncoding encoding(text_encoding_name); diff --git a/webkit/glue/devtools/net_agent_impl.h b/webkit/glue/devtools/net_agent_impl.h index 893c4b5..94f5e20 100644 --- a/webkit/glue/devtools/net_agent_impl.h +++ b/webkit/glue/devtools/net_agent_impl.h @@ -5,12 +5,9 @@ #ifndef WEBKIT_GLUE_DEVTOOLS_NET_AGENT_IMPL_H_ #define WEBKIT_GLUE_DEVTOOLS_NET_AGENT_IMPL_H_ -#include <utility> - #include <wtf/HashMap.h> #include <wtf/RefCounted.h> #include <wtf/RefPtr.h> -#include <wtf/Vector.h> #include "webkit/glue/devtools/net_agent.h" @@ -38,15 +35,6 @@ class NetAgentImpl : public NetAgent { // Initializes net agent with the given document. void SetDocument(WebCore::Document* document); - // Tells agent it has attached client. - void Attach(); - - // Tells agent it has no attached client. - void Detach(); - - // Tells agent that new load has been committed. - void DidCommitMainResourceLoad(); - // NetAgent implementation. void GetResourceContent(int call_id, int identifier, const WebCore::String& request_url); @@ -85,14 +73,13 @@ class NetAgentImpl : public NetAgent { NetAgentDelegate* delegate_; WebCore::Document* document_; - RefPtr<WebCore::DocumentLoader> main_loader_; typedef HashMap<int, DictionaryValue*, DefaultHash<int>::Hash, - WTF::UnsignedWithZeroKeyHashTraits<int> > ResourcesMap; - typedef Vector<std::pair<int, DictionaryValue*> > FinishedResources; - ResourcesMap pending_resources_; - FinishedResources finished_resources_; + 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_; - bool attached_; DISALLOW_COPY_AND_ASSIGN(NetAgentImpl); }; diff --git a/webkit/glue/webdevtoolsagent_impl.cc b/webkit/glue/webdevtoolsagent_impl.cc index 5602f45..4a6201f 100644 --- a/webkit/glue/webdevtoolsagent_impl.cc +++ b/webkit/glue/webdevtoolsagent_impl.cc @@ -49,9 +49,6 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( dom_agent_delegate_stub_.set(new DomAgentDelegateStub(this)); net_agent_delegate_stub_.set(new NetAgentDelegateStub(this)); tools_agent_delegate_stub_.set(new ToolsAgentDelegateStub(this)); - - // Sniff for requests from the beginning, do not wait for attach. - net_agent_impl_.set(new NetAgentImpl(net_agent_delegate_stub_.get())); } WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { @@ -66,6 +63,7 @@ void WebDevToolsAgentImpl::Attach() { debugger_agent_delegate_stub_.get(), this)); dom_agent_impl_.set(new DomAgentImpl(dom_agent_delegate_stub_.get())); + net_agent_impl_.set(new NetAgentImpl(net_agent_delegate_stub_.get())); // We are potentially attaching to the running page -> init agents with // Document if any. @@ -86,14 +84,13 @@ void WebDevToolsAgentImpl::Attach() { it->line_no); } - net_agent_impl_->Attach(); attached_ = true; } void WebDevToolsAgentImpl::Detach() { debugger_agent_impl_.set(NULL); dom_agent_impl_.set(NULL); - net_agent_impl_->Detach(); + net_agent_impl_.set(NULL); attached_ = false; } @@ -119,9 +116,6 @@ void WebDevToolsAgentImpl::DidCommitLoadForFrame( WebViewImpl* webview, WebFrame* frame, bool is_new_navigation) { - if (webview->GetMainFrame() == frame) { - net_agent_impl_->DidCommitMainResourceLoad(); - } if (!attached_) { return; } diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index 78ae88b..c98ac6f 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -332,14 +332,9 @@ WebView* WebView::Create(WebViewDelegate* delegate, // Set the delegate after initializing the main frame, to avoid trying to // respond to notifications before we're fully initialized. instance->delegate_ = delegate; - - WebDevToolsAgentDelegate* tools_delegate = - delegate->GetWebDevToolsAgentDelegate(); - if (tools_delegate) { - instance->devtools_agent_.reset( - new WebDevToolsAgentImpl(instance, tools_delegate)); - } - + instance->devtools_agent_.reset( + new WebDevToolsAgentImpl(instance, + delegate->GetWebDevToolsAgentDelegate())); // Restrict the access to the local file system // (see WebView.mm WebView::_commonInitializationWithFrameName). FrameLoader::setLocalLoadPolicy( |