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 14eeee0ee41487c0790b82d19996b7f6d04cc1f2..c47a9dfb0ceb311a00cce4f1bc8d669ecc698edc 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(ServerFieldType field_type) { |
+AutofillType::AutofillType(ServerFieldType 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,23 @@ AutofillType::AutofillType(ServerFieldType field_type) { |
} |
} |
+AutofillType::AutofillType(HtmlFieldType field_type, HtmlFieldMode mode) |
+ : server_type_(UNKNOWN_TYPE), |
+ html_type_(field_type), |
+ html_mode_(mode) {} |
+ |
+ |
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->server_type_ = autofill_type.server_type_; |
+ this->html_type_ = autofill_type.html_type_; |
+ this->html_mode_ = autofill_type.html_mode_; |
+ } |
+ |
return *this; |
} |
@@ -98,17 +108,83 @@ 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_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 |
-ServerFieldType AutofillType::GetEquivalentFieldType( |
- ServerFieldType 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 server_type_ == UNKNOWN_TYPE && html_type_ == HTML_TYPE_UNKNOWN; |
+} |
+ |
+ServerFieldType AutofillType::GetStorableType() const { |
+ // Map billing types to the equivalent non-billing types. |
+ switch (server_type_) { |
case ADDRESS_BILLING_LINE1: |
return ADDRESS_HOME_LINE1; |
@@ -163,9 +239,110 @@ ServerFieldType AutofillType::GetEquivalentFieldType( |
case NAME_BILLING_SUFFIX: |
return NAME_SUFFIX; |
+ case UNKNOWN_TYPE: |
+ break; // Try to parse HTML types instead. |
+ |
default: |
- return field_type; |
+ return server_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_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; |
} |
// static |
@@ -231,13 +408,15 @@ ServerFieldType AutofillType::GetEquivalentBillingFieldType( |
} |
} |
-// static |
-std::string AutofillType::FieldTypeToString(ServerFieldType type) { |
- switch (type) { |
+std::string AutofillType::ToString() const { |
+ if (IsUnknown()) |
+ return "UNKNOWN_TYPE"; |
+ |
+ switch (server_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 +528,78 @@ std::string AutofillType::FieldTypeToString(ServerFieldType 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_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(); |
} |