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

Side by Side Diff: content/browser/devtools/render_frame_devtools_agent_host.cc

Issue 1437283003: [DevTools] filter any messages from previous session in DevToolsAgentHostImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 5 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/child_process_security_policy_impl.h" 10 #include "content/browser/child_process_security_policy_impl.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 public: 79 public:
80 FrameHostHolder( 80 FrameHostHolder(
81 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host); 81 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host);
82 ~FrameHostHolder(); 82 ~FrameHostHolder();
83 83
84 RenderFrameHostImpl* host() const { return host_; } 84 RenderFrameHostImpl* host() const { return host_; }
85 85
86 void Attach(); 86 void Attach();
87 void Reattach(FrameHostHolder* old); 87 void Reattach(FrameHostHolder* old);
88 void Detach(); 88 void Detach();
89 void DispatchProtocolMessage(int call_id, const std::string& message); 89 void DispatchProtocolMessage(int session_id,
90 int call_id,
91 const std::string& message);
90 void InspectElement(int x, int y); 92 void InspectElement(int x, int y);
91 void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); 93 void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk);
92 void Suspend(); 94 void Suspend();
93 void Resume(); 95 void Resume();
94 96
95 private: 97 private:
96 void GrantPolicy(); 98 void GrantPolicy();
97 void RevokePolicy(); 99 void RevokePolicy();
98 void SendMessageToClient(const std::string& message); 100 void SendMessageToClient(int session_id, const std::string& message);
99 101
100 RenderFrameDevToolsAgentHost* agent_; 102 RenderFrameDevToolsAgentHost* agent_;
101 RenderFrameHostImpl* host_; 103 RenderFrameHostImpl* host_;
102 bool attached_; 104 bool attached_;
103 bool suspended_; 105 bool suspended_;
104 DevToolsMessageChunkProcessor chunk_processor_; 106 DevToolsMessageChunkProcessor chunk_processor_;
105 std::vector<std::string> pending_messages_; 107 // <session_id, message>
106 std::map<int, std::string> sent_messages_; 108 std::vector<std::pair<int, std::string>> pending_messages_;
109 // <call_id> -> <session_id, message>
110 std::map<int, std::pair<int, std::string>> sent_messages_;
107 }; 111 };
108 112
109 RenderFrameDevToolsAgentHost::FrameHostHolder::FrameHostHolder( 113 RenderFrameDevToolsAgentHost::FrameHostHolder::FrameHostHolder(
110 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host) 114 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host)
111 : agent_(agent), 115 : agent_(agent),
112 host_(host), 116 host_(host),
113 attached_(false), 117 attached_(false),
114 suspended_(false), 118 suspended_(false),
115 chunk_processor_(base::Bind( 119 chunk_processor_(base::Bind(
116 &RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient, 120 &RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient,
117 base::Unretained(this))) { 121 base::Unretained(this))) {
118 DCHECK(agent_); 122 DCHECK(agent_);
119 DCHECK(host_); 123 DCHECK(host_);
120 } 124 }
121 125
122 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() { 126 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() {
123 if (attached_) 127 if (attached_)
124 RevokePolicy(); 128 RevokePolicy();
125 } 129 }
126 130
127 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() { 131 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() {
128 host_->Send(new DevToolsAgentMsg_Attach( 132 host_->Send(new DevToolsAgentMsg_Attach(
129 host_->GetRoutingID(), agent_->GetId())); 133 host_->GetRoutingID(), agent_->GetId(), agent_->session_id()));
130 GrantPolicy(); 134 GrantPolicy();
131 attached_ = true; 135 attached_ = true;
132 } 136 }
133 137
134 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach( 138 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach(
135 FrameHostHolder* old) { 139 FrameHostHolder* old) {
136 if (old) 140 if (old)
137 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie()); 141 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie());
138 host_->Send(new DevToolsAgentMsg_Reattach( 142 host_->Send(new DevToolsAgentMsg_Reattach(
139 host_->GetRoutingID(), agent_->GetId(), chunk_processor_.state_cookie())); 143 host_->GetRoutingID(), agent_->GetId(), agent_->session_id(),
144 chunk_processor_.state_cookie()));
140 if (old) { 145 if (old) {
141 for (const auto& pair : old->sent_messages_) 146 for (const auto& pair : old->sent_messages_) {
142 DispatchProtocolMessage(pair.first, pair.second); 147 DispatchProtocolMessage(pair.second.first, pair.first,
148 pair.second.second);
149 }
143 } 150 }
144 GrantPolicy(); 151 GrantPolicy();
145 attached_ = true; 152 attached_ = true;
146 } 153 }
147 154
148 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach() { 155 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach() {
149 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID())); 156 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID()));
150 RevokePolicy(); 157 RevokePolicy();
151 attached_ = false; 158 attached_ = false;
152 } 159 }
(...skipping 19 matching lines...) Expand all
172 } 179 }
173 } 180 }
174 181
175 // We are the last to disconnect from the renderer -> revoke permissions. 182 // We are the last to disconnect from the renderer -> revoke permissions.
176 if (!process_has_agents) { 183 if (!process_has_agents) {
177 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeReadRawCookies( 184 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeReadRawCookies(
178 process_host->GetID()); 185 process_host->GetID());
179 } 186 }
180 } 187 }
181 void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage( 188 void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage(
182 int call_id, const std::string& message) { 189 int session_id,
190 int call_id,
191 const std::string& message) {
183 host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( 192 host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend(
184 host_->GetRoutingID(), message)); 193 host_->GetRoutingID(), session_id, message));
185 sent_messages_[call_id] = message; 194 sent_messages_[call_id] = std::make_pair(session_id, message);
186 } 195 }
187 196
188 void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement( 197 void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement(
189 int x, int y) { 198 int x, int y) {
190 DCHECK(attached_); 199 DCHECK(attached_);
191 host_->Send(new DevToolsAgentMsg_InspectElement( 200 host_->Send(new DevToolsAgentMsg_InspectElement(
192 host_->GetRoutingID(), x, y)); 201 host_->GetRoutingID(), x, y));
193 } 202 }
194 203
195 void 204 void
196 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent( 205 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent(
197 const DevToolsMessageChunk& chunk) { 206 const DevToolsMessageChunk& chunk) {
198 chunk_processor_.ProcessChunkedMessageFromAgent(chunk); 207 chunk_processor_.ProcessChunkedMessageFromAgent(chunk);
199 } 208 }
200 209
201 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient( 210 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient(
211 int session_id,
202 const std::string& message) { 212 const std::string& message) {
203 sent_messages_.erase(chunk_processor_.last_call_id()); 213 sent_messages_.erase(chunk_processor_.last_call_id());
204 if (suspended_) 214 if (suspended_)
205 pending_messages_.push_back(message); 215 pending_messages_.push_back(std::make_pair(session_id, message));
206 else 216 else
207 agent_->SendMessageToClient(message); 217 agent_->SendMessageToClient(session_id, message);
208 } 218 }
209 219
210 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() { 220 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() {
211 suspended_ = true; 221 suspended_ = true;
212 } 222 }
213 223
214 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() { 224 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() {
215 suspended_ = false; 225 suspended_ = false;
216 for (const std::string& message : pending_messages_) 226 for (const auto& pair : pending_messages_)
217 agent_->SendMessageToClient(message); 227 agent_->SendMessageToClient(pair.first, pair.second);
218 std::vector<std::string> empty; 228 std::vector<std::pair<int, std::string>> empty;
219 pending_messages_.swap(empty); 229 pending_messages_.swap(empty);
220 } 230 }
221 231
222 // RenderFrameDevToolsAgentHost ------------------------------------------------ 232 // RenderFrameDevToolsAgentHost ------------------------------------------------
223 233
224 scoped_refptr<DevToolsAgentHost> 234 scoped_refptr<DevToolsAgentHost>
225 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) { 235 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) {
226 while (frame_host && !ShouldCreateDevToolsFor(frame_host)) 236 while (frame_host && !ShouldCreateDevToolsFor(frame_host))
227 frame_host = frame_host->GetParent(); 237 frame_host = frame_host->GetParent();
228 DCHECK(frame_host); 238 DCHECK(frame_host);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 network_handler_(new devtools::network::NetworkHandler()), 329 network_handler_(new devtools::network::NetworkHandler()),
320 page_handler_(nullptr), 330 page_handler_(nullptr),
321 security_handler_(nullptr), 331 security_handler_(nullptr),
322 service_worker_handler_( 332 service_worker_handler_(
323 new devtools::service_worker::ServiceWorkerHandler()), 333 new devtools::service_worker::ServiceWorkerHandler()),
324 tracing_handler_(new devtools::tracing::TracingHandler( 334 tracing_handler_(new devtools::tracing::TracingHandler(
325 devtools::tracing::TracingHandler::Renderer, 335 devtools::tracing::TracingHandler::Renderer,
326 GetIOContext())), 336 GetIOContext())),
327 emulation_handler_(nullptr), 337 emulation_handler_(nullptr),
328 frame_trace_recorder_(nullptr), 338 frame_trace_recorder_(nullptr),
329 protocol_handler_(new DevToolsProtocolHandler( 339 protocol_handler_(new DevToolsProtocolHandler(this)),
330 this,
331 base::Bind(&RenderFrameDevToolsAgentHost::SendMessageToClient,
332 base::Unretained(this)))),
333 current_frame_crashed_(false) { 340 current_frame_crashed_(false) {
334 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); 341 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
335 dispatcher->SetDOMHandler(dom_handler_.get()); 342 dispatcher->SetDOMHandler(dom_handler_.get());
336 dispatcher->SetInputHandler(input_handler_.get()); 343 dispatcher->SetInputHandler(input_handler_.get());
337 dispatcher->SetInspectorHandler(inspector_handler_.get()); 344 dispatcher->SetInspectorHandler(inspector_handler_.get());
338 dispatcher->SetIOHandler(io_handler_.get()); 345 dispatcher->SetIOHandler(io_handler_.get());
339 dispatcher->SetNetworkHandler(network_handler_.get()); 346 dispatcher->SetNetworkHandler(network_handler_.get());
340 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get()); 347 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get());
341 dispatcher->SetTracingHandler(tracing_handler_.get()); 348 dispatcher->SetTracingHandler(tracing_handler_.get());
342 349
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 if (current_) 424 if (current_)
418 current_->Detach(); 425 current_->Detach();
419 if (pending_) 426 if (pending_)
420 pending_->Detach(); 427 pending_->Detach();
421 OnClientDetached(); 428 OnClientDetached();
422 } 429 }
423 430
424 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( 431 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
425 const std::string& message) { 432 const std::string& message) {
426 int call_id = 0; 433 int call_id = 0;
427 if (protocol_handler_->HandleOptionalMessage(message, &call_id)) 434 if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id))
428 return true; 435 return true;
429 436
430 if (current_) 437 if (current_)
431 current_->DispatchProtocolMessage(call_id, message); 438 current_->DispatchProtocolMessage(session_id(), call_id, message);
432 if (pending_) 439 if (pending_)
433 pending_->DispatchProtocolMessage(call_id, message); 440 pending_->DispatchProtocolMessage(session_id(), call_id, message);
434 return true; 441 return true;
435 } 442 }
436 443
437 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { 444 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) {
438 if (current_) 445 if (current_)
439 current_->InspectElement(x, y); 446 current_->InspectElement(x, y);
440 if (pending_) 447 if (pending_)
441 pending_->InspectElement(x, y); 448 pending_->InspectElement(x, y);
442 } 449 }
443 450
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 RenderFrameHost* host) { 748 RenderFrameHost* host) {
742 return (current_ && current_->host() == host) || 749 return (current_ && current_->host() == host) ||
743 (pending_ && pending_->host() == host); 750 (pending_ && pending_->host() == host);
744 } 751 }
745 752
746 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 753 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
747 return current_ && current_->host()->GetParent(); 754 return current_ && current_->host()->GetParent();
748 } 755 }
749 756
750 } // namespace content 757 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/protocol/tracing_handler.cc ('k') | content/browser/devtools/worker_devtools_agent_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698