2 * Copyright (C) 2010 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 are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include "AccessibilityUIElement.h"
34 #include "WebAccessibilityObject.h"
35 #include "WebCString.h"
37 #include "WebString.h"
38 #include <wtf/Assertions.h>
40 using namespace WebKit;
43 // Map role value to string, matching Safari/Mac platform implementation to
44 // avoid rebaselining layout tests.
45 static string roleToString(WebAccessibilityRole role)
47 string result = "AXRole: AX";
49 case WebAccessibilityRoleButton:
50 return result.append("Button");
51 case WebAccessibilityRoleRadioButton:
52 return result.append("RadioButton");
53 case WebAccessibilityRoleCheckBox:
54 return result.append("CheckBox");
55 case WebAccessibilityRoleSlider:
56 return result.append("Slider");
57 case WebAccessibilityRoleTabGroup:
58 return result.append("TabGroup");
59 case WebAccessibilityRoleTextField:
60 return result.append("TextField");
61 case WebAccessibilityRoleStaticText:
62 return result.append("StaticText");
63 case WebAccessibilityRoleTextArea:
64 return result.append("TextArea");
65 case WebAccessibilityRoleScrollArea:
66 return result.append("ScrollArea");
67 case WebAccessibilityRolePopUpButton:
68 return result.append("PopUpButton");
69 case WebAccessibilityRoleMenuButton:
70 return result.append("MenuButton");
71 case WebAccessibilityRoleTable:
72 return result.append("Table");
73 case WebAccessibilityRoleApplication:
74 return result.append("Application");
75 case WebAccessibilityRoleGroup:
76 return result.append("Group");
77 case WebAccessibilityRoleRadioGroup:
78 return result.append("RadioGroup");
79 case WebAccessibilityRoleList:
80 return result.append("List");
81 case WebAccessibilityRoleScrollBar:
82 return result.append("ScrollBar");
83 case WebAccessibilityRoleValueIndicator:
84 return result.append("ValueIndicator");
85 case WebAccessibilityRoleImage:
86 return result.append("Image");
87 case WebAccessibilityRoleMenuBar:
88 return result.append("MenuBar");
89 case WebAccessibilityRoleMenu:
90 return result.append("Menu");
91 case WebAccessibilityRoleMenuItem:
92 return result.append("MenuItem");
93 case WebAccessibilityRoleColumn:
94 return result.append("Column");
95 case WebAccessibilityRoleRow:
96 return result.append("Row");
97 case WebAccessibilityRoleToolbar:
98 return result.append("Toolbar");
99 case WebAccessibilityRoleBusyIndicator:
100 return result.append("BusyIndicator");
101 case WebAccessibilityRoleProgressIndicator:
102 return result.append("ProgressIndicator");
103 case WebAccessibilityRoleWindow:
104 return result.append("Window");
105 case WebAccessibilityRoleDrawer:
106 return result.append("Drawer");
107 case WebAccessibilityRoleSystemWide:
108 return result.append("SystemWide");
109 case WebAccessibilityRoleOutline:
110 return result.append("Outline");
111 case WebAccessibilityRoleIncrementor:
112 return result.append("Incrementor");
113 case WebAccessibilityRoleBrowser:
114 return result.append("Browser");
115 case WebAccessibilityRoleComboBox:
116 return result.append("ComboBox");
117 case WebAccessibilityRoleSplitGroup:
118 return result.append("SplitGroup");
119 case WebAccessibilityRoleSplitter:
120 return result.append("Splitter");
121 case WebAccessibilityRoleColorWell:
122 return result.append("ColorWell");
123 case WebAccessibilityRoleGrowArea:
124 return result.append("GrowArea");
125 case WebAccessibilityRoleSheet:
126 return result.append("Sheet");
127 case WebAccessibilityRoleHelpTag:
128 return result.append("HelpTag");
129 case WebAccessibilityRoleMatte:
130 return result.append("Matte");
131 case WebAccessibilityRoleRuler:
132 return result.append("Ruler");
133 case WebAccessibilityRoleRulerMarker:
134 return result.append("RulerMarker");
135 case WebAccessibilityRoleLink:
136 return result.append("Link");
137 case WebAccessibilityRoleDisclosureTriangle:
138 return result.append("DisclosureTriangle");
139 case WebAccessibilityRoleGrid:
140 return result.append("Grid");
141 case WebAccessibilityRoleCell:
142 return result.append("Cell");
143 case WebAccessibilityRoleColumnHeader:
144 return result.append("ColumnHeader");
145 case WebAccessibilityRoleRowHeader:
146 return result.append("RowHeader");
147 case WebAccessibilityRoleWebCoreLink:
148 // Maps to Link role.
149 return result.append("Link");
150 case WebAccessibilityRoleImageMapLink:
151 return result.append("ImageMapLink");
152 case WebAccessibilityRoleImageMap:
153 return result.append("ImageMap");
154 case WebAccessibilityRoleListMarker:
155 return result.append("ListMarker");
156 case WebAccessibilityRoleWebArea:
157 return result.append("WebArea");
158 case WebAccessibilityRoleHeading:
159 return result.append("Heading");
160 case WebAccessibilityRoleListBox:
161 return result.append("ListBox");
162 case WebAccessibilityRoleListBoxOption:
163 return result.append("ListBoxOption");
164 case WebAccessibilityRoleTableHeaderContainer:
165 return result.append("TableHeaderContainer");
166 case WebAccessibilityRoleDefinitionListTerm:
167 return result.append("DefinitionListTerm");
168 case WebAccessibilityRoleDefinitionListDefinition:
169 return result.append("DefinitionListDefinition");
170 case WebAccessibilityRoleAnnotation:
171 return result.append("Annotation");
172 case WebAccessibilityRoleSliderThumb:
173 return result.append("SliderThumb");
174 case WebAccessibilityRoleLandmarkApplication:
175 return result.append("LandmarkApplication");
176 case WebAccessibilityRoleLandmarkBanner:
177 return result.append("LandmarkBanner");
178 case WebAccessibilityRoleLandmarkComplementary:
179 return result.append("LandmarkComplementary");
180 case WebAccessibilityRoleLandmarkContentInfo:
181 return result.append("LandmarkContentInfo");
182 case WebAccessibilityRoleLandmarkMain:
183 return result.append("LandmarkMain");
184 case WebAccessibilityRoleLandmarkNavigation:
185 return result.append("LandmarkNavigation");
186 case WebAccessibilityRoleLandmarkSearch:
187 return result.append("LandmarkSearch");
188 case WebAccessibilityRoleApplicationLog:
189 return result.append("ApplicationLog");
190 case WebAccessibilityRoleApplicationMarquee:
191 return result.append("ApplicationMarquee");
192 case WebAccessibilityRoleApplicationStatus:
193 return result.append("ApplicationStatus");
194 case WebAccessibilityRoleApplicationTimer:
195 return result.append("ApplicationTimer");
196 case WebAccessibilityRoleDocument:
197 return result.append("Document");
198 case WebAccessibilityRoleDocumentArticle:
199 return result.append("DocumentArticle");
200 case WebAccessibilityRoleDocumentNote:
201 return result.append("DocumentNote");
202 case WebAccessibilityRoleDocumentRegion:
203 return result.append("DocumentRegion");
204 case WebAccessibilityRoleUserInterfaceTooltip:
205 return result.append("UserInterfaceTooltip");
207 // Also matches WebAccessibilityRoleUnknown.
208 return result.append("Unknown");
212 string getDescription(const WebAccessibilityObject& object)
214 string description = object.accessibilityDescription().utf8();
215 return description.insert(0, "AXDescription: ");
218 string getHelpText(const WebAccessibilityObject& object)
220 string helpText = object.helpText().utf8();
221 return helpText.insert(0, "AXHelp: ");
224 string getStringValue(const WebAccessibilityObject& object)
226 string value = object.stringValue().utf8();
227 return value.insert(0, "AXValue: ");
230 string getRole(const WebAccessibilityObject& object)
232 return roleToString(object.roleValue());
235 string getTitle(const WebAccessibilityObject& object)
237 string title = object.title().utf8();
238 return title.insert(0, "AXTitle: ");
241 string getOrientation(const WebAccessibilityObject& object)
243 if (object.isVertical())
244 return "AXOrientation: AXVerticalOrientation";
246 return "AXOrientation: AXHorizontalOrientation";
249 string getAttributes(const WebAccessibilityObject& object)
251 // FIXME: Concatenate all attributes of the AccessibilityObject.
252 string attributes(getTitle(object));
253 attributes.append("\n");
254 attributes.append(getRole(object));
255 attributes.append("\n");
256 attributes.append(getDescription(object));
261 // Collects attributes into a string, delimited by dashes. Used by all methods
262 // that output lists of attributes: attributesOfLinkedUIElementsCallback,
263 // AttributesOfChildrenCallback, etc.
264 class AttributesCollector {
266 void collectAttributes(const WebAccessibilityObject& object)
268 m_attributes.append("\n------------\n");
269 m_attributes.append(getAttributes(object));
272 string attributes() const { return m_attributes; }
278 AccessibilityUIElement::AccessibilityUIElement(const WebAccessibilityObject& object, Factory* factory)
279 : m_accessibilityObject(object)
289 bindProperty("role", &AccessibilityUIElement::roleGetterCallback);
290 bindProperty("title", &AccessibilityUIElement::titleGetterCallback);
291 bindProperty("description", &AccessibilityUIElement::descriptionGetterCallback);
292 bindProperty("helpText", &AccessibilityUIElement::helpTextGetterCallback);
293 bindProperty("stringValue", &AccessibilityUIElement::stringValueGetterCallback);
294 bindProperty("x", &AccessibilityUIElement::xGetterCallback);
295 bindProperty("y", &AccessibilityUIElement::yGetterCallback);
296 bindProperty("width", &AccessibilityUIElement::widthGetterCallback);
297 bindProperty("height", &AccessibilityUIElement::heightGetterCallback);
298 bindProperty("intValue", &AccessibilityUIElement::intValueGetterCallback);
299 bindProperty("minValue", &AccessibilityUIElement::minValueGetterCallback);
300 bindProperty("maxValue", &AccessibilityUIElement::maxValueGetterCallback);
301 bindProperty("childrenCount", &AccessibilityUIElement::childrenCountGetterCallback);
302 bindProperty("insertionPointLineNumber", &AccessibilityUIElement::insertionPointLineNumberGetterCallback);
303 bindProperty("selectedTextRange", &AccessibilityUIElement::selectedTextRangeGetterCallback);
304 bindProperty("isEnabled", &AccessibilityUIElement::isEnabledGetterCallback);
305 bindProperty("isRequired", &AccessibilityUIElement::isRequiredGetterCallback);
306 bindProperty("isFocused", &AccessibilityUIElement::isFocusedGetterCallback);
307 bindProperty("isFocusable", &AccessibilityUIElement::isFocusableGetterCallback);
308 bindProperty("isSelected", &AccessibilityUIElement::isSelectedGetterCallback);
309 bindProperty("isSelectable", &AccessibilityUIElement::isSelectableGetterCallback);
310 bindProperty("isMultiSelectable", &AccessibilityUIElement::isMultiSelectableGetterCallback);
311 bindProperty("isSelectedOptionActive", &AccessibilityUIElement::isSelectedOptionActiveGetterCallback);
312 bindProperty("isExpanded", &AccessibilityUIElement::isExpandedGetterCallback);
313 bindProperty("isChecked", &AccessibilityUIElement::isCheckedGetterCallback);
314 bindProperty("isVisible", &AccessibilityUIElement::isVisibleGetterCallback);
315 bindProperty("isOffScreen", &AccessibilityUIElement::isOffScreenGetterCallback);
316 bindProperty("isCollapsed", &AccessibilityUIElement::isCollapsedGetterCallback);
317 bindProperty("hasPopup", &AccessibilityUIElement::hasPopupGetterCallback);
318 bindProperty("isValid", &AccessibilityUIElement::isValidGetterCallback);
319 bindProperty("orientation", &AccessibilityUIElement::orientationGetterCallback);
325 bindMethod("allAttributes", &AccessibilityUIElement::allAttributesCallback);
326 bindMethod("attributesOfLinkedUIElements", &AccessibilityUIElement::attributesOfLinkedUIElementsCallback);
327 bindMethod("attributesOfDocumentLinks", &AccessibilityUIElement::attributesOfDocumentLinksCallback);
328 bindMethod("attributesOfChildren", &AccessibilityUIElement::attributesOfChildrenCallback);
329 bindMethod("lineForIndex", &AccessibilityUIElement::lineForIndexCallback);
330 bindMethod("boundsForRange", &AccessibilityUIElement::boundsForRangeCallback);
331 bindMethod("stringForRange", &AccessibilityUIElement::stringForRangeCallback);
332 bindMethod("childAtIndex", &AccessibilityUIElement::childAtIndexCallback);
333 bindMethod("elementAtPoint", &AccessibilityUIElement::elementAtPointCallback);
334 bindMethod("attributesOfColumnHeaders", &AccessibilityUIElement::attributesOfColumnHeadersCallback);
335 bindMethod("attributesOfRowHeaders", &AccessibilityUIElement::attributesOfRowHeadersCallback);
336 bindMethod("attributesOfColumns", &AccessibilityUIElement::attributesOfColumnsCallback);
337 bindMethod("attributesOfRows", &AccessibilityUIElement::attributesOfRowsCallback);
338 bindMethod("attributesOfVisibleCells", &AccessibilityUIElement::attributesOfVisibleCellsCallback);
339 bindMethod("attributesOfHeader", &AccessibilityUIElement::attributesOfHeaderCallback);
340 bindMethod("indexInTable", &AccessibilityUIElement::indexInTableCallback);
341 bindMethod("rowIndexRange", &AccessibilityUIElement::rowIndexRangeCallback);
342 bindMethod("columnIndexRange", &AccessibilityUIElement::columnIndexRangeCallback);
343 bindMethod("cellForColumnAndRow", &AccessibilityUIElement::cellForColumnAndRowCallback);
344 bindMethod("titleUIElement", &AccessibilityUIElement::titleUIElementCallback);
345 bindMethod("setSelectedTextRange", &AccessibilityUIElement::setSelectedTextRangeCallback);
346 bindMethod("attributeValue", &AccessibilityUIElement::attributeValueCallback);
347 bindMethod("isAttributeSettable", &AccessibilityUIElement::isAttributeSettableCallback);
348 bindMethod("isActionSupported", &AccessibilityUIElement::isActionSupportedCallback);
349 bindMethod("parentElement", &AccessibilityUIElement::parentElementCallback);
350 bindMethod("increment", &AccessibilityUIElement::incrementCallback);
351 bindMethod("decrement", &AccessibilityUIElement::decrementCallback);
352 bindMethod("showMenu", &AccessibilityUIElement::showMenuCallback);
353 bindMethod("press", &AccessibilityUIElement::pressCallback);
354 bindMethod("isEqual", &AccessibilityUIElement::isEqualCallback);
355 bindMethod("addNotificationListener", &AccessibilityUIElement::addNotificationListenerCallback);
356 bindMethod("removeNotificationListener", &AccessibilityUIElement::removeNotificationListenerCallback);
357 bindMethod("takeFocus", &AccessibilityUIElement::takeFocusCallback);
359 bindFallbackMethod(&AccessibilityUIElement::fallbackCallback);
362 AccessibilityUIElement* AccessibilityUIElement::getChildAtIndex(unsigned index)
364 return m_factory->getOrCreate(accessibilityObject().childAt(index));
367 bool AccessibilityUIElement::isEqual(const WebKit::WebAccessibilityObject& other)
369 return accessibilityObject().equals(other);
372 void AccessibilityUIElement::notificationReceived(const char* notificationName)
374 size_t callbackCount = m_notificationCallbacks.size();
375 for (size_t i = 0; i < callbackCount; i++) {
376 CppVariant notificationNameArgument;
377 notificationNameArgument.set(notificationName);
378 CppVariant invokeResult;
379 m_notificationCallbacks[i].invokeDefault(¬ificationNameArgument, 1, invokeResult);
387 void AccessibilityUIElement::roleGetterCallback(CppVariant* result)
389 result->set(getRole(accessibilityObject()));
392 void AccessibilityUIElement::titleGetterCallback(CppVariant* result)
394 result->set(getTitle(accessibilityObject()));
397 void AccessibilityUIElement::descriptionGetterCallback(CppVariant* result)
399 result->set(getDescription(accessibilityObject()));
402 void AccessibilityUIElement::helpTextGetterCallback(CppVariant* result)
404 result->set(getHelpText(accessibilityObject()));
407 void AccessibilityUIElement::stringValueGetterCallback(CppVariant* result)
409 result->set(getStringValue(accessibilityObject()));
412 void AccessibilityUIElement::xGetterCallback(CppVariant* result)
414 result->set(accessibilityObject().boundingBoxRect().x);
417 void AccessibilityUIElement::yGetterCallback(CppVariant* result)
419 result->set(accessibilityObject().boundingBoxRect().y);
422 void AccessibilityUIElement::widthGetterCallback(CppVariant* result)
424 result->set(accessibilityObject().boundingBoxRect().width);
427 void AccessibilityUIElement::heightGetterCallback(CppVariant* result)
429 result->set(accessibilityObject().boundingBoxRect().height);
432 void AccessibilityUIElement::intValueGetterCallback(CppVariant* result)
434 result->set(accessibilityObject().valueForRange());
437 void AccessibilityUIElement::minValueGetterCallback(CppVariant* result)
439 result->set(accessibilityObject().minValueForRange());
442 void AccessibilityUIElement::maxValueGetterCallback(CppVariant* result)
444 result->set(accessibilityObject().maxValueForRange());
447 void AccessibilityUIElement::childrenCountGetterCallback(CppVariant* result)
449 int count = 1; // Root object always has only one child, the WebView.
451 count = accessibilityObject().childCount();
455 void AccessibilityUIElement::insertionPointLineNumberGetterCallback(CppVariant* result)
457 WebVector<int> lineBreaks;
458 accessibilityObject().lineBreaks(lineBreaks);
459 int cursor = accessibilityObject().selectionEnd();
461 while (line < static_cast<int>(lineBreaks.size()) && lineBreaks[line] <= cursor)
466 void AccessibilityUIElement::selectedTextRangeGetterCallback(CppVariant* result)
468 // FIXME: Implement this.
469 result->set(std::string());
472 void AccessibilityUIElement::isEnabledGetterCallback(CppVariant* result)
474 result->set(accessibilityObject().isEnabled());
477 void AccessibilityUIElement::isRequiredGetterCallback(CppVariant* result)
479 result->set(accessibilityObject().isRequired());
482 void AccessibilityUIElement::isFocusedGetterCallback(CppVariant* result)
484 result->set(accessibilityObject().isFocused());
487 void AccessibilityUIElement::isFocusableGetterCallback(CppVariant* result)
489 result->set(accessibilityObject().canSetFocusAttribute());
492 void AccessibilityUIElement::isSelectedGetterCallback(CppVariant* result)
494 result->set(accessibilityObject().isSelected());
497 void AccessibilityUIElement::isSelectableGetterCallback(CppVariant* result)
499 result->set(accessibilityObject().canSetSelectedAttribute());
502 void AccessibilityUIElement::isMultiSelectableGetterCallback(CppVariant* result)
504 result->set(accessibilityObject().isMultiSelectable());
507 void AccessibilityUIElement::isSelectedOptionActiveGetterCallback(CppVariant* result)
509 result->set(accessibilityObject().isSelectedOptionActive());
512 void AccessibilityUIElement::isExpandedGetterCallback(CppVariant* result)
514 result->set(!accessibilityObject().isCollapsed());
517 void AccessibilityUIElement::isCheckedGetterCallback(CppVariant* result)
519 result->set(accessibilityObject().isChecked());
522 void AccessibilityUIElement::isVisibleGetterCallback(CppVariant* result)
524 result->set(accessibilityObject().isVisible());
527 void AccessibilityUIElement::isOffScreenGetterCallback(CppVariant* result)
529 result->set(accessibilityObject().isOffScreen());
532 void AccessibilityUIElement::isCollapsedGetterCallback(CppVariant* result)
534 result->set(accessibilityObject().isCollapsed());
537 void AccessibilityUIElement::hasPopupGetterCallback(CppVariant* result)
539 result->set(accessibilityObject().ariaHasPopup());
542 void AccessibilityUIElement::isValidGetterCallback(CppVariant* result)
544 result->set(accessibilityObject().isValid());
547 void AccessibilityUIElement::orientationGetterCallback(CppVariant* result)
549 result->set(getOrientation(accessibilityObject()));
556 void AccessibilityUIElement::allAttributesCallback(const CppArgumentList&, CppVariant* result)
558 result->set(getAttributes(accessibilityObject()));
561 void AccessibilityUIElement::attributesOfLinkedUIElementsCallback(const CppArgumentList&, CppVariant* result)
566 void AccessibilityUIElement::attributesOfDocumentLinksCallback(const CppArgumentList&, CppVariant* result)
571 void AccessibilityUIElement::attributesOfChildrenCallback(const CppArgumentList& arguments, CppVariant* result)
573 AttributesCollector collector;
574 unsigned size = accessibilityObject().childCount();
575 for (unsigned i = 0; i < size; ++i)
576 collector.collectAttributes(accessibilityObject().childAt(i));
577 result->set(collector.attributes());
580 void AccessibilityUIElement::parametrizedAttributeNamesCallback(const CppArgumentList&, CppVariant* result)
585 void AccessibilityUIElement::lineForIndexCallback(const CppArgumentList&, CppVariant* result)
590 void AccessibilityUIElement::boundsForRangeCallback(const CppArgumentList&, CppVariant* result)
595 void AccessibilityUIElement::stringForRangeCallback(const CppArgumentList&, CppVariant* result)
600 void AccessibilityUIElement::childAtIndexCallback(const CppArgumentList& arguments, CppVariant* result)
602 if (!arguments.size() || !arguments[0].isNumber()) {
607 AccessibilityUIElement* child = getChildAtIndex(arguments[0].toInt32());
613 result->set(*(child->getAsCppVariant()));
616 void AccessibilityUIElement::elementAtPointCallback(const CppArgumentList&, CppVariant* result)
621 void AccessibilityUIElement::attributesOfColumnHeadersCallback(const CppArgumentList&, CppVariant* result)
626 void AccessibilityUIElement::attributesOfRowHeadersCallback(const CppArgumentList&, CppVariant* result)
631 void AccessibilityUIElement::attributesOfColumnsCallback(const CppArgumentList&, CppVariant* result)
636 void AccessibilityUIElement::attributesOfRowsCallback(const CppArgumentList&, CppVariant* result)
641 void AccessibilityUIElement::attributesOfVisibleCellsCallback(const CppArgumentList&, CppVariant* result)
646 void AccessibilityUIElement::attributesOfHeaderCallback(const CppArgumentList&, CppVariant* result)
651 void AccessibilityUIElement::indexInTableCallback(const CppArgumentList&, CppVariant* result)
656 void AccessibilityUIElement::rowIndexRangeCallback(const CppArgumentList&, CppVariant* result)
661 void AccessibilityUIElement::columnIndexRangeCallback(const CppArgumentList&, CppVariant* result)
666 void AccessibilityUIElement::cellForColumnAndRowCallback(const CppArgumentList&, CppVariant* result)
671 void AccessibilityUIElement::titleUIElementCallback(const CppArgumentList&, CppVariant* result)
676 void AccessibilityUIElement::setSelectedTextRangeCallback(const CppArgumentList&, CppVariant* result)
681 void AccessibilityUIElement::attributeValueCallback(const CppArgumentList&, CppVariant* result)
686 void AccessibilityUIElement::isAttributeSettableCallback(const CppArgumentList& arguments, CppVariant* result)
688 if (arguments.size() < 1 && !arguments[0].isString()) {
693 string attribute = arguments[0].toString();
694 bool settable = false;
695 if (attribute == "AXValue")
696 settable = accessibilityObject().canSetValueAttribute();
697 result->set(settable);
700 void AccessibilityUIElement::isActionSupportedCallback(const CppArgumentList&, CppVariant* result)
702 // This one may be really hard to implement.
703 // Not exposed by AccessibilityObject.
707 void AccessibilityUIElement::parentElementCallback(const CppArgumentList&, CppVariant* result)
712 void AccessibilityUIElement::incrementCallback(const CppArgumentList&, CppVariant* result)
717 void AccessibilityUIElement::decrementCallback(const CppArgumentList&, CppVariant* result)
722 void AccessibilityUIElement::showMenuCallback(const CppArgumentList&, CppVariant* result)
727 void AccessibilityUIElement::pressCallback(const CppArgumentList&, CppVariant* result)
729 accessibilityObject().performDefaultAction();
733 void AccessibilityUIElement::isEqualCallback(const CppArgumentList& arguments, CppVariant* result)
735 if (arguments.size() < 1 || !arguments[0].isObject()) {
740 result->set(arguments[0].isEqual(*getAsCppVariant()));
743 void AccessibilityUIElement::addNotificationListenerCallback(const CppArgumentList& arguments, CppVariant* result)
745 if (arguments.size() < 1 || !arguments[0].isObject()) {
750 m_notificationCallbacks.push_back(arguments[0]);
754 void AccessibilityUIElement::removeNotificationListenerCallback(const CppArgumentList&, CppVariant* result)
756 // FIXME: Implement this.
760 void AccessibilityUIElement::takeFocusCallback(const CppArgumentList&, CppVariant* result)
762 accessibilityObject().setFocused(true);
766 void AccessibilityUIElement::fallbackCallback(const CppArgumentList &, CppVariant* result)
768 // FIXME: Implement this.
772 RootAccessibilityUIElement::RootAccessibilityUIElement(const WebAccessibilityObject &object, Factory *factory)
773 : AccessibilityUIElement(object, factory) { }
775 AccessibilityUIElement* RootAccessibilityUIElement::getChildAtIndex(unsigned index)
780 return factory()->getOrCreate(accessibilityObject());
784 AccessibilityUIElementList ::~AccessibilityUIElementList()
789 void AccessibilityUIElementList::clear()
791 for (ElementList::iterator i = m_elements.begin(); i != m_elements.end(); ++i)
796 AccessibilityUIElement* AccessibilityUIElementList::getOrCreate(const WebAccessibilityObject& object)
801 size_t elementCount = m_elements.size();
802 for (size_t i = 0; i < elementCount; i++) {
803 if (m_elements[i]->isEqual(object))
804 return m_elements[i];
807 AccessibilityUIElement* element = new AccessibilityUIElement(object, this);
808 m_elements.append(element);
812 AccessibilityUIElement* AccessibilityUIElementList::createRoot(const WebAccessibilityObject& object)
814 AccessibilityUIElement* element = new RootAccessibilityUIElement(object, this);
815 m_elements.append(element);