Chromium Code Reviews| Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
| diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
| index f4679ab0fcc76c4fd0f6734d275125ccae5baa3d..c9355b40d6a6b1e26ed51c304d5de84961de52f4 100644 |
| --- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
| @@ -310,6 +310,13 @@ bool HasCompleteAndVerifiedData(const AutofillDataModel& data_model, |
| return true; |
| } |
| +bool IsCardHolderNameValidForWallet(const string16& name) { |
| + base::string16 whitespace_collapsed_name = CollapseWhitespace(name, true); |
| + std::vector<base::string16> split_name; |
| + SplitString(whitespace_collapsed_name, ' ', &split_name); |
| + return split_name.size() >= 2; |
| +} |
| + |
| } // namespace |
| AutofillDialogController::~AutofillDialogController() {} |
| @@ -1128,13 +1135,59 @@ gfx::Image AutofillDialogControllerImpl::IconForField( |
| string16 AutofillDialogControllerImpl::InputValidityMessage( |
| AutofillFieldType type, |
| const string16& value) const { |
| - if (InputIsValid(type, value)) |
| - return string16(); |
| + switch (AutofillType::GetEquivalentFieldType(type)) { |
| + case EMAIL_ADDRESS: |
| + if (value.empty()) |
|
Evan Stade
2013/05/24 19:22:54
how about:
if (!value.empty() && !IsValidEmailAdd
ahutter
2013/05/24 19:55:43
Done.
|
| + return ASCIIToUTF16("You forgot one"); |
| + return IsValidEmailAddress(value) ? |
| + base::string16() : |
| + ASCIIToUTF16("Are you sure this is right?"); |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
two newlines?
Evan Stade
2013/05/24 21:29:35
ah, no.
|
| - if (value.empty()) |
| - return ASCIIToUTF16("You forgot one"); |
| + case CREDIT_CARD_NUMBER: |
| + if (value.empty()) |
| + return ASCIIToUTF16("You forgot one"); |
| + return autofill::IsValidCreditCardNumber(value) ? |
| + base::string16() : |
| + ASCIIToUTF16("Are you sure this is right?"); |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
Done.
|
| + case CREDIT_CARD_NAME: |
| + // Wallet requires a first and last name. |
| + if (IsPayingWithWallet() && !IsCardHolderNameValidForWallet(value)) { |
| + return l10n_util::GetStringUTF16( |
|
Evan Stade
2013/05/24 19:22:54
too much indent
ahutter
2013/05/24 19:55:43
Done.
|
| + IDS_AUTOFILL_DIALOG_VALIDATION_WALLET_REQUIRES_TWO_NAMES); |
| + } |
| + break; |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
Done.
|
| + case CREDIT_CARD_EXP_MONTH: |
| + case CREDIT_CARD_EXP_4_DIGIT_YEAR: |
| + break; |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
Done.
|
| + case CREDIT_CARD_VERIFICATION_CODE: |
| + if (value.empty()) |
| + return ASCIIToUTF16("You forgot one"); |
| + return autofill::IsValidCreditCardSecurityCode(value) ? |
| + base::string16() : |
| + ASCIIToUTF16("Are you sure this is right?"); |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
two newlines?
Evan Stade
2013/05/24 21:29:35
ah, no.
|
| + |
| + case ADDRESS_HOME_LINE1: |
| + break; |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
Done.
|
| + case ADDRESS_HOME_LINE2: |
| + return base::string16(); // Line 2 is optional - always valid. |
|
Evan Stade
2013/05/24 19:22:54
\n
ahutter
2013/05/24 19:55:43
Done.
|
| + case ADDRESS_HOME_CITY: |
| + case ADDRESS_HOME_STATE: |
| + case ADDRESS_HOME_ZIP: |
| + case ADDRESS_HOME_COUNTRY: |
| + break; |
| + |
| + case NAME_FULL: // Used for shipping. |
| + break; |
| + |
| + case PHONE_HOME_WHOLE_NUMBER: // Used in billing section. |
| + break; |
| + |
| + default: |
| + NOTREACHED(); // Trying to validate unknown field. |
| + break; |
| + } |
| - return ASCIIToUTF16("Are you sure this is right?"); |
| + return !value.empty() ? base::string16() : ASCIIToUTF16("You forgot one"); |
| } |
| // TODO(estade): Replace all the error messages here with more helpful and |
| @@ -1175,7 +1228,8 @@ ValidityData AutofillDialogControllerImpl::InputsAreValid( |
| // If there is a credit card number and a CVC, validate them together. |
| if (field_values.count(CREDIT_CARD_NUMBER) && |
| field_values.count(CREDIT_CARD_VERIFICATION_CODE) && |
| - InputIsValid(CREDIT_CARD_NUMBER, field_values[CREDIT_CARD_NUMBER])) { |
| + InputValidityMessage(CREDIT_CARD_NUMBER, |
| + field_values[CREDIT_CARD_NUMBER]).empty()) { |
| if (!autofill::IsValidCreditCardSecurityCode( |
| field_values[CREDIT_CARD_VERIFICATION_CODE], |
| field_values[CREDIT_CARD_NUMBER])) { |
| @@ -2261,46 +2315,6 @@ bool AutofillDialogControllerImpl::IsManuallyEditingAnySection() const { |
| return false; |
| } |
| -bool AutofillDialogControllerImpl::InputIsValid(AutofillFieldType type, |
| - const string16& value) const { |
| - switch (AutofillType::GetEquivalentFieldType(type)) { |
| - case EMAIL_ADDRESS: |
| - return IsValidEmailAddress(value); |
| - |
| - case CREDIT_CARD_NUMBER: |
| - return autofill::IsValidCreditCardNumber(value); |
| - case CREDIT_CARD_NAME: |
| - break; |
| - case CREDIT_CARD_EXP_MONTH: |
| - case CREDIT_CARD_EXP_4_DIGIT_YEAR: |
| - break; |
| - case CREDIT_CARD_VERIFICATION_CODE: |
| - return autofill::IsValidCreditCardSecurityCode(value); |
| - |
| - case ADDRESS_HOME_LINE1: |
| - break; |
| - case ADDRESS_HOME_LINE2: |
| - return true; // Line 2 is optional - always valid. |
| - case ADDRESS_HOME_CITY: |
| - case ADDRESS_HOME_STATE: |
| - case ADDRESS_HOME_ZIP: |
| - case ADDRESS_HOME_COUNTRY: |
| - break; |
| - |
| - case NAME_FULL: // Used for shipping. |
| - break; |
| - |
| - case PHONE_HOME_WHOLE_NUMBER: // Used in billing section. |
| - break; |
| - |
| - default: |
| - NOTREACHED(); // Trying to validate unknown field. |
| - break; |
| - } |
| - |
| - return !value.empty(); |
| -} |
| - |
| bool AutofillDialogControllerImpl::AllSectionsAreValid() const { |
| for (size_t section = SECTION_MIN; section <= SECTION_MAX; ++section) { |
| if (!SectionIsValid(static_cast<DialogSection>(section))) |