Chromium Code Reviews| Index: components/autofill/core/browser/autofill_profile.cc |
| diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc |
| index 3a0ab1c1451087eb2f83ab374b5eb956d9bdedb2..ab71403db4cafcc772a7b430b00511cb38b569bf 100644 |
| --- a/components/autofill/core/browser/autofill_profile.cc |
| +++ b/components/autofill/core/browser/autofill_profile.cc |
| @@ -136,17 +136,30 @@ base::string16 GetFormGroupInfo(const FormGroup& form_group, |
| } |
| template <class T> |
| -void CopyValuesToItems(ServerFieldType type, |
| - const std::vector<base::string16>& values, |
| - std::vector<T>* form_group_items, |
| - const T& prototype) { |
| +void CopyRawValuesToItems(ServerFieldType type, |
| + const std::vector<base::string16>& values, |
| + const T& prototype, |
| + std::vector<T>* form_group_items) { |
| form_group_items->resize(values.size(), prototype); |
| for (size_t i = 0; i < form_group_items->size(); ++i) { |
| (*form_group_items)[i].SetRawInfo(type, values[i]); |
| } |
| // Must have at least one (possibly empty) element. |
| - if (form_group_items->empty()) |
| - form_group_items->resize(1, prototype); |
| + form_group_items->resize(std::max(1UL, values.size()), prototype); |
| +} |
| + |
| +template <class T> |
| +void CopyValuesToItems(AutofillType type, |
| + const std::vector<base::string16>& values, |
| + const T& prototype, |
| + const std::string& app_locale, |
| + std::vector<T>* form_group_items) { |
| + form_group_items->resize(values.size(), prototype); |
| + for (size_t i = 0; i < form_group_items->size(); ++i) { |
| + (*form_group_items)[i].SetInfo(type, values[i], app_locale); |
| + } |
| + // Must have at least one (possibly empty) element. |
| + form_group_items->resize(std::max(1UL, values.size()), prototype); |
| } |
| template <class T> |
| @@ -349,22 +362,22 @@ void AutofillProfile::SetRawMultiInfo( |
| switch (AutofillType(type).group()) { |
| case NAME: |
| case NAME_BILLING: |
| - CopyValuesToItems(type, values, &name_, NameInfo()); |
| + CopyRawValuesToItems(type, values, NameInfo(), &name_); |
| break; |
| + |
| case EMAIL: |
| - CopyValuesToItems(type, values, &email_, EmailInfo()); |
| + CopyRawValuesToItems(type, values, EmailInfo(), &email_); |
| break; |
| + |
| case PHONE_HOME: |
| case PHONE_BILLING: |
| - CopyValuesToItems(type, |
| - values, |
| - &phone_number_, |
| - PhoneNumber(this)); |
| + CopyRawValuesToItems(type, values, PhoneNumber(this), &phone_number_); |
| break; |
| + |
| default: |
| - if (values.size() == 1) { |
| + if (values.size() == 1U) { |
| SetRawInfo(type, values[0]); |
| - } else if (values.size() == 0) { |
| + } else if (values.empty()) { |
| SetRawInfo(type, base::string16()); |
| } else { |
| // Shouldn't attempt to set multiple values on single-valued field. |
| @@ -380,6 +393,38 @@ void AutofillProfile::GetRawMultiInfo( |
| GetMultiInfoImpl(AutofillType(type), std::string(), values); |
| } |
| +void AutofillProfile::SetMultiInfo(const AutofillType& type, |
| + const std::vector<base::string16>& values, |
| + const std::string& app_locale) { |
| + switch (AutofillType(type).group()) { |
| + case NAME: |
| + case NAME_BILLING: |
| + CopyValuesToItems(type, values, NameInfo(), app_locale, &name_); |
| + break; |
| + |
| + case EMAIL: |
| + CopyValuesToItems(type, values, EmailInfo(), app_locale, &email_); |
| + break; |
| + |
| + case PHONE_HOME: |
| + case PHONE_BILLING: |
| + CopyValuesToItems( |
| + type, values, PhoneNumber(this), app_locale, &phone_number_); |
| + break; |
| + |
| + default: |
| + if (values.size() == 1) { |
| + SetInfo(type, values[0], app_locale); |
| + } else if (values.size() == 0) { |
|
Ilya Sherman
2014/07/17 18:50:56
nit: Update this code to match the changes you mad
Evan Stade
2014/07/22 01:50:53
Done.
|
| + SetInfo(type, base::string16(), app_locale); |
| + } else { |
| + // Shouldn't attempt to set multiple values on single-valued field. |
| + NOTREACHED(); |
| + } |
| + break; |
| + } |
| +} |
| + |
| void AutofillProfile::GetMultiInfo(const AutofillType& type, |
| const std::string& app_locale, |
| std::vector<base::string16>* values) const { |