Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: components/autofill/core/browser/autofill_type.cc

Issue 22040002: [Autofill] Add a separate enumeration for HTML field type hints. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix browser test Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}
« no previous file with comments | « components/autofill/core/browser/autofill_type.h ('k') | components/autofill/core/browser/autofill_type_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698