Chromium Code Reviews| Index: content/browser/devtools/render_frame_devtools_agent_host.cc |
| diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc |
| index f2c387c07b17efb60e30da5b32830adecff63b9a..372c40f1527ddc9ebbfee148e906ac184c58741d 100644 |
| --- a/content/browser/devtools/render_frame_devtools_agent_host.cc |
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc |
| @@ -86,7 +86,9 @@ class RenderFrameDevToolsAgentHost::FrameHostHolder { |
| void Attach(); |
| void Reattach(FrameHostHolder* old); |
| void Detach(); |
| - void DispatchProtocolMessage(int call_id, const std::string& message); |
| + void DispatchProtocolMessage(int session_id, |
| + int call_id, |
| + const std::string& message); |
| void InspectElement(int x, int y); |
| void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); |
| void Suspend(); |
| @@ -95,15 +97,17 @@ class RenderFrameDevToolsAgentHost::FrameHostHolder { |
| private: |
| void GrantPolicy(); |
| void RevokePolicy(); |
| - void SendMessageToClient(const std::string& message); |
| + void SendMessageToClient(int session_id, const std::string& message); |
| RenderFrameDevToolsAgentHost* agent_; |
| RenderFrameHostImpl* host_; |
| bool attached_; |
| bool suspended_; |
| DevToolsMessageChunkProcessor chunk_processor_; |
| - std::vector<std::string> pending_messages_; |
| - std::map<int, std::string> sent_messages_; |
| + // <message, session_id> |
| + std::vector<std::pair<std::string, int>> pending_messages_; |
| + // <call_id> -> <message, session_id> |
| + std::map<int, std::pair<std::string, int>> sent_messages_; |
| }; |
| RenderFrameDevToolsAgentHost::FrameHostHolder::FrameHostHolder( |
| @@ -126,7 +130,7 @@ RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() { |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() { |
| host_->Send(new DevToolsAgentMsg_Attach( |
| - host_->GetRoutingID(), agent_->GetId())); |
| + host_->GetRoutingID(), agent_->GetId(), agent_->session_id())); |
| GrantPolicy(); |
| attached_ = true; |
| } |
| @@ -136,10 +140,12 @@ void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach( |
| if (old) |
| chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie()); |
| host_->Send(new DevToolsAgentMsg_Reattach( |
| - host_->GetRoutingID(), agent_->GetId(), chunk_processor_.state_cookie())); |
| + host_->GetRoutingID(), agent_->GetId(), agent_->session_id(), |
| + chunk_processor_.state_cookie())); |
| if (old) { |
| for (const auto& pair : old->sent_messages_) |
|
dgozman
2015/11/07 02:28:40
{}
kozy
2015/11/07 03:02:35
Done.
|
| - DispatchProtocolMessage(pair.first, pair.second); |
| + DispatchProtocolMessage(pair.second.second, pair.first, |
| + pair.second.first); |
| } |
| GrantPolicy(); |
| attached_ = true; |
| @@ -179,16 +185,18 @@ void RenderFrameDevToolsAgentHost::FrameHostHolder::RevokePolicy() { |
| } |
| } |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage( |
| - int call_id, const std::string& message) { |
| + int session_id, |
| + int call_id, |
| + const std::string& message) { |
| host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( |
| - host_->GetRoutingID(), message)); |
| - sent_messages_[call_id] = message; |
| + host_->GetRoutingID(), session_id, message)); |
| + sent_messages_[call_id] = std::make_pair(message, session_id); |
| } |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement( |
| int x, int y) { |
| host_->Send(new DevToolsAgentMsg_InspectElement( |
| - host_->GetRoutingID(), agent_->GetId(), x, y)); |
| + host_->GetRoutingID(), agent_->GetId(), agent_->session_id(), x, y)); |
| } |
| void |
| @@ -198,12 +206,13 @@ RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent( |
| } |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient( |
| + int session_id, |
| const std::string& message) { |
| sent_messages_.erase(chunk_processor_.last_call_id()); |
| if (suspended_) |
| - pending_messages_.push_back(message); |
| + pending_messages_.push_back(make_pair(message, session_id)); |
| else |
| - agent_->SendMessageToClient(message); |
| + agent_->SendMessageToClient(session_id, message); |
| } |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() { |
| @@ -212,9 +221,9 @@ void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() { |
| void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() { |
| suspended_ = false; |
| - for (const std::string& message : pending_messages_) |
| - agent_->SendMessageToClient(message); |
| - std::vector<std::string> empty; |
| + for (const auto& pair : pending_messages_) |
| + agent_->SendMessageToClient(pair.second, pair.first); |
|
dgozman
2015/11/07 02:28:40
Let's reverse the pair order.
kozy
2015/11/07 03:02:35
Done.
|
| + std::vector<std::pair<std::string, int>> empty; |
| pending_messages_.swap(empty); |
| } |
| @@ -325,10 +334,7 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( |
| GetIOContext())), |
| emulation_handler_(nullptr), |
| frame_trace_recorder_(nullptr), |
| - protocol_handler_(new DevToolsProtocolHandler( |
| - this, |
| - base::Bind(&RenderFrameDevToolsAgentHost::SendMessageToClient, |
| - base::Unretained(this)))), |
| + protocol_handler_(new DevToolsProtocolHandler(this, this)), |
| current_frame_crashed_(false) { |
| DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); |
| dispatcher->SetDOMHandler(dom_handler_.get()); |
| @@ -423,13 +429,13 @@ void RenderFrameDevToolsAgentHost::Detach() { |
| bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( |
| const std::string& message) { |
| int call_id = 0; |
| - if (protocol_handler_->HandleOptionalMessage(message, &call_id)) |
| + if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id)) |
| return true; |
| if (current_) |
| - current_->DispatchProtocolMessage(call_id, message); |
| + current_->DispatchProtocolMessage(session_id(), call_id, message); |
| if (pending_) |
| - pending_->DispatchProtocolMessage(call_id, message); |
| + pending_->DispatchProtocolMessage(session_id(), call_id, message); |
| return true; |
| } |