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.
5 #include "components/autofill/content/browser/wallet/form_field_error.h"
7 #include "base/logging.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/values.h"
17 FormFieldError::ErrorType
ErrorTypeFromString(const std::string
& error_type
) {
18 if (LowerCaseEqualsASCII(error_type
, "unknown_error"))
19 return FormFieldError::UNKNOWN_ERROR
;
20 if (LowerCaseEqualsASCII(error_type
, "invalid_phone_number"))
21 return FormFieldError::INVALID_PHONE_NUMBER
;
22 if (LowerCaseEqualsASCII(error_type
, "invalid_postal_code"))
23 return FormFieldError::INVALID_POSTAL_CODE
;
24 if (LowerCaseEqualsASCII(error_type
, "invalid_address"))
25 return FormFieldError::INVALID_ADDRESS
;
26 if (LowerCaseEqualsASCII(error_type
, "invalid_card_details"))
27 return FormFieldError::INVALID_CARD_DETAILS
;
28 if (LowerCaseEqualsASCII(error_type
, "invalid_city"))
29 return FormFieldError::INVALID_CITY
;
30 if (LowerCaseEqualsASCII(error_type
, "invalid_instrument"))
31 return FormFieldError::INVALID_INSTRUMENT
;
32 if (LowerCaseEqualsASCII(error_type
, "invalid_state"))
33 return FormFieldError::INVALID_STATE
;
34 if (LowerCaseEqualsASCII(error_type
, "required_field_not_set"))
35 return FormFieldError::REQUIRED_FIELD_NOT_SET
;
36 return FormFieldError::UNKNOWN_ERROR
;
39 FormFieldError::Location
LocationFromString(const std::string
& location
) {
40 if (LowerCaseEqualsASCII(location
, "unknown_location"))
41 return FormFieldError::UNKNOWN_LOCATION
;
42 if (LowerCaseEqualsASCII(location
, "payment_instrument"))
43 return FormFieldError::PAYMENT_INSTRUMENT
;
44 if (LowerCaseEqualsASCII(location
, "shipping_address"))
45 return FormFieldError::SHIPPING_ADDRESS
;
46 if (LowerCaseEqualsASCII(location
, "legal_address"))
47 return FormFieldError::LEGAL_ADDRESS
;
48 return FormFieldError::UNKNOWN_LOCATION
;
53 FormFieldError::FormFieldError(ErrorType error_type
, Location location
)
54 : error_type_(error_type
),
55 location_(location
) {}
57 FormFieldError::~FormFieldError() {}
59 ServerFieldType
FormFieldError::GetAutofillType() const {
60 switch (error_type_
) {
61 case INVALID_PHONE_NUMBER
:
62 if (location_
== LEGAL_ADDRESS
|| location_
== PAYMENT_INSTRUMENT
)
63 return PHONE_BILLING_WHOLE_NUMBER
;
64 if (location_
== SHIPPING_ADDRESS
)
65 return PHONE_HOME_WHOLE_NUMBER
;
68 case INVALID_POSTAL_CODE
:
71 if (location_
== LEGAL_ADDRESS
|| location_
== PAYMENT_INSTRUMENT
)
72 return ADDRESS_BILLING_ZIP
;
73 if (location_
== SHIPPING_ADDRESS
)
74 return ADDRESS_HOME_ZIP
;
78 if (location_
== LEGAL_ADDRESS
|| location_
== PAYMENT_INSTRUMENT
)
79 return ADDRESS_BILLING_LINE1
;
80 if (location_
== SHIPPING_ADDRESS
)
81 return ADDRESS_HOME_LINE1
;
84 case INVALID_CARD_DETAILS
:
85 return CREDIT_CARD_VERIFICATION_CODE
;
87 case INVALID_INSTRUMENT
:
88 return CREDIT_CARD_NUMBER
;
90 case REQUIRED_FIELD_NOT_SET
:
92 return MAX_VALID_FIELD_TYPE
;
95 return MAX_VALID_FIELD_TYPE
;
98 // TODO(ahutter): L10n after UX provides strings.
99 base::string16
FormFieldError::GetErrorMessage() const {
100 switch (error_type_
) {
101 case INVALID_PHONE_NUMBER
:
102 return base::ASCIIToUTF16("Not a valid phone number");
104 case INVALID_POSTAL_CODE
:
105 return base::ASCIIToUTF16("Not a valid zip code");
108 return base::ASCIIToUTF16("Zip code is not valid for the entered city");
111 return base::ASCIIToUTF16("Zip code is not valid for the entered state");
113 case INVALID_ADDRESS
:
114 return base::ASCIIToUTF16("Not a valid street address");
116 case INVALID_CARD_DETAILS
:
117 return base::ASCIIToUTF16("Not a valid CVN");
119 case INVALID_INSTRUMENT
:
120 return base::ASCIIToUTF16("Not a valid CC#");
122 case REQUIRED_FIELD_NOT_SET
:
123 return base::ASCIIToUTF16("Required field is missing");
126 return base::ASCIIToUTF16("An unknown error occurred");
130 return base::string16();
134 FormFieldError
FormFieldError::CreateFormFieldError(
135 const base::DictionaryValue
& dictionary
) {
136 FormFieldError
form_field_error(UNKNOWN_ERROR
, UNKNOWN_LOCATION
);
138 std::string error_type
;
139 if (dictionary
.GetString("type", &error_type
))
140 form_field_error
.error_type_
= ErrorTypeFromString(error_type
);
142 std::string location
;
143 if (dictionary
.GetString("location", &location
))
144 form_field_error
.location_
= LocationFromString(location
);
146 return form_field_error
;
149 bool FormFieldError::operator==(const FormFieldError
& other
) const {
150 return error_type_
== other
.error_type_
&& location_
== other
.location_
;
153 } // namespace wallet
154 } // namespace autofill