blob: 14eeee0ee41487c0790b82d19996b7f6d04cc1f2 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill/core/browser/autofill_type.h"
#include <ostream>
#include "base/logging.h"
namespace autofill {
AutofillType::AutofillType(ServerFieldType field_type) {
if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
(field_type >= 15 && field_type <= 19) ||
(field_type >= 25 && field_type <= 29) ||
(field_type >= 44 && field_type <= 50)) {
server_type_ = UNKNOWN_TYPE;
} else {
server_type_ = field_type;
}
}
AutofillType::AutofillType(const AutofillType& autofill_type) {
*this = autofill_type;
}
AutofillType& AutofillType::operator=(const AutofillType& autofill_type) {
if (this != &autofill_type)
this->server_type_ = autofill_type.server_type_;
return *this;
}
FieldTypeGroup AutofillType::group() const {
switch (server_type_) {
case NAME_FIRST:
case NAME_MIDDLE:
case NAME_LAST:
case NAME_MIDDLE_INITIAL:
case NAME_FULL:
case NAME_SUFFIX:
return NAME;
case NAME_BILLING_FIRST:
case NAME_BILLING_MIDDLE:
case NAME_BILLING_LAST:
case NAME_BILLING_MIDDLE_INITIAL:
case NAME_BILLING_FULL:
case NAME_BILLING_SUFFIX:
return NAME_BILLING;
case EMAIL_ADDRESS:
return EMAIL;
case PHONE_HOME_NUMBER:
case PHONE_HOME_CITY_CODE:
case PHONE_HOME_COUNTRY_CODE:
case PHONE_HOME_CITY_AND_NUMBER:
case PHONE_HOME_WHOLE_NUMBER:
return PHONE_HOME;
case PHONE_BILLING_NUMBER:
case PHONE_BILLING_CITY_CODE:
case PHONE_BILLING_COUNTRY_CODE:
case PHONE_BILLING_CITY_AND_NUMBER:
case PHONE_BILLING_WHOLE_NUMBER:
return PHONE_BILLING;
case ADDRESS_HOME_LINE1:
case ADDRESS_HOME_LINE2:
case ADDRESS_HOME_APT_NUM:
case ADDRESS_HOME_CITY:
case ADDRESS_HOME_STATE:
case ADDRESS_HOME_ZIP:
case ADDRESS_HOME_COUNTRY:
return ADDRESS_HOME;
case ADDRESS_BILLING_LINE1:
case ADDRESS_BILLING_LINE2:
case ADDRESS_BILLING_APT_NUM:
case ADDRESS_BILLING_CITY:
case ADDRESS_BILLING_STATE:
case ADDRESS_BILLING_ZIP:
case ADDRESS_BILLING_COUNTRY:
return ADDRESS_BILLING;
case CREDIT_CARD_NAME:
case CREDIT_CARD_NUMBER:
case CREDIT_CARD_EXP_MONTH:
case CREDIT_CARD_EXP_2_DIGIT_YEAR:
case CREDIT_CARD_EXP_4_DIGIT_YEAR:
case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
case CREDIT_CARD_TYPE:
case CREDIT_CARD_VERIFICATION_CODE:
return CREDIT_CARD;
case COMPANY_NAME:
return COMPANY;
default:
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) {
case ADDRESS_BILLING_LINE1:
return ADDRESS_HOME_LINE1;
case ADDRESS_BILLING_LINE2:
return ADDRESS_HOME_LINE2;
case ADDRESS_BILLING_APT_NUM:
return ADDRESS_HOME_APT_NUM;
case ADDRESS_BILLING_CITY:
return ADDRESS_HOME_CITY;
case ADDRESS_BILLING_STATE:
return ADDRESS_HOME_STATE;
case ADDRESS_BILLING_ZIP:
return ADDRESS_HOME_ZIP;
case ADDRESS_BILLING_COUNTRY:
return ADDRESS_HOME_COUNTRY;
case PHONE_BILLING_WHOLE_NUMBER:
return PHONE_HOME_WHOLE_NUMBER;
case PHONE_BILLING_NUMBER:
return PHONE_HOME_NUMBER;
case PHONE_BILLING_CITY_CODE:
return PHONE_HOME_CITY_CODE;
case PHONE_BILLING_COUNTRY_CODE:
return PHONE_HOME_COUNTRY_CODE;
case PHONE_BILLING_CITY_AND_NUMBER:
return PHONE_HOME_CITY_AND_NUMBER;
case NAME_BILLING_FIRST:
return NAME_FIRST;
case NAME_BILLING_MIDDLE:
return NAME_MIDDLE;
case NAME_BILLING_LAST:
return NAME_LAST;
case NAME_BILLING_MIDDLE_INITIAL:
return NAME_MIDDLE_INITIAL;
case NAME_BILLING_FULL:
return NAME_FULL;
case NAME_BILLING_SUFFIX:
return NAME_SUFFIX;
default:
return field_type;
}
}
// static
ServerFieldType AutofillType::GetEquivalentBillingFieldType(
ServerFieldType field_type) {
switch (field_type) {
case ADDRESS_HOME_LINE1:
return ADDRESS_BILLING_LINE1;
case ADDRESS_HOME_LINE2:
return ADDRESS_BILLING_LINE2;
case ADDRESS_HOME_APT_NUM:
return ADDRESS_BILLING_APT_NUM;
case ADDRESS_HOME_CITY:
return ADDRESS_BILLING_CITY;
case ADDRESS_HOME_STATE:
return ADDRESS_BILLING_STATE;
case ADDRESS_HOME_ZIP:
return ADDRESS_BILLING_ZIP;
case ADDRESS_HOME_COUNTRY:
return ADDRESS_BILLING_COUNTRY;
case PHONE_HOME_WHOLE_NUMBER:
return PHONE_BILLING_WHOLE_NUMBER;
case PHONE_HOME_NUMBER:
return PHONE_BILLING_NUMBER;
case PHONE_HOME_CITY_CODE:
return PHONE_BILLING_CITY_CODE;
case PHONE_HOME_COUNTRY_CODE:
return PHONE_BILLING_COUNTRY_CODE;
case PHONE_HOME_CITY_AND_NUMBER:
return PHONE_BILLING_CITY_AND_NUMBER;
case NAME_FIRST:
return NAME_BILLING_FIRST;
case NAME_MIDDLE:
return NAME_BILLING_MIDDLE;
case NAME_LAST:
return NAME_BILLING_LAST;
case NAME_MIDDLE_INITIAL:
return NAME_BILLING_MIDDLE_INITIAL;
case NAME_FULL:
return NAME_BILLING_FULL;
case NAME_SUFFIX:
return NAME_BILLING_SUFFIX;
default:
return field_type;
}
}
// static
std::string AutofillType::FieldTypeToString(ServerFieldType type) {
switch (type) {
case NO_SERVER_DATA:
return "NO_SERVER_DATA";
case UNKNOWN_TYPE:
return "UNKNOWN_TYPE";
case EMPTY_TYPE:
return "EMPTY_TYPE";
case NAME_FIRST:
return "NAME_FIRST";
case NAME_MIDDLE:
return "NAME_MIDDLE";
case NAME_LAST:
return "NAME_LAST";
case NAME_MIDDLE_INITIAL:
return "NAME_MIDDLE_INITIAL";
case NAME_FULL:
return "NAME_FULL";
case NAME_SUFFIX:
return "NAME_SUFFIX";
case NAME_BILLING_FIRST:
return "NAME_BILLING_FIRST";
case NAME_BILLING_MIDDLE:
return "NAME_BILLING_MIDDLE";
case NAME_BILLING_LAST:
return "NAME_BILLING_LAST";
case NAME_BILLING_MIDDLE_INITIAL:
return "NAME_BILLING_MIDDLE_INITIAL";
case NAME_BILLING_FULL:
return "NAME_BILLING_FULL";
case NAME_BILLING_SUFFIX:
return "NAME_BILLING_SUFFIX";
case EMAIL_ADDRESS:
return "EMAIL_ADDRESS";
case PHONE_HOME_NUMBER:
return "PHONE_HOME_NUMBER";
case PHONE_HOME_CITY_CODE:
return "PHONE_HOME_CITY_CODE";
case PHONE_HOME_COUNTRY_CODE:
return "PHONE_HOME_COUNTRY_CODE";
case PHONE_HOME_CITY_AND_NUMBER:
return "PHONE_HOME_CITY_AND_NUMBER";
case PHONE_HOME_WHOLE_NUMBER:
return "PHONE_HOME_WHOLE_NUMBER";
case PHONE_FAX_NUMBER:
return "PHONE_FAX_NUMBER";
case PHONE_FAX_CITY_CODE:
return "PHONE_FAX_CITY_CODE";
case PHONE_FAX_COUNTRY_CODE:
return "PHONE_FAX_COUNTRY_CODE";
case PHONE_FAX_CITY_AND_NUMBER:
return "PHONE_FAX_CITY_AND_NUMBER";
case PHONE_FAX_WHOLE_NUMBER:
return "PHONE_FAX_WHOLE_NUMBER";
case ADDRESS_HOME_LINE1:
return "ADDRESS_HOME_LINE1";
case ADDRESS_HOME_LINE2:
return "ADDRESS_HOME_LINE2";
case ADDRESS_HOME_APT_NUM:
return "ADDRESS_HOME_APT_NUM";
case ADDRESS_HOME_CITY:
return "ADDRESS_HOME_CITY";
case ADDRESS_HOME_STATE:
return "ADDRESS_HOME_STATE";
case ADDRESS_HOME_ZIP:
return "ADDRESS_HOME_ZIP";
case ADDRESS_HOME_COUNTRY:
return "ADDRESS_HOME_COUNTRY";
case ADDRESS_BILLING_LINE1:
return "ADDRESS_BILLING_LINE1";
case ADDRESS_BILLING_LINE2:
return "ADDRESS_BILLING_LINE2";
case ADDRESS_BILLING_APT_NUM:
return "ADDRESS_BILLING_APT_NUM";
case ADDRESS_BILLING_CITY:
return "ADDRESS_BILLING_CITY";
case ADDRESS_BILLING_STATE:
return "ADDRESS_BILLING_STATE";
case ADDRESS_BILLING_ZIP:
return "ADDRESS_BILLING_ZIP";
case ADDRESS_BILLING_COUNTRY:
return "ADDRESS_BILLING_COUNTRY";
case CREDIT_CARD_NAME:
return "CREDIT_CARD_NAME";
case CREDIT_CARD_NUMBER:
return "CREDIT_CARD_NUMBER";
case CREDIT_CARD_EXP_MONTH:
return "CREDIT_CARD_EXP_MONTH";
case CREDIT_CARD_EXP_2_DIGIT_YEAR:
return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
case CREDIT_CARD_EXP_4_DIGIT_YEAR:
return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
case CREDIT_CARD_TYPE:
return "CREDIT_CARD_TYPE";
case CREDIT_CARD_VERIFICATION_CODE:
return "CREDIT_CARD_VERIFICATION_CODE";
case COMPANY_NAME:
return "COMPANY_NAME";
case FIELD_WITH_DEFAULT_VALUE:
return "FIELD_WITH_DEFAULT_VALUE";
case PHONE_BILLING_NUMBER:
return "PHONE_BILLING_NUMBER";
case PHONE_BILLING_CITY_CODE:
return "PHONE_BILLING_CITY_CODE";
case PHONE_BILLING_COUNTRY_CODE:
return "PHONE_BILLING_COUNTRY_CODE";
case PHONE_BILLING_CITY_AND_NUMBER:
return "PHONE_BILLING_CITY_AND_NUMBER";
case PHONE_BILLING_WHOLE_NUMBER:
return "PHONE_BILLING_WHOLE_NUMBER";
case MAX_VALID_FIELD_TYPE:
return std::string();
}
return std::string();
}
// static
ServerFieldType AutofillType::StringToFieldType(const std::string& str) {
if (str == "NO_SERVER_DATA")
return NO_SERVER_DATA;
if (str == "UNKNOWN_TYPE")
return UNKNOWN_TYPE;
if (str == "EMPTY_TYPE")
return EMPTY_TYPE;
if (str == "NAME_FIRST")
return NAME_FIRST;
if (str == "NAME_MIDDLE")
return NAME_MIDDLE;
if (str == "NAME_LAST")
return NAME_LAST;
if (str == "NAME_MIDDLE_INITIAL")
return NAME_MIDDLE_INITIAL;
if (str == "NAME_FULL")
return NAME_FULL;
if (str == "NAME_SUFFIX")
return NAME_SUFFIX;
if (str == "NAME_BILLING_FIRST")
return NAME_BILLING_FIRST;
if (str == "NAME_BILLING_MIDDLE")
return NAME_BILLING_MIDDLE;
if (str == "NAME_BILLING_LAST")
return NAME_BILLING_LAST;
if (str == "NAME_BILLING_MIDDLE_INITIAL")
return NAME_BILLING_MIDDLE_INITIAL;
if (str == "NAME_BILLING_FULL")
return NAME_BILLING_FULL;
if (str == "NAME_BILLING_SUFFIX")
return NAME_BILLING_SUFFIX;
if (str == "EMAIL_ADDRESS")
return EMAIL_ADDRESS;
if (str == "PHONE_HOME_NUMBER")
return PHONE_HOME_NUMBER;
if (str == "PHONE_HOME_CITY_CODE")
return PHONE_HOME_CITY_CODE;
if (str == "PHONE_HOME_COUNTRY_CODE")
return PHONE_HOME_COUNTRY_CODE;
if (str == "PHONE_HOME_CITY_AND_NUMBER")
return PHONE_HOME_CITY_AND_NUMBER;
if (str == "PHONE_HOME_WHOLE_NUMBER")
return PHONE_HOME_WHOLE_NUMBER;
if (str == "ADDRESS_HOME_LINE1")
return ADDRESS_HOME_LINE1;
if (str == "ADDRESS_HOME_LINE2")
return ADDRESS_HOME_LINE2;
if (str == "ADDRESS_HOME_APT_NUM")
return ADDRESS_HOME_APT_NUM;
if (str == "ADDRESS_HOME_CITY")
return ADDRESS_HOME_CITY;
if (str == "ADDRESS_HOME_STATE")
return ADDRESS_HOME_STATE;
if (str == "ADDRESS_HOME_ZIP")
return ADDRESS_HOME_ZIP;
if (str == "ADDRESS_HOME_COUNTRY")
return ADDRESS_HOME_COUNTRY;
if (str == "ADDRESS_BILLING_LINE1")
return ADDRESS_BILLING_LINE1;
if (str == "ADDRESS_BILLING_LINE2")
return ADDRESS_BILLING_LINE2;
if (str == "ADDRESS_BILLING_APT_NUM")
return ADDRESS_BILLING_APT_NUM;
if (str == "ADDRESS_BILLING_CITY")
return ADDRESS_BILLING_CITY;
if (str == "ADDRESS_BILLING_STATE")
return ADDRESS_BILLING_STATE;
if (str == "ADDRESS_BILLING_ZIP")
return ADDRESS_BILLING_ZIP;
if (str == "ADDRESS_BILLING_COUNTRY")
return ADDRESS_BILLING_COUNTRY;
if (str == "CREDIT_CARD_NAME")
return CREDIT_CARD_NAME;
if (str == "CREDIT_CARD_NUMBER")
return CREDIT_CARD_NUMBER;
if (str == "CREDIT_CARD_EXP_MONTH")
return CREDIT_CARD_EXP_MONTH;
if (str == "CREDIT_CARD_EXP_2_DIGIT_YEAR")
return CREDIT_CARD_EXP_2_DIGIT_YEAR;
if (str == "CREDIT_CARD_EXP_4_DIGIT_YEAR")
return CREDIT_CARD_EXP_4_DIGIT_YEAR;
if (str == "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR")
return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR;
if (str == "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR")
return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
if (str == "CREDIT_CARD_TYPE")
return CREDIT_CARD_TYPE;
if (str == "CREDIT_CARD_VERIFICATION_CODE")
return CREDIT_CARD_VERIFICATION_CODE;
if (str == "COMPANY_NAME")
return COMPANY_NAME;
NOTREACHED() << "Unknown ServerFieldType " << str;
return UNKNOWN_TYPE;
}
} // namespace autofill