Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / accessibility / blink_ax_enum_conversion.cc
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.
4
5 #include "content/renderer/accessibility/blink_ax_enum_conversion.h"
6
7 #include "base/logging.h"
8
9 namespace content {
10
11 uint32 AXStateFromBlink(const blink::WebAXObject& o) {
12   uint32 state = 0;
13   if (o.isChecked())
14     state |= (1 << ui::AX_STATE_CHECKED);
15
16   if (o.isCollapsed())
17     state |= (1 << ui::AX_STATE_COLLAPSED);
18
19   if (o.canSetFocusAttribute())
20     state |= (1 << ui::AX_STATE_FOCUSABLE);
21
22   if (o.isFocused())
23     state |= (1 << ui::AX_STATE_FOCUSED);
24
25   if (o.role() == blink::WebAXRolePopUpButton ||
26       o.ariaHasPopup()) {
27     state |= (1 << ui::AX_STATE_HASPOPUP);
28     if (!o.isCollapsed())
29       state |= (1 << ui::AX_STATE_EXPANDED);
30   }
31
32   if (o.isHovered())
33     state |= (1 << ui::AX_STATE_HOVERED);
34
35   if (o.isIndeterminate())
36     state |= (1 << ui::AX_STATE_INDETERMINATE);
37
38   if (!o.isVisible())
39     state |= (1 << ui::AX_STATE_INVISIBLE);
40
41   if (o.isLinked())
42     state |= (1 << ui::AX_STATE_LINKED);
43
44   if (o.isMultiSelectable())
45     state |= (1 << ui::AX_STATE_MULTISELECTABLE);
46
47   if (o.isOffScreen())
48     state |= (1 << ui::AX_STATE_OFFSCREEN);
49
50   if (o.isPressed())
51     state |= (1 << ui::AX_STATE_PRESSED);
52
53   if (o.isPasswordField())
54     state |= (1 << ui::AX_STATE_PROTECTED);
55
56   if (o.isReadOnly())
57     state |= (1 << ui::AX_STATE_READ_ONLY);
58
59   if (o.isRequired())
60     state |= (1 << ui::AX_STATE_REQUIRED);
61
62   if (o.canSetSelectedAttribute())
63     state |= (1 << ui::AX_STATE_SELECTABLE);
64
65   if (o.isSelected())
66     state |= (1 << ui::AX_STATE_SELECTED);
67
68   if (o.isVisited())
69     state |= (1 << ui::AX_STATE_VISITED);
70
71   if (o.isEnabled())
72     state |= (1 << ui::AX_STATE_ENABLED);
73
74   if (o.isVertical())
75     state |= (1 << ui::AX_STATE_VERTICAL);
76
77   if (o.isVisited())
78     state |= (1 << ui::AX_STATE_VISITED);
79
80   return state;
81 }
82
83 ui::AXRole AXRoleFromBlink(blink::WebAXRole role) {
84   switch (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::WebAXRoleEmbeddedObject:
142       return ui::AX_ROLE_EMBEDDED_OBJECT;
143     case blink::WebAXRoleFooter:
144       return ui::AX_ROLE_FOOTER;
145     case blink::WebAXRoleForm:
146       return ui::AX_ROLE_FORM;
147     case blink::WebAXRoleGrid:
148       return ui::AX_ROLE_GRID;
149     case blink::WebAXRoleGroup:
150       return ui::AX_ROLE_GROUP;
151     case blink::WebAXRoleGrowArea:
152       return ui::AX_ROLE_GROW_AREA;
153     case blink::WebAXRoleHeading:
154       return ui::AX_ROLE_HEADING;
155     case blink::WebAXRoleHelpTag:
156       return ui::AX_ROLE_HELP_TAG;
157     case blink::WebAXRoleHorizontalRule:
158       return ui::AX_ROLE_HORIZONTAL_RULE;
159     case blink::WebAXRoleIframe:
160       return ui::AX_ROLE_IFRAME;
161     case blink::WebAXRoleIgnored:
162       return ui::AX_ROLE_IGNORED;
163     case blink::WebAXRoleImage:
164       return ui::AX_ROLE_IMAGE;
165     case blink::WebAXRoleImageMap:
166       return ui::AX_ROLE_IMAGE_MAP;
167     case blink::WebAXRoleImageMapLink:
168       return ui::AX_ROLE_IMAGE_MAP_LINK;
169     case blink::WebAXRoleIncrementor:
170       return ui::AX_ROLE_INCREMENTOR;
171     case blink::WebAXRoleInlineTextBox:
172       return ui::AX_ROLE_INLINE_TEXT_BOX;
173     case blink::WebAXRoleLabel:
174       return ui::AX_ROLE_LABEL_TEXT;
175     case blink::WebAXRoleLegend:
176       return ui::AX_ROLE_LEGEND;
177     case blink::WebAXRoleLink:
178       return ui::AX_ROLE_LINK;
179     case blink::WebAXRoleList:
180       return ui::AX_ROLE_LIST;
181     case blink::WebAXRoleListBox:
182       return ui::AX_ROLE_LIST_BOX;
183     case blink::WebAXRoleListBoxOption:
184       return ui::AX_ROLE_LIST_BOX_OPTION;
185     case blink::WebAXRoleListItem:
186       return ui::AX_ROLE_LIST_ITEM;
187     case blink::WebAXRoleListMarker:
188       return ui::AX_ROLE_LIST_MARKER;
189     case blink::WebAXRoleLog:
190       return ui::AX_ROLE_LOG;
191     case blink::WebAXRoleMain:
192       return ui::AX_ROLE_MAIN;
193     case blink::WebAXRoleMarquee:
194       return ui::AX_ROLE_MARQUEE;
195     case blink::WebAXRoleMath:
196       return ui::AX_ROLE_MATH;
197     case blink::WebAXRoleMathElement:
198       return ui::AX_ROLE_MATH_ELEMENT;
199     case blink::WebAXRoleMatte:
200       return ui::AX_ROLE_MATTE;
201     case blink::WebAXRoleMenu:
202       return ui::AX_ROLE_MENU;
203     case blink::WebAXRoleMenuBar:
204       return ui::AX_ROLE_MENU_BAR;
205     case blink::WebAXRoleMenuButton:
206       return ui::AX_ROLE_MENU_BUTTON;
207     case blink::WebAXRoleMenuItem:
208       return ui::AX_ROLE_MENU_ITEM;
209     case blink::WebAXRoleMenuListOption:
210       return ui::AX_ROLE_MENU_LIST_OPTION;
211     case blink::WebAXRoleMenuListPopup:
212       return ui::AX_ROLE_MENU_LIST_POPUP;
213     case blink::WebAXRoleNavigation:
214       return ui::AX_ROLE_NAVIGATION;
215     case blink::WebAXRoleNote:
216       return ui::AX_ROLE_NOTE;
217     case blink::WebAXRoleOutline:
218       return ui::AX_ROLE_OUTLINE;
219     case blink::WebAXRoleParagraph:
220       return ui::AX_ROLE_PARAGRAPH;
221     case blink::WebAXRolePopUpButton:
222       return ui::AX_ROLE_POP_UP_BUTTON;
223     case blink::WebAXRolePresentational:
224       return ui::AX_ROLE_PRESENTATIONAL;
225     case blink::WebAXRoleProgressIndicator:
226       return ui::AX_ROLE_PROGRESS_INDICATOR;
227     case blink::WebAXRoleRadioButton:
228       return ui::AX_ROLE_RADIO_BUTTON;
229     case blink::WebAXRoleRadioGroup:
230       return ui::AX_ROLE_RADIO_GROUP;
231     case blink::WebAXRoleRegion:
232       return ui::AX_ROLE_REGION;
233     case blink::WebAXRoleRootWebArea:
234       return ui::AX_ROLE_ROOT_WEB_AREA;
235     case blink::WebAXRoleRow:
236       return ui::AX_ROLE_ROW;
237     case blink::WebAXRoleRowHeader:
238       return ui::AX_ROLE_ROW_HEADER;
239     case blink::WebAXRoleRuler:
240       return ui::AX_ROLE_RULER;
241     case blink::WebAXRoleRulerMarker:
242       return ui::AX_ROLE_RULER_MARKER;
243     case blink::WebAXRoleSVGRoot:
244       return ui::AX_ROLE_SVG_ROOT;
245     case blink::WebAXRoleScrollArea:
246       return ui::AX_ROLE_SCROLL_AREA;
247     case blink::WebAXRoleScrollBar:
248       return ui::AX_ROLE_SCROLL_BAR;
249     case blink::WebAXRoleSeamlessWebArea:
250       return ui::AX_ROLE_SEAMLESS_WEB_AREA;
251     case blink::WebAXRoleSearch:
252       return ui::AX_ROLE_SEARCH;
253     case blink::WebAXRoleSheet:
254       return ui::AX_ROLE_SHEET;
255     case blink::WebAXRoleSlider:
256       return ui::AX_ROLE_SLIDER;
257     case blink::WebAXRoleSliderThumb:
258       return ui::AX_ROLE_SLIDER_THUMB;
259     case blink::WebAXRoleSpinButton:
260       return ui::AX_ROLE_SPIN_BUTTON;
261     case blink::WebAXRoleSpinButtonPart:
262       return ui::AX_ROLE_SPIN_BUTTON_PART;
263     case blink::WebAXRoleSplitGroup:
264       return ui::AX_ROLE_SPLIT_GROUP;
265     case blink::WebAXRoleSplitter:
266       return ui::AX_ROLE_SPLITTER;
267     case blink::WebAXRoleStaticText:
268       return ui::AX_ROLE_STATIC_TEXT;
269     case blink::WebAXRoleStatus:
270       return ui::AX_ROLE_STATUS;
271     case blink::WebAXRoleSystemWide:
272       return ui::AX_ROLE_SYSTEM_WIDE;
273     case blink::WebAXRoleTab:
274       return ui::AX_ROLE_TAB;
275     case blink::WebAXRoleTabGroup:
276       return ui::AX_ROLE_TAB_GROUP;
277     case blink::WebAXRoleTabList:
278       return ui::AX_ROLE_TAB_LIST;
279     case blink::WebAXRoleTabPanel:
280       return ui::AX_ROLE_TAB_PANEL;
281     case blink::WebAXRoleTable:
282       return ui::AX_ROLE_TABLE;
283     case blink::WebAXRoleTableHeaderContainer:
284       return ui::AX_ROLE_TABLE_HEADER_CONTAINER;
285     case blink::WebAXRoleTextArea:
286       return ui::AX_ROLE_TEXT_AREA;
287     case blink::WebAXRoleTextField:
288       return ui::AX_ROLE_TEXT_FIELD;
289     case blink::WebAXRoleTimer:
290       return ui::AX_ROLE_TIMER;
291     case blink::WebAXRoleToggleButton:
292       return ui::AX_ROLE_TOGGLE_BUTTON;
293     case blink::WebAXRoleToolbar:
294       return ui::AX_ROLE_TOOLBAR;
295     case blink::WebAXRoleTree:
296       return ui::AX_ROLE_TREE;
297     case blink::WebAXRoleTreeGrid:
298       return ui::AX_ROLE_TREE_GRID;
299     case blink::WebAXRoleTreeItem:
300       return ui::AX_ROLE_TREE_ITEM;
301     case blink::WebAXRoleUnknown:
302       return ui::AX_ROLE_UNKNOWN;
303     case blink::WebAXRoleUserInterfaceTooltip:
304       return ui::AX_ROLE_TOOLTIP;
305     case blink::WebAXRoleValueIndicator:
306       return ui::AX_ROLE_VALUE_INDICATOR;
307     case blink::WebAXRoleWebArea:
308       return ui::AX_ROLE_WEB_AREA;
309     case blink::WebAXRoleWindow:
310       return ui::AX_ROLE_WINDOW;
311     default:
312       // We can't add an assertion here, that prevents us
313       // from adding new role enums in Blink.
314       return static_cast<ui::AXRole>(-1);
315   }
316 }
317
318 ui::AXEvent AXEventFromBlink(blink::WebAXEvent event) {
319   switch (event) {
320     case blink::WebAXEventActiveDescendantChanged:
321       return ui::AX_EVENT_ACTIVEDESCENDANTCHANGED;
322     case blink::WebAXEventAlert:
323       return ui::AX_EVENT_ALERT;
324     case blink::WebAXEventAriaAttributeChanged:
325       return ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED;
326     case blink::WebAXEventAutocorrectionOccured:
327       return ui::AX_EVENT_AUTOCORRECTION_OCCURED;
328     case blink::WebAXEventBlur:
329       return ui::AX_EVENT_BLUR;
330     case blink::WebAXEventCheckedStateChanged:
331       return ui::AX_EVENT_CHECKED_STATE_CHANGED;
332     case blink::WebAXEventChildrenChanged:
333       return ui::AX_EVENT_CHILDREN_CHANGED;
334     case blink::WebAXEventFocus:
335       return ui::AX_EVENT_FOCUS;
336     case blink::WebAXEventHide:
337       return ui::AX_EVENT_HIDE;
338     case blink::WebAXEventInvalidStatusChanged:
339       return ui::AX_EVENT_INVALID_STATUS_CHANGED;
340     case blink::WebAXEventLayoutComplete:
341       return ui::AX_EVENT_LAYOUT_COMPLETE;
342     case blink::WebAXEventLiveRegionChanged:
343       return ui::AX_EVENT_LIVE_REGION_CHANGED;
344     case blink::WebAXEventLoadComplete:
345       return ui::AX_EVENT_LOAD_COMPLETE;
346     case blink::WebAXEventLocationChanged:
347       return ui::AX_EVENT_LOCATION_CHANGED;
348     case blink::WebAXEventMenuListItemSelected:
349       return ui::AX_EVENT_MENU_LIST_ITEM_SELECTED;
350     case blink::WebAXEventMenuListValueChanged:
351         return ui::AX_EVENT_MENU_LIST_VALUE_CHANGED;
352     case blink::WebAXEventRowCollapsed:
353       return ui::AX_EVENT_ROW_COLLAPSED;
354     case blink::WebAXEventRowCountChanged:
355       return ui::AX_EVENT_ROW_COUNT_CHANGED;
356     case blink::WebAXEventRowExpanded:
357       return ui::AX_EVENT_ROW_EXPANDED;
358     case blink::WebAXEventScrollPositionChanged:
359       return ui::AX_EVENT_SCROLL_POSITION_CHANGED;
360     case blink::WebAXEventScrolledToAnchor:
361       return ui::AX_EVENT_SCROLLED_TO_ANCHOR;
362     case blink::WebAXEventSelectedChildrenChanged:
363       return ui::AX_EVENT_SELECTED_CHILDREN_CHANGED;
364     case blink::WebAXEventSelectedTextChanged:
365       return ui::AX_EVENT_SELECTED_TEXT_CHANGED;
366     case blink::WebAXEventShow:
367       return ui::AX_EVENT_SHOW;
368     case blink::WebAXEventTextChanged:
369       return ui::AX_EVENT_TEXT_CHANGED;
370     case blink::WebAXEventTextInserted:
371       return ui::AX_EVENT_TEXT_INSERTED;
372     case blink::WebAXEventTextRemoved:
373       return ui::AX_EVENT_TEXT_REMOVED;
374     case blink::WebAXEventValueChanged:
375       return ui::AX_EVENT_VALUE_CHANGED;
376     default:
377       // We can't add an assertion here, that prevents us
378       // from adding new event enums in Blink.
379       return ui::AX_EVENT_NONE;
380   }
381 }
382
383 ui::AXTextDirection AXTextDirectionFromBlink(
384     blink::WebAXTextDirection text_direction) {
385   switch (text_direction) {
386     case blink::WebAXTextDirectionLR:
387       return ui::AX_TEXT_DIRECTION_LR;
388     case blink::WebAXTextDirectionRL:
389       return ui::AX_TEXT_DIRECTION_RL;
390     case blink::WebAXTextDirectionTB:
391       return ui::AX_TEXT_DIRECTION_TB;
392     case blink::WebAXTextDirectionBT:
393       return ui::AX_TEXT_DIRECTION_BT;
394     default:
395       NOTREACHED();
396   }
397
398   return ui::AX_TEXT_DIRECTION_NONE;
399 }
400
401 }  // namespace content