Chromium Code Reviews| Index: chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
| diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
| index b44d6b2c08c5c3950472be92de4e354b1fffd7f8..f6a49d8bdea44334659def7510f30467d8197dbc 100644 |
| --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
| +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
| @@ -82,8 +82,10 @@ std::vector<base::string16> GetExpirationYearItems() { |
| CreditCardEditorViewController::CreditCardEditorViewController( |
| PaymentRequestSpec* spec, |
| PaymentRequestState* state, |
| - PaymentRequestDialogView* dialog) |
| - : EditorViewController(spec, state, dialog) {} |
| + PaymentRequestDialogView* dialog, |
| + autofill::CreditCard* credit_card) |
| + : EditorViewController(spec, state, dialog), |
| + credit_card_to_edit_(credit_card) {} |
| CreditCardEditorViewController::~CreditCardEditorViewController() {} |
| @@ -160,9 +162,21 @@ std::vector<EditorField> CreditCardEditorViewController::GetFieldDefinitions() { |
| EditorField::ControlType::COMBOBOX}}; |
| } |
| +base::string16 CreditCardEditorViewController::GetInitialValueForType( |
| + autofill::ServerFieldType type) { |
| + if (!credit_card_to_edit_) |
| + return base::string16(); |
| + |
| + return credit_card_to_edit_->GetInfo(autofill::AutofillType(type), |
| + state()->GetApplicationLocale()); |
| +} |
| + |
| bool CreditCardEditorViewController::ValidateModelAndSave() { |
| + const std::string& locale = state()->GetApplicationLocale(); |
|
anthonyvd
2017/04/10 15:59:55
minor unrelated nit: why is GetApplicationLocale o
Mathieu
2017/04/10 16:05:17
Yeah, there's no good place for this (and I don't
|
| + // Use a temporary object for validation. |
| autofill::CreditCard credit_card; |
| credit_card.set_origin(autofill::kSettingsOrigin); |
| + |
| for (const auto& field : text_fields()) { |
| // ValidatingTextfield* is the key, EditorField is the value. |
| DCHECK_EQ(autofill::CREDIT_CARD, |
| @@ -170,7 +184,8 @@ bool CreditCardEditorViewController::ValidateModelAndSave() { |
| if (field.first->invalid()) |
| return false; |
| - credit_card.SetRawInfo(field.second.type, field.first->text()); |
| + credit_card.SetInfo(autofill::AutofillType(field.second.type), |
| + field.first->text(), locale); |
| } |
| for (const auto& field : comboboxes()) { |
| // ValidatingCombobox* is the key, EditorField is the value. |
| @@ -180,16 +195,37 @@ bool CreditCardEditorViewController::ValidateModelAndSave() { |
| if (combobox->invalid()) |
| return false; |
| - credit_card.SetRawInfo(field.second.type, |
| - combobox->GetTextForRow(combobox->selected_index())); |
| + credit_card.SetInfo(autofill::AutofillType(field.second.type), |
| + combobox->GetTextForRow(combobox->selected_index()), |
| + locale); |
| } |
| // TODO(mathp): Display global error message. |
| if (!credit_card.IsValid()) |
| return false; |
| - // Add the card (will not add a duplicate). |
| - state()->GetPersonalDataManager()->AddCreditCard(credit_card); |
| + if (!credit_card_to_edit_) { |
| + // Add the card (will not add a duplicate). |
| + state()->GetPersonalDataManager()->AddCreditCard(credit_card); |
| + } else { |
| + // We were in edit mode. Copy the data from the temporary object to retain |
| + // the edited object's other properties (use count, use date, guid, etc.). |
| + for (const auto& field : text_fields()) { |
| + credit_card_to_edit_->SetInfo( |
| + autofill::AutofillType(field.second.type), |
| + credit_card.GetInfo(autofill::AutofillType(field.second.type), |
| + locale), |
| + locale); |
| + } |
| + for (const auto& field : comboboxes()) { |
| + credit_card_to_edit_->SetInfo( |
| + autofill::AutofillType(field.second.type), |
| + credit_card.GetInfo(autofill::AutofillType(field.second.type), |
| + locale), |
| + locale); |
| + } |
| + state()->GetPersonalDataManager()->UpdateCreditCard(*credit_card_to_edit_); |
| + } |
| return true; |
| } |