Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef nsIConstraintValidition_h___
8 : #define nsIConstraintValidition_h___
9 :
10 : #include "nsISupports.h"
11 : #include "nsString.h"
12 :
13 : class nsIDOMValidityState;
14 :
15 : namespace mozilla {
16 : namespace dom {
17 : class ValidityState;
18 : } // namespace dom
19 : } // namespace mozilla
20 :
21 : #define NS_ICONSTRAINTVALIDATION_IID \
22 : { 0x983829da, 0x1aaf, 0x449c, \
23 : { 0xa3, 0x06, 0x85, 0xd4, 0xf0, 0x31, 0x1c, 0xf6 } }
24 :
25 : /**
26 : * This interface is for form elements implementing the validity constraint API.
27 : * See: http://dev.w3.org/html5/spec/forms.html#the-constraint-validation-api
28 : *
29 : * This interface has to be implemented by all elements implementing the API
30 : * and only them.
31 : */
32 : class nsIConstraintValidation : public nsISupports
33 : {
34 : public:
35 :
36 : NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONSTRAINTVALIDATION_IID);
37 :
38 : friend class mozilla::dom::ValidityState;
39 :
40 : static const uint16_t sContentSpecifiedMaxLengthMessage;
41 :
42 : virtual ~nsIConstraintValidation();
43 :
44 291 : bool IsValid() const { return mValidityBitField == 0; }
45 :
46 69 : bool IsCandidateForConstraintValidation() const {
47 69 : return !mBarredFromConstraintValidation;
48 : }
49 :
50 : NS_IMETHOD GetValidationMessage(nsAString& aValidationMessage);
51 :
52 : enum ValidityStateType
53 : {
54 : VALIDITY_STATE_VALUE_MISSING = 0x1 << 0,
55 : VALIDITY_STATE_TYPE_MISMATCH = 0x1 << 1,
56 : VALIDITY_STATE_PATTERN_MISMATCH = 0x1 << 2,
57 : VALIDITY_STATE_TOO_LONG = 0x1 << 3,
58 : VALIDITY_STATE_TOO_SHORT = 0x1 << 4,
59 : VALIDITY_STATE_RANGE_UNDERFLOW = 0x1 << 5,
60 : VALIDITY_STATE_RANGE_OVERFLOW = 0x1 << 6,
61 : VALIDITY_STATE_STEP_MISMATCH = 0x1 << 7,
62 : VALIDITY_STATE_BAD_INPUT = 0x1 << 8,
63 : VALIDITY_STATE_CUSTOM_ERROR = 0x1 << 9,
64 : };
65 :
66 : void SetValidityState(ValidityStateType aState,
67 : bool aValue);
68 :
69 : // Web IDL binding methods
70 0 : bool WillValidate() const {
71 0 : return IsCandidateForConstraintValidation();
72 : }
73 : mozilla::dom::ValidityState* Validity();
74 : bool CheckValidity();
75 : bool ReportValidity();
76 :
77 : protected:
78 :
79 : // You can't instantiate an object from that class.
80 : nsIConstraintValidation();
81 :
82 : nsresult GetValidity(nsIDOMValidityState** aValidity);
83 : nsresult CheckValidity(bool* aValidity);
84 : void SetCustomValidity(const nsAString& aError);
85 :
86 0 : bool GetValidityState(ValidityStateType aState) const
87 : {
88 0 : return mValidityBitField & aState;
89 : }
90 :
91 : void SetBarredFromConstraintValidation(bool aBarred);
92 :
93 0 : virtual nsresult GetValidationMessage(nsAString& aValidationMessage,
94 : ValidityStateType aType) {
95 0 : return NS_OK;
96 : }
97 :
98 : protected:
99 : /**
100 : * A pointer to the ValidityState object.
101 : */
102 : RefPtr<mozilla::dom::ValidityState> mValidity;
103 :
104 : private:
105 :
106 : /**
107 : * A bitfield representing the current validity state of the element.
108 : * Each bit represent an error. All bits to zero means the element is valid.
109 : */
110 : int16_t mValidityBitField;
111 :
112 : /**
113 : * Keeps track whether the element is barred from constraint validation.
114 : */
115 : bool mBarredFromConstraintValidation;
116 :
117 : /**
118 : * The string representing the custom error.
119 : */
120 : nsString mCustomValidity;
121 : };
122 :
123 : /**
124 : * Use these macro for class inheriting from nsIConstraintValidation to forward
125 : * functions to nsIConstraintValidation.
126 : */
127 : #define NS_FORWARD_NSICONSTRAINTVALIDATION_EXCEPT_SETCUSTOMVALIDITY \
128 : NS_IMETHOD GetValidity(nsIDOMValidityState** aValidity) { \
129 : return nsIConstraintValidation::GetValidity(aValidity); \
130 : } \
131 : NS_IMETHOD GetWillValidate(bool* aWillValidate) { \
132 : *aWillValidate = WillValidate(); \
133 : return NS_OK; \
134 : } \
135 : NS_IMETHOD GetValidationMessage(nsAString& aValidationMessage) { \
136 : return nsIConstraintValidation::GetValidationMessage(aValidationMessage); \
137 : } \
138 : using nsIConstraintValidation::CheckValidity; \
139 : NS_IMETHOD CheckValidity(bool* aValidity) { \
140 : return nsIConstraintValidation::CheckValidity(aValidity); \
141 : }
142 :
143 : #define NS_FORWARD_NSICONSTRAINTVALIDATION \
144 : NS_FORWARD_NSICONSTRAINTVALIDATION_EXCEPT_SETCUSTOMVALIDITY \
145 : NS_IMETHOD SetCustomValidity(const nsAString& aError) { \
146 : nsIConstraintValidation::SetCustomValidity(aError); \
147 : return NS_OK; \
148 : }
149 :
150 :
151 : /* Use these macro when class declares functions from nsIConstraintValidation */
152 : #define NS_IMPL_NSICONSTRAINTVALIDATION_EXCEPT_SETCUSTOMVALIDITY(_from) \
153 : NS_IMETHODIMP _from::GetValidity(nsIDOMValidityState** aValidity) { \
154 : return nsIConstraintValidation::GetValidity(aValidity); \
155 : } \
156 : NS_IMETHODIMP _from::GetWillValidate(bool* aWillValidate) { \
157 : *aWillValidate = WillValidate(); \
158 : return NS_OK; \
159 : } \
160 : NS_IMETHODIMP _from::GetValidationMessage(nsAString& aValidationMessage) { \
161 : return nsIConstraintValidation::GetValidationMessage(aValidationMessage); \
162 : } \
163 : NS_IMETHODIMP _from::CheckValidity(bool* aValidity) { \
164 : return nsIConstraintValidation::CheckValidity(aValidity); \
165 : }
166 :
167 : #define NS_IMPL_NSICONSTRAINTVALIDATION(_from) \
168 : NS_IMPL_NSICONSTRAINTVALIDATION_EXCEPT_SETCUSTOMVALIDITY(_from) \
169 : NS_IMETHODIMP _from::SetCustomValidity(const nsAString& aError) { \
170 : nsIConstraintValidation::SetCustomValidity(aError); \
171 : return NS_OK; \
172 : }
173 :
174 : NS_DEFINE_STATIC_IID_ACCESSOR(nsIConstraintValidation,
175 : NS_ICONSTRAINTVALIDATION_IID)
176 :
177 : #endif // nsIConstraintValidation_h___
178 :
|