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

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

Issue 1437993003: Revert of [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 session_id, 89 void DispatchProtocolMessage(int call_id, const std::string& message);
90 int call_id,
91 const std::string& message);
92 void InspectElement(int x, int y); 90 void InspectElement(int x, int y);
93 void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); 91 void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk);
94 void Suspend(); 92 void Suspend();
95 void Resume(); 93 void Resume();
96 94
97 private: 95 private:
98 void GrantPolicy(); 96 void GrantPolicy();
99 void RevokePolicy(); 97 void RevokePolicy();
100 void SendMessageToClient(int session_id, const std::string& message); 98 void SendMessageToClient(const std::string& message);
101 99
102 RenderFrameDevToolsAgentHost* agent_; 100 RenderFrameDevToolsAgentHost* agent_;
103 RenderFrameHostImpl* host_; 101 RenderFrameHostImpl* host_;
104 bool attached_; 102 bool attached_;
105 bool suspended_; 103 bool suspended_;
106 DevToolsMessageChunkProcessor chunk_processor_; 104 DevToolsMessageChunkProcessor chunk_processor_;
107 // <session_id, message> 105 std::vector<std::string> pending_messages_;
108 std::vector<std::pair<int, std::string>> pending_messages_; 106 std::map<int, std::string> sent_messages_;
109 // <call_id> -> <session_id, message>
110 std::map<int, std::pair<int, std::string>> sent_messages_;
111 }; 107 };
112 108
113 RenderFrameDevToolsAgentHost::FrameHostHolder::FrameHostHolder( 109 RenderFrameDevToolsAgentHost::FrameHostHolder::FrameHostHolder(
114 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host) 110 RenderFrameDevToolsAgentHost* agent, RenderFrameHostImpl* host)
115 : agent_(agent), 111 : agent_(agent),
116 host_(host), 112 host_(host),
117 attached_(false), 113 attached_(false),
118 suspended_(false), 114 suspended_(false),
119 chunk_processor_(base::Bind( 115 chunk_processor_(base::Bind(
120 &RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient, 116 &RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient,
121 base::Unretained(this))) { 117 base::Unretained(this))) {
122 DCHECK(agent_); 118 DCHECK(agent_);
123 DCHECK(host_); 119 DCHECK(host_);
124 } 120 }
125 121
126 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() { 122 RenderFrameDevToolsAgentHost::FrameHostHolder::~FrameHostHolder() {
127 if (attached_) 123 if (attached_)
128 RevokePolicy(); 124 RevokePolicy();
129 } 125 }
130 126
131 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() { 127 void RenderFrameDevToolsAgentHost::FrameHostHolder::Attach() {
132 host_->Send(new DevToolsAgentMsg_Attach( 128 host_->Send(new DevToolsAgentMsg_Attach(
133 host_->GetRoutingID(), agent_->GetId(), agent_->session_id())); 129 host_->GetRoutingID(), agent_->GetId()));
134 GrantPolicy(); 130 GrantPolicy();
135 attached_ = true; 131 attached_ = true;
136 } 132 }
137 133
138 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach( 134 void RenderFrameDevToolsAgentHost::FrameHostHolder::Reattach(
139 FrameHostHolder* old) { 135 FrameHostHolder* old) {
140 if (old) 136 if (old)
141 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie()); 137 chunk_processor_.set_state_cookie(old->chunk_processor_.state_cookie());
142 host_->Send(new DevToolsAgentMsg_Reattach( 138 host_->Send(new DevToolsAgentMsg_Reattach(
143 host_->GetRoutingID(), agent_->GetId(), agent_->session_id(), 139 host_->GetRoutingID(), agent_->GetId(), chunk_processor_.state_cookie()));
144 chunk_processor_.state_cookie()));
145 if (old) { 140 if (old) {
146 for (const auto& pair : old->sent_messages_) { 141 for (const auto& pair : old->sent_messages_)
147 DispatchProtocolMessage(pair.second.first, pair.first, 142 DispatchProtocolMessage(pair.first, pair.second);
148 pair.second.second);
149 }
150 } 143 }
151 GrantPolicy(); 144 GrantPolicy();
152 attached_ = true; 145 attached_ = true;
153 } 146 }
154 147
155 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach() { 148 void RenderFrameDevToolsAgentHost::FrameHostHolder::Detach() {
156 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID())); 149 host_->Send(new DevToolsAgentMsg_Detach(host_->GetRoutingID()));
157 RevokePolicy(); 150 RevokePolicy();
158 attached_ = false; 151 attached_ = false;
159 } 152 }
(...skipping 19 matching lines...) Expand all
179 } 172 }
180 } 173 }
181 174
182 // We are the last to disconnect from the renderer -> revoke permissions. 175 // We are the last to disconnect from the renderer -> revoke permissions.
183 if (!process_has_agents) { 176 if (!process_has_agents) {
184 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeReadRawCookies( 177 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeReadRawCookies(
185 process_host->GetID()); 178 process_host->GetID());
186 } 179 }
187 } 180 }
188 void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage( 181 void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage(
189 int session_id, 182 int call_id, const std::string& message) {
190 int call_id,
191 const std::string& message) {
192 host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( 183 host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend(
193 host_->GetRoutingID(), session_id, message)); 184 host_->GetRoutingID(), message));
194 sent_messages_[call_id] = std::make_pair(session_id, message); 185 sent_messages_[call_id] = message;
195 } 186 }
196 187
197 void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement( 188 void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement(
198 int x, int y) { 189 int x, int y) {
199 host_->Send(new DevToolsAgentMsg_InspectElement( 190 host_->Send(new DevToolsAgentMsg_InspectElement(
200 host_->GetRoutingID(), agent_->GetId(), agent_->session_id(), x, y)); 191 host_->GetRoutingID(), agent_->GetId(), x, y));
201 } 192 }
202 193
203 void 194 void
204 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent( 195 RenderFrameDevToolsAgentHost::FrameHostHolder::ProcessChunkedMessageFromAgent(
205 const DevToolsMessageChunk& chunk) { 196 const DevToolsMessageChunk& chunk) {
206 chunk_processor_.ProcessChunkedMessageFromAgent(chunk); 197 chunk_processor_.ProcessChunkedMessageFromAgent(chunk);
207 } 198 }
208 199
209 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient( 200 void RenderFrameDevToolsAgentHost::FrameHostHolder::SendMessageToClient(
210 int session_id,
211 const std::string& message) { 201 const std::string& message) {
212 sent_messages_.erase(chunk_processor_.last_call_id()); 202 sent_messages_.erase(chunk_processor_.last_call_id());
213 if (suspended_) 203 if (suspended_)
214 pending_messages_.push_back(std::make_pair(session_id, message)); 204 pending_messages_.push_back(message);
215 else 205 else
216 agent_->SendMessageToClient(session_id, message); 206 agent_->SendMessageToClient(message);
217 } 207 }
218 208
219 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() { 209 void RenderFrameDevToolsAgentHost::FrameHostHolder::Suspend() {
220 suspended_ = true; 210 suspended_ = true;
221 } 211 }
222 212
223 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() { 213 void RenderFrameDevToolsAgentHost::FrameHostHolder::Resume() {
224 suspended_ = false; 214 suspended_ = false;
225 for (const auto& pair : pending_messages_) 215 for (const std::string& message : pending_messages_)
226 agent_->SendMessageToClient(pair.first, pair.second); 216 agent_->SendMessageToClient(message);
227 std::vector<std::pair<int, std::string>> empty; 217 std::vector<std::string> empty;
228 pending_messages_.swap(empty); 218 pending_messages_.swap(empty);
229 } 219 }
230 220
231 // RenderFrameDevToolsAgentHost ------------------------------------------------ 221 // RenderFrameDevToolsAgentHost ------------------------------------------------
232 222
233 scoped_refptr<DevToolsAgentHost> 223 scoped_refptr<DevToolsAgentHost>
234 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) { 224 DevToolsAgentHost::GetOrCreateFor(RenderFrameHost* frame_host) {
235 while (frame_host && !ShouldCreateDevToolsFor(frame_host)) 225 while (frame_host && !ShouldCreateDevToolsFor(frame_host))
236 frame_host = frame_host->GetParent(); 226 frame_host = frame_host->GetParent();
237 DCHECK(frame_host); 227 DCHECK(frame_host);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 network_handler_(new devtools::network::NetworkHandler()), 318 network_handler_(new devtools::network::NetworkHandler()),
329 page_handler_(nullptr), 319 page_handler_(nullptr),
330 security_handler_(nullptr), 320 security_handler_(nullptr),
331 service_worker_handler_( 321 service_worker_handler_(
332 new devtools::service_worker::ServiceWorkerHandler()), 322 new devtools::service_worker::ServiceWorkerHandler()),
333 tracing_handler_(new devtools::tracing::TracingHandler( 323 tracing_handler_(new devtools::tracing::TracingHandler(
334 devtools::tracing::TracingHandler::Renderer, 324 devtools::tracing::TracingHandler::Renderer,
335 GetIOContext())), 325 GetIOContext())),
336 emulation_handler_(nullptr), 326 emulation_handler_(nullptr),
337 frame_trace_recorder_(nullptr), 327 frame_trace_recorder_(nullptr),
338 protocol_handler_(new DevToolsProtocolHandler(this)), 328 protocol_handler_(new DevToolsProtocolHandler(
329 this,
330 base::Bind(&RenderFrameDevToolsAgentHost::SendMessageToClient,
331 base::Unretained(this)))),
339 current_frame_crashed_(false) { 332 current_frame_crashed_(false) {
340 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); 333 DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
341 dispatcher->SetDOMHandler(dom_handler_.get()); 334 dispatcher->SetDOMHandler(dom_handler_.get());
342 dispatcher->SetInputHandler(input_handler_.get()); 335 dispatcher->SetInputHandler(input_handler_.get());
343 dispatcher->SetInspectorHandler(inspector_handler_.get()); 336 dispatcher->SetInspectorHandler(inspector_handler_.get());
344 dispatcher->SetIOHandler(io_handler_.get()); 337 dispatcher->SetIOHandler(io_handler_.get());
345 dispatcher->SetNetworkHandler(network_handler_.get()); 338 dispatcher->SetNetworkHandler(network_handler_.get());
346 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get()); 339 dispatcher->SetServiceWorkerHandler(service_worker_handler_.get());
347 dispatcher->SetTracingHandler(tracing_handler_.get()); 340 dispatcher->SetTracingHandler(tracing_handler_.get());
348 341
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 if (current_) 416 if (current_)
424 current_->Detach(); 417 current_->Detach();
425 if (pending_) 418 if (pending_)
426 pending_->Detach(); 419 pending_->Detach();
427 OnClientDetached(); 420 OnClientDetached();
428 } 421 }
429 422
430 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( 423 bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
431 const std::string& message) { 424 const std::string& message) {
432 int call_id = 0; 425 int call_id = 0;
433 if (protocol_handler_->HandleOptionalMessage(session_id(), message, &call_id)) 426 if (protocol_handler_->HandleOptionalMessage(message, &call_id))
434 return true; 427 return true;
435 428
436 if (current_) 429 if (current_)
437 current_->DispatchProtocolMessage(session_id(), call_id, message); 430 current_->DispatchProtocolMessage(call_id, message);
438 if (pending_) 431 if (pending_)
439 pending_->DispatchProtocolMessage(session_id(), call_id, message); 432 pending_->DispatchProtocolMessage(call_id, message);
440 return true; 433 return true;
441 } 434 }
442 435
443 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { 436 void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) {
444 if (current_) 437 if (current_)
445 current_->InspectElement(x, y); 438 current_->InspectElement(x, y);
446 if (pending_) 439 if (pending_)
447 pending_->InspectElement(x, y); 440 pending_->InspectElement(x, y);
448 } 441 }
449 442
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 RenderFrameHost* host) { 740 RenderFrameHost* host) {
748 return (current_ && current_->host() == host) || 741 return (current_ && current_->host() == host) ||
749 (pending_ && pending_->host() == host); 742 (pending_ && pending_->host() == host);
750 } 743 }
751 744
752 bool RenderFrameDevToolsAgentHost::IsChildFrame() { 745 bool RenderFrameDevToolsAgentHost::IsChildFrame() {
753 return current_ && current_->host()->GetParent(); 746 return current_ && current_->host()->GetParent();
754 } 747 }
755 748
756 } // namespace content 749 } // 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