Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / browser_process_impl.h
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 // 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
13 #include <string>
14
15 #include "base/basictypes.h"
16 #include "base/debug/stack_trace.h"
17 #include "base/memory/ref_counted.h"
18 #include "base/memory/scoped_ptr.h"
19 #include "base/prefs/pref_change_registrar.h"
20 #include "base/threading/non_thread_safe.h"
21 #include "base/timer/timer.h"
22 #include "chrome/browser/browser_process.h"
23
24 class ChromeDeviceClient;
25 class ChromeNetLog;
26 class ChromeResourceDispatcherHostDelegate;
27 class RemoteDebuggingServer;
28 class PrefRegistrySimple;
29 class PromoResourceService;
30
31 #if defined(ENABLE_PLUGIN_INSTALLATION)
32 class PluginsResourceService;
33 #endif
34
35 namespace base {
36 class CommandLine;
37 class SequencedTaskRunner;
38 }
39
40 namespace extensions {
41 class ExtensionsBrowserClient;
42 }
43
44 namespace gcm {
45 class GCMDriver;
46 }
47
48 namespace policy {
49 class BrowserPolicyConnector;
50 class PolicyService;
51 };
52
53 // Real implementation of BrowserProcess that creates and returns the services.
54 class BrowserProcessImpl : public BrowserProcess,
55                            public base::NonThreadSafe {
56  public:
57   // |local_state_task_runner| must be a shutdown-blocking task runner.
58   BrowserProcessImpl(base::SequencedTaskRunner* local_state_task_runner,
59                      const base::CommandLine& command_line);
60   ~BrowserProcessImpl() override;
61
62   // Called before the browser threads are created.
63   void PreCreateThreads();
64
65   // Called after the threads have been created but before the message loops
66   // starts running. Allows the browser process to do any initialization that
67   // requires all threads running.
68   void PreMainMessageLoopRun();
69
70   // Most cleanup is done by these functions, driven from
71   // ChromeBrowserMain based on notifications from the content
72   // framework, rather than in the destructor, so that we can
73   // interleave cleanup with threads being stopped.
74   void StartTearDown();
75   void PostDestroyThreads();
76
77   // BrowserProcess implementation.
78   void ResourceDispatcherHostCreated() override;
79   void EndSession() override;
80   MetricsServicesManager* GetMetricsServicesManager() override;
81   metrics::MetricsService* metrics_service() override;
82   rappor::RapporService* rappor_service() override;
83   IOThread* io_thread() override;
84   WatchDogThread* watchdog_thread() override;
85   ProfileManager* profile_manager() override;
86   PrefService* local_state() override;
87   net::URLRequestContextGetter* system_request_context() override;
88   chrome_variations::VariationsService* variations_service() override;
89   BrowserProcessPlatformPart* platform_part() override;
90   extensions::EventRouterForwarder* extension_event_router_forwarder() override;
91   NotificationUIManager* notification_ui_manager() override;
92   message_center::MessageCenter* message_center() override;
93   policy::BrowserPolicyConnector* browser_policy_connector() override;
94   policy::PolicyService* policy_service() override;
95   IconManager* icon_manager() override;
96   GLStringManager* gl_string_manager() override;
97   GpuModeManager* gpu_mode_manager() override;
98   void CreateDevToolsHttpProtocolHandler(
99       chrome::HostDesktopType host_desktop_type,
100       const std::string& ip,
101       int port) override;
102   unsigned int AddRefModule() override;
103   unsigned int ReleaseModule() override;
104   bool IsShuttingDown() override;
105   printing::PrintJobManager* print_job_manager() override;
106   printing::PrintPreviewDialogController* print_preview_dialog_controller()
107       override;
108   printing::BackgroundPrintingManager* background_printing_manager() override;
109   IntranetRedirectDetector* intranet_redirect_detector() override;
110   const std::string& GetApplicationLocale() override;
111   void SetApplicationLocale(const std::string& locale) override;
112   DownloadStatusUpdater* download_status_updater() override;
113   DownloadRequestLimiter* download_request_limiter() override;
114   BackgroundModeManager* background_mode_manager() override;
115   void set_background_mode_manager_for_test(
116       scoped_ptr<BackgroundModeManager> manager) override;
117   StatusTray* status_tray() override;
118   SafeBrowsingService* safe_browsing_service() override;
119   safe_browsing::ClientSideDetectionService* safe_browsing_detection_service()
120       override;
121
122 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
123   void StartAutoupdateTimer() override;
124 #endif
125
126   ChromeNetLog* net_log() override;
127   prerender::PrerenderTracker* prerender_tracker() override;
128   component_updater::ComponentUpdateService* component_updater() override;
129   CRLSetFetcher* crl_set_fetcher() override;
130   component_updater::PnaclComponentInstaller* pnacl_component_installer()
131       override;
132   MediaFileSystemRegistry* media_file_system_registry() override;
133   bool created_local_state() const override;
134 #if defined(ENABLE_WEBRTC)
135   WebRtcLogUploader* webrtc_log_uploader() override;
136 #endif
137   network_time::NetworkTimeTracker* network_time_tracker() override;
138   gcm::GCMDriver* gcm_driver() override;
139
140   static void RegisterPrefs(PrefRegistrySimple* registry);
141
142  private:
143   void CreateWatchdogThread();
144   void CreateProfileManager();
145   void CreateLocalState();
146   void CreateViewedPageTracker();
147   void CreateIconManager();
148   void CreateIntranetRedirectDetector();
149   void CreateNotificationUIManager();
150   void CreateStatusTrayManager();
151   void CreatePrintPreviewDialogController();
152   void CreateBackgroundPrintingManager();
153   void CreateSafeBrowsingService();
154   void CreateSafeBrowsingDetectionService();
155   void CreateStatusTray();
156   void CreateBackgroundModeManager();
157   void CreateGCMDriver();
158
159   void ApplyAllowCrossOriginAuthPromptPolicy();
160   void ApplyDefaultBrowserPolicy();
161   void ApplyMetricsReportingPolicy();
162
163   scoped_ptr<MetricsServicesManager> metrics_services_manager_;
164
165   scoped_ptr<IOThread> io_thread_;
166
167   bool created_watchdog_thread_;
168   scoped_ptr<WatchDogThread> watchdog_thread_;
169
170   bool created_browser_policy_connector_;
171 #if defined(ENABLE_CONFIGURATION_POLICY)
172   // Must be destroyed after |local_state_|.
173   scoped_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
174 #else
175   // Must be destroyed after |local_state_|.
176   // This is a stub when policy is not enabled. Otherwise, the PolicyService
177   // is owned by the |browser_policy_connector_| and this is not used.
178   scoped_ptr<policy::PolicyService> policy_service_;
179 #endif
180
181   bool created_profile_manager_;
182   scoped_ptr<ProfileManager> profile_manager_;
183
184   bool created_local_state_;
185   scoped_ptr<PrefService> local_state_;
186
187   bool created_icon_manager_;
188   scoped_ptr<IconManager> icon_manager_;
189
190   scoped_ptr<GLStringManager> gl_string_manager_;
191
192   scoped_ptr<GpuModeManager> gpu_mode_manager_;
193
194 #if defined(ENABLE_EXTENSIONS)
195   scoped_ptr<extensions::ExtensionsBrowserClient> extensions_browser_client_;
196
197   scoped_refptr<extensions::EventRouterForwarder>
198       extension_event_router_forwarder_;
199
200   scoped_ptr<MediaFileSystemRegistry> media_file_system_registry_;
201 #endif
202
203 #if !defined(OS_ANDROID)
204   scoped_ptr<RemoteDebuggingServer> remote_debugging_server_;
205 #endif
206
207 #if defined(ENABLE_PRINT_PREVIEW)
208   scoped_refptr<printing::PrintPreviewDialogController>
209       print_preview_dialog_controller_;
210
211   scoped_ptr<printing::BackgroundPrintingManager> background_printing_manager_;
212 #endif
213
214   // Manager for desktop notification UI.
215   bool created_notification_ui_manager_;
216   scoped_ptr<NotificationUIManager> notification_ui_manager_;
217
218   scoped_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
219
220   scoped_ptr<StatusTray> status_tray_;
221
222 #if defined(ENABLE_BACKGROUND)
223   scoped_ptr<BackgroundModeManager> background_mode_manager_;
224 #endif
225
226   bool created_safe_browsing_service_;
227   scoped_refptr<SafeBrowsingService> safe_browsing_service_;
228
229   unsigned int module_ref_count_;
230   bool did_start_;
231
232   // Ensures that all the print jobs are finished before closing the browser.
233   scoped_ptr<printing::PrintJobManager> print_job_manager_;
234
235   std::string locale_;
236
237   // Download status updates (like a changing application icon on dock/taskbar)
238   // are global per-application. DownloadStatusUpdater does no work in the ctor
239   // so we don't have to worry about lazy initialization.
240   scoped_ptr<DownloadStatusUpdater> download_status_updater_;
241
242   scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
243
244   // Sequenced task runner for local state related I/O tasks.
245   const scoped_refptr<base::SequencedTaskRunner> local_state_task_runner_;
246
247   // Ensures that the observers of plugin/print disable/enable state
248   // notifications are properly added and removed.
249   PrefChangeRegistrar pref_change_registrar_;
250
251   // Lives here so can safely log events on shutdown.
252   scoped_ptr<ChromeNetLog> net_log_;
253
254   // Ordered before resource_dispatcher_host_delegate_ due to destruction
255   // ordering.
256   scoped_ptr<prerender::PrerenderTracker> prerender_tracker_;
257
258   scoped_ptr<ChromeResourceDispatcherHostDelegate>
259       resource_dispatcher_host_delegate_;
260
261   scoped_refptr<PromoResourceService> promo_resource_service_;
262
263 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
264   base::RepeatingTimer<BrowserProcessImpl> autoupdate_timer_;
265
266   // Gets called by autoupdate timer to see if browser needs restart and can be
267   // restarted, and if that's the case, restarts the browser.
268   void OnAutoupdateTimer();
269   bool CanAutorestartForUpdate() const;
270   void RestartBackgroundInstance();
271 #endif  // defined(OS_WIN) || defined(OS_LINUX) && !defined(OS_CHROMEOS)
272
273   // component updater is normally not used under ChromeOS due
274   // to concerns over integrity of data shared between profiles,
275   // but some users of component updater only install per-user.
276   scoped_ptr<component_updater::ComponentUpdateService> component_updater_;
277   scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
278
279 #if !defined(DISABLE_NACL)
280   scoped_ptr<component_updater::PnaclComponentInstaller>
281       pnacl_component_installer_;
282 #endif
283
284 #if defined(ENABLE_PLUGIN_INSTALLATION)
285   scoped_refptr<PluginsResourceService> plugins_resource_service_;
286 #endif
287
288   scoped_ptr<BrowserProcessPlatformPart> platform_part_;
289
290   // TODO(eroman): Remove this when done debugging 113031. This tracks
291   // the callstack which released the final module reference count.
292   base::debug::StackTrace release_last_reference_callstack_;
293
294 #if defined(ENABLE_WEBRTC)
295   // Lazily initialized.
296   scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_;
297 #endif
298
299   scoped_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
300
301   scoped_ptr<gcm::GCMDriver> gcm_driver_;
302
303 #if !defined(OS_ANDROID)
304   scoped_ptr<ChromeDeviceClient> device_client_;
305 #endif
306
307   DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
308 };
309
310 #endif  // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_