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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 } // anonymous namespace | 181 } // anonymous namespace |
182 | 182 |
183 bool ShouldShowActionOnUI( | 183 bool ShouldShowActionOnUI( |
184 const syncer::SyncProtocolError& error) { | 184 const syncer::SyncProtocolError& error) { |
185 return (error.action != syncer::UNKNOWN_ACTION && | 185 return (error.action != syncer::UNKNOWN_ACTION && |
186 error.action != syncer::DISABLE_SYNC_ON_CLIENT && | 186 error.action != syncer::DISABLE_SYNC_ON_CLIENT && |
187 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); | 187 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); |
188 } | 188 } |
189 | 189 |
190 ProfileSyncService::ProfileSyncService( | 190 ProfileSyncService::ProfileSyncService( |
191 ProfileSyncComponentsFactory* factory, | 191 scoped_ptr<ProfileSyncComponentsFactory> factory, |
192 Profile* profile, | 192 Profile* profile, |
193 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, | 193 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, |
194 ProfileOAuth2TokenService* oauth2_token_service, | 194 ProfileOAuth2TokenService* oauth2_token_service, |
195 ProfileSyncServiceStartBehavior start_behavior) | 195 ProfileSyncServiceStartBehavior start_behavior) |
196 : OAuth2TokenService::Consumer("sync"), | 196 : OAuth2TokenService::Consumer("sync"), |
197 last_auth_error_(AuthError::AuthErrorNone()), | 197 last_auth_error_(AuthError::AuthErrorNone()), |
198 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), | 198 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), |
199 factory_(factory), | 199 factory_(factory.Pass()), |
200 profile_(profile), | 200 profile_(profile), |
201 sync_prefs_(profile_->GetPrefs()), | 201 sync_prefs_(profile_->GetPrefs()), |
202 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())), | 202 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())), |
203 is_first_time_sync_configure_(false), | 203 is_first_time_sync_configure_(false), |
204 backend_initialized_(false), | 204 backend_initialized_(false), |
205 sync_disabled_by_admin_(false), | 205 sync_disabled_by_admin_(false), |
206 is_auth_in_progress_(false), | 206 is_auth_in_progress_(false), |
207 signin_(signin_wrapper.Pass()), | 207 signin_(signin_wrapper.Pass()), |
208 unrecoverable_error_reason_(ERROR_REASON_UNSET), | 208 unrecoverable_error_reason_(ERROR_REASON_UNSET), |
209 expect_sync_configuration_aborted_(false), | 209 expect_sync_configuration_aborted_(false), |
(...skipping 26 matching lines...) Expand all Loading... |
236 startup_controller_weak_factory_.GetWeakPtr(), | 236 startup_controller_weak_factory_.GetWeakPtr(), |
237 ROLLBACK)), | 237 ROLLBACK)), |
238 backend_mode_(IDLE), | 238 backend_mode_(IDLE), |
239 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), | 239 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), |
240 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { | 240 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { |
241 DCHECK(profile); | 241 DCHECK(profile); |
242 syncer::SyncableService::StartSyncFlare flare( | 242 syncer::SyncableService::StartSyncFlare flare( |
243 sync_start_util::GetFlareForSyncableService(profile->GetPath())); | 243 sync_start_util::GetFlareForSyncableService(profile->GetPath())); |
244 scoped_ptr<browser_sync::LocalSessionEventRouter> router( | 244 scoped_ptr<browser_sync::LocalSessionEventRouter> router( |
245 new NotificationServiceSessionsRouter(profile, flare)); | 245 new NotificationServiceSessionsRouter(profile, flare)); |
| 246 |
| 247 DCHECK(factory_.get()); |
| 248 local_device_ = factory_->CreateLocalDeviceInfoProvider(); |
246 sessions_sync_manager_.reset( | 249 sessions_sync_manager_.reset( |
247 new SessionsSyncManager(profile, this, router.Pass())); | 250 new SessionsSyncManager(profile, local_device_.get(), router.Pass())); |
248 } | 251 } |
249 | 252 |
250 ProfileSyncService::~ProfileSyncService() { | 253 ProfileSyncService::~ProfileSyncService() { |
251 sync_prefs_.RemoveSyncPrefObserver(this); | 254 sync_prefs_.RemoveSyncPrefObserver(this); |
252 // Shutdown() should have been called before destruction. | 255 // Shutdown() should have been called before destruction. |
253 CHECK(!backend_initialized_); | 256 CHECK(!backend_initialized_); |
254 } | 257 } |
255 | 258 |
256 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { | 259 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { |
257 // Exit if sync is disabled. | 260 // Exit if sync is disabled. |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { | 420 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { |
418 if (!IsSessionsDataTypeControllerRunning()) | 421 if (!IsSessionsDataTypeControllerRunning()) |
419 return NULL; | 422 return NULL; |
420 return sessions_sync_manager_.get(); | 423 return sessions_sync_manager_.get(); |
421 } | 424 } |
422 | 425 |
423 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { | 426 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { |
424 return sessions_sync_manager_->GetFaviconCache(); | 427 return sessions_sync_manager_->GetFaviconCache(); |
425 } | 428 } |
426 | 429 |
427 scoped_ptr<browser_sync::DeviceInfo> | 430 browser_sync::SyncedWindowDelegatesGetter* |
428 ProfileSyncService::GetLocalDeviceInfo() const { | 431 ProfileSyncService::GetSyncedWindowDelegatesGetter() const { |
429 if (HasSyncingBackend()) { | 432 return sessions_sync_manager_->GetSyncedWindowDelegatesGetter(); |
430 browser_sync::SyncedDeviceTracker* device_tracker = | 433 } |
431 backend_->GetSyncedDeviceTracker(); | 434 |
432 if (device_tracker) | 435 browser_sync::LocalDeviceInfoProvider* |
433 return device_tracker->ReadLocalDeviceInfo(); | 436 ProfileSyncService::GetLocalDeviceInfoProvider() { |
434 } | 437 return local_device_.get(); |
435 return scoped_ptr<browser_sync::DeviceInfo>(); | |
436 } | 438 } |
437 | 439 |
438 scoped_ptr<browser_sync::DeviceInfo> | 440 scoped_ptr<browser_sync::DeviceInfo> |
439 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { | 441 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { |
440 if (HasSyncingBackend()) { | 442 if (HasSyncingBackend()) { |
441 browser_sync::SyncedDeviceTracker* device_tracker = | 443 browser_sync::SyncedDeviceTracker* device_tracker = |
442 backend_->GetSyncedDeviceTracker(); | 444 backend_->GetSyncedDeviceTracker(); |
443 if (device_tracker) | 445 if (device_tracker) |
444 return device_tracker->ReadDeviceInfo(client_id); | 446 return device_tracker->ReadDeviceInfo(client_id); |
445 } | 447 } |
446 return scoped_ptr<browser_sync::DeviceInfo>(); | 448 return scoped_ptr<browser_sync::DeviceInfo>(); |
447 } | 449 } |
448 | 450 |
449 ScopedVector<browser_sync::DeviceInfo> | 451 ScopedVector<browser_sync::DeviceInfo> |
450 ProfileSyncService::GetAllSignedInDevices() const { | 452 ProfileSyncService::GetAllSignedInDevices() const { |
451 ScopedVector<browser_sync::DeviceInfo> devices; | 453 ScopedVector<browser_sync::DeviceInfo> devices; |
452 if (HasSyncingBackend()) { | 454 if (HasSyncingBackend()) { |
453 browser_sync::SyncedDeviceTracker* device_tracker = | 455 browser_sync::SyncedDeviceTracker* device_tracker = |
454 backend_->GetSyncedDeviceTracker(); | 456 backend_->GetSyncedDeviceTracker(); |
455 if (device_tracker) { | 457 if (device_tracker) { |
456 // TODO(lipalani) - Make device tracker return a scoped vector. | 458 // TODO(lipalani) - Make device tracker return a scoped vector. |
457 device_tracker->GetAllSyncedDeviceInfo(&devices); | 459 device_tracker->GetAllSyncedDeviceInfo(&devices); |
458 } | 460 } |
459 } | 461 } |
460 return devices.Pass(); | 462 return devices.Pass(); |
461 } | 463 } |
462 | 464 |
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. | 465 // Notifies the observer of any device info changes. |
475 void ProfileSyncService::AddObserverForDeviceInfoChange( | 466 void ProfileSyncService::AddObserverForDeviceInfoChange( |
476 browser_sync::SyncedDeviceTracker::Observer* observer) { | 467 browser_sync::SyncedDeviceTracker::Observer* observer) { |
477 if (HasSyncingBackend()) { | 468 if (HasSyncingBackend()) { |
478 browser_sync::SyncedDeviceTracker* device_tracker = | 469 browser_sync::SyncedDeviceTracker* device_tracker = |
479 backend_->GetSyncedDeviceTracker(); | 470 backend_->GetSyncedDeviceTracker(); |
480 if (device_tracker) { | 471 if (device_tracker) { |
481 device_tracker->AddObserver(observer); | 472 device_tracker->AddObserver(observer); |
482 } | 473 } |
483 } | 474 } |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 DCHECK(FirstSetupInProgress()); | 1063 DCHECK(FirstSetupInProgress()); |
1073 } | 1064 } |
1074 | 1065 |
1075 NotifyObservers(); | 1066 NotifyObservers(); |
1076 } | 1067 } |
1077 | 1068 |
1078 void ProfileSyncService::OnBackendInitialized( | 1069 void ProfileSyncService::OnBackendInitialized( |
1079 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 1070 const syncer::WeakHandle<syncer::JsBackend>& js_backend, |
1080 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 1071 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& |
1081 debug_info_listener, | 1072 debug_info_listener, |
| 1073 const std::string& cache_guid, |
1082 bool success) { | 1074 bool success) { |
1083 UpdateBackendInitUMA(success); | 1075 UpdateBackendInitUMA(success); |
1084 | 1076 |
1085 if (!success) { | 1077 if (!success) { |
1086 // Something went unexpectedly wrong. Play it safe: stop syncing at once | 1078 // Something went unexpectedly wrong. Play it safe: stop syncing at once |
1087 // and surface error UI to alert the user sync has stopped. | 1079 // and surface error UI to alert the user sync has stopped. |
1088 // Keep the directory around for now so that on restart we will retry | 1080 // Keep the directory around for now so that on restart we will retry |
1089 // again and potentially succeed in presence of transient file IO failures | 1081 // again and potentially succeed in presence of transient file IO failures |
1090 // or permissions issues, etc. | 1082 // or permissions issues, etc. |
1091 // | 1083 // |
1092 // TODO(rlarocque): Consider making this UnrecoverableError less special. | 1084 // TODO(rlarocque): Consider making this UnrecoverableError less special. |
1093 // Unlike every other UnrecoverableError, it does not delete our sync data. | 1085 // Unlike every other UnrecoverableError, it does not delete our sync data. |
1094 // This exception made sense at the time it was implemented, but our new | 1086 // This exception made sense at the time it was implemented, but our new |
1095 // directory corruption recovery mechanism makes it obsolete. By the time | 1087 // directory corruption recovery mechanism makes it obsolete. By the time |
1096 // we get here, we will have already tried and failed to delete the | 1088 // we get here, we will have already tried and failed to delete the |
1097 // directory. It would be no big deal if we tried to delete it again. | 1089 // directory. It would be no big deal if we tried to delete it again. |
1098 OnInternalUnrecoverableError(FROM_HERE, | 1090 OnInternalUnrecoverableError(FROM_HERE, |
1099 "BackendInitialize failure", | 1091 "BackendInitialize failure", |
1100 false, | 1092 false, |
1101 ERROR_REASON_BACKEND_INIT_FAILURE); | 1093 ERROR_REASON_BACKEND_INIT_FAILURE); |
1102 return; | 1094 return; |
1103 } | 1095 } |
1104 | 1096 |
1105 backend_initialized_ = true; | 1097 backend_initialized_ = true; |
1106 | 1098 |
1107 sync_js_controller_.AttachJsBackend(js_backend); | 1099 sync_js_controller_.AttachJsBackend(js_backend); |
1108 debug_info_listener_ = debug_info_listener; | 1100 debug_info_listener_ = debug_info_listener; |
1109 | 1101 |
| 1102 // Initialize local device info. |
| 1103 local_device_->Initialize(cache_guid); |
| 1104 |
1110 // Give the DataTypeControllers a handle to the now initialized backend | 1105 // Give the DataTypeControllers a handle to the now initialized backend |
1111 // as a UserShare. | 1106 // as a UserShare. |
1112 for (DataTypeController::TypeMap::iterator it = | 1107 for (DataTypeController::TypeMap::iterator it = |
1113 directory_data_type_controllers_.begin(); | 1108 directory_data_type_controllers_.begin(); |
1114 it != directory_data_type_controllers_.end(); ++it) { | 1109 it != directory_data_type_controllers_.end(); ++it) { |
1115 it->second->OnUserShareReady(GetUserShare()); | 1110 it->second->OnUserShareReady(GetUserShare()); |
1116 } | 1111 } |
1117 | 1112 |
1118 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) | 1113 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) |
1119 ConfigureDataTypeManager(); | 1114 ConfigureDataTypeManager(); |
(...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2648 browser_sync::SyncedDeviceTracker* device_tracker = | 2643 browser_sync::SyncedDeviceTracker* device_tracker = |
2649 backend_->GetSyncedDeviceTracker(); | 2644 backend_->GetSyncedDeviceTracker(); |
2650 if (device_tracker) | 2645 if (device_tracker) |
2651 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_); | 2646 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_); |
2652 } | 2647 } |
2653 } | 2648 } |
2654 | 2649 |
2655 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { | 2650 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { |
2656 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); | 2651 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); |
2657 } | 2652 } |
OLD | NEW |