blob: 454080193dbbb41b6bea01416f28f210b26aaff0 [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;
Gabriel Charetteb1af7ffb2017-07-27 06:10:3595 void FlushLocalStateAndReply(base::OnceClosure reply) override;
blundell695d61f2015-10-21 11:25:5396 metrics_services_manager::MetricsServicesManager* GetMetricsServicesManager()
97 override;
Daniel Chenga542fca2014-10-21 09:51:2998 metrics::MetricsService* metrics_service() override;
nzolghadrd87a308d2016-12-07 15:45:5699 rappor::RapporServiceImpl* rappor_service() override;
oysteineb068f272017-05-23 00:14:01100 ukm::UkmRecorder* ukm_recorder() override;
Daniel Chenga542fca2014-10-21 09:51:29101 IOThread* io_thread() override;
Matt Menke21b9cc62017-08-23 15:45:45102 SystemNetworkContextManager* system_network_context_manager() override;
Daniel Chenga542fca2014-10-21 09:51:29103 WatchDogThread* watchdog_thread() override;
104 ProfileManager* profile_manager() override;
105 PrefService* local_state() override;
106 net::URLRequestContextGetter* system_request_context() override;
blundell57bcfed2015-09-04 08:44:45107 variations::VariationsService* variations_service() override;
Daniel Chenga542fca2014-10-21 09:51:29108 BrowserProcessPlatformPart* platform_part() override;
109 extensions::EventRouterForwarder* extension_event_router_forwarder() override;
110 NotificationUIManager* notification_ui_manager() override;
miguelg23cd2dd72016-04-21 15:24:03111 NotificationPlatformBridge* notification_platform_bridge() override;
Daniel Chenga542fca2014-10-21 09:51:29112 message_center::MessageCenter* message_center() override;
113 policy::BrowserPolicyConnector* browser_policy_connector() override;
114 policy::PolicyService* policy_service() override;
115 IconManager* icon_manager() override;
Daniel Chenga542fca2014-10-21 09:51:29116 GpuModeManager* gpu_mode_manager() override;
qinmin9899e492016-08-05 19:03:26117 GpuProfileCache* gpu_profile_cache() override;
scottmg9ed5c142016-02-16 03:37:49118 void CreateDevToolsHttpProtocolHandler(const std::string& ip,
119 uint16_t port) override;
dgozman54cc54e2016-02-23 03:47:30120 void CreateDevToolsAutoOpener() override;
Daniel Chenga542fca2014-10-21 09:51:29121 bool IsShuttingDown() override;
122 printing::PrintJobManager* print_job_manager() override;
123 printing::PrintPreviewDialogController* print_preview_dialog_controller()
124 override;
125 printing::BackgroundPrintingManager* background_printing_manager() override;
126 IntranetRedirectDetector* intranet_redirect_detector() override;
127 const std::string& GetApplicationLocale() override;
128 void SetApplicationLocale(const std::string& locale) override;
129 DownloadStatusUpdater* download_status_updater() override;
130 DownloadRequestLimiter* download_request_limiter() override;
131 BackgroundModeManager* background_mode_manager() override;
132 void set_background_mode_manager_for_test(
dcheng4af48582016-04-19 00:29:35133 std::unique_ptr<BackgroundModeManager> manager) override;
Daniel Chenga542fca2014-10-21 09:51:29134 StatusTray* status_tray() override;
vakh9a474d832015-11-13 01:43:09135 safe_browsing::SafeBrowsingService* safe_browsing_service() override;
Daniel Chenga542fca2014-10-21 09:51:29136 safe_browsing::ClientSideDetectionService* safe_browsing_detection_service()
137 override;
csharrison8a923d62017-03-10 15:42:13138 subresource_filter::ContentRulesetService*
139 subresource_filter_ruleset_service() override;
[email protected]6641bf662009-08-21 00:34:09140
Michael Giuffridadc8030c2017-08-02 13:22:44141#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
dchenge1bc7982014-10-30 00:32:40142 void StartAutoupdateTimer() override;
[email protected]3cdacd42010-04-30 18:55:53143#endif
[email protected]bd48c2b02010-04-09 20:32:42144
drogerc690e8802015-09-21 14:29:16145 net_log::ChromeNetLog* net_log() override;
Daniel Chenga542fca2014-10-21 09:51:29146 component_updater::ComponentUpdateService* component_updater() override;
147 CRLSetFetcher* crl_set_fetcher() override;
148 component_updater::PnaclComponentInstaller* pnacl_component_installer()
149 override;
bauerb22951c32015-02-12 13:18:17150 component_updater::SupervisedUserWhitelistInstaller*
151 supervised_user_whitelist_installer() override;
Daniel Chenga542fca2014-10-21 09:51:29152 MediaFileSystemRegistry* media_file_system_registry() override;
Brett Wilson0748bf412016-11-22 17:55:46153#if BUILDFLAG(ENABLE_WEBRTC)
Daniel Chenga542fca2014-10-21 09:51:29154 WebRtcLogUploader* webrtc_log_uploader() override;
[email protected]bbf32c52013-06-03 14:05:52155#endif
Daniel Chenga542fca2014-10-21 09:51:29156 network_time::NetworkTimeTracker* network_time_tracker() override;
157 gcm::GCMDriver* gcm_driver() override;
lpyfedf65a2017-06-01 01:41:24158 resource_coordinator::TabManager* GetTabManager() override;
pmonette9fa59e882016-02-10 00:12:19159 shell_integration::DefaultWebClientState CachedDefaultWebClientState()
grtf14398c2015-07-14 15:11:44160 override;
vitaliiiee920542016-11-25 15:20:23161 physical_web::PhysicalWebDataSource* GetPhysicalWebDataSource() override;
Sam McNallye36abbc2017-07-20 01:04:28162 prefs::InProcessPrefServiceFactory* pref_service_factory() const override;
[email protected]ca167a32011-09-30 15:19:11163
[email protected]b1de2c72013-02-06 02:45:47164 static void RegisterPrefs(PrefRegistrySimple* registry);
165
initial.commit09911bf2008-07-26 23:55:29166 private:
dgnfe075c82016-03-18 11:25:35167 // KeepAliveStateObserver implementation
168 void OnKeepAliveStateChanged(bool is_keeping_alive) override;
169 void OnKeepAliveRestartStateChanged(bool can_restart) override;
170
[email protected]0b565182011-03-02 18:11:15171 void CreateWatchdogThread();
initial.commit09911bf2008-07-26 23:55:29172 void CreateProfileManager();
initial.commit09911bf2008-07-26 23:55:29173 void CreateLocalState();
174 void CreateViewedPageTracker();
175 void CreateIconManager();
[email protected]c4ff4952010-01-08 19:12:47176 void CreateIntranetRedirectDetector();
miguelg23cd2dd72016-04-21 15:24:03177 void CreateNotificationPlatformBridge();
[email protected]29672ab2009-10-30 03:44:03178 void CreateNotificationUIManager();
[email protected]ccb55cf52010-03-06 22:02:04179 void CreateStatusTrayManager();
[email protected]d8ce31e2012-12-19 05:09:21180 void CreatePrintPreviewDialogController();
[email protected]68f88b992011-05-07 02:01:39181 void CreateBackgroundPrintingManager();
[email protected]462a0ff2011-06-02 17:15:34182 void CreateSafeBrowsingService();
[email protected]a7a5e992010-12-09 23:39:51183 void CreateSafeBrowsingDetectionService();
engedyc5ef21ad2016-06-17 20:22:27184 void CreateSubresourceFilterRulesetService();
[email protected]9e7f015f2011-05-28 00:24:25185 void CreateStatusTray();
186 void CreateBackgroundModeManager();
[email protected]c027d6d2014-06-05 15:25:40187 void CreateGCMDriver();
mattreynoldsf1aab392016-10-07 00:17:07188 void CreatePhysicalWebDataSource();
[email protected]a7a5e992010-12-09 23:39:51189
[email protected]40850a52011-05-26 22:07:35190 void ApplyAllowCrossOriginAuthPromptPolicy();
[email protected]b61f62a2011-11-01 02:02:10191 void ApplyDefaultBrowserPolicy();
Lei Zhang4736dd22017-07-07 01:38:17192#if !defined(OS_ANDROID)
[email protected]459158c2013-11-14 00:25:15193 void ApplyMetricsReportingPolicy();
Lei Zhang4736dd22017-07-07 01:38:17194#endif
[email protected]419a0572011-04-18 22:21:46195
grtf14398c2015-07-14 15:11:44196 void CacheDefaultWebClientState();
197
dgnfe075c82016-03-18 11:25:35198 // Methods called to control our lifetime. The browser process can be "pinned"
199 // to make sure it keeps running.
200 void Pin();
201 void Unpin();
202
dcheng4af48582016-04-19 00:29:35203 std::unique_ptr<metrics_services_manager::MetricsServicesManager>
blundell695d61f2015-10-21 11:25:53204 metrics_services_manager_;
[email protected]2a172e42014-02-21 04:06:10205
dcheng4af48582016-04-19 00:29:35206 std::unique_ptr<IOThread> io_thread_;
initial.commit09911bf2008-07-26 23:55:29207
[email protected]0b565182011-03-02 18:11:15208 bool created_watchdog_thread_;
dcheng4af48582016-04-19 00:29:35209 std::unique_ptr<WatchDogThread> watchdog_thread_;
[email protected]0b565182011-03-02 18:11:15210
[email protected]663831822012-05-23 10:19:21211 bool created_browser_policy_connector_;
[email protected]3b19e8e2012-10-17 19:15:49212 // Must be destroyed after |local_state_|.
dcheng4af48582016-04-19 00:29:35213 std::unique_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
[email protected]8d6b2432012-03-31 12:11:18214
initial.commit09911bf2008-07-26 23:55:29215 bool created_profile_manager_;
dcheng4af48582016-04-19 00:29:35216 std::unique_ptr<ProfileManager> profile_manager_;
initial.commit09911bf2008-07-26 23:55:29217
dcheng4af48582016-04-19 00:29:35218 std::unique_ptr<PrefService> local_state_;
initial.commit09911bf2008-07-26 23:55:29219
Matt Menke21b9cc62017-08-23 15:45:45220 std::unique_ptr<SystemNetworkContextManager> system_network_context_manager_;
221
initial.commit09911bf2008-07-26 23:55:29222 bool created_icon_manager_;
dcheng4af48582016-04-19 00:29:35223 std::unique_ptr<IconManager> icon_manager_;
initial.commit09911bf2008-07-26 23:55:29224
qinmin9899e492016-08-05 19:03:26225 std::unique_ptr<GpuProfileCache> gpu_profile_cache_;
[email protected]a9830b52012-12-17 23:30:36226
dcheng4af48582016-04-19 00:29:35227 std::unique_ptr<GpuModeManager> gpu_mode_manager_;
[email protected]e6933d2a2013-03-12 22:32:21228
brettw00899e62016-11-12 02:10:17229#if BUILDFLAG(ENABLE_EXTENSIONS)
dcheng4af48582016-04-19 00:29:35230 std::unique_ptr<extensions::ExtensionsBrowserClient>
231 extensions_browser_client_;
[email protected]84b7a552014-07-19 04:52:06232
[email protected]5a38dfd2012-07-23 23:22:10233 scoped_refptr<extensions::EventRouterForwarder>
[email protected]3ce02412011-03-01 12:01:15234 extension_event_router_forwarder_;
235
dcheng4af48582016-04-19 00:29:35236 std::unique_ptr<MediaFileSystemRegistry> media_file_system_registry_;
[email protected]84b7a552014-07-19 04:52:06237#endif
238
[email protected]81054f812012-08-30 00:47:09239#if !defined(OS_ANDROID)
dcheng4af48582016-04-19 00:29:35240 std::unique_ptr<RemoteDebuggingServer> remote_debugging_server_;
241 std::unique_ptr<DevToolsAutoOpener> devtools_auto_opener_;
[email protected]8b60ca722013-07-19 01:29:02242#endif
243
Brett Wilson65f951c2016-11-03 22:06:12244#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
[email protected]d8ce31e2012-12-19 05:09:21245 scoped_refptr<printing::PrintPreviewDialogController>
246 print_preview_dialog_controller_;
[email protected]dbeebd52010-11-16 20:34:16247
dcheng4af48582016-04-19 00:29:35248 std::unique_ptr<printing::BackgroundPrintingManager>
249 background_printing_manager_;
[email protected]84b7a552014-07-19 04:52:06250#endif
[email protected]68f88b992011-05-07 02:01:39251
[email protected]29672ab2009-10-30 03:44:03252 // Manager for desktop notification UI.
253 bool created_notification_ui_manager_;
dcheng4af48582016-04-19 00:29:35254 std::unique_ptr<NotificationUIManager> notification_ui_manager_;
[email protected]29672ab2009-10-30 03:44:03255
dcheng4af48582016-04-19 00:29:35256 std::unique_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
initial.commit09911bf2008-07-26 23:55:29257
dcheng4af48582016-04-19 00:29:35258 std::unique_ptr<StatusTray> status_tray_;
[email protected]9e7f015f2011-05-28 00:24:25259
miguelg23cd2dd72016-04-21 15:24:03260 bool created_notification_bridge_;
261 std::unique_ptr<NotificationPlatformBridge> notification_bridge_;
262
brettw3224f3c2016-02-25 20:07:45263#if BUILDFLAG(ENABLE_BACKGROUND)
dcheng4af48582016-04-19 00:29:35264 std::unique_ptr<BackgroundModeManager> background_mode_manager_;
thestige4155842014-10-20 18:58:02265#endif
[email protected]3ba226c52011-10-27 22:50:24266
[email protected]462a0ff2011-06-02 17:15:34267 bool created_safe_browsing_service_;
vakh9a474d832015-11-13 01:43:09268 scoped_refptr<safe_browsing::SafeBrowsingService> safe_browsing_service_;
[email protected]462a0ff2011-06-02 17:15:34269
engedyc5ef21ad2016-06-17 20:22:27270 bool created_subresource_filter_ruleset_service_;
csharrison8a923d62017-03-10 15:42:13271 std::unique_ptr<subresource_filter::ContentRulesetService>
engedyc5ef21ad2016-06-17 20:22:27272 subresource_filter_ruleset_service_;
273
dgnfe075c82016-03-18 11:25:35274 bool shutting_down_;
initial.commit09911bf2008-07-26 23:55:29275
csharrison058781a2015-11-24 21:44:03276 bool tearing_down_;
277
initial.commit09911bf2008-07-26 23:55:29278 // Ensures that all the print jobs are finished before closing the browser.
dcheng4af48582016-04-19 00:29:35279 std::unique_ptr<printing::PrintJobManager> print_job_manager_;
initial.commit09911bf2008-07-26 23:55:29280
[email protected]d70539de2009-06-24 22:17:06281 std::string locale_;
initial.commit09911bf2008-07-26 23:55:29282
[email protected]073ed7b2010-09-27 09:20:02283 // Download status updates (like a changing application icon on dock/taskbar)
284 // are global per-application. DownloadStatusUpdater does no work in the ctor
285 // so we don't have to worry about lazy initialization.
dcheng4af48582016-04-19 00:29:35286 std::unique_ptr<DownloadStatusUpdater> download_status_updater_;
[email protected]073ed7b2010-09-27 09:20:02287
[email protected]254ed742011-08-16 18:45:27288 scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
289
[email protected]0de615a2012-11-08 04:40:59290 // Sequenced task runner for local state related I/O tasks.
291 const scoped_refptr<base::SequencedTaskRunner> local_state_task_runner_;
292
[email protected]2a7e7c152010-10-01 20:12:09293 // Ensures that the observers of plugin/print disable/enable state
[email protected]492d2142010-09-10 13:55:18294 // notifications are properly added and removed.
[email protected]2a7e7c152010-10-01 20:12:09295 PrefChangeRegistrar pref_change_registrar_;
[email protected]492d2142010-09-10 13:55:18296
[email protected]b2fcd0e2010-12-01 15:19:40297 // Lives here so can safely log events on shutdown.
dcheng4af48582016-04-19 00:29:35298 std::unique_ptr<net_log::ChromeNetLog> net_log_;
[email protected]b2fcd0e2010-12-01 15:19:40299
dcheng4af48582016-04-19 00:29:35300 std::unique_ptr<ChromeResourceDispatcherHostDelegate>
[email protected]8bcdf072011-06-03 16:52:15301 resource_dispatcher_host_delegate_;
[email protected]1459fb62011-05-25 19:03:27302
Michael Giuffridadc8030c2017-08-02 13:22:44303#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
danakj8c3eb802015-09-24 07:53:00304 base::RepeatingTimer autoupdate_timer_;
[email protected]bd48c2b02010-04-09 20:32:42305
306 // Gets called by autoupdate timer to see if browser needs restart and can be
307 // restarted, and if that's the case, restarts the browser.
308 void OnAutoupdateTimer();
309 bool CanAutorestartForUpdate() const;
[email protected]f6e6d2e2011-10-28 18:39:22310 void RestartBackgroundInstance();
Michael Giuffridadc8030c2017-08-02 13:22:44311#endif // defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
[email protected]bd48c2b02010-04-09 20:32:42312
[email protected]9f108f22013-04-09 00:39:56313 // component updater is normally not used under ChromeOS due
314 // to concerns over integrity of data shared between profiles,
315 // but some users of component updater only install per-user.
dcheng4af48582016-04-19 00:29:35316 std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
[email protected]9f108f22013-04-09 00:39:56317 scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
thestig11b815e92014-08-26 00:32:14318
319#if !defined(DISABLE_NACL)
bauerb810e60f42015-02-05 01:09:10320 scoped_refptr<component_updater::PnaclComponentInstaller>
[email protected]055981f2014-01-17 20:22:32321 pnacl_component_installer_;
thestig11b815e92014-08-26 00:32:14322#endif
[email protected]c1adf5a2011-08-03 22:11:37323
dcheng4af48582016-04-19 00:29:35324 std::unique_ptr<component_updater::SupervisedUserWhitelistInstaller>
bauerb22951c32015-02-12 13:18:17325 supervised_user_whitelist_installer_;
326
bauerbecab4f52017-03-13 20:16:41327#if BUILDFLAG(ENABLE_PLUGINS)
dcheng4af48582016-04-19 00:29:35328 std::unique_ptr<PluginsResourceService> plugins_resource_service_;
[email protected]2366a3a2012-10-02 20:41:14329#endif
[email protected]e9613b52012-11-27 22:35:13330
dcheng4af48582016-04-19 00:29:35331 std::unique_ptr<BrowserProcessPlatformPart> platform_part_;
[email protected]7cad6b0d2013-04-25 20:29:32332
[email protected]6b4e6852012-02-14 04:02:48333 // TODO(eroman): Remove this when done debugging 113031. This tracks
334 // the callstack which released the final module reference count.
335 base::debug::StackTrace release_last_reference_callstack_;
336
Brett Wilson0748bf412016-11-22 17:55:46337#if BUILDFLAG(ENABLE_WEBRTC)
[email protected]bbf32c52013-06-03 14:05:52338 // Lazily initialized.
dcheng4af48582016-04-19 00:29:35339 std::unique_ptr<WebRtcLogUploader> webrtc_log_uploader_;
[email protected]bbf32c52013-06-03 14:05:52340#endif
341
dcheng4af48582016-04-19 00:29:35342 std::unique_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
[email protected]72f93712014-05-19 15:10:39343
dcheng4af48582016-04-19 00:29:35344 std::unique_ptr<gcm::GCMDriver> gcm_driver_;
[email protected]c027d6d2014-06-05 15:25:40345
dcheng4af48582016-04-19 00:29:35346 std::unique_ptr<ChromeChildProcessWatcher> child_process_watcher_;
wfh22e2f4a22015-04-28 22:39:21347
dcheng4af48582016-04-19 00:29:35348 std::unique_ptr<ChromeDeviceClient> device_client_;
reillyge471fab2014-08-29 01:58:43349
hajimehoshi049996b2016-04-26 07:23:35350#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
Georges Khalil293593a62015-07-13 14:37:14351 // Any change to this #ifdef must be reflected as well in
lpyfedf65a2017-06-01 01:41:24352 // chrome/browser/resource_coordinator/tab_manager_browsertest.cc
353 std::unique_ptr<resource_coordinator::TabManager> tab_manager_;
georgesak7b5281922015-06-30 13:25:17354#endif
355
pmonette9fa59e882016-02-10 00:12:19356 shell_integration::DefaultWebClientState cached_default_web_client_state_;
grtf14398c2015-07-14 15:11:44357
vitaliiiee920542016-11-25 15:20:23358 std::unique_ptr<physical_web::PhysicalWebDataSource>
359 physical_web_data_source_;
mattreynoldsf1aab392016-10-07 00:17:07360
Sam McNallye36abbc2017-07-20 01:04:28361 std::unique_ptr<prefs::InProcessPrefServiceFactory> pref_service_factory_;
362
gab25894fe2017-05-30 03:40:36363 SEQUENCE_CHECKER(sequence_checker_);
364
[email protected]58dca552009-06-17 00:35:02365 DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
initial.commit09911bf2008-07-26 23:55:29366};
367
[email protected]58dca552009-06-17 00:35:02368#endif // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_