| // 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 "chrome/browser/service/service_process_control_manager.h" |
| |
| #include "base/memory/singleton.h" |
| #include "base/stl_util-inl.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/service/service_process_control.h" |
| #include "content/browser/browser_thread.h" |
| |
| ServiceProcessControlManager::ServiceProcessControlManager() { |
| } |
| |
| ServiceProcessControlManager::~ServiceProcessControlManager() { |
| DCHECK(process_control_list_.empty()); |
| } |
| |
| ServiceProcessControl* ServiceProcessControlManager::GetProcessControl( |
| Profile* profile) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| |
| // TODO(hclam): We will have different service process for different types of |
| // service, but now we only create a new process for a different profile. |
| for (ServiceProcessControlList::iterator i = process_control_list_.begin(); |
| i != process_control_list_.end(); ++i) { |
| if ((*i)->profile() == profile) |
| return *i; |
| } |
| |
| // Couldn't find a ServiceProcess so construct a new one. |
| ServiceProcessControl* process = new ServiceProcessControl(profile); |
| process_control_list_.push_back(process); |
| return process; |
| } |
| |
| void ServiceProcessControlManager::Shutdown() { |
| // When we shutdown the manager we just clear the list and don't actually |
| // shutdown the service process. |
| STLDeleteElements(&process_control_list_); |
| } |
| |
| // static |
| ServiceProcessControlManager* ServiceProcessControlManager::GetInstance() { |
| return Singleton<ServiceProcessControlManager>::get(); |
| } |