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

Unified Diff: content/browser/devtools/embedded_worker_devtools_manager.cc

Issue 349033009: DevTools: Added service workers to chrome://inspect/#devices (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added GetOrCreateAllHosts 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
Index: content/browser/devtools/embedded_worker_devtools_manager.cc
diff --git a/content/browser/devtools/embedded_worker_devtools_manager.cc b/content/browser/devtools/embedded_worker_devtools_manager.cc
index 3ba61aafeea20e9b12ec8973ef32aa1e3f5cd7cb..0b5395848f499f328b94748ffc5767ff3fa3dacf 100644
--- a/content/browser/devtools/embedded_worker_devtools_manager.cc
+++ b/content/browser/devtools/embedded_worker_devtools_manager.cc
@@ -8,6 +8,8 @@
#include "content/browser/devtools/devtools_protocol.h"
#include "content/browser/devtools/devtools_protocol_constants.h"
#include "content/browser/devtools/ipc_devtools_agent_host.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_version.h"
#include "content/browser/shared_worker/shared_worker_instance.h"
#include "content/common/devtools_messages.h"
#include "content/public/browser/browser_thread.h"
@@ -35,15 +37,18 @@ bool SendMessageToWorker(
} // namespace
EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier(
- const ServiceWorkerContextCore* const service_worker_context,
+ const ServiceWorkerContextCore* service_worker_context,
+ base::WeakPtr<ServiceWorkerContextCore> service_worker_context_weak,
int64 service_worker_version_id)
: service_worker_context_(service_worker_context),
+ service_worker_context_weak_(service_worker_context_weak),
service_worker_version_id_(service_worker_version_id) {
}
EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier(
const ServiceWorkerIdentifier& other)
: service_worker_context_(other.service_worker_context_),
+ service_worker_context_weak_(other.service_worker_context_weak_),
service_worker_version_id_(other.service_worker_version_id_) {
}
@@ -88,13 +93,13 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost
: public IPCDevToolsAgentHost,
public IPC::Listener {
public:
- explicit EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id)
- : worker_id_(worker_id), worker_attached_(false) {
- AttachToWorker();
+ EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id, const GURL& url)
+ : worker_id_(worker_id), worker_attached_(false), url_(url) {
}
// DevToolsAgentHost override.
virtual bool IsWorker() const OVERRIDE { return true; }
+ virtual GURL GetURL() OVERRIDE { return url_; }
// IPCDevToolsAgentHost implementation.
virtual void SendMessageToAgent(IPC::Message* message) OVERRIDE {
@@ -169,6 +174,7 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost
WorkerId worker_id_;
bool worker_attached_;
+ GURL url_;
std::string state_;
DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDevToolsAgentHost);
};
@@ -179,9 +185,17 @@ EmbeddedWorkerDevToolsManager* EmbeddedWorkerDevToolsManager::GetInstance() {
return Singleton<EmbeddedWorkerDevToolsManager>::get();
}
-DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker(
+DevToolsAgentHost*
+EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker(
int worker_process_id,
int worker_route_id) {
+ return GetOrCreateAgentHost(worker_process_id, worker_route_id, GURL());
+}
+
+DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetOrCreateAgentHost(
+ int worker_process_id,
+ int worker_route_id,
+ const GURL& url) {
WorkerId id(worker_process_id, worker_route_id);
WorkerInfoMap::iterator it = workers_.find(id);
@@ -195,7 +209,7 @@ DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker(
}
EmbeddedWorkerDevToolsAgentHost* agent_host =
- new EmbeddedWorkerDevToolsAgentHost(id);
+ new EmbeddedWorkerDevToolsAgentHost(id, url);
info->set_agent_host(agent_host);
info->set_state(WORKER_INSPECTED);
return agent_host;
@@ -210,6 +224,63 @@ EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForServiceWorker(
return GetDevToolsAgentHostForWorker(it->first.first, it->first.second);
}
+void EmbeddedWorkerDevToolsManager::GetOrCreateAllHosts(
+ const DevToolsAgentHost::Callback& callback) {
+ std::map<WorkerId, ServiceWorkerIdentifier> ids;
+ for (WorkerInfoMap::iterator it = workers_.begin();
+ it != workers_.end(); ++it) {
+ if (const ServiceWorkerIdentifier* worker_id =
+ it->second->service_worker_id()) {
+ ids.insert(std::make_pair(it->first, *worker_id));
+ }
+ }
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&EmbeddedWorkerDevToolsManager::GetServiceWorkerUrlsOnIO,
+ ids, callback));
+}
+
+// static
+void EmbeddedWorkerDevToolsManager::GetServiceWorkerUrlsOnIO(
+ const std::map<WorkerId, ServiceWorkerIdentifier>& ids,
+ const DevToolsAgentHost::Callback& callback) {
+ std::map<WorkerId, GURL> url_map;
+ for (std::map<WorkerId, ServiceWorkerIdentifier>::const_iterator it =
+ ids.begin(); it != ids.end(); ++it) {
+ if (ServiceWorkerContextCore* context =
+ it->second.service_worker_context_weak_.get()) {
+ if (ServiceWorkerVersion* version =
+ context->GetLiveVersion(it->second.service_worker_version_id_)) {
+ url_map[it->first] = version->script_url();
+ }
+ }
+ }
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&EmbeddedWorkerDevToolsManager::CreateAgentHosts,
+ url_map, callback));
+}
+
+// static
+void EmbeddedWorkerDevToolsManager::CreateAgentHosts(
+ const std::map<WorkerId, GURL> url_map,
+ const DevToolsAgentHost::Callback& callback) {
+ DevToolsAgentHost::List agent_hosts;
+ EmbeddedWorkerDevToolsManager* instance = GetInstance();
+ for (WorkerInfoMap::iterator it = instance->workers_.begin();
+ it != instance->workers_.end(); ++it) {
+ if (it->second->service_worker_id()) {
+ std::map<WorkerId, GURL>::const_iterator url_it = url_map.find(it->first);
+ if (url_it != url_map.end()) {
+ agent_hosts.push_back(instance->GetOrCreateAgentHost(
+ it->first.first, it->first.second, url_it->second));
+ }
+ } else {
+ agent_hosts.push_back(instance->GetOrCreateAgentHost(
+ it->first.first, it->first.second, GURL()));
+ }
+ }
+ callback.Run(agent_hosts);
+}
+
EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager()
: debug_service_worker_on_start_(false) {
}

Powered by Google App Engine
This is Rietveld 408576698