blob: c66414e3a700c6e1060e0bb74adb76fd31ae0ffe [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"
[email protected]c9177502011-01-01 04:48:4921#include "base/threading/non_thread_safe.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 base::NonThreadSafe,
69 public KeepAliveStateObserver {
initial.commit09911bf2008-07-26 23:55:2970 public:
[email protected]0de615a2012-11-08 04:40:5971 // |local_state_task_runner| must be a shutdown-blocking task runner.
72 BrowserProcessImpl(base::SequencedTaskRunner* local_state_task_runner,
[email protected]2f3b1cc2014-03-17 23:07:1573 const base::CommandLine& command_line);
Daniel Chenga542fca2014-10-21 09:51:2974 ~BrowserProcessImpl() override;
initial.commit09911bf2008-07-26 23:55:2975
[email protected]99907362012-01-11 05:41:4076 // Called before the browser threads are created.
77 void PreCreateThreads();
[email protected]2e5b60a22011-11-28 15:56:4178
[email protected]d2caaa22011-12-12 03:04:1579 // Called after the threads have been created but before the message loops
80 // starts running. Allows the browser process to do any initialization that
81 // requires all threads running.
82 void PreMainMessageLoopRun();
83
[email protected]2e5b60a22011-11-28 15:56:4184 // Most cleanup is done by these functions, driven from
85 // ChromeBrowserMain based on notifications from the content
86 // framework, rather than in the destructor, so that we can
87 // interleave cleanup with threads being stopped.
thestigd75ce5532015-10-05 22:08:3488#if !defined(OS_ANDROID)
[email protected]2e5b60a22011-11-28 15:56:4189 void StartTearDown();
[email protected]99907362012-01-11 05:41:4090 void PostDestroyThreads();
thestigd75ce5532015-10-05 22:08:3491#endif
[email protected]2e5b60a22011-11-28 15:56:4192
[email protected]80745e32012-05-08 01:22:1293 // BrowserProcess implementation.
Daniel Chenga542fca2014-10-21 09:51:2994 void ResourceDispatcherHostCreated() override;
95 void EndSession() 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;
oysteine2fc16462017-01-24 23:56:12100 ukm::UkmService* ukm_service() override;
Daniel Chenga542fca2014-10-21 09:51:29101 IOThread* io_thread() override;
102 WatchDogThread* watchdog_thread() override;
103 ProfileManager* profile_manager() override;
104 PrefService* local_state() override;
105 net::URLRequestContextGetter* system_request_context() override;
blundell57bcfed2015-09-04 08:44:45106 variations::VariationsService* variations_service() override;
Daniel Chenga542fca2014-10-21 09:51:29107 BrowserProcessPlatformPart* platform_part() override;
108 extensions::EventRouterForwarder* extension_event_router_forwarder() override;
109 NotificationUIManager* notification_ui_manager() override;
miguelg23cd2dd72016-04-21 15:24:03110 NotificationPlatformBridge* notification_platform_bridge() override;
Daniel Chenga542fca2014-10-21 09:51:29111 message_center::MessageCenter* message_center() override;
112 policy::BrowserPolicyConnector* browser_policy_connector() override;
113 policy::PolicyService* policy_service() override;
114 IconManager* icon_manager() override;
Daniel Chenga542fca2014-10-21 09:51:29115 GpuModeManager* gpu_mode_manager() override;
qinmin9899e492016-08-05 19:03:26116 GpuProfileCache* gpu_profile_cache() override;
scottmg9ed5c142016-02-16 03:37:49117 void CreateDevToolsHttpProtocolHandler(const std::string& ip,
118 uint16_t port) override;
dgozman54cc54e2016-02-23 03:47:30119 void CreateDevToolsAutoOpener() override;
Daniel Chenga542fca2014-10-21 09:51:29120 bool IsShuttingDown() override;
121 printing::PrintJobManager* print_job_manager() override;
122 printing::PrintPreviewDialogController* print_preview_dialog_controller()
123 override;
124 printing::BackgroundPrintingManager* background_printing_manager() override;
125 IntranetRedirectDetector* intranet_redirect_detector() override;
126 const std::string& GetApplicationLocale() override;
127 void SetApplicationLocale(const std::string& locale) override;
128 DownloadStatusUpdater* download_status_updater() override;
129 DownloadRequestLimiter* download_request_limiter() override;
130 BackgroundModeManager* background_mode_manager() override;
131 void set_background_mode_manager_for_test(
dcheng4af48582016-04-19 00:29:35132 std::unique_ptr<BackgroundModeManager> manager) override;
Daniel Chenga542fca2014-10-21 09:51:29133 StatusTray* status_tray() override;
vakh9a474d832015-11-13 01:43:09134 safe_browsing::SafeBrowsingService* safe_browsing_service() override;
Daniel Chenga542fca2014-10-21 09:51:29135 safe_browsing::ClientSideDetectionService* safe_browsing_detection_service()
136 override;
csharrison8a923d62017-03-10 15:42:13137 subresource_filter::ContentRulesetService*
138 subresource_filter_ruleset_service() override;
[email protected]6641bf662009-08-21 00:34:09139
[email protected]3cdacd42010-04-30 18:55:53140#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
dchenge1bc7982014-10-30 00:32:40141 void StartAutoupdateTimer() override;
[email protected]3cdacd42010-04-30 18:55:53142#endif
[email protected]bd48c2b02010-04-09 20:32:42143
drogerc690e8802015-09-21 14:29:16144 net_log::ChromeNetLog* net_log() override;
Daniel Chenga542fca2014-10-21 09:51:29145 component_updater::ComponentUpdateService* component_updater() override;
146 CRLSetFetcher* crl_set_fetcher() override;
147 component_updater::PnaclComponentInstaller* pnacl_component_installer()
148 override;
bauerb22951c32015-02-12 13:18:17149 component_updater::SupervisedUserWhitelistInstaller*
150 supervised_user_whitelist_installer() override;
Daniel Chenga542fca2014-10-21 09:51:29151 MediaFileSystemRegistry* media_file_system_registry() override;
152 bool created_local_state() const 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;
georgesak1c455532015-09-24 19:55:29158 memory::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;
[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();
[email protected]459158c2013-11-14 00:25:15191 void ApplyMetricsReportingPolicy();
[email protected]419a0572011-04-18 22:21:46192
grtf14398c2015-07-14 15:11:44193 void CacheDefaultWebClientState();
194
dgnfe075c82016-03-18 11:25:35195 // Methods called to control our lifetime. The browser process can be "pinned"
196 // to make sure it keeps running.
197 void Pin();
198 void Unpin();
199
dcheng4af48582016-04-19 00:29:35200 std::unique_ptr<metrics_services_manager::MetricsServicesManager>
blundell695d61f2015-10-21 11:25:53201 metrics_services_manager_;
[email protected]2a172e42014-02-21 04:06:10202
dcheng4af48582016-04-19 00:29:35203 std::unique_ptr<IOThread> io_thread_;
initial.commit09911bf2008-07-26 23:55:29204
[email protected]0b565182011-03-02 18:11:15205 bool created_watchdog_thread_;
dcheng4af48582016-04-19 00:29:35206 std::unique_ptr<WatchDogThread> watchdog_thread_;
[email protected]0b565182011-03-02 18:11:15207
[email protected]663831822012-05-23 10:19:21208 bool created_browser_policy_connector_;
[email protected]3b19e8e2012-10-17 19:15:49209 // Must be destroyed after |local_state_|.
dcheng4af48582016-04-19 00:29:35210 std::unique_ptr<policy::BrowserPolicyConnector> browser_policy_connector_;
[email protected]8d6b2432012-03-31 12:11:18211
initial.commit09911bf2008-07-26 23:55:29212 bool created_profile_manager_;
dcheng4af48582016-04-19 00:29:35213 std::unique_ptr<ProfileManager> profile_manager_;
initial.commit09911bf2008-07-26 23:55:29214
215 bool created_local_state_;
dcheng4af48582016-04-19 00:29:35216 std::unique_ptr<PrefService> local_state_;
initial.commit09911bf2008-07-26 23:55:29217
initial.commit09911bf2008-07-26 23:55:29218 bool created_icon_manager_;
dcheng4af48582016-04-19 00:29:35219 std::unique_ptr<IconManager> icon_manager_;
initial.commit09911bf2008-07-26 23:55:29220
qinmin9899e492016-08-05 19:03:26221 std::unique_ptr<GpuProfileCache> gpu_profile_cache_;
[email protected]a9830b52012-12-17 23:30:36222
dcheng4af48582016-04-19 00:29:35223 std::unique_ptr<GpuModeManager> gpu_mode_manager_;
[email protected]e6933d2a2013-03-12 22:32:21224
brettw00899e62016-11-12 02:10:17225#if BUILDFLAG(ENABLE_EXTENSIONS)
dcheng4af48582016-04-19 00:29:35226 std::unique_ptr<extensions::ExtensionsBrowserClient>
227 extensions_browser_client_;
[email protected]84b7a552014-07-19 04:52:06228
[email protected]5a38dfd2012-07-23 23:22:10229 scoped_refptr<extensions::EventRouterForwarder>
[email protected]3ce02412011-03-01 12:01:15230 extension_event_router_forwarder_;
231
dcheng4af48582016-04-19 00:29:35232 std::unique_ptr<MediaFileSystemRegistry> media_file_system_registry_;
[email protected]84b7a552014-07-19 04:52:06233#endif
234
[email protected]81054f812012-08-30 00:47:09235#if !defined(OS_ANDROID)
dcheng4af48582016-04-19 00:29:35236 std::unique_ptr<RemoteDebuggingServer> remote_debugging_server_;
237 std::unique_ptr<DevToolsAutoOpener> devtools_auto_opener_;
[email protected]8b60ca722013-07-19 01:29:02238#endif
239
Brett Wilson65f951c2016-11-03 22:06:12240#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
[email protected]d8ce31e2012-12-19 05:09:21241 scoped_refptr<printing::PrintPreviewDialogController>
242 print_preview_dialog_controller_;
[email protected]dbeebd52010-11-16 20:34:16243
dcheng4af48582016-04-19 00:29:35244 std::unique_ptr<printing::BackgroundPrintingManager>
245 background_printing_manager_;
[email protected]84b7a552014-07-19 04:52:06246#endif
[email protected]68f88b992011-05-07 02:01:39247
[email protected]29672ab2009-10-30 03:44:03248 // Manager for desktop notification UI.
249 bool created_notification_ui_manager_;
dcheng4af48582016-04-19 00:29:35250 std::unique_ptr<NotificationUIManager> notification_ui_manager_;
[email protected]29672ab2009-10-30 03:44:03251
dcheng4af48582016-04-19 00:29:35252 std::unique_ptr<IntranetRedirectDetector> intranet_redirect_detector_;
initial.commit09911bf2008-07-26 23:55:29253
dcheng4af48582016-04-19 00:29:35254 std::unique_ptr<StatusTray> status_tray_;
[email protected]9e7f015f2011-05-28 00:24:25255
miguelg23cd2dd72016-04-21 15:24:03256 bool created_notification_bridge_;
257 std::unique_ptr<NotificationPlatformBridge> notification_bridge_;
258
brettw3224f3c2016-02-25 20:07:45259#if BUILDFLAG(ENABLE_BACKGROUND)
dcheng4af48582016-04-19 00:29:35260 std::unique_ptr<BackgroundModeManager> background_mode_manager_;
thestige4155842014-10-20 18:58:02261#endif
[email protected]3ba226c52011-10-27 22:50:24262
[email protected]462a0ff2011-06-02 17:15:34263 bool created_safe_browsing_service_;
vakh9a474d832015-11-13 01:43:09264 scoped_refptr<safe_browsing::SafeBrowsingService> safe_browsing_service_;
[email protected]462a0ff2011-06-02 17:15:34265
engedyc5ef21ad2016-06-17 20:22:27266 bool created_subresource_filter_ruleset_service_;
csharrison8a923d62017-03-10 15:42:13267 std::unique_ptr<subresource_filter::ContentRulesetService>
engedyc5ef21ad2016-06-17 20:22:27268 subresource_filter_ruleset_service_;
269
dgnfe075c82016-03-18 11:25:35270 bool shutting_down_;
initial.commit09911bf2008-07-26 23:55:29271
csharrison058781a2015-11-24 21:44:03272 bool tearing_down_;
273
initial.commit09911bf2008-07-26 23:55:29274 // Ensures that all the print jobs are finished before closing the browser.
dcheng4af48582016-04-19 00:29:35275 std::unique_ptr<printing::PrintJobManager> print_job_manager_;
initial.commit09911bf2008-07-26 23:55:29276
[email protected]d70539de2009-06-24 22:17:06277 std::string locale_;
initial.commit09911bf2008-07-26 23:55:29278
[email protected]073ed7b2010-09-27 09:20:02279 // Download status updates (like a changing application icon on dock/taskbar)
280 // are global per-application. DownloadStatusUpdater does no work in the ctor
281 // so we don't have to worry about lazy initialization.
dcheng4af48582016-04-19 00:29:35282 std::unique_ptr<DownloadStatusUpdater> download_status_updater_;
[email protected]073ed7b2010-09-27 09:20:02283
[email protected]254ed742011-08-16 18:45:27284 scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
285
[email protected]0de615a2012-11-08 04:40:59286 // Sequenced task runner for local state related I/O tasks.
287 const scoped_refptr<base::SequencedTaskRunner> local_state_task_runner_;
288
[email protected]2a7e7c152010-10-01 20:12:09289 // Ensures that the observers of plugin/print disable/enable state
[email protected]492d2142010-09-10 13:55:18290 // notifications are properly added and removed.
[email protected]2a7e7c152010-10-01 20:12:09291 PrefChangeRegistrar pref_change_registrar_;
[email protected]492d2142010-09-10 13:55:18292
[email protected]b2fcd0e2010-12-01 15:19:40293 // Lives here so can safely log events on shutdown.
dcheng4af48582016-04-19 00:29:35294 std::unique_ptr<net_log::ChromeNetLog> net_log_;
[email protected]b2fcd0e2010-12-01 15:19:40295
dcheng4af48582016-04-19 00:29:35296 std::unique_ptr<ChromeResourceDispatcherHostDelegate>
[email protected]8bcdf072011-06-03 16:52:15297 resource_dispatcher_host_delegate_;
[email protected]1459fb62011-05-25 19:03:27298
[email protected]3cdacd42010-04-30 18:55:53299#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
danakj8c3eb802015-09-24 07:53:00300 base::RepeatingTimer autoupdate_timer_;
[email protected]bd48c2b02010-04-09 20:32:42301
302 // Gets called by autoupdate timer to see if browser needs restart and can be
303 // restarted, and if that's the case, restarts the browser.
304 void OnAutoupdateTimer();
305 bool CanAutorestartForUpdate() const;
[email protected]f6e6d2e2011-10-28 18:39:22306 void RestartBackgroundInstance();
[email protected]80745e32012-05-08 01:22:12307#endif // defined(OS_WIN) || defined(OS_LINUX) && !defined(OS_CHROMEOS)
[email protected]bd48c2b02010-04-09 20:32:42308
[email protected]9f108f22013-04-09 00:39:56309 // component updater is normally not used under ChromeOS due
310 // to concerns over integrity of data shared between profiles,
311 // but some users of component updater only install per-user.
dcheng4af48582016-04-19 00:29:35312 std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
[email protected]9f108f22013-04-09 00:39:56313 scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
thestig11b815e92014-08-26 00:32:14314
315#if !defined(DISABLE_NACL)
bauerb810e60f42015-02-05 01:09:10316 scoped_refptr<component_updater::PnaclComponentInstaller>
[email protected]055981f2014-01-17 20:22:32317 pnacl_component_installer_;
thestig11b815e92014-08-26 00:32:14318#endif
[email protected]c1adf5a2011-08-03 22:11:37319
dcheng4af48582016-04-19 00:29:35320 std::unique_ptr<component_updater::SupervisedUserWhitelistInstaller>
bauerb22951c32015-02-12 13:18:17321 supervised_user_whitelist_installer_;
322
bauerbecab4f52017-03-13 20:16:41323#if BUILDFLAG(ENABLE_PLUGINS)
dcheng4af48582016-04-19 00:29:35324 std::unique_ptr<PluginsResourceService> plugins_resource_service_;
[email protected]2366a3a2012-10-02 20:41:14325#endif
[email protected]e9613b52012-11-27 22:35:13326
dcheng4af48582016-04-19 00:29:35327 std::unique_ptr<BrowserProcessPlatformPart> platform_part_;
[email protected]7cad6b0d2013-04-25 20:29:32328
[email protected]6b4e6852012-02-14 04:02:48329 // TODO(eroman): Remove this when done debugging 113031. This tracks
330 // the callstack which released the final module reference count.
331 base::debug::StackTrace release_last_reference_callstack_;
332
Brett Wilson0748bf412016-11-22 17:55:46333#if BUILDFLAG(ENABLE_WEBRTC)
[email protected]bbf32c52013-06-03 14:05:52334 // Lazily initialized.
dcheng4af48582016-04-19 00:29:35335 std::unique_ptr<WebRtcLogUploader> webrtc_log_uploader_;
[email protected]bbf32c52013-06-03 14:05:52336#endif
337
dcheng4af48582016-04-19 00:29:35338 std::unique_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
[email protected]72f93712014-05-19 15:10:39339
dcheng4af48582016-04-19 00:29:35340 std::unique_ptr<gcm::GCMDriver> gcm_driver_;
[email protected]c027d6d2014-06-05 15:25:40341
dcheng4af48582016-04-19 00:29:35342 std::unique_ptr<ChromeChildProcessWatcher> child_process_watcher_;
wfh22e2f4a22015-04-28 22:39:21343
dcheng4af48582016-04-19 00:29:35344 std::unique_ptr<ChromeDeviceClient> device_client_;
reillyge471fab2014-08-29 01:58:43345
hajimehoshi049996b2016-04-26 07:23:35346#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
Georges Khalil293593a62015-07-13 14:37:14347 // Any change to this #ifdef must be reflected as well in
georgesak1c455532015-09-24 19:55:29348 // chrome/browser/memory/tab_manager_browsertest.cc
dcheng4af48582016-04-19 00:29:35349 std::unique_ptr<memory::TabManager> tab_manager_;
georgesak7b5281922015-06-30 13:25:17350#endif
351
pmonette9fa59e882016-02-10 00:12:19352 shell_integration::DefaultWebClientState cached_default_web_client_state_;
grtf14398c2015-07-14 15:11:44353
vitaliiiee920542016-11-25 15:20:23354 std::unique_ptr<physical_web::PhysicalWebDataSource>
355 physical_web_data_source_;
mattreynoldsf1aab392016-10-07 00:17:07356
[email protected]58dca552009-06-17 00:35:02357 DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
initial.commit09911bf2008-07-26 23:55:29358};
359
[email protected]58dca552009-06-17 00:35:02360#endif // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_