Update To 11.40.268.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   blink::WebAXExpanded expanded = o.isExpanded();
17   if (expanded) {
18     if (expanded == blink::WebAXExpandedCollapsed)
19       state |= (1 << ui::AX_STATE_COLLAPSED);
20     else if (expanded == blink::WebAXExpandedExpanded)
21       state |= (1 << ui::AX_STATE_EXPANDED);
22   }
23
24   if (o.canSetFocusAttribute())
25     state |= (1 << ui::AX_STATE_FOCUSABLE);
26
27   if (o.isFocused())
28     state |= (1 << ui::AX_STATE_FOCUSED);
29
30   if (o.role() == blink::WebAXRolePopUpButton ||
31       o.ariaHasPopup())
32     state |= (1 << ui::AX_STATE_HASPOPUP);
33
34   if (o.isHovered())
35     state |= (1 << ui::AX_STATE_HOVERED);
36
37   if (o.isIndeterminate())
38     state |= (1 << ui::AX_STATE_INDETERMINATE);
39
40   if (!o.isVisible())
41     state |= (1 << ui::AX_STATE_INVISIBLE);
42
43   if (o.isLinked())
44     state |= (1 << ui::AX_STATE_LINKED);
45
46   if (o.isMultiSelectable())
47     state |= (1 << ui::AX_STATE_MULTISELECTABLE);
48
49   if (o.isOffScreen())
50     state |= (1 << ui::AX_STATE_OFFSCREEN);
51
52   if (o.isPressed())
53     state |= (1 << ui::AX_STATE_PRESSED);
54
55   if (o.isPasswordField())
56     state |= (1 << ui::AX_STATE_PROTECTED);
57
58   if (o.isReadOnly())
59     state |= (1 << ui::AX_STATE_READ_ONLY);
60
61   if (o.isRequired())
62     state |= (1 << ui::AX_STATE_REQUIRED);
63
64   if (o.canSetSelectedAttribute())
65     state |= (1 << ui::AX_STATE_SELECTABLE);
66
67   if (o.isSelected())
68     state |= (1 << ui::AX_STATE_SELECTED);
69
70   if (o.isVisited())
71     state |= (1 << ui::AX_STATE_VISITED);
72
73   if (o.isEnabled())
74     state |= (1 << ui::AX_STATE_ENABLED);
75
76   if (o.isVertical())
77     state |= (1 << ui::AX_STATE_VERTICAL);
78
79   if (o.isVisited())
80     state |= (1 << ui::AX_STATE_VISITED);
81
82   return state;
83 }
84
85 ui::AXRole AXRoleFromBlink(blink::WebAXRole role) {
86   switch (role) {
87     case blink::WebAXRoleAlert:
88       return ui::AX_ROLE_ALERT;
89     case blink::WebAXRoleAlertDialog:
90       return ui::AX_ROLE_ALERT_DIALOG;
91     case blink::WebAXRoleAnnotation:
92       return ui::AX_ROLE_ANNOTATION;
93     case blink::WebAXRoleApplication:
94       return ui::AX_ROLE_APPLICATION;
95     case blink::WebAXRoleArticle:
96       return ui::AX_ROLE_ARTICLE;
97     case blink::WebAXRoleBanner:
98       return ui::AX_ROLE_BANNER;
99     case blink::WebAXRoleBlockquote:
100       return ui::AX_ROLE_BLOCKQUOTE;
101     case blink::WebAXRoleBrowser:
102       return ui::AX_ROLE_BROWSER;
103     case blink::WebAXRoleBusyIndicator:
104       return ui::AX_ROLE_BUSY_INDICATOR;
105     case blink::WebAXRoleButton:
106       return ui::AX_ROLE_BUTTON;
107     case blink::WebAXRoleCanvas:
108       return ui::AX_ROLE_CANVAS;
109     case blink::WebAXRoleCell:
110       return ui::AX_ROLE_CELL;
111     case blink::WebAXRoleCheckBox:
112       return ui::AX_ROLE_CHECK_BOX;
113     case blink::WebAXRoleColorWell:
114       return ui::AX_ROLE_COLOR_WELL;
115     case blink::WebAXRoleColumn:
116       return ui::AX_ROLE_COLUMN;
117     case blink::WebAXRoleColumnHeader:
118       return ui::AX_ROLE_COLUMN_HEADER;
119     case blink::WebAXRoleComboBox:
120       return ui::AX_ROLE_COMBO_BOX;
121     case blink::WebAXRoleComplementary:
122       return ui::AX_ROLE_COMPLEMENTARY;
123     case blink::WebAXRoleContentInfo:
124       return ui::AX_ROLE_CONTENT_INFO;
125     case blink::WebAXRoleDate:
126       return ui::AX_ROLE_DATE;
127     case blink::WebAXRoleDateTime:
128       return ui::AX_ROLE_DATE_TIME;
129     case blink::WebAXRoleDefinition:
130       return ui::AX_ROLE_DEFINITION;
131     case blink::WebAXRoleDescriptionListDetail:
132       return ui::AX_ROLE_DESCRIPTION_LIST_DETAIL;
133     case blink::WebAXRoleDescriptionList:
134       return ui::AX_ROLE_DESCRIPTION_LIST;
135     case blink::WebAXRoleDescriptionListTerm:
136       return ui::AX_ROLE_DESCRIPTION_LIST_TERM;
137     case blink::WebAXRoleDetails:
138       return ui::AX_ROLE_DETAILS;
139     case blink::WebAXRoleDialog:
140       return ui::AX_ROLE_DIALOG;
141     case blink::WebAXRoleDirectory:
142       return ui::AX_ROLE_DIRECTORY;
143     case blink::WebAXRoleDisclosureTriangle:
144       return ui::AX_ROLE_DISCLOSURE_TRIANGLE;
145     case blink::WebAXRoleDiv:
146       return ui::AX_ROLE_DIV;
147     case blink::WebAXRoleDocument:
148       return ui::AX_ROLE_DOCUMENT;
149     case blink::WebAXRoleDrawer:
150       return ui::AX_ROLE_DRAWER;
151     case blink::WebAXRoleEditableText:
152       return ui::AX_ROLE_EDITABLE_TEXT;
153     case blink::WebAXRoleEmbeddedObject:
154       return ui::AX_ROLE_EMBEDDED_OBJECT;
155     case blink::WebAXRoleFigcaption:
156       return ui::AX_ROLE_FIGCAPTION;
157     case blink::WebAXRoleFigure:
158       return ui::AX_ROLE_FIGURE;
159     case blink::WebAXRoleFooter:
160       return ui::AX_ROLE_FOOTER;
161     case blink::WebAXRoleForm:
162       return ui::AX_ROLE_FORM;
163     case blink::WebAXRoleGrid:
164       return ui::AX_ROLE_GRID;
165     case blink::WebAXRoleGroup:
166       return ui::AX_ROLE_GROUP;
167     case blink::WebAXRoleGrowArea:
168       return ui::AX_ROLE_GROW_AREA;
169     case blink::WebAXRoleHeading:
170       return ui::AX_ROLE_HEADING;
171     case blink::WebAXRoleHelpTag:
172       return ui::AX_ROLE_HELP_TAG;
173     case blink::WebAXRoleHorizontalRule:
174       return ui::AX_ROLE_HORIZONTAL_RULE;
175     case blink::WebAXRoleIframe:
176       return ui::AX_ROLE_IFRAME;
177     case blink::WebAXRoleIgnored:
178       return ui::AX_ROLE_IGNORED;
179     case blink::WebAXRoleImage:
180       return ui::AX_ROLE_IMAGE;
181     case blink::WebAXRoleImageMap:
182       return ui::AX_ROLE_IMAGE_MAP;
183     case blink::WebAXRoleImageMapLink:
184       return ui::AX_ROLE_IMAGE_MAP_LINK;
185     case blink::WebAXRoleIncrementor:
186       return ui::AX_ROLE_INCREMENTOR;
187     case blink::WebAXRoleInlineTextBox:
188       return ui::AX_ROLE_INLINE_TEXT_BOX;
189     case blink::WebAXRoleLabel:
190       return ui::AX_ROLE_LABEL_TEXT;
191     case blink::WebAXRoleLegend:
192       return ui::AX_ROLE_LEGEND;
193     case blink::WebAXRoleLink:
194       return ui::AX_ROLE_LINK;
195     case blink::WebAXRoleList:
196       return ui::AX_ROLE_LIST;
197     case blink::WebAXRoleListBox:
198       return ui::AX_ROLE_LIST_BOX;
199     case blink::WebAXRoleListBoxOption:
200       return ui::AX_ROLE_LIST_BOX_OPTION;
201     case blink::WebAXRoleListItem:
202       return ui::AX_ROLE_LIST_ITEM;
203     case blink::WebAXRoleListMarker:
204       return ui::AX_ROLE_LIST_MARKER;
205     case blink::WebAXRoleLog:
206       return ui::AX_ROLE_LOG;
207     case blink::WebAXRoleMain:
208       return ui::AX_ROLE_MAIN;
209     case blink::WebAXRoleMarquee:
210       return ui::AX_ROLE_MARQUEE;
211     case blink::WebAXRoleMath:
212       return ui::AX_ROLE_MATH;
213     case blink::WebAXRoleMatte:
214       return ui::AX_ROLE_MATTE;
215     case blink::WebAXRoleMenu:
216       return ui::AX_ROLE_MENU;
217     case blink::WebAXRoleMenuBar:
218       return ui::AX_ROLE_MENU_BAR;
219     case blink::WebAXRoleMenuButton:
220       return ui::AX_ROLE_MENU_BUTTON;
221     case blink::WebAXRoleMenuItem:
222       return ui::AX_ROLE_MENU_ITEM;
223     case blink::WebAXRoleMenuItemCheckBox:
224       return ui::AX_ROLE_MENU_ITEM_CHECK_BOX;
225     case blink::WebAXRoleMenuItemRadio:
226       return ui::AX_ROLE_MENU_ITEM_RADIO;
227     case blink::WebAXRoleMenuListOption:
228       return ui::AX_ROLE_MENU_LIST_OPTION;
229     case blink::WebAXRoleMenuListPopup:
230       return ui::AX_ROLE_MENU_LIST_POPUP;
231     case blink::WebAXRoleMeter:
232       return ui::AX_ROLE_METER;
233     case blink::WebAXRoleNavigation:
234       return ui::AX_ROLE_NAVIGATION;
235     case blink::WebAXRoleNone:
236       return ui::AX_ROLE_NONE;
237     case blink::WebAXRoleNote:
238       return ui::AX_ROLE_NOTE;
239     case blink::WebAXRoleOutline:
240       return ui::AX_ROLE_OUTLINE;
241     case blink::WebAXRoleParagraph:
242       return ui::AX_ROLE_PARAGRAPH;
243     case blink::WebAXRolePopUpButton:
244       return ui::AX_ROLE_POP_UP_BUTTON;
245     case blink::WebAXRolePre:
246       return ui::AX_ROLE_PRE;
247     case blink::WebAXRolePresentational:
248       return ui::AX_ROLE_PRESENTATIONAL;
249     case blink::WebAXRoleProgressIndicator:
250       return ui::AX_ROLE_PROGRESS_INDICATOR;
251     case blink::WebAXRoleRadioButton:
252       return ui::AX_ROLE_RADIO_BUTTON;
253     case blink::WebAXRoleRadioGroup:
254       return ui::AX_ROLE_RADIO_GROUP;
255     case blink::WebAXRoleRegion:
256       return ui::AX_ROLE_REGION;
257     case blink::WebAXRoleRootWebArea:
258       return ui::AX_ROLE_ROOT_WEB_AREA;
259     case blink::WebAXRoleRow:
260       return ui::AX_ROLE_ROW;
261     case blink::WebAXRoleRowHeader:
262       return ui::AX_ROLE_ROW_HEADER;
263     case blink::WebAXRoleRuler:
264       return ui::AX_ROLE_RULER;
265     case blink::WebAXRoleRulerMarker:
266       return ui::AX_ROLE_RULER_MARKER;
267     case blink::WebAXRoleSVGRoot:
268       return ui::AX_ROLE_SVG_ROOT;
269     case blink::WebAXRoleScrollArea:
270       return ui::AX_ROLE_SCROLL_AREA;
271     case blink::WebAXRoleScrollBar:
272       return ui::AX_ROLE_SCROLL_BAR;
273     case blink::WebAXRoleSeamlessWebArea:
274       return ui::AX_ROLE_SEAMLESS_WEB_AREA;
275     case blink::WebAXRoleSearch:
276       return ui::AX_ROLE_SEARCH;
277     case blink::WebAXRoleSheet:
278       return ui::AX_ROLE_SHEET;
279     case blink::WebAXRoleSlider:
280       return ui::AX_ROLE_SLIDER;
281     case blink::WebAXRoleSliderThumb:
282       return ui::AX_ROLE_SLIDER_THUMB;
283     case blink::WebAXRoleSpinButton:
284       return ui::AX_ROLE_SPIN_BUTTON;
285     case blink::WebAXRoleSpinButtonPart:
286       return ui::AX_ROLE_SPIN_BUTTON_PART;
287     case blink::WebAXRoleSplitGroup:
288       return ui::AX_ROLE_SPLIT_GROUP;
289     case blink::WebAXRoleSplitter:
290       return ui::AX_ROLE_SPLITTER;
291     case blink::WebAXRoleStaticText:
292       return ui::AX_ROLE_STATIC_TEXT;
293     case blink::WebAXRoleStatus:
294       return ui::AX_ROLE_STATUS;
295     case blink::WebAXRoleSystemWide:
296       return ui::AX_ROLE_SYSTEM_WIDE;
297     case blink::WebAXRoleTab:
298       return ui::AX_ROLE_TAB;
299     case blink::WebAXRoleTabGroup:
300       return ui::AX_ROLE_TAB_GROUP;
301     case blink::WebAXRoleTabList:
302       return ui::AX_ROLE_TAB_LIST;
303     case blink::WebAXRoleTabPanel:
304       return ui::AX_ROLE_TAB_PANEL;
305     case blink::WebAXRoleTable:
306       return ui::AX_ROLE_TABLE;
307     case blink::WebAXRoleTableHeaderContainer:
308       return ui::AX_ROLE_TABLE_HEADER_CONTAINER;
309     case blink::WebAXRoleTextArea:
310       return ui::AX_ROLE_TEXT_AREA;
311     case blink::WebAXRoleTextField:
312       return ui::AX_ROLE_TEXT_FIELD;
313     case blink::WebAXRoleTime:
314       return ui::AX_ROLE_TIME;
315     case blink::WebAXRoleTimer:
316       return ui::AX_ROLE_TIMER;
317     case blink::WebAXRoleToggleButton:
318       return ui::AX_ROLE_TOGGLE_BUTTON;
319     case blink::WebAXRoleToolbar:
320       return ui::AX_ROLE_TOOLBAR;
321     case blink::WebAXRoleTree:
322       return ui::AX_ROLE_TREE;
323     case blink::WebAXRoleTreeGrid:
324       return ui::AX_ROLE_TREE_GRID;
325     case blink::WebAXRoleTreeItem:
326       return ui::AX_ROLE_TREE_ITEM;
327     case blink::WebAXRoleUnknown:
328       return ui::AX_ROLE_UNKNOWN;
329     case blink::WebAXRoleUserInterfaceTooltip:
330       return ui::AX_ROLE_TOOLTIP;
331     case blink::WebAXRoleValueIndicator:
332       return ui::AX_ROLE_VALUE_INDICATOR;
333     case blink::WebAXRoleWebArea:
334       return ui::AX_ROLE_WEB_AREA;
335     case blink::WebAXRoleWindow:
336       return ui::AX_ROLE_WINDOW;
337     default:
338       // We can't add an assertion here, that prevents us
339       // from adding new role enums in Blink.
340       LOG(WARNING) << "Warning: Blink WebAXRole " << role
341                    << " not handled by Chromium yet.";
342       return ui::AX_ROLE_UNKNOWN;
343   }
344 }
345
346 ui::AXEvent AXEventFromBlink(blink::WebAXEvent event) {
347   switch (event) {
348     case blink::WebAXEventActiveDescendantChanged:
349       return ui::AX_EVENT_ACTIVEDESCENDANTCHANGED;
350     case blink::WebAXEventAlert:
351       return ui::AX_EVENT_ALERT;
352     case blink::WebAXEventAriaAttributeChanged:
353       return ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED;
354     case blink::WebAXEventAutocorrectionOccured:
355       return ui::AX_EVENT_AUTOCORRECTION_OCCURED;
356     case blink::WebAXEventCheckedStateChanged:
357       return ui::AX_EVENT_CHECKED_STATE_CHANGED;
358     case blink::WebAXEventChildrenChanged:
359       return ui::AX_EVENT_CHILDREN_CHANGED;
360     case blink::WebAXEventFocus:
361       return ui::AX_EVENT_FOCUS;
362     case blink::WebAXEventInvalidStatusChanged:
363       return ui::AX_EVENT_INVALID_STATUS_CHANGED;
364     case blink::WebAXEventLayoutComplete:
365       return ui::AX_EVENT_LAYOUT_COMPLETE;
366     case blink::WebAXEventLiveRegionChanged:
367       return ui::AX_EVENT_LIVE_REGION_CHANGED;
368     case blink::WebAXEventLoadComplete:
369       return ui::AX_EVENT_LOAD_COMPLETE;
370     case blink::WebAXEventLocationChanged:
371       return ui::AX_EVENT_LOCATION_CHANGED;
372     case blink::WebAXEventMenuListItemSelected:
373       return ui::AX_EVENT_MENU_LIST_ITEM_SELECTED;
374     case blink::WebAXEventMenuListValueChanged:
375         return ui::AX_EVENT_MENU_LIST_VALUE_CHANGED;
376     case blink::WebAXEventRowCollapsed:
377       return ui::AX_EVENT_ROW_COLLAPSED;
378     case blink::WebAXEventRowCountChanged:
379       return ui::AX_EVENT_ROW_COUNT_CHANGED;
380     case blink::WebAXEventRowExpanded:
381       return ui::AX_EVENT_ROW_EXPANDED;
382     case blink::WebAXEventScrollPositionChanged:
383       return ui::AX_EVENT_SCROLL_POSITION_CHANGED;
384     case blink::WebAXEventScrolledToAnchor:
385       return ui::AX_EVENT_SCROLLED_TO_ANCHOR;
386     case blink::WebAXEventSelectedChildrenChanged:
387       return ui::AX_EVENT_SELECTED_CHILDREN_CHANGED;
388     case blink::WebAXEventSelectedTextChanged:
389       return ui::AX_EVENT_TEXT_SELECTION_CHANGED;
390     case blink::WebAXEventTextChanged:
391       return ui::AX_EVENT_TEXT_CHANGED;
392     case blink::WebAXEventValueChanged:
393       return ui::AX_EVENT_VALUE_CHANGED;
394     default:
395       // We can't add an assertion here, that prevents us
396       // from adding new event enums in Blink.
397       return ui::AX_EVENT_NONE;
398   }
399 }
400
401 ui::AXTextDirection AXTextDirectionFromBlink(
402     blink::WebAXTextDirection text_direction) {
403   switch (text_direction) {
404     case blink::WebAXTextDirectionLR:
405       return ui::AX_TEXT_DIRECTION_LR;
406     case blink::WebAXTextDirectionRL:
407       return ui::AX_TEXT_DIRECTION_RL;
408     case blink::WebAXTextDirectionTB:
409       return ui::AX_TEXT_DIRECTION_TB;
410     case blink::WebAXTextDirectionBT:
411       return ui::AX_TEXT_DIRECTION_BT;
412     default:
413       NOTREACHED();
414   }
415
416   return ui::AX_TEXT_DIRECTION_NONE;
417 }
418
419 }  // namespace content