OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/devtools/devtools_target_impl.h" | 5 #include "chrome/browser/devtools/devtools_target_impl.h" |
6 | 6 |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/browser/devtools/devtools_window.h" | 9 #include "chrome/browser/devtools/devtools_window.h" |
10 #include "chrome/browser/extensions/extension_tab_util.h" | 10 #include "chrome/browser/extensions/extension_tab_util.h" |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 bool WorkerTarget::Close() const { | 208 bool WorkerTarget::Close() const { |
209 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, | 209 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
210 base::Bind(&TerminateWorker, process_id_, route_id_)); | 210 base::Bind(&TerminateWorker, process_id_, route_id_)); |
211 return true; | 211 return true; |
212 } | 212 } |
213 | 213 |
214 void WorkerTarget::Inspect(Profile* profile) const { | 214 void WorkerTarget::Inspect(Profile* profile) const { |
215 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); | 215 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); |
216 } | 216 } |
217 | 217 |
| 218 class ServiceWorkerTarget : public DevToolsTargetImpl { |
| 219 public: |
| 220 explicit ServiceWorkerTarget(scoped_refptr<DevToolsAgentHost> agent_host); |
| 221 virtual void Inspect(Profile* profile) const OVERRIDE; |
| 222 }; |
| 223 |
| 224 ServiceWorkerTarget::ServiceWorkerTarget( |
| 225 scoped_refptr<DevToolsAgentHost> agent_host) |
| 226 : DevToolsTargetImpl(agent_host) { |
| 227 set_type(kTargetTypeWorker); |
| 228 set_title(""); |
| 229 set_url(agent_host->GetURL()); |
| 230 } |
| 231 |
| 232 void ServiceWorkerTarget::Inspect(Profile* profile) const { |
| 233 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); |
| 234 } |
| 235 |
218 } // namespace | 236 } // namespace |
219 | 237 |
220 // DevToolsTargetImpl ---------------------------------------------------------- | 238 // DevToolsTargetImpl ---------------------------------------------------------- |
221 | 239 |
222 DevToolsTargetImpl::~DevToolsTargetImpl() { | 240 DevToolsTargetImpl::~DevToolsTargetImpl() { |
223 } | 241 } |
224 | 242 |
225 DevToolsTargetImpl::DevToolsTargetImpl( | 243 DevToolsTargetImpl::DevToolsTargetImpl( |
226 scoped_refptr<DevToolsAgentHost> agent_host) | 244 scoped_refptr<DevToolsAgentHost> agent_host) |
227 : agent_host_(agent_host) { | 245 : agent_host_(agent_host) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 | 311 |
294 void DevToolsTargetImpl::Reload() const { | 312 void DevToolsTargetImpl::Reload() const { |
295 } | 313 } |
296 | 314 |
297 // static | 315 // static |
298 scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForRenderViewHost( | 316 scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForRenderViewHost( |
299 content::RenderViewHost* rvh, bool is_tab) { | 317 content::RenderViewHost* rvh, bool is_tab) { |
300 return scoped_ptr<DevToolsTargetImpl>(new RenderViewHostTarget(rvh, is_tab)); | 318 return scoped_ptr<DevToolsTargetImpl>(new RenderViewHostTarget(rvh, is_tab)); |
301 } | 319 } |
302 | 320 |
303 // static | 321 |
304 DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateRenderViewHostTargets() { | 322 static void CreateRenderViewHostTargets( |
| 323 const DevToolsTargetImpl::Callback& callback, |
| 324 const DevToolsAgentHost::List& agents) { |
| 325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
305 std::set<RenderViewHost*> tab_rvhs; | 326 std::set<RenderViewHost*> tab_rvhs; |
306 for (TabContentsIterator it; !it.done(); it.Next()) | 327 for (TabContentsIterator it; !it.done(); it.Next()) |
307 tab_rvhs.insert(it->GetRenderViewHost()); | 328 tab_rvhs.insert(it->GetRenderViewHost()); |
308 | 329 |
309 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 330 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
310 DevToolsTargetImpl::List result; | 331 DevToolsTargetImpl::List result; |
311 std::vector<RenderViewHost*> rvh_list = | 332 for (content::DevToolsAgentHost::List::const_iterator it = agents.begin(); |
312 content::DevToolsAgentHost::GetValidRenderViewHosts(); | 333 it != agents.end(); ++it) { |
313 for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin(); | 334 if (RenderViewHost* rvh = (*it)->GetRenderViewHost()) { |
314 it != rvh_list.end(); ++it) { | 335 bool is_tab = tab_rvhs.find(rvh) != tab_rvhs.end(); |
315 bool is_tab = tab_rvhs.find(*it) != tab_rvhs.end(); | 336 result.push_back(new RenderViewHostTarget(rvh, is_tab)); |
316 result.push_back(new RenderViewHostTarget(*it, is_tab)); | 337 } |
317 } | 338 } |
318 return result; | 339 callback.Run(result); |
| 340 } |
| 341 |
| 342 // static |
| 343 void DevToolsTargetImpl::EnumerateRenderViewHostTargets( |
| 344 const Callback& callback) { |
| 345 content::DevToolsAgentHost::GetOrCreateAllHosts( |
| 346 base::Bind(&CreateRenderViewHostTargets, callback)); |
319 } | 347 } |
320 | 348 |
321 static void CreateWorkerTargets( | 349 static void CreateWorkerTargets( |
322 const std::vector<WorkerService::WorkerInfo>& worker_info, | 350 const std::vector<WorkerService::WorkerInfo>& worker_info, |
323 DevToolsTargetImpl::Callback callback) { | 351 const DevToolsTargetImpl::Callback& callback) { |
324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
325 DevToolsTargetImpl::List result; | 353 DevToolsTargetImpl::List result; |
326 for (size_t i = 0; i < worker_info.size(); ++i) { | 354 for (size_t i = 0; i < worker_info.size(); ++i) { |
327 result.push_back(new WorkerTarget(worker_info[i])); | 355 result.push_back(new WorkerTarget(worker_info[i])); |
328 } | 356 } |
329 callback.Run(result); | 357 callback.Run(result); |
330 } | 358 } |
331 | 359 |
332 // static | 360 // static |
333 void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) { | 361 void DevToolsTargetImpl::EnumerateWorkerTargets(const Callback& callback) { |
334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 362 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
335 content::BrowserThread::PostTask( | 363 content::BrowserThread::PostTask( |
336 content::BrowserThread::UI, | 364 content::BrowserThread::UI, |
337 FROM_HERE, | 365 FROM_HERE, |
338 base::Bind(&CreateWorkerTargets, | 366 base::Bind(&CreateWorkerTargets, |
339 WorkerService::GetInstance()->GetWorkers(), | 367 WorkerService::GetInstance()->GetWorkers(), |
340 callback)); | 368 callback)); |
341 } | 369 } |
342 | 370 |
343 static void CollectAllTargets( | 371 static void Assign(DevToolsTargetImpl::List* targets_ptr, |
344 DevToolsTargetImpl::Callback callback, | 372 const DevToolsTargetImpl::List& targets) { |
345 const DevToolsTargetImpl::List& worker_targets) { | 373 *targets_ptr = targets; |
| 374 } |
| 375 |
| 376 static void OnAgentHostsReceived(const DevToolsTargetImpl::Callback& callback, |
| 377 const DevToolsTargetImpl::List& worker_targets, |
| 378 const DevToolsAgentHost::List& agent_hosts) { |
346 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 379 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
347 DevToolsTargetImpl::List result = | 380 DevToolsTargetImpl::List result; |
348 DevToolsTargetImpl::EnumerateRenderViewHostTargets(); | 381 CreateRenderViewHostTargets(base::Bind(Assign, &result), agent_hosts); |
349 result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); | 382 result.insert(result.end(), worker_targets.begin(), worker_targets.end()); |
| 383 std::set<scoped_refptr<DevToolsAgentHost> > used_hosts; |
| 384 for (DevToolsTargetImpl::List::iterator it = result.begin(); |
| 385 it != result.end(); ++it) { |
| 386 used_hosts.insert((*it)->GetAgentHost()); |
| 387 } |
| 388 for (DevToolsAgentHost::List::const_iterator it = agent_hosts.begin(); |
| 389 it != agent_hosts.end(); ++it) { |
| 390 if (used_hosts.find(*it) == used_hosts.end()) |
| 391 result.push_back(new ServiceWorkerTarget(*it)); |
| 392 } |
350 callback.Run(result); | 393 callback.Run(result); |
351 } | 394 } |
352 | 395 |
| 396 static void OnWorkersReceived(const DevToolsTargetImpl::Callback& callback, |
| 397 const DevToolsTargetImpl::List& worker_targets) { |
| 398 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 399 DevToolsAgentHost::GetOrCreateAllHosts( |
| 400 base::Bind(&OnAgentHostsReceived, callback, worker_targets)); |
| 401 } |
| 402 |
353 // static | 403 // static |
354 void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { | 404 void DevToolsTargetImpl::EnumerateAllTargets(const Callback& callback) { |
355 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 405 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
356 content::BrowserThread::PostTask( | 406 content::BrowserThread::PostTask( |
357 content::BrowserThread::IO, | 407 content::BrowserThread::IO, |
358 FROM_HERE, | 408 FROM_HERE, |
359 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, | 409 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, |
360 base::Bind(&CollectAllTargets, callback))); | 410 base::Bind(&OnWorkersReceived, callback))); |
361 } | 411 } |
OLD | NEW |