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("Service Worker"); | |
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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
313 for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin(); | 331 for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin(); |
314 it != rvh_list.end(); ++it) { | 332 it != rvh_list.end(); ++it) { |
315 bool is_tab = tab_rvhs.find(*it) != tab_rvhs.end(); | 333 bool is_tab = tab_rvhs.find(*it) != tab_rvhs.end(); |
316 result.push_back(new RenderViewHostTarget(*it, is_tab)); | 334 result.push_back(new RenderViewHostTarget(*it, is_tab)); |
317 } | 335 } |
318 return result; | 336 return result; |
319 } | 337 } |
320 | 338 |
321 static void CreateWorkerTargets( | 339 static void CreateWorkerTargets( |
322 const std::vector<WorkerService::WorkerInfo>& worker_info, | 340 const std::vector<WorkerService::WorkerInfo>& worker_info, |
323 DevToolsTargetImpl::Callback callback) { | 341 const DevToolsTargetImpl::Callback& callback) { |
324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 342 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
325 DevToolsTargetImpl::List result; | 343 DevToolsTargetImpl::List result; |
326 for (size_t i = 0; i < worker_info.size(); ++i) { | 344 for (size_t i = 0; i < worker_info.size(); ++i) { |
327 result.push_back(new WorkerTarget(worker_info[i])); | 345 result.push_back(new WorkerTarget(worker_info[i])); |
328 } | 346 } |
329 callback.Run(result); | 347 callback.Run(result); |
330 } | 348 } |
331 | 349 |
332 // static | 350 // static |
333 void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) { | 351 void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) { |
334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
335 content::BrowserThread::PostTask( | 353 content::BrowserThread::PostTask( |
336 content::BrowserThread::UI, | 354 content::BrowserThread::UI, |
337 FROM_HERE, | 355 FROM_HERE, |
338 base::Bind(&CreateWorkerTargets, | 356 base::Bind(&CreateWorkerTargets, |
339 WorkerService::GetInstance()->GetWorkers(), | 357 WorkerService::GetInstance()->GetWorkers(), |
340 callback)); | 358 callback)); |
341 } | 359 } |
342 | 360 |
343 static void CollectAllTargets( | 361 static void CollectAllTargets(const DevToolsTargetImpl::Callback& callback, |
344 DevToolsTargetImpl::Callback callback, | 362 const DevToolsTargetImpl::List& worker_targets, |
345 const DevToolsTargetImpl::List& worker_targets) { | 363 const DevToolsAgentHost::List& agent_hosts) { |
346 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 364 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
347 DevToolsTargetImpl::List result = | 365 DevToolsTargetImpl::List result = |
348 DevToolsTargetImpl::EnumerateRenderViewHostTargets(); | 366 DevToolsTargetImpl::EnumerateRenderViewHostTargets(); |
349 result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); | 367 result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); |
368 std::set<scoped_refptr<DevToolsAgentHost> > used_hosts; | |
369 for (DevToolsTargetImpl::List::iterator it = result.begin(); | |
370 it != result.end(); ++it) { | |
371 used_hosts.insert((*it)->GetAgentHost()); | |
372 } | |
373 for (DevToolsAgentHost::List::const_iterator it = agent_hosts.begin(); | |
374 it != agent_hosts.end(); ++it) { | |
375 if (used_hosts.find(*it) == used_hosts.end()) | |
376 result.push_back(new ServiceWorkerTarget(*it)); | |
377 } | |
350 callback.Run(result); | 378 callback.Run(result); |
351 } | 379 } |
352 | 380 |
381 static void CollectWorkers(const DevToolsTargetImpl::Callback& callback, | |
dgozman
2014/07/14 11:17:24
I'd rename this one to CollectAllTargets and it's
| |
382 const DevToolsTargetImpl::List& worker_targets) { | |
383 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
384 DevToolsAgentHost::GetOrCreateAllHosts( | |
385 base::Bind(&CollectAllTargets, callback, worker_targets)); | |
386 } | |
387 | |
353 // static | 388 // static |
354 void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { | 389 void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { |
355 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
356 content::BrowserThread::PostTask( | 391 content::BrowserThread::PostTask( |
357 content::BrowserThread::IO, | 392 content::BrowserThread::IO, |
358 FROM_HERE, | 393 FROM_HERE, |
359 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, | 394 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, |
dgozman
2014/07/14 11:17:24
This method should be called EnumerateSharedWorker
| |
360 base::Bind(&CollectAllTargets, callback))); | 395 base::Bind(&CollectWorkers, callback))); |
361 } | 396 } |
OLD | NEW |