Add diagnostics_writer.cc to the list of files allowed to printf.
[chromium-blink-merge.git] / components / autofill / content / browser / wallet / form_field_error.cc
blob826ea37df2c1c38ce24fdf6add7ecba5b6d44b9c
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"
12 namespace autofill {
13 namespace wallet {
15 namespace {
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;
51 } // namespace
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;
66 break;
68 case INVALID_POSTAL_CODE:
69 case INVALID_CITY:
70 case INVALID_STATE:
71 if (location_ == LEGAL_ADDRESS || location_ == PAYMENT_INSTRUMENT)
72 return ADDRESS_BILLING_ZIP;
73 if (location_ == SHIPPING_ADDRESS)
74 return ADDRESS_HOME_ZIP;
75 break;
77 case INVALID_ADDRESS:
78 if (location_ == LEGAL_ADDRESS || location_ == PAYMENT_INSTRUMENT)
79 return ADDRESS_BILLING_LINE1;
80 if (location_ == SHIPPING_ADDRESS)
81 return ADDRESS_HOME_LINE1;
82 break;
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:
91 case UNKNOWN_ERROR:
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");
107 case INVALID_CITY:
108 return base::ASCIIToUTF16("Zip code is not valid for the entered city");
110 case INVALID_STATE:
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");
125 case UNKNOWN_ERROR:
126 return base::ASCIIToUTF16("An unknown error occurred");
129 NOTREACHED();
130 return base::string16();
133 // static
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