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 64c2c4b42a64c02df2c7162ceb926187134408e0..809aaaa58f8ed7acc82da6a99b0c78c9f36215f9 100644 |
--- a/chrome/browser/ui/views/payments/editor_view_controller.cc |
+++ b/chrome/browser/ui/views/payments/editor_view_controller.cc |
@@ -45,8 +45,9 @@ enum class EditorViewControllerTags : int { |
SAVE_BUTTON = kFirstTagValue, |
}; |
-std::unique_ptr<views::View> CreateErrorLabelView(const base::string16& error, |
- const EditorField& field) { |
+std::unique_ptr<views::View> CreateErrorLabelView( |
+ const base::string16& error, |
+ autofill::ServerFieldType type) { |
std::unique_ptr<views::View> view = base::MakeUnique<views::View>(); |
std::unique_ptr<views::BoxLayout> layout = |
@@ -62,7 +63,7 @@ std::unique_ptr<views::View> CreateErrorLabelView(const base::string16& error, |
std::unique_ptr<views::Label> error_label = |
base::MakeUnique<views::Label>(error); |
error_label->set_id(static_cast<int>(DialogViewID::ERROR_LABEL_OFFSET) + |
- field.type); |
+ type); |
error_label->SetFontList( |
error_label->GetDefaultFontList().DeriveWithSizeDelta(-1)); |
error_label->SetEnabledColor(error_label->GetNativeTheme()->GetSystemColor( |
@@ -86,26 +87,33 @@ EditorViewController::EditorViewController( |
EditorViewController::~EditorViewController() {} |
void EditorViewController::DisplayErrorMessageForField( |
- const EditorField& field, |
+ autofill::ServerFieldType type, |
const base::string16& error_message) { |
- const auto& label_view_it = error_labels_.find(field); |
+ const auto& label_view_it = error_labels_.find(type); |
DCHECK(label_view_it != error_labels_.end()); |
label_view_it->second->RemoveAllChildViews(/*delete_children=*/true); |
if (!error_message.empty()) { |
label_view_it->second->AddChildView( |
- CreateErrorLabelView(error_message, field).release()); |
+ CreateErrorLabelView(error_message, type).release()); |
} |
RelayoutPane(); |
} |
+// static |
+int EditorViewController::GetInputFieldViewId(autofill::ServerFieldType type) { |
+ return static_cast<int>(DialogViewID::INPUT_FIELD_TYPE_OFFSET) + |
+ static_cast<int>(type); |
+} |
+ |
std::unique_ptr<views::View> EditorViewController::CreateHeaderView() { |
return nullptr; |
} |
std::unique_ptr<views::View> EditorViewController::CreateCustomFieldView( |
autofill::ServerFieldType type, |
- views::View** focusable_field) { |
+ views::View** focusable_field, |
+ bool* valid) { |
return nullptr; |
} |
@@ -174,6 +182,21 @@ views::View* EditorViewController::GetFirstFocusedView() { |
return PaymentRequestSheetController::GetFirstFocusedView(); |
} |
+std::unique_ptr<ValidatingCombobox> |
+EditorViewController::CreateComboboxForField(const EditorField& field) { |
+ std::unique_ptr<ValidatingCombobox> combobox = |
+ base::MakeUnique<ValidatingCombobox>(GetComboboxModelForType(field.type), |
+ CreateValidationDelegate(field)); |
+ base::string16 initial_value = GetInitialValueForType(field.type); |
+ if (!initial_value.empty()) |
+ combobox->SelectValue(initial_value); |
+ // Using autofill field type as a view ID. |
+ combobox->set_id(GetInputFieldViewId(field.type)); |
+ combobox->set_listener(this); |
+ comboboxes_.insert(std::make_pair(combobox.get(), field)); |
+ return combobox; |
+} |
+ |
void EditorViewController::ContentsChanged(views::Textfield* sender, |
const base::string16& new_contents) { |
static_cast<ValidatingTextfield*>(sender)->OnContentsChanged(); |
@@ -317,7 +340,6 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout, |
layout->AddView(label.release()); |
views::View* focusable_field = nullptr; |
- |
constexpr int kInputFieldHeight = 28; |
if (field.control_type == EditorField::ControlType::TEXTFIELD || |
field.control_type == EditorField::ControlType::TEXTFIELD_NUMBER) { |
@@ -328,7 +350,7 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout, |
text_field->SetTextInputType(ui::TextInputType::TEXT_INPUT_TYPE_NUMBER); |
text_field->set_controller(this); |
// Using autofill field type as a view ID (for testing). |
- text_field->set_id(static_cast<int>(field.type)); |
+ text_field->set_id(GetInputFieldViewId(field.type)); |
text_fields_.insert(std::make_pair(text_field, field)); |
focusable_field = text_field; |
*valid = text_field->IsValid(); |
@@ -337,29 +359,24 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout, |
layout->AddView(text_field, 1, 1, views::GridLayout::FILL, |
views::GridLayout::FILL, 0, kInputFieldHeight); |
} else if (field.control_type == EditorField::ControlType::COMBOBOX) { |
- ValidatingCombobox* combobox = new ValidatingCombobox( |
- GetComboboxModelForType(field.type), CreateValidationDelegate(field)); |
- base::string16 initial_value = GetInitialValueForType(field.type); |
- if (!initial_value.empty()) |
- combobox->SelectValue(initial_value); |
- // Using autofill field type as a view ID. |
- combobox->set_id(static_cast<int>(field.type)); |
- combobox->set_listener(this); |
- comboboxes_.insert(std::make_pair(combobox, field)); |
- focusable_field = combobox; |
+ std::unique_ptr<ValidatingCombobox> combobox = |
+ CreateComboboxForField(field); |
+ |
+ focusable_field = combobox.get(); |
*valid = combobox->IsValid(); |
// |combobox| will now be owned by |row|. |
- layout->AddView(combobox, 1, 1, views::GridLayout::FILL, |
+ layout->AddView(combobox.release(), 1, 1, views::GridLayout::FILL, |
views::GridLayout::FILL, 0, kInputFieldHeight); |
} else { |
// Custom field view will now be owned by |row|. And it must be valid since |
// the derived class specified a custom view for this field. |
- DCHECK(!focusable_field); |
std::unique_ptr<views::View> field_view = |
- CreateCustomFieldView(field.type, &focusable_field); |
+ CreateCustomFieldView(field.type, &focusable_field, valid); |
DCHECK(field_view); |
- layout->AddView(field_view.release()); |
+ |
+ layout->AddView(field_view.release(), 1, 1, views::GridLayout::FILL, |
+ views::GridLayout::FILL, 0, kInputFieldHeight); |
} |
// If an extra view needs to go alongside the input field view, add it to the |
@@ -373,7 +390,7 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout, |
std::unique_ptr<views::View> error_label_view = |
base::MakeUnique<views::View>(); |
error_label_view->SetLayoutManager(new views::FillLayout); |
- error_labels_[field] = error_label_view.get(); |
+ error_labels_[field.type] = error_label_view.get(); |
layout->AddView(error_label_view.release()); |
// Bottom padding for the row. |