blob: a7d613212c896119917187780aa3762dccc9afe8 [file] [log] [blame]
[email protected]3a80ea332012-01-09 19:53:291// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
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
[email protected]58dca552009-06-17 00:35:0210#ifndef CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
11#define CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_
initial.commit09911bf2008-07-26 23:55:2912
avie4d7b6f2015-12-26 00:59:1813#include <stdint.h>
14
dcheng4af48582016-04-19 00:29:3515#include <memory>
initial.commit09911bf2008-07-26 23:55:2916#include <string>
17
[email protected]6b4e6852012-02-14 04:02:4818#include "base/debug/stack_trace.h"
avie4d7b6f2015-12-26 00:59:1819#include "base/macros.h"
[email protected]80745e32012-05-08 01:22:1220#include "base/memory/ref_counted.h"
gab25894fe2017-05-30 03:40:3621#include "base/sequence_checker.h"
[email protected]4dcb7972013-06-28 15:15:4122#include "base/timer/timer.h"
avie4d7b6f2015-12-26 00:59:1823#include "build/build_config.h"
initial.commit09911bf2008-07-26 23:55:2924#include "chrome/browser/browser_process.h"
dgnfe075c82016-03-18 11:25:3525#include "chrome/browser/lifetime/keep_alive_state_observer.h"
brettw3224f3c2016-02-25 20:07:4526#include "chrome/common/features.h"
brettwb1fc1b82016-02-02 00:19:0827#include "components/prefs/pref_change_registrar.h"
brettw00899e62016-11-12 02:10:1728#include "extensions/features/features.h"
Brett Wilson0748bf412016-11-22 17:55:4629#include "media/media_features.h"
bauerbecab4f52017-03-13 20:16:4130#include "ppapi/features/features.h"
Brett Wilson65f951c2016-11-03 22:06:1231#include "printing/features/features.h"
[email protected]b112a4c2009-02-01 20:24:0132
wfh22e2f4a22015-04-28 22:39:2133class ChromeChildProcessWatcher;
reillyge471fab2014-08-29 01:58:4334class ChromeDeviceClient;
[email protected]8bcdf072011-06-03 16:52:1535class ChromeResourceDispatcherHostDelegate;
dgozman54cc54e2016-02-23 03:47:3036class DevToolsAutoOpener;
[email protected]4475d232011-07-27 15:29:2037class RemoteDebuggingServer;
[email protected]b1de2c72013-02-06 02:45:4738class PrefRegistrySimple;
initial.commit09911bf2008-07-26 23:55:2939
bauerbecab4f52017-03-13 20:16:4140#if BUILDFLAG(ENABLE_PLUGINS)
[email protected]2366a3a2012-10-02 20:41:1441class PluginsResourceService;
42#endif
43
[email protected]0de615a2012-11-08 04:40:5944namespace base {
[email protected]2f3b1cc2014-03-17 23:07:1545class CommandLine;
[email protected]0de615a2012-11-08 04:40:5946class SequencedTaskRunner;
47}
48
[email protected]aa3dd492013-11-05 17:09:0949namespace extensions {
50class ExtensionsBrowserClient;
51}
52
[email protected]c027d6d2014-06-05 15:25:4053namespace gcm {
54class GCMDriver;
55}
56
drogerc690e8802015-09-21 14:29:1657namespace net_log {
58class ChromeNetLog;
59}
60
[email protected]5b869962011-09-20 19:49:3361namespace policy {
[email protected]fcf53572011-06-29 15:44:3762class BrowserPolicyConnector;
[email protected]a4179c2a2012-02-09 18:14:2163class PolicyService;
[email protected]fcf53572011-06-29 15:44:3764};
65
initial.commit09911bf2008-07-26 23:55:2966// Real implementation of BrowserProcess that creates and returns the services.
[email protected]6618d1d2010-12-15 21:18:4767class BrowserProcessImpl : public BrowserProcess,
dgnfe075c82016-03-18 11:25:3568 public KeepAliveStateObserver {
initial.commit09911bf2008-07-26 23:55:2969 public:
[email protected]0de615a2012-11-08 04:40:5970 // |local_state_task_runner| must be a shutdown-blocking task runner.
71 BrowserProcessImpl(base::SequencedTaskRunner* local_state_task_runner,
[email protected]2f3b1cc2014-03-17 23:07:1572 const base::CommandLine& command_line);
Daniel Chenga542fca2014-10-21 09:51:2973 ~BrowserProcessImpl() override;
initial.commit09911bf2008-07-26 23:55:2974
[email protected]99907362012-01-11 05:41:4075 // Called before the browser threads are created.
76 void PreCreateThreads();
[email protected]2e5b60a22011-11-28 15:56:4177
[email protected]d2caaa22011-12-12 03:04:1578 // Called after the threads have been created but before the message loops
79 // starts running. Allows the browser process to do any initialization that
80 // requires all threads running.
81 void PreMainMessageLoopRun();
82
[email protected]2e5b60a22011-11-28 15:56:4183 // Most cleanup is done by these functions, driven from
84 // ChromeBrowserMain based on notifications from the content
85 // framework, rather than in the destructor, so that we can
86 // interleave cleanup with threads being stopped.
thestigd75ce5532015-10-05 22:08:3487#if !defined(OS_ANDROID)
[email protected]2e5b60a22011-11-28 15:56:4188 void StartTearDown();
[email protected]99907362012-01-11 05:41:4089 void PostDestroyThreads();
thestigd75ce5532015-10-05 22:08:3490#endif
[email protected]2e5b60a22011-11-28 15:56:4191
[email protected]80745e32012-05-08 01:22:1292 // BrowserProcess implementation.
Daniel Chenga542fca2014-10-21 09:51:2993 void ResourceDispatcherHostCreated() override;
94 void EndSession() override;
blundell695d61f2015-10-21 11:25:5395 metrics_services_manager::MetricsServicesManager* GetMetricsServicesManager()
96 override;
Daniel Chenga542fca2014-10-21 09:51:2997 metrics::MetricsService* metrics_service() override;
nzolghadrd87a308d2016-12-07 15:45:5698 rappor::RapporServiceImpl* rappor_service() override;
oysteineb068f272017-05-23 00:14:0199 ukm::UkmRecorder* ukm_recorder() override;
Daniel Chenga542fca2014-10-21 09:51:29100 IOThread* io_thread() override;
101 WatchDogThread* watchdog_thread() override;
102 ProfileManager* profile_manager() override;
103 PrefService* local_state() override;
104 net::URLRequestContextGetter* system_request_context() override;
blundell57bcfed2015-09-04 08:44:45105 variations::VariationsService* variations_service() override;
Daniel Chenga542fca2014-10-21 09:51:29106 BrowserProcessPlatformPart* platform_part() override;
107 extensions::EventRouterForwarder* extension_event_router_forwarder() override;
108 NotificationUIManager* notification_ui_manager() override;
miguelg23cd2dd72016-04-21 15:24:03109 NotificationPlatformBridge* notification_platform_bridge() override;
Daniel Chenga542fca2014-10-21 09:51:29110 message_center::MessageCenter* message_center() override;
111 policy::BrowserPolicyConnector* browser_policy_connector() override;
112 policy::PolicyService* policy_service() override;
113 IconManager* icon_manager() override;
Daniel Chenga542fca2014-10-21 09:51:29114 GpuModeManager* gpu_mode_manager() override;
qinmin9899e492016-08-05 19:03:26115 GpuProfileCache* gpu_profile_cache() override;
scottmg9ed5c142016-02-16 03:37:49116 void CreateDevToolsHttpProtocolHandler(const std::string& ip,
117 uint16_t port) override;
dgozman54cc54e2016-02-23 03:47:30118 void CreateDevToolsAutoOpener() override;
Daniel Chenga542fca2014-10-21 09:51:29119 bool IsShuttingDown() override;
120 printing::PrintJobManager* print_job_manager() override;
121 printing::PrintPreviewDialogController* print_preview_dialog_controller()
122 override;
123 printing::BackgroundPrintingManager* background_printing_manager() override;
124 IntranetRedirectDetector* intranet_redirect_detector() override;
125 const std::string& GetApplicationLocale() override;
126 void SetApplicationLocale(const std::string& locale) override;
127 DownloadStatusUpdater* download_status_updater() override;
128 DownloadRequestLimiter* download_request_limiter() override;
129 BackgroundModeManager* background_mode_manager() override;
130 void set_background_mode_manager_for_test(
dcheng4af48582016-04-19 00:29:35131 std::unique_ptr<BackgroundModeManager> manager) override;
Daniel Chenga542fca2014-10-21 09:51:29132 StatusTray* status_tray() override;
vakh9a474d832015-11-13 01:43:09133 safe_browsing::SafeBrowsingService* safe_browsing_service() override;
Daniel Chenga542fca2014-10-21 09:51:29134 safe_browsing::ClientSideDetectionService* safe_browsing_detection_service()
135 override;
csharrison8a923d62017-03-10 15:42:13136 subresource_filter::ContentRulesetService*
137 subresource_filter_ruleset_service() override;
[email protected]6641bf662009-08-21 00:34:09138
[email protected]3cdacd42010-04-30 18:55:53139#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
dchenge1bc7982014-10-30 00:32:40140 void StartAutoupdateTimer() override;
[email protected]3cdacd42010-04-30 18:55:53141#endif
[email protected]bd48c2b02010-04-09 20:32:42142
drogerc690e8802015-09-21 14:29:16143 net_log::ChromeNetLog* net_log() override;
Daniel Chenga542fca2014-10-21 09:51:29144 component_updater::ComponentUpdateService* component_updater() override;
145 CRLSetFetcher* crl_set_fetcher() override;
146 component_updater::PnaclComponentInstaller* pnacl_component_installer()
147 override;
bauerb22951c32015-02-12 13:18:17148 component_updater::SupervisedUserWhitelistInstaller*
149 supervised_user_whitelist_installer() override;
Daniel Chenga542fca2014-10-21 09:51:29150 MediaFileSystemRegistry* media_file_system_registry() override;
151 bool created_local_state() const override;
Brett Wilson0748bf412016-11-22 17:55:46152#if BUILDFLAG(ENABLE_WEBRTC)
Daniel Chenga542fca2014-10-21 09:51:29153 WebRtcLogUploader* webrtc_log_uploader() override;
[email protected]bbf32c52013-06-03 14:05:52154#endif
Daniel Chenga542fca2014-10-21 09:51:29155 network_time::NetworkTimeTracker* network_time_tracker() override;
156 gcm::GCMDriver* gcm_driver() override;
lpyfedf65a2017-06-01 01:41:24157 resource_coordinator::TabManager* GetTabManager() override;
pmonette9fa59e882016-02-10 00:12:19158 shell_integration::DefaultWebClientState CachedDefaultWebClientState()
grtf14398c2015-07-14 15:11:44159 override;
vitaliiiee920542016-11-25 15:20:23160 physical_web::PhysicalWebDataSource* GetPhysicalWebDataSource() override;
Sam McNallye36abbc2017-07-20 01:04:28161 prefs::InProcessPrefServiceFactory* pref_service_factory() const override;
[email protected]ca167a32011-09-30 15:19:11162
[email protected]b1de2c72013-02-06 02:45:47163 static void RegisterPrefs(PrefRegistrySimple* registry);
164
initial.commit09911bf2008-07-26 23:55:29165 private:
dgnfe075c82016-03-18 11:25:35166 // KeepAliveStateObserver implementation
167 void OnKeepAliveStateChanged(bool is_keeping_alive) override;
168 void OnKeepAliveRestartStateChanged(bool can_restart) override;
169
[email protected]0b565182011-03-02 18:11:15170 void CreateWatchdogThread();
initial.commit09911bf2008-07-26 23:55:29171 void CreateProfileManager();
initial.commit09911bf2008-07-26 23:55:29172 void CreateLocalState();
173 void CreateViewedPageTracker();
174 void CreateIconManager();
[email protected]c4ff4952010-01-08 19:12:47175 void CreateIntranetRedirectDetector();
miguelg23cd2dd72016-04-21 15:24:03176 void CreateNotificationPlatformBridge();
[email protected]29672ab2009-10-30 03:44:03177 void CreateNotificationUIManager();
[email protected]ccb55cf52010-03-06 22:02:04178 void CreateStatusTrayManager();
[email protected]d8ce31e2012-12-19 05:09:21179 void CreatePrintPreviewDialogController();
[email protected]68f88b992011-05-07 02:01:39180 void CreateBackgroundPrintingManager();
[email protected]462a0ff2011-06-02 17:15:34181 void CreateSafeBrowsingService();
[email protected]a7a5e992010-12-09 23:39:51182 void CreateSafeBrowsingDetectionService();
engedyc5ef21ad2016-06-17 20:22:27183 void CreateSubresourceFilterRulesetService();
[email protected]9e7f015f2011-05-28 00:24:25184 void CreateStatusTray();
185 void CreateBackgroundModeManager();
[email protected]c027d6d2014-06-05 15:25:40186 void CreateGCMDriver();
mattreynoldsf1aab392016-10-07 00:17:07187 void CreatePhysicalWebDataSource();
[email protected]a7a5e992010-12-09 23:39:51188
[email protected]40850a52011-05-26 22:07:35189 void ApplyAllowCrossOriginAuthPromptPolicy();
[email protected]b61f62a2011-11-01 02:02:10190 void ApplyDefaultBrowserPolicy();
Lei Zhang4736dd22017-07-07 01:38:17191#if !defined(OS_ANDROID)
[email protected]459158c2013-11-14 00:25:15192 void ApplyMetricsReportingPolicy();
Lei Zhang4736dd22017-07-07 01:38:17193#endif
[email protected]419a0572011-04-18 22:21:46194
grtf14398c2015-07-14 15:11:44195 void CacheDefaultWebClientState();
196
dgnfe075c82016-03-18 11:25:35197 // Methods called to control our lifetime. The browser process can be "pinned"
198 // to make sure it keeps running.
199 void Pin();
200 void Unpin();
201
dcheng4af48582016-04-19 00:29:35202 std::unique_ptr<metrics_services_manager::MetricsServicesManager>
blundell695d61f2015-10-21 11:25:53203 metrics_services_manager_;
[email protected]2a172e42014-02-21 04:06:10204
dcheng4af48582016-04-19 00:29:35205 std::unique_ptr<IOThread> io_thread_;
initial.commit09911bf2008-07-26 23:55:29206
[email protected]0b565182011-03-02 18:11:15207 bool created_watchdog_thread_;
dcheng4af48582016-04-19 00:29:35208 std::unique_ptr<WatchDogThread> watchdog_thread_;
[email protected]0b565182011-03-02 18:11:15209
[email protected]663831822012-05-23 10:19:21210 bool created_browser_policy_connector_;
[email protected]3b19e8e2012-10-17 19:15:49211 // Must be destroyed after |local_state_|.
dcheng4af48582016-04-19 00:29:35212 std::unique_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
[email protected]8d6b2432012-03-31 12:11:18213
initial.commit09911bf2008-07-26 23:55:29214 bool created_profile_manager_;
dcheng4af48582016-04-19 00:29:35215 std::unique_ptr<ProfileManager> profile_manager_;
initial.commit09911bf2008-07-26 23:55:29216
217 bool created_local_state_;
dcheng4af48582016-04-19 00:29:35218 std::unique_ptr<PrefService> local_state_;
initial.commit09911bf2008-07-26 23:55:29219
initial.commit09911bf2008-07-26 23:55:29220 bool created_icon_manager_;
dcheng4af48582016-04-19 00:29:35221 std::unique_ptr<IconManager> icon_manager_;
initial.commit09911bf2008-07-26 23:55:29222
qinmin9899e492016-08-05 19:03:26223 std::unique_ptr<GpuProfileCache> gpu_profile_cache_;
[email protected]a9830b52012-12-17 23:30:36224
dcheng4af48582016-04-19 00:29:35225 std::unique_ptr<GpuModeManager> gpu_mode_manager_;
[email protected]e6933d2a2013-03-12 22:32:21226
brettw00899e62016-11-12 02:10:17227#if BUILDFLAG(ENABLE_EXTENSIONS)
dcheng4af48582016-04-19 00:29:35228 std::unique_ptr<extensions::ExtensionsBrowserClient>
229 extensions_browser_client_;
[email protected]84b7a552014-07-19 04:52:06230
[email protected]5a38dfd2012-07-23 23:22:10231 scoped_refptr<extensions::EventRouterForwarder>
[email protected]3ce02412011-03-01 12:01:15232 extension_event_router_forwarder_;
233
dcheng4af48582016-04-19 00:29:35234 std::unique_ptr<MediaFileSystemRegistry> media_file_system_registry_;
[email protected]84b7a552014-07-19 04:52:06235#endif
236
[email protected]81054f812012-08-30 00:47:09237#if !defined(OS_ANDROID)
dcheng4af48582016-04-19 00:29:35238 std::unique_ptr<RemoteDebuggingServer> remote_debugging_server_;
239 std::unique_ptr<DevToolsAutoOpener> devtools_auto_opener_;
[email protected]8b60ca722013-07-19 01:29:02240#endif
241
Brett Wilson65f951c2016-11-03 22:06:12242#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
[email protected]d8ce31e2012-12-19 05:09:21243 scoped_refptr<printing::PrintPreviewDialogController>
244 print_preview_dialog_controller_;
[email protected]dbeebd52010-11-16 20:34:16245
dcheng4af48582016-04-19 00:29:35246 std::unique_ptr<printing::BackgroundPrintingManager>
247 background_printing_manager_;
[email protected]84b7a552014-07-19 04:52:06248#endif
[email protected]68f88b992011-05-07 02:01:39249
[email protected]29672ab2009-10-30 03:44:03250 // Manager for desktop notification UI.
251 bool created_notification_ui_manager_;
dcheng4af48582016-04-19 00:29:35252 std::unique_ptr<NotificationUIManager> notification_ui_manager_;
[email protected]29672ab2009-10-30 03:44:03253
dcheng4af48582016-04-19 00:29:35254 std::unique_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
initial.commit09911bf2008-07-26 23:55:29255
dcheng4af48582016-04-19 00:29:35256 std::unique_ptr<StatusTray> status_tray_;
[email protected]9e7f015f2011-05-28 00:24:25257
miguelg23cd2dd72016-04-21 15:24:03258 bool created_notification_bridge_;
259 std::unique_ptr<NotificationPlatformBridge> notification_bridge_;
260
brettw3224f3c2016-02-25 20:07:45261#if BUILDFLAG(ENABLE_BACKGROUND)
dcheng4af48582016-04-19 00:29:35262 std::unique_ptr<BackgroundModeManager> background_mode_manager_;
thestige4155842014-10-20 18:58:02263#endif
[email protected]3ba226c52011-10-27 22:50:24264
[email protected]462a0ff2011-06-02 17:15:34265 bool created_safe_browsing_service_;
vakh9a474d832015-11-13 01:43:09266 scoped_refptr<safe_browsing::SafeBrowsingService> safe_browsing_service_;
[email protected]462a0ff2011-06-02 17:15:34267
engedyc5ef21ad2016-06-17 20:22:27268 bool created_subresource_filter_ruleset_service_;
csharrison8a923d62017-03-10 15:42:13269 std::unique_ptr<subresource_filter::ContentRulesetService>
engedyc5ef21ad2016-06-17 20:22:27270 subresource_filter_ruleset_service_;
271
dgnfe075c82016-03-18 11:25:35272 bool shutting_down_;
initial.commit09911bf2008-07-26 23:55:29273
csharrison058781a2015-11-24 21:44:03274 bool tearing_down_;
275
initial.commit09911bf2008-07-26 23:55:29276 // Ensures that all the print jobs are finished before closing the browser.
dcheng4af48582016-04-19 00:29:35277 std::unique_ptr<printing::PrintJobManager> print_job_manager_;
initial.commit09911bf2008-07-26 23:55:29278
[email protected]d70539de2009-06-24 22:17:06279 std::string locale_;
initial.commit09911bf2008-07-26 23:55:29280
[email protected]073ed7b2010-09-27 09:20:02281 // Download status updates (like a changing application icon on dock/taskbar)
282 // are global per-application. DownloadStatusUpdater does no work in the ctor
283 // so we don't have to worry about lazy initialization.
dcheng4af48582016-04-19 00:29:35284 std::unique_ptr<DownloadStatusUpdater> download_status_updater_;
[email protected]073ed7b2010-09-27 09:20:02285
[email protected]254ed742011-08-16 18:45:27286 scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
287
[email protected]0de615a2012-11-08 04:40:59288 // Sequenced task runner for local state related I/O tasks.
289 const scoped_refptr<base::SequencedTaskRunner> local_state_task_runner_;
290
[email protected]2a7e7c152010-10-01 20:12:09291 // Ensures that the observers of plugin/print disable/enable state
[email protected]492d2142010-09-10 13:55:18292 // notifications are properly added and removed.
[email protected]2a7e7c152010-10-01 20:12:09293 PrefChangeRegistrar pref_change_registrar_;
[email protected]492d2142010-09-10 13:55:18294
[email protected]b2fcd0e2010-12-01 15:19:40295 // Lives here so can safely log events on shutdown.
dcheng4af48582016-04-19 00:29:35296 std::unique_ptr<net_log::ChromeNetLog> net_log_;
[email protected]b2fcd0e2010-12-01 15:19:40297
dcheng4af48582016-04-19 00:29:35298 std::unique_ptr<ChromeResourceDispatcherHostDelegate>
[email protected]8bcdf072011-06-03 16:52:15299 resource_dispatcher_host_delegate_;
[email protected]1459fb62011-05-25 19:03:27300
[email protected]3cdacd42010-04-30 18:55:53301#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
danakj8c3eb802015-09-24 07:53:00302 base::RepeatingTimer autoupdate_timer_;
[email protected]bd48c2b02010-04-09 20:32:42303
304 // Gets called by autoupdate timer to see if browser needs restart and can be
305 // restarted, and if that's the case, restarts the browser.
306 void OnAutoupdateTimer();
307 bool CanAutorestartForUpdate() const;
[email protected]f6e6d2e2011-10-28 18:39:22308 void RestartBackgroundInstance();
[email protected]80745e32012-05-08 01:22:12309#endif // defined(OS_WIN) || defined(OS_LINUX) && !defined(OS_CHROMEOS)
[email protected]bd48c2b02010-04-09 20:32:42310
[email protected]9f108f22013-04-09 00:39:56311 // component updater is normally not used under ChromeOS due
312 // to concerns over integrity of data shared between profiles,
313 // but some users of component updater only install per-user.
dcheng4af48582016-04-19 00:29:35314 std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
[email protected]9f108f22013-04-09 00:39:56315 scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
thestig11b815e92014-08-26 00:32:14316
317#if !defined(DISABLE_NACL)
bauerb810e60f42015-02-05 01:09:10318 scoped_refptr<component_updater::PnaclComponentInstaller>
[email protected]055981f2014-01-17 20:22:32319 pnacl_component_installer_;
thestig11b815e92014-08-26 00:32:14320#endif
[email protected]c1adf5a2011-08-03 22:11:37321
dcheng4af48582016-04-19 00:29:35322 std::unique_ptr<component_updater::SupervisedUserWhitelistInstaller>
bauerb22951c32015-02-12 13:18:17323 supervised_user_whitelist_installer_;
324
bauerbecab4f52017-03-13 20:16:41325#if BUILDFLAG(ENABLE_PLUGINS)
dcheng4af48582016-04-19 00:29:35326 std::unique_ptr<PluginsResourceService> plugins_resource_service_;
[email protected]2366a3a2012-10-02 20:41:14327#endif
[email protected]e9613b52012-11-27 22:35:13328
dcheng4af48582016-04-19 00:29:35329 std::unique_ptr<BrowserProcessPlatformPart> platform_part_;
[email protected]7cad6b0d2013-04-25 20:29:32330
[email protected]6b4e6852012-02-14 04:02:48331 // TODO(eroman): Remove this when done debugging 113031. This tracks
332 // the callstack which released the final module reference count.
333 base::debug::StackTrace release_last_reference_callstack_;
334
Brett Wilson0748bf412016-11-22 17:55:46335#if BUILDFLAG(ENABLE_WEBRTC)
[email protected]bbf32c52013-06-03 14:05:52336 // Lazily initialized.
dcheng4af48582016-04-19 00:29:35337 std::unique_ptr<WebRtcLogUploader> webrtc_log_uploader_;
[email protected]bbf32c52013-06-03 14:05:52338#endif
339
dcheng4af48582016-04-19 00:29:35340 std::unique_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
[email protected]72f93712014-05-19 15:10:39341
dcheng4af48582016-04-19 00:29:35342 std::unique_ptr<gcm::GCMDriver> gcm_driver_;
[email protected]c027d6d2014-06-05 15:25:40343
dcheng4af48582016-04-19 00:29:35344 std::unique_ptr<ChromeChildProcessWatcher> child_process_watcher_;
wfh22e2f4a22015-04-28 22:39:21345
dcheng4af48582016-04-19 00:29:35346 std::unique_ptr<ChromeDeviceClient> device_client_;
reillyge471fab2014-08-29 01:58:43347
hajimehoshi049996b2016-04-26 07:23:35348#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
Georges Khalil293593a62015-07-13 14:37:14349 // Any change to this #ifdef must be reflected as well in
lpyfedf65a2017-06-01 01:41:24350 // chrome/browser/resource_coordinator/tab_manager_browsertest.cc
351 std::unique_ptr<resource_coordinator::TabManager> tab_manager_;
georgesak7b5281922015-06-30 13:25:17352#endif
353
pmonette9fa59e882016-02-10 00:12:19354 shell_integration::DefaultWebClientState cached_default_web_client_state_;
grtf14398c2015-07-14 15:11:44355
vitaliiiee920542016-11-25 15:20:23356 std::unique_ptr<physical_web::PhysicalWebDataSource>
357 physical_web_data_source_;
mattreynoldsf1aab392016-10-07 00:17:07358
Sam McNallye36abbc2017-07-20 01:04:28359 std::unique_ptr<prefs::InProcessPrefServiceFactory> pref_service_factory_;
360
gab25894fe2017-05-30 03:40:36361 SEQUENCE_CHECKER(sequence_checker_);
362
[email protected]58dca552009-06-17 00:35:02363 DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
initial.commit09911bf2008-07-26 23:55:29364};
365
[email protected]58dca552009-06-17 00:35:02366#endif // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_