autofill_type.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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 EMAIL_ADDRESS:
48      return EMAIL;
49
50    case PHONE_HOME_NUMBER:
51    case PHONE_HOME_CITY_CODE:
52    case PHONE_HOME_COUNTRY_CODE:
53    case PHONE_HOME_CITY_AND_NUMBER:
54    case PHONE_HOME_WHOLE_NUMBER:
55      return PHONE_HOME;
56
57    case PHONE_BILLING_NUMBER:
58    case PHONE_BILLING_CITY_CODE:
59    case PHONE_BILLING_COUNTRY_CODE:
60    case PHONE_BILLING_CITY_AND_NUMBER:
61    case PHONE_BILLING_WHOLE_NUMBER:
62      return PHONE_BILLING;
63
64    case ADDRESS_HOME_LINE1:
65    case ADDRESS_HOME_LINE2:
66    case ADDRESS_HOME_APT_NUM:
67    case ADDRESS_HOME_CITY:
68    case ADDRESS_HOME_STATE:
69    case ADDRESS_HOME_ZIP:
70    case ADDRESS_HOME_COUNTRY:
71      return ADDRESS_HOME;
72
73    case ADDRESS_BILLING_LINE1:
74    case ADDRESS_BILLING_LINE2:
75    case ADDRESS_BILLING_APT_NUM:
76    case ADDRESS_BILLING_CITY:
77    case ADDRESS_BILLING_STATE:
78    case ADDRESS_BILLING_ZIP:
79    case ADDRESS_BILLING_COUNTRY:
80      return ADDRESS_BILLING;
81
82    case CREDIT_CARD_NAME:
83    case CREDIT_CARD_NUMBER:
84    case CREDIT_CARD_EXP_MONTH:
85    case CREDIT_CARD_EXP_2_DIGIT_YEAR:
86    case CREDIT_CARD_EXP_4_DIGIT_YEAR:
87    case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
88    case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
89    case CREDIT_CARD_TYPE:
90    case CREDIT_CARD_VERIFICATION_CODE:
91      return CREDIT_CARD;
92
93    case COMPANY_NAME:
94      return COMPANY;
95
96    default:
97      return NO_GROUP;
98  }
99}
100
101// static
102AutofillFieldType AutofillType::GetEquivalentFieldType(
103    AutofillFieldType field_type) {
104  // When billing information is requested from the profile we map to the
105  // home address equivalents.
106  switch (field_type) {
107    case ADDRESS_BILLING_LINE1:
108      return ADDRESS_HOME_LINE1;
109
110    case ADDRESS_BILLING_LINE2:
111      return ADDRESS_HOME_LINE2;
112
113    case ADDRESS_BILLING_APT_NUM:
114      return ADDRESS_HOME_APT_NUM;
115
116    case ADDRESS_BILLING_CITY:
117      return ADDRESS_HOME_CITY;
118
119    case ADDRESS_BILLING_STATE:
120      return ADDRESS_HOME_STATE;
121
122    case ADDRESS_BILLING_ZIP:
123      return ADDRESS_HOME_ZIP;
124
125    case ADDRESS_BILLING_COUNTRY:
126      return ADDRESS_HOME_COUNTRY;
127
128    case PHONE_BILLING_WHOLE_NUMBER:
129      return PHONE_HOME_WHOLE_NUMBER;
130
131    case PHONE_BILLING_NUMBER:
132      return PHONE_HOME_NUMBER;
133
134    case PHONE_BILLING_CITY_CODE:
135      return PHONE_HOME_CITY_CODE;
136
137    case PHONE_BILLING_COUNTRY_CODE:
138      return PHONE_HOME_COUNTRY_CODE;
139
140    case PHONE_BILLING_CITY_AND_NUMBER:
141      return PHONE_HOME_CITY_AND_NUMBER;
142
143    default:
144      return field_type;
145  }
146}
147
148// static
149AutofillFieldType AutofillType::GetEquivalentBillingFieldType(
150    AutofillFieldType field_type) {
151  switch (field_type) {
152    case ADDRESS_HOME_LINE1:
153      return ADDRESS_BILLING_LINE1;
154
155    case ADDRESS_HOME_LINE2:
156      return ADDRESS_BILLING_LINE2;
157
158    case ADDRESS_HOME_APT_NUM:
159      return ADDRESS_BILLING_APT_NUM;
160
161    case ADDRESS_HOME_CITY:
162      return ADDRESS_BILLING_CITY;
163
164    case ADDRESS_HOME_STATE:
165      return ADDRESS_BILLING_STATE;
166
167    case ADDRESS_HOME_ZIP:
168      return ADDRESS_BILLING_ZIP;
169
170    case ADDRESS_HOME_COUNTRY:
171      return ADDRESS_BILLING_COUNTRY;
172
173    case PHONE_HOME_WHOLE_NUMBER:
174      return PHONE_BILLING_WHOLE_NUMBER;
175
176    case PHONE_HOME_NUMBER:
177      return PHONE_BILLING_NUMBER;
178
179    case PHONE_HOME_CITY_CODE:
180      return PHONE_BILLING_CITY_CODE;
181
182    case PHONE_HOME_COUNTRY_CODE:
183      return PHONE_BILLING_COUNTRY_CODE;
184
185    case PHONE_HOME_CITY_AND_NUMBER:
186      return PHONE_BILLING_CITY_AND_NUMBER;
187
188    default:
189      return field_type;
190  }
191}
192
193// static
194std::string AutofillType::FieldTypeToString(AutofillFieldType type) {
195  switch (type) {
196    case NO_SERVER_DATA:
197      return "NO_SERVER_DATA";
198    case UNKNOWN_TYPE:
199      return "UNKNOWN_TYPE";
200    case EMPTY_TYPE:
201      return "EMPTY_TYPE";
202    case NAME_FIRST:
203      return "NAME_FIRST";
204    case NAME_MIDDLE:
205      return "NAME_MIDDLE";
206    case NAME_LAST:
207      return "NAME_LAST";
208    case NAME_MIDDLE_INITIAL:
209      return "NAME_MIDDLE_INITIAL";
210    case NAME_FULL:
211      return "NAME_FULL";
212    case NAME_SUFFIX:
213      return "NAME_SUFFIX";
214    case EMAIL_ADDRESS:
215      return "EMAIL_ADDRESS";
216    case PHONE_HOME_NUMBER:
217      return "PHONE_HOME_NUMBER";
218    case PHONE_HOME_CITY_CODE:
219      return "PHONE_HOME_CITY_CODE";
220    case PHONE_HOME_COUNTRY_CODE:
221      return "PHONE_HOME_COUNTRY_CODE";
222    case PHONE_HOME_CITY_AND_NUMBER:
223      return "PHONE_HOME_CITY_AND_NUMBER";
224    case PHONE_HOME_WHOLE_NUMBER:
225      return "PHONE_HOME_WHOLE_NUMBER";
226    case PHONE_FAX_NUMBER:
227      return "PHONE_FAX_NUMBER";
228    case PHONE_FAX_CITY_CODE:
229      return "PHONE_FAX_CITY_CODE";
230    case PHONE_FAX_COUNTRY_CODE:
231      return "PHONE_FAX_COUNTRY_CODE";
232    case PHONE_FAX_CITY_AND_NUMBER:
233      return "PHONE_FAX_CITY_AND_NUMBER";
234    case PHONE_FAX_WHOLE_NUMBER:
235      return "PHONE_FAX_WHOLE_NUMBER";
236    case ADDRESS_HOME_LINE1:
237      return "ADDRESS_HOME_LINE1";
238    case ADDRESS_HOME_LINE2:
239      return "ADDRESS_HOME_LINE2";
240    case ADDRESS_HOME_APT_NUM:
241      return "ADDRESS_HOME_APT_NUM";
242    case ADDRESS_HOME_CITY:
243      return "ADDRESS_HOME_CITY";
244    case ADDRESS_HOME_STATE:
245      return "ADDRESS_HOME_STATE";
246    case ADDRESS_HOME_ZIP:
247      return "ADDRESS_HOME_ZIP";
248    case ADDRESS_HOME_COUNTRY:
249      return "ADDRESS_HOME_COUNTRY";
250    case ADDRESS_BILLING_LINE1:
251      return "ADDRESS_BILLING_LINE1";
252    case ADDRESS_BILLING_LINE2:
253      return "ADDRESS_BILLING_LINE2";
254    case ADDRESS_BILLING_APT_NUM:
255      return "ADDRESS_BILLING_APT_NUM";
256    case ADDRESS_BILLING_CITY:
257      return "ADDRESS_BILLING_CITY";
258    case ADDRESS_BILLING_STATE:
259      return "ADDRESS_BILLING_STATE";
260    case ADDRESS_BILLING_ZIP:
261      return "ADDRESS_BILLING_ZIP";
262    case ADDRESS_BILLING_COUNTRY:
263      return "ADDRESS_BILLING_COUNTRY";
264    case CREDIT_CARD_NAME:
265      return "CREDIT_CARD_NAME";
266    case CREDIT_CARD_NUMBER:
267      return "CREDIT_CARD_NUMBER";
268    case CREDIT_CARD_EXP_MONTH:
269      return "CREDIT_CARD_EXP_MONTH";
270    case CREDIT_CARD_EXP_2_DIGIT_YEAR:
271      return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
272    case CREDIT_CARD_EXP_4_DIGIT_YEAR:
273      return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
274    case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
275      return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
276    case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
277      return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
278    case CREDIT_CARD_TYPE:
279      return "CREDIT_CARD_TYPE";
280    case CREDIT_CARD_VERIFICATION_CODE:
281      return "CREDIT_CARD_VERIFICATION_CODE";
282    case COMPANY_NAME:
283      return "COMPANY_NAME";
284    case FIELD_WITH_DEFAULT_VALUE:
285      return "FIELD_WITH_DEFAULT_VALUE";
286    case PHONE_BILLING_NUMBER:
287      return "PHONE_BILLING_NUMBER";
288    case PHONE_BILLING_CITY_CODE:
289      return "PHONE_BILLING_CITY_CODE";
290    case PHONE_BILLING_COUNTRY_CODE:
291      return "PHONE_BILLING_COUNTRY_CODE";
292    case PHONE_BILLING_CITY_AND_NUMBER:
293      return "PHONE_BILLING_CITY_AND_NUMBER";
294    case PHONE_BILLING_WHOLE_NUMBER:
295      return "PHONE_BILLING_WHOLE_NUMBER";
296    case MAX_VALID_FIELD_TYPE:
297      return std::string();
298  }
299  return std::string();
300}
301
302// static
303AutofillFieldType AutofillType::StringToFieldType(const std::string& str) {
304  if (str == "NO_SERVER_DATA")
305    return NO_SERVER_DATA;
306  if (str == "UNKNOWN_TYPE")
307    return UNKNOWN_TYPE;
308  if (str == "EMPTY_TYPE")
309    return EMPTY_TYPE;
310  if (str == "NAME_FIRST")
311    return NAME_FIRST;
312  if (str == "NAME_MIDDLE")
313    return NAME_MIDDLE;
314  if (str == "NAME_LAST")
315    return NAME_LAST;
316  if (str == "NAME_MIDDLE_INITIAL")
317    return NAME_MIDDLE_INITIAL;
318  if (str == "NAME_FULL")
319    return NAME_FULL;
320  if (str == "NAME_SUFFIX")
321    return NAME_SUFFIX;
322  if (str == "EMAIL_ADDRESS")
323    return EMAIL_ADDRESS;
324  if (str == "PHONE_HOME_NUMBER")
325    return PHONE_HOME_NUMBER;
326  if (str == "PHONE_HOME_CITY_CODE")
327    return PHONE_HOME_CITY_CODE;
328  if (str == "PHONE_HOME_COUNTRY_CODE")
329    return PHONE_HOME_COUNTRY_CODE;
330  if (str == "PHONE_HOME_CITY_AND_NUMBER")
331    return PHONE_HOME_CITY_AND_NUMBER;
332  if (str == "PHONE_HOME_WHOLE_NUMBER")
333    return PHONE_HOME_WHOLE_NUMBER;
334  if (str == "ADDRESS_HOME_LINE1")
335    return ADDRESS_HOME_LINE1;
336  if (str == "ADDRESS_HOME_LINE2")
337    return ADDRESS_HOME_LINE2;
338  if (str == "ADDRESS_HOME_APT_NUM")
339    return ADDRESS_HOME_APT_NUM;
340  if (str == "ADDRESS_HOME_CITY")
341    return ADDRESS_HOME_CITY;
342  if (str == "ADDRESS_HOME_STATE")
343    return ADDRESS_HOME_STATE;
344  if (str == "ADDRESS_HOME_ZIP")
345    return ADDRESS_HOME_ZIP;
346  if (str == "ADDRESS_HOME_COUNTRY")
347    return ADDRESS_HOME_COUNTRY;
348  if (str == "ADDRESS_BILLING_LINE1")
349    return ADDRESS_BILLING_LINE1;
350  if (str == "ADDRESS_BILLING_LINE2")
351    return ADDRESS_BILLING_LINE2;
352  if (str == "ADDRESS_BILLING_APT_NUM")
353    return ADDRESS_BILLING_APT_NUM;
354  if (str == "ADDRESS_BILLING_CITY")
355    return ADDRESS_BILLING_CITY;
356  if (str == "ADDRESS_BILLING_STATE")
357    return ADDRESS_BILLING_STATE;
358  if (str == "ADDRESS_BILLING_ZIP")
359    return ADDRESS_BILLING_ZIP;
360  if (str == "ADDRESS_BILLING_COUNTRY")
361    return ADDRESS_BILLING_COUNTRY;
362  if (str == "CREDIT_CARD_NAME")
363    return CREDIT_CARD_NAME;
364  if (str == "CREDIT_CARD_NUMBER")
365    return CREDIT_CARD_NUMBER;
366  if (str == "CREDIT_CARD_EXP_MONTH")
367    return CREDIT_CARD_EXP_MONTH;
368  if (str == "CREDIT_CARD_EXP_2_DIGIT_YEAR")
369    return CREDIT_CARD_EXP_2_DIGIT_YEAR;
370  if (str == "CREDIT_CARD_EXP_4_DIGIT_YEAR")
371    return CREDIT_CARD_EXP_4_DIGIT_YEAR;
372  if (str == "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR")
373    return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR;
374  if (str == "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR")
375    return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
376  if (str == "CREDIT_CARD_TYPE")
377    return CREDIT_CARD_TYPE;
378  if (str == "CREDIT_CARD_VERIFICATION_CODE")
379    return CREDIT_CARD_VERIFICATION_CODE;
380  if (str == "COMPANY_NAME")
381    return COMPANY_NAME;
382
383  NOTREACHED() << "Unknown AutofillFieldType " << str;
384  return UNKNOWN_TYPE;
385}
386
387}  // namespace autofill
388