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

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

Issue 2949813003: [Payment Request] Formats phone number and credit card number in editors. (Closed)
Patch Set: Fixed broken tests Created 3 years, 6 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
« no previous file with comments | « no previous file | components/payments/core/payment_request_data_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/credit_card_editor_view_controller.h" 5 #include "chrome/browser/ui/views/payments/credit_card_editor_view_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 16 matching lines...) Expand all
27 #include "components/autofill/core/browser/autofill_data_util.h" 27 #include "components/autofill/core/browser/autofill_data_util.h"
28 #include "components/autofill/core/browser/autofill_type.h" 28 #include "components/autofill/core/browser/autofill_type.h"
29 #include "components/autofill/core/browser/credit_card.h" 29 #include "components/autofill/core/browser/credit_card.h"
30 #include "components/autofill/core/browser/field_types.h" 30 #include "components/autofill/core/browser/field_types.h"
31 #include "components/autofill/core/browser/personal_data_manager.h" 31 #include "components/autofill/core/browser/personal_data_manager.h"
32 #include "components/autofill/core/browser/validation.h" 32 #include "components/autofill/core/browser/validation.h"
33 #include "components/autofill/core/common/autofill_clock.h" 33 #include "components/autofill/core/common/autofill_clock.h"
34 #include "components/autofill/core/common/autofill_constants.h" 34 #include "components/autofill/core/common/autofill_constants.h"
35 #include "components/payments/content/payment_request_spec.h" 35 #include "components/payments/content/payment_request_spec.h"
36 #include "components/payments/content/payment_request_state.h" 36 #include "components/payments/content/payment_request_state.h"
37 #include "components/payments/core/payment_request_data_util.h"
37 #include "components/strings/grit/components_strings.h" 38 #include "components/strings/grit/components_strings.h"
38 #include "ui/base/l10n/l10n_util.h" 39 #include "ui/base/l10n/l10n_util.h"
39 #include "ui/gfx/geometry/insets.h" 40 #include "ui/gfx/geometry/insets.h"
40 #include "ui/native_theme/native_theme.h" 41 #include "ui/native_theme/native_theme.h"
41 #include "ui/views/controls/button/md_text_button.h" 42 #include "ui/views/controls/button/md_text_button.h"
42 #include "ui/views/controls/image_view.h" 43 #include "ui/views/controls/image_view.h"
43 #include "ui/views/controls/label.h" 44 #include "ui/views/controls/label.h"
44 #include "ui/views/controls/textfield/textfield.h" 45 #include "ui/views/controls/textfield/textfield.h"
45 #include "ui/views/layout/box_layout.h" 46 #include "ui/views/layout/box_layout.h"
46 #include "ui/views/layout/fill_layout.h" 47 #include "ui/views/layout/fill_layout.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 void ComboboxModelChanged(views::Combobox* combobox) override {} 130 void ComboboxModelChanged(views::Combobox* combobox) override {}
130 131
131 private: 132 private:
132 EditorViewController* controller_; 133 EditorViewController* controller_;
133 const std::string app_locale_; 134 const std::string app_locale_;
134 bool initially_valid_; 135 bool initially_valid_;
135 136
136 DISALLOW_COPY_AND_ASSIGN(ExpirationDateValidationDelegate); 137 DISALLOW_COPY_AND_ASSIGN(ExpirationDateValidationDelegate);
137 }; 138 };
138 139
139 // Formats card number. For example, "4111111111111111" is formatted into
140 // "4111 1111 1111 1111".
141 base::string16 FormatCardNumber(const base::string16& text) {
142 // Do not format masked card numbers, which start with a letter.
143 base::string16 number = autofill::CreditCard::StripSeparators(text);
144 if (number.empty() || !base::IsAsciiDigit(number[0]))
145 return text;
146
147 std::vector<size_t> positions = {4U, 9U, 14U};
148 if (autofill::CreditCard::GetCardNetwork(number) ==
149 autofill::kAmericanExpressCard) {
150 positions = {4U, 11U};
151 }
152
153 static const base::char16 kSeparator = base::ASCIIToUTF16(" ")[0];
154 for (size_t i : positions) {
155 if (number.size() > i)
156 number.insert(i, 1U, kSeparator);
157 }
158
159 return number;
160 }
161
162 } // namespace 140 } // namespace
163 141
164 CreditCardEditorViewController::CreditCardEditorViewController( 142 CreditCardEditorViewController::CreditCardEditorViewController(
165 PaymentRequestSpec* spec, 143 PaymentRequestSpec* spec,
166 PaymentRequestState* state, 144 PaymentRequestState* state,
167 PaymentRequestDialogView* dialog, 145 PaymentRequestDialogView* dialog,
168 BackNavigationType back_navigation, 146 BackNavigationType back_navigation,
169 int next_ui_tag, 147 int next_ui_tag,
170 base::OnceClosure on_edited, 148 base::OnceClosure on_edited,
171 base::OnceCallback<void(const autofill::CreditCard&)> on_added, 149 base::OnceCallback<void(const autofill::CreditCard&)> on_added,
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 } 339 }
362 340
363 base::string16 CreditCardEditorViewController::GetInitialValueForType( 341 base::string16 CreditCardEditorViewController::GetInitialValueForType(
364 autofill::ServerFieldType type) { 342 autofill::ServerFieldType type) {
365 if (!credit_card_to_edit_ || type == kBillingAddressType) 343 if (!credit_card_to_edit_ || type == kBillingAddressType)
366 return base::string16(); 344 return base::string16();
367 345
368 base::string16 info = credit_card_to_edit_->GetInfo( 346 base::string16 info = credit_card_to_edit_->GetInfo(
369 autofill::AutofillType(type), state()->GetApplicationLocale()); 347 autofill::AutofillType(type), state()->GetApplicationLocale());
370 348
371 return type == autofill::CREDIT_CARD_NUMBER ? FormatCardNumber(info) : info; 349 return type == autofill::CREDIT_CARD_NUMBER
350 ? data_util::FormatCardNumberForDisplay(info)
351 : info;
372 } 352 }
373 353
374 bool CreditCardEditorViewController::ValidateModelAndSave() { 354 bool CreditCardEditorViewController::ValidateModelAndSave() {
375 if (IsEditingServerCard()) { 355 if (IsEditingServerCard()) {
376 views::Combobox* address_combobox = static_cast<views::Combobox*>( 356 views::Combobox* address_combobox = static_cast<views::Combobox*>(
377 dialog()->GetViewByID(GetInputFieldViewId(kBillingAddressType))); 357 dialog()->GetViewByID(GetInputFieldViewId(kBillingAddressType)));
378 if (address_combobox->invalid()) 358 if (address_combobox->invalid())
379 return false; 359 return false;
380 360
381 autofill::AddressComboboxModel* model = 361 autofill::AddressComboboxModel* model =
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 ~CreditCardValidationDelegate() {} 600 ~CreditCardValidationDelegate() {}
621 601
622 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 602 bool CreditCardEditorViewController::CreditCardValidationDelegate::
623 ShouldFormat() { 603 ShouldFormat() {
624 return field_.type == autofill::CREDIT_CARD_NUMBER; 604 return field_.type == autofill::CREDIT_CARD_NUMBER;
625 } 605 }
626 606
627 base::string16 607 base::string16
628 CreditCardEditorViewController::CreditCardValidationDelegate::Format( 608 CreditCardEditorViewController::CreditCardValidationDelegate::Format(
629 const base::string16& text) { 609 const base::string16& text) {
630 return FormatCardNumber(text); 610 return data_util::FormatCardNumberForDisplay(text);
631 } 611 }
632 612
633 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 613 bool CreditCardEditorViewController::CreditCardValidationDelegate::
634 IsValidTextfield(views::Textfield* textfield) { 614 IsValidTextfield(views::Textfield* textfield) {
635 return ValidateValue(textfield->text(), nullptr); 615 return ValidateValue(textfield->text(), nullptr);
636 } 616 }
637 617
638 bool CreditCardEditorViewController::CreditCardValidationDelegate:: 618 bool CreditCardEditorViewController::CreditCardValidationDelegate::
639 IsValidCombobox(views::Combobox* combobox) { 619 IsValidCombobox(views::Combobox* combobox) {
640 return ValidateCombobox(combobox, nullptr); 620 return ValidateCombobox(combobox, nullptr);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 return ValidateValue(combobox->GetTextForRow(combobox->selected_index()), 696 return ValidateValue(combobox->GetTextForRow(combobox->selected_index()),
717 error_message); 697 error_message);
718 } 698 }
719 699
720 bool CreditCardEditorViewController::GetSheetId(DialogViewID* sheet_id) { 700 bool CreditCardEditorViewController::GetSheetId(DialogViewID* sheet_id) {
721 *sheet_id = DialogViewID::CREDIT_CARD_EDITOR_SHEET; 701 *sheet_id = DialogViewID::CREDIT_CARD_EDITOR_SHEET;
722 return true; 702 return true;
723 } 703 }
724 704
725 } // namespace payments 705 } // namespace payments
OLDNEW
« no previous file with comments | « no previous file | components/payments/core/payment_request_data_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698