Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: content/browser/devtools/render_frame_devtools_agent_host.cc

Issue 1408363004: [DevTools] Filter any messages from previous sessions in DevToolsAgentHostImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698