1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_MANAGER_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_MANAGER_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector>
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Profile;
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ServiceProcessControl;
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// ServiceProcessControlManager is a registrar for all ServiceProcess created
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// in the browser process. It is also a factory for creating new
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// ServiceProcess.
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ServiceProcessControlManager {
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  typedef std::vector<ServiceProcessControl*> ServiceProcessControlList;
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ServiceProcessControlManager();
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ~ServiceProcessControlManager();
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Get the ServiceProcess instance corresponding to |profile| and |type|.
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // If such an instance doesn't exist a new instance is created.
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  //
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // There will be at most one ServiceProcess for a |profile|.
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  //
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // This method should only be accessed on the UI thread.
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ServiceProcessControl* GetProcessControl(Profile* profile);
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Destroy all ServiceProcess objects created.
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void Shutdown();
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Return the instance of ServiceProcessControlManager.
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  static ServiceProcessControlManager* GetInstance();
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ServiceProcessControlList process_control_list_;
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_MANAGER_H_
42