Chromium Code Reviews| Index: content/browser/devtools/worker_devtools_manager.cc |
| diff --git a/content/browser/devtools/worker_devtools_manager.cc b/content/browser/devtools/worker_devtools_manager.cc |
| index db5cc7484f26fd0e3eafe6dda0935a7a16abc60a..d69be2b2b1bedb1def2bfcfbfa2ac992f7ab3d43 100644 |
| --- a/content/browser/devtools/worker_devtools_manager.cc |
| +++ b/content/browser/devtools/worker_devtools_manager.cc |
| @@ -61,11 +61,12 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
| explicit WorkerDevToolsAgentHost(WorkerId worker_id) |
| : has_worker_id_(false) { |
| SetWorkerId(worker_id, false); |
| - AddRef(); // Balanced in ResetWorkerId. |
| } |
| void SetWorkerId(WorkerId worker_id, bool reattach) { |
| worker_id_ = worker_id; |
| + if (!has_worker_id_) |
| + AddRef(); // Balanced in ResetWorkerId. |
| has_worker_id_ = true; |
| g_agent_map.Get()[worker_id_] = this; |
| @@ -84,7 +85,7 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
| void ResetWorkerId() { |
| g_agent_map.Get().erase(worker_id_); |
| has_worker_id_ = false; |
| - Release(); |
| + Release(); // Balanced in SetWorkerId. |
| } |
| void SaveAgentRuntimeState(const std::string& state) { |
| @@ -97,10 +98,7 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
| } |
| private: |
| - virtual ~WorkerDevToolsAgentHost() { |
| - g_agent_map.Get().erase(worker_id_); |
|
yurys
2013/04/15 05:24:18
Why did this move?
Vladislav Kaznacheev
2013/04/15 13:10:27
Because I needed to call a method from DetachedCli
|
| - g_orphan_map.Get().erase(worker_id_); |
| - } |
| + virtual ~WorkerDevToolsAgentHost(); |
| static void ConnectToWorker( |
| int worker_process_id, |
| @@ -180,16 +178,16 @@ class WorkerDevToolsManager::DetachedClientHosts { |
| agent->ResetWorkerId(); |
| } |
| - private: |
| - DetachedClientHosts() {} |
| - ~DetachedClientHosts() {} |
| - |
| static void RemovePendingWorkerData(WorkerId id) { |
|
yurys
2013/04/15 05:24:18
Why do you need this method to be public?
|
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| base::Bind(&RemoveInspectedWorkerDataOnIOThread, id)); |
| } |
| + private: |
| + DetachedClientHosts() {} |
| + ~DetachedClientHosts() {} |
| + |
| static void RemoveInspectedWorkerDataOnIOThread(WorkerId id) { |
| WorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData(id); |
| } |
| @@ -441,4 +439,10 @@ void WorkerDevToolsManager::SendResumeToWorker(const WorkerId& id) { |
| process->Send(new DevToolsAgentMsg_ResumeWorkerContext(id.second)); |
| } |
| +WorkerDevToolsManager::WorkerDevToolsAgentHost::~WorkerDevToolsAgentHost() { |
| + DetachedClientHosts::RemovePendingWorkerData(worker_id_); |
| + g_agent_map.Get().erase(worker_id_); |
| + g_orphan_map.Get().erase(worker_id_); |
| +} |
| + |
| } // namespace content |