Chromium Code Reviews| 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 4d935519c07e0fa2ee919e11ee9ec83bf5e751c8..401a7eba7b41b39b2a2ef1eab3618146262809e0 100644 |
| --- a/content/browser/devtools/devtools_agent_host_impl.cc |
| +++ b/content/browser/devtools/devtools_agent_host_impl.cc |
| @@ -76,8 +76,7 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForWorker( |
| } |
| DevToolsAgentHostImpl::DevToolsAgentHostImpl() |
| - : id_(base::GenerateGUID()), |
| - client_(NULL) { |
| + : id_(base::GenerateGUID()), session_id_(0), client_(NULL) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| g_instances.Get()[id_] = this; |
| } |
| @@ -106,6 +105,7 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::Create( |
| void DevToolsAgentHostImpl::AttachClient(DevToolsAgentHostClient* client) { |
| scoped_refptr<DevToolsAgentHostImpl> protect(this); |
| + ++session_id_; |
| if (client_) { |
| client_->AgentHostClosed(this, true); |
| InnerDetach(); |
| @@ -164,9 +164,13 @@ void DevToolsAgentHostImpl::HostClosed() { |
| client->AgentHostClosed(this, false); |
| } |
| -void DevToolsAgentHostImpl::SendMessageToClient(const std::string& message) { |
| +void DevToolsAgentHostImpl::SendMessageToClient(int session_id, |
| + const std::string& message) { |
| if (!client_) |
| return; |
| + // Filter answer for message that was sent before reattach. |
|
dgozman
2015/11/06 22:57:27
Filter any messages from previous sessions.
kozy
2015/11/07 01:54:43
Done.
|
| + if (session_id && session_id != session_id_) |
|
dgozman
2015/11/06 22:57:27
Would be great to kill "zero is always valid" case
kozy
2015/11/07 01:54:43
Done.
|
| + return; |
| client_->DispatchProtocolMessage(this, message); |
| } |
| @@ -249,7 +253,7 @@ void DevToolsMessageChunkProcessor::ProcessChunkedMessageFromAgent( |
| if (chunk.is_first && chunk.is_last) { |
| CHECK(message_buffer_size_ == 0); |
| - callback_.Run(chunk.data); |
| + callback_.Run(chunk.session_id, chunk.data); |
| return; |
| } |
| @@ -265,7 +269,7 @@ void DevToolsMessageChunkProcessor::ProcessChunkedMessageFromAgent( |
| if (chunk.is_last) { |
| CHECK(message_buffer_.size() == message_buffer_size_); |
| - callback_.Run(message_buffer_); |
| + callback_.Run(chunk.session_id, message_buffer_); |
| message_buffer_ = std::string(); |
| message_buffer_size_ = 0; |
| } |