| Index: chrome/browser/sync/profile_sync_service.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
|
| index 061ded400da2a3dee79d8849d884c3ee81d938ed..3344b5fb1e75b39c8ea5ae8c6faac263bc952b39 100644
|
| --- a/chrome/browser/sync/profile_sync_service.cc
|
| +++ b/chrome/browser/sync/profile_sync_service.cc
|
| @@ -314,6 +314,24 @@ void ProfileSyncService::RegisterPreferences() {
|
| pref_service->RegisterBooleanPref(prefs::kSyncAutofillProfile,
|
| enable_by_default,
|
| PrefService::UNSYNCABLE_PREF);
|
| +
|
| + // We started prompting people about new data types starting with the
|
| + // rollout of TYPED_URLs - all previously launched data types are treated
|
| + // as if they are already acknowledged.
|
| + syncable::ModelTypeBitSet model_set;
|
| + model_set.set(syncable::BOOKMARKS);
|
| + model_set.set(syncable::PREFERENCES);
|
| + model_set.set(syncable::PASSWORDS);
|
| + model_set.set(syncable::AUTOFILL_PROFILE);
|
| + model_set.set(syncable::AUTOFILL);
|
| + model_set.set(syncable::THEMES);
|
| + model_set.set(syncable::EXTENSIONS);
|
| + model_set.set(syncable::NIGORI);
|
| + model_set.set(syncable::SEARCH_ENGINES);
|
| + model_set.set(syncable::APPS);
|
| + pref_service->RegisterStringPref(prefs::kAcknowledgedSyncTypes,
|
| + syncable::ModelTypeBitSetToString(model_set),
|
| + PrefService::UNSYNCABLE_PREF);
|
| }
|
|
|
| void ProfileSyncService::ClearPreferences() {
|
| @@ -912,6 +930,7 @@ void ProfileSyncService::OnUserChoseDatatypes(bool sync_everything,
|
| sync_everything);
|
|
|
| ChangePreferredDataTypes(chosen_types);
|
| + AcknowledgeSyncedTypes();
|
| profile_->GetPrefs()->ScheduleSavePersistentPrefs();
|
| }
|
|
|
| @@ -1376,3 +1395,59 @@ bool ProfileSyncService::ShouldPushChanges() {
|
|
|
| return data_type_manager_->state() == DataTypeManager::CONFIGURED;
|
| }
|
| +
|
| +void ProfileSyncService::AcknowledgeSyncedTypes() {
|
| + syncable::ModelTypeBitSet acknowledged;
|
| + CHECK(syncable::ModelTypeBitSetFromString(
|
| + profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes),
|
| + &acknowledged));
|
| + syncable::ModelTypeSet registered;
|
| + GetRegisteredDataTypes(®istered);
|
| + syncable::ModelTypeBitSet registered_bit_set =
|
| + syncable::ModelTypeBitSetFromSet(registered);
|
| +
|
| + // Add the registered types to the current set of acknowledged types, and then
|
| + // store the resulting set in prefs.
|
| + acknowledged |= registered_bit_set;
|
| + profile_->GetPrefs()->SetString(
|
| + prefs::kAcknowledgedSyncTypes,
|
| + syncable::ModelTypeBitSetToString(acknowledged));
|
| + profile_->GetPrefs()->ScheduleSavePersistentPrefs();
|
| +}
|
| +
|
| +string16 ProfileSyncService::GetSyncNotification() const {
|
| + string16 promo;
|
| + if (HasSyncSetupCompleted() &&
|
| + profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced)) {
|
| + // User is "syncing everything" - see if we've added any new data types.
|
| + syncable::ModelTypeBitSet acknowledged;
|
| + CHECK(syncable::ModelTypeBitSetFromString(
|
| + profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes),
|
| + &acknowledged));
|
| + syncable::ModelTypeSet registered;
|
| + GetRegisteredDataTypes(®istered);
|
| + syncable::ModelTypeBitSet registered_bit_set =
|
| + syncable::ModelTypeBitSetFromSet(registered);
|
| +
|
| + syncable::ModelTypeBitSet unacknowledged =
|
| + registered_bit_set & ~acknowledged;
|
| + // TODO(sync): As we add new data types, we'll probably need some more
|
| + // generic string to display to the user, since the method below won't
|
| + // scale indefinitely (we'd need N*(N+1)/2 different strings to represent
|
| + // all the combinations of unacknowledged types). But for now, we just
|
| + // have sessions and typed urls so this is OK.
|
| + if (unacknowledged.test(syncable::SESSIONS) &&
|
| + unacknowledged.test(syncable::TYPED_URLS)) {
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS_AND_TYPED_URLS);
|
| + } else if (unacknowledged.test(syncable::SESSIONS)) {
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS);
|
| + } else if (unacknowledged.test(syncable::TYPED_URLS)) {
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_TYPED_URLS);
|
| + } else {
|
| + // Shouldn't be possible for any other types to be unacknowledged.
|
| + DCHECK(!unacknowledged.any());
|
| + }
|
| + }
|
| + return promo;
|
| +}
|
| +
|
|
|