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