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

Side by Side 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 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 host_->Send(new DevToolsAgentMsg_InspectElement( 199 host_->Send(new DevToolsAgentMsg_InspectElement(
191 host_->GetRoutingID(), agent_->GetId(), x, y)); 200 host_->GetRoutingID(), agent_->GetId(), agent_->session_id(), x, y));
192 } 201 }
193 202
194 void 203 void
195 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent( 204 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent(
196 const DevToolsMessageChunk& chunk) { 205 const DevToolsMessageChunk& chunk) {
197 chunk_processor_.ProcessChunkedMessageFromAgent(chunk); 206 chunk_processor_.ProcessChunkedMessageFromAgent(chunk);
198 } 207 }
199 208
200 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient( 209 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient(
210 int session_id,
201 const std::string& message) { 211 const std::string& message) {
202 sent_messages_.erase(chunk_processor_.last_call_id()); 212 sent_messages_.erase(chunk_processor_.last_call_id());
203 if (suspended_) 213 if (suspended_)
204 pending_messages_.push_back(message); 214 pending_messages_.push_back(std::make_pair(session_id, message));
205 else 215 else
206 agent_->SendMessageToClient(message); 216 agent_->SendMessageToClient(session_id, message);
207 } 217 }
208 218
209 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() { 219 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() {
210 suspended_ = true; 220 suspended_ = true;
211 } 221 }
212 222
213 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() { 223 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() {
214 suspended_ = false; 224 suspended_ = false;
215 for (const std::string& message : pending_messages_) 225 for (const auto& pair : pending_messages_)
216 agent_->SendMessageToClient(message); 226 agent_->SendMessageToClient(pair.first, pair.second);
217 std::vector<std::string> empty; 227 std::vector<std::pair<int, std::string>> empty;
218 pending_messages_.swap(empty); 228 pending_messages_.swap(empty);
219 } 229 }
220 230
221 // RenderFrameDevToolsAgentHost ------------------------------------------------ 231 // RenderFrameDevToolsAgentHost ------------------------------------------------
222 232
223 scoped_refptr<DevToolsAgentHost> 233 scoped_refptr<DevToolsAgentHost>
224 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) { 234 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) {
225 while (frame_host && !ShouldCreateDevToolsFor(frame_host)) 235 while (frame_host && !ShouldCreateDevToolsFor(frame_host))
226 frame_host = frame_host->GetParent(); 236 frame_host = frame_host->GetParent();
227 DCHECK(frame_host); 237 DCHECK(frame_host);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 network_handler_(new devtools::network::NetworkHandler()), 328 network_handler_(new devtools::network::NetworkHandler()),
319 page_handler_(nullptr), 329 page_handler_(nullptr),
320 security_handler_(nullptr), 330 security_handler_(nullptr),
321 service_worker_handler_( 331 service_worker_handler_(
322 new devtools::service_worker::ServiceWorkerHandler()), 332 new devtools::service_worker::ServiceWorkerHandler()),
323 tracing_handler_(new devtools::tracing::TracingHandler( 333 tracing_handler_(new devtools::tracing::TracingHandler(
324 devtools::tracing::TracingHandler::Renderer, 334 devtools::tracing::TracingHandler::Renderer,
325 GetIOContext())), 335 GetIOContext())),
326 emulation_handler_(nullptr), 336 emulation_handler_(nullptr),
327 frame_trace_recorder_(nullptr), 337 frame_trace_recorder_(nullptr),
328 protocol_handler_(new DevToolsProtocolHandler( 338 protocol_handler_(new DevToolsProtocolHandler(this)),
329 this,
330 base::Bind(&RenderFrameDevToolsAgentHost::SendMessageToClient,
331 base::Unretained(this)))),
332 current_frame_crashed_(false) { 339 current_frame_crashed_(false) {
333 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); 340 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
334 dispatcher->SetDOMHandler(dom_handler_.get()); 341 dispatcher->SetDOMHandler(dom_handler_.get());
335 dispatcher->SetInputHandler(input_handler_.get()); 342 dispatcher->SetInputHandler(input_handler_.get());
336 dispatcher->SetInspectorHandler(inspector_handler_.get()); 343 dispatcher->SetInspectorHandler(inspector_handler_.get());
337 dispatcher->SetIOHandler(io_handler_.get()); 344 dispatcher->SetIOHandler(io_handler_.get());
338 dispatcher->SetNetworkHandler(network_handler_.get()); 345 dispatcher->SetNetworkHandler(network_handler_.get());
339 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get()); 346 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get());
340 dispatcher->SetTracingHandler(tracing_handler_.get()); 347 dispatcher->SetTracingHandler(tracing_handler_.get());
341 348
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 if (current_) 423 if (current_)
417 current_->Detach(); 424 current_->Detach();
418 if (pending_) 425 if (pending_)
419 pending_->Detach(); 426 pending_->Detach();
420 OnClientDetached(); 427 OnClientDetached();
421 } 428 }
422 429
423 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( 430 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
424 const std::string& message) { 431 const std::string& message) {
425 int call_id = 0; 432 int call_id = 0;
426 if (protocol_handler_->HandleOptionalMessage(message, &call_id)) 433 if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id))
427 return true; 434 return true;
428 435
429 if (current_) 436 if (current_)
430 current_->DispatchProtocolMessage(call_id, message); 437 current_->DispatchProtocolMessage(session_id(), call_id, message);
431 if (pending_) 438 if (pending_)
432 pending_->DispatchProtocolMessage(call_id, message); 439 pending_->DispatchProtocolMessage(session_id(), call_id, message);
433 return true; 440 return true;
434 } 441 }
435 442
436 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { 443 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) {
437 if (current_) 444 if (current_)
438 current_->InspectElement(x, y); 445 current_->InspectElement(x, y);
439 if (pending_) 446 if (pending_)
440 pending_->InspectElement(x, y); 447 pending_->InspectElement(x, y);
441 } 448 }
442 449
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 RenderFrameHost* host) { 747 RenderFrameHost* host) {
741 return (current_ && current_->host() == host) || 748 return (current_ && current_->host() == host) ||
742 (pending_ && pending_->host() == host); 749 (pending_ && pending_->host() == host);
743 } 750 }
744 751
745 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 752 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
746 return current_ && current_->host()->GetParent(); 753 return current_ && current_->host()->GetParent();
747 } 754 }
748 755
749 } // namespace content 756 } // 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