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 033f2f18bd90375c7800e59f529ff51db66ebf56..df95b806e2411bd48d95b616eaaa544ea6df17fa 100644 |
--- a/content/browser/devtools/devtools_agent_host_impl.cc |
+++ b/content/browser/devtools/devtools_agent_host_impl.cc |
@@ -102,7 +102,11 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::Create( |
return new ForwardingAgentHost(delegate); |
} |
-void DevToolsAgentHostImpl::AttachClient(DevToolsAgentHostClient* client) { |
+bool DevToolsAgentHostImpl::InnerAttach(DevToolsAgentHostClient* client, |
+ bool force) { |
+ if (client_ && !force) |
+ return false; |
+ |
scoped_refptr<DevToolsAgentHostImpl> protect(this); |
++session_id_; |
if (client_) { |
@@ -111,15 +115,33 @@ void DevToolsAgentHostImpl::AttachClient(DevToolsAgentHostClient* client) { |
} |
client_ = client; |
Attach(); |
+ return true; |
} |
-void DevToolsAgentHostImpl::DetachClient() { |
- if (!client_) |
- return; |
+bool DevToolsAgentHostImpl::AttachClient(DevToolsAgentHostClient* client) { |
+ return InnerAttach(client, false); |
+} |
+ |
+void DevToolsAgentHostImpl::ForceAttachClient(DevToolsAgentHostClient* client) { |
+ InnerAttach(client, true); |
+} |
+ |
+bool DevToolsAgentHostImpl::DetachClient(DevToolsAgentHostClient* client) { |
+ if (!client_ || client_ != client) |
+ return false; |
scoped_refptr<DevToolsAgentHostImpl> protect(this); |
client_ = NULL; |
InnerDetach(); |
+ return true; |
+} |
+ |
+bool DevToolsAgentHostImpl::DispatchProtocolMessage( |
+ DevToolsAgentHostClient* client, |
+ const std::string& message) { |
+ if (!client_ || client_ != client) |
+ return false; |
+ return DispatchProtocolMessage(message); |
} |
void DevToolsAgentHostImpl::InnerDetach() { |