summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-27 12:16:17 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-27 12:16:17 +0000
commitf017cedd6df946c780de656ced1881ac108e5655 (patch)
treecfe3a35142777b6ad71733d902aeeb9715423f40 /content
parent5ec3ed8f21662b76ca763937f312e1964f1e3cb3 (diff)
downloadchromium_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.cc64
-rw-r--r--content/browser/devtools/devtools_http_handler_impl.h11
-rw-r--r--content/public/browser/devtools_http_handler.h25
-rw-r--r--content/shell/shell.cc3
-rw-r--r--content/shell/shell_web_contents_view_delegate_gtk.cc3
-rw-r--r--content/shell/shell_web_contents_view_delegate_mac.mm3
-rw-r--r--content/shell/shell_web_contents_view_delegate_win.cc3
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,