Index: content/browser/devtools/devtools_agent_host_impl.cc |
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc |
index f09727799a94ab48dce47cb8ef1b775850268e2c..a23f00b5667a78b75d9b899a6b6392ed057bb703 100644 |
--- a/content/browser/devtools/devtools_agent_host_impl.cc |
+++ b/content/browser/devtools/devtools_agent_host_impl.cc |
@@ -106,8 +106,7 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForWorker( |
DevToolsAgentHostImpl::DevToolsAgentHostImpl(const std::string& id) |
: id_(id), |
- last_session_id_(0), |
- client_(NULL) { |
+ last_session_id_(0) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
} |
@@ -137,68 +136,64 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::Forward( |
return new ForwardingAgentHost(id, std::move(delegate)); |
} |
-bool DevToolsAgentHostImpl::InnerAttach(DevToolsAgentHostClient* client, |
- bool force) { |
- if (client_ && !force) |
+bool DevToolsAgentHostImpl::InnerAttachClient(DevToolsAgentHostClient* client, |
+ bool force) { |
+ if (session_ && !force) |
return false; |
scoped_refptr<DevToolsAgentHostImpl> protect(this); |
- if (client_) { |
- client_->AgentHostClosed(this, true); |
- InnerDetach(); |
- } |
- client_ = client; |
- session_.reset(new DevToolsSession(this, ++last_session_id_)); |
- Attach(); |
+ if (session_) |
+ ForceDetach(true); |
+ session_.reset(new DevToolsSession(this, client, ++last_session_id_)); |
+ AttachSession(session_.get()); |
NotifyAttached(); |
return true; |
} |
bool DevToolsAgentHostImpl::AttachClient(DevToolsAgentHostClient* client) { |
- return InnerAttach(client, false); |
+ return InnerAttachClient(client, false); |
} |
void DevToolsAgentHostImpl::ForceAttachClient(DevToolsAgentHostClient* client) { |
- InnerAttach(client, true); |
+ InnerAttachClient(client, true); |
} |
bool DevToolsAgentHostImpl::DetachClient(DevToolsAgentHostClient* client) { |
- if (!client_ || client_ != client) |
+ if (!session_ || session_->client() != client) |
return false; |
scoped_refptr<DevToolsAgentHostImpl> protect(this); |
- client_ = NULL; |
- InnerDetach(); |
+ InnerDetachClient(); |
return true; |
} |
bool DevToolsAgentHostImpl::DispatchProtocolMessage( |
DevToolsAgentHostClient* client, |
const std::string& message) { |
- if (!client_ || client_ != client) |
+ if (!session_ || session_->client() != client) |
return false; |
- return DispatchProtocolMessage(message); |
+ return DispatchProtocolMessage(session_.get(), message); |
} |
-void DevToolsAgentHostImpl::InnerDetach() { |
- session_->ResetDispatcher(); |
- Detach(); |
- io_context_.DiscardAllStreams(); |
+void DevToolsAgentHostImpl::InnerDetachClient() { |
+ int session_id = session_->session_id(); |
session_.reset(); |
+ DetachSession(session_id); |
+ io_context_.DiscardAllStreams(); |
NotifyDetached(); |
} |
bool DevToolsAgentHostImpl::IsAttached() { |
- return !!client_; |
+ return !!session_; |
} |
void DevToolsAgentHostImpl::InspectElement( |
DevToolsAgentHostClient* client, |
int x, |
int y) { |
- if (!client_ || client_ != client) |
+ if (!session_ || session_->client() != client) |
return; |
- InspectElement(x, y); |
+ InspectElement(session_.get(), x, y); |
} |
std::string DevToolsAgentHostImpl::GetId() { |
@@ -248,29 +243,28 @@ bool DevToolsAgentHostImpl::Inspect() { |
return false; |
} |
-void DevToolsAgentHostImpl::HostClosed() { |
- if (!client_) |
+void DevToolsAgentHostImpl::ForceDetach(bool replaced) { |
+ if (!session_) |
return; |
- |
scoped_refptr<DevToolsAgentHostImpl> protect(this); |
// Clear |client_| before notifying it. |
- DevToolsAgentHostClient* client = client_; |
- client_ = NULL; |
- client->AgentHostClosed(this, false); |
- InnerDetach(); |
+ DevToolsAgentHostClient* client = session_->client(); |
+ InnerDetachClient(); |
+ client->AgentHostClosed(this, replaced); |
} |
-void DevToolsAgentHostImpl::InspectElement(int x, int y) { |
+void DevToolsAgentHostImpl::InspectElement( |
+ DevToolsSession* session, |
+ int x, |
+ int y) { |
} |
void DevToolsAgentHostImpl::SendMessageToClient(int session_id, |
const std::string& message) { |
- if (!client_) |
- return; |
// Filter any messages from previous sessions. |
if (!session_ || session_id != session_->session_id()) |
return; |
- client_->DispatchProtocolMessage(this, message); |
+ session_->client()->DispatchProtocolMessage(this, message); |
} |
// static |
@@ -283,14 +277,7 @@ void DevToolsAgentHost::DetachAllClients() { |
Instances copy = g_instances.Get(); |
for (Instances::iterator it(copy.begin()); it != copy.end(); ++it) { |
DevToolsAgentHostImpl* agent_host = it->second; |
- if (agent_host->client_) { |
- scoped_refptr<DevToolsAgentHostImpl> protect(agent_host); |
- // Clear |client_| before notifying it. |
- DevToolsAgentHostClient* client = agent_host->client_; |
- agent_host->client_ = NULL; |
- client->AgentHostClosed(agent_host, true); |
- agent_host->InnerDetach(); |
- } |
+ agent_host->ForceDetach(true); |
} |
} |