| OLD | NEW |
| 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 startup_controller_weak_factory_.GetWeakPtr(), | 233 startup_controller_weak_factory_.GetWeakPtr(), |
| 234 ROLLBACK)), | 234 ROLLBACK)), |
| 235 backend_mode_(IDLE), | 235 backend_mode_(IDLE), |
| 236 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), | 236 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), |
| 237 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { | 237 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { |
| 238 DCHECK(profile); | 238 DCHECK(profile); |
| 239 syncer::SyncableService::StartSyncFlare flare( | 239 syncer::SyncableService::StartSyncFlare flare( |
| 240 sync_start_util::GetFlareForSyncableService(profile->GetPath())); | 240 sync_start_util::GetFlareForSyncableService(profile->GetPath())); |
| 241 scoped_ptr<browser_sync::LocalSessionEventRouter> router( | 241 scoped_ptr<browser_sync::LocalSessionEventRouter> router( |
| 242 new NotificationServiceSessionsRouter(profile, flare)); | 242 new NotificationServiceSessionsRouter(profile, flare)); |
| 243 |
| 244 local_device_.reset(factory->CreateLocalDeviceInfoProvider()); |
| 243 sessions_sync_manager_.reset( | 245 sessions_sync_manager_.reset( |
| 244 new SessionsSyncManager(profile, this, router.Pass())); | 246 new SessionsSyncManager(profile, local_device_.get(), router.Pass())); |
| 245 } | 247 } |
| 246 | 248 |
| 247 ProfileSyncService::~ProfileSyncService() { | 249 ProfileSyncService::~ProfileSyncService() { |
| 248 sync_prefs_.RemoveSyncPrefObserver(this); | 250 sync_prefs_.RemoveSyncPrefObserver(this); |
| 249 // Shutdown() should have been called before destruction. | 251 // Shutdown() should have been called before destruction. |
| 250 CHECK(!backend_initialized_); | 252 CHECK(!backend_initialized_); |
| 251 } | 253 } |
| 252 | 254 |
| 253 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { | 255 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { |
| 254 // Exit if sync is disabled. | 256 // Exit if sync is disabled. |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { | 416 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { |
| 415 if (!IsSessionsDataTypeControllerRunning()) | 417 if (!IsSessionsDataTypeControllerRunning()) |
| 416 return NULL; | 418 return NULL; |
| 417 return sessions_sync_manager_.get(); | 419 return sessions_sync_manager_.get(); |
| 418 } | 420 } |
| 419 | 421 |
| 420 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { | 422 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { |
| 421 return sessions_sync_manager_->GetFaviconCache(); | 423 return sessions_sync_manager_->GetFaviconCache(); |
| 422 } | 424 } |
| 423 | 425 |
| 424 scoped_ptr<browser_sync::DeviceInfo> | 426 browser_sync::SyncedWindowDelegatesGetter* |
| 425 ProfileSyncService::GetLocalDeviceInfo() const { | 427 ProfileSyncService::GetSyncedWindowDelegatesGetter() const { |
| 426 if (HasSyncingBackend()) { | 428 return sessions_sync_manager_->GetSyncedWindowDelegatesGetter(); |
| 427 browser_sync::SyncedDeviceTracker* device_tracker = | 429 } |
| 428 backend_->GetSyncedDeviceTracker(); | 430 |
| 429 if (device_tracker) | 431 browser_sync::LocalDeviceInfoProvider* |
| 430 return device_tracker->ReadLocalDeviceInfo(); | 432 ProfileSyncService::GetLocalDeviceInfoProvider() { |
| 431 } | 433 return local_device_.get(); |
| 432 return scoped_ptr<browser_sync::DeviceInfo>(); | |
| 433 } | 434 } |
| 434 | 435 |
| 435 scoped_ptr<browser_sync::DeviceInfo> | 436 scoped_ptr<browser_sync::DeviceInfo> |
| 436 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { | 437 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { |
| 437 if (HasSyncingBackend()) { | 438 if (HasSyncingBackend()) { |
| 438 browser_sync::SyncedDeviceTracker* device_tracker = | 439 browser_sync::SyncedDeviceTracker* device_tracker = |
| 439 backend_->GetSyncedDeviceTracker(); | 440 backend_->GetSyncedDeviceTracker(); |
| 440 if (device_tracker) | 441 if (device_tracker) |
| 441 return device_tracker->ReadDeviceInfo(client_id); | 442 return device_tracker->ReadDeviceInfo(client_id); |
| 442 } | 443 } |
| 443 return scoped_ptr<browser_sync::DeviceInfo>(); | 444 return scoped_ptr<browser_sync::DeviceInfo>(); |
| 444 } | 445 } |
| 445 | 446 |
| 446 ScopedVector<browser_sync::DeviceInfo> | 447 ScopedVector<browser_sync::DeviceInfo> |
| 447 ProfileSyncService::GetAllSignedInDevices() const { | 448 ProfileSyncService::GetAllSignedInDevices() const { |
| 448 ScopedVector<browser_sync::DeviceInfo> devices; | 449 ScopedVector<browser_sync::DeviceInfo> devices; |
| 449 if (HasSyncingBackend()) { | 450 if (HasSyncingBackend()) { |
| 450 browser_sync::SyncedDeviceTracker* device_tracker = | 451 browser_sync::SyncedDeviceTracker* device_tracker = |
| 451 backend_->GetSyncedDeviceTracker(); | 452 backend_->GetSyncedDeviceTracker(); |
| 452 if (device_tracker) { | 453 if (device_tracker) { |
| 453 // TODO(lipalani) - Make device tracker return a scoped vector. | 454 // TODO(lipalani) - Make device tracker return a scoped vector. |
| 454 device_tracker->GetAllSyncedDeviceInfo(&devices); | 455 device_tracker->GetAllSyncedDeviceInfo(&devices); |
| 455 } | 456 } |
| 456 } | 457 } |
| 457 return devices.Pass(); | 458 return devices.Pass(); |
| 458 } | 459 } |
| 459 | 460 |
| 460 std::string ProfileSyncService::GetLocalSyncCacheGUID() const { | |
| 461 if (HasSyncingBackend()) { | |
| 462 browser_sync::SyncedDeviceTracker* device_tracker = | |
| 463 backend_->GetSyncedDeviceTracker(); | |
| 464 if (device_tracker) { | |
| 465 return device_tracker->cache_guid(); | |
| 466 } | |
| 467 } | |
| 468 return std::string(); | |
| 469 } | |
| 470 | |
| 471 // Notifies the observer of any device info changes. | 461 // Notifies the observer of any device info changes. |
| 472 void ProfileSyncService::AddObserverForDeviceInfoChange( | 462 void ProfileSyncService::AddObserverForDeviceInfoChange( |
| 473 browser_sync::SyncedDeviceTracker::Observer* observer) { | 463 browser_sync::SyncedDeviceTracker::Observer* observer) { |
| 474 if (HasSyncingBackend()) { | 464 if (HasSyncingBackend()) { |
| 475 browser_sync::SyncedDeviceTracker* device_tracker = | 465 browser_sync::SyncedDeviceTracker* device_tracker = |
| 476 backend_->GetSyncedDeviceTracker(); | 466 backend_->GetSyncedDeviceTracker(); |
| 477 if (device_tracker) { | 467 if (device_tracker) { |
| 478 device_tracker->AddObserver(observer); | 468 device_tracker->AddObserver(observer); |
| 479 } | 469 } |
| 480 } | 470 } |
| (...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 DCHECK(FirstSetupInProgress()); | 1041 DCHECK(FirstSetupInProgress()); |
| 1052 } | 1042 } |
| 1053 | 1043 |
| 1054 NotifyObservers(); | 1044 NotifyObservers(); |
| 1055 } | 1045 } |
| 1056 | 1046 |
| 1057 void ProfileSyncService::OnBackendInitialized( | 1047 void ProfileSyncService::OnBackendInitialized( |
| 1058 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 1048 const syncer::WeakHandle<syncer::JsBackend>& js_backend, |
| 1059 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 1049 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& |
| 1060 debug_info_listener, | 1050 debug_info_listener, |
| 1051 const std::string& cache_guid, |
| 1061 bool success) { | 1052 bool success) { |
| 1062 UpdateBackendInitUMA(success); | 1053 UpdateBackendInitUMA(success); |
| 1063 | 1054 |
| 1064 if (!success) { | 1055 if (!success) { |
| 1065 // Something went unexpectedly wrong. Play it safe: stop syncing at once | 1056 // Something went unexpectedly wrong. Play it safe: stop syncing at once |
| 1066 // and surface error UI to alert the user sync has stopped. | 1057 // and surface error UI to alert the user sync has stopped. |
| 1067 // Keep the directory around for now so that on restart we will retry | 1058 // Keep the directory around for now so that on restart we will retry |
| 1068 // again and potentially succeed in presence of transient file IO failures | 1059 // again and potentially succeed in presence of transient file IO failures |
| 1069 // or permissions issues, etc. | 1060 // or permissions issues, etc. |
| 1070 // | 1061 // |
| 1071 // TODO(rlarocque): Consider making this UnrecoverableError less special. | 1062 // TODO(rlarocque): Consider making this UnrecoverableError less special. |
| 1072 // Unlike every other UnrecoverableError, it does not delete our sync data. | 1063 // Unlike every other UnrecoverableError, it does not delete our sync data. |
| 1073 // This exception made sense at the time it was implemented, but our new | 1064 // This exception made sense at the time it was implemented, but our new |
| 1074 // directory corruption recovery mechanism makes it obsolete. By the time | 1065 // directory corruption recovery mechanism makes it obsolete. By the time |
| 1075 // we get here, we will have already tried and failed to delete the | 1066 // we get here, we will have already tried and failed to delete the |
| 1076 // directory. It would be no big deal if we tried to delete it again. | 1067 // directory. It would be no big deal if we tried to delete it again. |
| 1077 OnInternalUnrecoverableError(FROM_HERE, | 1068 OnInternalUnrecoverableError(FROM_HERE, |
| 1078 "BackendInitialize failure", | 1069 "BackendInitialize failure", |
| 1079 false, | 1070 false, |
| 1080 ERROR_REASON_BACKEND_INIT_FAILURE); | 1071 ERROR_REASON_BACKEND_INIT_FAILURE); |
| 1081 return; | 1072 return; |
| 1082 } | 1073 } |
| 1083 | 1074 |
| 1084 backend_initialized_ = true; | 1075 backend_initialized_ = true; |
| 1085 | 1076 |
| 1086 sync_js_controller_.AttachJsBackend(js_backend); | 1077 sync_js_controller_.AttachJsBackend(js_backend); |
| 1087 debug_info_listener_ = debug_info_listener; | 1078 debug_info_listener_ = debug_info_listener; |
| 1088 | 1079 |
| 1080 // Initialize local device info. |
| 1081 local_device_->Initialize(cache_guid); |
| 1082 |
| 1089 // Give the DataTypeControllers a handle to the now initialized backend | 1083 // Give the DataTypeControllers a handle to the now initialized backend |
| 1090 // as a UserShare. | 1084 // as a UserShare. |
| 1091 for (DataTypeController::TypeMap::iterator it = | 1085 for (DataTypeController::TypeMap::iterator it = |
| 1092 directory_data_type_controllers_.begin(); | 1086 directory_data_type_controllers_.begin(); |
| 1093 it != directory_data_type_controllers_.end(); ++it) { | 1087 it != directory_data_type_controllers_.end(); ++it) { |
| 1094 it->second->OnUserShareReady(GetUserShare()); | 1088 it->second->OnUserShareReady(GetUserShare()); |
| 1095 } | 1089 } |
| 1096 | 1090 |
| 1097 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) | 1091 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) |
| 1098 ConfigureDataTypeManager(); | 1092 ConfigureDataTypeManager(); |
| (...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2580 } | 2574 } |
| 2581 return result; | 2575 return result; |
| 2582 } | 2576 } |
| 2583 | 2577 |
| 2584 void ProfileSyncService::StartStopBackupForTesting() { | 2578 void ProfileSyncService::StartStopBackupForTesting() { |
| 2585 if (backend_mode_ == BACKUP) | 2579 if (backend_mode_ == BACKUP) |
| 2586 ShutdownImpl(browser_sync::SyncBackendHost::STOP_AND_CLAIM_THREAD); | 2580 ShutdownImpl(browser_sync::SyncBackendHost::STOP_AND_CLAIM_THREAD); |
| 2587 else | 2581 else |
| 2588 backup_rollback_controller_.Start(base::TimeDelta()); | 2582 backup_rollback_controller_.Start(base::TimeDelta()); |
| 2589 } | 2583 } |
| OLD | NEW |