OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef AccessibleNode_h | 5 #ifndef AccessibleNode_h |
6 #define AccessibleNode_h | 6 #define AccessibleNode_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/dom/QualifiedName.h" | 9 #include "core/dom/QualifiedName.h" |
10 #include "platform/bindings/ScriptWrappable.h" | 10 #include "platform/bindings/ScriptWrappable.h" |
11 #include "platform/wtf/HashMap.h" | 11 #include "platform/wtf/HashMap.h" |
12 #include "platform/wtf/HashSet.h" | 12 #include "platform/wtf/HashSet.h" |
13 #include "platform/wtf/text/AtomicString.h" | 13 #include "platform/wtf/text/AtomicString.h" |
14 #include "platform/wtf/text/AtomicStringHash.h" | 14 #include "platform/wtf/text/AtomicStringHash.h" |
15 | 15 |
16 namespace blink { | 16 namespace blink { |
17 | 17 |
| 18 class AccessibleNodeList; |
18 class AXObjectCache; | 19 class AXObjectCache; |
19 class Element; | 20 class Element; |
20 class QualifiedName; | 21 class QualifiedName; |
21 | 22 |
22 // All of the properties of AccessibleNode that have type "string". | 23 // All of the properties of AccessibleNode that have type "string". |
23 enum class AOMStringProperty { | 24 enum class AOMStringProperty { |
24 kAutocomplete, | 25 kAutocomplete, |
25 kChecked, | 26 kChecked, |
26 kCurrent, | 27 kCurrent, |
27 kInvalid, | 28 kInvalid, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 kRowIndex, | 63 kRowIndex, |
63 kRowSpan, | 64 kRowSpan, |
64 }; | 65 }; |
65 | 66 |
66 enum class AOMRelationProperty { | 67 enum class AOMRelationProperty { |
67 kActiveDescendant, | 68 kActiveDescendant, |
68 kDetails, | 69 kDetails, |
69 kErrorMessage, | 70 kErrorMessage, |
70 }; | 71 }; |
71 | 72 |
| 73 enum class AOMRelationListProperty { |
| 74 kDescribedBy, |
| 75 kControls, |
| 76 kFlowTo, |
| 77 kLabeledBy, |
| 78 kOwns, |
| 79 }; |
| 80 |
72 // All of the properties of AccessibleNode that have a signed integer type. | 81 // All of the properties of AccessibleNode that have a signed integer type. |
73 // (These all allow the value -1.) | 82 // (These all allow the value -1.) |
74 enum class AOMIntProperty { kColCount, kRowCount, kSetSize }; | 83 enum class AOMIntProperty { kColCount, kRowCount, kSetSize }; |
75 | 84 |
76 // All of the properties of AccessibleNode that have a floating-point type. | 85 // All of the properties of AccessibleNode that have a floating-point type. |
77 enum class AOMFloatProperty { kValueMax, kValueMin, kValueNow }; | 86 enum class AOMFloatProperty { kValueMax, kValueMin, kValueNow }; |
78 | 87 |
79 class AccessibleNode; | 88 class AccessibleNode; |
80 | 89 |
81 class CORE_EXPORT AOMPropertyClient { | 90 class CORE_EXPORT AOMPropertyClient { |
82 public: | 91 public: |
83 virtual void AddStringProperty(AOMStringProperty, const String&) = 0; | 92 virtual void AddStringProperty(AOMStringProperty, const String&) = 0; |
84 virtual void AddBooleanProperty(AOMBooleanProperty, bool) = 0; | 93 virtual void AddBooleanProperty(AOMBooleanProperty, bool) = 0; |
85 virtual void AddIntProperty(AOMIntProperty, int32_t) = 0; | 94 virtual void AddIntProperty(AOMIntProperty, int32_t) = 0; |
86 virtual void AddUIntProperty(AOMUIntProperty, uint32_t) = 0; | 95 virtual void AddUIntProperty(AOMUIntProperty, uint32_t) = 0; |
87 virtual void AddFloatProperty(AOMFloatProperty, float) = 0; | 96 virtual void AddFloatProperty(AOMFloatProperty, float) = 0; |
88 virtual void AddRelationProperty(AOMRelationProperty, | 97 virtual void AddRelationProperty(AOMRelationProperty, |
89 const AccessibleNode&) = 0; | 98 const AccessibleNode&) = 0; |
| 99 virtual void AddRelationListProperty(AOMRelationListProperty, |
| 100 const AccessibleNodeList&) = 0; |
90 }; | 101 }; |
91 | 102 |
92 // Accessibility Object Model node | 103 // Accessibility Object Model node |
93 // Explainer: https://github.com/WICG/aom/blob/master/explainer.md | 104 // Explainer: https://github.com/WICG/aom/blob/master/explainer.md |
94 // Spec: https://wicg.github.io/aom/spec/ | 105 // Spec: https://wicg.github.io/aom/spec/ |
95 class CORE_EXPORT AccessibleNode | 106 class CORE_EXPORT AccessibleNode |
96 : public GarbageCollectedFinalized<AccessibleNode>, | 107 : public GarbageCollectedFinalized<AccessibleNode>, |
97 public ScriptWrappable { | 108 public ScriptWrappable { |
98 DEFINE_WRAPPERTYPEINFO(); | 109 DEFINE_WRAPPERTYPEINFO(); |
99 | 110 |
100 public: | 111 public: |
101 explicit AccessibleNode(Element*); | 112 explicit AccessibleNode(Element*); |
102 virtual ~AccessibleNode(); | 113 virtual ~AccessibleNode(); |
103 | 114 |
104 // Gets the associated element, if any. | 115 // Gets the associated element, if any. |
105 Element* element() const { return element_; } | 116 Element* element() const { return element_; } |
106 | 117 |
107 // Returns the given string property if the Element has an AccessibleNode. | 118 // Returns the given string property if the Element has an AccessibleNode. |
108 static const AtomicString& GetProperty(Element*, AOMStringProperty); | 119 static const AtomicString& GetProperty(Element*, AOMStringProperty); |
109 | 120 |
110 // Returns the given relation property if the Element has an AccessibleNode. | 121 // Returns the given relation property if the Element has an AccessibleNode. |
111 static AccessibleNode* GetProperty(Element*, AOMRelationProperty); | 122 static AccessibleNode* GetProperty(Element*, AOMRelationProperty); |
112 | 123 |
| 124 // Returns the given relation list property if the Element has an |
| 125 // AccessibleNode. |
| 126 static AccessibleNodeList* GetProperty(Element*, AOMRelationListProperty); |
| 127 static bool GetProperty(Element*, |
| 128 AOMRelationListProperty, |
| 129 HeapVector<Member<Element>>&); |
| 130 |
113 // Returns the value of the given property if the | 131 // Returns the value of the given property if the |
114 // Element has an AccessibleNode. Sets |isNull| if the property and | 132 // Element has an AccessibleNode. Sets |isNull| if the property and |
115 // attribute are not present. | 133 // attribute are not present. |
116 static bool GetProperty(Element*, AOMBooleanProperty, bool& is_null); | 134 static bool GetProperty(Element*, AOMBooleanProperty, bool& is_null); |
117 static float GetProperty(Element*, AOMFloatProperty, bool& is_null); | 135 static float GetProperty(Element*, AOMFloatProperty, bool& is_null); |
118 static int32_t GetProperty(Element*, AOMIntProperty, bool& is_null); | 136 static int32_t GetProperty(Element*, AOMIntProperty, bool& is_null); |
119 static uint32_t GetProperty(Element*, AOMUIntProperty, bool& is_null); | 137 static uint32_t GetProperty(Element*, AOMUIntProperty, bool& is_null); |
120 | 138 |
121 // Returns the value of the given string property if the | 139 // Returns the value of the given string property if the |
122 // Element has an AccessibleNode, otherwise returns the equivalent | 140 // Element has an AccessibleNode, otherwise returns the equivalent |
123 // ARIA attribute. | 141 // ARIA attribute. |
124 static const AtomicString& GetPropertyOrARIAAttribute(Element*, | 142 static const AtomicString& GetPropertyOrARIAAttribute(Element*, |
125 AOMStringProperty); | 143 AOMStringProperty); |
126 | 144 |
127 // Returns the given relation property if the Element has an AccessibleNode, | 145 // Returns the given relation property if the Element has an AccessibleNode, |
128 // otherwise returns the equivalent ARIA attribute. | 146 // otherwise returns the equivalent ARIA attribute. |
129 static AccessibleNode* GetPropertyOrARIAAttribute(Element*, | 147 static AccessibleNode* GetPropertyOrARIAAttribute(Element*, |
130 AOMRelationProperty); | 148 AOMRelationProperty); |
131 | 149 |
| 150 // Returns true and provides the the value of the given relation |
| 151 // list property if the Element has an AccessibleNode, or if it has |
| 152 // the equivalent ARIA attribute. Otherwise returns false. |
| 153 static bool GetPropertyOrARIAAttribute(Element*, |
| 154 AOMRelationListProperty, |
| 155 HeapVector<Member<Element>>&); |
| 156 |
132 // Returns the value of the given property if the | 157 // Returns the value of the given property if the |
133 // Element has an AccessibleNode, otherwise returns the equivalent | 158 // Element has an AccessibleNode, otherwise returns the equivalent |
134 // ARIA attribute. Sets |isNull| if the property and attribute are not | 159 // ARIA attribute. Sets |isNull| if the property and attribute are not |
135 // present. | 160 // present. |
136 static bool GetPropertyOrARIAAttribute(Element*, | 161 static bool GetPropertyOrARIAAttribute(Element*, |
137 AOMBooleanProperty, | 162 AOMBooleanProperty, |
138 bool& is_null); | 163 bool& is_null); |
139 static float GetPropertyOrARIAAttribute(Element*, | 164 static float GetPropertyOrARIAAttribute(Element*, |
140 AOMFloatProperty, | 165 AOMFloatProperty, |
141 bool& is_null); | 166 bool& is_null); |
(...skipping 30 matching lines...) Expand all Loading... |
172 | 197 |
173 int32_t colCount(bool& is_null) const; | 198 int32_t colCount(bool& is_null) const; |
174 void setColCount(int32_t, bool is_null); | 199 void setColCount(int32_t, bool is_null); |
175 | 200 |
176 uint32_t colIndex(bool& is_null) const; | 201 uint32_t colIndex(bool& is_null) const; |
177 void setColIndex(uint32_t, bool is_null); | 202 void setColIndex(uint32_t, bool is_null); |
178 | 203 |
179 uint32_t colSpan(bool& is_null) const; | 204 uint32_t colSpan(bool& is_null) const; |
180 void setColSpan(uint32_t, bool is_null); | 205 void setColSpan(uint32_t, bool is_null); |
181 | 206 |
| 207 AccessibleNodeList* controls() const; |
| 208 void setControls(AccessibleNodeList*); |
| 209 |
182 AtomicString current() const; | 210 AtomicString current() const; |
183 void setCurrent(const AtomicString&); | 211 void setCurrent(const AtomicString&); |
184 | 212 |
| 213 AccessibleNodeList* describedBy(); |
| 214 void setDescribedBy(AccessibleNodeList*); |
| 215 |
185 AccessibleNode* details() const; | 216 AccessibleNode* details() const; |
186 void setDetails(AccessibleNode*); | 217 void setDetails(AccessibleNode*); |
187 | 218 |
188 bool disabled(bool& is_null) const; | 219 bool disabled(bool& is_null) const; |
189 void setDisabled(bool, bool is_null); | 220 void setDisabled(bool, bool is_null); |
190 | 221 |
191 AccessibleNode* errorMessage() const; | 222 AccessibleNode* errorMessage() const; |
192 void setErrorMessage(AccessibleNode*); | 223 void setErrorMessage(AccessibleNode*); |
193 | 224 |
194 bool expanded(bool& is_null) const; | 225 bool expanded(bool& is_null) const; |
195 void setExpanded(bool, bool is_null); | 226 void setExpanded(bool, bool is_null); |
196 | 227 |
| 228 AccessibleNodeList* flowTo() const; |
| 229 void setFlowTo(AccessibleNodeList*); |
| 230 |
197 bool hidden(bool& is_null) const; | 231 bool hidden(bool& is_null) const; |
198 void setHidden(bool, bool is_null); | 232 void setHidden(bool, bool is_null); |
199 | 233 |
200 AtomicString invalid() const; | 234 AtomicString invalid() const; |
201 void setInvalid(const AtomicString&); | 235 void setInvalid(const AtomicString&); |
202 | 236 |
203 AtomicString keyShortcuts() const; | 237 AtomicString keyShortcuts() const; |
204 void setKeyShortcuts(const AtomicString&); | 238 void setKeyShortcuts(const AtomicString&); |
205 | 239 |
206 AtomicString label() const; | 240 AtomicString label() const; |
207 void setLabel(const AtomicString&); | 241 void setLabel(const AtomicString&); |
208 | 242 |
| 243 AccessibleNodeList* labeledBy(); |
| 244 void setLabeledBy(AccessibleNodeList*); |
| 245 |
209 uint32_t level(bool& is_null) const; | 246 uint32_t level(bool& is_null) const; |
210 void setLevel(uint32_t, bool is_null); | 247 void setLevel(uint32_t, bool is_null); |
211 | 248 |
212 AtomicString live() const; | 249 AtomicString live() const; |
213 void setLive(const AtomicString&); | 250 void setLive(const AtomicString&); |
214 | 251 |
215 bool modal(bool& is_null) const; | 252 bool modal(bool& is_null) const; |
216 void setModal(bool, bool is_null); | 253 void setModal(bool, bool is_null); |
217 | 254 |
218 bool multiline(bool& is_null) const; | 255 bool multiline(bool& is_null) const; |
219 void setMultiline(bool, bool is_null); | 256 void setMultiline(bool, bool is_null); |
220 | 257 |
221 bool multiselectable(bool& is_null) const; | 258 bool multiselectable(bool& is_null) const; |
222 void setMultiselectable(bool, bool is_null); | 259 void setMultiselectable(bool, bool is_null); |
223 | 260 |
224 AtomicString orientation() const; | 261 AtomicString orientation() const; |
225 void setOrientation(const AtomicString&); | 262 void setOrientation(const AtomicString&); |
226 | 263 |
| 264 AccessibleNodeList* owns() const; |
| 265 void setOwns(AccessibleNodeList*); |
| 266 |
227 AtomicString placeholder() const; | 267 AtomicString placeholder() const; |
228 void setPlaceholder(const AtomicString&); | 268 void setPlaceholder(const AtomicString&); |
229 | 269 |
230 uint32_t posInSet(bool& is_null) const; | 270 uint32_t posInSet(bool& is_null) const; |
231 void setPosInSet(uint32_t, bool is_null); | 271 void setPosInSet(uint32_t, bool is_null); |
232 | 272 |
233 AtomicString pressed() const; | 273 AtomicString pressed() const; |
234 void setPressed(const AtomicString&); | 274 void setPressed(const AtomicString&); |
235 | 275 |
236 bool readOnly(bool& is_null) const; | 276 bool readOnly(bool& is_null) const; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 void setValueMin(float, bool is_null); | 313 void setValueMin(float, bool is_null); |
274 | 314 |
275 float valueNow(bool& is_null) const; | 315 float valueNow(bool& is_null) const; |
276 void setValueNow(float, bool is_null); | 316 void setValueNow(float, bool is_null); |
277 | 317 |
278 AtomicString valueText() const; | 318 AtomicString valueText() const; |
279 void setValueText(const AtomicString&); | 319 void setValueText(const AtomicString&); |
280 | 320 |
281 DECLARE_VIRTUAL_TRACE(); | 321 DECLARE_VIRTUAL_TRACE(); |
282 | 322 |
| 323 protected: |
| 324 friend class AccessibleNodeList; |
| 325 void OnRelationListChanged(AOMRelationListProperty); |
| 326 |
283 private: | 327 private: |
284 void SetStringProperty(AOMStringProperty, const AtomicString&); | 328 void SetStringProperty(AOMStringProperty, const AtomicString&); |
285 void SetRelationProperty(AOMRelationProperty, AccessibleNode*); | 329 void SetRelationProperty(AOMRelationProperty, AccessibleNode*); |
| 330 void SetRelationListProperty(AOMRelationListProperty, AccessibleNodeList*); |
286 void SetBooleanProperty(AOMBooleanProperty, bool value, bool is_null); | 331 void SetBooleanProperty(AOMBooleanProperty, bool value, bool is_null); |
287 void SetFloatProperty(AOMFloatProperty, float value, bool is_null); | 332 void SetFloatProperty(AOMFloatProperty, float value, bool is_null); |
288 void SetUIntProperty(AOMUIntProperty, uint32_t value, bool is_null); | 333 void SetUIntProperty(AOMUIntProperty, uint32_t value, bool is_null); |
289 void SetIntProperty(AOMIntProperty, int32_t value, bool is_null); | 334 void SetIntProperty(AOMIntProperty, int32_t value, bool is_null); |
290 void NotifyAttributeChanged(const blink::QualifiedName&); | 335 void NotifyAttributeChanged(const blink::QualifiedName&); |
291 AXObjectCache* GetAXObjectCache(); | 336 AXObjectCache* GetAXObjectCache(); |
292 | 337 |
293 Vector<std::pair<AOMStringProperty, AtomicString>> string_properties_; | 338 Vector<std::pair<AOMStringProperty, AtomicString>> string_properties_; |
294 Vector<std::pair<AOMBooleanProperty, bool>> boolean_properties_; | 339 Vector<std::pair<AOMBooleanProperty, bool>> boolean_properties_; |
295 Vector<std::pair<AOMFloatProperty, float>> float_properties_; | 340 Vector<std::pair<AOMFloatProperty, float>> float_properties_; |
296 Vector<std::pair<AOMIntProperty, int32_t>> int_properties_; | 341 Vector<std::pair<AOMIntProperty, int32_t>> int_properties_; |
297 Vector<std::pair<AOMUIntProperty, uint32_t>> uint_properties_; | 342 Vector<std::pair<AOMUIntProperty, uint32_t>> uint_properties_; |
298 HeapVector<std::pair<AOMRelationProperty, Member<AccessibleNode>>> | 343 HeapVector<std::pair<AOMRelationProperty, Member<AccessibleNode>>> |
299 relation_properties_; | 344 relation_properties_; |
| 345 HeapVector<std::pair<AOMRelationListProperty, Member<AccessibleNodeList>>> |
| 346 relation_list_properties_; |
300 | 347 |
301 // This object's owner Element. | 348 // This object's owner Element. |
302 Member<Element> element_; | 349 Member<Element> element_; |
303 }; | 350 }; |
304 | 351 |
305 } // namespace blink | 352 } // namespace blink |
306 | 353 |
307 #endif // AccessibleNode_h | 354 #endif // AccessibleNode_h |
OLD | NEW |