Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7580)

Unified Diff: chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc

Issue 2881643002: Focus first invalid field of payment request editor (Closed)
Patch Set: Last final nit :-) Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ed385a0882ccde3dc3f2e921c4d0fb5eaf0fecb2..20c5db57189860e09be63fccf874c62494d42780 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
@@ -389,6 +389,8 @@ void CreditCardEditorViewController::AddAndSelectNewBillingAddress(
// SetSelectedIndex doesn't trigger a perform action notification, which is
// needed to update the valid state.
address_combobox->SetSelectedRow(index);
+ // But it needs to be blured at least once.
+ address_combobox->OnBlur();
}
CreditCardEditorViewController::CreditCardValidationDelegate::
@@ -404,44 +406,73 @@ CreditCardEditorViewController::CreditCardValidationDelegate::
~CreditCardValidationDelegate() {}
bool CreditCardEditorViewController::CreditCardValidationDelegate::
- ValidateTextfield(views::Textfield* textfield) {
- return ValidateValue(textfield->text());
+ IsValidTextfield(views::Textfield* textfield) {
+ return ValidateValue(textfield->text(), nullptr);
}
bool CreditCardEditorViewController::CreditCardValidationDelegate::
- ValidateCombobox(views::Combobox* combobox) {
- // The billing address ID is the selected item identifier and not the combobox
- // value itself.
- if (field_.type == kBillingAddressType) {
- // TODO(crbug.com/718905) Find a way to deal with existing incomplete
- // addresses when choosing them as billing addresses.
- autofill::AddressComboboxModel* model =
- static_cast<autofill::AddressComboboxModel*>(combobox->model());
- return !model->GetItemIdentifierAt(combobox->selected_index()).empty();
- }
- return ValidateValue(combobox->GetTextForRow(combobox->selected_index()));
+ IsValidCombobox(views::Combobox* combobox) {
+ return ValidateCombobox(combobox, nullptr);
+}
+
+bool CreditCardEditorViewController::CreditCardValidationDelegate::
+ TextfieldValueChanged(views::Textfield* textfield) {
+ base::string16 error_message;
+ bool is_valid = ValidateValue(textfield->text(), &error_message);
+ controller_->DisplayErrorMessageForField(field_, error_message);
+ return is_valid;
+}
+
+bool CreditCardEditorViewController::CreditCardValidationDelegate::
+ ComboboxValueChanged(views::Combobox* combobox) {
+ base::string16 error_message;
+ bool is_valid = ValidateCombobox(combobox, nullptr);
+ controller_->DisplayErrorMessageForField(field_, error_message);
+ return is_valid;
}
bool CreditCardEditorViewController::CreditCardValidationDelegate::
- ValidateValue(const base::string16& value) {
+ ValidateValue(const base::string16& value, base::string16* error_message) {
if (!value.empty()) {
- base::string16 error_message;
+ base::string16 local_error_message;
bool is_valid =
field_.type == autofill::CREDIT_CARD_NUMBER
? autofill::IsValidCreditCardNumberForBasicCardNetworks(
- value, supported_card_networks_, &error_message)
- : autofill::IsValidForType(value, field_.type, &error_message);
- controller_->DisplayErrorMessageForField(field_, error_message);
+ value, supported_card_networks_, &local_error_message)
+ : autofill::IsValidForType(value, field_.type,
+ &local_error_message);
+ if (error_message)
+ *error_message = local_error_message;
return is_valid;
}
- bool is_required_valid = !field_.required;
- const base::string16 displayed_message =
- is_required_valid ? base::ASCIIToUTF16("")
- : l10n_util::GetStringUTF16(
- IDS_PAYMENTS_FIELD_REQUIRED_VALIDATION_MESSAGE);
- controller_->DisplayErrorMessageForField(field_, displayed_message);
- return is_required_valid;
+ if (error_message && field_.required) {
+ *error_message = l10n_util::GetStringUTF16(
+ IDS_PAYMENTS_FIELD_REQUIRED_VALIDATION_MESSAGE);
+ }
+ return !field_.required;
+}
+
+bool CreditCardEditorViewController::CreditCardValidationDelegate::
+ ValidateCombobox(views::Combobox* combobox, base::string16* error_message) {
+ // The billing address ID is the selected item identifier and not the combobox
+ // value itself.
+ if (field_.type == kBillingAddressType) {
+ // TODO(crbug.com/718905) Find a way to deal with existing incomplete
+ // addresses when choosing them as billing addresses.
+ autofill::AddressComboboxModel* model =
+ static_cast<autofill::AddressComboboxModel*>(combobox->model());
+ if (model->GetItemIdentifierAt(combobox->selected_index()).empty()) {
+ if (error_message) {
+ *error_message =
+ l10n_util::GetStringUTF16(IDS_PAYMENTS_BILLING_ADDRESS_REQUIRED);
+ }
+ return false;
+ }
+ return true;
+ }
+ return ValidateValue(combobox->GetTextForRow(combobox->selected_index()),
+ error_message);
}
bool CreditCardEditorViewController::GetSheetId(DialogViewID* sheet_id) {

Powered by Google App Engine
This is Rietveld 408576698