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