1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef MOZILLA_A11Y_HTMLFormControlAccessible_H_ 7 #define MOZILLA_A11Y_HTMLFormControlAccessible_H_ 8 9 #include "FormControlAccessible.h" 10 #include "HyperTextAccessibleWrap.h" 11 12 namespace mozilla { 13 class TextEditor; 14 namespace a11y { 15 16 /** 17 * Accessible for HTML progress element. 18 */ 19 typedef ProgressMeterAccessible<1> HTMLProgressMeterAccessible; 20 21 /** 22 * Accessible for HTML input@type="checkbox". 23 */ 24 class HTMLCheckboxAccessible : public LeafAccessible { 25 public: 26 enum { eAction_Click = 0 }; 27 HTMLCheckboxAccessible(nsIContent * aContent,DocAccessible * aDoc)28 HTMLCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc) 29 : LeafAccessible(aContent, aDoc) { 30 // Ignore "CheckboxStateChange" DOM event in lieu of document observer 31 // state change notification. 32 mStateFlags |= eIgnoreDOMUIEvent; 33 } 34 35 // Accessible 36 virtual mozilla::a11y::role NativeRole() override; 37 virtual uint64_t NativeState() override; 38 39 // ActionAccessible 40 virtual uint8_t ActionCount() override; 41 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 42 virtual bool DoAction(uint8_t aIndex) override; 43 44 // Widgets 45 virtual bool IsWidget() const override; 46 }; 47 48 /** 49 * Accessible for HTML input@type="radio" element. 50 */ 51 class HTMLRadioButtonAccessible : public RadioButtonAccessible { 52 public: HTMLRadioButtonAccessible(nsIContent * aContent,DocAccessible * aDoc)53 HTMLRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc) 54 : RadioButtonAccessible(aContent, aDoc) { 55 // Ignore "RadioStateChange" DOM event in lieu of document observer 56 // state change notification. 57 mStateFlags |= eIgnoreDOMUIEvent; 58 } 59 60 // Accessible 61 virtual uint64_t NativeState() override; 62 virtual void GetPositionAndSizeInternal(int32_t* aPosInSet, 63 int32_t* aSetSize) override; 64 }; 65 66 /** 67 * Accessible for HTML input@type="button", @type="submit", @type="image" 68 * and HTML button elements. 69 */ 70 class HTMLButtonAccessible : public HyperTextAccessibleWrap { 71 public: 72 enum { eAction_Click = 0 }; 73 74 HTMLButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); 75 76 // Accessible 77 virtual mozilla::a11y::role NativeRole() override; 78 virtual uint64_t State() override; 79 virtual uint64_t NativeState() override; 80 81 // ActionAccessible 82 virtual uint8_t ActionCount() override; 83 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 84 virtual bool DoAction(uint8_t aIndex) override; 85 86 // Widgets 87 virtual bool IsWidget() const override; 88 89 protected: 90 // Accessible 91 virtual ENameValueFlag NativeName(nsString& aName) override; 92 }; 93 94 /** 95 * Accessible for HTML input@type="text", input@type="password", textarea and 96 * other HTML text controls. 97 */ 98 class HTMLTextFieldAccessible final : public HyperTextAccessibleWrap { 99 public: 100 enum { eAction_Click = 0 }; 101 102 HTMLTextFieldAccessible(nsIContent* aContent, DocAccessible* aDoc); 103 104 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTextFieldAccessible, 105 HyperTextAccessibleWrap) 106 107 // HyperTextAccessible 108 virtual already_AddRefed<TextEditor> GetEditor() const override; 109 110 // Accessible 111 virtual void Value(nsString& aValue) override; 112 virtual void ApplyARIAState(uint64_t* aState) const override; 113 virtual mozilla::a11y::role NativeRole() override; 114 virtual uint64_t NativeState() override; 115 virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override; 116 117 // ActionAccessible 118 virtual uint8_t ActionCount() override; 119 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 120 virtual bool DoAction(uint8_t aIndex) override; 121 122 // Widgets 123 virtual bool IsWidget() const override; 124 virtual Accessible* ContainerWidget() const override; 125 126 protected: ~HTMLTextFieldAccessible()127 virtual ~HTMLTextFieldAccessible() {} 128 129 // Accessible 130 virtual ENameValueFlag NativeName(nsString& aName) override; 131 132 /** 133 * Return a XUL widget element this input is part of. 134 */ XULWidgetElm()135 nsIContent* XULWidgetElm() const { return mContent->GetBindingParent(); } 136 }; 137 138 /** 139 * Accessible for input@type="file" element. 140 */ 141 class HTMLFileInputAccessible : public HyperTextAccessibleWrap { 142 public: 143 HTMLFileInputAccessible(nsIContent* aContent, DocAccessible* aDoc); 144 145 // Accessible 146 virtual mozilla::a11y::role NativeRole() override; 147 virtual nsresult HandleAccEvent(AccEvent* aAccEvent) override; 148 }; 149 150 /** 151 * Used for HTML input@type="number". 152 */ 153 class HTMLSpinnerAccessible : public AccessibleWrap { 154 public: HTMLSpinnerAccessible(nsIContent * aContent,DocAccessible * aDoc)155 HTMLSpinnerAccessible(nsIContent* aContent, DocAccessible* aDoc) 156 : AccessibleWrap(aContent, aDoc) { 157 mStateFlags |= eHasNumericValue; 158 } 159 160 // Accessible 161 virtual mozilla::a11y::role NativeRole() override; 162 virtual void Value(nsString& aValue) override; 163 164 virtual double MaxValue() const override; 165 virtual double MinValue() const override; 166 virtual double CurValue() const override; 167 virtual double Step() const override; 168 virtual bool SetCurValue(double aValue) override; 169 }; 170 171 /** 172 * Used for input@type="range" element. 173 */ 174 class HTMLRangeAccessible : public LeafAccessible { 175 public: HTMLRangeAccessible(nsIContent * aContent,DocAccessible * aDoc)176 HTMLRangeAccessible(nsIContent* aContent, DocAccessible* aDoc) 177 : LeafAccessible(aContent, aDoc) { 178 mStateFlags |= eHasNumericValue; 179 } 180 181 // Accessible 182 virtual void Value(nsString& aValue) override; 183 virtual mozilla::a11y::role NativeRole() override; 184 185 // Value 186 virtual double MaxValue() const override; 187 virtual double MinValue() const override; 188 virtual double CurValue() const override; 189 virtual double Step() const override; 190 virtual bool SetCurValue(double aValue) override; 191 192 // Widgets 193 virtual bool IsWidget() const override; 194 }; 195 196 /** 197 * Accessible for HTML fieldset element. 198 */ 199 class HTMLGroupboxAccessible : public HyperTextAccessibleWrap { 200 public: 201 HTMLGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc); 202 203 // Accessible 204 virtual mozilla::a11y::role NativeRole() override; 205 virtual Relation RelationByType(RelationType aType) override; 206 207 protected: 208 // Accessible 209 virtual ENameValueFlag NativeName(nsString& aName) override; 210 211 // HTMLGroupboxAccessible 212 nsIContent* GetLegend() const; 213 }; 214 215 /** 216 * Accessible for HTML legend element. 217 */ 218 class HTMLLegendAccessible : public HyperTextAccessibleWrap { 219 public: 220 HTMLLegendAccessible(nsIContent* aContent, DocAccessible* aDoc); 221 222 // Accessible 223 virtual Relation RelationByType(RelationType aType) override; 224 }; 225 226 /** 227 * Accessible for HTML5 figure element. 228 */ 229 class HTMLFigureAccessible : public HyperTextAccessibleWrap { 230 public: 231 HTMLFigureAccessible(nsIContent* aContent, DocAccessible* aDoc); 232 233 // Accessible 234 virtual Relation RelationByType(RelationType aType) override; 235 236 protected: 237 // Accessible 238 virtual ENameValueFlag NativeName(nsString& aName) override; 239 240 // HTMLLegendAccessible 241 nsIContent* Caption() const; 242 }; 243 244 /** 245 * Accessible for HTML5 figcaption element. 246 */ 247 class HTMLFigcaptionAccessible : public HyperTextAccessibleWrap { 248 public: 249 HTMLFigcaptionAccessible(nsIContent* aContent, DocAccessible* aDoc); 250 251 // Accessible 252 virtual Relation RelationByType(RelationType aType) override; 253 }; 254 255 } // namespace a11y 256 } // namespace mozilla 257 258 #endif 259