Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7731)

Unified Diff: chrome/browser/devtools/devtools_target_impl.cc

Issue 349033009: DevTools: Added service workers to chrome://inspect/#devices (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed lifetime again Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/devtools/devtools_target_impl.h ('k') | chrome/browser/devtools/devtools_targets_ui.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..823253b9e839f3b74f9d2ca9cf045d1516647631 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("");
+ set_url(agent_host->GetURL());
+}
+
+void ServiceWorkerTarget::Inspect(Profile* profile) const {
+ DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost());
+}
+
} // namespace
// DevToolsTargetImpl ----------------------------------------------------------
@@ -300,27 +318,37 @@ scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForRenderViewHost(
return scoped_ptr<DevToolsTargetImpl>(new RenderViewHostTarget(rvh, is_tab));
}
-// static
-DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateRenderViewHostTargets() {
+
+static void CreateRenderViewHostTargets(
+ const DevToolsTargetImpl::Callback& callback,
+ const DevToolsAgentHost::List& agents) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
std::set<RenderViewHost*> tab_rvhs;
for (TabContentsIterator it; !it.done(); it.Next())
tab_rvhs.insert(it->GetRenderViewHost());
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DevToolsTargetImpl::List result;
- std::vector<RenderViewHost*> rvh_list =
- content::DevToolsAgentHost::GetValidRenderViewHosts();
- for (std::vector<RenderViewHost*>::iterator it = rvh_list.begin();
- it != rvh_list.end(); ++it) {
- bool is_tab = tab_rvhs.find(*it) != tab_rvhs.end();
- result.push_back(new RenderViewHostTarget(*it, is_tab));
+ for (content::DevToolsAgentHost::List::const_iterator it = agents.begin();
+ it != agents.end(); ++it) {
+ if (RenderViewHost* rvh = (*it)->GetRenderViewHost()) {
+ bool is_tab = tab_rvhs.find(rvh) != tab_rvhs.end();
+ result.push_back(new RenderViewHostTarget(rvh, is_tab));
+ }
}
- return result;
+ callback.Run(result);
+}
+
+// static
+void DevToolsTargetImpl::EnumerateRenderViewHostTargets(
+ const Callback& callback) {
+ content::DevToolsAgentHost::GetOrCreateAllHosts(
+ base::Bind(&CreateRenderViewHostTargets, callback));
}
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) {
@@ -330,7 +358,7 @@ static void CreateWorkerTargets(
}
// static
-void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) {
+void DevToolsTargetImpl::EnumerateWorkerTargets(const Callback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
content::BrowserThread::PostTask(
content::BrowserThread::UI,
@@ -340,22 +368,44 @@ void DevToolsTargetImpl::EnumerateWorkerTargets(Callback callback) {
callback));
}
-static void CollectAllTargets(
- DevToolsTargetImpl::Callback callback,
- const DevToolsTargetImpl::List& worker_targets) {
+static void Assign(DevToolsTargetImpl::List* targets_ptr,
+ const DevToolsTargetImpl::List& targets) {
+ *targets_ptr = targets;
+}
+
+static void OnAgentHostsReceived(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());
+ DevToolsTargetImpl::List result;
+ CreateRenderViewHostTargets(base::Bind(Assign, &result), agent_hosts);
+ result.insert(result.end(), 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 OnWorkersReceived(const DevToolsTargetImpl::Callback& callback,
+ const DevToolsTargetImpl::List& worker_targets) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DevToolsAgentHost::GetOrCreateAllHosts(
+ base::Bind(&OnAgentHostsReceived, callback, worker_targets));
+}
+
// static
-void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) {
+void DevToolsTargetImpl::EnumerateAllTargets(const Callback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
content::BrowserThread::PostTask(
content::BrowserThread::IO,
FROM_HERE,
base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets,
- base::Bind(&CollectAllTargets, callback)));
+ base::Bind(&OnWorkersReceived, callback)));
}
« no previous file with comments | « chrome/browser/devtools/devtools_target_impl.h ('k') | chrome/browser/devtools/devtools_targets_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698