| 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();
|
| }
|
|
|
|
|