autofill_type.cc revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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 <ostream>
8
9#include "base/logging.h"
10
11namespace autofill {
12
13AutofillType::AutofillType(AutofillFieldType field_type) {
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    field_type_ = UNKNOWN_TYPE;
19  else
20    field_type_ = field_type;
21}
22
23AutofillType::AutofillType(const AutofillType& autofill_type) {
24  *this = autofill_type;
25}
26
27AutofillType& AutofillType::operator=(const AutofillType& autofill_type) {
28  if (this != &autofill_type)
29    this->field_type_ = autofill_type.field_type_;
30  return *this;
31}
32
33AutofillFieldType AutofillType::field_type() const {
34  return field_type_;
35}
36
37FieldTypeGroup AutofillType::group() const {
38  switch (field_type_) {
39    case NAME_FIRST:
40    case NAME_MIDDLE:
41    case NAME_LAST:
42    case NAME_MIDDLE_INITIAL:
43    case NAME_FULL:
44    case NAME_SUFFIX:
45      return NAME;
46
47    case NAME_BILLING_FIRST:
48    case NAME_BILLING_MIDDLE:
49    case NAME_BILLING_LAST:
50    case NAME_BILLING_MIDDLE_INITIAL:
51    case NAME_BILLING_FULL:
52    case NAME_BILLING_SUFFIX:
53      return NAME_BILLING;
54
55    case EMAIL_ADDRESS:
56      return EMAIL;
57
58    case PHONE_HOME_NUMBER:
59    case PHONE_HOME_CITY_CODE:
60    case PHONE_HOME_COUNTRY_CODE:
61    case PHONE_HOME_CITY_AND_NUMBER:
62    case PHONE_HOME_WHOLE_NUMBER:
63      return PHONE_HOME;
64
65    case PHONE_BILLING_NUMBER:
66    case PHONE_BILLING_CITY_CODE:
67    case PHONE_BILLING_COUNTRY_CODE:
68    case PHONE_BILLING_CITY_AND_NUMBER:
69    case PHONE_BILLING_WHOLE_NUMBER:
70      return PHONE_BILLING;
71
72    case ADDRESS_HOME_LINE1:
73    case ADDRESS_HOME_LINE2:
74    case ADDRESS_HOME_APT_NUM:
75    case ADDRESS_HOME_CITY:
76    case ADDRESS_HOME_STATE:
77    case ADDRESS_HOME_ZIP:
78    case ADDRESS_HOME_COUNTRY:
79      return ADDRESS_HOME;
80
81    case ADDRESS_BILLING_LINE1:
82    case ADDRESS_BILLING_LINE2:
83    case ADDRESS_BILLING_APT_NUM:
84    case ADDRESS_BILLING_CITY:
85    case ADDRESS_BILLING_STATE:
86    case ADDRESS_BILLING_ZIP:
87    case ADDRESS_BILLING_COUNTRY:
88      return ADDRESS_BILLING;
89
90    case CREDIT_CARD_NAME:
91    case CREDIT_CARD_NUMBER:
92    case CREDIT_CARD_EXP_MONTH:
93    case CREDIT_CARD_EXP_2_DIGIT_YEAR:
94    case CREDIT_CARD_EXP_4_DIGIT_YEAR:
95    case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
96    case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
97    case CREDIT_CARD_TYPE:
98    case CREDIT_CARD_VERIFICATION_CODE:
99      return CREDIT_CARD;
100
101    case COMPANY_NAME:
102      return COMPANY;
103
104    default:
105      return NO_GROUP;
106  }
107}
108
109// static
110AutofillFieldType AutofillType::GetEquivalentFieldType(
111    AutofillFieldType field_type) {
112  // When billing information is requested from the profile we map to the
113  // home address equivalents.
114  switch (field_type) {
115    case ADDRESS_BILLING_LINE1:
116      return ADDRESS_HOME_LINE1;
117
118    case ADDRESS_BILLING_LINE2:
119      return ADDRESS_HOME_LINE2;
120
121    case ADDRESS_BILLING_APT_NUM:
122      return ADDRESS_HOME_APT_NUM;
123
124    case ADDRESS_BILLING_CITY:
125      return ADDRESS_HOME_CITY;
126
127    case ADDRESS_BILLING_STATE:
128      return ADDRESS_HOME_STATE;
129
130    case ADDRESS_BILLING_ZIP:
131      return ADDRESS_HOME_ZIP;
132
133    case ADDRESS_BILLING_COUNTRY:
134      return ADDRESS_HOME_COUNTRY;
135
136    case PHONE_BILLING_WHOLE_NUMBER:
137      return PHONE_HOME_WHOLE_NUMBER;
138
139    case PHONE_BILLING_NUMBER:
140      return PHONE_HOME_NUMBER;
141
142    case PHONE_BILLING_CITY_CODE:
143      return PHONE_HOME_CITY_CODE;
144
145    case PHONE_BILLING_COUNTRY_CODE:
146      return PHONE_HOME_COUNTRY_CODE;
147
148    case PHONE_BILLING_CITY_AND_NUMBER:
149      return PHONE_HOME_CITY_AND_NUMBER;
150
151    case NAME_BILLING_FIRST:
152      return NAME_FIRST;
153
154    case NAME_BILLING_MIDDLE:
155      return NAME_MIDDLE;
156
157    case NAME_BILLING_LAST:
158      return NAME_LAST;
159
160    case NAME_BILLING_MIDDLE_INITIAL:
161      return NAME_MIDDLE_INITIAL;
162
163    case NAME_BILLING_FULL:
164      return NAME_FULL;
165
166    case NAME_BILLING_SUFFIX:
167      return NAME_SUFFIX;
168
169    default:
170      return field_type;
171  }
172}
173
174// static
175AutofillFieldType AutofillType::GetEquivalentBillingFieldType(
176    AutofillFieldType field_type) {
177  switch (field_type) {
178    case ADDRESS_HOME_LINE1:
179      return ADDRESS_BILLING_LINE1;
180
181    case ADDRESS_HOME_LINE2:
182      return ADDRESS_BILLING_LINE2;
183
184    case ADDRESS_HOME_APT_NUM:
185      return ADDRESS_BILLING_APT_NUM;
186
187    case ADDRESS_HOME_CITY:
188      return ADDRESS_BILLING_CITY;
189
190    case ADDRESS_HOME_STATE:
191      return ADDRESS_BILLING_STATE;
192
193    case ADDRESS_HOME_ZIP:
194      return ADDRESS_BILLING_ZIP;
195
196    case ADDRESS_HOME_COUNTRY:
197      return ADDRESS_BILLING_COUNTRY;
198
199    case PHONE_HOME_WHOLE_NUMBER:
200      return PHONE_BILLING_WHOLE_NUMBER;
201
202    case PHONE_HOME_NUMBER:
203      return PHONE_BILLING_NUMBER;
204
205    case PHONE_HOME_CITY_CODE:
206      return PHONE_BILLING_CITY_CODE;
207
208    case PHONE_HOME_COUNTRY_CODE:
209      return PHONE_BILLING_COUNTRY_CODE;
210
211    case PHONE_HOME_CITY_AND_NUMBER:
212      return PHONE_BILLING_CITY_AND_NUMBER;
213
214    case NAME_FIRST:
215      return NAME_BILLING_FIRST;
216
217    case NAME_MIDDLE:
218      return NAME_BILLING_MIDDLE;
219
220    case NAME_LAST:
221      return NAME_BILLING_LAST;
222
223    case NAME_MIDDLE_INITIAL:
224      return NAME_BILLING_MIDDLE_INITIAL;
225
226    case NAME_FULL:
227      return NAME_BILLING_FULL;
228
229    case NAME_SUFFIX:
230      return NAME_BILLING_SUFFIX;
231
232    default:
233      return field_type;
234  }
235}
236
237// static
238std::string AutofillType::FieldTypeToString(AutofillFieldType type) {
239  switch (type) {
240    case NO_SERVER_DATA:
241      return "NO_SERVER_DATA";
242    case UNKNOWN_TYPE:
243      return "UNKNOWN_TYPE";
244    case EMPTY_TYPE:
245      return "EMPTY_TYPE";
246    case NAME_FIRST:
247      return "NAME_FIRST";
248    case NAME_MIDDLE:
249      return "NAME_MIDDLE";
250    case NAME_LAST:
251      return "NAME_LAST";
252    case NAME_MIDDLE_INITIAL:
253      return "NAME_MIDDLE_INITIAL";
254    case NAME_FULL:
255      return "NAME_FULL";
256    case NAME_SUFFIX:
257      return "NAME_SUFFIX";
258    case NAME_BILLING_FIRST:
259      return "NAME_BILLING_FIRST";
260    case NAME_BILLING_MIDDLE:
261      return "NAME_BILLING_MIDDLE";
262    case NAME_BILLING_LAST:
263      return "NAME_BILLING_LAST";
264    case NAME_BILLING_MIDDLE_INITIAL:
265      return "NAME_BILLING_MIDDLE_INITIAL";
266    case NAME_BILLING_FULL:
267      return "NAME_BILLING_FULL";
268    case NAME_BILLING_SUFFIX:
269      return "NAME_BILLING_SUFFIX";
270    case EMAIL_ADDRESS:
271      return "EMAIL_ADDRESS";
272    case PHONE_HOME_NUMBER:
273      return "PHONE_HOME_NUMBER";
274    case PHONE_HOME_CITY_CODE:
275      return "PHONE_HOME_CITY_CODE";
276    case PHONE_HOME_COUNTRY_CODE:
277      return "PHONE_HOME_COUNTRY_CODE";
278    case PHONE_HOME_CITY_AND_NUMBER:
279      return "PHONE_HOME_CITY_AND_NUMBER";
280    case PHONE_HOME_WHOLE_NUMBER:
281      return "PHONE_HOME_WHOLE_NUMBER";
282    case PHONE_FAX_NUMBER:
283      return "PHONE_FAX_NUMBER";
284    case PHONE_FAX_CITY_CODE:
285      return "PHONE_FAX_CITY_CODE";
286    case PHONE_FAX_COUNTRY_CODE:
287      return "PHONE_FAX_COUNTRY_CODE";
288    case PHONE_FAX_CITY_AND_NUMBER:
289      return "PHONE_FAX_CITY_AND_NUMBER";
290    case PHONE_FAX_WHOLE_NUMBER:
291      return "PHONE_FAX_WHOLE_NUMBER";
292    case ADDRESS_HOME_LINE1:
293      return "ADDRESS_HOME_LINE1";
294    case ADDRESS_HOME_LINE2:
295      return "ADDRESS_HOME_LINE2";
296    case ADDRESS_HOME_APT_NUM:
297      return "ADDRESS_HOME_APT_NUM";
298    case ADDRESS_HOME_CITY:
299      return "ADDRESS_HOME_CITY";
300    case ADDRESS_HOME_STATE:
301      return "ADDRESS_HOME_STATE";
302    case ADDRESS_HOME_ZIP:
303      return "ADDRESS_HOME_ZIP";
304    case ADDRESS_HOME_COUNTRY:
305      return "ADDRESS_HOME_COUNTRY";
306    case ADDRESS_BILLING_LINE1:
307      return "ADDRESS_BILLING_LINE1";
308    case ADDRESS_BILLING_LINE2:
309      return "ADDRESS_BILLING_LINE2";
310    case ADDRESS_BILLING_APT_NUM:
311      return "ADDRESS_BILLING_APT_NUM";
312    case ADDRESS_BILLING_CITY:
313      return "ADDRESS_BILLING_CITY";
314    case ADDRESS_BILLING_STATE:
315      return "ADDRESS_BILLING_STATE";
316    case ADDRESS_BILLING_ZIP:
317      return "ADDRESS_BILLING_ZIP";
318    case ADDRESS_BILLING_COUNTRY:
319      return "ADDRESS_BILLING_COUNTRY";
320    case CREDIT_CARD_NAME:
321      return "CREDIT_CARD_NAME";
322    case CREDIT_CARD_NUMBER:
323      return "CREDIT_CARD_NUMBER";
324    case CREDIT_CARD_EXP_MONTH:
325      return "CREDIT_CARD_EXP_MONTH";
326    case CREDIT_CARD_EXP_2_DIGIT_YEAR:
327      return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
328    case CREDIT_CARD_EXP_4_DIGIT_YEAR:
329      return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
330    case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
331      return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
332    case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
333      return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
334    case CREDIT_CARD_TYPE:
335      return "CREDIT_CARD_TYPE";
336    case CREDIT_CARD_VERIFICATION_CODE:
337      return "CREDIT_CARD_VERIFICATION_CODE";
338    case COMPANY_NAME:
339      return "COMPANY_NAME";
340    case FIELD_WITH_DEFAULT_VALUE:
341      return "FIELD_WITH_DEFAULT_VALUE";
342    case PHONE_BILLING_NUMBER:
343      return "PHONE_BILLING_NUMBER";
344    case PHONE_BILLING_CITY_CODE:
345      return "PHONE_BILLING_CITY_CODE";
346    case PHONE_BILLING_COUNTRY_CODE:
347      return "PHONE_BILLING_COUNTRY_CODE";
348    case PHONE_BILLING_CITY_AND_NUMBER:
349      return "PHONE_BILLING_CITY_AND_NUMBER";
350    case PHONE_BILLING_WHOLE_NUMBER:
351      return "PHONE_BILLING_WHOLE_NUMBER";
352    case MAX_VALID_FIELD_TYPE:
353      return std::string();
354  }
355  return std::string();
356}
357
358// static
359AutofillFieldType AutofillType::StringToFieldType(const std::string& str) {
360  if (str == "NO_SERVER_DATA")
361    return NO_SERVER_DATA;
362  if (str == "UNKNOWN_TYPE")
363    return UNKNOWN_TYPE;
364  if (str == "EMPTY_TYPE")
365    return EMPTY_TYPE;
366  if (str == "NAME_FIRST")
367    return NAME_FIRST;
368  if (str == "NAME_MIDDLE")
369    return NAME_MIDDLE;
370  if (str == "NAME_LAST")
371    return NAME_LAST;
372  if (str == "NAME_MIDDLE_INITIAL")
373    return NAME_MIDDLE_INITIAL;
374  if (str == "NAME_FULL")
375    return NAME_FULL;
376  if (str == "NAME_SUFFIX")
377    return NAME_SUFFIX;
378  if (str == "NAME_BILLING_FIRST")
379    return NAME_BILLING_FIRST;
380  if (str == "NAME_BILLING_MIDDLE")
381    return NAME_BILLING_MIDDLE;
382  if (str == "NAME_BILLING_LAST")
383    return NAME_BILLING_LAST;
384  if (str == "NAME_BILLING_MIDDLE_INITIAL")
385    return NAME_BILLING_MIDDLE_INITIAL;
386  if (str == "NAME_BILLING_FULL")
387    return NAME_BILLING_FULL;
388  if (str == "NAME_BILLING_SUFFIX")
389    return NAME_BILLING_SUFFIX;
390  if (str == "EMAIL_ADDRESS")
391    return EMAIL_ADDRESS;
392  if (str == "PHONE_HOME_NUMBER")
393    return PHONE_HOME_NUMBER;
394  if (str == "PHONE_HOME_CITY_CODE")
395    return PHONE_HOME_CITY_CODE;
396  if (str == "PHONE_HOME_COUNTRY_CODE")
397    return PHONE_HOME_COUNTRY_CODE;
398  if (str == "PHONE_HOME_CITY_AND_NUMBER")
399    return PHONE_HOME_CITY_AND_NUMBER;
400  if (str == "PHONE_HOME_WHOLE_NUMBER")
401    return PHONE_HOME_WHOLE_NUMBER;
402  if (str == "ADDRESS_HOME_LINE1")
403    return ADDRESS_HOME_LINE1;
404  if (str == "ADDRESS_HOME_LINE2")
405    return ADDRESS_HOME_LINE2;
406  if (str == "ADDRESS_HOME_APT_NUM")
407    return ADDRESS_HOME_APT_NUM;
408  if (str == "ADDRESS_HOME_CITY")
409    return ADDRESS_HOME_CITY;
410  if (str == "ADDRESS_HOME_STATE")
411    return ADDRESS_HOME_STATE;
412  if (str == "ADDRESS_HOME_ZIP")
413    return ADDRESS_HOME_ZIP;
414  if (str == "ADDRESS_HOME_COUNTRY")
415    return ADDRESS_HOME_COUNTRY;
416  if (str == "ADDRESS_BILLING_LINE1")
417    return ADDRESS_BILLING_LINE1;
418  if (str == "ADDRESS_BILLING_LINE2")
419    return ADDRESS_BILLING_LINE2;
420  if (str == "ADDRESS_BILLING_APT_NUM")
421    return ADDRESS_BILLING_APT_NUM;
422  if (str == "ADDRESS_BILLING_CITY")
423    return ADDRESS_BILLING_CITY;
424  if (str == "ADDRESS_BILLING_STATE")
425    return ADDRESS_BILLING_STATE;
426  if (str == "ADDRESS_BILLING_ZIP")
427    return ADDRESS_BILLING_ZIP;
428  if (str == "ADDRESS_BILLING_COUNTRY")
429    return ADDRESS_BILLING_COUNTRY;
430  if (str == "CREDIT_CARD_NAME")
431    return CREDIT_CARD_NAME;
432  if (str == "CREDIT_CARD_NUMBER")
433    return CREDIT_CARD_NUMBER;
434  if (str == "CREDIT_CARD_EXP_MONTH")
435    return CREDIT_CARD_EXP_MONTH;
436  if (str == "CREDIT_CARD_EXP_2_DIGIT_YEAR")
437    return CREDIT_CARD_EXP_2_DIGIT_YEAR;
438  if (str == "CREDIT_CARD_EXP_4_DIGIT_YEAR")
439    return CREDIT_CARD_EXP_4_DIGIT_YEAR;
440  if (str == "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR")
441    return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR;
442  if (str == "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR")
443    return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
444  if (str == "CREDIT_CARD_TYPE")
445    return CREDIT_CARD_TYPE;
446  if (str == "CREDIT_CARD_VERIFICATION_CODE")
447    return CREDIT_CARD_VERIFICATION_CODE;
448  if (str == "COMPANY_NAME")
449    return COMPANY_NAME;
450
451  NOTREACHED() << "Unknown AutofillFieldType " << str;
452  return UNKNOWN_TYPE;
453}
454
455}  // namespace autofill
456