| Index: components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
|
| diff --git a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
|
| index 5baf5566b77c4b6ba794d4d7632f8b526076fdbf..bfb32d7a2f361a1a0e90cebeb605de3feac90539 100644
|
| --- a/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
|
| +++ b/components/autofill/core/browser/webdata/autofill_profile_syncable_service.cc
|
| @@ -316,7 +316,7 @@ bool AutofillProfileSyncableService::OverwriteProfileWithServerData(
|
| AutofillProfile* profile,
|
| const std::string& app_locale) {
|
| bool diff = false;
|
| - if (profile->origin() != specifics.origin()) {
|
| + if (specifics.has_origin() && profile->origin() != specifics.origin()) {
|
| bool was_verified = profile->IsVerified();
|
| profile->set_origin(specifics.origin());
|
| diff = true;
|
| @@ -374,6 +374,15 @@ bool AutofillProfileSyncableService::OverwriteProfileWithServerData(
|
| diff = UpdateField(ADDRESS_HOME_LINE2,
|
| specifics.address_home_line2(), profile) || diff;
|
| }
|
| +
|
| + // Update the BCP 47 language code that can be used to format the address for
|
| + // display.
|
| + if (specifics.has_address_home_language_code() &&
|
| + specifics.address_home_language_code() != profile->language_code()) {
|
| + profile->set_language_code(specifics.address_home_language_code());
|
| + diff = true;
|
| + }
|
| +
|
| return diff;
|
| }
|
|
|
| @@ -431,6 +440,7 @@ void AutofillProfileSyncableService::WriteAutofillProfile(
|
| specifics->set_address_home_dependent_locality(
|
| LimitData(
|
| UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY))));
|
| + specifics->set_address_home_language_code(LimitData(profile.language_code()));
|
|
|
| profile.GetRawMultiInfo(EMAIL_ADDRESS, &values);
|
| for (size_t i = 0; i < values.size(); ++i) {
|
| @@ -486,7 +496,9 @@ AutofillProfileSyncableService::CreateOrUpdateProfile(
|
| autofill_specifics.guid(), autofill_specifics.origin());
|
| OverwriteProfileWithServerData(autofill_specifics, new_profile, app_locale_);
|
|
|
| - // Check if profile appears under a different guid.
|
| + // Check if profile appears under a different guid. Compares only profile
|
| + // contents. (Ignores origin and language code in comparison.)
|
| + //
|
| // Unverified profiles should never overwrite verified ones.
|
| for (GUIDToProfileMap::iterator it = profile_map->begin();
|
| it != profile_map->end(); ++it) {
|
| @@ -625,9 +637,10 @@ bool AutofillProfileSyncableService::MergeProfile(
|
| const AutofillProfile& merge_from,
|
| AutofillProfile* merge_into,
|
| const std::string& app_locale) {
|
| + // Overwrites all single values and adds to mutli-values. Does not overwrite
|
| + // GUID.
|
| merge_into->OverwriteWithOrAddTo(merge_from, app_locale);
|
| - return (merge_into->Compare(merge_from) != 0 ||
|
| - merge_into->origin() != merge_from.origin());
|
| + return !merge_into->EqualsSansGuid(merge_from);
|
| }
|
|
|
| AutofillTable* AutofillProfileSyncableService::GetAutofillTable() const {
|
|
|