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))); |
} |