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 "AccessibilityNodeObject.h"
33 #include "LayoutRect.h"
34 #include <wtf/Forward.h>
38 class AccessibilitySVGRoot;
44 class HTMLAnchorElement;
45 class HTMLAreaElement;
47 class HTMLLabelElement;
49 class HTMLSelectElement;
54 class RenderTextControl;
56 class VisibleSelection;
59 class AccessibilityRenderObject : public AccessibilityNodeObject {
61 explicit AccessibilityRenderObject(RenderObject*);
63 static PassRefPtr<AccessibilityRenderObject> create(RenderObject*);
64 virtual ~AccessibilityRenderObject();
66 virtual bool isAccessibilityRenderObject() const { return true; }
70 virtual bool isAttachment() const;
71 virtual bool isFileUploadButton() const;
73 virtual bool isSelected() const;
74 virtual bool isFocused() const;
75 virtual bool isLoaded() const;
76 virtual bool isOffScreen() const;
77 virtual bool isReadOnly() const;
78 virtual bool isUnvisited() const;
79 virtual bool isVisited() const;
80 virtual bool isLinked() const;
81 virtual bool hasBoldFont() const;
82 virtual bool hasItalicFont() const;
83 virtual bool hasPlainText() const;
84 virtual bool hasSameFont(RenderObject*) const;
85 virtual bool hasSameFontColor(RenderObject*) const;
86 virtual bool hasSameStyle(RenderObject*) const;
87 virtual bool hasUnderline() const;
89 virtual bool canSetTextRangeAttributes() const;
90 virtual bool canSetValueAttribute() const;
91 virtual bool canSetExpandedAttribute() const;
93 virtual void setAccessibleName(const AtomicString&);
95 // Provides common logic used by all elements when determining isIgnored.
96 AccessibilityObjectInclusion accessibilityIsIgnoredBase() const;
98 virtual int layoutCount() const;
99 virtual double estimatedLoadingProgress() const;
101 virtual AccessibilityObject* firstChild() const;
102 virtual AccessibilityObject* lastChild() const;
103 virtual AccessibilityObject* previousSibling() const;
104 virtual AccessibilityObject* nextSibling() const;
105 virtual AccessibilityObject* parentObject() const;
106 virtual AccessibilityObject* parentObjectIfExists() const;
107 virtual AccessibilityObject* observableObject() const;
108 virtual void linkedUIElements(AccessibilityChildrenVector&) const;
109 virtual bool exposesTitleUIElement() const;
110 virtual AccessibilityObject* titleUIElement() const;
111 virtual AccessibilityObject* correspondingControlForLabelElement() const;
112 virtual AccessibilityObject* correspondingLabelForControlElement() const;
114 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const;
115 virtual bool supportsARIAOwns() const;
116 virtual bool isPresentationalChildOfAriaRole() const;
117 virtual bool ariaRoleHasPresentationalChildren() const;
119 // Should be called on the root accessibility object to kick off a hit test.
120 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const;
122 FrameView* frameViewIfRenderView() const;
123 virtual Element* anchorElement() const;
125 virtual LayoutRect boundingBoxRect() const;
126 virtual LayoutRect elementRect() const;
127 virtual IntPoint clickPoint();
129 void setRenderer(RenderObject*);
130 virtual RenderObject* renderer() const { return m_renderer; }
131 RenderBoxModelObject* renderBoxModelObject() const;
132 virtual Node* node() const;
134 virtual Document* document() const;
136 RenderView* topRenderer() const;
137 RenderTextControl* textControl() const;
138 FrameView* topDocumentFrameView() const;
139 Document* topDocument() const;
140 HTMLLabelElement* labelElementContainer() const;
142 virtual KURL url() const;
143 virtual PlainTextRange selectedTextRange() const;
144 virtual VisibleSelection selection() const;
145 virtual String stringValue() const;
146 virtual String helpText() const;
147 virtual String textUnderElement() const;
148 virtual String text() const;
149 virtual int textLength() const;
150 virtual String selectedText() const;
151 virtual const AtomicString& accessKey() const;
152 virtual const String& actionVerb() const;
153 virtual Widget* widget() const;
154 virtual Widget* widgetForAttachmentView() const;
155 virtual void getDocumentLinks(AccessibilityChildrenVector&);
156 virtual FrameView* documentFrameView() const;
158 virtual void clearChildren();
159 virtual void updateChildrenIfNecessary();
161 virtual void setFocused(bool);
162 virtual void setSelectedTextRange(const PlainTextRange&);
163 virtual void setValue(const String&);
164 virtual void setSelectedRows(AccessibilityChildrenVector&);
165 virtual AccessibilityOrientation orientation() const;
167 virtual void detach();
168 virtual void textChanged();
169 virtual void addChildren();
170 virtual bool canHaveChildren() const;
171 virtual void selectedChildren(AccessibilityChildrenVector&);
172 virtual void visibleChildren(AccessibilityChildrenVector&);
173 virtual void tabChildren(AccessibilityChildrenVector&);
174 virtual bool shouldFocusActiveDescendant() const;
175 bool shouldNotifyActiveDescendant() const;
176 virtual AccessibilityObject* activeDescendant() const;
177 virtual void handleActiveDescendantChanged();
178 virtual void handleAriaExpandedChanged();
180 virtual VisiblePositionRange visiblePositionRange() const;
181 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const;
182 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const;
183 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const;
184 virtual bool supportsARIAFlowTo() const;
185 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const;
186 virtual bool ariaHasPopup() const;
188 virtual bool supportsARIADropping() const;
189 virtual bool supportsARIADragging() const;
190 virtual bool isARIAGrabbed();
191 virtual void determineARIADropEffects(Vector<String>&);
193 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const;
194 virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const;
195 virtual int index(const VisiblePosition&) const;
197 virtual VisiblePosition visiblePositionForIndex(int) const;
198 virtual int indexForVisiblePosition(const VisiblePosition&) const;
200 virtual void lineBreaks(Vector<int>&) const;
201 virtual PlainTextRange doAXRangeForLine(unsigned) const;
202 virtual PlainTextRange doAXRangeForIndex(unsigned) const;
204 virtual String doAXStringForRange(const PlainTextRange&) const;
205 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const;
207 virtual String stringValueForMSAA() const;
208 virtual String stringRoleForMSAA() const;
209 virtual String nameForMSAA() const;
210 virtual String descriptionForMSAA() const;
211 virtual AccessibilityRole roleValueForMSAA() const;
213 virtual String passwordFieldValue() const;
216 RenderObject* m_renderer;
218 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; }
219 bool needsToUpdateChildren() const { return m_childrenDirty; }
220 ScrollableArea* getScrollableAreaIfScrollable() const;
221 void scrollTo(const IntPoint&) const;
223 virtual bool isDetached() const { return !m_renderer; }
225 virtual AccessibilityRole determineAccessibilityRole();
226 virtual bool computeAccessibilityIsIgnored() const;
229 void ariaListboxSelectedChildren(AccessibilityChildrenVector&);
230 void ariaListboxVisibleChildren(AccessibilityChildrenVector&);
231 bool ariaIsHidden() const;
232 bool isAllowedChildOfTree() const;
233 bool hasTextAlternative() const;
234 String positionalDescriptionForMSAA() const;
235 PlainTextRange ariaSelectedTextRange() const;
236 Element* rootEditableElementForPosition(const Position&) const;
237 bool nodeIsTextControl(const Node*) const;
238 virtual void setNeedsToUpdateChildren() { m_childrenDirty = true; }
240 bool isTabItemSelected() const;
241 LayoutRect checkboxOrRadioRect() const;
242 void addRadioButtonGroupMembers(AccessibilityChildrenVector& linkedUIElements) const;
243 AccessibilityObject* internalLinkElement() const;
244 AccessibilityObject* accessibilityImageMapHitTest(HTMLAreaElement*, const IntPoint&) const;
245 AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement*) const;
246 virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
248 bool renderObjectIsObservable(RenderObject*) const;
249 RenderObject* renderParentObject() const;
250 bool isDescendantOfElementType(const QualifiedName& tagName) const;
252 bool isSVGImage() const;
253 void detachRemoteSVGRoot();
254 AccessibilitySVGRoot* remoteSVGRootElement() const;
255 AccessibilityObject* remoteSVGElementHitTest(const IntPoint&) const;
256 void offsetBoundingBoxForRemoteSVGElement(LayoutRect&) const;
258 void addHiddenChildren();
259 void addTextFieldChildren();
260 void addImageMapChildren();
261 void addCanvasChildren();
262 void addAttachmentChildren();
263 void addRemoteSVGChildren();
265 void updateAttachmentViewParents();
268 void ariaSelectedRows(AccessibilityChildrenVector&);
270 bool elementAttributeValue(const QualifiedName&) const;
271 void setElementAttributeValue(const QualifiedName&, bool);
273 virtual ESpeak speakProperty() const;
275 virtual const AtomicString& ariaLiveRegionStatus() const;
276 virtual const AtomicString& ariaLiveRegionRelevant() const;
277 virtual bool ariaLiveRegionAtomic() const;
278 virtual bool ariaLiveRegionBusy() const;
280 bool inheritsPresentationalRole() const;
283 // All math elements return true for isMathElement().
284 virtual bool isMathElement() const;
285 virtual bool isMathFraction() const;
286 virtual bool isMathFenced() const;
287 virtual bool isMathSubscriptSuperscript() const;
288 virtual bool isMathRow() const;
289 virtual bool isMathUnderOver() const;
290 virtual bool isMathRoot() const;
291 virtual bool isMathSquareRoot() const;
292 virtual bool isMathText() const;
293 virtual bool isMathNumber() const;
294 virtual bool isMathOperator() const;
295 virtual bool isMathFenceOperator() const;
296 virtual bool isMathSeparatorOperator() const;
297 virtual bool isMathIdentifier() const;
298 virtual bool isMathTable() const;
299 virtual bool isMathTableRow() const;
300 virtual bool isMathTableCell() const;
302 // Generic components.
303 virtual AccessibilityObject* mathBaseObject();
306 virtual AccessibilityObject* mathRadicandObject();
307 virtual AccessibilityObject* mathRootIndexObject();
309 // Fraction components.
310 virtual AccessibilityObject* mathNumeratorObject();
311 virtual AccessibilityObject* mathDenominatorObject();
313 // Under over components.
314 virtual AccessibilityObject* mathUnderObject();
315 virtual AccessibilityObject* mathOverObject();
317 // Subscript/superscript components.
318 virtual AccessibilityObject* mathSubscriptObject();
319 virtual AccessibilityObject* mathSuperscriptObject();
321 // Fenced components.
322 virtual String mathFencedOpenString() const;
323 virtual String mathFencedCloseString() const;
325 bool isIgnoredElementWithinMathTree() const;
329 inline AccessibilityRenderObject* toAccessibilityRenderObject(AccessibilityObject* object)
331 ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isAccessibilityRenderObject());
332 return static_cast<AccessibilityRenderObject*>(object);
335 inline const AccessibilityRenderObject* toAccessibilityRenderObject(const AccessibilityObject* object)
337 ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isAccessibilityRenderObject());
338 return static_cast<const AccessibilityRenderObject*>(object);
341 // This will catch anyone doing an unnecessary cast.
342 void toAccessibilityRenderObject(const AccessibilityRenderObject*);
344 } // namespace WebCore
346 #endif // AccessibilityRenderObject_h