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