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