Rolling out r185881
[WebKit-https.git] / Source / WebCore / accessibility / AccessibilityRenderObject.h
1 /*
2  * Copyright (C) 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
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 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.
16  *
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.
27  */
28
29 #ifndef AccessibilityRenderObject_h
30 #define AccessibilityRenderObject_h
31
32 #include "AccessibilityNodeObject.h"
33 #include "LayoutRect.h"
34 #include <wtf/Forward.h>
35
36 namespace WebCore {
37     
38 class AccessibilitySVGRoot;
39 class AXObjectCache;
40 class Element;
41 class Frame;
42 class FrameView;
43 class HitTestResult;
44 class HTMLAnchorElement;
45 class HTMLAreaElement;
46 class HTMLElement;
47 class HTMLLabelElement;
48 class HTMLMapElement;
49 class HTMLSelectElement;
50 class IntPoint;
51 class IntSize;
52 class Node;
53 class RenderListBox;
54 class RenderTextControl;
55 class RenderView;
56 class VisibleSelection;
57 class Widget;
58     
59 class AccessibilityRenderObject : public AccessibilityNodeObject {
60 public:
61     static Ref<AccessibilityRenderObject> create(RenderObject*);
62     virtual ~AccessibilityRenderObject();
63
64     virtual void init() override;
65     
66     virtual bool isAttachment() const override;
67     virtual bool isFileUploadButton() const override;
68
69     virtual bool isSelected() const override;
70     virtual bool isFocused() const override;
71     virtual bool isLoaded() const override;
72     virtual bool isOffScreen() const override;
73     virtual bool isReadOnly() const override;
74     virtual bool isUnvisited() const override;
75     virtual bool isVisited() const override;
76     virtual bool isLinked() const override;
77     virtual bool hasBoldFont() const override;
78     virtual bool hasItalicFont() const override;
79     virtual bool hasPlainText() const override;
80     virtual bool hasSameFont(RenderObject*) const override;
81     virtual bool hasSameFontColor(RenderObject*) const override;
82     virtual bool hasSameStyle(RenderObject*) const override;
83     virtual bool hasUnderline() const override;
84
85     virtual bool canSetTextRangeAttributes() const override;
86     virtual bool canSetValueAttribute() const override;
87     virtual bool canSetExpandedAttribute() const override;
88
89     virtual void setAccessibleName(const AtomicString&) override;
90     
91     // Provides common logic used by all elements when determining isIgnored.
92     virtual AccessibilityObjectInclusion defaultObjectInclusion() const override;
93     
94     virtual int layoutCount() const override;
95     virtual double estimatedLoadingProgress() const override;
96     
97     virtual AccessibilityObject* firstChild() const override;
98     virtual AccessibilityObject* lastChild() const override;
99     virtual AccessibilityObject* previousSibling() const override;
100     virtual AccessibilityObject* nextSibling() const override;
101     virtual AccessibilityObject* parentObject() const override;
102     virtual AccessibilityObject* parentObjectIfExists() const override;
103     virtual AccessibilityObject* observableObject() const override;
104     virtual void linkedUIElements(AccessibilityChildrenVector&) const override;
105     virtual bool exposesTitleUIElement() const override;
106     virtual AccessibilityObject* titleUIElement() const override;
107     virtual AccessibilityObject* correspondingControlForLabelElement() const override;
108     virtual AccessibilityObject* correspondingLabelForControlElement() const override;
109
110     virtual void ariaOwnsElements(AccessibilityChildrenVector&) const override;
111     virtual bool supportsARIAOwns() const override;
112     virtual bool isPresentationalChildOfAriaRole() const override;
113     virtual bool ariaRoleHasPresentationalChildren() const override;
114     
115     // Should be called on the root accessibility object to kick off a hit test.
116     virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const override;
117
118     virtual Element* anchorElement() const override;
119     
120     virtual LayoutRect boundingBoxRect() const override;
121     virtual LayoutRect elementRect() const override;
122     virtual IntPoint clickPoint() override;
123     
124     void setRenderer(RenderObject*);
125     virtual RenderObject* renderer() const override { return m_renderer; }
126     RenderBoxModelObject* renderBoxModelObject() const;
127     virtual Node* node() const override;
128
129     virtual Document* document() const override;
130
131     RenderView* topRenderer() const;
132     RenderTextControl* textControl() const;
133     HTMLLabelElement* labelElementContainer() const;
134     
135     virtual URL url() const override;
136     virtual PlainTextRange selectedTextRange() const override;
137     virtual VisibleSelection selection() const override;
138     virtual String stringValue() const override;
139     virtual String helpText() const override;
140     virtual String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override;
141     virtual String text() const override;
142     virtual int textLength() const override;
143     virtual String selectedText() const override;
144     virtual const AtomicString& accessKey() const override;
145     virtual const String& actionVerb() const;
146     virtual Widget* widget() const override;
147     virtual Widget* widgetForAttachmentView() const override;
148     virtual void getDocumentLinks(AccessibilityChildrenVector&);
149     virtual FrameView* documentFrameView() const override;
150
151     virtual void clearChildren() override;
152     virtual void updateChildrenIfNecessary() override;
153     
154     virtual void setFocused(bool) override;
155     virtual void setSelectedTextRange(const PlainTextRange&) override;
156     virtual void setValue(const String&) override;
157     virtual void setSelectedRows(AccessibilityChildrenVector&) override;
158     virtual AccessibilityOrientation orientation() const override;
159     
160     virtual void detach(AccessibilityDetachmentType, AXObjectCache*) override;
161     virtual void textChanged() override;
162     virtual void addChildren() override;
163     virtual bool canHaveChildren() const override;
164     virtual void selectedChildren(AccessibilityChildrenVector&) override;
165     virtual void visibleChildren(AccessibilityChildrenVector&) override;
166     virtual void tabChildren(AccessibilityChildrenVector&) override;
167     virtual bool shouldFocusActiveDescendant() const override;
168     bool shouldNotifyActiveDescendant() const;
169     virtual AccessibilityObject* activeDescendant() const override;
170     virtual void handleActiveDescendantChanged() override;
171     virtual void handleAriaExpandedChanged() override;
172     
173     virtual VisiblePositionRange visiblePositionRange() const override;
174     virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const override;
175     virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override;
176     virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override;
177     virtual bool supportsARIAFlowTo() const override;
178     virtual void ariaFlowToElements(AccessibilityChildrenVector&) const override;
179     virtual bool supportsARIADescribedBy() const override;
180     virtual void ariaDescribedByElements(AccessibilityChildrenVector&) const override;
181     virtual bool supportsARIAControls() const override;
182     virtual void ariaControlsElements(AccessibilityChildrenVector&) const override;
183     virtual bool ariaHasPopup() const override;
184
185     virtual bool supportsARIADropping() const override;
186     virtual bool supportsARIADragging() const override;
187     virtual bool isARIAGrabbed() override;
188     virtual void determineARIADropEffects(Vector<String>&) override;
189     
190     virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const override;
191     virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const override;
192     virtual int index(const VisiblePosition&) const override;
193
194     virtual VisiblePosition visiblePositionForIndex(int) const override;
195     virtual int indexForVisiblePosition(const VisiblePosition&) const override;
196
197     virtual void lineBreaks(Vector<int>&) const override;
198     virtual PlainTextRange doAXRangeForLine(unsigned) const override;
199     virtual PlainTextRange doAXRangeForIndex(unsigned) const override;
200     
201     virtual String doAXStringForRange(const PlainTextRange&) const override;
202     virtual IntRect doAXBoundsForRange(const PlainTextRange&) const override;
203     
204     virtual String stringValueForMSAA() const override;
205     virtual String stringRoleForMSAA() const override;
206     virtual String nameForMSAA() const override;
207     virtual String descriptionForMSAA() const override;
208     virtual AccessibilityRole roleValueForMSAA() const override;
209
210     virtual String passwordFieldValue() const override;
211
212 protected:
213     explicit AccessibilityRenderObject(RenderObject*);
214     void setRenderObject(RenderObject* renderer) { m_renderer = renderer; }
215     void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;
216     bool needsToUpdateChildren() const { return m_childrenDirty; }
217     virtual ScrollableArea* getScrollableAreaIfScrollable() const override;
218     virtual void scrollTo(const IntPoint&) const override;
219     
220     virtual bool isDetached() const override { return !m_renderer; }
221
222     virtual AccessibilityRole determineAccessibilityRole() override;
223     virtual bool computeAccessibilityIsIgnored() const override;
224
225     RenderObject* m_renderer;
226
227 private:
228     virtual bool isAccessibilityRenderObject() const override final { return true; }
229     void ariaListboxSelectedChildren(AccessibilityChildrenVector&);
230     void ariaListboxVisibleChildren(AccessibilityChildrenVector&);
231     bool isAllowedChildOfTree() const;
232     bool hasTextAlternative() const;
233     String positionalDescriptionForMSAA() const;
234     PlainTextRange documentBasedSelectedTextRange() const;
235     Element* rootEditableElementForPosition(const Position&) const;
236     bool nodeIsTextControl(const Node*) const;
237     virtual void setNeedsToUpdateChildren() override { m_childrenDirty = true; }
238     virtual Path elementPath() const override;
239     
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 override;
247
248     bool renderObjectIsObservable(RenderObject&) const;
249     RenderObject* renderParentObject() const;
250     bool isDescendantOfElementType(const QualifiedName& tagName) const;
251     
252     bool isSVGImage() const;
253     void detachRemoteSVGRoot();
254     AccessibilitySVGRoot* remoteSVGRootElement() const;
255     AccessibilityObject* remoteSVGElementHitTest(const IntPoint&) const;
256     void offsetBoundingBoxForRemoteSVGElement(LayoutRect&) const;
257     virtual bool supportsPath() const override;
258
259     void addHiddenChildren();
260     void addTextFieldChildren();
261     void addImageMapChildren();
262     void addCanvasChildren();
263     void addAttachmentChildren();
264     void addRemoteSVGChildren();
265 #if PLATFORM(COCOA)
266     void updateAttachmentViewParents();
267 #endif
268     virtual String expandedTextValue() const override;
269     virtual bool supportsExpandedTextValue() const override;
270     void updateRoleAfterChildrenCreation();
271     
272     void ariaSelectedRows(AccessibilityChildrenVector&);
273     
274     bool elementAttributeValue(const QualifiedName&) const;
275     void setElementAttributeValue(const QualifiedName&, bool);
276     
277     virtual ESpeak speakProperty() const override;
278     
279     virtual const String ariaLiveRegionStatus() const override;
280     virtual const AtomicString& ariaLiveRegionRelevant() const override;
281     virtual bool ariaLiveRegionAtomic() const override;
282     virtual bool ariaLiveRegionBusy() const override;
283
284     virtual bool inheritsPresentationalRole() const override;
285
286 #if ENABLE(MATHML)
287     // All math elements return true for isMathElement().
288     virtual bool isMathElement() const override;
289     virtual bool isMathFraction() const override;
290     virtual bool isMathFenced() const override;
291     virtual bool isMathSubscriptSuperscript() const override;
292     virtual bool isMathRow() const override;
293     virtual bool isMathUnderOver() const override;
294     virtual bool isMathRoot() const override;
295     virtual bool isMathSquareRoot() const override;
296     virtual bool isMathText() const override;
297     virtual bool isMathNumber() const override;
298     virtual bool isMathOperator() const override;
299     virtual bool isMathFenceOperator() const override;
300     virtual bool isMathSeparatorOperator() const override;
301     virtual bool isMathIdentifier() const override;
302     virtual bool isMathTable() const override;
303     virtual bool isMathTableRow() const override;
304     virtual bool isMathTableCell() const override;
305     virtual bool isMathMultiscript() const override;
306     virtual bool isMathToken() const override;
307     virtual bool isMathScriptObject(AccessibilityMathScriptObjectType) const override;
308     virtual bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const override;
309     
310     // Generic components.
311     virtual AccessibilityObject* mathBaseObject() override;
312     
313     // Root components.
314     virtual AccessibilityObject* mathRadicandObject() override;
315     virtual AccessibilityObject* mathRootIndexObject() override;
316     
317     // Fraction components.
318     virtual AccessibilityObject* mathNumeratorObject() override;
319     virtual AccessibilityObject* mathDenominatorObject() override;
320
321     // Under over components.
322     virtual AccessibilityObject* mathUnderObject() override;
323     virtual AccessibilityObject* mathOverObject() override;
324     
325     // Subscript/superscript components.
326     virtual AccessibilityObject* mathSubscriptObject() override;
327     virtual AccessibilityObject* mathSuperscriptObject() override;
328     
329     // Fenced components.
330     virtual String mathFencedOpenString() const override;
331     virtual String mathFencedCloseString() const override;
332     virtual int mathLineThickness() const override;
333
334     // Multiscripts components.
335     virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) override;
336     virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) override;
337     
338     bool isIgnoredElementWithinMathTree() const;
339 #endif
340 };
341
342 } // namespace WebCore
343
344 SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityRenderObject, isAccessibilityRenderObject())
345
346 #endif // AccessibilityRenderObject_h