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

Side by Side Diff: chrome/browser/sync/profile_sync_service.cc

Issue 398423002: Sync: Refactoring of DEVICE_INFO syncable type - Part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed wrong signin_scoped_device_id assert from LocalDeviceInfoProvider. Created 6 years, 5 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
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/sync/profile_sync_service.h" 5 #include "chrome/browser/sync/profile_sync_service.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 20 matching lines...) Expand all
31 #include "chrome/browser/chrome_notification_types.h" 31 #include "chrome/browser/chrome_notification_types.h"
32 #include "chrome/browser/defaults.h" 32 #include "chrome/browser/defaults.h"
33 #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" 33 #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
34 #include "chrome/browser/net/chrome_cookie_notification_details.h" 34 #include "chrome/browser/net/chrome_cookie_notification_details.h"
35 #include "chrome/browser/prefs/chrome_pref_service_factory.h" 35 #include "chrome/browser/prefs/chrome_pref_service_factory.h"
36 #include "chrome/browser/prefs/pref_service_syncable.h" 36 #include "chrome/browser/prefs/pref_service_syncable.h"
37 #include "chrome/browser/profiles/profile.h" 37 #include "chrome/browser/profiles/profile.h"
38 #include "chrome/browser/services/gcm/gcm_profile_service.h" 38 #include "chrome/browser/services/gcm/gcm_profile_service.h"
39 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" 39 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
40 #include "chrome/browser/signin/about_signin_internals_factory.h" 40 #include "chrome/browser/signin/about_signin_internals_factory.h"
41 #include "chrome/browser/signin/chrome_signin_client_factory.h"
41 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 42 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
42 #include "chrome/browser/signin/signin_manager_factory.h" 43 #include "chrome/browser/signin/signin_manager_factory.h"
43 #include "chrome/browser/sync/backend_migrator.h" 44 #include "chrome/browser/sync/backend_migrator.h"
44 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h" 45 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
45 #include "chrome/browser/sync/glue/device_info.h" 46 #include "chrome/browser/sync/glue/device_info.h"
46 #include "chrome/browser/sync/glue/favicon_cache.h" 47 #include "chrome/browser/sync/glue/favicon_cache.h"
47 #include "chrome/browser/sync/glue/sync_backend_host.h" 48 #include "chrome/browser/sync/glue/sync_backend_host.h"
48 #include "chrome/browser/sync/glue/sync_backend_host_impl.h" 49 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
49 #include "chrome/browser/sync/glue/sync_start_util.h" 50 #include "chrome/browser/sync/glue/sync_start_util.h"
50 #include "chrome/browser/sync/glue/synced_device_tracker.h" 51 #include "chrome/browser/sync/glue/synced_device_tracker.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } // anonymous namespace 182 } // anonymous namespace
182 183
183 bool ShouldShowActionOnUI( 184 bool ShouldShowActionOnUI(
184 const syncer::SyncProtocolError& error) { 185 const syncer::SyncProtocolError& error) {
185 return (error.action != syncer::UNKNOWN_ACTION && 186 return (error.action != syncer::UNKNOWN_ACTION &&
186 error.action != syncer::DISABLE_SYNC_ON_CLIENT && 187 error.action != syncer::DISABLE_SYNC_ON_CLIENT &&
187 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); 188 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT);
188 } 189 }
189 190
190 ProfileSyncService::ProfileSyncService( 191 ProfileSyncService::ProfileSyncService(
191 ProfileSyncComponentsFactory* factory, 192 scoped_ptr<ProfileSyncComponentsFactory> factory,
192 Profile* profile, 193 Profile* profile,
193 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, 194 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper,
194 ProfileOAuth2TokenService* oauth2_token_service, 195 ProfileOAuth2TokenService* oauth2_token_service,
195 ProfileSyncServiceStartBehavior start_behavior) 196 ProfileSyncServiceStartBehavior start_behavior)
196 : OAuth2TokenService::Consumer("sync"), 197 : OAuth2TokenService::Consumer("sync"),
197 last_auth_error_(AuthError::AuthErrorNone()), 198 last_auth_error_(AuthError::AuthErrorNone()),
198 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 199 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
199 factory_(factory), 200 factory_(factory.Pass()),
200 profile_(profile), 201 profile_(profile),
201 sync_prefs_(profile_->GetPrefs()), 202 sync_prefs_(profile_->GetPrefs()),
202 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())), 203 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())),
203 is_first_time_sync_configure_(false), 204 is_first_time_sync_configure_(false),
204 backend_initialized_(false), 205 backend_initialized_(false),
205 sync_disabled_by_admin_(false), 206 sync_disabled_by_admin_(false),
206 is_auth_in_progress_(false), 207 is_auth_in_progress_(false),
207 signin_(signin_wrapper.Pass()), 208 signin_(signin_wrapper.Pass()),
208 unrecoverable_error_reason_(ERROR_REASON_UNSET), 209 unrecoverable_error_reason_(ERROR_REASON_UNSET),
209 expect_sync_configuration_aborted_(false), 210 expect_sync_configuration_aborted_(false),
(...skipping 26 matching lines...) Expand all
236 startup_controller_weak_factory_.GetWeakPtr(), 237 startup_controller_weak_factory_.GetWeakPtr(),
237 ROLLBACK)), 238 ROLLBACK)),
238 backend_mode_(IDLE), 239 backend_mode_(IDLE),
239 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), 240 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)),
240 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { 241 clear_browsing_data_(base::Bind(&ClearBrowsingData)) {
241 DCHECK(profile); 242 DCHECK(profile);
242 syncer::SyncableService::StartSyncFlare flare( 243 syncer::SyncableService::StartSyncFlare flare(
243 sync_start_util::GetFlareForSyncableService(profile->GetPath())); 244 sync_start_util::GetFlareForSyncableService(profile->GetPath()));
244 scoped_ptr<browser_sync::LocalSessionEventRouter> router( 245 scoped_ptr<browser_sync::LocalSessionEventRouter> router(
245 new NotificationServiceSessionsRouter(profile, flare)); 246 new NotificationServiceSessionsRouter(profile, flare));
247
248 DCHECK(factory_.get());
249 local_device_ = factory_->CreateLocalDeviceInfoProvider();
246 sessions_sync_manager_.reset( 250 sessions_sync_manager_.reset(
247 new SessionsSyncManager(profile, this, router.Pass())); 251 new SessionsSyncManager(profile, local_device_.get(), router.Pass()));
248 } 252 }
249 253
250 ProfileSyncService::~ProfileSyncService() { 254 ProfileSyncService::~ProfileSyncService() {
251 sync_prefs_.RemoveSyncPrefObserver(this); 255 sync_prefs_.RemoveSyncPrefObserver(this);
252 // Shutdown() should have been called before destruction. 256 // Shutdown() should have been called before destruction.
253 CHECK(!backend_initialized_); 257 CHECK(!backend_initialized_);
254 } 258 }
255 259
256 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { 260 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() {
257 // Exit if sync is disabled. 261 // Exit if sync is disabled.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { 421 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() {
418 if (!IsSessionsDataTypeControllerRunning()) 422 if (!IsSessionsDataTypeControllerRunning())
419 return NULL; 423 return NULL;
420 return sessions_sync_manager_.get(); 424 return sessions_sync_manager_.get();
421 } 425 }
422 426
423 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { 427 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() {
424 return sessions_sync_manager_->GetFaviconCache(); 428 return sessions_sync_manager_->GetFaviconCache();
425 } 429 }
426 430
427 scoped_ptr<browser_sync::DeviceInfo> 431 browser_sync::SyncedWindowDelegatesGetter*
428 ProfileSyncService::GetLocalDeviceInfo() const { 432 ProfileSyncService::GetSyncedWindowDelegatesGetter() const {
429 if (HasSyncingBackend()) { 433 return sessions_sync_manager_->GetSyncedWindowDelegatesGetter();
430 browser_sync::SyncedDeviceTracker* device_tracker = 434 }
431 backend_->GetSyncedDeviceTracker(); 435
432 if (device_tracker) 436 browser_sync::LocalDeviceInfoProvider*
433 return device_tracker->ReadLocalDeviceInfo(); 437 ProfileSyncService::GetLocalDeviceInfoProvider() {
434 } 438 return local_device_.get();
435 return scoped_ptr<browser_sync::DeviceInfo>();
436 } 439 }
437 440
438 scoped_ptr<browser_sync::DeviceInfo> 441 scoped_ptr<browser_sync::DeviceInfo>
439 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { 442 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const {
440 if (HasSyncingBackend()) { 443 if (HasSyncingBackend()) {
441 browser_sync::SyncedDeviceTracker* device_tracker = 444 browser_sync::SyncedDeviceTracker* device_tracker =
442 backend_->GetSyncedDeviceTracker(); 445 backend_->GetSyncedDeviceTracker();
443 if (device_tracker) 446 if (device_tracker)
444 return device_tracker->ReadDeviceInfo(client_id); 447 return device_tracker->ReadDeviceInfo(client_id);
445 } 448 }
446 return scoped_ptr<browser_sync::DeviceInfo>(); 449 return scoped_ptr<browser_sync::DeviceInfo>();
447 } 450 }
448 451
449 ScopedVector<browser_sync::DeviceInfo> 452 ScopedVector<browser_sync::DeviceInfo>
450 ProfileSyncService::GetAllSignedInDevices() const { 453 ProfileSyncService::GetAllSignedInDevices() const {
451 ScopedVector<browser_sync::DeviceInfo> devices; 454 ScopedVector<browser_sync::DeviceInfo> devices;
452 if (HasSyncingBackend()) { 455 if (HasSyncingBackend()) {
453 browser_sync::SyncedDeviceTracker* device_tracker = 456 browser_sync::SyncedDeviceTracker* device_tracker =
454 backend_->GetSyncedDeviceTracker(); 457 backend_->GetSyncedDeviceTracker();
455 if (device_tracker) { 458 if (device_tracker) {
456 // TODO(lipalani) - Make device tracker return a scoped vector. 459 // TODO(lipalani) - Make device tracker return a scoped vector.
457 device_tracker->GetAllSyncedDeviceInfo(&devices); 460 device_tracker->GetAllSyncedDeviceInfo(&devices);
458 } 461 }
459 } 462 }
460 return devices.Pass(); 463 return devices.Pass();
461 } 464 }
462 465
463 std::string ProfileSyncService::GetLocalSyncCacheGUID() const {
464 if (HasSyncingBackend()) {
465 browser_sync::SyncedDeviceTracker* device_tracker =
466 backend_->GetSyncedDeviceTracker();
467 if (device_tracker) {
468 return device_tracker->cache_guid();
469 }
470 }
471 return std::string();
472 }
473
474 // Notifies the observer of any device info changes. 466 // Notifies the observer of any device info changes.
475 void ProfileSyncService::AddObserverForDeviceInfoChange( 467 void ProfileSyncService::AddObserverForDeviceInfoChange(
476 browser_sync::SyncedDeviceTracker::Observer* observer) { 468 browser_sync::SyncedDeviceTracker::Observer* observer) {
477 if (HasSyncingBackend()) { 469 if (HasSyncingBackend()) {
478 browser_sync::SyncedDeviceTracker* device_tracker = 470 browser_sync::SyncedDeviceTracker* device_tracker =
479 backend_->GetSyncedDeviceTracker(); 471 backend_->GetSyncedDeviceTracker();
480 if (device_tracker) { 472 if (device_tracker) {
481 device_tracker->AddObserver(observer); 473 device_tracker->AddObserver(observer);
482 } 474 }
483 } 475 }
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 DCHECK(FirstSetupInProgress()); 1056 DCHECK(FirstSetupInProgress());
1065 } 1057 }
1066 1058
1067 NotifyObservers(); 1059 NotifyObservers();
1068 } 1060 }
1069 1061
1070 void ProfileSyncService::OnBackendInitialized( 1062 void ProfileSyncService::OnBackendInitialized(
1071 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 1063 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
1072 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 1064 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
1073 debug_info_listener, 1065 debug_info_listener,
1066 const std::string& cache_guid,
1074 bool success) { 1067 bool success) {
1075 UpdateBackendInitUMA(success); 1068 UpdateBackendInitUMA(success);
1076 1069
1077 if (!success) { 1070 if (!success) {
1078 // Something went unexpectedly wrong. Play it safe: stop syncing at once 1071 // Something went unexpectedly wrong. Play it safe: stop syncing at once
1079 // and surface error UI to alert the user sync has stopped. 1072 // and surface error UI to alert the user sync has stopped.
1080 // Keep the directory around for now so that on restart we will retry 1073 // Keep the directory around for now so that on restart we will retry
1081 // again and potentially succeed in presence of transient file IO failures 1074 // again and potentially succeed in presence of transient file IO failures
1082 // or permissions issues, etc. 1075 // or permissions issues, etc.
1083 // 1076 //
1084 // TODO(rlarocque): Consider making this UnrecoverableError less special. 1077 // TODO(rlarocque): Consider making this UnrecoverableError less special.
1085 // Unlike every other UnrecoverableError, it does not delete our sync data. 1078 // Unlike every other UnrecoverableError, it does not delete our sync data.
1086 // This exception made sense at the time it was implemented, but our new 1079 // This exception made sense at the time it was implemented, but our new
1087 // directory corruption recovery mechanism makes it obsolete. By the time 1080 // directory corruption recovery mechanism makes it obsolete. By the time
1088 // we get here, we will have already tried and failed to delete the 1081 // we get here, we will have already tried and failed to delete the
1089 // directory. It would be no big deal if we tried to delete it again. 1082 // directory. It would be no big deal if we tried to delete it again.
1090 OnInternalUnrecoverableError(FROM_HERE, 1083 OnInternalUnrecoverableError(FROM_HERE,
1091 "BackendInitialize failure", 1084 "BackendInitialize failure",
1092 false, 1085 false,
1093 ERROR_REASON_BACKEND_INIT_FAILURE); 1086 ERROR_REASON_BACKEND_INIT_FAILURE);
1094 return; 1087 return;
1095 } 1088 }
1096 1089
1097 backend_initialized_ = true; 1090 backend_initialized_ = true;
1098 1091
1099 sync_js_controller_.AttachJsBackend(js_backend); 1092 sync_js_controller_.AttachJsBackend(js_backend);
1100 debug_info_listener_ = debug_info_listener; 1093 debug_info_listener_ = debug_info_listener;
1101 1094
1095 SigninClient* signin_client =
1096 ChromeSigninClientFactory::GetForProfile(profile_);
1097 DCHECK(signin_client);
1098 std::string signin_scoped_device_id =
1099 signin_client->GetSigninScopedDeviceId();
1100
1101 // Initialize local device info.
1102 local_device_->Initialize(cache_guid, signin_scoped_device_id);
1103
1102 // Give the DataTypeControllers a handle to the now initialized backend 1104 // Give the DataTypeControllers a handle to the now initialized backend
1103 // as a UserShare. 1105 // as a UserShare.
1104 for (DataTypeController::TypeMap::iterator it = 1106 for (DataTypeController::TypeMap::iterator it =
1105 directory_data_type_controllers_.begin(); 1107 directory_data_type_controllers_.begin();
1106 it != directory_data_type_controllers_.end(); ++it) { 1108 it != directory_data_type_controllers_.end(); ++it) {
1107 it->second->OnUserShareReady(GetUserShare()); 1109 it->second->OnUserShareReady(GetUserShare());
1108 } 1110 }
1109 1111
1110 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) 1112 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK)
1111 ConfigureDataTypeManager(); 1113 ConfigureDataTypeManager();
(...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after
2658 browser_sync::SyncedDeviceTracker* device_tracker = 2660 browser_sync::SyncedDeviceTracker* device_tracker =
2659 backend_->GetSyncedDeviceTracker(); 2661 backend_->GetSyncedDeviceTracker();
2660 if (device_tracker) 2662 if (device_tracker)
2661 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_); 2663 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_);
2662 } 2664 }
2663 } 2665 }
2664 2666
2665 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { 2667 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const {
2666 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); 2668 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime();
2667 } 2669 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698