Chromium Code Reviews| Index: chrome/browser/devtools/devtools_target_impl.cc |
| diff --git a/chrome/browser/devtools/devtools_target_impl.cc b/chrome/browser/devtools/devtools_target_impl.cc |
| index 62f6354aa5ca704c86d66f4eb6eb183372155c87..9380b2c15bc60a311121ab7e7d0a195c1972efbd 100644 |
| --- a/chrome/browser/devtools/devtools_target_impl.cc |
| +++ b/chrome/browser/devtools/devtools_target_impl.cc |
| @@ -215,6 +215,24 @@ void WorkerTarget::Inspect(Profile* profile) const { |
| DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); |
| } |
| +class ServiceWorkerTarget : public DevToolsTargetImpl { |
| + public: |
| + explicit ServiceWorkerTarget(scoped_refptr<DevToolsAgentHost> agent_host); |
| + virtual void Inspect(Profile* profile) const OVERRIDE; |
| +}; |
| + |
| +ServiceWorkerTarget::ServiceWorkerTarget( |
| + scoped_refptr<DevToolsAgentHost> agent_host) |
| + : DevToolsTargetImpl(agent_host) { |
| + set_type(kTargetTypeWorker); |
| + set_title("Service Worker"); |
| + set_url(agent_host->GetURL()); |
| +} |
| + |
| +void ServiceWorkerTarget::Inspect(Profile* profile) const { |
| + DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); |
| +} |
| + |
| } // namespace |
| // DevToolsTargetImpl ---------------------------------------------------------- |
| @@ -320,7 +338,7 @@ DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateRenderViewHostTargets() { |
| static void CreateWorkerTargets( |
| const std::vector<WorkerService::WorkerInfo>& worker_info, |
| - DevToolsTargetImpl::Callback callback) { |
| + const DevToolsTargetImpl::Callback& callback) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DevToolsTargetImpl::List result; |
| for (size_t i = 0; i < worker_info.size(); ++i) { |
| @@ -340,16 +358,33 @@ void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) { |
| callback)); |
| } |
| -static void CollectAllTargets( |
| - DevToolsTargetImpl::Callback callback, |
| - const DevToolsTargetImpl::List& worker_targets) { |
| +static void CollectAllTargets(const DevToolsTargetImpl::Callback& callback, |
| + const DevToolsTargetImpl::List& worker_targets, |
| + const DevToolsAgentHost::List& agent_hosts) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DevToolsTargetImpl::List result = |
| DevToolsTargetImpl::EnumerateRenderViewHostTargets(); |
| result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); |
| + std::set<scoped_refptr<DevToolsAgentHost> > used_hosts; |
| + for (DevToolsTargetImpl::List::iterator it = result.begin(); |
| + it != result.end(); ++it) { |
| + used_hosts.insert((*it)->GetAgentHost()); |
| + } |
| + for (DevToolsAgentHost::List::const_iterator it = agent_hosts.begin(); |
| + it != agent_hosts.end(); ++it) { |
| + if (used_hosts.find(*it) == used_hosts.end()) |
| + result.push_back(new ServiceWorkerTarget(*it)); |
| + } |
| callback.Run(result); |
| } |
| +static void CollectWorkers(const DevToolsTargetImpl::Callback& callback, |
|
dgozman
2014/07/14 11:17:24
I'd rename this one to CollectAllTargets and it's
|
| + const DevToolsTargetImpl::List& worker_targets) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + DevToolsAgentHost::GetOrCreateAllHosts( |
| + base::Bind(&CollectAllTargets, callback, worker_targets)); |
| +} |
| + |
| // static |
| void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| @@ -357,5 +392,5 @@ void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { |
| content::BrowserThread::IO, |
| FROM_HERE, |
| base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, |
|
dgozman
2014/07/14 11:17:24
This method should be called EnumerateSharedWorker
|
| - base::Bind(&CollectAllTargets, callback))); |
| + base::Bind(&CollectWorkers, callback))); |
| } |