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 7f2bfb061f47015254ff71a57e3da371cd446a8d..b930f233e781417a233cb9d32cc9b481aa576868 100644 |
--- a/chrome/browser/devtools/devtools_target_impl.cc |
+++ b/chrome/browser/devtools/devtools_target_impl.cc |
@@ -210,6 +210,25 @@ void WorkerTarget::Inspect(Profile* profile) const { |
} // namespace |
+// ServiceWorkerTarget --------------------------------------------------------- |
+ |
+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_url(agent_host->GetURL()); |
+} |
+ |
+void ServiceWorkerTarget::Inspect(Profile* profile) const { |
+ DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); |
+} |
+ |
// DevToolsTargetImpl ---------------------------------------------------------- |
DevToolsTargetImpl::~DevToolsTargetImpl() { |
@@ -303,13 +322,14 @@ DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateWebContentsTargets() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DevToolsTargetImpl::List result; |
- std::vector<WebContents*> wc_list = |
- content::DevToolsAgentHost::GetInspectableWebContents(); |
- for (std::vector<WebContents*>::iterator it = wc_list.begin(); |
- it != wc_list.end(); |
- ++it) { |
- bool is_tab = tab_web_contents.find(*it) != tab_web_contents.end(); |
- result.push_back(new WebContentsTarget(*it, is_tab)); |
+ DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); |
+ for (DevToolsAgentHost::List::iterator it = agents.begin(); |
+ it != agents.end(); ++it) { |
+ if (WebContents* web_contents = (*it)->GetWebContents()) { |
+ bool is_tab = |
+ tab_web_contents.find(web_contents) != tab_web_contents.end(); |
+ result.push_back(new WebContentsTarget(web_contents, is_tab)); |
+ } |
} |
return result; |
} |
@@ -342,7 +362,19 @@ static void CollectAllTargets( |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DevToolsTargetImpl::List result = |
DevToolsTargetImpl::EnumerateWebContentsTargets(); |
- result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); |
+ result.insert(result.end(), worker_targets.begin(), worker_targets.end()); |
+ |
+ std::set<scoped_refptr<DevToolsAgentHost> > used_agents; |
+ for (DevToolsTargetImpl::List::iterator it = result.begin(); |
+ it != result.end(); ++it) { |
+ used_agents.insert((*it)->GetAgentHost()); |
+ } |
+ DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); |
+ for (DevToolsAgentHost::List::iterator it = agents.begin(); |
yurys
2014/08/12 12:14:45
Is it possible to use something like ServiceWorker
vkuzkokov
2014/08/13 06:35:19
Newly added DTAH::GetType() used instead.
|
+ it != agents.end(); ++it) { |
+ if (used_agents.find(*it) == used_agents.end()) |
+ result.push_back(new ServiceWorkerTarget(*it)); |
+ } |
callback.Run(result); |
} |