- add sources.
[platform/framework/web/crosswalk.git] / src / components / autofill / content / browser / wallet / form_field_error.h
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 #ifndef COMPONENTS_AUTOFILL_BROWSER_WALLET_FORM_FIELD_ERROR_H_
6 #define COMPONENTS_AUTOFILL_BROWSER_WALLET_FORM_FIELD_ERROR_H_
7
8 #include "base/strings/string16.h"
9 #include "components/autofill/core/browser/field_types.h"
10
11 namespace base {
12 class DictionaryValue;
13 }
14
15 namespace autofill {
16 namespace wallet {
17
18 // Class for representing a single Wallet server side validation error.
19 class FormFieldError {
20  public:
21   // The validation error returned from the server.
22   enum ErrorType {
23     UNKNOWN_ERROR,
24     INVALID_PHONE_NUMBER,
25     INVALID_POSTAL_CODE,
26     // Bad street address.
27     INVALID_ADDRESS,
28     // Bad CVC.
29     INVALID_CARD_DETAILS,
30     // Wallet sends this when ZIP is invalid for the given city.
31     INVALID_CITY,
32     // Catch-all for many errors. E.g., no address given, no address ID,
33     // invalid card number. Wallet should only send us this error for invalid
34     // card number.
35     INVALID_INSTRUMENT,
36     // Wallet sends this when ZIP is invalid for the given state.
37     INVALID_STATE,
38     REQUIRED_FIELD_NOT_SET,
39     // TODO(ahutter): Add INVALID_COUNTRY when user can select country in the
40     // chooser.
41   };
42
43   // The section of the "form" where the error occurred.
44   enum Location {
45     UNKNOWN_LOCATION,
46     PAYMENT_INSTRUMENT,
47     SHIPPING_ADDRESS,
48     // Currently Sugar uses the billing address as user's legal address. So any
49     // error in billing address will be accompanied by an error in legal
50     // address. The client side should map LEGAL_ADDRESS to the billing address.
51     // This will ensure compatibility in case Sugar starts having a separate
52     // legal address form.
53     LEGAL_ADDRESS,
54   };
55
56   FormFieldError(ErrorType error_type, Location location);
57   ~FormFieldError();
58
59   ErrorType error_type() const { return error_type_; }
60   Location location() const { return location_; }
61
62   // Gets the appropriate field type for |location| and |error_type|.
63   ServerFieldType GetAutofillType() const;
64
65   // Gets a user facing error message appropriate for |location| and
66   // |error_type|.
67   base::string16 GetErrorMessage() const;
68
69   // Creates an instance of FormFieldError from the input dictionary.
70   static FormFieldError CreateFormFieldError(
71       const base::DictionaryValue& dictionary);
72
73   bool operator==(const FormFieldError& other) const;
74
75  private:
76   // The type of error as defined by the Wallet server.
77   ErrorType error_type_;
78
79   // The location of the error as defined by the Wallet server.
80   Location location_;
81
82   // This class is intentionally copyable and assignable.
83 };
84
85 }  // namespace wallet
86 }  // namespace autofill
87
88 #endif  // COMPONENTS_AUTOFILL_BROWSER_WALLET_FORM_FIELD_ERROR_H_