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 b77f42254ed9059b33b0e9e582a339c62c52da9f..08d2a776fb5a3c66fc232fb03b8b8f93d6c29606 100644 |
--- a/chrome/browser/sync/profile_sync_service.cc |
+++ b/chrome/browser/sync/profile_sync_service.cc |
@@ -320,6 +320,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->RegisterListPref(prefs::kAcknowledgedSyncTypes, |
+ syncable::ModelTypeBitSetToValue(model_set), |
+ PrefService::UNSYNCABLE_PREF); |
} |
void ProfileSyncService::ClearPreferences() { |
@@ -927,6 +945,7 @@ void ProfileSyncService::OnUserChoseDatatypes(bool sync_everything, |
sync_everything); |
ChangePreferredDataTypes(chosen_types); |
+ AcknowledgeSyncedTypes(); |
profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
} |
@@ -1391,3 +1410,37 @@ bool ProfileSyncService::ShouldPushChanges() { |
return data_type_manager_->state() == DataTypeManager::CONFIGURED; |
} |
+ |
+void ProfileSyncService::AcknowledgeSyncedTypes() { |
+ syncable::ModelTypeBitSet acknowledged = syncable::ModelTypeBitSetFromValue( |
+ *profile_->GetPrefs()->GetList(prefs::kAcknowledgedSyncTypes)); |
+ 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; |
+ scoped_ptr<ListValue> value(syncable::ModelTypeBitSetToValue(acknowledged)); |
+ profile_->GetPrefs()->Set(prefs::kAcknowledgedSyncTypes, *value); |
+ profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
+} |
+ |
+syncable::ModelTypeBitSet ProfileSyncService::GetUnacknowledgedTypes() const { |
+ syncable::ModelTypeBitSet unacknowledged; |
+ if (HasSyncSetupCompleted() && |
+ profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced)) { |
+ // User is "syncing everything" - see if we've added any new data types. |
+ syncable::ModelTypeBitSet acknowledged = |
+ syncable::ModelTypeBitSetFromValue( |
+ *profile_->GetPrefs()->GetList(prefs::kAcknowledgedSyncTypes)); |
+ syncable::ModelTypeSet registered; |
+ GetRegisteredDataTypes(®istered); |
+ syncable::ModelTypeBitSet registered_bit_set = |
+ syncable::ModelTypeBitSetFromSet(registered); |
+ unacknowledged = registered_bit_set & ~acknowledged; |
+ } |
+ return unacknowledged; |
+} |
+ |