13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// When each service is created, we set a flag indicating this. At this point,
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the service initialization could fail or succeed. This allows us to remember
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// if we tried to create a service, and not try creating it over and over if
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the creation failed.
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h"
193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/non_thread_safe.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/timer.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browser_process.h"
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/download/download_status_updater.h"
233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h"
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/prefs/pref_member.h"
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/thumbnail_generator.h"
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "ipc/ipc_message.h"
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ChromeNetLog;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CommandLine;
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass DevToolsHttpProtocolHandler;
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass DevToolsProtocolHandler;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FilePath;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NotificationService;
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass PluginDataRemover;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabCloseableStateWatcher;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Real implementation of BrowserProcess that creates and returns the services.
4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass BrowserProcessImpl : public BrowserProcess,
413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                           public base::NonThreadSafe,
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                           public NotificationObserver {
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit BrowserProcessImpl(const CommandLine& command_line);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~BrowserProcessImpl();
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void EndSession();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // BrowserProcess methods
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ResourceDispatcherHost* resource_dispatcher_host();
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual MetricsService* metrics_service();
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual IOThread* io_thread();
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::Thread* file_thread();
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::Thread* db_thread();
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::Thread* process_launcher_thread();
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::Thread* cache_thread();
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual base::Thread* gpu_thread();
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(USE_X11)
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::Thread* background_x11_thread();
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual WatchDogThread* watchdog_thread();
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ProfileManager* profile_manager();
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual PrefService* local_state();
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual DevToolsManager* devtools_manager();
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual SidebarManager* sidebar_manager();
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual ui::Clipboard* clipboard();
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual net::URLRequestContextGetter* system_request_context();
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS)
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual chromeos::ProxyConfigServiceImpl*
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      chromeos_proxy_config_service_impl();
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // defined(OS_CHROMEOS)
72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ExtensionEventRouterForwarder* extension_event_router_forwarder();
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual NotificationUIManager* notification_ui_manager();
74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual policy::BrowserPolicyConnector* browser_policy_connector();
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual IconManager* icon_manager();
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ThumbnailGenerator* GetThumbnailGenerator();
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual AutomationProviderList* InitAutomationProviderList();
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void InitDevToolsHttpProtocolHandler(
7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      const std::string& ip,
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      int port,
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      const std::string& frontend_url);
8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void InitDevToolsLegacyProtocolHandler(int port);
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual unsigned int AddRefModule();
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual unsigned int ReleaseModule();
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual bool IsShuttingDown();
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual printing::PrintJobManager* print_job_manager();
874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual printing::PrintPreviewTabController* print_preview_tab_controller();
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual GoogleURLTracker* google_url_tracker();
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual IntranetRedirectDetector* intranet_redirect_detector();
903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual const std::string& GetApplicationLocale();
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetApplicationLocale(const std::string& locale);
923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual DownloadStatusUpdater* download_status_updater();
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual base::WaitableEvent* shutdown_event();
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual TabCloseableStateWatcher* tab_closeable_state_watcher();
9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual safe_browsing::ClientSideDetectionService*
9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      safe_browsing_detection_service();
97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual bool plugin_finder_disabled() const;
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // NotificationObserver methods
10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Observe(NotificationType type,
10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                       const NotificationSource& source,
10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                       const NotificationDetails& details);
10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
10521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void StartAutoupdateTimer();
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual ChromeNetLog* net_log();
10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(IPC_MESSAGE_LOG_ENABLED)
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetIPCLoggingEnabled(bool enable);
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ClearLocalState(const FilePath& profile_path);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ShouldClearLocalState(FilePath* profile_path);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateResourceDispatcherHost();
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateMetricsService();
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateIOThread();
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static void CleanupOnIOThread();
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void WaitForPluginDataRemoverToFinish();
12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateFileThread();
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateDBThread();
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateProcessLauncherThread();
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateCacheThread();
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void CreateGpuThread();
131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void CreateWatchdogThread();
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateTemplateURLModel();
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateProfileManager();
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateWebDataService();
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateLocalState();
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateViewedPageTracker();
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateIconManager();
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateDevToolsManager();
1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void CreateSidebarManager();
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateGoogleURLTracker();
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateIntranetRedirectDetector();
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateNotificationUIManager();
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateStatusTrayManager();
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateTabCloseableStateWatcher();
1454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void CreatePrintPreviewTabController();
14621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void CreateSafeBrowsingDetectionService();
14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool IsSafeBrowsingDetectionServiceEnabled();
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void ApplyDisabledSchemesPolicy();
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(IPC_MESSAGE_LOG_ENABLED)
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIPCLoggingEnabledForChildProcesses(bool enabled);
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_resource_dispatcher_host_;
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<ResourceDispatcherHost> resource_dispatcher_host_;
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_metrics_service_;
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<MetricsService> metrics_service_;
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_io_thread_;
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<IOThread> io_thread_;
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(USE_X11)
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This shares a created flag with the IO thread.
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::Thread> background_x11_thread_;
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_file_thread_;
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::Thread> file_thread_;
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_db_thread_;
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::Thread> db_thread_;
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_process_launcher_thread_;
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::Thread> process_launcher_thread_;
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_cache_thread_;
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::Thread> cache_thread_;
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool created_gpu_thread_;
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<base::Thread> gpu_thread_;
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool created_watchdog_thread_;
185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_ptr<WatchDogThread> watchdog_thread_;
186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_profile_manager_;
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<ProfileManager> profile_manager_;
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_local_state_;
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<PrefService> local_state_;
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_icon_manager_;
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<IconManager> icon_manager_;
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<ExtensionEventRouterForwarder>
197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      extension_event_router_forwarder_;
198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_refptr<DevToolsHttpProtocolHandler> devtools_http_handler_;
20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_refptr<DevToolsProtocolHandler> devtools_legacy_handler_;
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_devtools_manager_;
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<DevToolsManager> devtools_manager_;
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool created_sidebar_manager_;
2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_refptr<SidebarManager> sidebar_manager_;
2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool created_browser_policy_connector_;
210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
2113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
2124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_refptr<printing::PrintPreviewTabController>
2134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      print_preview_tab_controller_;
2144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<ui::Clipboard> clipboard_;
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Manager for desktop notification UI.
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool created_notification_ui_manager_;
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<NotificationUIManager> notification_ui_manager_;
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<AutomationProviderList> automation_provider_list_;
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<GoogleURLTracker> google_url_tracker_;
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<NotificationService> main_notification_service_;
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TabCloseableStateWatcher> tab_closeable_state_watcher_;
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool created_safe_browsing_detection_service_;
23121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<safe_browsing::ClientSideDetectionService>
23221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     safe_browsing_detection_service_;
23321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  unsigned int module_ref_count_;
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool did_start_;
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Ensures that all the print jobs are finished before closing the browser.
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<printing::PrintJobManager> print_job_manager_;
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string locale_;
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool checked_for_new_frames_;
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool using_new_frames_;
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // This service just sits around and makes thumbnails for tabs. It does
2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // nothing in the constructor so we don't have to worry about lazy init.
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ThumbnailGenerator thumbnail_generator_;
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Download status updates (like a changing application icon on dock/taskbar)
2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // are global per-application. DownloadStatusUpdater does no work in the ctor
2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // so we don't have to worry about lazy initialization.
2523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DownloadStatusUpdater download_status_updater_;
2533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // An event that notifies when we are shutting-down.
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<base::WaitableEvent> shutdown_event_;
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
257731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Ensures that the observers of plugin/print disable/enable state
2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // notifications are properly added and removed.
259731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  PrefChangeRegistrar pref_change_registrar_;
2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Lives here so can safely log events on shutdown.
26221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<ChromeNetLog> net_log_;
26321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
26421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  NotificationRegistrar notification_registrar_;
26521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_refptr<PluginDataRemover> plugin_data_remover_;
26621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
267dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Monitors the state of the 'DisablePluginFinder' policy.
268dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  BooleanPrefMember plugin_finder_disabled_pref_;
269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Monitors the list of disabled schemes policy.
271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ListPrefMember disabled_schemes_pref_;
272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::RepeatingTimer<BrowserProcessImpl> autoupdate_timer_;
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Gets called by autoupdate timer to see if browser needs restart and can be
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // restarted, and if that's the case, restarts the browser.
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnAutoupdateTimer();
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool CanAutorestartForUpdate() const;
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void RestartPersistentInstance();
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // defined(OS_WIN) || defined(OS_LINUX)
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS)
284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<chromeos::ProxyConfigServiceImpl>
285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      chromeos_proxy_config_service_impl_;
286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif
287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
292