Add "VisibleOnly" key to search predicate
[WebKit-https.git] / Tools / DumpRenderTree / AccessibilityUIElement.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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef AccessibilityUIElement_h
27 #define AccessibilityUIElement_h
28
29 #include "AccessibilityTextMarker.h"
30 #include <JavaScriptCore/JSObjectRef.h>
31 #include <wtf/Platform.h>
32 #include <wtf/Vector.h>
33
34 #if PLATFORM(MAC)
35 #ifdef __OBJC__
36 typedef id PlatformUIElement;
37 #else
38 typedef struct objc_object* PlatformUIElement;
39 #endif
40 #elif PLATFORM(WIN)
41 #undef _WINSOCKAPI_
42 #define _WINSOCKAPI_ // Prevent inclusion of winsock.h in windows.h
43
44 #include <WebCore/COMPtr.h>
45 #include <oleacc.h>
46
47 typedef COMPtr<IAccessible> PlatformUIElement;
48 #elif HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL))
49 #include <atk/atk.h>
50 typedef AtkObject* PlatformUIElement;
51 #else
52 typedef void* PlatformUIElement;
53 #endif
54
55 #if PLATFORM(MAC)
56 #ifdef __OBJC__
57 typedef id NotificationHandler;
58 #else
59 typedef struct objc_object* NotificationHandler;
60 #endif
61 #endif
62
63 class AccessibilityUIElement {
64 public:
65     AccessibilityUIElement(PlatformUIElement);
66     AccessibilityUIElement(const AccessibilityUIElement&);
67     ~AccessibilityUIElement();
68
69     PlatformUIElement platformUIElement() { return m_element; }
70
71     static JSObjectRef makeJSAccessibilityUIElement(JSContextRef, const AccessibilityUIElement&);
72
73     bool isEqual(AccessibilityUIElement* otherElement);
74
75     void getLinkedUIElements(Vector<AccessibilityUIElement>&);
76     void getDocumentLinks(Vector<AccessibilityUIElement>&);
77     void getChildren(Vector<AccessibilityUIElement>&);
78     void getChildrenWithRange(Vector<AccessibilityUIElement>&, unsigned location, unsigned length);
79     
80     AccessibilityUIElement elementAtPoint(int x, int y);
81     AccessibilityUIElement getChildAtIndex(unsigned);
82     unsigned indexOfChild(AccessibilityUIElement*);
83     int childrenCount();
84     AccessibilityUIElement titleUIElement();
85     AccessibilityUIElement parentElement();
86
87     void takeFocus();
88     void takeSelection();
89     void addSelection();
90     void removeSelection();
91
92     // Methods - platform-independent implementations
93     JSStringRef allAttributes();
94     JSStringRef attributesOfLinkedUIElements();
95     AccessibilityUIElement linkedUIElementAtIndex(unsigned);
96     
97     JSStringRef attributesOfDocumentLinks();
98     JSStringRef attributesOfChildren();
99     JSStringRef parameterizedAttributeNames();
100     void increment();
101     void decrement();
102     void showMenu();
103     void press();
104
105     // Attributes - platform-independent implementations
106     JSStringRef stringAttributeValue(JSStringRef attribute);
107     double numberAttributeValue(JSStringRef attribute);
108     AccessibilityUIElement uiElementAttributeValue(JSStringRef attribute) const;    
109     bool boolAttributeValue(JSStringRef attribute);
110     bool isAttributeSupported(JSStringRef attribute);
111     bool isAttributeSettable(JSStringRef attribute);
112     bool isPressActionSupported();
113     bool isIncrementActionSupported();
114     bool isDecrementActionSupported();
115     JSStringRef role();
116     JSStringRef subrole();
117     JSStringRef roleDescription();
118     JSStringRef title();
119     JSStringRef description();
120     JSStringRef language();
121     JSStringRef stringValue();
122     JSStringRef accessibilityValue() const;
123     JSStringRef helpText() const;
124     JSStringRef orientation() const;
125     double x();
126     double y();
127     double width();
128     double height();
129     double intValue() const;
130     double minValue();
131     double maxValue();
132     JSStringRef pathDescription() const;
133     JSStringRef valueDescription();
134     int insertionPointLineNumber();
135     JSStringRef selectedTextRange();
136     bool isEnabled();
137     bool isRequired() const;
138     
139     bool isFocused() const;
140     bool isFocusable() const;
141     bool isSelected() const;
142     bool isSelectable() const;
143     bool isMultiSelectable() const;
144     bool isSelectedOptionActive() const;
145     void setSelectedChild(AccessibilityUIElement*) const;
146     unsigned selectedChildrenCount() const;
147     AccessibilityUIElement selectedChildAtIndex(unsigned) const;
148     
149     bool isExpanded() const;
150     bool isChecked() const;
151     bool isVisible() const;
152     bool isOffScreen() const;
153     bool isCollapsed() const;
154     bool isIgnored() const;
155     bool hasPopup() const;
156     int hierarchicalLevel() const;
157     double clickPointX();
158     double clickPointY();
159     JSStringRef documentEncoding();
160     JSStringRef documentURI();
161     JSStringRef url();
162
163     // CSS3-speech properties.
164     JSStringRef speak();
165     
166     // Table-specific attributes
167     JSStringRef attributesOfColumnHeaders();
168     JSStringRef attributesOfRowHeaders();
169     JSStringRef attributesOfColumns();
170     JSStringRef attributesOfRows();
171     JSStringRef attributesOfVisibleCells();
172     JSStringRef attributesOfHeader();
173     int indexInTable();
174     JSStringRef rowIndexRange();
175     JSStringRef columnIndexRange();
176     int rowCount();
177     int columnCount();
178     
179     // Tree/Outline specific attributes
180     AccessibilityUIElement selectedRowAtIndex(unsigned);
181     AccessibilityUIElement disclosedByRow();
182     AccessibilityUIElement disclosedRowAtIndex(unsigned);
183     AccessibilityUIElement rowAtIndex(unsigned);
184
185     // ARIA specific
186     AccessibilityUIElement ariaOwnsElementAtIndex(unsigned);
187     AccessibilityUIElement ariaFlowToElementAtIndex(unsigned);
188
189     // ARIA Drag and Drop
190     bool ariaIsGrabbed() const;
191     // A space concatentated string of all the drop effects.
192     JSStringRef ariaDropEffects() const;
193     
194     // Parameterized attributes
195     int lineForIndex(int);
196     JSStringRef rangeForLine(int);
197     JSStringRef rangeForPosition(int x, int y);
198     JSStringRef boundsForRange(unsigned location, unsigned length);
199     void setSelectedTextRange(unsigned location, unsigned length);
200     JSStringRef stringForRange(unsigned location, unsigned length);
201     JSStringRef attributedStringForRange(unsigned location, unsigned length);
202     bool attributedStringRangeIsMisspelled(unsigned location, unsigned length);
203     AccessibilityUIElement uiElementForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly);
204 #if PLATFORM(IOS)
205     void elementsForRange(unsigned location, unsigned length, Vector<AccessibilityUIElement>& elements);
206     JSStringRef stringForSelection();
207     void increaseTextSelection();
208     void decreaseTextSelection();
209     AccessibilityUIElement linkedElement();
210 #endif
211
212     // Table-specific
213     AccessibilityUIElement cellForColumnAndRow(unsigned column, unsigned row);
214
215     // Scrollarea-specific
216     AccessibilityUIElement horizontalScrollbar() const;
217     AccessibilityUIElement verticalScrollbar() const;
218
219     // Text markers.
220     AccessibilityTextMarkerRange textMarkerRangeForElement(AccessibilityUIElement*);    
221     AccessibilityTextMarkerRange textMarkerRangeForMarkers(AccessibilityTextMarker* startMarker, AccessibilityTextMarker* endMarker);
222     AccessibilityTextMarker startTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*);
223     AccessibilityTextMarker endTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*);
224     AccessibilityTextMarker textMarkerForPoint(int x, int y);
225     AccessibilityTextMarker previousTextMarker(AccessibilityTextMarker*);
226     AccessibilityTextMarker nextTextMarker(AccessibilityTextMarker*);
227     AccessibilityUIElement accessibilityElementForTextMarker(AccessibilityTextMarker*);
228     JSStringRef stringForTextMarkerRange(AccessibilityTextMarkerRange*);
229     int textMarkerRangeLength(AccessibilityTextMarkerRange*);
230     bool attributedStringForTextMarkerRangeContainsAttribute(JSStringRef, AccessibilityTextMarkerRange*);
231     int indexForTextMarker(AccessibilityTextMarker*);
232     bool isTextMarkerValid(AccessibilityTextMarker*);
233     AccessibilityTextMarker textMarkerForIndex(int);
234     
235     void scrollToMakeVisible();
236     void scrollToMakeVisibleWithSubFocus(int x, int y, int width, int height);
237     void scrollToGlobalPoint(int x, int y);
238
239     // Notifications
240     // Function callback should take one argument, the name of the notification.
241     bool addNotificationListener(JSObjectRef functionCallback);
242     // Make sure you call remove, because you can't rely on objects being deallocated in a timely fashion.
243     void removeNotificationListener();
244     
245 #if PLATFORM(IOS)
246     JSStringRef iphoneLabel();
247     JSStringRef iphoneValue();
248     JSStringRef iphoneTraits();
249     JSStringRef iphoneHint();
250     JSStringRef iphoneIdentifier();
251     bool iphoneIsElement();
252     int iphoneElementTextPosition();
253     int iphoneElementTextLength();
254     AccessibilityUIElement headerElementAtIndex(unsigned);
255     // This will simulate the accessibilityDidBecomeFocused API in UIKit.
256     void assistiveTechnologySimulatedFocus();
257 #endif // PLATFORM(IOS)
258
259 #if PLATFORM(MAC) && !PLATFORM(IOS)
260     // Returns an ordered list of supported actions for an element.
261     JSStringRef supportedActions();
262     
263     // A general description of the elements making up multiscript pre/post objects.
264     JSStringRef mathPostscriptsDescription() const;
265     JSStringRef mathPrescriptsDescription() const;
266 #endif
267     
268 private:
269     static JSClassRef getJSClass();
270     PlatformUIElement m_element;
271     
272     // A retained, platform specific object used to help manage notifications for this object.
273 #if PLATFORM(MAC)
274     NotificationHandler m_notificationHandler;
275 #endif
276 };
277
278 #endif // AccessibilityUIElement_h