1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This interface is for managing the global services of the application. Each
6// service is lazily created when requested the first time. The service getters
7// will return NULL if the service is not available, so callers must check for
8// this condition.
9
10#ifndef CHROME_BROWSER_BROWSER_PROCESS_H_
11#define CHROME_BROWSER_BROWSER_PROCESS_H_
12
13#include <string>
14
15#include "base/basictypes.h"
16#include "base/memory/scoped_ptr.h"
17#include "chrome/browser/browser_process_platform_part.h"
18#include "chrome/browser/ui/host_desktop.h"
19
20class BackgroundModeManager;
21class ChromeNetLog;
22class CRLSetFetcher;
23class DownloadRequestLimiter;
24class DownloadStatusUpdater;
25class GLStringManager;
26class GpuModeManager;
27class IconManager;
28class IntranetRedirectDetector;
29class IOThread;
30class MediaFileSystemRegistry;
31class MetricsServicesManager;
32class NotificationUIManager;
33class PrefRegistrySimple;
34class PrefService;
35class Profile;
36class ProfileManager;
37class SafeBrowsingService;
38class StatusTray;
39class WatchDogThread;
40#if defined(ENABLE_WEBRTC)
41class WebRtcLogUploader;
42#endif
43
44namespace chrome_variations {
45class VariationsService;
46}
47
48namespace component_updater {
49class ComponentUpdateService;
50class PnaclComponentInstaller;
51}
52
53namespace extensions {
54class EventRouterForwarder;
55}
56
57namespace gcm {
58class GCMDriver;
59}
60
61namespace message_center {
62class MessageCenter;
63}
64
65namespace metrics {
66class MetricsService;
67}
68
69namespace net {
70class URLRequestContextGetter;
71}
72
73namespace network_time {
74class NetworkTimeTracker;
75}
76
77namespace policy {
78class BrowserPolicyConnector;
79class PolicyService;
80}
81
82namespace prerender {
83class PrerenderTracker;
84}
85
86namespace printing {
87class BackgroundPrintingManager;
88class PrintJobManager;
89class PrintPreviewDialogController;
90}
91
92namespace rappor {
93class RapporService;
94}
95
96namespace safe_browsing {
97class ClientSideDetectionService;
98}
99
100// NOT THREAD SAFE, call only from the main thread.
101// These functions shouldn't return NULL unless otherwise noted.
102class BrowserProcess {
103 public:
104  BrowserProcess();
105  virtual ~BrowserProcess();
106
107  // Called when the ResourceDispatcherHost object is created by content.
108  virtual void ResourceDispatcherHostCreated() = 0;
109
110  // Invoked when the user is logging out/shutting down. When logging off we may
111  // not have enough time to do a normal shutdown. This method is invoked prior
112  // to normal shutdown and saves any state that must be saved before we are
113  // continue shutdown.
114  virtual void EndSession() = 0;
115
116  // Gets the manager for the various metrics-related services, constructing it
117  // if necessary.
118  virtual MetricsServicesManager* GetMetricsServicesManager() = 0;
119
120  // Services: any of these getters may return NULL
121  virtual metrics::MetricsService* metrics_service() = 0;
122  virtual rappor::RapporService* rappor_service() = 0;
123  virtual ProfileManager* profile_manager() = 0;
124  virtual PrefService* local_state() = 0;
125  virtual net::URLRequestContextGetter* system_request_context() = 0;
126  virtual chrome_variations::VariationsService* variations_service() = 0;
127
128  virtual BrowserProcessPlatformPart* platform_part() = 0;
129
130  virtual extensions::EventRouterForwarder*
131      extension_event_router_forwarder() = 0;
132
133  // Returns the manager for desktop notifications.
134  virtual NotificationUIManager* notification_ui_manager() = 0;
135
136  // MessageCenter is a global list of currently displayed notifications.
137  virtual message_center::MessageCenter* message_center() = 0;
138
139  // Returns the state object for the thread that we perform I/O
140  // coordination on (network requests, communication with renderers,
141  // etc.
142  //
143  // Can be NULL close to startup and shutdown.
144  //
145  // NOTE: If you want to post a task to the IO thread, use
146  // BrowserThread::PostTask (or other variants).
147  virtual IOThread* io_thread() = 0;
148
149  // Returns the thread that is used for health check of all browser threads.
150  virtual WatchDogThread* watchdog_thread() = 0;
151
152  // Starts and manages the policy system.
153  virtual policy::BrowserPolicyConnector* browser_policy_connector() = 0;
154
155  // This is the main interface for chromium components to retrieve policy
156  // information from the policy system.
157  virtual policy::PolicyService* policy_service() = 0;
158
159  virtual IconManager* icon_manager() = 0;
160
161  virtual GLStringManager* gl_string_manager() = 0;
162
163  virtual GpuModeManager* gpu_mode_manager() = 0;
164
165  virtual void CreateDevToolsHttpProtocolHandler(
166      chrome::HostDesktopType host_desktop_type,
167      const std::string& ip,
168      int port) = 0;
169
170  virtual unsigned int AddRefModule() = 0;
171  virtual unsigned int ReleaseModule() = 0;
172
173  virtual bool IsShuttingDown() = 0;
174
175  virtual printing::PrintJobManager* print_job_manager() = 0;
176  virtual printing::PrintPreviewDialogController*
177      print_preview_dialog_controller() = 0;
178  virtual printing::BackgroundPrintingManager*
179      background_printing_manager() = 0;
180
181  virtual IntranetRedirectDetector* intranet_redirect_detector() = 0;
182
183  // Returns the locale used by the application.
184  virtual const std::string& GetApplicationLocale() = 0;
185  virtual void SetApplicationLocale(const std::string& locale) = 0;
186
187  virtual DownloadStatusUpdater* download_status_updater() = 0;
188  virtual DownloadRequestLimiter* download_request_limiter() = 0;
189
190  // Returns the object that manages background applications.
191  virtual BackgroundModeManager* background_mode_manager() = 0;
192  virtual void set_background_mode_manager_for_test(
193      scoped_ptr<BackgroundModeManager> manager) = 0;
194
195  // Returns the StatusTray, which provides an API for displaying status icons
196  // in the system status tray. Returns NULL if status icons are not supported
197  // on this platform (or this is a unit test).
198  virtual StatusTray* status_tray() = 0;
199
200  // Returns the SafeBrowsing service.
201  virtual SafeBrowsingService* safe_browsing_service() = 0;
202
203  // Returns an object which handles communication with the SafeBrowsing
204  // client-side detection servers.
205  virtual safe_browsing::ClientSideDetectionService*
206      safe_browsing_detection_service() = 0;
207
208#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
209  // This will start a timer that, if Chrome is in persistent mode, will check
210  // whether an update is available, and if that's the case, restart the
211  // browser. Note that restart code will strip some of the command line keys
212  // and all loose values from the cl this instance of Chrome was launched with,
213  // and add the command line key that will force Chrome to start in the
214  // background mode. For the full list of "blacklisted" keys, refer to
215  // |kSwitchesToRemoveOnAutorestart| array in browser_process_impl.cc.
216  virtual void StartAutoupdateTimer() = 0;
217#endif
218
219  virtual ChromeNetLog* net_log() = 0;
220
221  virtual prerender::PrerenderTracker* prerender_tracker() = 0;
222
223  virtual component_updater::ComponentUpdateService* component_updater() = 0;
224
225  virtual CRLSetFetcher* crl_set_fetcher() = 0;
226
227  virtual component_updater::PnaclComponentInstaller*
228      pnacl_component_installer() = 0;
229
230  virtual MediaFileSystemRegistry* media_file_system_registry() = 0;
231
232  virtual bool created_local_state() const = 0;
233
234#if defined(ENABLE_WEBRTC)
235  virtual WebRtcLogUploader* webrtc_log_uploader() = 0;
236#endif
237
238  virtual network_time::NetworkTimeTracker* network_time_tracker() = 0;
239
240  virtual gcm::GCMDriver* gcm_driver() = 0;
241
242 private:
243  DISALLOW_COPY_AND_ASSIGN(BrowserProcess);
244};
245
246extern BrowserProcess* g_browser_process;
247
248#endif  // CHROME_BROWSER_BROWSER_PROCESS_H_
249