Chromium Code Reviews| 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 3427c3983005ed37996465df16cab2443316a428..bfd91da21c67c6af314faff6e5dd55bb582369e6 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, |
|
akalin
2011/08/02 20:16:53
Wouldn't it better to have this as a List pref?
Andrew T Wilson (Slow)
2011/08/02 22:07:42
Not really - I really just want to serialize a Mod
akalin
2011/08/04 01:26:06
Yes, but it's conceivable that in the future that
Andrew T Wilson (Slow)
2011/08/07 02:45:38
So, in the interest of getting this landed, I made
|
| + syncable::ModelTypeBitSetToString(model_set), |
| + PrefService::UNSYNCABLE_PREF); |
| } |
| void ProfileSyncService::ClearPreferences() { |
| @@ -911,6 +929,7 @@ void ProfileSyncService::OnUserChoseDatatypes(bool sync_everything, |
| sync_everything); |
| ChangePreferredDataTypes(chosen_types); |
| + AcknowledgeSyncedTypes(); |
| profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
| } |
| @@ -1363,3 +1382,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( |
|
akalin
2011/08/04 01:26:06
and here you'd just do:
scoped_ptr<ListValue> ack
Andrew T Wilson (Slow)
2011/08/07 02:45:38
Done.
|
| + prefs::kAcknowledgedSyncTypes, |
| + syncable::ModelTypeBitSetToString(acknowledged)); |
| + profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
| +} |
| + |
| +string16 ProfileSyncService::GetSyncNotification() { |
| + 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( |
|
akalin
2011/08/04 01:26:06
I guess here you'd have to write ModelTypeBitSetFr
Andrew T Wilson (Slow)
2011/08/07 02:45:38
Done.
|
| + 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; |
| +} |
| + |