autofill_type.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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_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
199bool AutofillType::IsUnknown() const {
200  return server_type_ == UNKNOWN_TYPE && html_type_ == HTML_TYPE_UNKNOWN;
201}
202
203ServerFieldType 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
392ServerFieldType 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
463std::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