2 * Copyright (C) 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef AccessibilityRenderObject_h
30 #define AccessibilityRenderObject_h
32 #include "AccessibilityObject.h"
33 #include "LayoutTypes.h"
34 #include <wtf/Forward.h>
43 class HTMLAnchorElement;
44 class HTMLAreaElement;
46 class HTMLLabelElement;
48 class HTMLSelectElement;
53 class RenderTextControl;
55 class VisibleSelection;
58 class AccessibilityRenderObject : public AccessibilityObject {
60 AccessibilityRenderObject(RenderObject*);
62 static PassRefPtr<AccessibilityRenderObject> create(RenderObject*);
63 virtual ~AccessibilityRenderObject();
65 virtual bool isAccessibilityRenderObject() const { return true; }
67 virtual bool isAnchor() const;
68 virtual bool isAttachment() const;
69 virtual bool isHeading() const;
70 virtual bool isLink() const;
71 virtual bool isImageButton() const;
72 virtual bool isImage() const;
73 virtual bool isNativeImage() const;
74 virtual bool isPasswordField() const;
75 virtual bool isNativeTextControl() const;
76 virtual bool isWebArea() const;
77 virtual bool isFileUploadButton() const;
78 virtual bool isInputImage() const;
79 virtual bool isProgressIndicator() const;
80 virtual bool isSlider() const;
81 virtual bool isMenuRelated() const;
82 virtual bool isMenu() const;
83 virtual bool isMenuBar() const;
84 virtual bool isMenuButton() const;
85 virtual bool isMenuItem() const;
86 virtual bool isControl() const;
87 virtual bool isFieldset() const;
88 virtual bool isGroup() const;
90 virtual bool isEnabled() const;
91 virtual bool isSelected() const;
92 virtual bool isFocused() const;
93 virtual bool isChecked() const;
94 virtual bool isHovered() const;
95 virtual bool isIndeterminate() const;
96 virtual bool isLoaded() const;
97 virtual bool isMultiSelectable() const;
98 virtual bool isOffScreen() const;
99 virtual bool isPressed() const;
100 virtual bool isReadOnly() const;
101 virtual bool isUnvisited() const;
102 virtual bool isVisited() const;
103 virtual bool isRequired() const;
104 virtual bool isLinked() const;
105 virtual bool hasBoldFont() const;
106 virtual bool hasItalicFont() const;
107 virtual bool hasPlainText() const;
108 virtual bool hasSameFont(RenderObject*) const;
109 virtual bool hasSameFontColor(RenderObject*) const;
110 virtual bool hasSameStyle(RenderObject*) const;
111 virtual bool hasUnderline() const;
113 virtual bool canSetFocusAttribute() const;
114 virtual bool canSetTextRangeAttributes() const;
115 virtual bool canSetValueAttribute() const;
116 virtual bool canSetExpandedAttribute() const;
118 virtual void setAccessibleName(const AtomicString&);
120 // Provides common logic used by all elements when determining isIgnored.
121 AccessibilityObjectInclusion accessibilityIsIgnoredBase() const;
122 virtual bool accessibilityIsIgnored() const;
124 virtual int headingLevel() const;
125 virtual AccessibilityButtonState checkboxOrRadioValue() const;
126 virtual String valueDescription() const;
127 virtual float valueForRange() const;
128 virtual float maxValueForRange() const;
129 virtual float minValueForRange() const;
130 virtual float stepValueForRange() const;
131 virtual AccessibilityObject* selectedRadioButton();
132 virtual AccessibilityObject* selectedTabItem();
133 virtual int layoutCount() const;
134 virtual double estimatedLoadingProgress() const;
136 virtual AccessibilityObject* firstChild() const;
137 virtual AccessibilityObject* lastChild() const;
138 virtual AccessibilityObject* previousSibling() const;
139 virtual AccessibilityObject* nextSibling() const;
140 virtual AccessibilityObject* parentObject() const;
141 virtual AccessibilityObject* parentObjectIfExists() const;
142 virtual AccessibilityObject* observableObject() const;
143 virtual void linkedUIElements(AccessibilityChildrenVector&) const;
144 virtual bool exposesTitleUIElement() const;
145 virtual AccessibilityObject* titleUIElement() const;
146 virtual AccessibilityObject* correspondingControlForLabelElement() const;
147 virtual AccessibilityObject* correspondingLabelForControlElement() const;
149 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const;
150 virtual bool supportsARIAOwns() const;
151 virtual AccessibilityRole ariaRoleAttribute() const;
152 virtual bool isPresentationalChildOfAriaRole() const;
153 virtual bool ariaRoleHasPresentationalChildren() const;
154 void updateAccessibilityRole();
156 // Should be called on the root accessibility object to kick off a hit test.
157 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const;
159 virtual Element* actionElement() const;
160 Element* mouseButtonListener() const;
161 FrameView* frameViewIfRenderView() const;
162 virtual Element* anchorElement() const;
163 AccessibilityObject* menuForMenuButton() const;
164 AccessibilityObject* menuButtonForMenu() const;
166 virtual LayoutRect boundingBoxRect() const;
167 virtual LayoutRect elementRect() const;
168 virtual LayoutSize size() const;
169 virtual LayoutPoint clickPoint() const;
171 void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
172 virtual RenderObject* renderer() const { return m_renderer; }
173 RenderBoxModelObject* renderBoxModelObject() const;
174 virtual Node* node() const;
176 RenderView* topRenderer() const;
177 RenderTextControl* textControl() const;
178 Document* document() const;
179 FrameView* topDocumentFrameView() const;
180 Document* topDocument() const;
181 HTMLLabelElement* labelElementContainer() const;
183 virtual KURL url() const;
184 virtual PlainTextRange selectedTextRange() const;
185 virtual VisibleSelection selection() const;
186 virtual String stringValue() const;
187 virtual String ariaLabeledByAttribute() const;
188 virtual String title() const;
189 virtual String ariaDescribedByAttribute() const;
190 virtual String accessibilityDescription() const;
191 virtual String helpText() const;
192 virtual String textUnderElement() const;
193 virtual String text() const;
194 virtual int textLength() const;
195 virtual String selectedText() const;
196 virtual const AtomicString& accessKey() const;
197 virtual const String& actionVerb() const;
198 virtual Widget* widget() const;
199 virtual Widget* widgetForAttachmentView() const;
200 virtual void getDocumentLinks(AccessibilityChildrenVector&);
201 virtual FrameView* documentFrameView() const;
202 virtual unsigned hierarchicalLevel() const;
204 virtual const AccessibilityChildrenVector& children();
205 virtual void clearChildren();
206 virtual void updateChildrenIfNecessary();
208 virtual void setFocused(bool);
209 virtual void setSelectedTextRange(const PlainTextRange&);
210 virtual void setValue(const String&);
211 virtual void setSelectedRows(AccessibilityChildrenVector&);
212 virtual void changeValueByPercent(float percentChange);
213 virtual AccessibilityOrientation orientation() const;
214 virtual void increment();
215 virtual void decrement();
217 virtual void detach();
218 virtual void childrenChanged();
219 virtual void contentChanged();
220 virtual void addChildren();
221 virtual bool canHaveChildren() const;
222 virtual void selectedChildren(AccessibilityChildrenVector&);
223 virtual void visibleChildren(AccessibilityChildrenVector&);
224 virtual void tabChildren(AccessibilityChildrenVector&);
225 virtual bool shouldFocusActiveDescendant() const;
226 virtual AccessibilityObject* activeDescendant() const;
227 virtual void handleActiveDescendantChanged();
228 virtual void handleAriaExpandedChanged();
230 virtual VisiblePositionRange visiblePositionRange() const;
231 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const;
232 virtual LayoutRect boundsForVisiblePositionRange(const VisiblePositionRange&) const;
233 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const;
234 virtual bool supportsARIAFlowTo() const;
235 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const;
236 virtual bool ariaHasPopup() const;
238 virtual bool supportsARIADropping() const;
239 virtual bool supportsARIADragging() const;
240 virtual bool isARIAGrabbed();
241 virtual void determineARIADropEffects(Vector<String>&);
243 virtual VisiblePosition visiblePositionForPoint(const LayoutPoint&) const;
244 virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const;
245 virtual int index(const VisiblePosition&) const;
247 virtual VisiblePosition visiblePositionForIndex(int) const;
248 virtual int indexForVisiblePosition(const VisiblePosition&) const;
250 virtual PlainTextRange doAXRangeForLine(unsigned) const;
251 virtual PlainTextRange doAXRangeForIndex(unsigned) const;
253 virtual String doAXStringForRange(const PlainTextRange&) const;
254 virtual LayoutRect doAXBoundsForRange(const PlainTextRange&) const;
256 virtual String stringValueForMSAA() const;
257 virtual String stringRoleForMSAA() const;
258 virtual String nameForMSAA() const;
259 virtual String descriptionForMSAA() const;
260 virtual AccessibilityRole roleValueForMSAA() const;
263 RenderObject* m_renderer;
264 AccessibilityRole m_ariaRole;
265 mutable bool m_childrenDirty;
267 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; }
268 void ariaLabeledByElements(Vector<Element*>& elements) const;
269 bool needsToUpdateChildren() const { return m_childrenDirty; }
271 virtual bool isDetached() const { return !m_renderer; }
274 void ariaListboxSelectedChildren(AccessibilityChildrenVector&);
275 void ariaListboxVisibleChildren(AccessibilityChildrenVector&);
276 bool ariaIsHidden() const;
277 bool isDescendantOfBarrenParent() const;
278 bool isAllowedChildOfTree() const;
279 bool hasTextAlternative() const;
280 String positionalDescriptionForMSAA() const;
281 PlainTextRange ariaSelectedTextRange() const;
282 Element* rootEditableElementForPosition(const Position&) const;
283 bool nodeIsTextControl(const Node*) const;
285 Element* menuElementForMenuButton() const;
286 Element* menuItemElementForMenu() const;
287 AccessibilityRole determineAccessibilityRole();
288 AccessibilityRole determineAriaRoleAttribute() const;
289 AccessibilityRole remapAriaRoleDueToParent(AccessibilityRole) const;
291 bool isTabItemSelected() const;
292 void alterSliderValue(bool increase);
293 void changeValueByStep(bool increase);
294 bool isNativeCheckboxOrRadio() const;
295 LayoutRect checkboxOrRadioRect() const;
296 void addRadioButtonGroupMembers(AccessibilityChildrenVector& linkedUIElements) const;
297 AccessibilityObject* internalLinkElement() const;
298 AccessibilityObject* accessibilityImageMapHitTest(HTMLAreaElement*, const IntPoint&) const;
299 AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement*) const;
300 bool renderObjectIsObservable(RenderObject*) const;
301 RenderObject* renderParentObject() const;
303 void ariaSelectedRows(AccessibilityChildrenVector&);
305 bool elementAttributeValue(const QualifiedName&) const;
306 void setElementAttributeValue(const QualifiedName&, bool);
308 String accessibilityDescriptionForElements(Vector<Element*> &elements) const;
309 void elementsFromAttribute(Vector<Element*>& elements, const QualifiedName&) const;
310 String ariaAccessibilityDescription() const;
312 virtual ESpeak speakProperty() const;
314 virtual const AtomicString& ariaLiveRegionStatus() const;
315 virtual const AtomicString& ariaLiveRegionRelevant() const;
316 virtual bool ariaLiveRegionAtomic() const;
317 virtual bool ariaLiveRegionBusy() const;
319 bool inheritsPresentationalRole() const;
320 void setNeedsToUpdateChildren() const { m_childrenDirty = true; }
322 mutable AccessibilityRole m_roleForMSAA;
325 inline AccessibilityRenderObject* toAccessibilityRenderObject(AccessibilityObject* object)
327 ASSERT(!object || object->isAccessibilityRenderObject());
328 return static_cast<AccessibilityRenderObject*>(object);
331 inline const AccessibilityRenderObject* toAccessibilityRenderObject(const AccessibilityObject* object)
333 ASSERT(!object || object->isAccessibilityRenderObject());
334 return static_cast<const AccessibilityRenderObject*>(object);
337 // This will catch anyone doing an unnecessary cast.
338 void toAccessibilityRenderObject(const AccessibilityRenderObject*);
340 } // namespace WebCore
342 #endif // AccessibilityRenderObject_h