Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: chrome/browser/browser_process_impl.cc

Issue 301973009: Add browser-global GCMDriver (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Addressed comments. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browser_process_impl.h" 5 #include "chrome/browser/browser_process_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/debug/alias.h" 14 #include "base/debug/alias.h"
15 #include "base/debug/leak_annotations.h" 15 #include "base/debug/leak_annotations.h"
16 #include "base/files/file_path.h"
16 #include "base/path_service.h" 17 #include "base/path_service.h"
17 #include "base/prefs/json_pref_store.h" 18 #include "base/prefs/json_pref_store.h"
18 #include "base/prefs/pref_registry_simple.h" 19 #include "base/prefs/pref_registry_simple.h"
19 #include "base/prefs/pref_service.h" 20 #include "base/prefs/pref_service.h"
20 #include "base/synchronization/waitable_event.h" 21 #include "base/synchronization/waitable_event.h"
21 #include "base/threading/thread.h" 22 #include "base/threading/thread.h"
22 #include "base/threading/thread_restrictions.h" 23 #include "base/threading/thread_restrictions.h"
23 #include "base/time/default_tick_clock.h" 24 #include "base/time/default_tick_clock.h"
24 #include "chrome/browser/apps/chrome_apps_client.h" 25 #include "chrome/browser/apps/chrome_apps_client.h"
25 #include "chrome/browser/background/background_mode_manager.h" 26 #include "chrome/browser/background/background_mode_manager.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 #include "chrome/browser/web_resource/promo_resource_service.h" 71 #include "chrome/browser/web_resource/promo_resource_service.h"
71 #include "chrome/common/chrome_constants.h" 72 #include "chrome/common/chrome_constants.h"
72 #include "chrome/common/chrome_paths.h" 73 #include "chrome/common/chrome_paths.h"
73 #include "chrome/common/chrome_switches.h" 74 #include "chrome/common/chrome_switches.h"
74 #include "chrome/common/extensions/chrome_extensions_client.h" 75 #include "chrome/common/extensions/chrome_extensions_client.h"
75 #include "chrome/common/pref_names.h" 76 #include "chrome/common/pref_names.h"
76 #include "chrome/common/switch_utils.h" 77 #include "chrome/common/switch_utils.h"
77 #include "chrome/common/url_constants.h" 78 #include "chrome/common/url_constants.h"
78 #include "chrome/installer/util/google_update_constants.h" 79 #include "chrome/installer/util/google_update_constants.h"
79 #include "chrome/installer/util/google_update_settings.h" 80 #include "chrome/installer/util/google_update_settings.h"
81 #include "components/gcm_driver/gcm_driver.h"
80 #include "components/policy/core/common/policy_service.h" 82 #include "components/policy/core/common/policy_service.h"
81 #include "components/signin/core/common/profile_management_switches.h" 83 #include "components/signin/core/common/profile_management_switches.h"
82 #include "components/translate/core/browser/translate_download_manager.h" 84 #include "components/translate/core/browser/translate_download_manager.h"
83 #include "content/public/browser/browser_thread.h" 85 #include "content/public/browser/browser_thread.h"
84 #include "content/public/browser/child_process_security_policy.h" 86 #include "content/public/browser/child_process_security_policy.h"
85 #include "content/public/browser/notification_details.h" 87 #include "content/public/browser/notification_details.h"
86 #include "content/public/browser/plugin_service.h" 88 #include "content/public/browser/plugin_service.h"
87 #include "content/public/browser/render_process_host.h" 89 #include "content/public/browser/render_process_host.h"
88 #include "content/public/browser/resource_dispatcher_host.h" 90 #include "content/public/browser/resource_dispatcher_host.h"
89 #include "content/public/browser/service_worker_context.h" 91 #include "content/public/browser/service_worker_context.h"
90 #include "content/public/browser/storage_partition.h" 92 #include "content/public/browser/storage_partition.h"
91 #include "extensions/common/constants.h" 93 #include "extensions/common/constants.h"
92 #include "extensions/common/extension_l10n_util.h" 94 #include "extensions/common/extension_l10n_util.h"
95 #include "google_apis/gaia/identity_provider.h"
93 #include "net/socket/client_socket_pool_manager.h" 96 #include "net/socket/client_socket_pool_manager.h"
94 #include "net/url_request/url_request_context_getter.h" 97 #include "net/url_request/url_request_context_getter.h"
95 #include "ui/base/l10n/l10n_util.h" 98 #include "ui/base/l10n/l10n_util.h"
96 #include "ui/message_center/message_center.h" 99 #include "ui/message_center/message_center.h"
97 100
98 #if defined(ENABLE_CONFIGURATION_POLICY) 101 #if defined(ENABLE_CONFIGURATION_POLICY)
99 #include "components/policy/core/browser/browser_policy_connector.h" 102 #include "components/policy/core/browser/browser_policy_connector.h"
100 #else 103 #else
101 #include "components/policy/core/common/policy_service_stub.h" 104 #include "components/policy/core/common/policy_service_stub.h"
102 #endif // defined(ENABLE_CONFIGURATION_POLICY) 105 #endif // defined(ENABLE_CONFIGURATION_POLICY)
(...skipping 15 matching lines...) Expand all
118 #endif 121 #endif
119 122
120 #if defined(ENABLE_PLUGIN_INSTALLATION) 123 #if defined(ENABLE_PLUGIN_INSTALLATION)
121 #include "chrome/browser/plugins/plugins_resource_service.h" 124 #include "chrome/browser/plugins/plugins_resource_service.h"
122 #endif 125 #endif
123 126
124 #if defined(ENABLE_WEBRTC) 127 #if defined(ENABLE_WEBRTC)
125 #include "chrome/browser/media/webrtc_log_uploader.h" 128 #include "chrome/browser/media/webrtc_log_uploader.h"
126 #endif 129 #endif
127 130
131 #if defined(OS_CHROMEOS)
132 #include "chrome/browser/chromeos/settings/device_identity_provider.h"
133 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h "
134 #elif !defined(OS_ANDROID)
135 #include "google_apis/gaia/dummy_identity_provider.h"
136 #endif
137
138 #if defined(OS_ANDROID)
139 #include "components/gcm_driver/gcm_driver_android.h"
140 #else
141 #include "chrome/browser/services/gcm/gcm_utils.h"
142 #include "components/gcm_driver/gcm_client_factory.h"
143 #endif
144
128 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 145 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
129 // How often to check if the persistent instance of Chrome needs to restart 146 // How often to check if the persistent instance of Chrome needs to restart
130 // to install an update. 147 // to install an update.
131 static const int kUpdateCheckIntervalHours = 6; 148 static const int kUpdateCheckIntervalHours = 6;
132 #endif 149 #endif
133 150
134 #if defined(USE_X11) || defined(OS_WIN) 151 #if defined(USE_X11) || defined(OS_WIN)
135 // How long to wait for the File thread to complete during EndSession, on Linux 152 // How long to wait for the File thread to complete during EndSession, on Linux
136 // and Windows. We have a timeout here because we're unable to run the UI 153 // and Windows. We have a timeout here because we're unable to run the UI
137 // messageloop and there's some deadlock risk. Our only option is to exit 154 // messageloop and there's some deadlock risk. Our only option is to exit
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 272
256 message_center::MessageCenter::Shutdown(); 273 message_center::MessageCenter::Shutdown();
257 274
258 #if defined(ENABLE_CONFIGURATION_POLICY) 275 #if defined(ENABLE_CONFIGURATION_POLICY)
259 // The policy providers managed by |browser_policy_connector_| need to shut 276 // The policy providers managed by |browser_policy_connector_| need to shut
260 // down while the IO and FILE threads are still alive. 277 // down while the IO and FILE threads are still alive.
261 if (browser_policy_connector_) 278 if (browser_policy_connector_)
262 browser_policy_connector_->Shutdown(); 279 browser_policy_connector_->Shutdown();
263 #endif 280 #endif
264 281
282 // The |gcm_driver_| must shut down while the IO thread is still alive.
283 if (gcm_driver_)
284 gcm_driver_->Shutdown();
285
265 // Stop the watchdog thread before stopping other threads. 286 // Stop the watchdog thread before stopping other threads.
266 watchdog_thread_.reset(); 287 watchdog_thread_.reset();
267 288
268 #if defined(USE_AURA) 289 #if defined(USE_AURA)
269 // Delete aura after the metrics service has been deleted as it accesses 290 // Delete aura after the metrics service has been deleted as it accesses
270 // monitor information. 291 // monitor information.
271 aura::Env::DeleteInstance(); 292 aura::Env::DeleteInstance();
272 #endif 293 #endif
273 294
274 platform_part()->StartTearDown(); 295 platform_part()->StartTearDown();
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 656
636 NetworkTimeTracker* BrowserProcessImpl::network_time_tracker() { 657 NetworkTimeTracker* BrowserProcessImpl::network_time_tracker() {
637 if (!network_time_tracker_) { 658 if (!network_time_tracker_) {
638 network_time_tracker_.reset(new NetworkTimeTracker( 659 network_time_tracker_.reset(new NetworkTimeTracker(
639 scoped_ptr<base::TickClock>(new base::DefaultTickClock()), 660 scoped_ptr<base::TickClock>(new base::DefaultTickClock()),
640 local_state())); 661 local_state()));
641 } 662 }
642 return network_time_tracker_.get(); 663 return network_time_tracker_.get();
643 } 664 }
644 665
666 gcm::GCMDriver* BrowserProcessImpl::gcm_driver() {
667 DCHECK(CalledOnValidThread());
668 if (!gcm_driver_)
669 CreateGCMDriver();
670 return gcm_driver_.get();
671 }
672
645 // static 673 // static
646 void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) { 674 void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
647 registry->RegisterBooleanPref(prefs::kDefaultBrowserSettingEnabled, 675 registry->RegisterBooleanPref(prefs::kDefaultBrowserSettingEnabled,
648 false); 676 false);
649 // This policy needs to be defined before the net subsystem is initialized, 677 // This policy needs to be defined before the net subsystem is initialized,
650 // so we do it here. 678 // so we do it here.
651 registry->RegisterIntegerPref(prefs::kMaxConnectionsPerProxy, 679 registry->RegisterIntegerPref(prefs::kMaxConnectionsPerProxy,
652 net::kDefaultMaxSocketsPerProxyServer); 680 net::kDefaultMaxSocketsPerProxyServer);
653 681
654 registry->RegisterBooleanPref(prefs::kAllowCrossOriginAuthPrompt, false); 682 registry->RegisterBooleanPref(prefs::kAllowCrossOriginAuthPrompt, false);
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 DCHECK(safe_browsing_service_.get() == NULL); 1007 DCHECK(safe_browsing_service_.get() == NULL);
980 // Set this flag to true so that we don't retry indefinitely to 1008 // Set this flag to true so that we don't retry indefinitely to
981 // create the service class if there was an error. 1009 // create the service class if there was an error.
982 created_safe_browsing_service_ = true; 1010 created_safe_browsing_service_ = true;
983 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING) 1011 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
984 safe_browsing_service_ = SafeBrowsingService::CreateSafeBrowsingService(); 1012 safe_browsing_service_ = SafeBrowsingService::CreateSafeBrowsingService();
985 safe_browsing_service_->Initialize(); 1013 safe_browsing_service_->Initialize();
986 #endif 1014 #endif
987 } 1015 }
988 1016
1017 void BrowserProcessImpl::CreateGCMDriver() {
1018 DCHECK(!gcm_driver_);
1019
1020 #if defined(OS_ANDROID)
1021 gcm_driver_.reset(new GCMDriverAndroid);
1022 #else
1023 base::FilePath store_path;
jianli 2014/06/03 17:18:42 One more thought to simplify the code here. We cou
bartfab (slow) 2014/06/04 11:00:48 I think it would be be better to not introduce a |
1024 CHECK(PathService::Get(chrome::DIR_GLOBAL_GCM_STORE, &store_path));
1025 gcm_driver_ = gcm::CreateGCMDriverDesktop(
1026 make_scoped_ptr(new gcm::GCMClientFactory),
1027 #if defined(OS_CHROMEOS)
1028 scoped_ptr<IdentityProvider>(new chromeos::DeviceIdentityProvider(
1029 chromeos::DeviceOAuth2TokenServiceFactory::Get())),
1030 #else
1031 scoped_ptr<IdentityProvider>(new DummyIdentityProvider),
1032 #endif // defined(OS_CHROMEOS)
1033 store_path,
1034 system_request_context());
1035 #endif // defined(OS_ANDROID)
1036 }
1037
989 MetricsServicesManager* BrowserProcessImpl::GetMetricsServicesManager() { 1038 MetricsServicesManager* BrowserProcessImpl::GetMetricsServicesManager() {
990 DCHECK(CalledOnValidThread()); 1039 DCHECK(CalledOnValidThread());
991 if (!metrics_services_manager_) 1040 if (!metrics_services_manager_)
992 metrics_services_manager_.reset(new MetricsServicesManager(local_state())); 1041 metrics_services_manager_.reset(new MetricsServicesManager(local_state()));
993 return metrics_services_manager_.get(); 1042 return metrics_services_manager_.get();
994 } 1043 }
995 1044
996 void BrowserProcessImpl::ApplyDefaultBrowserPolicy() { 1045 void BrowserProcessImpl::ApplyDefaultBrowserPolicy() {
997 if (local_state()->GetBoolean(prefs::kDefaultBrowserSettingEnabled)) { 1046 if (local_state()->GetBoolean(prefs::kDefaultBrowserSettingEnabled)) {
998 scoped_refptr<ShellIntegration::DefaultWebClientWorker> 1047 scoped_refptr<ShellIntegration::DefaultWebClientWorker>
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 } 1115 }
1067 1116
1068 void BrowserProcessImpl::OnAutoupdateTimer() { 1117 void BrowserProcessImpl::OnAutoupdateTimer() {
1069 if (CanAutorestartForUpdate()) { 1118 if (CanAutorestartForUpdate()) {
1070 DLOG(WARNING) << "Detected update. Restarting browser."; 1119 DLOG(WARNING) << "Detected update. Restarting browser.";
1071 RestartBackgroundInstance(); 1120 RestartBackgroundInstance();
1072 } 1121 }
1073 } 1122 }
1074 1123
1075 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 1124 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698