1 // Copyright (c) 2011 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 // When each service is created, we set a flag indicating this. At this point, 6 // the service initialization could fail or succeed. This allows us to remember 7 // if we tried to create a service, and not try creating it over and over if 8 // the creation failed. 9 10 #ifndef CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ 11 #define CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ 12 #pragma once 13 14 #include <string> 15 16 #include "base/basictypes.h" 17 #include "base/memory/scoped_ptr.h" 18 #include "base/message_loop.h" 19 #include "base/threading/non_thread_safe.h" 20 #include "base/timer.h" 21 #include "chrome/browser/browser_process.h" 22 #include "chrome/browser/download/download_status_updater.h" 23 #include "chrome/browser/prefs/pref_change_registrar.h" 24 #include "chrome/browser/prefs/pref_member.h" 25 #include "chrome/browser/tab_contents/thumbnail_generator.h" 26 #include "content/common/notification_observer.h" 27 #include "content/common/notification_registrar.h" 28 #include "ipc/ipc_message.h" 29 30 class ChromeNetLog; 31 class CommandLine; 32 class DevToolsHttpProtocolHandler; 33 class DevToolsProtocolHandler; 34 class FilePath; 35 class NotificationService; 36 class PluginDataRemover; 37 class TabCloseableStateWatcher; 38 39 // Real implementation of BrowserProcess that creates and returns the services. 40 class BrowserProcessImpl : public BrowserProcess, 41 public base::NonThreadSafe, 42 public NotificationObserver { 43 public: 44 explicit BrowserProcessImpl(const CommandLine& command_line); 45 virtual ~BrowserProcessImpl(); 46 47 virtual void EndSession(); 48 49 // BrowserProcess methods 50 virtual ResourceDispatcherHost* resource_dispatcher_host(); 51 virtual MetricsService* metrics_service(); 52 virtual IOThread* io_thread(); 53 virtual base::Thread* file_thread(); 54 virtual base::Thread* db_thread(); 55 virtual base::Thread* process_launcher_thread(); 56 virtual base::Thread* cache_thread(); 57 virtual base::Thread* gpu_thread(); 58 #if defined(USE_X11) 59 virtual base::Thread* background_x11_thread(); 60 #endif 61 virtual WatchDogThread* watchdog_thread(); 62 virtual ProfileManager* profile_manager(); 63 virtual PrefService* local_state(); 64 virtual DevToolsManager* devtools_manager(); 65 virtual SidebarManager* sidebar_manager(); 66 virtual ui::Clipboard* clipboard(); 67 virtual net::URLRequestContextGetter* system_request_context(); 68 #if defined(OS_CHROMEOS) 69 virtual chromeos::ProxyConfigServiceImpl* 70 chromeos_proxy_config_service_impl(); 71 #endif // defined(OS_CHROMEOS) 72 virtual ExtensionEventRouterForwarder* extension_event_router_forwarder(); 73 virtual NotificationUIManager* notification_ui_manager(); 74 virtual policy::BrowserPolicyConnector* browser_policy_connector(); 75 virtual IconManager* icon_manager(); 76 virtual ThumbnailGenerator* GetThumbnailGenerator(); 77 virtual AutomationProviderList* InitAutomationProviderList(); 78 virtual void InitDevToolsHttpProtocolHandler( 79 const std::string& ip, 80 int port, 81 const std::string& frontend_url); 82 virtual void InitDevToolsLegacyProtocolHandler(int port); 83 virtual unsigned int AddRefModule(); 84 virtual unsigned int ReleaseModule(); 85 virtual bool IsShuttingDown(); 86 virtual printing::PrintJobManager* print_job_manager(); 87 virtual printing::PrintPreviewTabController* print_preview_tab_controller(); 88 virtual GoogleURLTracker* google_url_tracker(); 89 virtual IntranetRedirectDetector* intranet_redirect_detector(); 90 virtual const std::string& GetApplicationLocale(); 91 virtual void SetApplicationLocale(const std::string& locale); 92 virtual DownloadStatusUpdater* download_status_updater(); 93 virtual base::WaitableEvent* shutdown_event(); 94 virtual TabCloseableStateWatcher* tab_closeable_state_watcher(); 95 virtual safe_browsing::ClientSideDetectionService* 96 safe_browsing_detection_service(); 97 virtual bool plugin_finder_disabled() const; 98 99 // NotificationObserver methods 100 virtual void Observe(NotificationType type, 101 const NotificationSource& source, 102 const NotificationDetails& details); 103 104 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 105 virtual void StartAutoupdateTimer(); 106 #endif 107 108 virtual ChromeNetLog* net_log(); 109 110 #if defined(IPC_MESSAGE_LOG_ENABLED) 111 virtual void SetIPCLoggingEnabled(bool enable); 112 #endif 113 114 private: 115 void ClearLocalState(const FilePath& profile_path); 116 bool ShouldClearLocalState(FilePath* profile_path); 117 118 void CreateResourceDispatcherHost(); 119 void CreateMetricsService(); 120 121 void CreateIOThread(); 122 static void CleanupOnIOThread(); 123 124 void WaitForPluginDataRemoverToFinish(); 125 126 void CreateFileThread(); 127 void CreateDBThread(); 128 void CreateProcessLauncherThread(); 129 void CreateCacheThread(); 130 void CreateGpuThread(); 131 void CreateWatchdogThread(); 132 void CreateTemplateURLModel(); 133 void CreateProfileManager(); 134 void CreateWebDataService(); 135 void CreateLocalState(); 136 void CreateViewedPageTracker(); 137 void CreateIconManager(); 138 void CreateDevToolsManager(); 139 void CreateSidebarManager(); 140 void CreateGoogleURLTracker(); 141 void CreateIntranetRedirectDetector(); 142 void CreateNotificationUIManager(); 143 void CreateStatusTrayManager(); 144 void CreateTabCloseableStateWatcher(); 145 void CreatePrintPreviewTabController(); 146 void CreateSafeBrowsingDetectionService(); 147 148 bool IsSafeBrowsingDetectionServiceEnabled(); 149 150 void ApplyDisabledSchemesPolicy(); 151 152 #if defined(IPC_MESSAGE_LOG_ENABLED) 153 void SetIPCLoggingEnabledForChildProcesses(bool enabled); 154 #endif 155 156 bool created_resource_dispatcher_host_; 157 scoped_ptr<ResourceDispatcherHost> resource_dispatcher_host_; 158 159 bool created_metrics_service_; 160 scoped_ptr<MetricsService> metrics_service_; 161 162 bool created_io_thread_; 163 scoped_ptr<IOThread> io_thread_; 164 #if defined(USE_X11) 165 // This shares a created flag with the IO thread. 166 scoped_ptr<base::Thread> background_x11_thread_; 167 #endif 168 169 bool created_file_thread_; 170 scoped_ptr<base::Thread> file_thread_; 171 172 bool created_db_thread_; 173 scoped_ptr<base::Thread> db_thread_; 174 175 bool created_process_launcher_thread_; 176 scoped_ptr<base::Thread> process_launcher_thread_; 177 178 bool created_cache_thread_; 179 scoped_ptr<base::Thread> cache_thread_; 180 181 bool created_gpu_thread_; 182 scoped_ptr<base::Thread> gpu_thread_; 183 184 bool created_watchdog_thread_; 185 scoped_ptr<WatchDogThread> watchdog_thread_; 186 187 bool created_profile_manager_; 188 scoped_ptr<ProfileManager> profile_manager_; 189 190 bool created_local_state_; 191 scoped_ptr<PrefService> local_state_; 192 193 bool created_icon_manager_; 194 scoped_ptr<IconManager> icon_manager_; 195 196 scoped_refptr<ExtensionEventRouterForwarder> 197 extension_event_router_forwarder_; 198 199 scoped_refptr<DevToolsHttpProtocolHandler> devtools_http_handler_; 200 201 scoped_refptr<DevToolsProtocolHandler> devtools_legacy_handler_; 202 203 bool created_devtools_manager_; 204 scoped_refptr<DevToolsManager> devtools_manager_; 205 206 bool created_sidebar_manager_; 207 scoped_refptr<SidebarManager> sidebar_manager_; 208 209 bool created_browser_policy_connector_; 210 scoped_ptr<policy::BrowserPolicyConnector> browser_policy_connector_; 211 212 scoped_refptr<printing::PrintPreviewTabController> 213 print_preview_tab_controller_; 214 215 scoped_ptr<ui::Clipboard> clipboard_; 216 217 // Manager for desktop notification UI. 218 bool created_notification_ui_manager_; 219 scoped_ptr<NotificationUIManager> notification_ui_manager_; 220 221 scoped_ptr<AutomationProviderList> automation_provider_list_; 222 223 scoped_ptr<GoogleURLTracker> google_url_tracker_; 224 scoped_ptr<IntranetRedirectDetector> intranet_redirect_detector_; 225 226 scoped_ptr<NotificationService> main_notification_service_; 227 228 scoped_ptr<TabCloseableStateWatcher> tab_closeable_state_watcher_; 229 230 bool created_safe_browsing_detection_service_; 231 scoped_ptr<safe_browsing::ClientSideDetectionService> 232 safe_browsing_detection_service_; 233 234 unsigned int module_ref_count_; 235 bool did_start_; 236 237 // Ensures that all the print jobs are finished before closing the browser. 238 scoped_ptr<printing::PrintJobManager> print_job_manager_; 239 240 std::string locale_; 241 242 bool checked_for_new_frames_; 243 bool using_new_frames_; 244 245 // This service just sits around and makes thumbnails for tabs. It does 246 // nothing in the constructor so we don't have to worry about lazy init. 247 ThumbnailGenerator thumbnail_generator_; 248 249 // Download status updates (like a changing application icon on dock/taskbar) 250 // are global per-application. DownloadStatusUpdater does no work in the ctor 251 // so we don't have to worry about lazy initialization. 252 DownloadStatusUpdater download_status_updater_; 253 254 // An event that notifies when we are shutting-down. 255 scoped_ptr<base::WaitableEvent> shutdown_event_; 256 257 // Ensures that the observers of plugin/print disable/enable state 258 // notifications are properly added and removed. 259 PrefChangeRegistrar pref_change_registrar_; 260 261 // Lives here so can safely log events on shutdown. 262 scoped_ptr<ChromeNetLog> net_log_; 263 264 NotificationRegistrar notification_registrar_; 265 scoped_refptr<PluginDataRemover> plugin_data_remover_; 266 267 // Monitors the state of the 'DisablePluginFinder' policy. 268 BooleanPrefMember plugin_finder_disabled_pref_; 269 270 // Monitors the list of disabled schemes policy. 271 ListPrefMember disabled_schemes_pref_; 272 273 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 274 base::RepeatingTimer<BrowserProcessImpl> autoupdate_timer_; 275 276 // Gets called by autoupdate timer to see if browser needs restart and can be 277 // restarted, and if that's the case, restarts the browser. 278 void OnAutoupdateTimer(); 279 bool CanAutorestartForUpdate() const; 280 void RestartPersistentInstance(); 281 #endif // defined(OS_WIN) || defined(OS_LINUX) 282 283 #if defined(OS_CHROMEOS) 284 scoped_refptr<chromeos::ProxyConfigServiceImpl> 285 chromeos_proxy_config_service_impl_; 286 #endif 287 288 DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl); 289 }; 290 291 #endif // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ 292