• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 "chrome/browser/autofill/autofill_type.h"
6 
7 #include <ostream>
8 
9 #include "base/logging.h"
10 
11 namespace {
12 
13 const AutofillType::AutofillTypeDefinition kUnknownAutofillTypeDefinition = {
14   /* UNKNOWN_TYPE */ AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP
15 };
16 
17 AutofillType::AutofillTypeDefinition kAutofillTypeDefinitions[] = {
18   // NO_SERVER_DATA
19   { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
20   // UNKNOWN_TYPE
21   kUnknownAutofillTypeDefinition,
22   // EMPTY_TYPE
23   { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
24 
25   // NAME_FIRST
26   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
27   // NAME_MIDDLE
28   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
29   // NAME_LAST
30   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
31   // NAME_MIDDLE_INITIAL
32   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
33   // NAME_FULL
34   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
35   // NAME_SUFFIX
36   { AutofillType::NAME, AutofillType::NO_SUBGROUP },
37 
38   // EMAIL_ADDRESS
39   { AutofillType::EMAIL, AutofillType::NO_SUBGROUP },
40 
41   // PHONE_HOME_NUMBER
42   { AutofillType::PHONE_HOME, AutofillType::PHONE_NUMBER },
43   // PHONE_HOME_CITY_CODE
44   { AutofillType::PHONE_HOME, AutofillType::PHONE_CITY_CODE },
45   // PHONE_HOME_COUNTRY_CODE
46   { AutofillType::PHONE_HOME, AutofillType::PHONE_COUNTRY_CODE },
47   // PHONE_HOME_CITY_AND_NUMBER
48   { AutofillType::PHONE_HOME, AutofillType::PHONE_CITY_AND_NUMBER },
49   // PHONE_HOME_WHOLE_NUMBER
50   { AutofillType::PHONE_HOME, AutofillType::PHONE_WHOLE_NUMBER },
51 
52   // Work phone numbers (values [15,19]) are deprecated.
53   kUnknownAutofillTypeDefinition,
54   kUnknownAutofillTypeDefinition,
55   kUnknownAutofillTypeDefinition,
56   kUnknownAutofillTypeDefinition,
57   kUnknownAutofillTypeDefinition,
58 
59   // PHONE_FAX_NUMBER
60   { AutofillType::PHONE_FAX, AutofillType::PHONE_NUMBER },
61   // PHONE_FAX_CITY_CODE
62   { AutofillType::PHONE_FAX, AutofillType::PHONE_CITY_CODE },
63   // PHONE_FAX_COUNTRY_CODE
64   { AutofillType::PHONE_FAX, AutofillType::PHONE_COUNTRY_CODE },
65   // PHONE_FAX_CITY_AND_NUMBER
66   { AutofillType::PHONE_FAX, AutofillType::PHONE_CITY_AND_NUMBER },
67   // PHONE_FAX_WHOLE_NUMBER
68   { AutofillType::PHONE_FAX, AutofillType::PHONE_WHOLE_NUMBER },
69 
70   // Cell phone numbers (values [25, 29]) are deprecated.
71   kUnknownAutofillTypeDefinition,
72   kUnknownAutofillTypeDefinition,
73   kUnknownAutofillTypeDefinition,
74   kUnknownAutofillTypeDefinition,
75   kUnknownAutofillTypeDefinition,
76 
77   // ADDRESS_HOME_LINE1
78   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_LINE1 },
79   // ADDRESS_HOME_LINE2
80   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_LINE2 },
81   // ADDRESS_HOME_APT_NUM
82   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_APT_NUM },
83   // ADDRESS_HOME_CITY
84   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_CITY },
85   // ADDRESS_HOME_STATE
86   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_STATE },
87   // ADDRESS_HOME_ZIP
88   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_ZIP },
89   // ADDRESS_HOME_COUNTRY
90   { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_COUNTRY },
91 
92   // ADDRESS_BILLING_LINE1
93   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_LINE1 },
94   // ADDRESS_BILLING_LINE2
95   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_LINE2 },
96   // ADDRESS_BILLING_APT_NUM
97   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_APT_NUM },
98   // ADDRESS_BILLING_CITY
99   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_CITY },
100   // ADDRESS_BILLING_STATE
101   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_STATE },
102   // ADDRESS_BILLING_ZIP
103   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_ZIP },
104   // ADDRESS_BILLING_COUNTRY
105   { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_COUNTRY },
106 
107   // ADDRESS_SHIPPING values [44,50] are deprecated.
108   kUnknownAutofillTypeDefinition,
109   kUnknownAutofillTypeDefinition,
110   kUnknownAutofillTypeDefinition,
111   kUnknownAutofillTypeDefinition,
112   kUnknownAutofillTypeDefinition,
113   kUnknownAutofillTypeDefinition,
114   kUnknownAutofillTypeDefinition,
115 
116   // CREDIT_CARD_NAME
117   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
118   // CREDIT_CARD_NUMBER
119   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
120   // CREDIT_CARD_EXP_MONTH
121   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
122   // CREDIT_CARD_EXP_2_DIGIT_YEAR
123   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
124   // CREDIT_CARD_EXP_4_DIGIT_YEAR
125   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
126   // CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR
127   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
128   // CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR
129   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
130   // CREDIT_CARD_TYPE
131   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
132   // CREDIT_CARD_VERIFICATION_CODE
133   { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
134 
135   // COMPANY_NAME
136   { AutofillType::COMPANY, AutofillType::NO_SUBGROUP },
137 };
138 
139 }  // namespace
140 
AutofillType(AutofillFieldType field_type)141 AutofillType::AutofillType(AutofillFieldType field_type) {
142   if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
143       (field_type >= 15 && field_type <= 19) ||
144       (field_type >= 25 && field_type <= 29) ||
145       (field_type >= 44 && field_type <= 50))
146     field_type_ = UNKNOWN_TYPE;
147   else
148     field_type_ = field_type;
149 }
150 
AutofillType(const AutofillType & autofill_type)151 AutofillType::AutofillType(const AutofillType& autofill_type) {
152   *this = autofill_type;
153 }
154 
operator =(const AutofillType & autofill_type)155 AutofillType& AutofillType::operator=(const AutofillType& autofill_type) {
156   if (this != &autofill_type)
157     this->field_type_ = autofill_type.field_type_;
158   return *this;
159 }
160 
field_type() const161 AutofillFieldType AutofillType::field_type() const {
162   return field_type_;
163 }
164 
group() const165 FieldTypeGroup AutofillType::group() const {
166   return kAutofillTypeDefinitions[field_type_].group;
167 }
168 
subgroup() const169 FieldTypeSubGroup AutofillType::subgroup() const {
170   return kAutofillTypeDefinitions[field_type_].subgroup;
171 }
172 
173 // static
GetEquivalentFieldType(AutofillFieldType field_type)174 AutofillFieldType AutofillType::GetEquivalentFieldType(
175     AutofillFieldType field_type) {
176   // When billing information is requested from the profile we map to the
177   // home address equivalents.
178   switch (field_type) {
179     case ADDRESS_BILLING_LINE1:
180       return ADDRESS_HOME_LINE1;
181 
182     case ADDRESS_BILLING_LINE2:
183       return ADDRESS_HOME_LINE2;
184 
185     case ADDRESS_BILLING_APT_NUM:
186       return ADDRESS_HOME_APT_NUM;
187 
188     case ADDRESS_BILLING_CITY:
189       return ADDRESS_HOME_CITY;
190 
191     case ADDRESS_BILLING_STATE:
192       return ADDRESS_HOME_STATE;
193 
194     case ADDRESS_BILLING_ZIP:
195       return ADDRESS_HOME_ZIP;
196 
197     case ADDRESS_BILLING_COUNTRY:
198       return ADDRESS_HOME_COUNTRY;
199 
200     default:
201       return field_type;
202   }
203 }
204 
205 // static
FieldTypeToString(AutofillFieldType type)206 std::string AutofillType::FieldTypeToString(AutofillFieldType type) {
207   switch (type) {
208     case NO_SERVER_DATA:
209       return "NO_SERVER_DATA";
210     case UNKNOWN_TYPE:
211       return "UNKNOWN_TYPE";
212     case EMPTY_TYPE:
213       return "EMPTY_TYPE";
214     case NAME_FIRST:
215       return "NAME_FIRST";
216     case NAME_MIDDLE:
217       return "NAME_MIDDLE";
218     case NAME_LAST:
219       return "NAME_LAST";
220     case NAME_MIDDLE_INITIAL:
221       return "NAME_MIDDLE_INITIAL";
222     case NAME_FULL:
223       return "NAME_FULL";
224     case NAME_SUFFIX:
225       return "NAME_SUFFIX";
226     case EMAIL_ADDRESS:
227       return "EMAIL_ADDRESS";
228     case PHONE_HOME_NUMBER:
229       return "PHONE_HOME_NUMBER";
230     case PHONE_HOME_CITY_CODE:
231       return "PHONE_HOME_CITY_CODE";
232     case PHONE_HOME_COUNTRY_CODE:
233       return "PHONE_HOME_COUNTRY_CODE";
234     case PHONE_HOME_CITY_AND_NUMBER:
235       return "PHONE_HOME_CITY_AND_NUMBER";
236     case PHONE_HOME_WHOLE_NUMBER:
237       return "PHONE_HOME_WHOLE_NUMBER";
238     case PHONE_FAX_NUMBER:
239       return "PHONE_FAX_NUMBER";
240     case PHONE_FAX_CITY_CODE:
241       return "PHONE_FAX_CITY_CODE";
242     case PHONE_FAX_COUNTRY_CODE:
243       return "PHONE_FAX_COUNTRY_CODE";
244     case PHONE_FAX_CITY_AND_NUMBER:
245       return "PHONE_FAX_CITY_AND_NUMBER";
246     case PHONE_FAX_WHOLE_NUMBER:
247       return "PHONE_FAX_WHOLE_NUMBER";
248     case ADDRESS_HOME_LINE1:
249       return "ADDRESS_HOME_LINE1";
250     case ADDRESS_HOME_LINE2:
251       return "ADDRESS_HOME_LINE2";
252     case ADDRESS_HOME_APT_NUM:
253       return "ADDRESS_HOME_APT_NUM";
254     case ADDRESS_HOME_CITY:
255       return "ADDRESS_HOME_CITY";
256     case ADDRESS_HOME_STATE:
257       return "ADDRESS_HOME_STATE";
258     case ADDRESS_HOME_ZIP:
259       return "ADDRESS_HOME_ZIP";
260     case ADDRESS_HOME_COUNTRY:
261       return "ADDRESS_HOME_COUNTRY";
262     case ADDRESS_BILLING_LINE1:
263       return "ADDRESS_BILLING_LINE1";
264     case ADDRESS_BILLING_LINE2:
265       return "ADDRESS_BILLING_LINE2";
266     case ADDRESS_BILLING_APT_NUM:
267       return "ADDRESS_BILLING_APT_NUM";
268     case ADDRESS_BILLING_CITY:
269       return "ADDRESS_BILLING_CITY";
270     case ADDRESS_BILLING_STATE:
271       return "ADDRESS_BILLING_STATE";
272     case ADDRESS_BILLING_ZIP:
273       return "ADDRESS_BILLING_ZIP";
274     case ADDRESS_BILLING_COUNTRY:
275       return "ADDRESS_BILLING_COUNTRY";
276     case CREDIT_CARD_NAME:
277       return "CREDIT_CARD_NAME";
278     case CREDIT_CARD_NUMBER:
279       return "CREDIT_CARD_NUMBER";
280     case CREDIT_CARD_EXP_MONTH:
281       return "CREDIT_CARD_EXP_MONTH";
282     case CREDIT_CARD_EXP_2_DIGIT_YEAR:
283       return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
284     case CREDIT_CARD_EXP_4_DIGIT_YEAR:
285       return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
286     case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
287       return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
288     case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
289       return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
290     case CREDIT_CARD_TYPE:
291       return "CREDIT_CARD_TYPE";
292     case CREDIT_CARD_VERIFICATION_CODE:
293       return "CREDIT_CARD_VERIFICATION_CODE";
294     case COMPANY_NAME:
295       return "COMPANY_NAME";
296     default:
297       NOTREACHED() << "Invalid AutofillFieldType value.";
298   }
299   return std::string();
300 }
301 
302 // static
StringToFieldType(const std::string & str)303 AutofillFieldType 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 == "PHONE_FAX_NUMBER")
335     return PHONE_FAX_NUMBER;
336   if (str == "PHONE_FAX_CITY_CODE")
337     return PHONE_FAX_CITY_CODE;
338   if (str == "PHONE_FAX_COUNTRY_CODE")
339     return PHONE_FAX_COUNTRY_CODE;
340   if (str == "PHONE_FAX_CITY_AND_NUMBER")
341     return PHONE_FAX_CITY_AND_NUMBER;
342   if (str == "PHONE_FAX_WHOLE_NUMBER")
343     return PHONE_FAX_WHOLE_NUMBER;
344   if (str == "ADDRESS_HOME_LINE1")
345     return ADDRESS_HOME_LINE1;
346   if (str == "ADDRESS_HOME_LINE2")
347     return ADDRESS_HOME_LINE2;
348   if (str == "ADDRESS_HOME_APT_NUM")
349     return ADDRESS_HOME_APT_NUM;
350   if (str == "ADDRESS_HOME_CITY")
351     return ADDRESS_HOME_CITY;
352   if (str == "ADDRESS_HOME_STATE")
353     return ADDRESS_HOME_STATE;
354   if (str == "ADDRESS_HOME_ZIP")
355     return ADDRESS_HOME_ZIP;
356   if (str == "ADDRESS_HOME_COUNTRY")
357     return ADDRESS_HOME_COUNTRY;
358   if (str == "ADDRESS_BILLING_LINE1")
359     return ADDRESS_BILLING_LINE1;
360   if (str == "ADDRESS_BILLING_LINE2")
361     return ADDRESS_BILLING_LINE2;
362   if (str == "ADDRESS_BILLING_APT_NUM")
363     return ADDRESS_BILLING_APT_NUM;
364   if (str == "ADDRESS_BILLING_CITY")
365     return ADDRESS_BILLING_CITY;
366   if (str == "ADDRESS_BILLING_STATE")
367     return ADDRESS_BILLING_STATE;
368   if (str == "ADDRESS_BILLING_ZIP")
369     return ADDRESS_BILLING_ZIP;
370   if (str == "ADDRESS_BILLING_COUNTRY")
371     return ADDRESS_BILLING_COUNTRY;
372   if (str == "CREDIT_CARD_NAME")
373     return CREDIT_CARD_NAME;
374   if (str == "CREDIT_CARD_NUMBER")
375     return CREDIT_CARD_NUMBER;
376   if (str == "CREDIT_CARD_EXP_MONTH")
377     return CREDIT_CARD_EXP_MONTH;
378   if (str == "CREDIT_CARD_EXP_2_DIGIT_YEAR")
379     return CREDIT_CARD_EXP_2_DIGIT_YEAR;
380   if (str == "CREDIT_CARD_EXP_4_DIGIT_YEAR")
381     return CREDIT_CARD_EXP_4_DIGIT_YEAR;
382   if (str == "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR")
383     return CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR;
384   if (str == "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR")
385     return CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR;
386   if (str == "CREDIT_CARD_TYPE")
387     return CREDIT_CARD_TYPE;
388   if (str == "CREDIT_CARD_VERIFICATION_CODE")
389     return CREDIT_CARD_VERIFICATION_CODE;
390   if (str == "COMPANY_NAME")
391     return COMPANY_NAME;
392 
393   NOTREACHED() << "Unknown AutofillFieldType " << str;
394   return UNKNOWN_TYPE;
395 }
396