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