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 de66b31d1a1a9009503ef960bf73eff6f059b5df..8f8866eb484d1290bb25b5679a5af8bfe0c2b9d8 100644 |
--- a/chrome/browser/ui/views/payments/editor_view_controller.cc |
+++ b/chrome/browser/ui/views/payments/editor_view_controller.cc |
@@ -43,8 +43,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 = |
@@ -60,7 +61,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( |
@@ -84,15 +85,15 @@ 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(); |
} |
@@ -172,6 +173,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(static_cast<int>(field.type)); |
anthonyvd
2017/05/19 19:16:59
That's probably not a good idea because it'll caus
Mathieu
2017/05/19 21:13:46
Done.
|
+ 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(); |
@@ -320,28 +336,26 @@ void 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)); |
+ std::unique_ptr<ValidatingCombobox> combobox = |
+ CreateComboboxForField(field); |
if (!first_field_view_) |
- first_field_view_ = combobox; |
+ first_field_view_ = combobox.get(); |
// |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. |
std::unique_ptr<views::View> field_view = CreateCustomFieldView(field.type); |
DCHECK(field_view); |
- layout->AddView(field_view.release()); |
+ |
+ if (!first_field_view_) |
+ first_field_view_ = field_view.get(); |
+ |
+ 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 |
@@ -355,7 +369,7 @@ void 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. |