1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/renderer/accessibility/blink_ax_enum_conversion.h"
7 #include "base/logging.h"
11 uint32 AXStateFromBlink(const blink::WebAXObject& o) {
14 state |= (1 << ui::AX_STATE_CHECKED);
17 state |= (1 << ui::AX_STATE_COLLAPSED);
19 if (o.canSetFocusAttribute())
20 state |= (1 << ui::AX_STATE_FOCUSABLE);
23 state |= (1 << ui::AX_STATE_FOCUSED);
25 if (o.role() == blink::WebAXRolePopUpButton ||
27 state |= (1 << ui::AX_STATE_HASPOPUP);
29 state |= (1 << ui::AX_STATE_EXPANDED);
33 state |= (1 << ui::AX_STATE_HOVERED);
35 if (o.isIndeterminate())
36 state |= (1 << ui::AX_STATE_INDETERMINATE);
39 state |= (1 << ui::AX_STATE_INVISIBLE);
42 state |= (1 << ui::AX_STATE_LINKED);
44 if (o.isMultiSelectable())
45 state |= (1 << ui::AX_STATE_MULTISELECTABLE);
48 state |= (1 << ui::AX_STATE_OFFSCREEN);
51 state |= (1 << ui::AX_STATE_PRESSED);
53 if (o.isPasswordField())
54 state |= (1 << ui::AX_STATE_PROTECTED);
57 state |= (1 << ui::AX_STATE_READ_ONLY);
60 state |= (1 << ui::AX_STATE_REQUIRED);
62 if (o.canSetSelectedAttribute())
63 state |= (1 << ui::AX_STATE_SELECTABLE);
66 state |= (1 << ui::AX_STATE_SELECTED);
69 state |= (1 << ui::AX_STATE_VISITED);
72 state |= (1 << ui::AX_STATE_ENABLED);
75 state |= (1 << ui::AX_STATE_VERTICAL);
78 state |= (1 << ui::AX_STATE_VISITED);
83 ui::AXRole AXRoleFromBlink(blink::WebAXRole role) {
85 case blink::WebAXRoleAlert:
86 return ui::AX_ROLE_ALERT;
87 case blink::WebAXRoleAlertDialog:
88 return ui::AX_ROLE_ALERT_DIALOG;
89 case blink::WebAXRoleAnnotation:
90 return ui::AX_ROLE_ANNOTATION;
91 case blink::WebAXRoleApplication:
92 return ui::AX_ROLE_APPLICATION;
93 case blink::WebAXRoleArticle:
94 return ui::AX_ROLE_ARTICLE;
95 case blink::WebAXRoleBanner:
96 return ui::AX_ROLE_BANNER;
97 case blink::WebAXRoleBrowser:
98 return ui::AX_ROLE_BROWSER;
99 case blink::WebAXRoleBusyIndicator:
100 return ui::AX_ROLE_BUSY_INDICATOR;
101 case blink::WebAXRoleButton:
102 return ui::AX_ROLE_BUTTON;
103 case blink::WebAXRoleCanvas:
104 return ui::AX_ROLE_CANVAS;
105 case blink::WebAXRoleCell:
106 return ui::AX_ROLE_CELL;
107 case blink::WebAXRoleCheckBox:
108 return ui::AX_ROLE_CHECK_BOX;
109 case blink::WebAXRoleColorWell:
110 return ui::AX_ROLE_COLOR_WELL;
111 case blink::WebAXRoleColumn:
112 return ui::AX_ROLE_COLUMN;
113 case blink::WebAXRoleColumnHeader:
114 return ui::AX_ROLE_COLUMN_HEADER;
115 case blink::WebAXRoleComboBox:
116 return ui::AX_ROLE_COMBO_BOX;
117 case blink::WebAXRoleComplementary:
118 return ui::AX_ROLE_COMPLEMENTARY;
119 case blink::WebAXRoleContentInfo:
120 return ui::AX_ROLE_CONTENT_INFO;
121 case blink::WebAXRoleDefinition:
122 return ui::AX_ROLE_DEFINITION;
123 case blink::WebAXRoleDescriptionListDetail:
124 return ui::AX_ROLE_DESCRIPTION_LIST_DETAIL;
125 case blink::WebAXRoleDescriptionListTerm:
126 return ui::AX_ROLE_DESCRIPTION_LIST_TERM;
127 case blink::WebAXRoleDialog:
128 return ui::AX_ROLE_DIALOG;
129 case blink::WebAXRoleDirectory:
130 return ui::AX_ROLE_DIRECTORY;
131 case blink::WebAXRoleDisclosureTriangle:
132 return ui::AX_ROLE_DISCLOSURE_TRIANGLE;
133 case blink::WebAXRoleDiv:
134 return ui::AX_ROLE_DIV;
135 case blink::WebAXRoleDocument:
136 return ui::AX_ROLE_DOCUMENT;
137 case blink::WebAXRoleDrawer:
138 return ui::AX_ROLE_DRAWER;
139 case blink::WebAXRoleEditableText:
140 return ui::AX_ROLE_EDITABLE_TEXT;
141 case blink::WebAXRoleFooter:
142 return ui::AX_ROLE_FOOTER;
143 case blink::WebAXRoleForm:
144 return ui::AX_ROLE_FORM;
145 case blink::WebAXRoleGrid:
146 return ui::AX_ROLE_GRID;
147 case blink::WebAXRoleGroup:
148 return ui::AX_ROLE_GROUP;
149 case blink::WebAXRoleGrowArea:
150 return ui::AX_ROLE_GROW_AREA;
151 case blink::WebAXRoleHeading:
152 return ui::AX_ROLE_HEADING;
153 case blink::WebAXRoleHelpTag:
154 return ui::AX_ROLE_HELP_TAG;
155 case blink::WebAXRoleHorizontalRule:
156 return ui::AX_ROLE_HORIZONTAL_RULE;
157 case blink::WebAXRoleIgnored:
158 return ui::AX_ROLE_IGNORED;
159 case blink::WebAXRoleImage:
160 return ui::AX_ROLE_IMAGE;
161 case blink::WebAXRoleImageMap:
162 return ui::AX_ROLE_IMAGE_MAP;
163 case blink::WebAXRoleImageMapLink:
164 return ui::AX_ROLE_IMAGE_MAP_LINK;
165 case blink::WebAXRoleIncrementor:
166 return ui::AX_ROLE_INCREMENTOR;
167 case blink::WebAXRoleInlineTextBox:
168 return ui::AX_ROLE_INLINE_TEXT_BOX;
169 case blink::WebAXRoleLabel:
170 return ui::AX_ROLE_LABEL_TEXT;
171 case blink::WebAXRoleLegend:
172 return ui::AX_ROLE_LEGEND;
173 case blink::WebAXRoleLink:
174 return ui::AX_ROLE_LINK;
175 case blink::WebAXRoleList:
176 return ui::AX_ROLE_LIST;
177 case blink::WebAXRoleListBox:
178 return ui::AX_ROLE_LIST_BOX;
179 case blink::WebAXRoleListBoxOption:
180 return ui::AX_ROLE_LIST_BOX_OPTION;
181 case blink::WebAXRoleListItem:
182 return ui::AX_ROLE_LIST_ITEM;
183 case blink::WebAXRoleListMarker:
184 return ui::AX_ROLE_LIST_MARKER;
185 case blink::WebAXRoleLog:
186 return ui::AX_ROLE_LOG;
187 case blink::WebAXRoleMain:
188 return ui::AX_ROLE_MAIN;
189 case blink::WebAXRoleMarquee:
190 return ui::AX_ROLE_MARQUEE;
191 case blink::WebAXRoleMath:
192 return ui::AX_ROLE_MATH;
193 case blink::WebAXRoleMathElement:
194 return ui::AX_ROLE_MATH_ELEMENT;
195 case blink::WebAXRoleMatte:
196 return ui::AX_ROLE_MATTE;
197 case blink::WebAXRoleMenu:
198 return ui::AX_ROLE_MENU;
199 case blink::WebAXRoleMenuBar:
200 return ui::AX_ROLE_MENU_BAR;
201 case blink::WebAXRoleMenuButton:
202 return ui::AX_ROLE_MENU_BUTTON;
203 case blink::WebAXRoleMenuItem:
204 return ui::AX_ROLE_MENU_ITEM;
205 case blink::WebAXRoleMenuListOption:
206 return ui::AX_ROLE_MENU_LIST_OPTION;
207 case blink::WebAXRoleMenuListPopup:
208 return ui::AX_ROLE_MENU_LIST_POPUP;
209 case blink::WebAXRoleNavigation:
210 return ui::AX_ROLE_NAVIGATION;
211 case blink::WebAXRoleNote:
212 return ui::AX_ROLE_NOTE;
213 case blink::WebAXRoleOutline:
214 return ui::AX_ROLE_OUTLINE;
215 case blink::WebAXRoleParagraph:
216 return ui::AX_ROLE_PARAGRAPH;
217 case blink::WebAXRolePopUpButton:
218 return ui::AX_ROLE_POP_UP_BUTTON;
219 case blink::WebAXRolePresentational:
220 return ui::AX_ROLE_PRESENTATIONAL;
221 case blink::WebAXRoleProgressIndicator:
222 return ui::AX_ROLE_PROGRESS_INDICATOR;
223 case blink::WebAXRoleRadioButton:
224 return ui::AX_ROLE_RADIO_BUTTON;
225 case blink::WebAXRoleRadioGroup:
226 return ui::AX_ROLE_RADIO_GROUP;
227 case blink::WebAXRoleRegion:
228 return ui::AX_ROLE_REGION;
229 case blink::WebAXRoleRootWebArea:
230 return ui::AX_ROLE_ROOT_WEB_AREA;
231 case blink::WebAXRoleRow:
232 return ui::AX_ROLE_ROW;
233 case blink::WebAXRoleRowHeader:
234 return ui::AX_ROLE_ROW_HEADER;
235 case blink::WebAXRoleRuler:
236 return ui::AX_ROLE_RULER;
237 case blink::WebAXRoleRulerMarker:
238 return ui::AX_ROLE_RULER_MARKER;
239 case blink::WebAXRoleSVGRoot:
240 return ui::AX_ROLE_SVG_ROOT;
241 case blink::WebAXRoleScrollArea:
242 return ui::AX_ROLE_SCROLL_AREA;
243 case blink::WebAXRoleScrollBar:
244 return ui::AX_ROLE_SCROLL_BAR;
245 case blink::WebAXRoleSeamlessWebArea:
246 return ui::AX_ROLE_SEAMLESS_WEB_AREA;
247 case blink::WebAXRoleSearch:
248 return ui::AX_ROLE_SEARCH;
249 case blink::WebAXRoleSheet:
250 return ui::AX_ROLE_SHEET;
251 case blink::WebAXRoleSlider:
252 return ui::AX_ROLE_SLIDER;
253 case blink::WebAXRoleSliderThumb:
254 return ui::AX_ROLE_SLIDER_THUMB;
255 case blink::WebAXRoleSpinButton:
256 return ui::AX_ROLE_SPIN_BUTTON;
257 case blink::WebAXRoleSpinButtonPart:
258 return ui::AX_ROLE_SPIN_BUTTON_PART;
259 case blink::WebAXRoleSplitGroup:
260 return ui::AX_ROLE_SPLIT_GROUP;
261 case blink::WebAXRoleSplitter:
262 return ui::AX_ROLE_SPLITTER;
263 case blink::WebAXRoleStaticText:
264 return ui::AX_ROLE_STATIC_TEXT;
265 case blink::WebAXRoleStatus:
266 return ui::AX_ROLE_STATUS;
267 case blink::WebAXRoleSystemWide:
268 return ui::AX_ROLE_SYSTEM_WIDE;
269 case blink::WebAXRoleTab:
270 return ui::AX_ROLE_TAB;
271 case blink::WebAXRoleTabGroup:
272 return ui::AX_ROLE_TAB_GROUP;
273 case blink::WebAXRoleTabList:
274 return ui::AX_ROLE_TAB_LIST;
275 case blink::WebAXRoleTabPanel:
276 return ui::AX_ROLE_TAB_PANEL;
277 case blink::WebAXRoleTable:
278 return ui::AX_ROLE_TABLE;
279 case blink::WebAXRoleTableHeaderContainer:
280 return ui::AX_ROLE_TABLE_HEADER_CONTAINER;
281 case blink::WebAXRoleTextArea:
282 return ui::AX_ROLE_TEXT_AREA;
283 case blink::WebAXRoleTextField:
284 return ui::AX_ROLE_TEXT_FIELD;
285 case blink::WebAXRoleTimer:
286 return ui::AX_ROLE_TIMER;
287 case blink::WebAXRoleToggleButton:
288 return ui::AX_ROLE_TOGGLE_BUTTON;
289 case blink::WebAXRoleToolbar:
290 return ui::AX_ROLE_TOOLBAR;
291 case blink::WebAXRoleTree:
292 return ui::AX_ROLE_TREE;
293 case blink::WebAXRoleTreeGrid:
294 return ui::AX_ROLE_TREE_GRID;
295 case blink::WebAXRoleTreeItem:
296 return ui::AX_ROLE_TREE_ITEM;
297 case blink::WebAXRoleUnknown:
298 return ui::AX_ROLE_UNKNOWN;
299 case blink::WebAXRoleUserInterfaceTooltip:
300 return ui::AX_ROLE_TOOLTIP;
301 case blink::WebAXRoleValueIndicator:
302 return ui::AX_ROLE_VALUE_INDICATOR;
303 case blink::WebAXRoleWebArea:
304 return ui::AX_ROLE_WEB_AREA;
305 case blink::WebAXRoleWindow:
306 return ui::AX_ROLE_WINDOW;
310 return static_cast<ui::AXRole>(-1);
313 ui::AXEvent AXEventFromBlink(blink::WebAXEvent event) {
315 case blink::WebAXEventActiveDescendantChanged:
316 return ui::AX_EVENT_ACTIVEDESCENDANTCHANGED;
317 case blink::WebAXEventAlert:
318 return ui::AX_EVENT_ALERT;
319 case blink::WebAXEventAriaAttributeChanged:
320 return ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED;
321 case blink::WebAXEventAutocorrectionOccured:
322 return ui::AX_EVENT_AUTOCORRECTION_OCCURED;
323 case blink::WebAXEventBlur:
324 return ui::AX_EVENT_BLUR;
325 case blink::WebAXEventCheckedStateChanged:
326 return ui::AX_EVENT_CHECKED_STATE_CHANGED;
327 case blink::WebAXEventChildrenChanged:
328 return ui::AX_EVENT_CHILDREN_CHANGED;
329 case blink::WebAXEventFocus:
330 return ui::AX_EVENT_FOCUS;
331 case blink::WebAXEventHide:
332 return ui::AX_EVENT_HIDE;
333 case blink::WebAXEventInvalidStatusChanged:
334 return ui::AX_EVENT_INVALID_STATUS_CHANGED;
335 case blink::WebAXEventLayoutComplete:
336 return ui::AX_EVENT_LAYOUT_COMPLETE;
337 case blink::WebAXEventLiveRegionChanged:
338 return ui::AX_EVENT_LIVE_REGION_CHANGED;
339 case blink::WebAXEventLoadComplete:
340 return ui::AX_EVENT_LOAD_COMPLETE;
341 case blink::WebAXEventLocationChanged:
342 return ui::AX_EVENT_LOCATION_CHANGED;
343 case blink::WebAXEventMenuListItemSelected:
344 return ui::AX_EVENT_MENU_LIST_ITEM_SELECTED;
345 case blink::WebAXEventMenuListValueChanged:
346 return ui::AX_EVENT_MENU_LIST_VALUE_CHANGED;
347 case blink::WebAXEventRowCollapsed:
348 return ui::AX_EVENT_ROW_COLLAPSED;
349 case blink::WebAXEventRowCountChanged:
350 return ui::AX_EVENT_ROW_COUNT_CHANGED;
351 case blink::WebAXEventRowExpanded:
352 return ui::AX_EVENT_ROW_EXPANDED;
353 case blink::WebAXEventScrolledToAnchor:
354 return ui::AX_EVENT_SCROLLED_TO_ANCHOR;
355 case blink::WebAXEventSelectedChildrenChanged:
356 return ui::AX_EVENT_SELECTED_CHILDREN_CHANGED;
357 case blink::WebAXEventSelectedTextChanged:
358 return ui::AX_EVENT_SELECTED_TEXT_CHANGED;
359 case blink::WebAXEventShow:
360 return ui::AX_EVENT_SHOW;
361 case blink::WebAXEventTextChanged:
362 return ui::AX_EVENT_TEXT_CHANGED;
363 case blink::WebAXEventTextInserted:
364 return ui::AX_EVENT_TEXT_INSERTED;
365 case blink::WebAXEventTextRemoved:
366 return ui::AX_EVENT_TEXT_REMOVED;
367 case blink::WebAXEventValueChanged:
368 return ui::AX_EVENT_VALUE_CHANGED;
372 return static_cast<ui::AXEvent>(-1);
375 ui::AXTextDirection AXTextDirectionFromBlink(
376 blink::WebAXTextDirection text_direction) {
377 switch (text_direction) {
378 case blink::WebAXTextDirectionLR:
379 return ui::AX_TEXT_DIRECTION_LR;
380 case blink::WebAXTextDirectionRL:
381 return ui::AX_TEXT_DIRECTION_RL;
382 case blink::WebAXTextDirectionTB:
383 return ui::AX_TEXT_DIRECTION_TB;
384 case blink::WebAXTextDirectionBT:
385 return ui::AX_TEXT_DIRECTION_BT;
390 return ui::AX_TEXT_DIRECTION_NONE;
393 } // namespace content