Index: content/browser/devtools/devtools_manager_impl.cc |
diff --git a/content/browser/devtools/devtools_manager_impl.cc b/content/browser/devtools/devtools_manager_impl.cc |
index 4ae34da1c3f59683811fd5b89f42b09910709e06..757e517d4d39872f828fb77c7adac3424bf1f1fe 100644 |
--- a/content/browser/devtools/devtools_manager_impl.cc |
+++ b/content/browser/devtools/devtools_manager_impl.cc |
@@ -36,10 +36,14 @@ DevToolsManagerImpl::~DevToolsManagerImpl() { |
DCHECK(client_to_agent_host_.empty()); |
} |
-DevToolsClientHost* DevToolsManagerImpl::GetDevToolsClientHostFor( |
- DevToolsAgentHost* agent_host) { |
+bool DevToolsManagerImpl::IsAttached(DevToolsAgentHost* agent_host) { |
DevToolsAgentHostImpl* agent_host_impl = |
static_cast<DevToolsAgentHostImpl*>(agent_host); |
+ return !!GetDevToolsClientHostFor(agent_host_impl); |
+} |
+ |
+DevToolsClientHost* DevToolsManagerImpl::GetDevToolsClientHostFor( |
+ DevToolsAgentHostImpl* agent_host_impl) { |
AgentToClientHostMap::iterator it = |
agent_to_client_host_.find(agent_host_impl); |
if (it != agent_to_client_host_.end()) |
@@ -60,6 +64,12 @@ void DevToolsManagerImpl::RegisterDevToolsClientHostFor( |
DevToolsClientHost* client_host) { |
DevToolsAgentHostImpl* agent_host_impl = |
static_cast<DevToolsAgentHostImpl*>(agent_host); |
+ DevToolsClientHost* old_client_host = |
+ GetDevToolsClientHostFor(agent_host_impl); |
+ if (old_client_host) { |
+ old_client_host->ReplacedWithAnotherClient(); |
pfeldman
2013/03/29 14:59:23
Ok. Only DevToolsWindow is allowed to kick other c
Vladislav Kaznacheev
2013/03/29 15:15:35
It was doing it through a public API which anyone
|
+ UnregisterDevToolsClientHostFor(agent_host_impl); |
+ } |
BindClientHost(agent_host_impl, client_host); |
agent_host_impl->Attach(); |
} |
@@ -79,7 +89,9 @@ bool DevToolsManagerImpl::DispatchOnInspectorBackend( |
void DevToolsManagerImpl::DispatchOnInspectorFrontend( |
DevToolsAgentHost* agent_host, |
const std::string& message) { |
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host); |
+ DevToolsAgentHostImpl* agent_host_impl = |
+ static_cast<DevToolsAgentHostImpl*>(agent_host); |
+ DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host_impl); |
if (!client_host) { |
// Client window was closed while there were messages |
// being sent to it. |
@@ -98,17 +110,16 @@ void DevToolsManagerImpl::ClientHostClosing(DevToolsClientHost* client_host) { |
} |
void DevToolsManagerImpl::AgentHostClosing(DevToolsAgentHostImpl* agent_host) { |
- UnregisterDevToolsClientHostFor(agent_host); |
+ UnregisterDevToolsClientHostFor( |
+ static_cast<DevToolsAgentHostImpl*>(agent_host)); |
} |
void DevToolsManagerImpl::UnregisterDevToolsClientHostFor( |
- DevToolsAgentHost* agent_host) { |
+ DevToolsAgentHostImpl* agent_host) { |
DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host); |
if (!client_host) |
return; |
- DevToolsAgentHostImpl* agent_host_impl = |
- static_cast<DevToolsAgentHostImpl*>(agent_host); |
- UnbindClientHost(agent_host_impl, client_host); |
+ UnbindClientHost(agent_host, client_host); |
client_host->InspectedContentsClosing(); |
} |
@@ -156,13 +167,13 @@ void DevToolsManagerImpl::UnbindClientHost(DevToolsAgentHostImpl* agent_host, |
} |
void DevToolsManagerImpl::CloseAllClientHosts() { |
- std::vector<DevToolsAgentHost*> agents; |
+ std::vector<DevToolsAgentHostImpl*> 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<DevToolsAgentHost*>::iterator it = agents.begin(); |
+ for (std::vector<DevToolsAgentHostImpl*>::iterator it = agents.begin(); |
it != agents.end(); ++it) { |
UnregisterDevToolsClientHostFor(*it); |
} |