Upstream version 5.34.104.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::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;
307   }
308
309   NOTREACHED();
310   return static_cast<ui::AXRole>(-1);
311 }
312
313 ui::AXEvent AXEventFromBlink(blink::WebAXEvent event) {
314   switch (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;
369   }
370
371   NOTREACHED();
372   return static_cast<ui::AXEvent>(-1);
373 }
374
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;
386     default:
387       NOTREACHED();
388   }
389
390   return ui::AX_TEXT_DIRECTION_NONE;
391 }
392
393 }  // namespace content