| Index: chrome/browser/ui/views/payments/editor_view_controller.h | 
| diff --git a/chrome/browser/ui/views/payments/editor_view_controller.h b/chrome/browser/ui/views/payments/editor_view_controller.h | 
| index 80251eb8c3039c79848c960906d3b89c37d4d909..40517795a6ea86329ddc29a19fd3d3f139a74054 100644 | 
| --- a/chrome/browser/ui/views/payments/editor_view_controller.h | 
| +++ b/chrome/browser/ui/views/payments/editor_view_controller.h | 
| @@ -62,12 +62,6 @@ struct EditorField { | 
| required(required), | 
| control_type(control_type) {} | 
|  | 
| -  struct Compare { | 
| -    bool operator()(const EditorField& lhs, const EditorField& rhs) const { | 
| -      return std::tie(lhs.type, lhs.label) < std::tie(rhs.type, rhs.label); | 
| -    } | 
| -  }; | 
| - | 
| // Data type in the field. | 
| autofill::ServerFieldType type; | 
| // Label to be shown alongside the field. | 
| @@ -90,8 +84,7 @@ class EditorViewController : public PaymentRequestSheetController, | 
| std::unordered_map<ValidatingTextfield*, const EditorField>; | 
| using ComboboxMap = | 
| std::unordered_map<ValidatingCombobox*, const EditorField>; | 
| -  using ErrorLabelMap = | 
| -      std::map<const EditorField, views::View*, EditorField::Compare>; | 
| +  using ErrorLabelMap = std::map<autofill::ServerFieldType, views::View*>; | 
|  | 
| // Does not take ownership of the arguments, which should outlive this object. | 
| // |back_navigation_type| identifies what sort of back navigation should be | 
| @@ -104,21 +97,26 @@ class EditorViewController : public PaymentRequestSheetController, | 
| ~EditorViewController() override; | 
|  | 
| // Will display |error_message| alongside the input field represented by | 
| -  // |field|. | 
| -  void DisplayErrorMessageForField(const EditorField& field, | 
| +  // field |type|. | 
| +  void DisplayErrorMessageForField(autofill::ServerFieldType type, | 
| const base::string16& error_message); | 
|  | 
| const ComboboxMap& comboboxes() const { return comboboxes_; } | 
| const TextFieldsMap& text_fields() const { return text_fields_; } | 
|  | 
| +  // Returns the View ID that can be used to lookup the input field for |type|. | 
| +  static int GetInputFieldViewId(autofill::ServerFieldType type); | 
| + | 
| protected: | 
| // Create a header view to be inserted before all fields. | 
| virtual std::unique_ptr<views::View> CreateHeaderView(); | 
| // |focusable_field| is to be set with a pointer to the view that should get | 
| -  // default focus within the custom view. | 
| +  // default focus within the custom view. |valid| should be set to the initial | 
| +  // validity state of the custom view. | 
| virtual std::unique_ptr<views::View> CreateCustomFieldView( | 
| autofill::ServerFieldType type, | 
| -      views::View** focusable_field); | 
| +      views::View** focusable_field, | 
| +      bool* valid); | 
| // Create an extra view to go to the right of the field with |type|, which | 
| // can either be a textfield, combobox, or custom view. | 
| virtual std::unique_ptr<views::View> CreateExtraViewForField( | 
| @@ -154,6 +152,11 @@ class EditorViewController : public PaymentRequestSheetController, | 
| void ButtonPressed(views::Button* sender, const ui::Event& event) override; | 
| views::View* GetFirstFocusedView() override; | 
|  | 
| +  // Will create a combobox according to the |field| definition. Will also keep | 
| +  // track of this field to populate the edited model on save. | 
| +  std::unique_ptr<ValidatingCombobox> CreateComboboxForField( | 
| +      const EditorField& field); | 
| + | 
| private: | 
| // views::TextfieldController: | 
| void ContentsChanged(views::Textfield* sender, | 
|  |