Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(946)

Unified Diff: content/browser/debugger/devtools_manager.cc

Issue 7778001: DevTools: introduce DevToolsAgentHost (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/debugger/devtools_manager.cc
diff --git a/content/browser/debugger/devtools_manager.cc b/content/browser/debugger/devtools_manager.cc
index 383d6c4eba509262f3d1e2155eb33417c7c3daee..60f9eea9fbc00c8268512f5ac9218d6a496581da 100644
--- a/content/browser/debugger/devtools_manager.cc
+++ b/content/browser/debugger/devtools_manager.cc
@@ -13,12 +13,11 @@
#include "content/browser/content_browser_client.h"
#include "content/browser/debugger/devtools_client_host.h"
#include "content/browser/debugger/devtools_netlog_observer.h"
+#include "content/browser/debugger/render_view_devtools_agent_host.h"
#include "content/browser/renderer_host/render_view_host.h"
-#include "content/browser/site_instance.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/content_client.h"
#include "content/common/devtools_messages.h"
-#include "content/common/notification_service.h"
#include "googleurl/src/gurl.h"
// static
@@ -28,13 +27,11 @@ DevToolsManager* DevToolsManager::GetInstance() {
DevToolsManager::DevToolsManager()
: last_orphan_cookie_(0) {
- registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_DELETED,
- NotificationService::AllSources());
}
DevToolsManager::~DevToolsManager() {
- DCHECK(inspected_rvh_to_client_host_.empty());
- DCHECK(client_host_to_inspected_rvh_.empty());
+ DCHECK(agent_to_client_host_.empty());
+ DCHECK(client_to_agent_host_.empty());
// By the time we destroy devtools manager, all orphan client hosts should
// have been delelted, no need to notify them upon tab closing.
DCHECK(orphan_client_hosts_.empty());
@@ -42,9 +39,15 @@ DevToolsManager::~DevToolsManager() {
DevToolsClientHost* DevToolsManager::GetDevToolsClientHostFor(
RenderViewHost* inspected_rvh) {
- InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.find(inspected_rvh);
- if (it != inspected_rvh_to_client_host_.end())
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ inspected_rvh);
+ return GetDevToolsClientHostFor(agent_host);
+}
+
+DevToolsClientHost* DevToolsManager::GetDevToolsClientHostFor(
+ DevToolsAgentHost* agent_host) {
+ AgentToClientHostMap::iterator it = agent_to_client_host_.find(agent_host);
+ if (it != agent_to_client_host_.end())
return it->second;
return NULL;
}
@@ -55,20 +58,20 @@ void DevToolsManager::RegisterDevToolsClientHostFor(
DCHECK(!GetDevToolsClientHostFor(inspected_rvh));
DevToolsRuntimeProperties initial_properties;
- BindClientHost(inspected_rvh, client_host, initial_properties);
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ inspected_rvh);
+ BindClientHost(agent_host, client_host, initial_properties);
client_host->set_close_listener(this);
- SendAttachToAgent(inspected_rvh);
+ SendAttachToAgent(agent_host);
}
bool DevToolsManager::ForwardToDevToolsAgent(DevToolsClientHost* from,
const IPC::Message& message) {
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(from);
- if (!inspected_rvh)
+ DevToolsAgentHost* agent_host = GetAgentHost(from);
+ if (!agent_host)
return false;
- IPC::Message* m = new IPC::Message(message);
- m->set_routing_id(inspected_rvh->routing_id());
- inspected_rvh->Send(m);
+ agent_host->SendMessageToAgent(new IPC::Message(message));
return true;
}
@@ -86,11 +89,13 @@ void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* inspected_rvh,
void DevToolsManager::RuntimePropertyChanged(RenderViewHost* inspected_rvh,
const std::string& name,
const std::string& value) {
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ inspected_rvh);
RuntimePropertiesMap::iterator it =
- runtime_properties_map_.find(inspected_rvh);
+ runtime_properties_map_.find(agent_host);
if (it == runtime_properties_map_.end()) {
- std::pair<RenderViewHost*, DevToolsRuntimeProperties> value(
- inspected_rvh,
+ std::pair<DevToolsAgentHost*, DevToolsRuntimeProperties> value(
+ agent_host,
DevToolsRuntimeProperties());
it = runtime_properties_map_.insert(value).first;
}
@@ -106,13 +111,13 @@ void DevToolsManager::SendInspectElement(RenderViewHost* inspected_rvh,
y));
}
-void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) {
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(host);
- if (!inspected_rvh) {
+void DevToolsManager::ClientHostClosing(DevToolsClientHost* client_host) {
+ DevToolsAgentHost* agent_host = GetAgentHost(client_host);
+ if (!agent_host) {
// It might be in the list of orphan client hosts, remove it from there.
for (OrphanClientHosts::iterator it = orphan_client_hosts_.begin();
it != orphan_client_hosts_.end(); ++it) {
- if (it->second.first == host) {
+ if (it->second.first == client_host) {
orphan_client_hosts_.erase(it->first);
return;
}
@@ -120,38 +125,38 @@ void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) {
return;
}
- NotificationService::current()->Notify(
- content::NOTIFICATION_DEVTOOLS_WINDOW_CLOSING,
- Source<content::BrowserContext>(
- inspected_rvh->site_instance()->GetProcess()->browser_context()),
- Details<RenderViewHost>(inspected_rvh));
+ agent_host->NotifyClientClosing();
- UnbindClientHost(inspected_rvh, host);
+ UnbindClientHost(agent_host, client_host);
}
-void DevToolsManager::Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(type == content::NOTIFICATION_RENDER_VIEW_HOST_DELETED);
- UnregisterDevToolsClientHostFor(Source<RenderViewHost>(source).ptr());
+void DevToolsManager::AgentHostClosing(DevToolsAgentHost* agent_host) {
+ UnregisterDevToolsClientHostFor(agent_host);
}
-RenderViewHost* DevToolsManager::GetInspectedRenderViewHost(
+DevToolsAgentHost* DevToolsManager::GetAgentHost(
DevToolsClientHost* client_host) {
ClientHostToInspectedRvhMap::iterator it =
- client_host_to_inspected_rvh_.find(client_host);
- if (it != client_host_to_inspected_rvh_.end())
+ client_to_agent_host_.find(client_host);
+ if (it != client_to_agent_host_.end())
return it->second;
return NULL;
}
void DevToolsManager::UnregisterDevToolsClientHostFor(
RenderViewHost* inspected_rvh) {
- DevToolsClientHost* host = GetDevToolsClientHostFor(inspected_rvh);
- if (!host)
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ inspected_rvh);
+ UnregisterDevToolsClientHostFor(agent_host);
+}
+
+void DevToolsManager::UnregisterDevToolsClientHostFor(
+ DevToolsAgentHost* agent_host) {
+ DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host);
+ if (!client_host)
return;
- UnbindClientHost(inspected_rvh, host);
- host->InspectedTabClosing();
+ UnbindClientHost(agent_host, client_host);
+ client_host->InspectedTabClosing();
}
void DevToolsManager::OnNavigatingToPendingEntry(RenderViewHost* rvh,
@@ -182,16 +187,18 @@ void DevToolsManager::TabReplaced(TabContents* old_tab,
}
int DevToolsManager::DetachClientHost(RenderViewHost* from_rvh) {
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(from_rvh);
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ from_rvh);
+ DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host);
if (!client_host)
return -1;
int cookie = last_orphan_cookie_++;
orphan_client_hosts_[cookie] =
std::pair<DevToolsClientHost*, DevToolsRuntimeProperties>(
- client_host, runtime_properties_map_[from_rvh]);
+ client_host, runtime_properties_map_[agent_host]);
- UnbindClientHost(from_rvh, client_host);
+ UnbindClientHost(agent_host, client_host);
return cookie;
}
@@ -203,82 +210,87 @@ void DevToolsManager::AttachClientHost(int client_host_cookie,
return;
DevToolsClientHost* client_host = (*it).second.first;
- BindClientHost(to_rvh, client_host, (*it).second.second);
- SendAttachToAgent(to_rvh);
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ to_rvh);
+ BindClientHost(agent_host, client_host, (*it).second.second);
+ SendAttachToAgent(agent_host);
orphan_client_hosts_.erase(client_host_cookie);
}
-void DevToolsManager::SendAttachToAgent(RenderViewHost* inspected_rvh) {
- if (inspected_rvh) {
- ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies(
- inspected_rvh->process()->id());
-
- DevToolsRuntimeProperties properties;
- RuntimePropertiesMap::iterator it =
- runtime_properties_map_.find(inspected_rvh);
- if (it != runtime_properties_map_.end()) {
- properties = DevToolsRuntimeProperties(it->second.begin(),
- it->second.end());
- }
- inspected_rvh->Send(new DevToolsAgentMsg_Attach(
- inspected_rvh->routing_id(),
- properties));
+void DevToolsManager::SendAttachToAgent(DevToolsAgentHost* agent_host) {
+ DevToolsRuntimeProperties properties;
+ RuntimePropertiesMap::iterator it =
+ runtime_properties_map_.find(agent_host);
+ if (it != runtime_properties_map_.end()) {
+ properties = DevToolsRuntimeProperties(it->second.begin(),
+ it->second.end());
}
+ agent_host->SendMessageToAgent(new DevToolsAgentMsg_Attach(
+ MSG_ROUTING_NONE,
+ properties));
}
-void DevToolsManager::SendDetachToAgent(RenderViewHost* inspected_rvh) {
- if (inspected_rvh) {
- inspected_rvh->Send(new DevToolsAgentMsg_Detach(
- inspected_rvh->routing_id()));
+void DevToolsManager::SendDetachToAgent(DevToolsAgentHost* agent_host) {
+ if (agent_host) {
+ agent_host->SendMessageToAgent(new DevToolsAgentMsg_Detach(
+ MSG_ROUTING_NONE));
}
}
void DevToolsManager::BindClientHost(
- RenderViewHost* inspected_rvh,
+ DevToolsAgentHost* agent_host,
DevToolsClientHost* client_host,
const DevToolsRuntimeProperties& runtime_properties) {
- DCHECK(inspected_rvh_to_client_host_.find(inspected_rvh) ==
- inspected_rvh_to_client_host_.end());
- DCHECK(client_host_to_inspected_rvh_.find(client_host) ==
- client_host_to_inspected_rvh_.end());
+ DCHECK(agent_to_client_host_.find(agent_host) ==
+ agent_to_client_host_.end());
+ DCHECK(client_to_agent_host_.find(client_host) ==
+ client_to_agent_host_.end());
- if (client_host_to_inspected_rvh_.empty()) {
+ if (client_to_agent_host_.empty()) {
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
NewRunnableFunction(&DevToolsNetLogObserver::Attach));
}
- inspected_rvh_to_client_host_[inspected_rvh] = client_host;
- client_host_to_inspected_rvh_[client_host] = inspected_rvh;
- runtime_properties_map_[inspected_rvh] = runtime_properties;
+ agent_to_client_host_[agent_host] = client_host;
+ client_to_agent_host_[client_host] = agent_host;
+ runtime_properties_map_[agent_host] = runtime_properties;
+ agent_host->set_close_listener(this);
+
+ int process_id = agent_host->GetRenderProcessId();
+ if (process_id != -1)
+ ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies(process_id);
}
-void DevToolsManager::UnbindClientHost(RenderViewHost* inspected_rvh,
+void DevToolsManager::UnbindClientHost(DevToolsAgentHost* agent_host,
DevToolsClientHost* client_host) {
- DCHECK(inspected_rvh_to_client_host_.find(inspected_rvh)->second ==
+ DCHECK(agent_host);
+ DCHECK(agent_to_client_host_.find(agent_host)->second ==
client_host);
- DCHECK(client_host_to_inspected_rvh_.find(client_host)->second ==
- inspected_rvh);
+ DCHECK(client_to_agent_host_.find(client_host)->second ==
+ agent_host);
+ agent_host->set_close_listener(NULL);
- inspected_rvh_to_client_host_.erase(inspected_rvh);
- client_host_to_inspected_rvh_.erase(client_host);
- runtime_properties_map_.erase(inspected_rvh);
+ agent_to_client_host_.erase(agent_host);
+ client_to_agent_host_.erase(client_host);
+ runtime_properties_map_.erase(agent_host);
- if (client_host_to_inspected_rvh_.empty()) {
+ if (client_to_agent_host_.empty()) {
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
NewRunnableFunction(&DevToolsNetLogObserver::Detach));
}
- SendDetachToAgent(inspected_rvh);
+ SendDetachToAgent(agent_host);
- int process_id = inspected_rvh->process()->id();
- for (InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.begin();
- it != inspected_rvh_to_client_host_.end();
+ int process_id = agent_host->GetRenderProcessId();
+ if (process_id == -1)
+ return;
+ for (AgentToClientHostMap::iterator it = agent_to_client_host_.begin();
+ it != agent_to_client_host_.end();
++it) {
- if (it->first->process()->id() == process_id)
+ if (it->first->GetRenderProcessId() == process_id)
return;
}
// We've disconnected from the last renderer -> revoke cookie permissions.
@@ -286,14 +298,14 @@ void DevToolsManager::UnbindClientHost(RenderViewHost* inspected_rvh,
}
void DevToolsManager::CloseAllClientHosts() {
- std::vector<RenderViewHost*> rhvs;
- for (InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.begin();
- it != inspected_rvh_to_client_host_.end(); ++it) {
- rhvs.push_back(it->first);
+ std::vector<DevToolsAgentHost*> agents;
+ for (AgentToClientHostMap::iterator it =
+ agent_to_client_host_.begin();
+ it != agent_to_client_host_.end(); ++it) {
+ agents.push_back(it->first);
}
- for (std::vector<RenderViewHost*>::iterator it = rhvs.begin();
- it != rhvs.end(); ++it) {
+ for (std::vector<DevToolsAgentHost*>::iterator it = agents.begin();
+ it != agents.end(); ++it) {
UnregisterDevToolsClientHostFor(*it);
}
}
« no previous file with comments | « content/browser/debugger/devtools_manager.h ('k') | content/browser/debugger/render_view_devtools_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698