Chromium Code Reviews| Index: components/autofill/core/browser/autofill_type.cc |
| diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc |
| index d54571b26c550befb9788115af1d44d1f8cf8e97..4766b7a89212bcb678c75244843066a4d11f086f 100644 |
| --- a/components/autofill/core/browser/autofill_type.cc |
| +++ b/components/autofill/core/browser/autofill_type.cc |
| @@ -4,13 +4,13 @@ |
| #include "components/autofill/core/browser/autofill_type.h" |
| -#include <ostream> |
| - |
| #include "base/logging.h" |
| namespace autofill { |
| -AutofillType::AutofillType(NativeFieldType field_type) { |
| +AutofillType::AutofillType(NativeFieldType field_type) |
| + : html_type_(HTML_TYPE_UNKNOWN), |
| + html_mode_(HTML_MODE_NONE) { |
| if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) || |
| (field_type >= 15 && field_type <= 19) || |
| (field_type >= 25 && field_type <= 29) || |
| @@ -21,13 +21,24 @@ AutofillType::AutofillType(NativeFieldType field_type) { |
| } |
| } |
| +AutofillType::AutofillType(HtmlFieldType field_type, HtmlFieldMode mode) |
| + : native_type_(UNKNOWN_TYPE), |
| + html_type_(field_type), |
| + html_mode_(mode) { |
|
Evan Stade
2013/08/05 18:47:24
nit: {} on one line
Ilya Sherman
2013/08/06 05:05:39
Done.
|
| +} |
| + |
| + |
| AutofillType::AutofillType(const AutofillType& autofill_type) { |
| *this = autofill_type; |
| } |
| AutofillType& AutofillType::operator=(const AutofillType& autofill_type) { |
| - if (this != &autofill_type) |
| + if (this != &autofill_type) { |
| this->native_type_ = autofill_type.native_type_; |
| + this->html_type_ = autofill_type.html_type_; |
| + this->html_mode_ = autofill_type.html_mode_; |
| + } |
| + |
| return *this; |
| } |
| @@ -98,17 +109,84 @@ FieldTypeGroup AutofillType::group() const { |
| case COMPANY_NAME: |
| return COMPANY; |
| - default: |
| + case NO_SERVER_DATA: |
| + case EMPTY_TYPE: |
| + case PHONE_FAX_NUMBER: |
| + case PHONE_FAX_CITY_CODE: |
| + case PHONE_FAX_COUNTRY_CODE: |
| + case PHONE_FAX_CITY_AND_NUMBER: |
| + case PHONE_FAX_WHOLE_NUMBER: |
| + case FIELD_WITH_DEFAULT_VALUE: |
| + return NO_GROUP; |
| + |
| + case MAX_VALID_FIELD_TYPE: |
| + NOTREACHED(); |
| return NO_GROUP; |
| + |
| + case UNKNOWN_TYPE: |
| + break; |
| + } |
| + |
| + switch (html_type_) { |
| + case HTML_TYPE_NAME: |
| + case HTML_TYPE_GIVEN_NAME: |
| + case HTML_TYPE_ADDITIONAL_NAME: |
| + case HTML_TYPE_ADDITIONAL_NAME_INITIAL: |
| + case HTML_TYPE_FAMILY_NAME: |
| + return html_mode_ == HTML_MODE_BILLING ? NAME_BILLING : NAME; |
| + |
| + case HTML_TYPE_ORGANIZATION: |
| + return COMPANY; |
| + |
| + case HTML_TYPE_STREET_ADDRESS: |
| + case HTML_TYPE_ADDRESS_LINE1: |
| + case HTML_TYPE_ADDRESS_LINE2: |
| + case HTML_TYPE_LOCALITY: |
| + case HTML_TYPE_REGION: |
| + case HTML_TYPE_COUNTRY_CODE: |
| + case HTML_TYPE_COUNTRY_NAME: |
| + case HTML_TYPE_POSTAL_CODE: |
| + return html_mode_ == HTML_MODE_BILLING ? ADDRESS_BILLING : ADDRESS_HOME; |
| + |
| + case HTML_TYPE_CREDIT_CARD_NAME: |
| + case HTML_TYPE_CREDIT_CARD_NUMBER: |
| + case HTML_TYPE_CREDIT_CARD_EXP: |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR: |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR: |
| + case HTML_TYPE_CREDIT_CARD_EXP_MONTH: |
| + case HTML_TYPE_CREDIT_CARD_EXP_YEAR: |
| + case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR: |
| + case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR: |
| + case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE: |
| + case HTML_TYPE_CREDIT_CARD_TYPE: |
| + return CREDIT_CARD; |
| + |
| + case HTML_TYPE_TEL: |
| + case HTML_TYPE_TEL_COUNTRY_CODE: |
| + case HTML_TYPE_TEL_NATIONAL: |
| + case HTML_TYPE_TEL_AREA_CODE: |
| + case HTML_TYPE_TEL_LOCAL: |
| + case HTML_TYPE_TEL_LOCAL_PREFIX: |
| + case HTML_TYPE_TEL_LOCAL_SUFFIX: |
| + return html_mode_ == HTML_MODE_BILLING ? PHONE_BILLING : PHONE_HOME; |
| + |
| + case HTML_TYPE_EMAIL: |
| + return EMAIL; |
| + |
| + case HTML_TYPE_UNKNOWN: |
| + break; |
| } |
| + |
| + return NO_GROUP; |
| } |
| -// static |
| -NativeFieldType AutofillType::GetEquivalentFieldType( |
| - NativeFieldType field_type) { |
| - // When billing information is requested from the profile we map to the |
| - // home address equivalents. |
| - switch (field_type) { |
| +bool AutofillType::IsUnknown() const { |
| + return native_type_ == UNKNOWN_TYPE && html_type_ == HTML_TYPE_UNKNOWN; |
| +} |
| + |
| +NativeFieldType AutofillType::GetEquivalentNativeType() const { |
| + // Map billing types to the equivalent non-billing types. |
| + switch (native_type_) { |
| case ADDRESS_BILLING_LINE1: |
| return ADDRESS_HOME_LINE1; |
| @@ -163,9 +241,121 @@ NativeFieldType AutofillType::GetEquivalentFieldType( |
| case NAME_BILLING_SUFFIX: |
| return NAME_SUFFIX; |
| + case UNKNOWN_TYPE: |
| + break; // Try to parse HTML types instead. |
| + |
| default: |
| - return field_type; |
| + return native_type_; |
| + } |
| + |
| + switch (html_type_) { |
| + case HTML_TYPE_UNKNOWN: |
| + return UNKNOWN_TYPE; |
| + |
| + case HTML_TYPE_NAME: |
| + return NAME_FULL; |
| + |
| + case HTML_TYPE_GIVEN_NAME: |
| + return NAME_FIRST; |
| + |
| + case HTML_TYPE_ADDITIONAL_NAME: |
| + return NAME_MIDDLE; |
| + |
| + case HTML_TYPE_FAMILY_NAME: |
| + return NAME_LAST; |
| + |
| + case HTML_TYPE_ORGANIZATION: |
| + return COMPANY_NAME; |
| + |
| + case HTML_TYPE_STREET_ADDRESS: |
| + // There is no exact equivalent native type for street address. |
| + return UNKNOWN_TYPE; |
| + |
| + case HTML_TYPE_ADDRESS_LINE1: |
| + return ADDRESS_HOME_LINE1; |
| + |
| + case HTML_TYPE_ADDRESS_LINE2: |
| + return ADDRESS_HOME_LINE2; |
| + |
| + case HTML_TYPE_LOCALITY: |
| + return ADDRESS_HOME_CITY; |
| + |
| + case HTML_TYPE_REGION: |
| + return ADDRESS_HOME_STATE; |
| + |
| + case HTML_TYPE_COUNTRY_CODE: |
| + case HTML_TYPE_COUNTRY_NAME: |
| + return ADDRESS_HOME_COUNTRY; |
| + |
| + case HTML_TYPE_POSTAL_CODE: |
| + return ADDRESS_HOME_ZIP; |
| + |
| + case HTML_TYPE_CREDIT_CARD_NAME: |
| + return CREDIT_CARD_NAME; |
| + |
| + case HTML_TYPE_CREDIT_CARD_NUMBER: |
| + return CREDIT_CARD_NUMBER; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP: |
| + return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_MONTH: |
| + return CREDIT_CARD_EXP_MONTH; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_YEAR: |
| + return CREDIT_CARD_EXP_4_DIGIT_YEAR; |
| + |
| + case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE: |
| + return CREDIT_CARD_VERIFICATION_CODE; |
| + |
| + case HTML_TYPE_CREDIT_CARD_TYPE: |
| + return CREDIT_CARD_TYPE; |
| + |
| + case HTML_TYPE_TEL: |
| + return PHONE_HOME_WHOLE_NUMBER; |
| + |
| + case HTML_TYPE_TEL_COUNTRY_CODE: |
| + return PHONE_HOME_COUNTRY_CODE; |
| + |
| + case HTML_TYPE_TEL_NATIONAL: |
| + return PHONE_HOME_CITY_AND_NUMBER; |
| + |
| + case HTML_TYPE_TEL_AREA_CODE: |
| + return PHONE_HOME_CITY_CODE; |
| + |
| + case HTML_TYPE_TEL_LOCAL: |
| + case HTML_TYPE_TEL_LOCAL_PREFIX: |
| + case HTML_TYPE_TEL_LOCAL_SUFFIX: |
| + return PHONE_HOME_NUMBER; |
| + |
| + case HTML_TYPE_EMAIL: |
| + return EMAIL_ADDRESS; |
| + |
| + case HTML_TYPE_ADDITIONAL_NAME_INITIAL: |
| + return NAME_MIDDLE_INITIAL; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR: |
| + return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR: |
| + return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR: |
| + return CREDIT_CARD_EXP_2_DIGIT_YEAR; |
| + |
| + case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR: |
| + return CREDIT_CARD_EXP_4_DIGIT_YEAR; |
| } |
| + |
| + NOTREACHED(); |
| + return UNKNOWN_TYPE; |
| +} |
| + |
| +NativeFieldType AutofillType::GetApproximateNativeFieldType() const { |
| + if (html_type_ == HTML_TYPE_STREET_ADDRESS) |
| + return ADDRESS_HOME_LINE1; |
| + |
| + return GetEquivalentNativeType(); |
| } |
| // static |
| @@ -231,13 +421,15 @@ NativeFieldType AutofillType::GetEquivalentBillingFieldType( |
| } |
| } |
| -// static |
| -std::string AutofillType::FieldTypeToString(NativeFieldType type) { |
| - switch (type) { |
| +std::string AutofillType::ToString() const { |
| + if (IsUnknown()) |
| + return "UNKNOWN_TYPE"; |
| + |
| + switch (native_type_) { |
| case NO_SERVER_DATA: |
| return "NO_SERVER_DATA"; |
| case UNKNOWN_TYPE: |
| - return "UNKNOWN_TYPE"; |
| + break; // Should be handled in the HTML type handling code below. |
| case EMPTY_TYPE: |
| return "EMPTY_TYPE"; |
| case NAME_FIRST: |
| @@ -349,6 +541,80 @@ std::string AutofillType::FieldTypeToString(NativeFieldType type) { |
| case MAX_VALID_FIELD_TYPE: |
| return std::string(); |
| } |
| + |
| + switch (html_type_) { |
| + case HTML_TYPE_UNKNOWN: |
| + NOTREACHED(); |
| + break; |
| + case HTML_TYPE_NAME: |
| + return "HTML_TYPE_NAME"; |
| + case HTML_TYPE_GIVEN_NAME: |
| + return "HTML_TYPE_GIVEN_NAME"; |
| + case HTML_TYPE_ADDITIONAL_NAME: |
| + return "HTML_TYPE_ADDITIONAL_NAME"; |
| + case HTML_TYPE_FAMILY_NAME: |
| + return "HTML_TYPE_FAMILY_NAME"; |
| + case HTML_TYPE_ORGANIZATION: |
| + return "HTML_TYPE_ORGANIZATION"; |
| + case HTML_TYPE_STREET_ADDRESS: |
| + return "HTML_TYPE_STREET_ADDRESS"; |
| + case HTML_TYPE_ADDRESS_LINE1: |
| + return "HTML_TYPE_ADDRESS_LINE1"; |
| + case HTML_TYPE_ADDRESS_LINE2: |
| + return "HTML_TYPE_ADDRESS_LINE2"; |
| + case HTML_TYPE_LOCALITY: |
| + return "HTML_TYPE_LOCALITY"; |
| + case HTML_TYPE_REGION: |
| + return "HTML_TYPE_REGION"; |
| + case HTML_TYPE_COUNTRY_CODE: |
| + return "HTML_TYPE_COUNTRY_CODE"; |
| + case HTML_TYPE_COUNTRY_NAME: |
| + return "HTML_TYPE_COUNTRY_NAME"; |
| + case HTML_TYPE_POSTAL_CODE: |
| + return "HTML_TYPE_POSTAL_CODE"; |
| + case HTML_TYPE_CREDIT_CARD_NAME: |
| + return "HTML_TYPE_CREDIT_CARD_NAME"; |
| + case HTML_TYPE_CREDIT_CARD_NUMBER: |
| + return "HTML_TYPE_CREDIT_CARD_NUMBER"; |
| + case HTML_TYPE_CREDIT_CARD_EXP: |
| + return "HTML_TYPE_CREDIT_CARD_EXP"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_MONTH: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_MONTH"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_YEAR: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_YEAR"; |
| + case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE: |
| + return "HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE"; |
| + case HTML_TYPE_CREDIT_CARD_TYPE: |
| + return "HTML_TYPE_CREDIT_CARD_TYPE"; |
| + case HTML_TYPE_TEL: |
| + return "HTML_TYPE_TEL"; |
| + case HTML_TYPE_TEL_COUNTRY_CODE: |
| + return "HTML_TYPE_TEL_COUNTRY_CODE"; |
| + case HTML_TYPE_TEL_NATIONAL: |
| + return "HTML_TYPE_TEL_NATIONAL"; |
| + case HTML_TYPE_TEL_AREA_CODE: |
| + return "HTML_TYPE_TEL_AREA_CODE"; |
| + case HTML_TYPE_TEL_LOCAL: |
| + return "HTML_TYPE_TEL_LOCAL"; |
| + case HTML_TYPE_TEL_LOCAL_PREFIX: |
| + return "HTML_TYPE_TEL_LOCAL_PREFIX"; |
| + case HTML_TYPE_TEL_LOCAL_SUFFIX: |
| + return "HTML_TYPE_TEL_LOCAL_SUFFIX"; |
| + case HTML_TYPE_EMAIL: |
| + return "HTML_TYPE_EMAIL"; |
| + case HTML_TYPE_ADDITIONAL_NAME_INITIAL: |
| + return "HTML_TYPE_ADDITIONAL_NAME_INITIAL"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR"; |
| + case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR: |
| + return "HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR"; |
| + } |
| + |
| + NOTREACHED(); |
| return std::string(); |
| } |