Index: chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc |
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc |
index 4ce0cbd8de428943195ddc351bc67287e2db45a0..194984df437acc259b94549c71ea08aa8dff2295 100644 |
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc |
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc |
@@ -76,8 +76,9 @@ autofill::ServerFieldType GetFieldTypeFromString(const std::string& type) { |
ShippingAddressEditorViewController::ShippingAddressEditorViewController( |
PaymentRequestSpec* spec, |
PaymentRequestState* state, |
- PaymentRequestDialogView* dialog) |
- : EditorViewController(spec, state, dialog) { |
+ PaymentRequestDialogView* dialog, |
+ autofill::AutofillProfile* profile) |
+ : EditorViewController(spec, state, dialog), profile_to_edit_(profile) { |
UpdateEditorFields(); |
} |
@@ -93,9 +94,19 @@ ShippingAddressEditorViewController::GetFieldDefinitions() { |
return editor_fields_; |
} |
+base::string16 ShippingAddressEditorViewController::GetInitialValueForType( |
+ autofill::ServerFieldType type) { |
+ if (!profile_to_edit_) |
+ return base::string16(); |
+ |
+ return profile_to_edit_->GetInfo(autofill::AutofillType(type), |
+ state()->GetApplicationLocale()); |
+} |
+ |
bool ShippingAddressEditorViewController::ValidateModelAndSave() { |
+ const std::string& locale = state()->GetApplicationLocale(); |
+ // To validate the profile first, we use a temporary object. |
autofill::AutofillProfile profile; |
- profile.set_origin(autofill::kSettingsOrigin); |
for (const auto& field : text_fields()) { |
// Force a blur in case the value was left untouched. |
field.first->OnBlur(); |
@@ -103,7 +114,8 @@ bool ShippingAddressEditorViewController::ValidateModelAndSave() { |
if (field.first->invalid()) |
return false; |
- profile.SetRawInfo(field.second.type, field.first->text()); |
+ profile.SetInfo(autofill::AutofillType(field.second.type), |
+ field.first->text(), locale); |
} |
for (const auto& field : comboboxes()) { |
// ValidatingCombobox* is the key, EditorField is the value. |
@@ -112,17 +124,41 @@ bool ShippingAddressEditorViewController::ValidateModelAndSave() { |
return false; |
if (combobox->id() == autofill::ADDRESS_HOME_COUNTRY) { |
- profile.SetRawInfo( |
- field.second.type, |
- base::UTF8ToUTF16(country_codes_[combobox->selected_index()])); |
+ profile.SetInfo( |
+ autofill::AutofillType(field.second.type), |
+ base::UTF8ToUTF16(country_codes_[combobox->selected_index()]), |
+ locale); |
} else { |
- profile.SetRawInfo(field.second.type, |
- combobox->GetTextForRow(combobox->selected_index())); |
+ profile.SetInfo(autofill::AutofillType(field.second.type), |
+ combobox->GetTextForRow(combobox->selected_index()), |
+ locale); |
} |
} |
- // Add the profile (will not add a duplicate). |
- state()->GetPersonalDataManager()->AddProfile(profile); |
+ if (!profile_to_edit_) { |
+ // Add the profile (will not add a duplicate). |
+ profile.set_origin(autofill::kSettingsOrigin); |
+ state()->GetPersonalDataManager()->AddProfile(profile); |
+ } else { |
+ // Copy the temporary object's data to the object to be edited. Prefer this |
+ // method to copying |profile| into |profile_to_edit_|, because the latter |
+ // object needs to retain other properties (use count, use date, guid, |
+ // etc.). |
+ for (const auto& field : text_fields()) { |
+ profile_to_edit_->SetInfo( |
+ autofill::AutofillType(field.second.type), |
+ profile.GetInfo(autofill::AutofillType(field.second.type), locale), |
+ locale); |
+ } |
+ for (const auto& field : comboboxes()) { |
+ profile_to_edit_->SetInfo( |
+ autofill::AutofillType(field.second.type), |
+ profile.GetInfo(autofill::AutofillType(field.second.type), locale), |
+ locale); |
+ } |
+ profile_to_edit_->set_origin(autofill::kSettingsOrigin); |
+ state()->GetPersonalDataManager()->UpdateProfile(*profile_to_edit_); |
+ } |
return true; |
} |