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 <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 | 304 |
305 RegisterAuthNotifications(); | 305 RegisterAuthNotifications(); |
306 | 306 |
307 if (!HasSyncSetupCompleted() || signin_->GetEffectiveUsername().empty()) { | 307 if (!HasSyncSetupCompleted() || signin_->GetEffectiveUsername().empty()) { |
308 // Clean up in case of previous crash / setup abort / signout. | 308 // Clean up in case of previous crash / setup abort / signout. |
309 DisableForUser(); | 309 DisableForUser(); |
310 } | 310 } |
311 | 311 |
312 TrySyncDatatypePrefRecovery(); | 312 TrySyncDatatypePrefRecovery(); |
313 | 313 |
314 last_synced_time_ = sync_prefs_.GetLastSyncedTime(); | |
315 | |
316 #if defined(OS_CHROMEOS) | 314 #if defined(OS_CHROMEOS) |
317 std::string bootstrap_token = sync_prefs_.GetEncryptionBootstrapToken(); | 315 std::string bootstrap_token = sync_prefs_.GetEncryptionBootstrapToken(); |
318 if (bootstrap_token.empty()) { | 316 if (bootstrap_token.empty()) { |
319 sync_prefs_.SetEncryptionBootstrapToken( | 317 sync_prefs_.SetEncryptionBootstrapToken( |
320 sync_prefs_.GetSpareBootstrapToken()); | 318 sync_prefs_.GetSpareBootstrapToken()); |
321 } | 319 } |
322 #endif | 320 #endif |
323 | 321 |
324 #if !defined(OS_ANDROID) | 322 #if !defined(OS_ANDROID) |
325 DCHECK(sync_error_controller_ == NULL) | 323 DCHECK(sync_error_controller_ == NULL) |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 | 895 |
898 bool ProfileSyncService::HasSyncSetupCompleted() const { | 896 bool ProfileSyncService::HasSyncSetupCompleted() const { |
899 return sync_prefs_.HasSyncSetupCompleted(); | 897 return sync_prefs_.HasSyncSetupCompleted(); |
900 } | 898 } |
901 | 899 |
902 void ProfileSyncService::SetSyncSetupCompleted() { | 900 void ProfileSyncService::SetSyncSetupCompleted() { |
903 sync_prefs_.SetSyncSetupCompleted(); | 901 sync_prefs_.SetSyncSetupCompleted(); |
904 } | 902 } |
905 | 903 |
906 void ProfileSyncService::UpdateLastSyncedTime() { | 904 void ProfileSyncService::UpdateLastSyncedTime() { |
907 last_synced_time_ = base::Time::Now(); | 905 sync_prefs_.SetLastSyncedTime(base::Time::Now()); |
908 sync_prefs_.SetLastSyncedTime(last_synced_time_); | |
909 } | 906 } |
910 | 907 |
911 void ProfileSyncService::NotifyObservers() { | 908 void ProfileSyncService::NotifyObservers() { |
912 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, | 909 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, |
913 OnStateChanged()); | 910 OnStateChanged()); |
914 } | 911 } |
915 | 912 |
916 void ProfileSyncService::NotifySyncCycleCompleted() { | 913 void ProfileSyncService::NotifySyncCycleCompleted() { |
917 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, | 914 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, |
918 OnSyncCycleCompleted()); | 915 OnSyncCycleCompleted()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 if (type_debug_info_observers_.might_have_observers()) { | 1018 if (type_debug_info_observers_.might_have_observers()) { |
1022 backend_->EnableDirectoryTypeDebugInfoForwarding(); | 1019 backend_->EnableDirectoryTypeDebugInfoForwarding(); |
1023 } | 1020 } |
1024 | 1021 |
1025 // If we have a cached passphrase use it to decrypt/encrypt data now that the | 1022 // If we have a cached passphrase use it to decrypt/encrypt data now that the |
1026 // backend is initialized. We want to call this before notifying observers in | 1023 // backend is initialized. We want to call this before notifying observers in |
1027 // case this operation affects the "passphrase required" status. | 1024 // case this operation affects the "passphrase required" status. |
1028 ConsumeCachedPassphraseIfPossible(); | 1025 ConsumeCachedPassphraseIfPossible(); |
1029 | 1026 |
1030 // The very first time the backend initializes is effectively the first time | 1027 // The very first time the backend initializes is effectively the first time |
1031 // we can say we successfully "synced". last_synced_time_ will only be null | 1028 // we can say we successfully "synced". LastSyncedTime will only be null in |
1032 // in this case, because the pref wasn't restored on StartUp. | 1029 // this case, because the pref wasn't restored on StartUp. |
1033 if (last_synced_time_.is_null()) { | 1030 if (sync_prefs_.GetLastSyncedTime().is_null()) { |
1034 UpdateLastSyncedTime(); | 1031 UpdateLastSyncedTime(); |
1035 } | 1032 } |
1036 | 1033 |
1037 if (startup_controller_.auto_start_enabled() && !FirstSetupInProgress()) { | 1034 if (startup_controller_.auto_start_enabled() && !FirstSetupInProgress()) { |
1038 // Backend is initialized but we're not in sync setup, so this must be an | 1035 // Backend is initialized but we're not in sync setup, so this must be an |
1039 // autostart - mark our sync setup as completed and we'll start syncing | 1036 // autostart - mark our sync setup as completed and we'll start syncing |
1040 // below. | 1037 // below. |
1041 SetSyncSetupCompleted(); | 1038 SetSyncSetupCompleted(); |
1042 } | 1039 } |
1043 | 1040 |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1700 } | 1697 } |
1701 | 1698 |
1702 bool ProfileSyncService::IsPassphraseRequiredForDecryption() const { | 1699 bool ProfileSyncService::IsPassphraseRequiredForDecryption() const { |
1703 // If there is an encrypted datatype enabled and we don't have the proper | 1700 // If there is an encrypted datatype enabled and we don't have the proper |
1704 // passphrase, we must prompt the user for a passphrase. The only way for the | 1701 // passphrase, we must prompt the user for a passphrase. The only way for the |
1705 // user to avoid entering their passphrase is to disable the encrypted types. | 1702 // user to avoid entering their passphrase is to disable the encrypted types. |
1706 return IsEncryptedDatatypeEnabled() && IsPassphraseRequired(); | 1703 return IsEncryptedDatatypeEnabled() && IsPassphraseRequired(); |
1707 } | 1704 } |
1708 | 1705 |
1709 base::string16 ProfileSyncService::GetLastSyncedTimeString() const { | 1706 base::string16 ProfileSyncService::GetLastSyncedTimeString() const { |
1710 if (last_synced_time_.is_null()) | 1707 const base::Time last_synced_time = sync_prefs_.GetLastSyncedTime(); |
| 1708 if (last_synced_time.is_null()) |
1711 return l10n_util::GetStringUTF16(IDS_SYNC_TIME_NEVER); | 1709 return l10n_util::GetStringUTF16(IDS_SYNC_TIME_NEVER); |
1712 | 1710 |
1713 base::TimeDelta last_synced = base::Time::Now() - last_synced_time_; | 1711 base::TimeDelta time_since_last_sync = base::Time::Now() - last_synced_time; |
1714 | 1712 |
1715 if (last_synced < base::TimeDelta::FromMinutes(1)) | 1713 if (time_since_last_sync < base::TimeDelta::FromMinutes(1)) |
1716 return l10n_util::GetStringUTF16(IDS_SYNC_TIME_JUST_NOW); | 1714 return l10n_util::GetStringUTF16(IDS_SYNC_TIME_JUST_NOW); |
1717 | 1715 |
1718 return ui::TimeFormat::Simple(ui::TimeFormat::FORMAT_ELAPSED, | 1716 return ui::TimeFormat::Simple(ui::TimeFormat::FORMAT_ELAPSED, |
1719 ui::TimeFormat::LENGTH_SHORT, last_synced); | 1717 ui::TimeFormat::LENGTH_SHORT, |
| 1718 time_since_last_sync); |
1720 } | 1719 } |
1721 | 1720 |
1722 void ProfileSyncService::UpdateSelectedTypesHistogram( | 1721 void ProfileSyncService::UpdateSelectedTypesHistogram( |
1723 bool sync_everything, const syncer::ModelTypeSet chosen_types) const { | 1722 bool sync_everything, const syncer::ModelTypeSet chosen_types) const { |
1724 if (!HasSyncSetupCompleted() || | 1723 if (!HasSyncSetupCompleted() || |
1725 sync_everything != sync_prefs_.HasKeepEverythingSynced()) { | 1724 sync_everything != sync_prefs_.HasKeepEverythingSynced()) { |
1726 UMA_HISTOGRAM_BOOLEAN("Sync.SyncEverything", sync_everything); | 1725 UMA_HISTOGRAM_BOOLEAN("Sync.SyncEverything", sync_everything); |
1727 } | 1726 } |
1728 | 1727 |
1729 // Only log the data types that are shown in the sync settings ui. | 1728 // Only log the data types that are shown in the sync settings ui. |
(...skipping 936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2666 } | 2665 } |
2667 } | 2666 } |
2668 } | 2667 } |
2669 return result; | 2668 return result; |
2670 } | 2669 } |
2671 | 2670 |
2672 void ProfileSyncService::CheckSyncBackupIfNeeded() { | 2671 void ProfileSyncService::CheckSyncBackupIfNeeded() { |
2673 DCHECK_EQ(backend_mode_, SYNC); | 2672 DCHECK_EQ(backend_mode_, SYNC); |
2674 | 2673 |
2675 #if defined(ENABLE_PRE_SYNC_BACKUP) | 2674 #if defined(ENABLE_PRE_SYNC_BACKUP) |
| 2675 const base::Time last_synced_time = sync_prefs_.GetLastSyncedTime(); |
2676 // Check backup once a day. | 2676 // Check backup once a day. |
2677 if (!last_backup_time_ && | 2677 if (!last_backup_time_ && |
2678 (last_synced_time_.is_null() || | 2678 (last_synced_time.is_null() || |
2679 base::Time::Now() - last_synced_time_ >= | 2679 base::Time::Now() - last_synced_time >= |
2680 base::TimeDelta::FromDays(1))) { | 2680 base::TimeDelta::FromDays(1))) { |
2681 // If sync thread is set, need to serialize check on sync thread after | 2681 // If sync thread is set, need to serialize check on sync thread after |
2682 // closing backup DB. | 2682 // closing backup DB. |
2683 if (sync_thread_) { | 2683 if (sync_thread_) { |
2684 sync_thread_->message_loop_proxy()->PostTask( | 2684 sync_thread_->message_loop_proxy()->PostTask( |
2685 FROM_HERE, | 2685 FROM_HERE, |
2686 base::Bind(syncer::CheckSyncDbLastModifiedTime, | 2686 base::Bind(syncer::CheckSyncDbLastModifiedTime, |
2687 profile_->GetPath().Append(kSyncBackupDataFolderName), | 2687 profile_->GetPath().Append(kSyncBackupDataFolderName), |
2688 base::MessageLoopProxy::current(), | 2688 base::MessageLoopProxy::current(), |
2689 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, | 2689 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2729 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { | 2729 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { |
2730 return device_info_sync_service_->GetLocalDeviceBackupTime(); | 2730 return device_info_sync_service_->GetLocalDeviceBackupTime(); |
2731 } | 2731 } |
2732 | 2732 |
2733 void ProfileSyncService::FlushDirectory() const { | 2733 void ProfileSyncService::FlushDirectory() const { |
2734 // backend_initialized_ implies backend_ isn't NULL and the manager exists. | 2734 // backend_initialized_ implies backend_ isn't NULL and the manager exists. |
2735 // If sync is not initialized yet, we fail silently. | 2735 // If sync is not initialized yet, we fail silently. |
2736 if (backend_initialized_) | 2736 if (backend_initialized_) |
2737 backend_->FlushDirectory(); | 2737 backend_->FlushDirectory(); |
2738 } | 2738 } |
OLD | NEW |