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..7f0d101fc53fce4219aaaa099343f43d894a3f1c 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; |
+ base::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() && !IsValidEmailAddress(value)) |
+ return ASCIIToUTF16("Are you sure this is right?"); |
+ break; |
+ |
+ case CREDIT_CARD_NUMBER: |
+ if (!value.empty() && !autofill::IsValidCreditCardNumber(value)) |
+ return ASCIIToUTF16("Are you sure this is right?"); |
+ break; |
+ |
+ case CREDIT_CARD_NAME: |
+ // Wallet requires a first and last name. |
+ if (!value.empty() && IsPayingWithWallet() && |
+ !IsCardHolderNameValidForWallet(value)) { |
+ return l10n_util::GetStringUTF16( |
+ IDS_AUTOFILL_DIALOG_VALIDATION_WALLET_REQUIRES_TWO_NAMES); |
+ } |
+ break; |
+ |
+ case CREDIT_CARD_EXP_MONTH: |
+ case CREDIT_CARD_EXP_4_DIGIT_YEAR: |
+ break; |
+ |
+ case CREDIT_CARD_VERIFICATION_CODE: |
+ if (!value.empty() && !autofill::IsValidCreditCardSecurityCode(value)) |
+ return ASCIIToUTF16("Are you sure this is right?"); |
+ break; |
+ |
+ case ADDRESS_HOME_LINE1: |
+ break; |
+ |
+ case ADDRESS_HOME_LINE2: |
+ return base::string16(); // 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; |
- if (value.empty()) |
- return ASCIIToUTF16("You forgot one"); |
+ 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))) |