| 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 601807bab851442993a61302dbb9b2ab32afec3b..4f58d154accdf163d0cc89fa87c97ea18169a39b 100644
|
| --- a/chrome/browser/sync/profile_sync_service.cc
|
| +++ b/chrome/browser/sync/profile_sync_service.cc
|
| @@ -25,6 +25,7 @@
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/browser/net/gaia/token_service.h"
|
| +#include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h"
|
| #include "chrome/browser/sync/glue/change_processor.h"
|
| #include "chrome/browser/sync/glue/data_type_controller.h"
|
| #include "chrome/browser/sync/glue/data_type_manager.h"
|
| @@ -366,6 +367,12 @@ void ProfileSyncService::RegisterPreferences() {
|
| enable_by_default);
|
| pref_service->RegisterBooleanPref(prefs::kSyncManaged, false);
|
| pref_service->RegisterStringPref(prefs::kEncryptionBootstrapToken, "");
|
| +
|
| + // If you have never synced before until we have migrated autofill profile
|
| + // is disabled.
|
| + pref_service->RegisterBooleanPref(prefs::kSyncAutofill_profile, false);
|
| +
|
| + pref_service->RegisterBooleanPref(prefs::kAutofillProfileMigrated, false);
|
| }
|
|
|
| void ProfileSyncService::ClearPreferences() {
|
| @@ -548,6 +555,9 @@ const char* ProfileSyncService::GetPrefNameForDataType(
|
| return prefs::kSyncPreferences;
|
| case syncable::AUTOFILL:
|
| return prefs::kSyncAutofill;
|
| + case syncable::AUTOFILL_PROFILE:
|
| + return prefs::kSyncAutofill_profile;
|
| + break;
|
| case syncable::THEMES:
|
| return prefs::kSyncThemes;
|
| case syncable::TYPED_URLS:
|
| @@ -876,6 +886,24 @@ void ProfileSyncService::ChangePreferredDataTypes(
|
| continue;
|
| profile_->GetPrefs()->SetBoolean(pref_name,
|
| preferred_types.count(model_type) != 0);
|
| + if (syncable::AUTOFILL == model_type) {
|
| + if (profile_->GetPrefs()->GetBoolean(prefs::kAutofillProfileMigrated)) {
|
| + profile_->GetPrefs()->SetBoolean(prefs::kSyncAutofill_profile,
|
| + preferred_types.count(model_type) != 0);
|
| + syncable::ModelTypeSet registered_types;
|
| +
|
| + // Now register autofill profile if necessary.
|
| + GetRegisteredDataTypes(®istered_types);
|
| + if (registered_types.count(syncable::AUTOFILL_PROFILE) == 0) {
|
| + RegisterDataTypeController(
|
| + new browser_sync::AutofillProfileDataTypeController(this->factory_,
|
| + profile_,
|
| + this));
|
| + }
|
| + } else {
|
| + profile_->GetPrefs()->SetBoolean(prefs::kSyncAutofill_profile, false);
|
| + }
|
| + }
|
| }
|
|
|
| // If we haven't initialized yet, don't configure the DTM as it could cause
|
| @@ -884,17 +912,28 @@ void ProfileSyncService::ChangePreferredDataTypes(
|
| ConfigureDataTypeManager();
|
| }
|
|
|
| +void ProfileSyncService::GetAllSyncableTypesForCurrentClientState(
|
| + syncable::ModelTypeSet* preferred_types) const {
|
| +
|
| + GetRegisteredDataTypes(preferred_types);
|
| +
|
| + if (!profile_->GetPrefs()->GetBoolean(prefs::kAutofillProfileMigrated)) {
|
| + preferred_types->erase(syncable::AUTOFILL_PROFILE);
|
| + }
|
| +
|
| + return;
|
| +}
|
| +
|
| void ProfileSyncService::GetPreferredDataTypes(
|
| syncable::ModelTypeSet* preferred_types) const {
|
| preferred_types->clear();
|
| -
|
| - // Filter out any datatypes which aren't registered, or for which
|
| - // the preference can't be read.
|
| - syncable::ModelTypeSet registered_types;
|
| - GetRegisteredDataTypes(®istered_types);
|
| if (profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced)) {
|
| - *preferred_types = registered_types;
|
| + GetAllSyncableTypesForCurrentClientState(preferred_types);
|
| } else {
|
| + // Filter out any datatypes which aren't registered, or for which
|
| + // the preference can't be read.
|
| + syncable::ModelTypeSet registered_types;
|
| + GetRegisteredDataTypes(®istered_types);
|
| for (int i = 0; i < syncable::MODEL_TYPE_COUNT; ++i) {
|
| syncable::ModelType model_type = syncable::ModelTypeFromInt(i);
|
| if (!registered_types.count(model_type))
|
|
|