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