browser_process_impl.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
151a8d8528135ba4e3e4cf7cd711a9e47b19078a3Chris Lattner// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// Use of this source code is governed by a BSD-style license that can be
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// found in the LICENSE file.
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// When each service is created, we set a flag indicating this. At this point,
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// the service initialization could fail or succeed. This allows us to remember
7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// if we tried to create a service, and not try creating it over and over if
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// the creation failed.
9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman
10e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner#ifndef CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
11e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner#define CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
1251a8d8528135ba4e3e4cf7cd711a9e47b19078a3Chris Lattner
13deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#include <string>
14fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman
15fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman#include "base/basictypes.h"
16deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#include "base/debug/stack_trace.h"
17c0b9dc5be79f009d260edb5cd5e1d8346587aaa2Alkis Evlogimenos#include "base/memory/ref_counted.h"
18551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include "base/memory/scoped_ptr.h"
197cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak#include "base/prefs/pref_change_registrar.h"
2013ba2dab631636e525a44bb259aaea56a860d1c7Jakob Stoklund Olesen#include "base/threading/non_thread_safe.h"
21d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "base/timer/timer.h"
22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "chrome/browser/browser_process.h"
23fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
24853d3fb8d24fab2258e9cd5dce3ec8ff4189eedaDan Gohmanclass ChromeNetLog;
25fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanclass ChromeResourceDispatcherHostDelegate;
26fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanclass CommandLine;
27a655f088b88cf015fc48721fd9869787d1b8ce13Chris Lattnerclass RemoteDebuggingServer;
28f4a1e1a69f0727762a73ef0d551e3bbd16b7c04eJakob Stoklund Olesenclass PrefRegistrySimple;
29a655f088b88cf015fc48721fd9869787d1b8ce13Chris Lattnerclass PromoResourceService;
301cd1d98232c3c3a0bd3810c3bf6c2572ea02f208Daniel Dunbar
317cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak#if defined(ENABLE_PLUGIN_INSTALLATION)
32d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeclass PluginsResourceService;
3394dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenos#endif
348e4018e2de52c534405d7155c7009d0b35afb861Cedric Venet
358e4018e2de52c534405d7155c7009d0b35afb861Cedric Venetnamespace base {
367309be6735666143bd9835b275dc8501617a2591Gabor Greifclass SequencedTaskRunner;
37fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman}
388e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman
3994dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenosnamespace extensions {
408e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohmanclass ExtensionsBrowserClient;
4194dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenos}
428e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman
43c7f6b8c5d40e17bf43fd3a1549d7d89c9da735e1Gabor Greifnamespace policy {
44c7f6b8c5d40e17bf43fd3a1549d7d89c9da735e1Gabor Greifclass BrowserPolicyConnector;
45c7f6b8c5d40e17bf43fd3a1549d7d89c9da735e1Gabor Greifclass PolicyService;
46fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman};
4794dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenos
48c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greif// Real implementation of BrowserProcess that creates and returns the services.
49c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greifclass BrowserProcessImpl : public BrowserProcess,
50f3841fcbd587c31aa9842b3f33bd57de40c9f443Gabor Greif                           public base::NonThreadSafe {
51c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greif public:
52aad5c0505183a5b7913f1a443a1f0650122551ccAlkis Evlogimenos  // |local_state_task_runner| must be a shutdown-blocking task runner.
53aad5c0505183a5b7913f1a443a1f0650122551ccAlkis Evlogimenos  BrowserProcessImpl(base::SequencedTaskRunner* local_state_task_runner,
54fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman                     const CommandLine& command_line);
55fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  virtual ~BrowserProcessImpl();
56fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
578e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman  // Called before the browser threads are created.
58fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  void PreCreateThreads();
59fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
6094dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenos  // Called after the threads have been created but before the message loops
6194dc07728f091c652f0a8059aba6dce5018485eeAlkis Evlogimenos  // starts running. Allows the browser process to do any initialization that
62fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  // requires all threads running.
63fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  void PreMainMessageLoopRun();
64c0b9dc5be79f009d260edb5cd5e1d8346587aaa2Alkis Evlogimenos
651194e9501984daf0d3237ed1bf18a156173e7fd4Chris Lattner  // Most cleanup is done by these functions, driven from
66c07d8d8a26f63dfc54dbd0e1ff776763ec6443adBrian Gaeke  // ChromeBrowserMain based on notifications from the content
67f20c1a497fe3922ac718429d65a5fe396890575eChris Lattner  // framework, rather than in the destructor, so that we can
687cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  // interleave cleanup with threads being stopped.
6913d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  void StartTearDown();
7013d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  void PostDestroyThreads();
7113d828567812041c1ca1817f4b66fce840903a1fEvan Cheng
7213d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  // BrowserProcess implementation.
7313d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  virtual void ResourceDispatcherHostCreated() OVERRIDE;
747cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual void EndSession() OVERRIDE;
757cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual MetricsService* metrics_service() OVERRIDE;
767cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual IOThread* io_thread() OVERRIDE;
777cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual WatchDogThread* watchdog_thread() OVERRIDE;
787cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual ProfileManager* profile_manager() OVERRIDE;
797cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual PrefService* local_state() OVERRIDE;
8025101bb2a799a36be9f077ee2fc2dcf0df2b6efbJakub Staszak  virtual net::URLRequestContextGetter* system_request_context() OVERRIDE;
817cc2b07437a1243c33324549a1904fefc5f1845eJakub Staszak  virtual chrome_variations::VariationsService* variations_service() OVERRIDE;
8213d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  virtual BrowserProcessPlatformPart* platform_part() OVERRIDE;
8313d828567812041c1ca1817f4b66fce840903a1fEvan Cheng  virtual extensions::EventRouterForwarder*
8413d828567812041c1ca1817f4b66fce840903a1fEvan Cheng        extension_event_router_forwarder() OVERRIDE;
85fb8075d03f5c87bd57dcc9c5f2304f6b13c55aadEvan Cheng  virtual NotificationUIManager* notification_ui_manager() OVERRIDE;
86fb8075d03f5c87bd57dcc9c5f2304f6b13c55aadEvan Cheng  virtual message_center::MessageCenter* message_center() OVERRIDE;
87fb8075d03f5c87bd57dcc9c5f2304f6b13c55aadEvan Cheng  virtual policy::BrowserPolicyConnector* browser_policy_connector() OVERRIDE;
888c741b8064f1116d8d8dc435b60b75abdf5c4d57Jakob Stoklund Olesen  virtual policy::PolicyService* policy_service() OVERRIDE;
89fb8075d03f5c87bd57dcc9c5f2304f6b13c55aadEvan Cheng  virtual IconManager* icon_manager() OVERRIDE;
908c741b8064f1116d8d8dc435b60b75abdf5c4d57Jakob Stoklund Olesen  virtual GLStringManager* gl_string_manager() OVERRIDE;
9130b8e51addc23fb317c03d093a25828d3d5be45aJim Laskey  virtual GpuModeManager* gpu_mode_manager() OVERRIDE;
9230b8e51addc23fb317c03d093a25828d3d5be45aJim Laskey  virtual AutomationProviderList* GetAutomationProviderList() OVERRIDE;
9330b8e51addc23fb317c03d093a25828d3d5be45aJim Laskey  virtual void CreateDevToolsHttpProtocolHandler(
9413d828567812041c1ca1817f4b66fce840903a1fEvan Cheng      chrome::HostDesktopType host_desktop_type,
958c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman      const std::string& ip,
968c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman      int port,
978c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman      const std::string& frontend_url) OVERRIDE;
988c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual unsigned int AddRefModule() OVERRIDE;
99fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  virtual unsigned int ReleaseModule() OVERRIDE;
100fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  virtual bool IsShuttingDown() OVERRIDE;
101fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman  virtual printing::PrintJobManager* print_job_manager() OVERRIDE;
1028e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman  virtual printing::PrintPreviewDialogController*
1038e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman      print_preview_dialog_controller() OVERRIDE;
1042c3f7ae3843bdc9dcfe85393e178211976c1f9bdDan Gohman  virtual printing::BackgroundPrintingManager*
10517fb34bf8cd10a798c9206eeef3bff151b4d3688Tanya Lattner      background_printing_manager() OVERRIDE;
1068e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman  virtual IntranetRedirectDetector* intranet_redirect_detector() OVERRIDE;
1078e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman  virtual const std::string& GetApplicationLocale() OVERRIDE;
108ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman  virtual void SetApplicationLocale(const std::string& locale) OVERRIDE;
1098e5f2c6f65841542e2a7092553fe42a00048e4c7Dan Gohman  virtual DownloadStatusUpdater* download_status_updater() OVERRIDE;
110d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner  virtual DownloadRequestLimiter* download_request_limiter() OVERRIDE;
111324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen  virtual BackgroundModeManager* background_mode_manager() OVERRIDE;
112324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen  virtual void set_background_mode_manager_for_test(
113d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner      scoped_ptr<BackgroundModeManager> manager) OVERRIDE;
1141194e9501984daf0d3237ed1bf18a156173e7fd4Chris Lattner  virtual StatusTray* status_tray() OVERRIDE;
1155e61fa95196b85281eec655787e9c73267532bd1Chris Lattner  virtual SafeBrowsingService* safe_browsing_service() OVERRIDE;
116324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen  virtual safe_browsing::ClientSideDetectionService*
117324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen      safe_browsing_detection_service() OVERRIDE;
118324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen
119324da7647cfc3025e0c987176f0a300f9f780e6fJakob Stoklund Olesen#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
1208c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual void StartAutoupdateTimer() OVERRIDE;
1218c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman#endif
1228c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman
1238c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual ChromeNetLog* net_log() OVERRIDE;
1248c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual prerender::PrerenderTracker* prerender_tracker() OVERRIDE;
1258c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual component_updater::ComponentUpdateService*
1268c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman      component_updater() OVERRIDE;
1278c2b52552c90f39e4b2fed43e309e599e742b6acDan Gohman  virtual CRLSetFetcher* crl_set_fetcher() OVERRIDE;
1285e61fa95196b85281eec655787e9c73267532bd1Chris Lattner  virtual component_updater::PnaclComponentInstaller*
1295e61fa95196b85281eec655787e9c73267532bd1Chris Lattner      pnacl_component_installer() OVERRIDE;
130f20c1a497fe3922ac718429d65a5fe396890575eChris Lattner  virtual BookmarkPromptController* bookmark_prompt_controller() OVERRIDE;
131f20c1a497fe3922ac718429d65a5fe396890575eChris Lattner  virtual MediaFileSystemRegistry* media_file_system_registry() OVERRIDE;
1325e61fa95196b85281eec655787e9c73267532bd1Chris Lattner  virtual bool created_local_state() const OVERRIDE;
1337c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#if defined(ENABLE_WEBRTC)
1347c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  virtual WebRtcLogUploader* webrtc_log_uploader() OVERRIDE;
1357c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#endif
1367c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1377c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  static void RegisterPrefs(PrefRegistrySimple* registry);
1387c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1397c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng private:
1407c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateMetricsService();
1417c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateWatchdogThread();
1427c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateProfileManager();
1437c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateLocalState();
1447c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateViewedPageTracker();
1457c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateIconManager();
1467c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateIntranetRedirectDetector();
1477c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateNotificationUIManager();
1487c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateStatusTrayManager();
1497c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreatePrintPreviewDialogController();
1507c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateBackgroundPrintingManager();
1517c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateSafeBrowsingService();
1527c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateSafeBrowsingDetectionService();
1537c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateStatusTray();
1547c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void CreateBackgroundModeManager();
1557c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1567c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void ApplyAllowCrossOriginAuthPromptPolicy();
1577c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void ApplyDefaultBrowserPolicy();
1587c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  void ApplyMetricsReportingPolicy();
1597c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1607c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_metrics_service_;
1617c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<MetricsService> metrics_service_;
1627c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1637c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<IOThread> io_thread_;
1647c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1657c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_watchdog_thread_;
1667c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<WatchDogThread> watchdog_thread_;
1677c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1687c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_browser_policy_connector_;
1697c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#if defined(ENABLE_CONFIGURATION_POLICY)
1707c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Must be destroyed after |local_state_|.
1717c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
1727c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#else
1737c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Must be destroyed after |local_state_|.
1747c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // This is a stub when policy is not enabled. Otherwise, the PolicyService
1757c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // is owned by the |browser_policy_connector_| and this is not used.
1767c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<policy::PolicyService> policy_service_;
1777c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#endif
1787c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1797c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_profile_manager_;
1807c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<ProfileManager> profile_manager_;
1817c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1827c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_local_state_;
1837c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<PrefService> local_state_;
1847c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1857c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_icon_manager_;
1867c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<IconManager> icon_manager_;
1877c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1887c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<GLStringManager> gl_string_manager_;
1897c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1907c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<GpuModeManager> gpu_mode_manager_;
1917c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1927c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<extensions::ExtensionsBrowserClient> extensions_browser_client_;
1937c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_refptr<extensions::EventRouterForwarder>
1947c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng      extension_event_router_forwarder_;
1957c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
1967c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#if !defined(OS_ANDROID)
1977c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<RemoteDebuggingServer> remote_debugging_server_;
198ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
1997c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Bookmark prompt controller displays the prompt for frequently visited URL.
2007c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<BookmarkPromptController> bookmark_prompt_controller_;
2017c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#endif
2027c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
203ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng#if !defined(OS_ANDROID) && !defined(OS_IOS)
204ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_ptr<MediaFileSystemRegistry> media_file_system_registry_;
205ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng#endif
2067c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
207ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_refptr<printing::PrintPreviewDialogController>
2087c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng      print_preview_dialog_controller_;
2097c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
210ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_ptr<printing::BackgroundPrintingManager> background_printing_manager_;
2117c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
212ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_ptr<chrome_variations::VariationsService> variations_service_;
2137c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2147c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Manager for desktop notification UI.
2157c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool created_notification_ui_manager_;
216deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  scoped_ptr<NotificationUIManager> notification_ui_manager_;
21734cd4a484e532cc463fd5a4bf59b88d13c5467c1Evan Cheng
218deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#if defined(ENABLE_AUTOMATION)
219deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  scoped_ptr<AutomationProviderList> automation_provider_list_;
220c0b9dc5be79f009d260edb5cd5e1d8346587aaa2Alkis Evlogimenos#endif
221c0b9dc5be79f009d260edb5cd5e1d8346587aaa2Alkis Evlogimenos
2228e8b8a223c2b0e69f44c0639f846260c8011668fDan Gohman  scoped_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
2238e8b8a223c2b0e69f44c0639f846260c8011668fDan Gohman
224deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  scoped_ptr<StatusTray> status_tray_;
225ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
226ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_ptr<BackgroundModeManager> background_mode_manager_;
227ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
228ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  bool created_safe_browsing_service_;
229ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_refptr<SafeBrowsingService> safe_browsing_service_;
230ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
231ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  unsigned int module_ref_count_;
232ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  bool did_start_;
2337c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
234deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  // Ensures that all the print jobs are finished before closing the browser.
235deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  scoped_ptr<printing::PrintJobManager> print_job_manager_;
2367c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
237ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  std::string locale_;
238ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
2397c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Download status updates (like a changing application icon on dock/taskbar)
2407c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // are global per-application. DownloadStatusUpdater does no work in the ctor
2417c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // so we don't have to worry about lazy initialization.
2427c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<DownloadStatusUpdater> download_status_updater_;
2437c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2447c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
245ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
246ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  // Sequenced task runner for local state related I/O tasks.
2477c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  const scoped_refptr<base::SequencedTaskRunner> local_state_task_runner_;
2487c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2497c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Ensures that the observers of plugin/print disable/enable state
2507c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // notifications are properly added and removed.
2517c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  PrefChangeRegistrar pref_change_registrar_;
2527c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
253ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  // Lives here so can safely log events on shutdown.
254ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng  scoped_ptr<ChromeNetLog> net_log_;
2557c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2567c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // Ordered before resource_dispatcher_host_delegate_ due to destruction
2577c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  // ordering.
2587c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<prerender::PrerenderTracker> prerender_tracker_;
2597c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2607c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_ptr<ChromeResourceDispatcherHostDelegate>
261ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng      resource_dispatcher_host_delegate_;
262ddfd1377d2e4154d44dc3ad217735adc15af2e3fEvan Cheng
2637c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  scoped_refptr<PromoResourceService> promo_resource_service_;
2647c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
2657c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
2667c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  base::RepeatingTimer<BrowserProcessImpl> autoupdate_timer_;
2677c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng
268deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  // Gets called by autoupdate timer to see if browser needs restart and can be
269deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  // restarted, and if that's the case, restarts the browser.
270deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve  void OnAutoupdateTimer();
2717c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng  bool CanAutorestartForUpdate() const;
27276456bc40c79fcae4da52d34f96c079d9759257cBrian Gaeke  void RestartBackgroundInstance();
27376456bc40c79fcae4da52d34f96c079d9759257cBrian Gaeke#endif  // defined(OS_WIN) || defined(OS_LINUX) && !defined(OS_CHROMEOS)
27476456bc40c79fcae4da52d34f96c079d9759257cBrian Gaeke
27576456bc40c79fcae4da52d34f96c079d9759257cBrian Gaeke  // component updater is normally not used under ChromeOS due
27676456bc40c79fcae4da52d34f96c079d9759257cBrian Gaeke  // to concerns over integrity of data shared between profiles,
2776603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  // but some users of component updater only install per-user.
2786603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  scoped_ptr<component_updater::ComponentUpdateService> component_updater_;
2796603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
2806603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  scoped_ptr<component_updater::PnaclComponentInstaller>
2816603d7ec67e64b987451975771759ade4e9f19baEvan Cheng      pnacl_component_installer_;
2826603d7ec67e64b987451975771759ade4e9f19baEvan Cheng
2836603d7ec67e64b987451975771759ade4e9f19baEvan Cheng#if defined(ENABLE_PLUGIN_INSTALLATION)
2846603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  scoped_refptr<PluginsResourceService> plugins_resource_service_;
285ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman#endif
286cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner
287cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner  scoped_ptr<BrowserProcessPlatformPart> platform_part_;
288cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner
289cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner  // TODO(eroman): Remove this when done debugging 113031. This tracks
2906603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  // the callstack which released the final module reference count.
2916603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  base::debug::StackTrace release_last_reference_callstack_;
2926603d7ec67e64b987451975771759ade4e9f19baEvan Cheng
2936603d7ec67e64b987451975771759ade4e9f19baEvan Cheng#if defined(ENABLE_WEBRTC)
2946603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  // Lazily initialized.
2956603d7ec67e64b987451975771759ade4e9f19baEvan Cheng  scoped_ptr<WebRtcLogUploader> webrtc_log_uploader_;
2966603d7ec67e64b987451975771759ade4e9f19baEvan Cheng#endif
2976603d7ec67e64b987451975771759ade4e9f19baEvan Cheng
29834cd4a484e532cc463fd5a4bf59b88d13c5467c1Evan Cheng  DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
29934cd4a484e532cc463fd5a4bf59b88d13c5467c1Evan Cheng};
30034cd4a484e532cc463fd5a4bf59b88d13c5467c1Evan Cheng
301cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner#endif  // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
302cd5bad37112ba22f4c546e5443714570b4104bb6Chris Lattner