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..2cfc0fd9c495383e353a4d4a9f886e66847d9a53 100644 |
--- a/content/browser/devtools/embedded_worker_devtools_manager.cc |
+++ b/content/browser/devtools/embedded_worker_devtools_manager.cc |
@@ -8,9 +8,12 @@ |
#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" |
+#include "content/public/browser/devtools_target.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/worker_service.h" |
#include "ipc/ipc_listener.h" |
@@ -173,13 +176,86 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost |
DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDevToolsAgentHost); |
}; |
+class EmbeddedWorkerDevToolsManager::ServiceWorkerTarget |
+ : public DevToolsTarget { |
+ public: |
pfeldman
2014/06/30 16:37:21
We can't implement DevToolsTarget in content. It i
vkuzkokov
2014/07/04 16:06:47
That would require a new interface which would mir
pfeldman
2014/07/05 20:17:09
Can we migrate to DTAH for everything instead?
|
+ ServiceWorkerTarget( |
+ scoped_refptr<EmbeddedWorkerDevToolsAgentHost> agent_host) |
+ : agent_host_(agent_host) { |
+ } |
+ |
+ virtual ~ServiceWorkerTarget() { |
+ } |
+ |
+ virtual std::string GetId() const OVERRIDE { |
+ return agent_host_->GetId(); |
+ } |
+ |
+ virtual std::string GetParentId() const OVERRIDE { |
+ return ""; |
+ } |
+ |
+ virtual std::string GetType() const OVERRIDE { |
+ return "worker"; |
+ } |
+ |
+ virtual std::string GetTitle() const OVERRIDE { |
+ return "Service Worker"; |
+ } |
+ |
+ virtual std::string GetDescription() const OVERRIDE { |
+ return "Service Worker"; |
+ } |
+ |
+ virtual GURL GetURL() const OVERRIDE { |
+ return GURL(); |
+ } |
+ |
+ virtual GURL GetFaviconURL() const OVERRIDE { |
+ return GURL(); |
+ } |
+ |
+ virtual base::TimeTicks GetLastActivityTime() const OVERRIDE { |
+ return base::TimeTicks(); |
+ } |
+ |
+ virtual bool IsAttached() const OVERRIDE { |
+ return agent_host_->IsAttached(); |
+ } |
+ |
+ virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() const OVERRIDE { |
+ return agent_host_; |
+ } |
+ |
+ virtual bool Activate() const OVERRIDE { |
+ return false; |
+ } |
+ |
+ virtual bool Close() const OVERRIDE { |
+ return EmbeddedWorkerDevToolsManager::GetInstance()->CloseServiceWorker( |
+ agent_host_->worker_id()); |
+ } |
+ |
+ private: |
+ scoped_refptr<EmbeddedWorkerDevToolsAgentHost> agent_host_; |
+ ServiceWorkerIdentifier* worker_id_; |
+}; |
+ |
// static |
EmbeddedWorkerDevToolsManager* EmbeddedWorkerDevToolsManager::GetInstance() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
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); |
+} |
+ |
+EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost* |
+EmbeddedWorkerDevToolsManager::GetOrCreateAgentHost( |
int worker_process_id, |
int worker_route_id) { |
WorkerId id(worker_process_id, worker_route_id); |
@@ -210,6 +286,20 @@ EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForServiceWorker( |
return GetDevToolsAgentHostForWorker(it->first.first, it->first.second); |
} |
+std::vector<DevToolsTarget*> |
+EmbeddedWorkerDevToolsManager::GetAllServiceWorkerTargets() { |
+ std::vector<DevToolsTarget*> targets; |
+ for (WorkerInfoMap::iterator it = workers_.begin(); |
+ it != workers_.end(); ++it) { |
+ ServiceWorkerIdentifier* worker_id = it->second->service_worker_id(); |
+ if (!worker_id) |
+ continue; |
+ targets.push_back(new ServiceWorkerTarget( |
+ GetOrCreateAgentHost(it->first.first, it->first.second))); |
+ } |
+ return targets; |
+} |
+ |
EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() |
: debug_service_worker_on_start_(false) { |
} |
@@ -372,6 +462,23 @@ void EmbeddedWorkerDevToolsManager::MoveToPausedState( |
workers_.set(id, info.Pass()); |
} |
+bool EmbeddedWorkerDevToolsManager::CloseServiceWorker(const WorkerId& id) { |
+ return false; |
+ //WorkerInfoMap::iterator it = workers_.find(id); |
+ //if (it == workers_.end()); |
pfeldman
2014/06/30 16:37:21
Cleanup.
vkuzkokov
2014/07/04 16:06:47
Uncommented and finished
|
+ // return false; |
+ //ServiceWorkerIdentifier* service_worker = it->second->service_worker_id(); |
+ //if (!service_worker) |
+ // return false; |
+ //ServiceWorkerVersion* version = |
+ // service_worker->service_worker_context_->GetLiveVersion( |
+ // service_worker->service_worker_version_id_); |
+ //if (!version) |
+ // return false; |
+ //version->StopWorker(ServiceWorkerVersion::StatusCallback()); |
+ //return true; |
+} |
+ |
void EmbeddedWorkerDevToolsManager::ResetForTesting() { |
workers_.clear(); |
} |