Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: content/renderer/accessibility/accessibility_node_serializer.cc

Issue 23651003: Use Blink accessibility enums in Chromium (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/accessibility/accessibility_node_serializer.h" 5 #include "content/renderer/accessibility/accessibility_node_serializer.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "third_party/WebKit/public/platform/WebRect.h" 12 #include "third_party/WebKit/public/platform/WebRect.h"
13 #include "third_party/WebKit/public/platform/WebSize.h" 13 #include "third_party/WebKit/public/platform/WebSize.h"
14 #include "third_party/WebKit/public/platform/WebString.h" 14 #include "third_party/WebKit/public/platform/WebString.h"
15 #include "third_party/WebKit/public/platform/WebVector.h" 15 #include "third_party/WebKit/public/platform/WebVector.h"
16 #include "third_party/WebKit/public/web/WebAccessibilityObject.h" 16 #include "third_party/WebKit/public/web/WebAXEnums.h"
17 #include "third_party/WebKit/public/web/WebAccessibilityRole.h" 17 #include "third_party/WebKit/public/web/WebAXObject.h"
18 #include "third_party/WebKit/public/web/WebDocument.h" 18 #include "third_party/WebKit/public/web/WebDocument.h"
19 #include "third_party/WebKit/public/web/WebDocumentType.h" 19 #include "third_party/WebKit/public/web/WebDocumentType.h"
20 #include "third_party/WebKit/public/web/WebElement.h" 20 #include "third_party/WebKit/public/web/WebElement.h"
21 #include "third_party/WebKit/public/web/WebFormControlElement.h" 21 #include "third_party/WebKit/public/web/WebFormControlElement.h"
22 #include "third_party/WebKit/public/web/WebFrame.h" 22 #include "third_party/WebKit/public/web/WebFrame.h"
23 #include "third_party/WebKit/public/web/WebInputElement.h" 23 #include "third_party/WebKit/public/web/WebInputElement.h"
24 #include "third_party/WebKit/public/web/WebNode.h" 24 #include "third_party/WebKit/public/web/WebNode.h"
25 25
26 using WebKit::WebAccessibilityRole; 26 using WebKit::WebAXObject;
27 using WebKit::WebAccessibilityObject;
28 using WebKit::WebDocument; 27 using WebKit::WebDocument;
29 using WebKit::WebDocumentType; 28 using WebKit::WebDocumentType;
30 using WebKit::WebElement; 29 using WebKit::WebElement;
31 using WebKit::WebNode; 30 using WebKit::WebNode;
32 using WebKit::WebVector; 31 using WebKit::WebVector;
33 32
34 namespace content { 33 namespace content {
35 namespace { 34 namespace {
36 35
37 // Returns true if |ancestor| is the first unignored parent of |child|, 36 // Returns true if |ancestor| is the first unignored parent of |child|,
38 // which means that when walking up the parent chain from |child|, 37 // which means that when walking up the parent chain from |child|,
39 // |ancestor| is the *first* ancestor that isn't marked as 38 // |ancestor| is the *first* ancestor that isn't marked as
40 // accessibilityIsIgnored(). 39 // accessibilityIsIgnored().
41 bool IsParentUnignoredOf(const WebAccessibilityObject& ancestor, 40 bool IsParentUnignoredOf(const WebAXObject& ancestor,
42 const WebAccessibilityObject& child) { 41 const WebAXObject& child) {
43 WebAccessibilityObject parent = child.parentObject(); 42 WebAXObject parent = child.parentObject();
44 while (!parent.isDetached() && parent.accessibilityIsIgnored()) 43 while (!parent.isDetached() && parent.accessibilityIsIgnored())
45 parent = parent.parentObject(); 44 parent = parent.parentObject();
46 return parent.equals(ancestor); 45 return parent.equals(ancestor);
47 } 46 }
48 47
49 bool IsTrue(std::string html_value) { 48 bool IsTrue(std::string html_value) {
50 return LowerCaseEqualsASCII(html_value, "true"); 49 return LowerCaseEqualsASCII(html_value, "true");
51 } 50 }
52 51
53 // Provides a conversion between the WebKit::WebAccessibilityRole and a role 52 // Provides a conversion between the WebAXObject state
54 // supported on the Browser side. Listed alphabetically by the
55 // WebKit::WebAccessibilityRole (except for default role).
56 AccessibilityNodeData::Role ConvertRole(WebKit::WebAccessibilityRole role) {
57 switch (role) {
58 case WebKit::WebAccessibilityRoleAnnotation:
59 return AccessibilityNodeData::ROLE_ANNOTATION;
60 case WebKit::WebAccessibilityRoleApplication:
61 return AccessibilityNodeData::ROLE_APPLICATION;
62 case WebKit::WebAccessibilityRoleApplicationAlert:
63 return AccessibilityNodeData::ROLE_ALERT;
64 case WebKit::WebAccessibilityRoleApplicationAlertDialog:
65 return AccessibilityNodeData::ROLE_ALERT_DIALOG;
66 case WebKit::WebAccessibilityRoleApplicationDialog:
67 return AccessibilityNodeData::ROLE_DIALOG;
68 case WebKit::WebAccessibilityRoleApplicationLog:
69 return AccessibilityNodeData::ROLE_LOG;
70 case WebKit::WebAccessibilityRoleApplicationMarquee:
71 return AccessibilityNodeData::ROLE_MARQUEE;
72 case WebKit::WebAccessibilityRoleApplicationStatus:
73 return AccessibilityNodeData::ROLE_STATUS;
74 case WebKit::WebAccessibilityRoleApplicationTimer:
75 return AccessibilityNodeData::ROLE_TIMER;
76 case WebKit::WebAccessibilityRoleBrowser:
77 return AccessibilityNodeData::ROLE_BROWSER;
78 case WebKit::WebAccessibilityRoleBusyIndicator:
79 return AccessibilityNodeData::ROLE_BUSY_INDICATOR;
80 case WebKit::WebAccessibilityRoleButton:
81 return AccessibilityNodeData::ROLE_BUTTON;
82 case WebKit::WebAccessibilityRoleCanvas:
83 return AccessibilityNodeData::ROLE_CANVAS;
84 case WebKit::WebAccessibilityRoleCell:
85 return AccessibilityNodeData::ROLE_CELL;
86 case WebKit::WebAccessibilityRoleCheckBox:
87 return AccessibilityNodeData::ROLE_CHECKBOX;
88 case WebKit::WebAccessibilityRoleColorWell:
89 return AccessibilityNodeData::ROLE_COLOR_WELL;
90 case WebKit::WebAccessibilityRoleColumn:
91 return AccessibilityNodeData::ROLE_COLUMN;
92 case WebKit::WebAccessibilityRoleColumnHeader:
93 return AccessibilityNodeData::ROLE_COLUMN_HEADER;
94 case WebKit::WebAccessibilityRoleComboBox:
95 return AccessibilityNodeData::ROLE_COMBO_BOX;
96 case WebKit::WebAccessibilityRoleDefinition:
97 return AccessibilityNodeData::ROLE_DEFINITION;
98 case WebKit::WebAccessibilityRoleDescriptionListTerm:
99 return AccessibilityNodeData::ROLE_DESCRIPTION_LIST_TERM;
100 case WebKit::WebAccessibilityRoleDescriptionListDetail:
101 return AccessibilityNodeData::ROLE_DESCRIPTION_LIST_DETAIL;
102 case WebKit::WebAccessibilityRoleDirectory:
103 return AccessibilityNodeData::ROLE_DIRECTORY;
104 case WebKit::WebAccessibilityRoleDisclosureTriangle:
105 return AccessibilityNodeData::ROLE_DISCLOSURE_TRIANGLE;
106 case WebKit::WebAccessibilityRoleDiv:
107 return AccessibilityNodeData::ROLE_DIV;
108 case WebKit::WebAccessibilityRoleDocument:
109 return AccessibilityNodeData::ROLE_DOCUMENT;
110 case WebKit::WebAccessibilityRoleDocumentArticle:
111 return AccessibilityNodeData::ROLE_ARTICLE;
112 case WebKit::WebAccessibilityRoleDocumentMath:
113 return AccessibilityNodeData::ROLE_MATH;
114 case WebKit::WebAccessibilityRoleDocumentNote:
115 return AccessibilityNodeData::ROLE_NOTE;
116 case WebKit::WebAccessibilityRoleDocumentRegion:
117 return AccessibilityNodeData::ROLE_REGION;
118 case WebKit::WebAccessibilityRoleDrawer:
119 return AccessibilityNodeData::ROLE_DRAWER;
120 case WebKit::WebAccessibilityRoleEditableText:
121 return AccessibilityNodeData::ROLE_EDITABLE_TEXT;
122 case WebKit::WebAccessibilityRoleFooter:
123 return AccessibilityNodeData::ROLE_FOOTER;
124 case WebKit::WebAccessibilityRoleForm:
125 return AccessibilityNodeData::ROLE_FORM;
126 case WebKit::WebAccessibilityRoleGrid:
127 return AccessibilityNodeData::ROLE_GRID;
128 case WebKit::WebAccessibilityRoleGroup:
129 return AccessibilityNodeData::ROLE_GROUP;
130 case WebKit::WebAccessibilityRoleGrowArea:
131 return AccessibilityNodeData::ROLE_GROW_AREA;
132 case WebKit::WebAccessibilityRoleHeading:
133 return AccessibilityNodeData::ROLE_HEADING;
134 case WebKit::WebAccessibilityRoleHelpTag:
135 return AccessibilityNodeData::ROLE_HELP_TAG;
136 case WebKit::WebAccessibilityRoleHorizontalRule:
137 return AccessibilityNodeData::ROLE_HORIZONTAL_RULE;
138 case WebKit::WebAccessibilityRoleIgnored:
139 return AccessibilityNodeData::ROLE_IGNORED;
140 case WebKit::WebAccessibilityRoleImage:
141 return AccessibilityNodeData::ROLE_IMAGE;
142 case WebKit::WebAccessibilityRoleImageMap:
143 return AccessibilityNodeData::ROLE_IMAGE_MAP;
144 case WebKit::WebAccessibilityRoleImageMapLink:
145 return AccessibilityNodeData::ROLE_IMAGE_MAP_LINK;
146 case WebKit::WebAccessibilityRoleIncrementor:
147 return AccessibilityNodeData::ROLE_INCREMENTOR;
148 case WebKit::WebAccessibilityRoleLabel:
149 return AccessibilityNodeData::ROLE_LABEL;
150 case WebKit::WebAccessibilityRoleLandmarkApplication:
151 return AccessibilityNodeData::ROLE_LANDMARK_APPLICATION;
152 case WebKit::WebAccessibilityRoleLandmarkBanner:
153 return AccessibilityNodeData::ROLE_LANDMARK_BANNER;
154 case WebKit::WebAccessibilityRoleLandmarkComplementary:
155 return AccessibilityNodeData::ROLE_LANDMARK_COMPLEMENTARY;
156 case WebKit::WebAccessibilityRoleLandmarkContentInfo:
157 return AccessibilityNodeData::ROLE_LANDMARK_CONTENTINFO;
158 case WebKit::WebAccessibilityRoleLandmarkMain:
159 return AccessibilityNodeData::ROLE_LANDMARK_MAIN;
160 case WebKit::WebAccessibilityRoleLandmarkNavigation:
161 return AccessibilityNodeData::ROLE_LANDMARK_NAVIGATION;
162 case WebKit::WebAccessibilityRoleLandmarkSearch:
163 return AccessibilityNodeData::ROLE_LANDMARK_SEARCH;
164 case WebKit::WebAccessibilityRoleLink:
165 return AccessibilityNodeData::ROLE_LINK;
166 case WebKit::WebAccessibilityRoleList:
167 return AccessibilityNodeData::ROLE_LIST;
168 case WebKit::WebAccessibilityRoleListBox:
169 return AccessibilityNodeData::ROLE_LISTBOX;
170 case WebKit::WebAccessibilityRoleListBoxOption:
171 return AccessibilityNodeData::ROLE_LISTBOX_OPTION;
172 case WebKit::WebAccessibilityRoleListItem:
173 return AccessibilityNodeData::ROLE_LIST_ITEM;
174 case WebKit::WebAccessibilityRoleListMarker:
175 return AccessibilityNodeData::ROLE_LIST_MARKER;
176 case WebKit::WebAccessibilityRoleMatte:
177 return AccessibilityNodeData::ROLE_MATTE;
178 case WebKit::WebAccessibilityRoleMenu:
179 return AccessibilityNodeData::ROLE_MENU;
180 case WebKit::WebAccessibilityRoleMenuBar:
181 return AccessibilityNodeData::ROLE_MENU_BAR;
182 case WebKit::WebAccessibilityRoleMenuButton:
183 return AccessibilityNodeData::ROLE_MENU_BUTTON;
184 case WebKit::WebAccessibilityRoleMenuItem:
185 return AccessibilityNodeData::ROLE_MENU_ITEM;
186 case WebKit::WebAccessibilityRoleMenuListOption:
187 return AccessibilityNodeData::ROLE_MENU_LIST_OPTION;
188 case WebKit::WebAccessibilityRoleMenuListPopup:
189 return AccessibilityNodeData::ROLE_MENU_LIST_POPUP;
190 case WebKit::WebAccessibilityRoleOutline:
191 return AccessibilityNodeData::ROLE_OUTLINE;
192 case WebKit::WebAccessibilityRoleParagraph:
193 return AccessibilityNodeData::ROLE_PARAGRAPH;
194 case WebKit::WebAccessibilityRolePopUpButton:
195 return AccessibilityNodeData::ROLE_POPUP_BUTTON;
196 case WebKit::WebAccessibilityRolePresentational:
197 return AccessibilityNodeData::ROLE_PRESENTATIONAL;
198 case WebKit::WebAccessibilityRoleProgressIndicator:
199 return AccessibilityNodeData::ROLE_PROGRESS_INDICATOR;
200 case WebKit::WebAccessibilityRoleRadioButton:
201 return AccessibilityNodeData::ROLE_RADIO_BUTTON;
202 case WebKit::WebAccessibilityRoleRadioGroup:
203 return AccessibilityNodeData::ROLE_RADIO_GROUP;
204 case WebKit::WebAccessibilityRoleRow:
205 return AccessibilityNodeData::ROLE_ROW;
206 case WebKit::WebAccessibilityRoleRowHeader:
207 return AccessibilityNodeData::ROLE_ROW_HEADER;
208 case WebKit::WebAccessibilityRoleRuler:
209 return AccessibilityNodeData::ROLE_RULER;
210 case WebKit::WebAccessibilityRoleRulerMarker:
211 return AccessibilityNodeData::ROLE_RULER_MARKER;
212 case WebKit::WebAccessibilityRoleScrollArea:
213 return AccessibilityNodeData::ROLE_SCROLLAREA;
214 case WebKit::WebAccessibilityRoleScrollBar:
215 return AccessibilityNodeData::ROLE_SCROLLBAR;
216 case WebKit::WebAccessibilityRoleSheet:
217 return AccessibilityNodeData::ROLE_SHEET;
218 case WebKit::WebAccessibilityRoleSlider:
219 return AccessibilityNodeData::ROLE_SLIDER;
220 case WebKit::WebAccessibilityRoleSliderThumb:
221 return AccessibilityNodeData::ROLE_SLIDER_THUMB;
222 case WebKit::WebAccessibilityRoleSpinButton:
223 return AccessibilityNodeData::ROLE_SPIN_BUTTON;
224 case WebKit::WebAccessibilityRoleSpinButtonPart:
225 return AccessibilityNodeData::ROLE_SPIN_BUTTON_PART;
226 case WebKit::WebAccessibilityRoleSplitGroup:
227 return AccessibilityNodeData::ROLE_SPLIT_GROUP;
228 case WebKit::WebAccessibilityRoleSplitter:
229 return AccessibilityNodeData::ROLE_SPLITTER;
230 case WebKit::WebAccessibilityRoleStaticText:
231 return AccessibilityNodeData::ROLE_STATIC_TEXT;
232 case WebKit::WebAccessibilityRoleSVGRoot:
233 return AccessibilityNodeData::ROLE_SVG_ROOT;
234 case WebKit::WebAccessibilityRoleSystemWide:
235 return AccessibilityNodeData::ROLE_SYSTEM_WIDE;
236 case WebKit::WebAccessibilityRoleTab:
237 return AccessibilityNodeData::ROLE_TAB;
238 case WebKit::WebAccessibilityRoleTabGroup:
239 return AccessibilityNodeData::ROLE_TAB_GROUP_UNUSED;
240 case WebKit::WebAccessibilityRoleTabList:
241 return AccessibilityNodeData::ROLE_TAB_LIST;
242 case WebKit::WebAccessibilityRoleTabPanel:
243 return AccessibilityNodeData::ROLE_TAB_PANEL;
244 case WebKit::WebAccessibilityRoleTable:
245 return AccessibilityNodeData::ROLE_TABLE;
246 case WebKit::WebAccessibilityRoleTableHeaderContainer:
247 return AccessibilityNodeData::ROLE_TABLE_HEADER_CONTAINER;
248 case WebKit::WebAccessibilityRoleTextArea:
249 return AccessibilityNodeData::ROLE_TEXTAREA;
250 case WebKit::WebAccessibilityRoleTextField:
251 return AccessibilityNodeData::ROLE_TEXT_FIELD;
252 case WebKit::WebAccessibilityRoleToggleButton:
253 return AccessibilityNodeData::ROLE_TOGGLE_BUTTON;
254 case WebKit::WebAccessibilityRoleToolbar:
255 return AccessibilityNodeData::ROLE_TOOLBAR;
256 case WebKit::WebAccessibilityRoleTreeGrid:
257 return AccessibilityNodeData::ROLE_TREE_GRID;
258 case WebKit::WebAccessibilityRoleTreeItemRole:
259 return AccessibilityNodeData::ROLE_TREE_ITEM;
260 case WebKit::WebAccessibilityRoleTreeRole:
261 return AccessibilityNodeData::ROLE_TREE;
262 case WebKit::WebAccessibilityRoleUserInterfaceTooltip:
263 return AccessibilityNodeData::ROLE_TOOLTIP;
264 case WebKit::WebAccessibilityRoleValueIndicator:
265 return AccessibilityNodeData::ROLE_VALUE_INDICATOR;
266 case WebKit::WebAccessibilityRoleWebArea:
267 return AccessibilityNodeData::ROLE_WEB_AREA;
268 case WebKit::WebAccessibilityRoleWebCoreLink:
269 return AccessibilityNodeData::ROLE_WEBCORE_LINK;
270 case WebKit::WebAccessibilityRoleWindow:
271 return AccessibilityNodeData::ROLE_WINDOW;
272
273 default:
274 return AccessibilityNodeData::ROLE_UNKNOWN;
275 }
276 }
277
278 // Provides a conversion between the WebAccessibilityObject state
279 // accessors and a state bitmask that can be serialized and sent to the 53 // accessors and a state bitmask that can be serialized and sent to the
280 // Browser process. Rare state are sent as boolean attributes instead. 54 // Browser process. Rare state are sent as boolean attributes instead.
281 uint32 ConvertState(const WebAccessibilityObject& o) { 55 uint32 ConvertState(const WebAXObject& o) {
282 uint32 state = 0; 56 uint32 state = 0;
283 if (o.isChecked()) 57 if (o.isChecked())
284 state |= (1 << AccessibilityNodeData::STATE_CHECKED); 58 state |= (1 << WebKit::WebAXStateChecked);
285 59
286 if (o.isCollapsed()) 60 if (o.isCollapsed())
287 state |= (1 << AccessibilityNodeData::STATE_COLLAPSED); 61 state |= (1 << WebKit::WebAXStateCollapsed);
288 62
289 if (o.canSetFocusAttribute()) 63 if (o.canSetFocusAttribute())
290 state |= (1 << AccessibilityNodeData::STATE_FOCUSABLE); 64 state |= (1 << WebKit::WebAXStateFocusable);
291 65
292 if (o.isFocused()) 66 if (o.isFocused())
293 state |= (1 << AccessibilityNodeData::STATE_FOCUSED); 67 state |= (1 << WebKit::WebAXStateFocused);
294 68
295 if (o.roleValue() == WebKit::WebAccessibilityRolePopUpButton || 69 if (o.role() == WebKit::WebAXRolePopUpButton ||
296 o.ariaHasPopup()) { 70 o.ariaHasPopup()) {
297 state |= (1 << AccessibilityNodeData::STATE_HASPOPUP); 71 state |= (1 << WebKit::WebAXStateHaspopup);
298 if (!o.isCollapsed()) 72 if (!o.isCollapsed())
299 state |= (1 << AccessibilityNodeData::STATE_EXPANDED); 73 state |= (1 << WebKit::WebAXStateExpanded);
300 } 74 }
301 75
302 if (o.isHovered()) 76 if (o.isHovered())
303 state |= (1 << AccessibilityNodeData::STATE_HOTTRACKED); 77 state |= (1 << WebKit::WebAXStateHovered);
304 78
305 if (o.isIndeterminate()) 79 if (o.isIndeterminate())
306 state |= (1 << AccessibilityNodeData::STATE_INDETERMINATE); 80 state |= (1 << WebKit::WebAXStateIndeterminate);
307 81
308 if (!o.isVisible()) 82 if (!o.isVisible())
309 state |= (1 << AccessibilityNodeData::STATE_INVISIBLE); 83 state |= (1 << WebKit::WebAXStateInvisible);
310 84
311 if (o.isLinked()) 85 if (o.isLinked())
312 state |= (1 << AccessibilityNodeData::STATE_LINKED); 86 state |= (1 << WebKit::WebAXStateLinked);
313 87
314 if (o.isMultiSelectable()) 88 if (o.isMultiSelectable())
315 state |= (1 << AccessibilityNodeData::STATE_MULTISELECTABLE); 89 state |= (1 << WebKit::WebAXStateMultiselectable);
316 90
317 if (o.isOffScreen()) 91 if (o.isOffScreen())
318 state |= (1 << AccessibilityNodeData::STATE_OFFSCREEN); 92 state |= (1 << WebKit::WebAXStateOffscreen);
319 93
320 if (o.isPressed()) 94 if (o.isPressed())
321 state |= (1 << AccessibilityNodeData::STATE_PRESSED); 95 state |= (1 << WebKit::WebAXStatePressed);
322 96
323 if (o.isPasswordField()) 97 if (o.isPasswordField())
324 state |= (1 << AccessibilityNodeData::STATE_PROTECTED); 98 state |= (1 << WebKit::WebAXStateProtected);
325 99
326 if (o.isReadOnly()) 100 if (o.isReadOnly())
327 state |= (1 << AccessibilityNodeData::STATE_READONLY); 101 state |= (1 << WebKit::WebAXStateReadonly);
328 102
329 if (o.isRequired()) 103 if (o.isRequired())
330 state |= (1 << AccessibilityNodeData::STATE_REQUIRED); 104 state |= (1 << WebKit::WebAXStateRequired);
331 105
332 if (o.canSetSelectedAttribute()) 106 if (o.canSetSelectedAttribute())
333 state |= (1 << AccessibilityNodeData::STATE_SELECTABLE); 107 state |= (1 << WebKit::WebAXStateSelectable);
334 108
335 if (o.isSelected()) 109 if (o.isSelected())
336 state |= (1 << AccessibilityNodeData::STATE_SELECTED); 110 state |= (1 << WebKit::WebAXStateSelected);
337 111
338 if (o.isVisited()) 112 if (o.isVisited())
339 state |= (1 << AccessibilityNodeData::STATE_TRAVERSED); 113 state |= (1 << WebKit::WebAXStateVisited);
340 114
341 if (!o.isEnabled()) 115 if (o.isEnabled())
342 state |= (1 << AccessibilityNodeData::STATE_UNAVAILABLE); 116 state |= (1 << WebKit::WebAXStateEnabled);
343 117
344 if (o.isVertical()) 118 if (o.isVertical())
345 state |= (1 << AccessibilityNodeData::STATE_VERTICAL); 119 state |= (1 << WebKit::WebAXStateVertical);
346 120
347 if (o.isVisited()) 121 if (o.isVisited())
348 state |= (1 << AccessibilityNodeData::STATE_VISITED); 122 state |= (1 << WebKit::WebAXStateVisited);
349 123
350 return state; 124 return state;
351 } 125 }
352 126
353 } // Anonymous namespace 127 } // Anonymous namespace
354 128
355 void SerializeAccessibilityNode( 129 void SerializeAccessibilityNode(
356 const WebAccessibilityObject& src, 130 const WebAXObject& src,
357 AccessibilityNodeData* dst) { 131 AccessibilityNodeData* dst) {
358 dst->role = ConvertRole(src.roleValue()); 132 dst->role = src.role();
359 dst->state = ConvertState(src); 133 dst->state = ConvertState(src);
360 dst->location = src.boundingBoxRect(); 134 dst->location = src.boundingBoxRect();
361 dst->id = src.axID(); 135 dst->id = src.axID();
362 std::string name = UTF16ToUTF8(src.title()); 136 std::string name = UTF16ToUTF8(src.title());
363 137
364 std::string value; 138 std::string value;
365 if (src.valueDescription().length()) { 139 if (src.valueDescription().length()) {
366 dst->AddStringAttribute(dst->ATTR_VALUE, 140 dst->AddStringAttribute(dst->ATTR_VALUE,
367 UTF16ToUTF8(src.valueDescription())); 141 UTF16ToUTF8(src.valueDescription()));
368 } else { 142 } else {
369 dst->AddStringAttribute(dst->ATTR_VALUE, UTF16ToUTF8(src.stringValue())); 143 dst->AddStringAttribute(dst->ATTR_VALUE, UTF16ToUTF8(src.stringValue()));
370 } 144 }
371 145
372 if (dst->role == AccessibilityNodeData::ROLE_COLOR_WELL) { 146 if (dst->role == WebKit::WebAXRoleColorWell) {
373 int r, g, b; 147 int r, g, b;
374 src.colorValue(r, g, b); 148 src.colorValue(r, g, b);
375 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_RED, r); 149 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_RED, r);
376 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_GREEN, g); 150 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_GREEN, g);
377 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_BLUE, b); 151 dst->AddIntAttribute(dst->ATTR_COLOR_VALUE_BLUE, b);
378 } 152 }
379 153
380 if (src.accessKey().length()) 154 if (src.accessKey().length())
381 dst->AddStringAttribute(dst->ATTR_ACCESS_KEY, UTF16ToUTF8(src.accessKey())); 155 dst->AddStringAttribute(dst->ATTR_ACCESS_KEY, UTF16ToUTF8(src.accessKey()));
382 if (src.actionVerb().length()) 156 if (src.actionVerb().length())
(...skipping 18 matching lines...) Expand all
401 dst->AddStringAttribute(dst->ATTR_SHORTCUT, 175 dst->AddStringAttribute(dst->ATTR_SHORTCUT,
402 UTF16ToUTF8(src.keyboardShortcut())); 176 UTF16ToUTF8(src.keyboardShortcut()));
403 } 177 }
404 if (!src.titleUIElement().isDetached()) { 178 if (!src.titleUIElement().isDetached()) {
405 dst->AddIntAttribute(dst->ATTR_TITLE_UI_ELEMENT, 179 dst->AddIntAttribute(dst->ATTR_TITLE_UI_ELEMENT,
406 src.titleUIElement().axID()); 180 src.titleUIElement().axID());
407 } 181 }
408 if (!src.url().isEmpty()) 182 if (!src.url().isEmpty())
409 dst->AddStringAttribute(dst->ATTR_URL, src.url().spec()); 183 dst->AddStringAttribute(dst->ATTR_URL, src.url().spec());
410 184
411 if (dst->role == dst->ROLE_HEADING) 185 if (dst->role == WebKit::WebAXRoleHeading)
412 dst->AddIntAttribute(dst->ATTR_HIERARCHICAL_LEVEL, src.headingLevel()); 186 dst->AddIntAttribute(dst->ATTR_HIERARCHICAL_LEVEL, src.headingLevel());
413 else if ((dst->role == dst->ROLE_TREE_ITEM || dst->role == dst->ROLE_ROW) && 187 else if ((dst->role == WebKit::WebAXRoleTreeItem ||
188 dst->role == WebKit::WebAXRoleRow) &&
414 src.hierarchicalLevel() > 0) { 189 src.hierarchicalLevel() > 0) {
415 dst->AddIntAttribute(dst->ATTR_HIERARCHICAL_LEVEL, src.hierarchicalLevel()); 190 dst->AddIntAttribute(dst->ATTR_HIERARCHICAL_LEVEL, src.hierarchicalLevel());
416 } 191 }
417 192
418 // Treat the active list box item as focused. 193 // Treat the active list box item as focused.
419 if (dst->role == dst->ROLE_LISTBOX_OPTION && src.isSelectedOptionActive()) 194 if (dst->role == WebKit::WebAXRoleListBoxOption &&
420 dst->state |= (1 << AccessibilityNodeData::STATE_FOCUSED); 195 src.isSelectedOptionActive()) {
196 dst->state |= (1 << WebKit::WebAXStateFocused);
197 }
421 198
422 if (src.canvasHasFallbackContent()) 199 if (src.canvasHasFallbackContent())
423 dst->role = AccessibilityNodeData::ROLE_CANVAS_WITH_FALLBACK_CONTENT; 200 dst->AddBoolAttribute(dst->ATTR_CANVAS_HAS_FALLBACK, true);
424 201
425 WebNode node = src.node(); 202 WebNode node = src.node();
426 bool is_iframe = false; 203 bool is_iframe = false;
427 std::string live_atomic; 204 std::string live_atomic;
428 std::string live_busy; 205 std::string live_busy;
429 std::string live_status; 206 std::string live_status;
430 std::string live_relevant; 207 std::string live_relevant;
431 208
432 if (!node.isNull() && node.isElementNode()) { 209 if (!node.isNull() && node.isElementNode()) {
433 WebElement element = node.to<WebElement>(); 210 WebElement element = node.to<WebElement>();
434 is_iframe = (element.tagName() == ASCIIToUTF16("IFRAME")); 211 is_iframe = (element.tagName() == ASCIIToUTF16("IFRAME"));
435 212
436 if (LowerCaseEqualsASCII(element.getAttribute("aria-expanded"), "true")) 213 if (LowerCaseEqualsASCII(element.getAttribute("aria-expanded"), "true"))
437 dst->state |= (1 << AccessibilityNodeData::STATE_EXPANDED); 214 dst->state |= (1 << WebKit::WebAXStateExpanded);
438 215
439 // TODO(ctguil): The tagName in WebKit is lower cased but 216 // TODO(ctguil): The tagName in WebKit is lower cased but
440 // HTMLElement::nodeName calls localNameUpper. Consider adding 217 // HTMLElement::nodeName calls localNameUpper. Consider adding
441 // a WebElement method that returns the original lower cased tagName. 218 // a WebElement method that returns the original lower cased tagName.
442 dst->AddStringAttribute( 219 dst->AddStringAttribute(
443 dst->ATTR_HTML_TAG, 220 dst->ATTR_HTML_TAG,
444 StringToLowerASCII(UTF16ToUTF8(element.tagName()))); 221 StringToLowerASCII(UTF16ToUTF8(element.tagName())));
445 for (unsigned i = 0; i < element.attributeCount(); ++i) { 222 for (unsigned i = 0; i < element.attributeCount(); ++i) {
446 std::string name = StringToLowerASCII(UTF16ToUTF8( 223 std::string name = StringToLowerASCII(UTF16ToUTF8(
447 element.attributeLocalName(i))); 224 element.attributeLocalName(i)));
448 std::string value = UTF16ToUTF8(element.attributeValue(i)); 225 std::string value = UTF16ToUTF8(element.attributeValue(i));
449 dst->html_attributes.push_back(std::make_pair(name, value)); 226 dst->html_attributes.push_back(std::make_pair(name, value));
450 } 227 }
451 228
452 if (dst->role == dst->ROLE_EDITABLE_TEXT || 229 if (dst->role == WebKit::WebAXRoleEditableText ||
453 dst->role == dst->ROLE_TEXTAREA || 230 dst->role == WebKit::WebAXRoleTextArea ||
454 dst->role == dst->ROLE_TEXT_FIELD) { 231 dst->role == WebKit::WebAXRoleTextField) {
455 dst->AddIntAttribute(dst->ATTR_TEXT_SEL_START, src.selectionStart()); 232 dst->AddIntAttribute(dst->ATTR_TEXT_SEL_START, src.selectionStart());
456 dst->AddIntAttribute(dst->ATTR_TEXT_SEL_END, src.selectionEnd()); 233 dst->AddIntAttribute(dst->ATTR_TEXT_SEL_END, src.selectionEnd());
457 234
458 WebVector<int> src_line_breaks; 235 WebVector<int> src_line_breaks;
459 src.lineBreaks(src_line_breaks); 236 src.lineBreaks(src_line_breaks);
460 if (src_line_breaks.size() > 0) { 237 if (src_line_breaks.size() > 0) {
461 std::vector<int32> line_breaks; 238 std::vector<int32> line_breaks;
462 line_breaks.reserve(src_line_breaks.size()); 239 line_breaks.reserve(src_line_breaks.size());
463 for (size_t i = 0; i < src_line_breaks.size(); ++i) 240 for (size_t i = 0; i < src_line_breaks.size(); ++i)
464 line_breaks.push_back(src_line_breaks[i]); 241 line_breaks.push_back(src_line_breaks[i]);
(...skipping 12 matching lines...) Expand all
477 live_busy = UTF16ToUTF8(element.getAttribute("aria-busy")); 254 live_busy = UTF16ToUTF8(element.getAttribute("aria-busy"));
478 live_status = UTF16ToUTF8(element.getAttribute("aria-live")); 255 live_status = UTF16ToUTF8(element.getAttribute("aria-live"));
479 live_relevant = UTF16ToUTF8(element.getAttribute("aria-relevant")); 256 live_relevant = UTF16ToUTF8(element.getAttribute("aria-relevant"));
480 } 257 }
481 258
482 // Walk up the parent chain to set live region attributes of containers 259 // Walk up the parent chain to set live region attributes of containers
483 std::string container_live_atomic; 260 std::string container_live_atomic;
484 std::string container_live_busy; 261 std::string container_live_busy;
485 std::string container_live_status; 262 std::string container_live_status;
486 std::string container_live_relevant; 263 std::string container_live_relevant;
487 WebAccessibilityObject container_accessible = src; 264 WebAXObject container_accessible = src;
488 while (!container_accessible.isDetached()) { 265 while (!container_accessible.isDetached()) {
489 WebNode container_node = container_accessible.node(); 266 WebNode container_node = container_accessible.node();
490 if (!container_node.isNull() && container_node.isElementNode()) { 267 if (!container_node.isNull() && container_node.isElementNode()) {
491 WebElement container_elem = container_node.to<WebElement>(); 268 WebElement container_elem = container_node.to<WebElement>();
492 if (container_elem.hasAttribute("aria-atomic") && 269 if (container_elem.hasAttribute("aria-atomic") &&
493 container_live_atomic.empty()) { 270 container_live_atomic.empty()) {
494 container_live_atomic = 271 container_live_atomic =
495 UTF16ToUTF8(container_elem.getAttribute("aria-atomic")); 272 UTF16ToUTF8(container_elem.getAttribute("aria-atomic"));
496 } 273 }
497 if (container_elem.hasAttribute("aria-busy") && 274 if (container_elem.hasAttribute("aria-busy") &&
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 309 }
533 if (!container_live_status.empty()) { 310 if (!container_live_status.empty()) {
534 dst->AddStringAttribute(dst->ATTR_CONTAINER_LIVE_STATUS, 311 dst->AddStringAttribute(dst->ATTR_CONTAINER_LIVE_STATUS,
535 container_live_status); 312 container_live_status);
536 } 313 }
537 if (!container_live_relevant.empty()) { 314 if (!container_live_relevant.empty()) {
538 dst->AddStringAttribute(dst->ATTR_CONTAINER_LIVE_RELEVANT, 315 dst->AddStringAttribute(dst->ATTR_CONTAINER_LIVE_RELEVANT,
539 container_live_relevant); 316 container_live_relevant);
540 } 317 }
541 318
542 if (dst->role == dst->ROLE_PROGRESS_INDICATOR || 319 if (dst->role == WebKit::WebAXRoleProgressIndicator ||
543 dst->role == dst->ROLE_SCROLLBAR || 320 dst->role == WebKit::WebAXRoleScrollBar ||
544 dst->role == dst->ROLE_SLIDER || 321 dst->role == WebKit::WebAXRoleSlider ||
545 dst->role == dst->ROLE_SPIN_BUTTON) { 322 dst->role == WebKit::WebAXRoleSpinButton) {
546 dst->AddFloatAttribute(dst->ATTR_VALUE_FOR_RANGE, src.valueForRange()); 323 dst->AddFloatAttribute(dst->ATTR_VALUE_FOR_RANGE, src.valueForRange());
547 dst->AddFloatAttribute(dst->ATTR_MAX_VALUE_FOR_RANGE, 324 dst->AddFloatAttribute(dst->ATTR_MAX_VALUE_FOR_RANGE,
548 src.maxValueForRange()); 325 src.maxValueForRange());
549 dst->AddFloatAttribute(dst->ATTR_MIN_VALUE_FOR_RANGE, 326 dst->AddFloatAttribute(dst->ATTR_MIN_VALUE_FOR_RANGE,
550 src.minValueForRange()); 327 src.minValueForRange());
551 } 328 }
552 329
553 if (dst->role == dst->ROLE_DOCUMENT || 330 if (dst->role == WebKit::WebAXRoleDocument ||
554 dst->role == dst->ROLE_WEB_AREA) { 331 dst->role == WebKit::WebAXRoleWebArea) {
555 dst->AddStringAttribute(dst->ATTR_HTML_TAG, "#document"); 332 dst->AddStringAttribute(dst->ATTR_HTML_TAG, "#document");
556 const WebDocument& document = src.document(); 333 const WebDocument& document = src.document();
557 if (name.empty()) 334 if (name.empty())
558 name = UTF16ToUTF8(document.title()); 335 name = UTF16ToUTF8(document.title());
559 dst->AddStringAttribute(dst->ATTR_DOC_TITLE, UTF16ToUTF8(document.title())); 336 dst->AddStringAttribute(dst->ATTR_DOC_TITLE, UTF16ToUTF8(document.title()));
560 dst->AddStringAttribute(dst->ATTR_DOC_URL, document.url().spec()); 337 dst->AddStringAttribute(dst->ATTR_DOC_URL, document.url().spec());
561 dst->AddStringAttribute( 338 dst->AddStringAttribute(
562 dst->ATTR_DOC_MIMETYPE, 339 dst->ATTR_DOC_MIMETYPE,
563 document.isXHTMLDocument() ? "text/xhtml" : "text/html"); 340 document.isXHTMLDocument() ? "text/xhtml" : "text/html");
564 dst->AddBoolAttribute(dst->ATTR_DOC_LOADED, src.isLoaded()); 341 dst->AddBoolAttribute(dst->ATTR_DOC_LOADED, src.isLoaded());
(...skipping 12 matching lines...) Expand all
577 354
578 const gfx::Size& min_offset = document.frame()->minimumScrollOffset(); 355 const gfx::Size& min_offset = document.frame()->minimumScrollOffset();
579 dst->AddIntAttribute(dst->ATTR_SCROLL_X_MIN, min_offset.width()); 356 dst->AddIntAttribute(dst->ATTR_SCROLL_X_MIN, min_offset.width());
580 dst->AddIntAttribute(dst->ATTR_SCROLL_Y_MIN, min_offset.height()); 357 dst->AddIntAttribute(dst->ATTR_SCROLL_Y_MIN, min_offset.height());
581 358
582 const gfx::Size& max_offset = document.frame()->maximumScrollOffset(); 359 const gfx::Size& max_offset = document.frame()->maximumScrollOffset();
583 dst->AddIntAttribute(dst->ATTR_SCROLL_X_MAX, max_offset.width()); 360 dst->AddIntAttribute(dst->ATTR_SCROLL_X_MAX, max_offset.width());
584 dst->AddIntAttribute(dst->ATTR_SCROLL_Y_MAX, max_offset.height()); 361 dst->AddIntAttribute(dst->ATTR_SCROLL_Y_MAX, max_offset.height());
585 } 362 }
586 363
587 if (dst->role == dst->ROLE_TABLE) { 364 if (dst->role == WebKit::WebAXRoleTable) {
588 int column_count = src.columnCount(); 365 int column_count = src.columnCount();
589 int row_count = src.rowCount(); 366 int row_count = src.rowCount();
590 if (column_count > 0 && row_count > 0) { 367 if (column_count > 0 && row_count > 0) {
591 std::set<int32> unique_cell_id_set; 368 std::set<int32> unique_cell_id_set;
592 std::vector<int32> cell_ids; 369 std::vector<int32> cell_ids;
593 std::vector<int32> unique_cell_ids; 370 std::vector<int32> unique_cell_ids;
594 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_COUNT, column_count); 371 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_COUNT, column_count);
595 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_COUNT, row_count); 372 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_COUNT, row_count);
596 WebAccessibilityObject header = src.headerContainerObject(); 373 WebAXObject header = src.headerContainerObject();
597 if (!header.isDetached()) 374 if (!header.isDetached())
598 dst->AddIntAttribute(dst->ATTR_TABLE_HEADER_ID, header.axID()); 375 dst->AddIntAttribute(dst->ATTR_TABLE_HEADER_ID, header.axID());
599 for (int i = 0; i < column_count * row_count; ++i) { 376 for (int i = 0; i < column_count * row_count; ++i) {
600 WebAccessibilityObject cell = src.cellForColumnAndRow( 377 WebAXObject cell = src.cellForColumnAndRow(
601 i % column_count, i / column_count); 378 i % column_count, i / column_count);
602 int cell_id = -1; 379 int cell_id = -1;
603 if (!cell.isDetached()) { 380 if (!cell.isDetached()) {
604 cell_id = cell.axID(); 381 cell_id = cell.axID();
605 if (unique_cell_id_set.find(cell_id) == unique_cell_id_set.end()) { 382 if (unique_cell_id_set.find(cell_id) == unique_cell_id_set.end()) {
606 unique_cell_id_set.insert(cell_id); 383 unique_cell_id_set.insert(cell_id);
607 unique_cell_ids.push_back(cell_id); 384 unique_cell_ids.push_back(cell_id);
608 } 385 }
609 } 386 }
610 cell_ids.push_back(cell_id); 387 cell_ids.push_back(cell_id);
611 } 388 }
612 dst->AddIntListAttribute(dst->ATTR_CELL_IDS, cell_ids); 389 dst->AddIntListAttribute(dst->ATTR_CELL_IDS, cell_ids);
613 dst->AddIntListAttribute(dst->ATTR_UNIQUE_CELL_IDS, unique_cell_ids); 390 dst->AddIntListAttribute(dst->ATTR_UNIQUE_CELL_IDS, unique_cell_ids);
614 } 391 }
615 } 392 }
616 393
617 if (dst->role == dst->ROLE_ROW) { 394 if (dst->role == WebKit::WebAXRoleRow) {
618 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_INDEX, src.rowIndex()); 395 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_INDEX, src.rowIndex());
619 WebAccessibilityObject header = src.rowHeader(); 396 WebAXObject header = src.rowHeader();
620 if (!header.isDetached()) 397 if (!header.isDetached())
621 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_HEADER_ID, header.axID()); 398 dst->AddIntAttribute(dst->ATTR_TABLE_ROW_HEADER_ID, header.axID());
622 } 399 }
623 400
624 if (dst->role == dst->ROLE_COLUMN) { 401 if (dst->role == WebKit::WebAXRoleColumn) {
625 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_INDEX, src.columnIndex()); 402 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_INDEX, src.columnIndex());
626 WebAccessibilityObject header = src.columnHeader(); 403 WebAXObject header = src.columnHeader();
627 if (!header.isDetached()) 404 if (!header.isDetached())
628 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_HEADER_ID, header.axID()); 405 dst->AddIntAttribute(dst->ATTR_TABLE_COLUMN_HEADER_ID, header.axID());
629 } 406 }
630 407
631 if (dst->role == dst->ROLE_CELL || 408 if (dst->role == WebKit::WebAXRoleCell ||
632 dst->role == dst->ROLE_ROW_HEADER || 409 dst->role == WebKit::WebAXRoleRowHeader ||
633 dst->role == dst->ROLE_COLUMN_HEADER) { 410 dst->role == WebKit::WebAXRoleColumnHeader) {
634 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_COLUMN_INDEX, 411 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_COLUMN_INDEX,
635 src.cellColumnIndex()); 412 src.cellColumnIndex());
636 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_COLUMN_SPAN, 413 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_COLUMN_SPAN,
637 src.cellColumnSpan()); 414 src.cellColumnSpan());
638 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_ROW_INDEX, src.cellRowIndex()); 415 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_ROW_INDEX, src.cellRowIndex());
639 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_ROW_SPAN, src.cellRowSpan()); 416 dst->AddIntAttribute(dst->ATTR_TABLE_CELL_ROW_SPAN, src.cellRowSpan());
640 } 417 }
641 418
642 dst->AddStringAttribute(dst->ATTR_NAME, name); 419 dst->AddStringAttribute(dst->ATTR_NAME, name);
643 420
644 // Add the ids of *indirect* children - those who are children of this node, 421 // Add the ids of *indirect* children - those who are children of this node,
645 // but whose parent is *not* this node. One example is a table 422 // but whose parent is *not* this node. One example is a table
646 // cell, which is a child of both a row and a column. Because the cell's 423 // cell, which is a child of both a row and a column. Because the cell's
647 // parent is the row, the row adds it as a child, and the column adds it 424 // parent is the row, the row adds it as a child, and the column adds it
648 // as an indirect child. 425 // as an indirect child.
649 int child_count = src.childCount(); 426 int child_count = src.childCount();
650 for (int i = 0; i < child_count; ++i) { 427 for (int i = 0; i < child_count; ++i) {
651 WebAccessibilityObject child = src.childAt(i); 428 WebAXObject child = src.childAt(i);
652 std::vector<int32> indirect_child_ids; 429 std::vector<int32> indirect_child_ids;
653 if (!is_iframe && !child.isDetached() && !IsParentUnignoredOf(src, child)) 430 if (!is_iframe && !child.isDetached() && !IsParentUnignoredOf(src, child))
654 indirect_child_ids.push_back(child.axID()); 431 indirect_child_ids.push_back(child.axID());
655 if (indirect_child_ids.size() > 0) { 432 if (indirect_child_ids.size() > 0) {
656 dst->AddIntListAttribute( 433 dst->AddIntListAttribute(
657 dst->ATTR_INDIRECT_CHILD_IDS, indirect_child_ids); 434 dst->ATTR_INDIRECT_CHILD_IDS, indirect_child_ids);
658 } 435 }
659 } 436 }
660 } 437 }
661 438
662 bool ShouldIncludeChildNode( 439 bool ShouldIncludeChildNode(
663 const WebAccessibilityObject& parent, 440 const WebAXObject& parent,
664 const WebAccessibilityObject& child) { 441 const WebAXObject& child) {
665 switch(parent.roleValue()) { 442 switch(parent.role()) {
666 case WebKit::WebAccessibilityRoleSlider: 443 case WebKit::WebAXRoleSlider:
667 case WebKit::WebAccessibilityRoleEditableText: 444 case WebKit::WebAXRoleEditableText:
668 case WebKit::WebAccessibilityRoleTextArea: 445 case WebKit::WebAXRoleTextArea:
669 case WebKit::WebAccessibilityRoleTextField: 446 case WebKit::WebAXRoleTextField:
670 return false; 447 return false;
671 default: 448 default:
672 break; 449 break;
673 } 450 }
674 451
675 // The child may be invalid due to issues in webkit accessibility code. 452 // The child may be invalid due to issues in webkit accessibility code.
676 // Don't add children that are invalid thus preventing a crash. 453 // Don't add children that are invalid thus preventing a crash.
677 // https://bugs.webkit.org/show_bug.cgi?id=44149 454 // https://bugs.webkit.org/show_bug.cgi?id=44149
678 // TODO(ctguil): We may want to remove this check as webkit stabilizes. 455 // TODO(ctguil): We may want to remove this check as webkit stabilizes.
679 if (child.isDetached()) 456 if (child.isDetached())
680 return false; 457 return false;
681 458
682 // Skip children whose parent isn't this - see indirect_child_ids, above. 459 // Skip children whose parent isn't this - see indirect_child_ids, above.
683 // As an exception, include children of an iframe element. 460 // As an exception, include children of an iframe element.
684 bool is_iframe = false; 461 bool is_iframe = false;
685 WebNode node = parent.node(); 462 WebNode node = parent.node();
686 if (!node.isNull() && node.isElementNode()) { 463 if (!node.isNull() && node.isElementNode()) {
687 WebElement element = node.to<WebElement>(); 464 WebElement element = node.to<WebElement>();
688 is_iframe = (element.tagName() == ASCIIToUTF16("IFRAME")); 465 is_iframe = (element.tagName() == ASCIIToUTF16("IFRAME"));
689 } 466 }
690 467
691 return (is_iframe || IsParentUnignoredOf(parent, child)); 468 return (is_iframe || IsParentUnignoredOf(parent, child));
692 } 469 }
693 470
694 } // namespace content 471 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698