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

Side by Side Diff: content/browser/devtools/protocol/target_handler.cc

Issue 2387773003: [DevTools] Support Target.setWaitForDebuggerOnStart. (Closed)
Patch Set: cleanup Created 4 years, 2 months 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
« no previous file with comments | « content/browser/devtools/protocol/target_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/protocol/target_handler.h" 5 #include "content/browser/devtools/protocol/target_handler.h"
6 6
7 #include "content/browser/devtools/service_worker_devtools_agent_host.h" 7 #include "content/browser/devtools/service_worker_devtools_agent_host.h"
8 #include "content/browser/frame_host/frame_tree.h" 8 #include "content/browser/frame_host/frame_tree.h"
9 #include "content/browser/frame_host/frame_tree_node.h" 9 #include "content/browser/frame_host/frame_tree_node.h"
10 #include "content/browser/frame_host/render_frame_host_impl.h" 10 #include "content/browser/frame_host/render_frame_host_impl.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 for (const auto& it : scope_agents_map) 80 for (const auto& it : scope_agents_map)
81 AddEligibleHosts(*it.second.get(), &result); 81 AddEligibleHosts(*it.second.get(), &result);
82 82
83 return result; 83 return result;
84 } 84 }
85 85
86 } // namespace 86 } // namespace
87 87
88 TargetHandler::TargetHandler() 88 TargetHandler::TargetHandler()
89 : enabled_(false), 89 : enabled_(false),
90 wait_for_debugger_on_start_(false),
90 render_frame_host_(nullptr) { 91 render_frame_host_(nullptr) {
91 } 92 }
92 93
93 TargetHandler::~TargetHandler() { 94 TargetHandler::~TargetHandler() {
94 Disable(); 95 Disable();
95 } 96 }
96 97
97 void TargetHandler::SetRenderFrameHost(RenderFrameHostImpl* render_frame_host) { 98 void TargetHandler::SetRenderFrameHost(RenderFrameHostImpl* render_frame_host) {
98 render_frame_host_ = render_frame_host; 99 render_frame_host_ = render_frame_host;
99 } 100 }
100 101
101 void TargetHandler::SetClient(std::unique_ptr<Client> client) { 102 void TargetHandler::SetClient(std::unique_ptr<Client> client) {
102 client_.swap(client); 103 client_.swap(client);
103 } 104 }
104 105
105 void TargetHandler::Detached() { 106 void TargetHandler::Detached() {
106 Disable(); 107 Disable();
107 } 108 }
108 109
109 void TargetHandler::UpdateServiceWorkers() { 110 void TargetHandler::UpdateServiceWorkers() {
111 UpdateServiceWorkers(false);
112 }
113
114 void TargetHandler::UpdateServiceWorkers(bool waiting_for_debugger) {
110 if (!enabled_) 115 if (!enabled_)
111 return; 116 return;
112 117
113 frame_urls_.clear(); 118 frame_urls_.clear();
114 BrowserContext* browser_context = nullptr; 119 BrowserContext* browser_context = nullptr;
115 if (render_frame_host_) { 120 if (render_frame_host_) {
116 // TODO(dgozman): do not traverse inside cross-process subframes. 121 // TODO(dgozman): do not traverse inside cross-process subframes.
117 for (FrameTreeNode* node : 122 for (FrameTreeNode* node :
118 render_frame_host_->frame_tree_node()->frame_tree()->Nodes()) { 123 render_frame_host_->frame_tree_node()->frame_tree()->Nodes()) {
119 frame_urls_.insert(node->current_url()); 124 frame_urls_.insert(node->current_url());
120 } 125 }
121 browser_context = render_frame_host_->GetProcess()->GetBrowserContext(); 126 browser_context = render_frame_host_->GetProcess()->GetBrowserContext();
122 } 127 }
123 128
124 std::map<std::string, scoped_refptr<DevToolsAgentHost>> old_hosts = 129 std::map<std::string, scoped_refptr<DevToolsAgentHost>> old_hosts =
125 attached_hosts_; 130 attached_hosts_;
126 ServiceWorkerDevToolsAgentHost::Map new_hosts = 131 ServiceWorkerDevToolsAgentHost::Map new_hosts =
127 GetMatchingServiceWorkers(browser_context, frame_urls_); 132 GetMatchingServiceWorkers(browser_context, frame_urls_);
128 133
129 for (const auto& pair : old_hosts) { 134 for (const auto& pair : old_hosts) {
130 if (pair.second->GetType() == DevToolsAgentHost::kTypeServiceWorker && 135 if (pair.second->GetType() == DevToolsAgentHost::kTypeServiceWorker &&
131 new_hosts.find(pair.first) == new_hosts.end()) { 136 new_hosts.find(pair.first) == new_hosts.end()) {
132 DetachFromTargetInternal(pair.second.get()); 137 DetachFromTargetInternal(pair.second.get());
133 } 138 }
134 } 139 }
135 140
136 for (const auto& pair : new_hosts) { 141 for (const auto& pair : new_hosts) {
137 if (old_hosts.find(pair.first) == old_hosts.end()) 142 if (old_hosts.find(pair.first) == old_hosts.end())
138 AttachToTargetInternal(pair.second.get(), true); 143 AttachToTargetInternal(pair.second.get(), waiting_for_debugger);
139 } 144 }
140 } 145 }
141 146
142 void TargetHandler::AttachToTargetInternal( 147 void TargetHandler::AttachToTargetInternal(
143 DevToolsAgentHost* host, bool waiting_for_debugger) { 148 DevToolsAgentHost* host, bool waiting_for_debugger) {
144 if (host->IsAttached()) 149 if (host->IsAttached())
145 return; 150 return;
146 attached_hosts_[host->GetId()] = host; 151 attached_hosts_[host->GetId()] = host;
147 host->AttachClient(this); 152 host->AttachClient(this);
148 client_->TargetCreated(TargetCreatedParams::Create() 153 client_->TargetCreated(TargetCreatedParams::Create()
(...skipping 21 matching lines...) Expand all
170 enabled_ = true; 175 enabled_ = true;
171 ServiceWorkerDevToolsManager::GetInstance()->AddObserver(this); 176 ServiceWorkerDevToolsManager::GetInstance()->AddObserver(this);
172 UpdateServiceWorkers(); 177 UpdateServiceWorkers();
173 return Response::OK(); 178 return Response::OK();
174 } 179 }
175 180
176 Response TargetHandler::Disable() { 181 Response TargetHandler::Disable() {
177 if (!enabled_) 182 if (!enabled_)
178 return Response::OK(); 183 return Response::OK();
179 enabled_ = false; 184 enabled_ = false;
185 wait_for_debugger_on_start_ = false;
180 ServiceWorkerDevToolsManager::GetInstance()->RemoveObserver(this); 186 ServiceWorkerDevToolsManager::GetInstance()->RemoveObserver(this);
181 for (const auto& pair : attached_hosts_) 187 for (const auto& pair : attached_hosts_)
182 pair.second->DetachClient(this); 188 pair.second->DetachClient(this);
183 attached_hosts_.clear(); 189 attached_hosts_.clear();
184 return Response::OK(); 190 return Response::OK();
185 } 191 }
186 192
187 Response TargetHandler::SetWaitForDebuggerOnStart(bool value) { 193 Response TargetHandler::SetWaitForDebuggerOnStart(bool value) {
188 // TODO(dgozman): implement this. 194 wait_for_debugger_on_start_ = value;
189 return Response::OK(); 195 return Response::OK();
190 } 196 }
191 197
192 Response TargetHandler::SendMessageToTarget( 198 Response TargetHandler::SendMessageToTarget(
193 const std::string& target_id, 199 const std::string& target_id,
194 const std::string& message) { 200 const std::string& message) {
195 auto it = attached_hosts_.find(target_id); 201 auto it = attached_hosts_.find(target_id);
196 if (it == attached_hosts_.end()) 202 if (it == attached_hosts_.end())
197 return Response::InternalError("Not attached to the target"); 203 return Response::InternalError("Not attached to the target");
198 it->second->DispatchProtocolMessage(this, message); 204 it->second->DispatchProtocolMessage(this, message);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 254
249 // -------- ServiceWorkerDevToolsManager::Observer ---------- 255 // -------- ServiceWorkerDevToolsManager::Observer ----------
250 256
251 void TargetHandler::WorkerCreated( 257 void TargetHandler::WorkerCreated(
252 ServiceWorkerDevToolsAgentHost* host) { 258 ServiceWorkerDevToolsAgentHost* host) {
253 BrowserContext* browser_context = nullptr; 259 BrowserContext* browser_context = nullptr;
254 if (render_frame_host_) 260 if (render_frame_host_)
255 browser_context = render_frame_host_->GetProcess()->GetBrowserContext(); 261 browser_context = render_frame_host_->GetProcess()->GetBrowserContext();
256 auto hosts = GetMatchingServiceWorkers(browser_context, frame_urls_); 262 auto hosts = GetMatchingServiceWorkers(browser_context, frame_urls_);
257 if (hosts.find(host->GetId()) != hosts.end() && !host->IsAttached() && 263 if (hosts.find(host->GetId()) != hosts.end() && !host->IsAttached() &&
258 !host->IsPausedForDebugOnStart()) { 264 !host->IsPausedForDebugOnStart() && wait_for_debugger_on_start_) {
259 host->PauseForDebugOnStart(); 265 host->PauseForDebugOnStart();
260 } 266 }
261 } 267 }
262 268
263 void TargetHandler::WorkerReadyForInspection( 269 void TargetHandler::WorkerReadyForInspection(
264 ServiceWorkerDevToolsAgentHost* host) { 270 ServiceWorkerDevToolsAgentHost* host) {
265 if (ServiceWorkerDevToolsManager::GetInstance() 271 if (ServiceWorkerDevToolsManager::GetInstance()
266 ->debug_service_worker_on_start()) { 272 ->debug_service_worker_on_start()) {
267 // When debug_service_worker_on_start is true, a new DevTools window will 273 // When debug_service_worker_on_start is true, a new DevTools window will
268 // be opened in ServiceWorkerDevToolsManager::WorkerReadyForInspection. 274 // be opened in ServiceWorkerDevToolsManager::WorkerReadyForInspection.
269 return; 275 return;
270 } 276 }
271 UpdateServiceWorkers(); 277 UpdateServiceWorkers(host->IsPausedForDebugOnStart());
272 } 278 }
273 279
274 void TargetHandler::WorkerVersionInstalled( 280 void TargetHandler::WorkerVersionInstalled(
275 ServiceWorkerDevToolsAgentHost* host) { 281 ServiceWorkerDevToolsAgentHost* host) {
276 UpdateServiceWorkers(); 282 UpdateServiceWorkers();
277 } 283 }
278 284
279 void TargetHandler::WorkerVersionDoomed( 285 void TargetHandler::WorkerVersionDoomed(
280 ServiceWorkerDevToolsAgentHost* host) { 286 ServiceWorkerDevToolsAgentHost* host) {
281 UpdateServiceWorkers(); 287 UpdateServiceWorkers();
282 } 288 }
283 289
284 void TargetHandler::WorkerDestroyed( 290 void TargetHandler::WorkerDestroyed(
285 ServiceWorkerDevToolsAgentHost* host) { 291 ServiceWorkerDevToolsAgentHost* host) {
286 UpdateServiceWorkers(); 292 UpdateServiceWorkers();
287 } 293 }
288 294
289 } // namespace target 295 } // namespace target
290 } // namespace devtools 296 } // namespace devtools
291 } // namespace content 297 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/protocol/target_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698