2 * Copyright (C) 2012, Google 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 AccessibilityNodeObject_h
30 #define AccessibilityNodeObject_h
32 #include "AccessibilityObject.h"
33 #include "LayoutRect.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 AccessibilityNodeObject : public AccessibilityObject {
60 explicit AccessibilityNodeObject(Node*);
62 static PassRefPtr<AccessibilityNodeObject> create(Node*);
63 virtual ~AccessibilityNodeObject();
67 virtual bool isAccessibilityNodeObject() const { return true; }
69 virtual bool canvasHasFallbackContent() const;
71 virtual bool isAnchor() const;
72 virtual bool isControl() const;
73 virtual bool isFieldset() const;
74 virtual bool isGroup() const;
75 virtual bool isHeading() const;
76 virtual bool isHovered() const;
77 virtual bool isImage() const;
78 virtual bool isImageButton() const;
79 virtual bool isInputImage() const;
80 virtual bool isLink() const;
81 virtual bool isMenu() const;
82 virtual bool isMenuBar() const;
83 virtual bool isMenuButton() const;
84 virtual bool isMenuItem() const;
85 virtual bool isMenuRelated() const;
86 virtual bool isMultiSelectable() const;
87 virtual bool isNativeCheckboxOrRadio() const;
88 virtual bool isNativeImage() const;
89 virtual bool isNativeTextControl() const;
90 virtual bool isPasswordField() const;
91 virtual bool isProgressIndicator() const;
92 virtual bool isSearchField() const;
93 virtual bool isSlider() const;
95 virtual bool isChecked() const;
96 virtual bool isEnabled() const;
97 virtual bool isIndeterminate() const;
98 virtual bool isPressed() const;
99 virtual bool isReadOnly() const;
100 virtual bool isRequired() const;
103 virtual Node* node() const { return m_node; }
104 virtual Document* document() const;
106 virtual bool canSetFocusAttribute() const;
107 virtual int headingLevel() const;
109 virtual String valueDescription() const;
110 virtual float valueForRange() const;
111 virtual float maxValueForRange() const;
112 virtual float minValueForRange() const;
113 virtual float stepValueForRange() const;
115 virtual AccessibilityObject* selectedRadioButton();
116 virtual AccessibilityObject* selectedTabItem();
117 virtual AccessibilityButtonState checkboxOrRadioValue() const;
119 virtual unsigned hierarchicalLevel() const;
120 virtual String textUnderElement() const;
121 virtual String accessibilityDescription() const;
122 virtual String helpText() const;
123 virtual String title() const;
124 virtual String text() const;
125 virtual String stringValue() const;
126 virtual String ariaLabeledByAttribute() const;
128 virtual Element* actionElement() const;
129 Element* mouseButtonListener() const;
130 virtual Element* anchorElement() const;
131 AccessibilityObject* menuForMenuButton() const;
133 virtual void changeValueByPercent(float percentChange);
135 virtual AccessibilityObject* firstChild() const;
136 virtual AccessibilityObject* lastChild() const;
137 virtual AccessibilityObject* previousSibling() const;
138 virtual AccessibilityObject* nextSibling() const;
139 virtual AccessibilityObject* parentObject() const;
140 virtual AccessibilityObject* parentObjectIfExists() const;
142 virtual void detach();
143 virtual void childrenChanged();
144 virtual void updateAccessibilityRole();
146 virtual void increment();
147 virtual void decrement();
149 virtual LayoutRect elementRect() const;
152 AccessibilityRole m_ariaRole;
153 bool m_childrenDirty;
154 mutable AccessibilityRole m_roleForMSAA;
156 virtual bool isDetached() const { return !m_node; }
158 virtual AccessibilityRole determineAccessibilityRole();
159 virtual void addChildren();
160 virtual void addChild(AccessibilityObject*);
161 virtual void insertChild(AccessibilityObject*, unsigned index);
163 virtual bool canHaveChildren() const;
164 virtual bool accessibilityIsIgnored() const;
165 AccessibilityRole ariaRoleAttribute() const;
166 AccessibilityRole determineAriaRoleAttribute() const;
167 AccessibilityRole remapAriaRoleDueToParent(AccessibilityRole) const;
168 bool hasContentEditableAttributeSet() const;
169 bool isDescendantOfBarrenParent() const;
170 void alterSliderValue(bool increase);
171 void changeValueByStep(bool increase);
172 bool isARIARange() const;
173 // This returns true if it's focusable but it's not content editable and it's not a control or ARIA control.
174 bool isGenericFocusableElement() const;
175 HTMLLabelElement* labelForElement(Element*) const;
176 String ariaAccessibilityDescription() const;
177 void ariaLabeledByElements(Vector<Element*>& elements) const;
178 String accessibilityDescriptionForElements(Vector<Element*> &elements) const;
179 void elementsFromAttribute(Vector<Element*>& elements, const QualifiedName&) const;
180 virtual LayoutRect boundingBoxRect() const;
181 String ariaDescribedByAttribute() const;
183 Element* menuElementForMenuButton() const;
184 Element* menuItemElementForMenu() const;
185 AccessibilityObject* menuButtonForMenu() const;
190 virtual void accessibilityText(Vector<AccessibilityText>&);
191 void titleElementText(Vector<AccessibilityText>&);
192 void alternativeText(Vector<AccessibilityText>&) const;
193 void visibleText(Vector<AccessibilityText>&) const;
194 void helpText(Vector<AccessibilityText>&) const;
195 String alternativeTextForWebArea() const;
196 void ariaLabeledByText(Vector<AccessibilityText>&) const;
199 inline AccessibilityNodeObject* toAccessibilityNodeObject(AccessibilityObject* object)
201 ASSERT(!object || object->isAccessibilityNodeObject());
202 return static_cast<AccessibilityNodeObject*>(object);
205 inline const AccessibilityNodeObject* toAccessibilityNodeObject(const AccessibilityObject* object)
207 ASSERT(!object || object->isAccessibilityNodeObject());
208 return static_cast<const AccessibilityNodeObject*>(object);
211 // This will catch anyone doing an unnecessary cast.
212 void toAccessibilityNodeObject(const AccessibilityNodeObject*);
214 } // namespace WebCore
216 #endif // AccessibilityNodeObject_h