Home | History | Annotate | Download | only in browser
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "components/autofill/core/browser/autofill_type.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace autofill {
     10 
     11 AutofillType::AutofillType(ServerFieldType field_type)
     12     : html_type_(HTML_TYPE_UNKNOWN),
     13       html_mode_(HTML_MODE_NONE) {
     14   if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
     15       (field_type >= 15 && field_type <= 19) ||
     16       (field_type >= 25 && field_type <= 29) ||
     17       (field_type >= 44 && field_type <= 50)) {
     18     server_type_ = UNKNOWN_TYPE;
     19   } else {
     20     server_type_ = field_type;
     21   }
     22 }
     23 
     24 AutofillType::AutofillType(HtmlFieldType field_type, HtmlFieldMode mode)
     25     : server_type_(UNKNOWN_TYPE),
     26       html_type_(field_type),
     27       html_mode_(mode) {}
     28 
     29 
     30 AutofillType::AutofillType(const AutofillType& autofill_type) {
     31   *this = autofill_type;
     32 }
     33 
     34 AutofillType& AutofillType::operator=(const AutofillType& autofill_type) {
     35   if (this != &autofill_type) {
     36     this->server_type_ = autofill_type.server_type_;
     37     this->html_type_ = autofill_type.html_type_;
     38     this->html_mode_ = autofill_type.html_mode_;
     39   }
     40 
     41   return *this;
     42 }
     43 
     44 FieldTypeGroup AutofillType::group() const {
     45   switch (server_type_) {
     46     case NAME_FIRST:
     47     case NAME_MIDDLE:
     48     case NAME_LAST:
     49     case NAME_MIDDLE_INITIAL:
     50     case NAME_FULL:
     51     case NAME_SUFFIX:
     52       return NAME;
     53 
     54     case NAME_BILLING_FIRST:
     55     case NAME_BILLING_MIDDLE:
     56     case NAME_BILLING_LAST:
     57     case NAME_BILLING_MIDDLE_INITIAL:
     58     case NAME_BILLING_FULL:
     59     case NAME_BILLING_SUFFIX:
     60       return NAME_BILLING;
     61 
     62     case EMAIL_ADDRESS:
     63       return EMAIL;
     64 
     65     case PHONE_HOME_NUMBER:
     66     case PHONE_HOME_CITY_CODE:
     67     case PHONE_HOME_COUNTRY_CODE:
     68     case PHONE_HOME_CITY_AND_NUMBER:
     69     case PHONE_HOME_WHOLE_NUMBER:
     70       return PHONE_HOME;
     71 
     72     case PHONE_BILLING_NUMBER:
     73     case PHONE_BILLING_CITY_CODE:
     74     case PHONE_BILLING_COUNTRY_CODE:
     75     case PHONE_BILLING_CITY_AND_NUMBER:
     76     case PHONE_BILLING_WHOLE_NUMBER:
     77       return PHONE_BILLING;
     78 
     79     case ADDRESS_HOME_LINE1:
     80     case ADDRESS_HOME_LINE2:
     81     case ADDRESS_HOME_LINE3:
     82     case ADDRESS_HOME_APT_NUM:
     83     case ADDRESS_HOME_CITY:
     84     case ADDRESS_HOME_STATE:
     85     case ADDRESS_HOME_ZIP:
     86     case ADDRESS_HOME_COUNTRY:
     87     case ADDRESS_HOME_STREET_ADDRESS:
     88     case ADDRESS_HOME_SORTING_CODE:
     89     case ADDRESS_HOME_DEPENDENT_LOCALITY:
     90       return ADDRESS_HOME;
     91 
     92     case ADDRESS_BILLING_LINE1:
     93     case ADDRESS_BILLING_LINE2:
     94     case ADDRESS_BILLING_LINE3:
     95     case ADDRESS_BILLING_APT_NUM:
     96     case ADDRESS_BILLING_CITY:
     97     case ADDRESS_BILLING_STATE:
     98     case ADDRESS_BILLING_ZIP:
     99     case ADDRESS_BILLING_COUNTRY:
    100     case ADDRESS_BILLING_STREET_ADDRESS:
    101     case ADDRESS_BILLING_SORTING_CODE:
    102     case ADDRESS_BILLING_DEPENDENT_LOCALITY:
    103       return ADDRESS_BILLING;
    104 
    105     case CREDIT_CARD_NAME:
    106     case CREDIT_CARD_NUMBER:
    107     case CREDIT_CARD_EXP_MONTH:
    108     case CREDIT_CARD_EXP_2_DIGIT_YEAR:
    109     case CREDIT_CARD_EXP_4_DIGIT_YEAR:
    110     case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
    111     case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
    112     case CREDIT_CARD_TYPE:
    113     case CREDIT_CARD_VERIFICATION_CODE:
    114       return CREDIT_CARD;
    115 
    116     case COMPANY_NAME:
    117       return COMPANY;
    118 
    119     case PASSWORD:
    120     case ACCOUNT_CREATION_PASSWORD:
    121       return PASSWORD_FIELD;
    122 
    123     case NO_SERVER_DATA:
    124     case EMPTY_TYPE:
    125     case PHONE_FAX_NUMBER:
    126     case PHONE_FAX_CITY_CODE:
    127     case PHONE_FAX_COUNTRY_CODE:
    128     case PHONE_FAX_CITY_AND_NUMBER:
    129     case PHONE_FAX_WHOLE_NUMBER:
    130     case FIELD_WITH_DEFAULT_VALUE:
    131     case MERCHANT_EMAIL_SIGNUP:
    132     case MERCHANT_PROMO_CODE:
    133       return NO_GROUP;
    134 
    135     case MAX_VALID_FIELD_TYPE:
    136       NOTREACHED();
    137       return NO_GROUP;
    138 
    139     case UNKNOWN_TYPE:
    140       break;
    141   }
    142 
    143   switch (html_type_) {
    144     case HTML_TYPE_NAME:
    145     case HTML_TYPE_GIVEN_NAME:
    146     case HTML_TYPE_ADDITIONAL_NAME:
    147     case HTML_TYPE_ADDITIONAL_NAME_INITIAL:
    148     case HTML_TYPE_FAMILY_NAME:
    149       return html_mode_ == HTML_MODE_BILLING ? NAME_BILLING : NAME;
    150 
    151     case HTML_TYPE_ORGANIZATION:
    152       return COMPANY;
    153 
    154     case HTML_TYPE_STREET_ADDRESS:
    155     case HTML_TYPE_ADDRESS_LINE1:
    156     case HTML_TYPE_ADDRESS_LINE2:
    157     case HTML_TYPE_ADDRESS_LINE3:
    158     case HTML_TYPE_ADDRESS_LEVEL1:
    159     case HTML_TYPE_ADDRESS_LEVEL2:
    160     case HTML_TYPE_ADDRESS_LEVEL3:
    161     case HTML_TYPE_COUNTRY_CODE:
    162     case HTML_TYPE_COUNTRY_NAME:
    163     case HTML_TYPE_POSTAL_CODE:
    164     case HTML_TYPE_FULL_ADDRESS:
    165       return html_mode_ == HTML_MODE_BILLING ? ADDRESS_BILLING : ADDRESS_HOME;
    166 
    167     case HTML_TYPE_CREDIT_CARD_NAME:
    168     case HTML_TYPE_CREDIT_CARD_NUMBER:
    169     case HTML_TYPE_CREDIT_CARD_EXP:
    170     case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
    171     case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
    172     case HTML_TYPE_CREDIT_CARD_EXP_MONTH:
    173     case HTML_TYPE_CREDIT_CARD_EXP_YEAR:
    174     case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:
    175     case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:
    176     case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:
    177     case HTML_TYPE_CREDIT_CARD_TYPE:
    178       return CREDIT_CARD;
    179 
    180     case HTML_TYPE_TEL:
    181     case HTML_TYPE_TEL_COUNTRY_CODE:
    182     case HTML_TYPE_TEL_NATIONAL:
    183     case HTML_TYPE_TEL_AREA_CODE:
    184     case HTML_TYPE_TEL_LOCAL:
    185     case HTML_TYPE_TEL_LOCAL_PREFIX:
    186     case HTML_TYPE_TEL_LOCAL_SUFFIX:
    187       return html_mode_ == HTML_MODE_BILLING ? PHONE_BILLING : PHONE_HOME;
    188 
    189     case HTML_TYPE_EMAIL:
    190       return EMAIL;
    191 
    192     case HTML_TYPE_UNKNOWN:
    193       break;
    194   }
    195 
    196   return NO_GROUP;
    197 }
    198 
    199 bool AutofillType::IsUnknown() const {
    200   return server_type_ == UNKNOWN_TYPE && html_type_ == HTML_TYPE_UNKNOWN;
    201 }
    202 
    203 ServerFieldType AutofillType::GetStorableType() const {
    204   // Map billing types to the equivalent non-billing types.
    205   switch (server_type_) {
    206     case ADDRESS_BILLING_LINE1:
    207       return ADDRESS_HOME_LINE1;
    208 
    209     case ADDRESS_BILLING_LINE2:
    210       return ADDRESS_HOME_LINE2;
    211 
    212     case ADDRESS_BILLING_LINE3:
    213       return ADDRESS_HOME_LINE3;
    214 
    215     case ADDRESS_BILLING_APT_NUM:
    216       return ADDRESS_HOME_APT_NUM;
    217 
    218     case ADDRESS_BILLING_CITY:
    219       return ADDRESS_HOME_CITY;
    220 
    221     case ADDRESS_BILLING_STATE:
    222       return ADDRESS_HOME_STATE;
    223 
    224     case ADDRESS_BILLING_ZIP:
    225       return ADDRESS_HOME_ZIP;
    226 
    227     case ADDRESS_BILLING_COUNTRY:
    228       return ADDRESS_HOME_COUNTRY;
    229 
    230     case PHONE_BILLING_WHOLE_NUMBER:
    231       return PHONE_HOME_WHOLE_NUMBER;
    232 
    233     case PHONE_BILLING_NUMBER:
    234       return PHONE_HOME_NUMBER;
    235 
    236     case PHONE_BILLING_CITY_CODE:
    237       return PHONE_HOME_CITY_CODE;
    238 
    239     case PHONE_BILLING_COUNTRY_CODE:
    240       return PHONE_HOME_COUNTRY_CODE;
    241 
    242     case PHONE_BILLING_CITY_AND_NUMBER:
    243       return PHONE_HOME_CITY_AND_NUMBER;
    244 
    245     case NAME_BILLING_FIRST:
    246       return NAME_FIRST;
    247 
    248     case NAME_BILLING_MIDDLE:
    249       return NAME_MIDDLE;
    250 
    251     case NAME_BILLING_LAST:
    252       return NAME_LAST;
    253 
    254     case NAME_BILLING_MIDDLE_INITIAL:
    255       return NAME_MIDDLE_INITIAL;
    256 
    257     case NAME_BILLING_FULL:
    258       return NAME_FULL;
    259 
    260     case NAME_BILLING_SUFFIX:
    261       return NAME_SUFFIX;
    262 
    263     case ADDRESS_BILLING_STREET_ADDRESS:
    264       return ADDRESS_HOME_STREET_ADDRESS;
    265 
    266     case ADDRESS_BILLING_SORTING_CODE:
    267       return ADDRESS_HOME_SORTING_CODE;
    268 
    269     case ADDRESS_BILLING_DEPENDENT_LOCALITY:
    270       return ADDRESS_HOME_DEPENDENT_LOCALITY;
    271 
    272     case UNKNOWN_TYPE:
    273       break;  // Try to parse HTML types instead.
    274 
    275     default:
    276       return server_type_;
    277   }
    278 
    279   switch (html_type_) {
    280     case HTML_TYPE_UNKNOWN:
    281       return UNKNOWN_TYPE;
    282 
    283     case HTML_TYPE_NAME:
    284       return NAME_FULL;
    285 
    286     case HTML_TYPE_GIVEN_NAME:
    287       return NAME_FIRST;
    288 
    289     case HTML_TYPE_ADDITIONAL_NAME:
    290       return NAME_MIDDLE;
    291 
    292     case HTML_TYPE_FAMILY_NAME:
    293       return NAME_LAST;
    294 
    295     case HTML_TYPE_ORGANIZATION:
    296       return COMPANY_NAME;
    297 
    298     case HTML_TYPE_STREET_ADDRESS:
    299       return ADDRESS_HOME_STREET_ADDRESS;
    300 
    301     case HTML_TYPE_ADDRESS_LINE1:
    302       return ADDRESS_HOME_LINE1;
    303 
    304     case HTML_TYPE_ADDRESS_LINE2:
    305       return ADDRESS_HOME_LINE2;
    306 
    307     case HTML_TYPE_ADDRESS_LINE3:
    308       return ADDRESS_HOME_LINE3;
    309 
    310     case HTML_TYPE_ADDRESS_LEVEL1:
    311       return ADDRESS_HOME_STATE;
    312 
    313     case HTML_TYPE_ADDRESS_LEVEL2:
    314       return ADDRESS_HOME_CITY;
    315 
    316     case HTML_TYPE_ADDRESS_LEVEL3:
    317       return ADDRESS_HOME_DEPENDENT_LOCALITY;
    318 
    319     case HTML_TYPE_COUNTRY_CODE:
    320     case HTML_TYPE_COUNTRY_NAME:
    321       return ADDRESS_HOME_COUNTRY;
    322 
    323     case HTML_TYPE_POSTAL_CODE:
    324       return ADDRESS_HOME_ZIP;
    325 
    326     // Full address is composed of other types; it can't be stored.
    327     case HTML_TYPE_FULL_ADDRESS:
    328       return UNKNOWN_TYPE;
    329 
    330     case HTML_TYPE_CREDIT_CARD_NAME:
    331       return CREDIT_CARD_NAME;
    332 
    333     case HTML_TYPE_CREDIT_CARD_NUMBER:
    334       return CREDIT_CARD_NUMBER;
    335 
    336     case HTML_TYPE_CREDIT_CARD_EXP:
    337       return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
    338 
    339     case HTML_TYPE_CREDIT_CARD_EXP_MONTH:
    340       return CREDIT_CARD_EXP_MONTH;
    341 
    342     case HTML_TYPE_CREDIT_CARD_EXP_YEAR:
    343       return CREDIT_CARD_EXP_4_DIGIT_YEAR;
    344 
    345     case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:
    346       return CREDIT_CARD_VERIFICATION_CODE;
    347 
    348     case HTML_TYPE_CREDIT_CARD_TYPE:
    349       return CREDIT_CARD_TYPE;
    350 
    351     case HTML_TYPE_TEL:
    352       return PHONE_HOME_WHOLE_NUMBER;
    353 
    354     case HTML_TYPE_TEL_COUNTRY_CODE:
    355       return PHONE_HOME_COUNTRY_CODE;
    356 
    357     case HTML_TYPE_TEL_NATIONAL:
    358       return PHONE_HOME_CITY_AND_NUMBER;
    359 
    360     case HTML_TYPE_TEL_AREA_CODE:
    361       return PHONE_HOME_CITY_CODE;
    362 
    363     case HTML_TYPE_TEL_LOCAL:
    364     case HTML_TYPE_TEL_LOCAL_PREFIX:
    365     case HTML_TYPE_TEL_LOCAL_SUFFIX:
    366       return PHONE_HOME_NUMBER;
    367 
    368     case HTML_TYPE_EMAIL:
    369       return EMAIL_ADDRESS;
    370 
    371     case HTML_TYPE_ADDITIONAL_NAME_INITIAL:
    372       return NAME_MIDDLE_INITIAL;
    373 
    374     case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
    375       return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR;
    376 
    377     case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
    378       return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
    379 
    380     case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:
    381       return CREDIT_CARD_EXP_2_DIGIT_YEAR;
    382 
    383     case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:
    384       return CREDIT_CARD_EXP_4_DIGIT_YEAR;
    385   }
    386 
    387   NOTREACHED();
    388   return UNKNOWN_TYPE;
    389 }
    390 
    391 // static
    392 ServerFieldType AutofillType::GetEquivalentBillingFieldType(
    393     ServerFieldType field_type) {
    394   switch (field_type) {
    395     case ADDRESS_HOME_LINE1:
    396       return ADDRESS_BILLING_LINE1;
    397 
    398     case ADDRESS_HOME_LINE2:
    399       return ADDRESS_BILLING_LINE2;
    400 
    401     case ADDRESS_HOME_APT_NUM:
    402       return ADDRESS_BILLING_APT_NUM;
    403 
    404     case ADDRESS_HOME_CITY:
    405       return ADDRESS_BILLING_CITY;
    406 
    407     case ADDRESS_HOME_STATE:
    408       return ADDRESS_BILLING_STATE;
    409 
    410     case ADDRESS_HOME_ZIP:
    411       return ADDRESS_BILLING_ZIP;
    412 
    413     case ADDRESS_HOME_COUNTRY:
    414       return ADDRESS_BILLING_COUNTRY;
    415 
    416     case ADDRESS_HOME_STREET_ADDRESS:
    417       return ADDRESS_BILLING_STREET_ADDRESS;
    418 
    419     case ADDRESS_HOME_SORTING_CODE:
    420       return ADDRESS_BILLING_SORTING_CODE;
    421 
    422     case ADDRESS_HOME_DEPENDENT_LOCALITY:
    423       return ADDRESS_BILLING_DEPENDENT_LOCALITY;
    424 
    425     case PHONE_HOME_WHOLE_NUMBER:
    426       return PHONE_BILLING_WHOLE_NUMBER;
    427 
    428     case PHONE_HOME_NUMBER:
    429       return PHONE_BILLING_NUMBER;
    430 
    431     case PHONE_HOME_CITY_CODE:
    432       return PHONE_BILLING_CITY_CODE;
    433 
    434     case PHONE_HOME_COUNTRY_CODE:
    435       return PHONE_BILLING_COUNTRY_CODE;
    436 
    437     case PHONE_HOME_CITY_AND_NUMBER:
    438       return PHONE_BILLING_CITY_AND_NUMBER;
    439 
    440     case NAME_FIRST:
    441       return NAME_BILLING_FIRST;
    442 
    443     case NAME_MIDDLE:
    444       return NAME_BILLING_MIDDLE;
    445 
    446     case NAME_LAST:
    447       return NAME_BILLING_LAST;
    448 
    449     case NAME_MIDDLE_INITIAL:
    450       return NAME_BILLING_MIDDLE_INITIAL;
    451 
    452     case NAME_FULL:
    453       return NAME_BILLING_FULL;
    454 
    455     case NAME_SUFFIX:
    456       return NAME_BILLING_SUFFIX;
    457 
    458     default:
    459       return field_type;
    460   }
    461 }
    462 
    463 std::string AutofillType::ToString() const {
    464   if (IsUnknown())
    465     return "UNKNOWN_TYPE";
    466 
    467   switch (server_type_) {
    468     case NO_SERVER_DATA:
    469       return "NO_SERVER_DATA";
    470     case UNKNOWN_TYPE:
    471       break;  // Should be handled in the HTML type handling code below.
    472     case EMPTY_TYPE:
    473       return "EMPTY_TYPE";
    474     case NAME_FIRST:
    475       return "NAME_FIRST";
    476     case NAME_MIDDLE:
    477       return "NAME_MIDDLE";
    478     case NAME_LAST:
    479       return "NAME_LAST";
    480     case NAME_MIDDLE_INITIAL:
    481       return "NAME_MIDDLE_INITIAL";
    482     case NAME_FULL:
    483       return "NAME_FULL";
    484     case NAME_SUFFIX:
    485       return "NAME_SUFFIX";
    486     case NAME_BILLING_FIRST:
    487       return "NAME_BILLING_FIRST";
    488     case NAME_BILLING_MIDDLE:
    489       return "NAME_BILLING_MIDDLE";
    490     case NAME_BILLING_LAST:
    491       return "NAME_BILLING_LAST";
    492     case NAME_BILLING_MIDDLE_INITIAL:
    493       return "NAME_BILLING_MIDDLE_INITIAL";
    494     case NAME_BILLING_FULL:
    495       return "NAME_BILLING_FULL";
    496     case NAME_BILLING_SUFFIX:
    497       return "NAME_BILLING_SUFFIX";
    498     case EMAIL_ADDRESS:
    499       return "EMAIL_ADDRESS";
    500     case PHONE_HOME_NUMBER:
    501       return "PHONE_HOME_NUMBER";
    502     case PHONE_HOME_CITY_CODE:
    503       return "PHONE_HOME_CITY_CODE";
    504     case PHONE_HOME_COUNTRY_CODE:
    505       return "PHONE_HOME_COUNTRY_CODE";
    506     case PHONE_HOME_CITY_AND_NUMBER:
    507       return "PHONE_HOME_CITY_AND_NUMBER";
    508     case PHONE_HOME_WHOLE_NUMBER:
    509       return "PHONE_HOME_WHOLE_NUMBER";
    510     case PHONE_FAX_NUMBER:
    511       return "PHONE_FAX_NUMBER";
    512     case PHONE_FAX_CITY_CODE:
    513       return "PHONE_FAX_CITY_CODE";
    514     case PHONE_FAX_COUNTRY_CODE:
    515       return "PHONE_FAX_COUNTRY_CODE";
    516     case PHONE_FAX_CITY_AND_NUMBER:
    517       return "PHONE_FAX_CITY_AND_NUMBER";
    518     case PHONE_FAX_WHOLE_NUMBER:
    519       return "PHONE_FAX_WHOLE_NUMBER";
    520     case ADDRESS_HOME_LINE1:
    521       return "ADDRESS_HOME_LINE1";
    522     case ADDRESS_HOME_LINE2:
    523       return "ADDRESS_HOME_LINE2";
    524     case ADDRESS_HOME_LINE3:
    525       return "ADDRESS_HOME_LINE3";
    526     case ADDRESS_HOME_APT_NUM:
    527       return "ADDRESS_HOME_APT_NUM";
    528     case ADDRESS_HOME_CITY:
    529       return "ADDRESS_HOME_CITY";
    530     case ADDRESS_HOME_STATE:
    531       return "ADDRESS_HOME_STATE";
    532     case ADDRESS_HOME_ZIP:
    533       return "ADDRESS_HOME_ZIP";
    534     case ADDRESS_HOME_COUNTRY:
    535       return "ADDRESS_HOME_COUNTRY";
    536     case ADDRESS_BILLING_LINE1:
    537       return "ADDRESS_BILLING_LINE1";
    538     case ADDRESS_BILLING_LINE2:
    539       return "ADDRESS_BILLING_LINE2";
    540     case ADDRESS_BILLING_LINE3:
    541       return "ADDRESS_BILLING_LINE3";
    542     case ADDRESS_BILLING_APT_NUM:
    543       return "ADDRESS_BILLING_APT_NUM";
    544     case ADDRESS_BILLING_CITY:
    545       return "ADDRESS_BILLING_CITY";
    546     case ADDRESS_BILLING_STATE:
    547       return "ADDRESS_BILLING_STATE";
    548     case ADDRESS_BILLING_ZIP:
    549       return "ADDRESS_BILLING_ZIP";
    550     case ADDRESS_BILLING_COUNTRY:
    551       return "ADDRESS_BILLING_COUNTRY";
    552     case CREDIT_CARD_NAME:
    553       return "CREDIT_CARD_NAME";
    554     case CREDIT_CARD_NUMBER:
    555       return "CREDIT_CARD_NUMBER";
    556     case CREDIT_CARD_EXP_MONTH:
    557       return "CREDIT_CARD_EXP_MONTH";
    558     case CREDIT_CARD_EXP_2_DIGIT_YEAR:
    559       return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
    560     case CREDIT_CARD_EXP_4_DIGIT_YEAR:
    561       return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
    562     case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
    563       return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
    564     case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
    565       return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
    566     case CREDIT_CARD_TYPE:
    567       return "CREDIT_CARD_TYPE";
    568     case CREDIT_CARD_VERIFICATION_CODE:
    569       return "CREDIT_CARD_VERIFICATION_CODE";
    570     case COMPANY_NAME:
    571       return "COMPANY_NAME";
    572     case FIELD_WITH_DEFAULT_VALUE:
    573       return "FIELD_WITH_DEFAULT_VALUE";
    574     case PHONE_BILLING_NUMBER:
    575       return "PHONE_BILLING_NUMBER";
    576     case PHONE_BILLING_CITY_CODE:
    577       return "PHONE_BILLING_CITY_CODE";
    578     case PHONE_BILLING_COUNTRY_CODE:
    579       return "PHONE_BILLING_COUNTRY_CODE";
    580     case PHONE_BILLING_CITY_AND_NUMBER:
    581       return "PHONE_BILLING_CITY_AND_NUMBER";
    582     case PHONE_BILLING_WHOLE_NUMBER:
    583       return "PHONE_BILLING_WHOLE_NUMBER";
    584     case MERCHANT_EMAIL_SIGNUP:
    585       return "MERCHANT_EMAIL_SIGNUP";
    586     case MERCHANT_PROMO_CODE:
    587       return "MERCHANT_PROMO_CODE";
    588     case PASSWORD:
    589       return "PASSWORD";
    590     case ACCOUNT_CREATION_PASSWORD:
    591       return "ACCOUNT_CREATION_PASSWORD";
    592     case ADDRESS_HOME_STREET_ADDRESS:
    593       return "ADDRESS_HOME_STREET_ADDRESS";
    594     case ADDRESS_BILLING_STREET_ADDRESS:
    595       return "ADDRESS_BILLING_STREET_ADDRESS";
    596     case ADDRESS_HOME_SORTING_CODE:
    597       return "ADDRESS_HOME_SORTING_CODE";
    598     case ADDRESS_BILLING_SORTING_CODE:
    599       return "ADDRESS_BILLING_SORTING_CODE";
    600     case ADDRESS_HOME_DEPENDENT_LOCALITY:
    601       return "ADDRESS_HOME_DEPENDENT_LOCALITY";
    602     case ADDRESS_BILLING_DEPENDENT_LOCALITY:
    603       return "ADDRESS_BILLING_DEPENDENT_LOCALITY";
    604 
    605     case MAX_VALID_FIELD_TYPE:
    606       return std::string();
    607   }
    608 
    609   switch (html_type_) {
    610     case HTML_TYPE_UNKNOWN:
    611       NOTREACHED();
    612       break;
    613     case HTML_TYPE_NAME:
    614       return "HTML_TYPE_NAME";
    615     case HTML_TYPE_GIVEN_NAME:
    616       return "HTML_TYPE_GIVEN_NAME";
    617     case HTML_TYPE_ADDITIONAL_NAME:
    618       return "HTML_TYPE_ADDITIONAL_NAME";
    619     case HTML_TYPE_FAMILY_NAME:
    620       return "HTML_TYPE_FAMILY_NAME";
    621     case HTML_TYPE_ORGANIZATION:
    622       return "HTML_TYPE_ORGANIZATION";
    623     case HTML_TYPE_STREET_ADDRESS:
    624       return "HTML_TYPE_STREET_ADDRESS";
    625     case HTML_TYPE_ADDRESS_LINE1:
    626       return "HTML_TYPE_ADDRESS_LINE1";
    627     case HTML_TYPE_ADDRESS_LINE2:
    628       return "HTML_TYPE_ADDRESS_LINE2";
    629     case HTML_TYPE_ADDRESS_LINE3:
    630       return "HTML_TYPE_ADDRESS_LINE3";
    631     case HTML_TYPE_ADDRESS_LEVEL1:
    632       return "HTML_TYPE_ADDRESS_LEVEL1";
    633     case HTML_TYPE_ADDRESS_LEVEL2:
    634       return "HTML_TYPE_ADDRESS_LEVEL2";
    635     case HTML_TYPE_ADDRESS_LEVEL3:
    636       return "HTML_TYPE_ADDRESS_LEVEL3";
    637     case HTML_TYPE_COUNTRY_CODE:
    638       return "HTML_TYPE_COUNTRY_CODE";
    639     case HTML_TYPE_COUNTRY_NAME:
    640       return "HTML_TYPE_COUNTRY_NAME";
    641     case HTML_TYPE_POSTAL_CODE:
    642       return "HTML_TYPE_POSTAL_CODE";
    643     case HTML_TYPE_FULL_ADDRESS:
    644       return "HTML_TYPE_FULL_ADDRESS";
    645     case HTML_TYPE_CREDIT_CARD_NAME:
    646       return "HTML_TYPE_CREDIT_CARD_NAME";
    647     case HTML_TYPE_CREDIT_CARD_NUMBER:
    648       return "HTML_TYPE_CREDIT_CARD_NUMBER";
    649     case HTML_TYPE_CREDIT_CARD_EXP:
    650       return "HTML_TYPE_CREDIT_CARD_EXP";
    651     case HTML_TYPE_CREDIT_CARD_EXP_MONTH:
    652       return "HTML_TYPE_CREDIT_CARD_EXP_MONTH";
    653     case HTML_TYPE_CREDIT_CARD_EXP_YEAR:
    654       return "HTML_TYPE_CREDIT_CARD_EXP_YEAR";
    655     case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:
    656       return "HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE";
    657     case HTML_TYPE_CREDIT_CARD_TYPE:
    658       return "HTML_TYPE_CREDIT_CARD_TYPE";
    659     case HTML_TYPE_TEL:
    660       return "HTML_TYPE_TEL";
    661     case HTML_TYPE_TEL_COUNTRY_CODE:
    662       return "HTML_TYPE_TEL_COUNTRY_CODE";
    663     case HTML_TYPE_TEL_NATIONAL:
    664       return "HTML_TYPE_TEL_NATIONAL";
    665     case HTML_TYPE_TEL_AREA_CODE:
    666       return "HTML_TYPE_TEL_AREA_CODE";
    667     case HTML_TYPE_TEL_LOCAL:
    668       return "HTML_TYPE_TEL_LOCAL";
    669     case HTML_TYPE_TEL_LOCAL_PREFIX:
    670       return "HTML_TYPE_TEL_LOCAL_PREFIX";
    671     case HTML_TYPE_TEL_LOCAL_SUFFIX:
    672       return "HTML_TYPE_TEL_LOCAL_SUFFIX";
    673     case HTML_TYPE_EMAIL:
    674       return "HTML_TYPE_EMAIL";
    675     case HTML_TYPE_ADDITIONAL_NAME_INITIAL:
    676       return "HTML_TYPE_ADDITIONAL_NAME_INITIAL";
    677     case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
    678       return "HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
    679     case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
    680       return "HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
    681     case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:
    682       return "HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR";
    683     case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:
    684       return "HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR";
    685   }
    686 
    687   NOTREACHED();
    688   return std::string();
    689 }
    690 
    691 }  // namespace autofill
    692