diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-27 12:16:17 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-27 12:16:17 +0000 |
commit | f017cedd6df946c780de656ced1881ac108e5655 (patch) | |
tree | cfe3a35142777b6ad71733d902aeeb9715423f40 /content | |
parent | 5ec3ed8f21662b76ca763937f312e1964f1e3cb3 (diff) | |
download | chromium_src-f017cedd6df946c780de656ced1881ac108e5655.zip chromium_src-f017cedd6df946c780de656ced1881ac108e5655.tar.gz chromium_src-f017cedd6df946c780de656ced1881ac108e5655.tar.bz2 |
DevTools: migrate remote debugging to the DevToolsAgentHost ids.
BUG=166824
TBR=yurys
Review URL: https://codereview.chromium.org/11662024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174679 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/devtools/devtools_http_handler_impl.cc | 64 | ||||
-rw-r--r-- | content/browser/devtools/devtools_http_handler_impl.h | 11 | ||||
-rw-r--r-- | content/public/browser/devtools_http_handler.h | 25 | ||||
-rw-r--r-- | content/shell/shell.cc | 3 | ||||
-rw-r--r-- | content/shell/shell_web_contents_view_delegate_gtk.cc | 3 | ||||
-rw-r--r-- | content/shell/shell_web_contents_view_delegate_mac.mm | 3 | ||||
-rw-r--r-- | content/shell/shell_web_contents_view_delegate_win.cc | 3 |
7 files changed, 63 insertions, 49 deletions
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc index fbc66ec..2541ab6 100644 --- a/content/browser/devtools/devtools_http_handler_impl.cc +++ b/content/browser/devtools/devtools_http_handler_impl.cc @@ -59,35 +59,43 @@ namespace { static const char* kDevToolsHandlerThreadName = "Chrome_DevToolsHandlerThread"; class DevToolsDefaultBindingHandler - : public DevToolsHttpHandler::RenderViewHostBinding { + : public DevToolsHttpHandler::DevToolsAgentHostBinding { public: DevToolsDefaultBindingHandler() { } - virtual std::string GetIdentifier(RenderViewHost* rvh) OVERRIDE { - int process_id = rvh->GetProcess()->GetID(); - int routing_id = rvh->GetRoutingID(); - return base::StringPrintf("%d_%d", process_id, routing_id); + void GarbageCollect() { + AgentsMap::iterator it = agents_map_.begin(); + while (it != agents_map_.end()) { + if (!it->second->GetRenderViewHost()) + agents_map_.erase(it++); + else + ++it; + } } - virtual RenderViewHost* ForIdentifier( - const std::string& identifier) OVERRIDE { - size_t pos = identifier.find("_"); - if (pos == std::string::npos) - return NULL; - - int process_id; - if (!base::StringToInt(identifier.substr(0, pos), &process_id)) - return NULL; - - int routing_id; - if (!base::StringToInt(identifier.substr(pos+1), &routing_id)) - return NULL; + virtual std::string GetIdentifier(DevToolsAgentHost* agent_host) OVERRIDE { + GarbageCollect(); + DevToolsAgentHostImpl* agent_host_impl = + static_cast<DevToolsAgentHostImpl*>(agent_host); + std::string id = base::StringPrintf("%d", agent_host_impl->id()); + agents_map_[id] = agent_host; + return id; + } - return RenderViewHost::FromID(process_id, routing_id); + virtual DevToolsAgentHost* ForIdentifier( + const std::string& identifier) OVERRIDE { + GarbageCollect(); + AgentsMap::iterator it = agents_map_.find(identifier); + if (it != agents_map_.end()) + return it->second; + return NULL; } -}; + private: + typedef std::map<std::string, scoped_refptr<DevToolsAgentHost> > AgentsMap; + AgentsMap agents_map_; +}; // An internal implementation of DevToolsClientHost that delegates // messages sent for DevToolsClient to a DebuggerShell instance. @@ -222,20 +230,20 @@ void DevToolsHttpHandlerImpl::Stop() { base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); } -void DevToolsHttpHandlerImpl::SetRenderViewHostBinding( - RenderViewHostBinding* binding) { +void DevToolsHttpHandlerImpl::SetDevToolsAgentHostBinding( + DevToolsAgentHostBinding* binding) { if (binding) binding_ = binding; else binding_ = default_binding_.get(); } -GURL DevToolsHttpHandlerImpl::GetFrontendURL(RenderViewHost* render_view_host) { +GURL DevToolsHttpHandlerImpl::GetFrontendURL(DevToolsAgentHost* agent_host) { net::IPEndPoint ip_address; if (server_->GetLocalAddress(&ip_address)) return GURL(); std::string host = ip_address.ToString(); - std::string id = binding_->GetIdentifier(render_view_host); + std::string id = binding_->GetIdentifier(agent_host); return GURL(std::string("http://") + ip_address.ToString() + GetFrontendURLInternal(id, host)); @@ -538,7 +546,8 @@ void DevToolsHttpHandlerImpl::OnJsonRequestUI( } if (command == "activate" || command == "close") { - RenderViewHost* rvh = binding_->ForIdentifier(target_id); + DevToolsAgentHost* agent_host = binding_->ForIdentifier(target_id); + RenderViewHost* rvh = agent_host ? agent_host->GetRenderViewHost() : NULL; if (!rvh) { SendJson(connection_id, net::HTTP_NOT_FOUND, @@ -617,7 +626,8 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( } std::string page_id = request.path.substr(page_prefix.length()); - RenderViewHost* rvh = binding_->ForIdentifier(page_id); + DevToolsAgentHost* agent_host = binding_->ForIdentifier(page_id); + RenderViewHost* rvh = agent_host ? agent_host->GetRenderViewHost() : NULL; if (!rvh) { Send500(connection_id, "No such target id: " + page_id); return; @@ -824,7 +834,7 @@ DevToolsHttpHandlerImpl::CreatePageInfo(RenderViewHost* rvh) DevToolsClientHost* client_host = DevToolsManager::GetInstance()-> GetDevToolsClientHostFor(agent); PageInfo page_info; - page_info.id = binding_->GetIdentifier(rvh); + page_info.id = binding_->GetIdentifier(agent); page_info.attached = client_host != NULL; page_info.url = host_delegate->GetURL().spec(); diff --git a/content/browser/devtools/devtools_http_handler_impl.h b/content/browser/devtools/devtools_http_handler_impl.h index 9ee6f92..96a2bc4 100644 --- a/content/browser/devtools/devtools_http_handler_impl.h +++ b/content/browser/devtools/devtools_http_handler_impl.h @@ -34,7 +34,6 @@ namespace content { class DevToolsBrowserTarget; class DevToolsClientHost; -class RenderViewHost; class DevToolsHttpHandlerImpl : public DevToolsHttpHandler, @@ -58,9 +57,9 @@ class DevToolsHttpHandlerImpl // DevToolsHttpHandler implementation. virtual void Stop() OVERRIDE; - virtual void SetRenderViewHostBinding( - RenderViewHostBinding* binding) OVERRIDE; - virtual GURL GetFrontendURL(RenderViewHost* render_view_host) OVERRIDE; + virtual void SetDevToolsAgentHostBinding( + DevToolsAgentHostBinding* binding) OVERRIDE; + virtual GURL GetFrontendURL(DevToolsAgentHost* agent_host) OVERRIDE; // NotificationObserver implementation. virtual void Observe(int type, @@ -131,8 +130,8 @@ class DevToolsHttpHandlerImpl typedef std::map<int, DevToolsClientHost*> ConnectionToClientHostMap; ConnectionToClientHostMap connection_to_client_host_ui_; scoped_ptr<DevToolsHttpHandlerDelegate> delegate_; - RenderViewHostBinding* binding_; - scoped_ptr<RenderViewHostBinding> default_binding_; + DevToolsAgentHostBinding* binding_; + scoped_ptr<DevToolsAgentHostBinding> default_binding_; NotificationRegistrar registrar_; scoped_ptr<DevToolsBrowserTarget> browser_target_; DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl); diff --git a/content/public/browser/devtools_http_handler.h b/content/public/browser/devtools_http_handler.h index 5ad9375..d01e801 100644 --- a/content/public/browser/devtools_http_handler.h +++ b/content/public/browser/devtools_http_handler.h @@ -18,25 +18,25 @@ class URLRequestContextGetter; namespace content { +class DevToolsAgentHost; class DevToolsHttpHandlerDelegate; -class RenderViewHost; // This class is used for managing DevTools remote debugging server. // Clients can connect to the specified ip:port and start debugging // this browser. class DevToolsHttpHandler { public: - // Interface responsible for mapping RenderViewHost instances to/from string - // identifiers. - class RenderViewHostBinding { + // Interface responsible for mapping DevToolsAgentHost instances to/from + // string identifiers. + class DevToolsAgentHostBinding { public: - virtual ~RenderViewHostBinding() {} + virtual ~DevToolsAgentHostBinding() {} - // Returns the mapping of RenderViewHost to identifier. - virtual std::string GetIdentifier(RenderViewHost* rvh) = 0; + // Returns the mapping of DevToolsAgentHost to identifier. + virtual std::string GetIdentifier(DevToolsAgentHost* agent_host) = 0; - // Returns the mapping of identifier to RenderViewHost. - virtual RenderViewHost* ForIdentifier(const std::string& identifier) = 0; + // Returns the mapping of identifier to DevToolsAgentHost. + virtual DevToolsAgentHost* ForIdentifier(const std::string& identifier) = 0; }; // Returns frontend resource id for the given resource |name|. @@ -53,12 +53,13 @@ class DevToolsHttpHandler { // Automatically destroys the handler instance. virtual void Stop() = 0; - // Set the RenderViewHostBinding instance. If no instance is provided the + // Set the DevToolsAgentHostBinding instance. If no instance is provided the // default implementation will be used. - virtual void SetRenderViewHostBinding(RenderViewHostBinding* binding) = 0; + virtual void SetDevToolsAgentHostBinding( + DevToolsAgentHostBinding* binding) = 0; // Returns the URL for the address to debug |render_view_host|. - virtual GURL GetFrontendURL(RenderViewHost* render_view_host) = 0; + virtual GURL GetFrontendURL(DevToolsAgentHost* agent_host) = 0; protected: virtual ~DevToolsHttpHandler() {} diff --git a/content/shell/shell.cc b/content/shell/shell.cc index 4816a35..5a6ce13 100644 --- a/content/shell/shell.cc +++ b/content/shell/shell.cc @@ -12,6 +12,7 @@ #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" +#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_http_handler.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_controller.h" @@ -181,7 +182,7 @@ void Shell::ShowDevTools() { ShellDevToolsDelegate* delegate = browser_client->shell_browser_main_parts()->devtools_delegate(); GURL url = delegate->devtools_http_handler()->GetFrontendURL( - web_contents()->GetRenderViewHost()); + DevToolsAgentHost::GetFor(web_contents()->GetRenderViewHost())); dev_tools_ = CreateNewWindow( web_contents()->GetBrowserContext(), url, NULL, MSG_ROUTING_NONE, NULL); diff --git a/content/shell/shell_web_contents_view_delegate_gtk.cc b/content/shell/shell_web_contents_view_delegate_gtk.cc index dd617f9..5e1b804 100644 --- a/content/shell/shell_web_contents_view_delegate_gtk.cc +++ b/content/shell/shell_web_contents_view_delegate_gtk.cc @@ -5,6 +5,7 @@ #include "content/shell/shell_web_contents_view_delegate.h" #include "base/command_line.h" +#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_http_handler.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -244,7 +245,7 @@ void ShellWebContentsViewDelegate::OnInspectMenuActivated(GtkWidget* widget) { ShellDevToolsDelegate* delegate = browser_client->shell_browser_main_parts()->devtools_delegate(); GURL url = delegate->devtools_http_handler()->GetFrontendURL( - web_contents_->GetRenderViewHost()); + DevToolsAgentHost::GetFor(web_contents_->GetRenderViewHost())); Shell::CreateNewWindow(web_contents_->GetBrowserContext(), url, NULL, diff --git a/content/shell/shell_web_contents_view_delegate_mac.mm b/content/shell/shell_web_contents_view_delegate_mac.mm index 05b1e50..ad66ab9 100644 --- a/content/shell/shell_web_contents_view_delegate_mac.mm +++ b/content/shell/shell_web_contents_view_delegate_mac.mm @@ -7,6 +7,7 @@ #import <Cocoa/Cocoa.h> #include "base/command_line.h" +#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_http_handler.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -267,7 +268,7 @@ void ShellWebContentsViewDelegate::ActionPerformed(int tag) { ShellDevToolsDelegate* delegate = browser_client->shell_browser_main_parts()->devtools_delegate(); GURL url = delegate->devtools_http_handler()->GetFrontendURL( - web_contents_->GetRenderViewHost()); + DevToolsAgentHost::GetFor(web_contents_->GetRenderViewHost())); Shell::CreateNewWindow(web_contents_->GetBrowserContext(), url, NULL, diff --git a/content/shell/shell_web_contents_view_delegate_win.cc b/content/shell/shell_web_contents_view_delegate_win.cc index af173d2..4e66e3e 100644 --- a/content/shell/shell_web_contents_view_delegate_win.cc +++ b/content/shell/shell_web_contents_view_delegate_win.cc @@ -5,6 +5,7 @@ #include "content/shell/shell_web_contents_view_delegate.h" #include "base/command_line.h" +#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_http_handler.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -234,7 +235,7 @@ void ShellWebContentsViewDelegate::MenuItemSelected(int selection) { ShellDevToolsDelegate* delegate = browser_client->shell_browser_main_parts()->devtools_delegate(); GURL url = delegate->devtools_http_handler()->GetFrontendURL( - web_contents_->GetRenderViewHost()); + DevToolsAgentHost::GetFor(web_contents_->GetRenderViewHost())); Shell::CreateNewWindow(web_contents_->GetBrowserContext(), url, NULL, |