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

Unified Diff: content/browser/debugger/worker_devtools_manager.cc

Issue 11630004: DevTools: rename debugger/ to devtools/, move DevTools files into content/renderer/devtools. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: For landing Created 8 years 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/debugger/worker_devtools_manager.cc
diff --git a/content/browser/debugger/worker_devtools_manager.cc b/content/browser/debugger/worker_devtools_manager.cc
deleted file mode 100644
index 3dda61299a69302a7fbb24545fc5b82d531e0453..0000000000000000000000000000000000000000
--- a/content/browser/debugger/worker_devtools_manager.cc
+++ /dev/null
@@ -1,472 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/debugger/worker_devtools_manager.h"
-
-#include <list>
-#include <map>
-
-#include "base/bind.h"
-#include "content/browser/debugger/devtools_agent_host.h"
-#include "content/browser/debugger/devtools_manager_impl.h"
-#include "content/browser/debugger/worker_devtools_message_filter.h"
-#include "content/browser/worker_host/worker_service_impl.h"
-#include "content/common/devtools_messages.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/child_process_data.h"
-#include "content/public/browser/devtools_agent_host_registry.h"
-#include "content/public/common/process_type.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebDevToolsAgent.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
-
-namespace content {
-
-// Called on the UI thread.
-// static
-DevToolsAgentHost* DevToolsAgentHostRegistry::GetDevToolsAgentHostForWorker(
- int worker_process_id,
- int worker_route_id) {
- return WorkerDevToolsManager::GetDevToolsAgentHostForWorker(
- worker_process_id,
- worker_route_id);
-}
-
-class WorkerDevToolsManager::AgentHosts {
-public:
- static void Add(WorkerId id, WorkerDevToolsAgentHost* host) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!instance_)
- instance_ = new AgentHosts();
- instance_->map_[id] = host;
- }
- static void Remove(WorkerId id) {
- DCHECK(instance_);
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- Instances& map = instance_->map_;
- map.erase(id);
- if (map.empty()) {
- delete instance_;
- instance_ = NULL;
- }
- }
-
- static WorkerDevToolsAgentHost* GetAgentHost(WorkerId id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!instance_)
- return NULL;
- Instances& map = instance_->map_;
- Instances::iterator it = map.find(id);
- if (it == map.end())
- return NULL;
- return it->second;
- }
-
-private:
- AgentHosts() {
- }
- ~AgentHosts() {}
-
- static AgentHosts* instance_;
- typedef std::map<WorkerId, WorkerDevToolsAgentHost*> Instances;
- Instances map_;
-};
-
-WorkerDevToolsManager::AgentHosts*
- WorkerDevToolsManager::AgentHosts::instance_ = NULL;
-
-
-struct WorkerDevToolsManager::TerminatedInspectedWorker {
- TerminatedInspectedWorker(WorkerId id, const GURL& url, const string16& name)
- : old_worker_id(id),
- worker_url(url),
- worker_name(name) {}
- WorkerId old_worker_id;
- GURL worker_url;
- string16 worker_name;
-};
-
-
-class WorkerDevToolsManager::WorkerDevToolsAgentHost
- : public DevToolsAgentHost {
- public:
- explicit WorkerDevToolsAgentHost(WorkerId worker_id)
- : worker_id_(worker_id) {
- AgentHosts::Add(worker_id, this);
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &RegisterAgent,
- worker_id.first,
- worker_id.second));
- }
-
- void WorkerDestroyed() {
- NotifyCloseListener();
- delete this;
- }
-
- private:
- virtual ~WorkerDevToolsAgentHost() {
- AgentHosts::Remove(worker_id_);
- }
-
- static void RegisterAgent(
- int worker_process_id,
- int worker_route_id) {
- WorkerDevToolsManager::GetInstance()->RegisterDevToolsAgentHostForWorker(
- worker_process_id, worker_route_id);
- }
-
- static void ForwardToWorkerDevToolsAgent(
- int worker_process_id,
- int worker_route_id,
- IPC::Message* message) {
- WorkerDevToolsManager::GetInstance()->ForwardToWorkerDevToolsAgent(
- worker_process_id, worker_route_id, *message);
- }
-
- // DevToolsAgentHost implementation.
- virtual void SendMessageToAgent(IPC::Message* message) OVERRIDE {
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &WorkerDevToolsAgentHost::ForwardToWorkerDevToolsAgent,
- worker_id_.first,
- worker_id_.second,
- base::Owned(message)));
- }
- virtual void NotifyClientAttaching() OVERRIDE {}
- virtual void NotifyClientDetaching() OVERRIDE {}
- virtual int GetRenderProcessId() OVERRIDE { return -1; }
-
- WorkerId worker_id_;
-
- DISALLOW_COPY_AND_ASSIGN(WorkerDevToolsAgentHost);
-};
-
-
-class WorkerDevToolsManager::DetachedClientHosts {
- public:
- static void WorkerReloaded(WorkerId old_id, WorkerId new_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (instance_ && instance_->ReattachClient(old_id, new_id))
- return;
- RemovePendingWorkerData(old_id);
- }
-
- static void WorkerDestroyed(WorkerId id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- WorkerDevToolsAgentHost* agent = AgentHosts::GetAgentHost(id);
- if (!agent) {
- RemovePendingWorkerData(id);
- return;
- }
- DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
- agent,
- WebKit::WebDevToolsAgent::workerDisconnectedFromWorkerEvent().utf8());
- int cookie = DevToolsManagerImpl::GetInstance()->DetachClientHost(agent);
- agent->WorkerDestroyed();
- if (cookie == -1) {
- RemovePendingWorkerData(id);
- return;
- }
- if (!instance_)
- new DetachedClientHosts();
- instance_->worker_id_to_cookie_[id] = cookie;
- }
-
- private:
- DetachedClientHosts() {
- instance_ = this;
- }
- ~DetachedClientHosts() {
- instance_ = NULL;
- }
-
- bool ReattachClient(WorkerId old_id, WorkerId new_id) {
- WorkerIdToCookieMap::iterator it = worker_id_to_cookie_.find(old_id);
- if (it == worker_id_to_cookie_.end())
- return false;
- DevToolsAgentHost* agent =
- WorkerDevToolsManager::GetDevToolsAgentHostForWorker(
- new_id.first,
- new_id.second);
- DevToolsManagerImpl::GetInstance()->AttachClientHost(
- it->second,
- agent);
- worker_id_to_cookie_.erase(it);
- if (worker_id_to_cookie_.empty())
- delete this;
- return true;
- }
-
- static void RemovePendingWorkerData(WorkerId id) {
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&RemoveInspectedWorkerDataOnIOThread, id));
- }
-
- static void RemoveInspectedWorkerDataOnIOThread(WorkerId id) {
- WorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData(id);
- }
-
- static DetachedClientHosts* instance_;
- typedef std::map<WorkerId, int> WorkerIdToCookieMap;
- WorkerIdToCookieMap worker_id_to_cookie_;
-};
-
-WorkerDevToolsManager::DetachedClientHosts*
- WorkerDevToolsManager::DetachedClientHosts::instance_ = NULL;
-
-struct WorkerDevToolsManager::InspectedWorker {
- InspectedWorker(WorkerProcessHost* host, int route_id, const GURL& url,
- const string16& name)
- : host(host),
- route_id(route_id),
- worker_url(url),
- worker_name(name) {}
- WorkerProcessHost* const host;
- int const route_id;
- GURL worker_url;
- string16 worker_name;
-};
-
-// static
-WorkerDevToolsManager* WorkerDevToolsManager::GetInstance() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return Singleton<WorkerDevToolsManager>::get();
-}
-
-// static
-DevToolsAgentHost* WorkerDevToolsManager::GetDevToolsAgentHostForWorker(
- int worker_process_id,
- int worker_route_id) {
- WorkerId id(worker_process_id, worker_route_id);
- WorkerDevToolsAgentHost* result = AgentHosts::GetAgentHost(id);
- if (!result)
- result = new WorkerDevToolsAgentHost(id);
- return result;
-}
-
-WorkerDevToolsManager::WorkerDevToolsManager() {
-}
-
-WorkerDevToolsManager::~WorkerDevToolsManager() {
-}
-
-void WorkerDevToolsManager::WorkerCreated(
- WorkerProcessHost* worker,
- const WorkerProcessHost::WorkerInstance& instance) {
- for (TerminatedInspectedWorkers::iterator it = terminated_workers_.begin();
- it != terminated_workers_.end(); ++it) {
- if (instance.Matches(it->worker_url, it->worker_name,
- instance.partition(),
- instance.resource_context())) {
- worker->Send(new DevToolsAgentMsg_PauseWorkerContextOnStart(
- instance.worker_route_id()));
- WorkerId new_worker_id(worker->GetData().id, instance.worker_route_id());
- paused_workers_[new_worker_id] = it->old_worker_id;
- terminated_workers_.erase(it);
- return;
- }
- }
-}
-
-void WorkerDevToolsManager::WorkerDestroyed(
- WorkerProcessHost* worker,
- int worker_route_id) {
- InspectedWorkersList::iterator it = FindInspectedWorker(
- worker->GetData().id,
- worker_route_id);
- if (it == inspected_workers_.end())
- return;
-
- WorkerId worker_id(worker->GetData().id, worker_route_id);
- terminated_workers_.push_back(TerminatedInspectedWorker(
- worker_id,
- it->worker_url,
- it->worker_name));
- inspected_workers_.erase(it);
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&DetachedClientHosts::WorkerDestroyed, worker_id));
-}
-
-void WorkerDevToolsManager::WorkerContextStarted(WorkerProcessHost* process,
- int worker_route_id) {
- WorkerId new_worker_id(process->GetData().id, worker_route_id);
- PausedWorkers::iterator it = paused_workers_.find(new_worker_id);
- if (it == paused_workers_.end())
- return;
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &DetachedClientHosts::WorkerReloaded,
- it->second,
- new_worker_id));
- paused_workers_.erase(it);
-}
-
-void WorkerDevToolsManager::RemoveInspectedWorkerData(
- const WorkerId& id) {
- for (TerminatedInspectedWorkers::iterator it = terminated_workers_.begin();
- it != terminated_workers_.end(); ++it) {
- if (it->old_worker_id == id) {
- terminated_workers_.erase(it);
- return;
- }
- }
-
- for (PausedWorkers::iterator it = paused_workers_.begin();
- it != paused_workers_.end(); ++it) {
- if (it->second == id) {
- SendResumeToWorker(it->first);
- paused_workers_.erase(it);
- return;
- }
- }
-}
-
-WorkerDevToolsManager::InspectedWorkersList::iterator
-WorkerDevToolsManager::FindInspectedWorker(
- int host_id, int route_id) {
- InspectedWorkersList::iterator it = inspected_workers_.begin();
- while (it != inspected_workers_.end()) {
- if (it->host->GetData().id == host_id && it->route_id == route_id)
- break;
- ++it;
- }
- return it;
-}
-
-static WorkerProcessHost* FindWorkerProcess(int worker_process_id) {
- for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) {
- if (iter.GetData().id == worker_process_id)
- return *iter;
- }
- return NULL;
-}
-
-void WorkerDevToolsManager::RegisterDevToolsAgentHostForWorker(
- int worker_process_id,
- int worker_route_id) {
- if (WorkerProcessHost* process = FindWorkerProcess(worker_process_id)) {
- const WorkerProcessHost::Instances& instances = process->instances();
- for (WorkerProcessHost::Instances::const_iterator i = instances.begin();
- i != instances.end(); ++i) {
- if (i->worker_route_id() == worker_route_id) {
- DCHECK(FindInspectedWorker(worker_process_id, worker_route_id) ==
- inspected_workers_.end());
- inspected_workers_.push_back(
- InspectedWorker(process, worker_route_id, i->url(), i->name()));
- return;
- }
- }
- }
- NotifyWorkerDestroyedOnIOThread(worker_process_id, worker_route_id);
-}
-
-void WorkerDevToolsManager::ForwardToDevToolsClient(
- int worker_process_id,
- int worker_route_id,
- const std::string& message) {
- if (FindInspectedWorker(worker_process_id, worker_route_id) ==
- inspected_workers_.end()) {
- NOTREACHED();
- return;
- }
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &ForwardToDevToolsClientOnUIThread,
- worker_process_id,
- worker_route_id,
- message));
-}
-
-void WorkerDevToolsManager::SaveAgentRuntimeState(int worker_process_id,
- int worker_route_id,
- const std::string& state) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &SaveAgentRuntimeStateOnUIThread,
- worker_process_id,
- worker_route_id,
- state));
-}
-
-void WorkerDevToolsManager::ForwardToWorkerDevToolsAgent(
- int worker_process_id,
- int worker_route_id,
- const IPC::Message& message) {
- InspectedWorkersList::iterator it = FindInspectedWorker(
- worker_process_id,
- worker_route_id);
- if (it == inspected_workers_.end())
- return;
- IPC::Message* msg = new IPC::Message(message);
- msg->set_routing_id(worker_route_id);
- it->host->Send(msg);
-}
-
-// static
-void WorkerDevToolsManager::ForwardToDevToolsClientOnUIThread(
- int worker_process_id,
- int worker_route_id,
- const std::string& message) {
- WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId(
- worker_process_id,
- worker_route_id));
- if (!agent_host)
- return;
- DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(agent_host,
- message);
-}
-
-// static
-void WorkerDevToolsManager::SaveAgentRuntimeStateOnUIThread(
- int worker_process_id,
- int worker_route_id,
- const std::string& state) {
- WorkerDevToolsAgentHost* agent_host = AgentHosts::GetAgentHost(WorkerId(
- worker_process_id,
- worker_route_id));
- if (!agent_host)
- return;
- DevToolsManagerImpl::GetInstance()->SaveAgentRuntimeState(agent_host, state);
-}
-
-// static
-void WorkerDevToolsManager::NotifyWorkerDestroyedOnIOThread(
- int worker_process_id,
- int worker_route_id) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread,
- worker_process_id,
- worker_route_id));
-}
-
-// static
-void WorkerDevToolsManager::NotifyWorkerDestroyedOnUIThread(
- int worker_process_id,
- int worker_route_id) {
- WorkerDevToolsAgentHost* host =
- AgentHosts::GetAgentHost(WorkerId(worker_process_id, worker_route_id));
- if (host)
- host->WorkerDestroyed();
-}
-
-// static
-void WorkerDevToolsManager::SendResumeToWorker(const WorkerId& id) {
- if (WorkerProcessHost* process = FindWorkerProcess(id.first))
- process->Send(new DevToolsAgentMsg_ResumeWorkerContext(id.second));
-}
-
-} // namespace content
« no previous file with comments | « content/browser/debugger/worker_devtools_manager.h ('k') | content/browser/debugger/worker_devtools_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698