summaryrefslogtreecommitdiffstats
path: root/chrome/browser/service/service_process_control_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/service/service_process_control_manager.cc')
-rw-r--r--chrome/browser/service/service_process_control_manager.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/chrome/browser/service/service_process_control_manager.cc b/chrome/browser/service/service_process_control_manager.cc
new file mode 100644
index 0000000..821de9a
--- /dev/null
+++ b/chrome/browser/service/service_process_control_manager.cc
@@ -0,0 +1,45 @@
+// Copyright (c) 2010 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/singleton.h"
+#include "base/stl_util-inl.h"
+#include "chrome/browser/chrome_thread.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/service/service_process_control.h"
+
+ServiceProcessControlManager::ServiceProcessControlManager() {
+}
+
+ServiceProcessControlManager::~ServiceProcessControlManager() {
+ DCHECK(process_control_list_.empty());
+}
+
+ServiceProcessControl* ServiceProcessControlManager::GetProcessControl(
+ Profile* profile, ServiceProcessType type) {
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::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, type);
+ process_control_list_.push_back(process);
+ return process;
+}
+
+void ServiceProcessControlManager::Shutdown() {
+ STLDeleteElements(&process_control_list_);
+}
+
+// static
+ServiceProcessControlManager* ServiceProcessControlManager::instance() {
+ return Singleton<ServiceProcessControlManager>::get();
+}