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

Side by Side Diff: chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc

Issue 2849523003: Add billing address as a mandatory field of Payments credit cards. (Closed)
Patch Set: Components Unittests fix 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/payments/shipping_address_editor_view_controll er.h" 5 #include "chrome/browser/ui/views/payments/shipping_address_editor_view_controll er.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "chrome/browser/ui/views/payments/payment_request_dialog_view.h" 15 #include "chrome/browser/ui/views/payments/payment_request_dialog_view.h"
16 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
16 #include "chrome/browser/ui/views/payments/validating_combobox.h" 17 #include "chrome/browser/ui/views/payments/validating_combobox.h"
17 #include "chrome/browser/ui/views/payments/validating_textfield.h" 18 #include "chrome/browser/ui/views/payments/validating_textfield.h"
18 #include "chrome/grit/generated_resources.h" 19 #include "chrome/grit/generated_resources.h"
19 #include "components/autofill/core/browser/autofill_address_util.h" 20 #include "components/autofill/core/browser/autofill_address_util.h"
20 #include "components/autofill/core/browser/autofill_country.h" 21 #include "components/autofill/core/browser/autofill_country.h"
21 #include "components/autofill/core/browser/autofill_type.h" 22 #include "components/autofill/core/browser/autofill_type.h"
22 #include "components/autofill/core/browser/country_combobox_model.h" 23 #include "components/autofill/core/browser/country_combobox_model.h"
23 #include "components/autofill/core/browser/field_types.h" 24 #include "components/autofill/core/browser/field_types.h"
24 #include "components/autofill/core/browser/personal_data_manager.h" 25 #include "components/autofill/core/browser/personal_data_manager.h"
25 #include "components/autofill/core/browser/region_combobox_model.h" 26 #include "components/autofill/core/browser/region_combobox_model.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 NOTREACHED(); 62 NOTREACHED();
62 return autofill::UNKNOWN_TYPE; 63 return autofill::UNKNOWN_TYPE;
63 } 64 }
64 65
65 } // namespace 66 } // namespace
66 67
67 ShippingAddressEditorViewController::ShippingAddressEditorViewController( 68 ShippingAddressEditorViewController::ShippingAddressEditorViewController(
68 PaymentRequestSpec* spec, 69 PaymentRequestSpec* spec,
69 PaymentRequestState* state, 70 PaymentRequestState* state,
70 PaymentRequestDialogView* dialog, 71 PaymentRequestDialogView* dialog,
72 BackNavigationType back_navigation_type,
71 base::OnceClosure on_edited, 73 base::OnceClosure on_edited,
72 base::OnceCallback<void(const autofill::AutofillProfile&)> on_added, 74 base::OnceCallback<void(const autofill::AutofillProfile&)> on_added,
73 autofill::AutofillProfile* profile) 75 autofill::AutofillProfile* profile)
74 : EditorViewController(spec, state, dialog), 76 : EditorViewController(spec, state, dialog, back_navigation_type),
75 on_edited_(std::move(on_edited)), 77 on_edited_(std::move(on_edited)),
76 on_added_(std::move(on_added)), 78 on_added_(std::move(on_added)),
77 profile_to_edit_(profile), 79 profile_to_edit_(profile),
78 chosen_country_index_(0), 80 chosen_country_index_(0),
79 failed_to_load_region_data_(false) { 81 failed_to_load_region_data_(false) {
80 UpdateEditorFields(); 82 UpdateEditorFields();
81 } 83 }
82 84
83 ShippingAddressEditorViewController::~ShippingAddressEditorViewController() {} 85 ShippingAddressEditorViewController::~ShippingAddressEditorViewController() {}
84 86
85 std::unique_ptr<views::View> 87 std::unique_ptr<views::View>
86 ShippingAddressEditorViewController::CreateHeaderView() { 88 ShippingAddressEditorViewController::CreateHeaderView() {
87 return base::MakeUnique<views::View>(); 89 return base::MakeUnique<views::View>();
88 } 90 }
89 91
92 std::unique_ptr<views::View>
93 ShippingAddressEditorViewController::CreateCustomFieldsView() {
Mathieu 2017/05/04 20:29:19 A pattern that we sometimes use is that you could
MAD 2017/05/05 00:50:07 I was following the pattern used by other similar
Mathieu 2017/05/05 13:51:33 I have a slightly preference for what I suggested
MAD 2017/05/05 18:32:34 OK, then I'll change all the others too. Note that
94 return base::MakeUnique<views::View>();
95 }
96
90 std::vector<EditorField> 97 std::vector<EditorField>
91 ShippingAddressEditorViewController::GetFieldDefinitions() { 98 ShippingAddressEditorViewController::GetFieldDefinitions() {
92 return editor_fields_; 99 return editor_fields_;
93 } 100 }
94 101
95 base::string16 ShippingAddressEditorViewController::GetInitialValueForType( 102 base::string16 ShippingAddressEditorViewController::GetInitialValueForType(
96 autofill::ServerFieldType type) { 103 autofill::ServerFieldType type) {
97 // Temporary profile has precedence over profile to edit since its existence 104 // Temporary profile has precedence over profile to edit since its existence
98 // is based on having unsaved stated to restore. 105 // is based on having unsaved stated to restore.
99 if (temporary_profile_.get()) { 106 if (temporary_profile_.get()) {
100 return temporary_profile_->GetInfo(autofill::AutofillType(type), 107 return temporary_profile_->GetInfo(autofill::AutofillType(type),
101 state()->GetApplicationLocale()); 108 state()->GetApplicationLocale());
102 } 109 }
103 110
104 if (!profile_to_edit_) 111 if (!profile_to_edit_)
105 return base::string16(); 112 return base::string16();
106 113
107 return profile_to_edit_->GetInfo(autofill::AutofillType(type), 114 return profile_to_edit_->GetInfo(autofill::AutofillType(type),
108 state()->GetApplicationLocale()); 115 state()->GetApplicationLocale());
109 } 116 }
110 117
111 bool ShippingAddressEditorViewController::ValidateModelAndSave() { 118 bool ShippingAddressEditorViewController::ValidateModelAndSave() {
112 // To validate the profile first, we use a temporary object. 119 // To validate the profile first, we use a temporary object.
113 autofill::AutofillProfile profile; 120 autofill::AutofillProfile profile;
114 if (!SaveFieldsToProfile(&profile, /*ignore_errors=*/false)) 121 if (!SaveFieldsToProfile(&profile, /*ignore_errors=*/false))
115 return false; 122 return false;
116
117 if (!profile_to_edit_) { 123 if (!profile_to_edit_) {
118 // Add the profile (will not add a duplicate). 124 // Add the profile (will not add a duplicate).
119 profile.set_origin(autofill::kSettingsOrigin); 125 profile.set_origin(autofill::kSettingsOrigin);
120 state()->GetPersonalDataManager()->AddProfile(profile); 126 state()->GetPersonalDataManager()->AddProfile(profile);
121 std::move(on_added_).Run(profile); 127 std::move(on_added_).Run(profile);
122 on_edited_.Reset(); 128 on_edited_.Reset();
123 } else { 129 } else {
124 // Copy the temporary object's data to the object to be edited. Prefer this 130 // Copy the temporary object's data to the object to be edited. Prefer this
125 // method to copying |profile| into |profile_to_edit_|, because the latter 131 // method to copying |profile| into |profile_to_edit_|, because the latter
126 // object needs to retain other properties (use count, use date, guid, 132 // object needs to retain other properties (use count, use date, guid,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 temporary_profile_.reset(nullptr); 222 temporary_profile_.reset(nullptr);
217 } 223 }
218 224
219 base::string16 ShippingAddressEditorViewController::GetSheetTitle() { 225 base::string16 ShippingAddressEditorViewController::GetSheetTitle() {
220 // TODO(crbug.com/712074): Editor title should reflect the missing information 226 // TODO(crbug.com/712074): Editor title should reflect the missing information
221 // in the case that one or more fields are missing. 227 // in the case that one or more fields are missing.
222 return profile_to_edit_ ? l10n_util::GetStringUTF16(IDS_PAYMENTS_EDIT_ADDRESS) 228 return profile_to_edit_ ? l10n_util::GetStringUTF16(IDS_PAYMENTS_EDIT_ADDRESS)
223 : l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_ADDRESS); 229 : l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_ADDRESS);
224 } 230 }
225 231
232 std::unique_ptr<views::Button>
233 ShippingAddressEditorViewController::CreatePrimaryButton() {
234 std::unique_ptr<views::Button> button(
235 EditorViewController::CreatePrimaryButton());
236 button->set_id(static_cast<int>(DialogViewID::SAVE_ADDRESS_BUTTON));
237 return button;
238 }
239
226 void ShippingAddressEditorViewController::UpdateEditorFields() { 240 void ShippingAddressEditorViewController::UpdateEditorFields() {
227 editor_fields_.clear(); 241 editor_fields_.clear();
228 std::string chosen_country_code; 242 std::string chosen_country_code;
229 if (chosen_country_index_ < country_codes_.size()) 243 if (chosen_country_index_ < country_codes_.size())
230 chosen_country_code = country_codes_[chosen_country_index_]; 244 chosen_country_code = country_codes_[chosen_country_index_];
231 245
232 std::unique_ptr<base::ListValue> components(new base::ListValue); 246 std::unique_ptr<base::ListValue> components(new base::ListValue);
233 std::string unused; 247 std::string unused;
234 autofill::GetAddressComponents(chosen_country_code, 248 autofill::GetAddressComponents(chosen_country_code,
235 state()->GetApplicationLocale(), 249 state()->GetApplicationLocale(),
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 controller_->country_codes_[controller_->chosen_country_index_])) { 419 controller_->country_codes_[controller_->chosen_country_index_])) {
406 controller_->DisplayErrorMessageForField( 420 controller_->DisplayErrorMessageForField(
407 field_, l10n_util::GetStringUTF16( 421 field_, l10n_util::GetStringUTF16(
408 IDS_PAYMENTS_PHONE_INVALID_VALIDATION_MESSAGE)); 422 IDS_PAYMENTS_PHONE_INVALID_VALIDATION_MESSAGE));
409 return false; 423 return false;
410 } 424 }
411 // As long as other field types are non-empty, they are valid. 425 // As long as other field types are non-empty, they are valid.
412 controller_->DisplayErrorMessageForField(field_, base::ASCIIToUTF16("")); 426 controller_->DisplayErrorMessageForField(field_, base::ASCIIToUTF16(""));
413 return true; 427 return true;
414 } 428 }
415
416 bool is_required_valid = !field_.required; 429 bool is_required_valid = !field_.required;
417 const base::string16 displayed_message = 430 const base::string16 displayed_message =
418 is_required_valid ? base::ASCIIToUTF16("") 431 is_required_valid ? base::ASCIIToUTF16("")
419 : l10n_util::GetStringUTF16( 432 : l10n_util::GetStringUTF16(
420 IDS_PAYMENTS_FIELD_REQUIRED_VALIDATION_MESSAGE); 433 IDS_PAYMENTS_FIELD_REQUIRED_VALIDATION_MESSAGE);
421 controller_->DisplayErrorMessageForField(field_, displayed_message); 434 controller_->DisplayErrorMessageForField(field_, displayed_message);
422 return is_required_valid; 435 return is_required_valid;
423 } 436 }
424 437
425 } // namespace payments 438 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698