OLD | NEW |
---|---|
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | |
6 | |
7 #include "AccessibilityObject.h" | |
8 | |
9 #undef LOG | |
10 | |
11 #include "webkit/api/public/WebAccessibilityObject.h" | 5 #include "webkit/api/public/WebAccessibilityObject.h" |
6 #include "webkit/api/public/WebCString.h" | |
7 #include "webkit/api/public/WebString.h" | |
12 #include "webkit/glue/glue_util.h" | 8 #include "webkit/glue/glue_util.h" |
13 #include "webkit/tools/test_shell/accessibility_ui_element.h" | 9 #include "webkit/tools/test_shell/accessibility_ui_element.h" |
14 | 10 |
15 using namespace WebCore; | 11 using WebKit::WebString; |
16 | 12 using WebKit::WebCString; |
darin (slow to review)
2009/10/30 19:37:58
sort
| |
17 using WebKit::WebAccessibilityObject; | 13 using WebKit::WebAccessibilityObject; |
18 | 14 using WebKit::WebAccessibilityRole; |
19 using webkit_glue::StringToStdString; | |
20 using webkit_glue::AccessibilityObjectToWebAccessibilityObject; | |
21 using webkit_glue::WebAccessibilityObjectToAccessibilityObject; | |
22 | 15 |
23 namespace { | 16 namespace { |
24 | 17 |
25 static PassRefPtr<AccessibilityObject> AXObject( | |
26 const WebAccessibilityObject& object) { | |
27 RefPtr<AccessibilityObject> o = | |
28 WebAccessibilityObjectToAccessibilityObject(object); | |
29 // Always ask to update the render tree before querying accessibility object. | |
30 o->updateBackingStore(); | |
31 return o; | |
32 } | |
33 | |
34 // Map role value to string, matching Safari/Mac platform implementation to | 18 // Map role value to string, matching Safari/Mac platform implementation to |
35 // avoid rebaselining layout tests. | 19 // avoid rebaselining layout tests. |
36 static std::string RoleToString(AccessibilityRole role) { | 20 static std::string RoleToString(WebAccessibilityRole role) { |
37 std::string result = "AXRole: AX"; | 21 std::string result = "AXRole: AX"; |
38 switch (role) { | 22 switch (role) { |
39 case ButtonRole: | 23 case WebKit::WebAccessibilityRoleButton: |
40 return result.append("Button"); | 24 return result.append("Button"); |
41 case RadioButtonRole: | 25 case WebKit::WebAccessibilityRoleRadioButton: |
42 return result.append("RadioButton"); | 26 return result.append("RadioButton"); |
43 case CheckBoxRole: | 27 case WebKit::WebAccessibilityRoleCheckBox: |
44 return result.append("CheckBox"); | 28 return result.append("CheckBox"); |
45 case SliderRole: | 29 case WebKit::WebAccessibilityRoleSlider: |
46 return result.append("Slider"); | 30 return result.append("Slider"); |
47 case TabGroupRole: | 31 case WebKit::WebAccessibilityRoleTabGroup: |
48 return result.append("TabGroup"); | 32 return result.append("TabGroup"); |
49 case TextFieldRole: | 33 case WebKit::WebAccessibilityRoleTextField: |
50 return result.append("TextField"); | 34 return result.append("TextField"); |
51 case StaticTextRole: | 35 case WebKit::WebAccessibilityRoleStaticText: |
52 return result.append("StaticText"); | 36 return result.append("StaticText"); |
53 case TextAreaRole: | 37 case WebKit::WebAccessibilityRoleTextArea: |
54 return result.append("TextArea"); | 38 return result.append("TextArea"); |
55 case ScrollAreaRole: | 39 case WebKit::WebAccessibilityRoleScrollArea: |
56 return result.append("ScrollArea"); | 40 return result.append("ScrollArea"); |
57 case PopUpButtonRole: | 41 case WebKit::WebAccessibilityRolePopUpButton: |
58 return result.append("PopUpButton"); | 42 return result.append("PopUpButton"); |
59 case MenuButtonRole: | 43 case WebKit::WebAccessibilityRoleMenuButton: |
60 return result.append("MenuButton"); | 44 return result.append("MenuButton"); |
61 case TableRole: | 45 case WebKit::WebAccessibilityRoleTable: |
62 return result.append("Table"); | 46 return result.append("Table"); |
63 case ApplicationRole: | 47 case WebKit::WebAccessibilityRoleApplication: |
64 return result.append("Application"); | 48 return result.append("Application"); |
65 case GroupRole: | 49 case WebKit::WebAccessibilityRoleGroup: |
66 return result.append("Group"); | 50 return result.append("Group"); |
67 case RadioGroupRole: | 51 case WebKit::WebAccessibilityRoleRadioGroup: |
68 return result.append("RadioGroup"); | 52 return result.append("RadioGroup"); |
69 case ListRole: | 53 case WebKit::WebAccessibilityRoleList: |
70 return result.append("List"); | 54 return result.append("List"); |
71 case ScrollBarRole: | 55 case WebKit::WebAccessibilityRoleScrollBar: |
72 return result.append("ScrollBar"); | 56 return result.append("ScrollBar"); |
73 case ValueIndicatorRole: | 57 case WebKit::WebAccessibilityRoleValueIndicator: |
74 return result.append("ValueIndicator"); | 58 return result.append("ValueIndicator"); |
75 case ImageRole: | 59 case WebKit::WebAccessibilityRoleImage: |
76 return result.append("Image"); | 60 return result.append("Image"); |
77 case MenuBarRole: | 61 case WebKit::WebAccessibilityRoleMenuBar: |
78 return result.append("MenuBar"); | 62 return result.append("MenuBar"); |
79 case MenuRole: | 63 case WebKit::WebAccessibilityRoleMenu: |
80 return result.append("Menu"); | 64 return result.append("Menu"); |
81 case MenuItemRole: | 65 case WebKit::WebAccessibilityRoleMenuItem: |
82 return result.append("MenuItem"); | 66 return result.append("MenuItem"); |
83 case ColumnRole: | 67 case WebKit::WebAccessibilityRoleColumn: |
84 return result.append("Column"); | 68 return result.append("Column"); |
85 case RowRole: | 69 case WebKit::WebAccessibilityRoleRow: |
86 return result.append("Row"); | 70 return result.append("Row"); |
87 case ToolbarRole: | 71 case WebKit::WebAccessibilityRoleToolbar: |
88 return result.append("Toolbar"); | 72 return result.append("Toolbar"); |
89 case BusyIndicatorRole: | 73 case WebKit::WebAccessibilityRoleBusyIndicator: |
90 return result.append("BusyIndicator"); | 74 return result.append("BusyIndicator"); |
91 case ProgressIndicatorRole: | 75 case WebKit::WebAccessibilityRoleProgressIndicator: |
92 return result.append("ProgressIndicator"); | 76 return result.append("ProgressIndicator"); |
93 case WindowRole: | 77 case WebKit::WebAccessibilityRoleWindow: |
94 return result.append("Window"); | 78 return result.append("Window"); |
95 case DrawerRole: | 79 case WebKit::WebAccessibilityRoleDrawer: |
96 return result.append("Drawer"); | 80 return result.append("Drawer"); |
97 case SystemWideRole: | 81 case WebKit::WebAccessibilityRoleSystemWide: |
98 return result.append("SystemWide"); | 82 return result.append("SystemWide"); |
99 case OutlineRole: | 83 case WebKit::WebAccessibilityRoleOutline: |
100 return result.append("Outline"); | 84 return result.append("Outline"); |
101 case IncrementorRole: | 85 case WebKit::WebAccessibilityRoleIncrementor: |
102 return result.append("Incrementor"); | 86 return result.append("Incrementor"); |
103 case BrowserRole: | 87 case WebKit::WebAccessibilityRoleBrowser: |
104 return result.append("Browser"); | 88 return result.append("Browser"); |
105 case ComboBoxRole: | 89 case WebKit::WebAccessibilityRoleComboBox: |
106 return result.append("ComboBox"); | 90 return result.append("ComboBox"); |
107 case SplitGroupRole: | 91 case WebKit::WebAccessibilityRoleSplitGroup: |
108 return result.append("SplitGroup"); | 92 return result.append("SplitGroup"); |
109 case SplitterRole: | 93 case WebKit::WebAccessibilityRoleSplitter: |
110 return result.append("Splitter"); | 94 return result.append("Splitter"); |
111 case ColorWellRole: | 95 case WebKit::WebAccessibilityRoleColorWell: |
112 return result.append("ColorWell"); | 96 return result.append("ColorWell"); |
113 case GrowAreaRole: | 97 case WebKit::WebAccessibilityRoleGrowArea: |
114 return result.append("GrowArea"); | 98 return result.append("GrowArea"); |
115 case SheetRole: | 99 case WebKit::WebAccessibilityRoleSheet: |
116 return result.append("Sheet"); | 100 return result.append("Sheet"); |
117 case HelpTagRole: | 101 case WebKit::WebAccessibilityRoleHelpTag: |
118 return result.append("HelpTag"); | 102 return result.append("HelpTag"); |
119 case MatteRole: | 103 case WebKit::WebAccessibilityRoleMatte: |
120 return result.append("Matte"); | 104 return result.append("Matte"); |
121 case RulerRole: | 105 case WebKit::WebAccessibilityRoleRuler: |
122 return result.append("Ruler"); | 106 return result.append("Ruler"); |
123 case RulerMarkerRole: | 107 case WebKit::WebAccessibilityRoleRulerMarker: |
124 return result.append("RulerMarker"); | 108 return result.append("RulerMarker"); |
125 case LinkRole: | 109 case WebKit::WebAccessibilityRoleLink: |
126 return result.append("Link"); | 110 return result.append("Link"); |
127 case DisclosureTriangleRole: | 111 case WebKit::WebAccessibilityRoleDisclosureTriangle: |
128 return result.append("DisclosureTriangle"); | 112 return result.append("DisclosureTriangle"); |
129 case GridRole: | 113 case WebKit::WebAccessibilityRoleGrid: |
130 return result.append("Grid"); | 114 return result.append("Grid"); |
131 case CellRole: | 115 case WebKit::WebAccessibilityRoleCell: |
132 return result.append("Cell"); | 116 return result.append("Cell"); |
133 case ColumnHeaderRole: | 117 case WebKit::WebAccessibilityRoleColumnHeader: |
134 return result.append("ColumnHeader"); | 118 return result.append("ColumnHeader"); |
135 case RowHeaderRole: | 119 case WebKit::WebAccessibilityRoleRowHeader: |
136 return result.append("RowHeader"); | 120 return result.append("RowHeader"); |
137 case WebCoreLinkRole: | 121 case WebKit::WebAccessibilityRoleWebCoreLink: |
138 // Maps to Link role. | 122 // Maps to Link role. |
139 return result.append("Link"); | 123 return result.append("Link"); |
140 case ImageMapLinkRole: | 124 case WebKit::WebAccessibilityRoleImageMapLink: |
141 return result.append("ImageMapLink"); | 125 return result.append("ImageMapLink"); |
142 case ImageMapRole: | 126 case WebKit::WebAccessibilityRoleImageMap: |
143 return result.append("ImageMap"); | 127 return result.append("ImageMap"); |
144 case ListMarkerRole: | 128 case WebKit::WebAccessibilityRoleListMarker: |
145 return result.append("ListMarker"); | 129 return result.append("ListMarker"); |
146 case WebAreaRole: | 130 case WebKit::WebAccessibilityRoleWebArea: |
147 return result.append("WebArea"); | 131 return result.append("WebArea"); |
148 case HeadingRole: | 132 case WebKit::WebAccessibilityRoleHeading: |
149 return result.append("Heading"); | 133 return result.append("Heading"); |
150 case ListBoxRole: | 134 case WebKit::WebAccessibilityRoleListBox: |
151 return result.append("ListBox"); | 135 return result.append("ListBox"); |
152 case ListBoxOptionRole: | 136 case WebKit::WebAccessibilityRoleListBoxOption: |
153 return result.append("ListBoxOption"); | 137 return result.append("ListBoxOption"); |
154 case TableHeaderContainerRole: | 138 case WebKit::WebAccessibilityRoleTableHeaderContainer: |
155 return result.append("TableHeaderContainer"); | 139 return result.append("TableHeaderContainer"); |
156 case DefinitionListTermRole: | 140 case WebKit::WebAccessibilityRoleDefinitionListTerm: |
157 return result.append("DefinitionListTerm"); | 141 return result.append("DefinitionListTerm"); |
158 case DefinitionListDefinitionRole: | 142 case WebKit::WebAccessibilityRoleDefinitionListDefinition: |
159 return result.append("DefinitionListDefinition"); | 143 return result.append("DefinitionListDefinition"); |
160 case AnnotationRole: | 144 case WebKit::WebAccessibilityRoleAnnotation: |
161 return result.append("Annotation"); | 145 return result.append("Annotation"); |
162 case SliderThumbRole: | 146 case WebKit::WebAccessibilityRoleSliderThumb: |
163 return result.append("SliderThumb"); | 147 return result.append("SliderThumb"); |
164 case LandmarkApplicationRole: | 148 case WebKit::WebAccessibilityRoleLandmarkApplication: |
165 return result.append("LandmarkApplication"); | 149 return result.append("LandmarkApplication"); |
166 case LandmarkBannerRole: | 150 case WebKit::WebAccessibilityRoleLandmarkBanner: |
167 return result.append("LandmarkBanner"); | 151 return result.append("LandmarkBanner"); |
168 case LandmarkComplementaryRole: | 152 case WebKit::WebAccessibilityRoleLandmarkComplementary: |
169 return result.append("LandmarkComplementary"); | 153 return result.append("LandmarkComplementary"); |
170 case LandmarkContentInfoRole: | 154 case WebKit::WebAccessibilityRoleLandmarkContentInfo: |
171 return result.append("LandmarkContentInfo"); | 155 return result.append("LandmarkContentInfo"); |
172 case LandmarkMainRole: | 156 case WebKit::WebAccessibilityRoleLandmarkMain: |
173 return result.append("LandmarkMain"); | 157 return result.append("LandmarkMain"); |
174 case LandmarkNavigationRole: | 158 case WebKit::WebAccessibilityRoleLandmarkNavigation: |
175 return result.append("LandmarkNavigation"); | 159 return result.append("LandmarkNavigation"); |
176 case LandmarkSearchRole: | 160 case WebKit::WebAccessibilityRoleLandmarkSearch: |
177 return result.append("LandmarkSearch"); | 161 return result.append("LandmarkSearch"); |
178 case ApplicationLogRole: | 162 case WebKit::WebAccessibilityRoleApplicationLog: |
179 return result.append("ApplicationLog"); | 163 return result.append("ApplicationLog"); |
180 case ApplicationMarqueeRole: | 164 case WebKit::WebAccessibilityRoleApplicationMarquee: |
181 return result.append("ApplicationMarquee"); | 165 return result.append("ApplicationMarquee"); |
182 case ApplicationStatusRole: | 166 case WebKit::WebAccessibilityRoleApplicationStatus: |
183 return result.append("ApplicationStatus"); | 167 return result.append("ApplicationStatus"); |
184 case ApplicationTimerRole: | 168 case WebKit::WebAccessibilityRoleApplicationTimer: |
185 return result.append("ApplicationTimer"); | 169 return result.append("ApplicationTimer"); |
186 case DocumentRole: | 170 case WebKit::WebAccessibilityRoleDocument: |
187 return result.append("Document"); | 171 return result.append("Document"); |
188 case DocumentArticleRole: | 172 case WebKit::WebAccessibilityRoleDocumentArticle: |
189 return result.append("DocumentArticle"); | 173 return result.append("DocumentArticle"); |
190 case DocumentNoteRole: | 174 case WebKit::WebAccessibilityRoleDocumentNote: |
191 return result.append("DocumentNote"); | 175 return result.append("DocumentNote"); |
192 case DocumentRegionRole: | 176 case WebKit::WebAccessibilityRoleDocumentRegion: |
193 return result.append("DocumentRegion"); | 177 return result.append("DocumentRegion"); |
194 case UserInterfaceTooltipRole: | 178 case WebKit::WebAccessibilityRoleUserInterfaceTooltip: |
195 return result.append("UserInterfaceTooltip"); | 179 return result.append("UserInterfaceTooltip"); |
196 default: | 180 default: |
197 // Also matches UnknownRole. | 181 // Also matches WebAccessibilityRoleUnknown. |
198 return result.append("Unknown"); | 182 return result.append("Unknown"); |
199 } | 183 } |
200 } | 184 } |
201 | 185 |
202 } // namespace | 186 } // namespace |
203 | 187 |
204 AccessibilityUIElement::AccessibilityUIElement( | 188 AccessibilityUIElement::AccessibilityUIElement( |
205 const WebKit::WebAccessibilityObject& object, | 189 const WebKit::WebAccessibilityObject& object, |
206 Factory* factory) | 190 Factory* factory) |
207 : accessibility_object_(object), | 191 : accessibility_object_(object), |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
274 BindProperty("selectedTextRange", &selected_text_range); | 258 BindProperty("selectedTextRange", &selected_text_range); |
275 BindProperty("isEnabled", &AccessibilityUIElement::IsEnabledGetterCallback); | 259 BindProperty("isEnabled", &AccessibilityUIElement::IsEnabledGetterCallback); |
276 BindProperty("isRequired", &is_required_); | 260 BindProperty("isRequired", &is_required_); |
277 BindProperty("valueDescription", &value_description_); | 261 BindProperty("valueDescription", &value_description_); |
278 | 262 |
279 BindFallbackMethod(&AccessibilityUIElement::FallbackCallback); | 263 BindFallbackMethod(&AccessibilityUIElement::FallbackCallback); |
280 } | 264 } |
281 | 265 |
282 AccessibilityUIElement* AccessibilityUIElement::GetChildAtIndex( | 266 AccessibilityUIElement* AccessibilityUIElement::GetChildAtIndex( |
283 unsigned index) { | 267 unsigned index) { |
284 RefPtr<AccessibilityObject> object = AXObject(accessibility_object()); | 268 return factory_->Create(accessibility_object().childAt(index)); |
285 if (object->children().size() <= index) | |
286 return NULL; | |
287 | |
288 WebAccessibilityObject child = | |
289 AccessibilityObjectToWebAccessibilityObject(object->children()[index]); | |
290 return factory_->Create(child); | |
291 } | 269 } |
292 | 270 |
293 std::string AccessibilityUIElement::GetTitle() { | 271 std::string AccessibilityUIElement::GetTitle() { |
294 std::string title = StringToStdString(AXObject( | 272 std::string title = accessibility_object().title().utf8(); |
295 accessibility_object())->title()); | |
296 return title.insert(0, "AXTitle: "); | 273 return title.insert(0, "AXTitle: "); |
297 } | 274 } |
298 | 275 |
299 std::string AccessibilityUIElement::GetDescription() { | 276 std::string AccessibilityUIElement::GetDescription() { |
300 std::string description = StringToStdString(AXObject( | 277 std::string description = |
301 accessibility_object())->accessibilityDescription()); | 278 accessibility_object().accessibilityDescription().utf8(); |
302 return description.insert(0, "AXDescription: "); | 279 return description.insert(0, "AXDescription: "); |
303 } | 280 } |
304 | 281 |
305 void AccessibilityUIElement::AllAttributesCallback( | 282 void AccessibilityUIElement::AllAttributesCallback( |
306 const CppArgumentList& args, CppVariant* result) { | 283 const CppArgumentList& args, CppVariant* result) { |
307 // TODO(dglazkov): Concatenate all attributes of the AccessibilityObject. | 284 // TODO(dglazkov): Concatenate all attributes of the AccessibilityObject. |
308 std::string attributes(GetTitle()); | 285 std::string attributes(GetTitle()); |
309 result->Set(attributes); | 286 result->Set(attributes); |
310 } | 287 } |
311 | 288 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
459 | 436 |
460 void AccessibilityUIElement::FallbackCallback(const CppArgumentList &args, | 437 void AccessibilityUIElement::FallbackCallback(const CppArgumentList &args, |
461 CppVariant *result) { | 438 CppVariant *result) { |
462 // TODO(dglazkov): Implement this. | 439 // TODO(dglazkov): Implement this. |
463 result->SetNull(); | 440 result->SetNull(); |
464 } | 441 } |
465 | 442 |
466 void AccessibilityUIElement::ChildrenCountGetterCallback(CppVariant* result) { | 443 void AccessibilityUIElement::ChildrenCountGetterCallback(CppVariant* result) { |
467 int count = 1; // Root object always has only one child, the WebView. | 444 int count = 1; // Root object always has only one child, the WebView. |
468 if (!IsRoot()) | 445 if (!IsRoot()) |
469 count = AXObject(accessibility_object())->children().size(); | 446 count = accessibility_object().childCount(); |
470 result->Set(count); | 447 result->Set(count); |
471 } | 448 } |
472 | 449 |
473 void AccessibilityUIElement::DescriptionGetterCallback(CppVariant *result) { | 450 void AccessibilityUIElement::DescriptionGetterCallback(CppVariant *result) { |
474 result->Set(GetDescription()); | 451 result->Set(GetDescription()); |
475 } | 452 } |
476 | 453 |
477 void AccessibilityUIElement::IsEnabledGetterCallback(CppVariant* result) { | 454 void AccessibilityUIElement::IsEnabledGetterCallback(CppVariant* result) { |
478 result->Set(AXObject(accessibility_object())->isEnabled()); | 455 result->Set(accessibility_object().isEnabled()); |
479 } | 456 } |
480 | 457 |
481 void AccessibilityUIElement::RoleGetterCallback(CppVariant* result) { | 458 void AccessibilityUIElement::RoleGetterCallback(CppVariant* result) { |
482 result->Set(RoleToString(AXObject(accessibility_object())->roleValue())); | 459 result->Set(RoleToString(accessibility_object().roleValue())); |
483 } | 460 } |
484 | 461 |
485 void AccessibilityUIElement::TitleGetterCallback(CppVariant* result) { | 462 void AccessibilityUIElement::TitleGetterCallback(CppVariant* result) { |
486 result->Set(GetTitle()); | 463 result->Set(GetTitle()); |
487 } | 464 } |
488 | 465 |
489 | 466 |
490 RootAccessibilityUIElement::RootAccessibilityUIElement( | 467 RootAccessibilityUIElement::RootAccessibilityUIElement( |
491 const WebKit::WebAccessibilityObject &object, | 468 const WebKit::WebAccessibilityObject &object, |
492 Factory *factory) : AccessibilityUIElement(object, factory) { } | 469 Factory *factory) : AccessibilityUIElement(object, factory) { } |
(...skipping 12 matching lines...) Expand all Loading... | |
505 } | 482 } |
506 | 483 |
507 void AccessibilityUIElementList::Clear() { | 484 void AccessibilityUIElementList::Clear() { |
508 for (ElementList::iterator i = elements_.begin(); i != elements_.end(); ++i) | 485 for (ElementList::iterator i = elements_.begin(); i != elements_.end(); ++i) |
509 delete (*i); | 486 delete (*i); |
510 elements_.clear(); | 487 elements_.clear(); |
511 } | 488 } |
512 | 489 |
513 AccessibilityUIElement* AccessibilityUIElementList::Create( | 490 AccessibilityUIElement* AccessibilityUIElementList::Create( |
514 const WebAccessibilityObject& object) { | 491 const WebAccessibilityObject& object) { |
492 if (object.isNull()) | |
493 return NULL; | |
494 | |
515 AccessibilityUIElement* element = new AccessibilityUIElement(object, this); | 495 AccessibilityUIElement* element = new AccessibilityUIElement(object, this); |
516 elements_.push_back(element); | 496 elements_.push_back(element); |
517 return element; | 497 return element; |
518 } | 498 } |
519 | 499 |
520 AccessibilityUIElement* AccessibilityUIElementList::CreateRoot( | 500 AccessibilityUIElement* AccessibilityUIElementList::CreateRoot( |
521 const WebAccessibilityObject& object) { | 501 const WebAccessibilityObject& object) { |
522 AccessibilityUIElement* element = | 502 AccessibilityUIElement* element = |
523 new RootAccessibilityUIElement(object, this); | 503 new RootAccessibilityUIElement(object, this); |
524 elements_.push_back(element); | 504 elements_.push_back(element); |
525 return element; | 505 return element; |
526 } | 506 } |
OLD | NEW |