Index: chrome/browser/ui/views/payments/editor_view_controller.cc |
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc |
index 8d612816b8381938eab4a4a48b77e992ec9145c2..40bb5941d57ae378315a9706ce14d4075e823a8f 100644 |
--- a/chrome/browser/ui/views/payments/editor_view_controller.cc |
+++ b/chrome/browser/ui/views/payments/editor_view_controller.cc |
@@ -130,6 +130,18 @@ std::unique_ptr<views::View> EditorViewController::CreateExtraViewForField( |
return nullptr; |
} |
+bool EditorViewController::ValidateInputFields() { |
+ for (const auto& field : text_fields()) { |
+ if (!field.first->IsValid()) |
+ return false; |
+ } |
+ for (const auto& field : comboboxes()) { |
+ if (!field.first->IsValid()) |
+ return false; |
+ } |
+ return true; |
+} |
+ |
std::unique_ptr<views::Button> EditorViewController::CreatePrimaryButton() { |
std::unique_ptr<views::Button> button( |
views::MdTextButton::CreateSecondaryUiBlueButton( |
@@ -209,11 +221,15 @@ EditorViewController::CreateComboboxForField(const EditorField& field) { |
void EditorViewController::ContentsChanged(views::Textfield* sender, |
const base::string16& new_contents) { |
- static_cast<ValidatingTextfield*>(sender)->OnContentsChanged(); |
+ ValidatingTextfield* sender_cast = static_cast<ValidatingTextfield*>(sender); |
+ sender_cast->OnContentsChanged(); |
+ primary_button()->SetEnabled(ValidateInputFields()); |
} |
void EditorViewController::OnPerformAction(views::Combobox* sender) { |
- static_cast<ValidatingCombobox*>(sender)->OnContentsChanged(); |
+ ValidatingCombobox* sender_cast = static_cast<ValidatingCombobox*>(sender); |
+ sender_cast->OnContentsChanged(); |
+ primary_button()->SetEnabled(ValidateInputFields()); |
} |
std::unique_ptr<views::View> EditorViewController::CreateEditorView() { |
@@ -307,6 +323,9 @@ std::unique_ptr<views::View> EditorViewController::CreateEditorView() { |
if (!initial_focus_field_view_) |
initial_focus_field_view_ = first_field; |
+ // Validate all fields and disable the primary (Done) button if necessary. |
+ primary_button()->SetEnabled(ValidateInputFields()); |
+ |
// Adds the "* indicates a required field" label in "disabled" grey text. |
std::unique_ptr<views::Label> required_field = base::MakeUnique<views::Label>( |
l10n_util::GetStringUTF16(IDS_PAYMENTS_REQUIRED_FIELD_MESSAGE)); |