| OLD | NEW | 
 | (Empty) | 
|    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 |  | 
|    3 // found in the LICENSE file. |  | 
|    4  |  | 
|    5 #include "content/public/test/accessibility_test_utils_win.h" |  | 
|    6  |  | 
|    7 #include <oleacc.h> |  | 
|    8  |  | 
|    9 #include <map> |  | 
|   10 #include <string> |  | 
|   11  |  | 
|   12 #include "base/memory/singleton.h" |  | 
|   13 #include "base/string_util.h" |  | 
|   14 #include "third_party/iaccessible2/ia2_api_all.h" |  | 
|   15  |  | 
|   16 namespace { |  | 
|   17  |  | 
|   18 class AccessibilityRoleStateMap { |  | 
|   19  public: |  | 
|   20   static AccessibilityRoleStateMap* GetInstance(); |  | 
|   21  |  | 
|   22   std::map<int32, string16> ia_role_string_map; |  | 
|   23   std::map<int32, string16> ia2_role_string_map; |  | 
|   24   std::map<int32, string16> ia_state_string_map; |  | 
|   25   std::map<int32, string16> ia2_state_string_map; |  | 
|   26  |  | 
|   27  private: |  | 
|   28   AccessibilityRoleStateMap(); |  | 
|   29   virtual ~AccessibilityRoleStateMap() {} |  | 
|   30  |  | 
|   31   friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>; |  | 
|   32  |  | 
|   33   DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap); |  | 
|   34 }; |  | 
|   35  |  | 
|   36 // static |  | 
|   37 AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() { |  | 
|   38   return Singleton<AccessibilityRoleStateMap, |  | 
|   39                    LeakySingletonTraits<AccessibilityRoleStateMap> >::get(); |  | 
|   40 } |  | 
|   41  |  | 
|   42 AccessibilityRoleStateMap::AccessibilityRoleStateMap() { |  | 
|   43 // Convenience macros for generating readable strings. |  | 
|   44 #define IA_ROLE_MAP(x) ia_role_string_map[x] = L#x;  \ |  | 
|   45                        ia2_role_string_map[x] = L#x; |  | 
|   46 #define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L#x; |  | 
|   47 #define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L#x; |  | 
|   48 #define IA2_STATE_MAP(x) ia2_state_string_map[x] = L#x; |  | 
|   49  |  | 
|   50   // MSAA / IAccessible roles. Each one of these is also a valid |  | 
|   51   // IAccessible2 role, the IA_ROLE_MAP macro adds it to both. |  | 
|   52   IA_ROLE_MAP(ROLE_SYSTEM_ALERT) |  | 
|   53   IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION) |  | 
|   54   IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION) |  | 
|   55   IA_ROLE_MAP(ROLE_SYSTEM_BORDER) |  | 
|   56   IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) |  | 
|   57   IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) |  | 
|   58   IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) |  | 
|   59   IA_ROLE_MAP(ROLE_SYSTEM_CARET) |  | 
|   60   IA_ROLE_MAP(ROLE_SYSTEM_CELL) |  | 
|   61   IA_ROLE_MAP(ROLE_SYSTEM_CHARACTER) |  | 
|   62   IA_ROLE_MAP(ROLE_SYSTEM_CHART) |  | 
|   63   IA_ROLE_MAP(ROLE_SYSTEM_CHECKBUTTON) |  | 
|   64   IA_ROLE_MAP(ROLE_SYSTEM_CLIENT) |  | 
|   65   IA_ROLE_MAP(ROLE_SYSTEM_CLOCK) |  | 
|   66   IA_ROLE_MAP(ROLE_SYSTEM_COLUMN) |  | 
|   67   IA_ROLE_MAP(ROLE_SYSTEM_COLUMNHEADER) |  | 
|   68   IA_ROLE_MAP(ROLE_SYSTEM_COMBOBOX) |  | 
|   69   IA_ROLE_MAP(ROLE_SYSTEM_CURSOR) |  | 
|   70   IA_ROLE_MAP(ROLE_SYSTEM_DIAGRAM) |  | 
|   71   IA_ROLE_MAP(ROLE_SYSTEM_DIAL) |  | 
|   72   IA_ROLE_MAP(ROLE_SYSTEM_DIALOG) |  | 
|   73   IA_ROLE_MAP(ROLE_SYSTEM_DOCUMENT) |  | 
|   74   IA_ROLE_MAP(ROLE_SYSTEM_DROPLIST) |  | 
|   75   IA_ROLE_MAP(ROLE_SYSTEM_EQUATION) |  | 
|   76   IA_ROLE_MAP(ROLE_SYSTEM_GRAPHIC) |  | 
|   77   IA_ROLE_MAP(ROLE_SYSTEM_GRIP) |  | 
|   78   IA_ROLE_MAP(ROLE_SYSTEM_GROUPING) |  | 
|   79   IA_ROLE_MAP(ROLE_SYSTEM_HELPBALLOON) |  | 
|   80   IA_ROLE_MAP(ROLE_SYSTEM_HOTKEYFIELD) |  | 
|   81   IA_ROLE_MAP(ROLE_SYSTEM_INDICATOR) |  | 
|   82   IA_ROLE_MAP(ROLE_SYSTEM_IPADDRESS) |  | 
|   83   IA_ROLE_MAP(ROLE_SYSTEM_LINK) |  | 
|   84   IA_ROLE_MAP(ROLE_SYSTEM_LIST) |  | 
|   85   IA_ROLE_MAP(ROLE_SYSTEM_LISTITEM) |  | 
|   86   IA_ROLE_MAP(ROLE_SYSTEM_MENUBAR) |  | 
|   87   IA_ROLE_MAP(ROLE_SYSTEM_MENUITEM) |  | 
|   88   IA_ROLE_MAP(ROLE_SYSTEM_MENUPOPUP) |  | 
|   89   IA_ROLE_MAP(ROLE_SYSTEM_OUTLINE) |  | 
|   90   IA_ROLE_MAP(ROLE_SYSTEM_OUTLINEBUTTON) |  | 
|   91   IA_ROLE_MAP(ROLE_SYSTEM_OUTLINEITEM) |  | 
|   92   IA_ROLE_MAP(ROLE_SYSTEM_PAGETAB) |  | 
|   93   IA_ROLE_MAP(ROLE_SYSTEM_PAGETABLIST) |  | 
|   94   IA_ROLE_MAP(ROLE_SYSTEM_PANE) |  | 
|   95   IA_ROLE_MAP(ROLE_SYSTEM_PROGRESSBAR) |  | 
|   96   IA_ROLE_MAP(ROLE_SYSTEM_PROPERTYPAGE) |  | 
|   97   IA_ROLE_MAP(ROLE_SYSTEM_PUSHBUTTON) |  | 
|   98   IA_ROLE_MAP(ROLE_SYSTEM_RADIOBUTTON) |  | 
|   99   IA_ROLE_MAP(ROLE_SYSTEM_ROW) |  | 
|  100   IA_ROLE_MAP(ROLE_SYSTEM_ROWHEADER) |  | 
|  101   IA_ROLE_MAP(ROLE_SYSTEM_SCROLLBAR) |  | 
|  102   IA_ROLE_MAP(ROLE_SYSTEM_SEPARATOR) |  | 
|  103   IA_ROLE_MAP(ROLE_SYSTEM_SLIDER) |  | 
|  104   IA_ROLE_MAP(ROLE_SYSTEM_SOUND) |  | 
|  105   IA_ROLE_MAP(ROLE_SYSTEM_SPINBUTTON) |  | 
|  106   IA_ROLE_MAP(ROLE_SYSTEM_SPLITBUTTON) |  | 
|  107   IA_ROLE_MAP(ROLE_SYSTEM_STATICTEXT) |  | 
|  108   IA_ROLE_MAP(ROLE_SYSTEM_STATUSBAR) |  | 
|  109   IA_ROLE_MAP(ROLE_SYSTEM_TABLE) |  | 
|  110   IA_ROLE_MAP(ROLE_SYSTEM_TEXT) |  | 
|  111   IA_ROLE_MAP(ROLE_SYSTEM_TITLEBAR) |  | 
|  112   IA_ROLE_MAP(ROLE_SYSTEM_TOOLBAR) |  | 
|  113   IA_ROLE_MAP(ROLE_SYSTEM_TOOLTIP) |  | 
|  114   IA_ROLE_MAP(ROLE_SYSTEM_WHITESPACE) |  | 
|  115   IA_ROLE_MAP(ROLE_SYSTEM_WINDOW) |  | 
|  116  |  | 
|  117   // IAccessible2 roles. |  | 
|  118   IA2_ROLE_MAP(IA2_ROLE_CANVAS) |  | 
|  119   IA2_ROLE_MAP(IA2_ROLE_CAPTION) |  | 
|  120   IA2_ROLE_MAP(IA2_ROLE_CHECK_MENU_ITEM) |  | 
|  121   IA2_ROLE_MAP(IA2_ROLE_COLOR_CHOOSER) |  | 
|  122   IA2_ROLE_MAP(IA2_ROLE_DATE_EDITOR) |  | 
|  123   IA2_ROLE_MAP(IA2_ROLE_DESKTOP_ICON) |  | 
|  124   IA2_ROLE_MAP(IA2_ROLE_DESKTOP_PANE) |  | 
|  125   IA2_ROLE_MAP(IA2_ROLE_DIRECTORY_PANE) |  | 
|  126   IA2_ROLE_MAP(IA2_ROLE_EDITBAR) |  | 
|  127   IA2_ROLE_MAP(IA2_ROLE_EMBEDDED_OBJECT) |  | 
|  128   IA2_ROLE_MAP(IA2_ROLE_ENDNOTE) |  | 
|  129   IA2_ROLE_MAP(IA2_ROLE_FILE_CHOOSER) |  | 
|  130   IA2_ROLE_MAP(IA2_ROLE_FONT_CHOOSER) |  | 
|  131   IA2_ROLE_MAP(IA2_ROLE_FOOTER) |  | 
|  132   IA2_ROLE_MAP(IA2_ROLE_FOOTNOTE) |  | 
|  133   IA2_ROLE_MAP(IA2_ROLE_FORM) |  | 
|  134   IA2_ROLE_MAP(IA2_ROLE_FRAME) |  | 
|  135   IA2_ROLE_MAP(IA2_ROLE_GLASS_PANE) |  | 
|  136   IA2_ROLE_MAP(IA2_ROLE_HEADER) |  | 
|  137   IA2_ROLE_MAP(IA2_ROLE_HEADING) |  | 
|  138   IA2_ROLE_MAP(IA2_ROLE_ICON) |  | 
|  139   IA2_ROLE_MAP(IA2_ROLE_IMAGE_MAP) |  | 
|  140   IA2_ROLE_MAP(IA2_ROLE_INPUT_METHOD_WINDOW) |  | 
|  141   IA2_ROLE_MAP(IA2_ROLE_INTERNAL_FRAME) |  | 
|  142   IA2_ROLE_MAP(IA2_ROLE_LABEL) |  | 
|  143   IA2_ROLE_MAP(IA2_ROLE_LAYERED_PANE) |  | 
|  144   IA2_ROLE_MAP(IA2_ROLE_NOTE) |  | 
|  145   IA2_ROLE_MAP(IA2_ROLE_OPTION_PANE) |  | 
|  146   IA2_ROLE_MAP(IA2_ROLE_PAGE) |  | 
|  147   IA2_ROLE_MAP(IA2_ROLE_PARAGRAPH) |  | 
|  148   IA2_ROLE_MAP(IA2_ROLE_RADIO_MENU_ITEM) |  | 
|  149   IA2_ROLE_MAP(IA2_ROLE_REDUNDANT_OBJECT) |  | 
|  150   IA2_ROLE_MAP(IA2_ROLE_ROOT_PANE) |  | 
|  151   IA2_ROLE_MAP(IA2_ROLE_RULER) |  | 
|  152   IA2_ROLE_MAP(IA2_ROLE_SCROLL_PANE) |  | 
|  153   IA2_ROLE_MAP(IA2_ROLE_SECTION) |  | 
|  154   IA2_ROLE_MAP(IA2_ROLE_SHAPE) |  | 
|  155   IA2_ROLE_MAP(IA2_ROLE_SPLIT_PANE) |  | 
|  156   IA2_ROLE_MAP(IA2_ROLE_TEAR_OFF_MENU) |  | 
|  157   IA2_ROLE_MAP(IA2_ROLE_TERMINAL) |  | 
|  158   IA2_ROLE_MAP(IA2_ROLE_TEXT_FRAME) |  | 
|  159   IA2_ROLE_MAP(IA2_ROLE_TOGGLE_BUTTON) |  | 
|  160   IA2_ROLE_MAP(IA2_ROLE_UNKNOWN) |  | 
|  161   IA2_ROLE_MAP(IA2_ROLE_VIEW_PORT) |  | 
|  162  |  | 
|  163   // MSAA / IAccessible states. Unlike roles, these are not also IA2 states. |  | 
|  164   IA_STATE_MAP(ALERT_HIGH) |  | 
|  165   IA_STATE_MAP(ALERT_LOW) |  | 
|  166   IA_STATE_MAP(ALERT_MEDIUM) |  | 
|  167   IA_STATE_MAP(ANIMATED) |  | 
|  168   IA_STATE_MAP(BUSY) |  | 
|  169   IA_STATE_MAP(CHECKED) |  | 
|  170   IA_STATE_MAP(COLLAPSED) |  | 
|  171   IA_STATE_MAP(DEFAULT) |  | 
|  172   IA_STATE_MAP(EXPANDED) |  | 
|  173   IA_STATE_MAP(EXTSELECTABLE) |  | 
|  174   IA_STATE_MAP(FLOATING) |  | 
|  175   IA_STATE_MAP(FOCUSABLE) |  | 
|  176   IA_STATE_MAP(FOCUSED) |  | 
|  177   IA_STATE_MAP(HASPOPUP) |  | 
|  178   IA_STATE_MAP(HOTTRACKED) |  | 
|  179   IA_STATE_MAP(INVISIBLE) |  | 
|  180   IA_STATE_MAP(LINKED) |  | 
|  181   IA_STATE_MAP(MARQUEED) |  | 
|  182   IA_STATE_MAP(MIXED) |  | 
|  183   IA_STATE_MAP(MOVEABLE) |  | 
|  184   IA_STATE_MAP(MULTISELECTABLE) |  | 
|  185   IA_STATE_MAP(PRESSED) |  | 
|  186   IA_STATE_MAP(PROTECTED) |  | 
|  187   IA_STATE_MAP(READONLY) |  | 
|  188   IA_STATE_MAP(SELECTABLE) |  | 
|  189   IA_STATE_MAP(SELECTED) |  | 
|  190   IA_STATE_MAP(SELFVOICING) |  | 
|  191   IA_STATE_MAP(SIZEABLE) |  | 
|  192   IA_STATE_MAP(TRAVERSED) |  | 
|  193   IA_STATE_MAP(UNAVAILABLE) |  | 
|  194  |  | 
|  195   // Untested states include those that would be repeated on nearly every node, |  | 
|  196   // or would vary based on window size. |  | 
|  197   // IA_STATE_MAP(OFFSCREEN) // Untested. |  | 
|  198  |  | 
|  199   // IAccessible2 states. |  | 
|  200   IA2_STATE_MAP(IA2_STATE_ACTIVE) |  | 
|  201   IA2_STATE_MAP(IA2_STATE_ARMED) |  | 
|  202   IA2_STATE_MAP(IA2_STATE_DEFUNCT) |  | 
|  203   IA2_STATE_MAP(IA2_STATE_EDITABLE) |  | 
|  204   IA2_STATE_MAP(IA2_STATE_ICONIFIED) |  | 
|  205   IA2_STATE_MAP(IA2_STATE_INVALID_ENTRY) |  | 
|  206   IA2_STATE_MAP(IA2_STATE_MANAGES_DESCENDANTS) |  | 
|  207   IA2_STATE_MAP(IA2_STATE_MODAL) |  | 
|  208   IA2_STATE_MAP(IA2_STATE_MULTI_LINE) |  | 
|  209   IA2_STATE_MAP(IA2_STATE_REQUIRED) |  | 
|  210   IA2_STATE_MAP(IA2_STATE_SELECTABLE_TEXT) |  | 
|  211   IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) |  | 
|  212   IA2_STATE_MAP(IA2_STATE_STALE) |  | 
|  213   IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) |  | 
|  214   IA2_STATE_MAP(IA2_STATE_TRANSIENT) |  | 
|  215  |  | 
|  216   // Untested states include those that would be repeated on nearly every node, |  | 
|  217   // or would vary based on window size. |  | 
|  218   // IA2_STATE_MAP(IA2_STATE_HORIZONTAL) // Untested. |  | 
|  219   // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested. |  | 
|  220   // IA2_STATE_MAP(IA2_STATE_VERTICAL) // Untested. |  | 
|  221 } |  | 
|  222  |  | 
|  223 }  // namespace. |  | 
|  224  |  | 
|  225 string16 IAccessibleRoleToString(int32 ia_role) { |  | 
|  226   return AccessibilityRoleStateMap::GetInstance()->ia_role_string_map[ia_role]; |  | 
|  227 } |  | 
|  228  |  | 
|  229 string16 IAccessible2RoleToString(int32 ia_role) { |  | 
|  230   return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role]; |  | 
|  231 } |  | 
|  232  |  | 
|  233 void IAccessibleStateToStringVector(int32 ia_state, |  | 
|  234                                     std::vector<string16>* result) { |  | 
|  235   const std::map<int32, string16>& state_string_map = |  | 
|  236       AccessibilityRoleStateMap::GetInstance()->ia_state_string_map; |  | 
|  237   std::map<int32, string16>::const_iterator it; |  | 
|  238   for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |  | 
|  239     if (it->first & ia_state) |  | 
|  240       result->push_back(it->second); |  | 
|  241   } |  | 
|  242 } |  | 
|  243  |  | 
|  244 string16 IAccessibleStateToString(int32 ia_state) { |  | 
|  245   std::vector<string16> strings; |  | 
|  246   IAccessibleStateToStringVector(ia_state, &strings); |  | 
|  247   return JoinString(strings, ','); |  | 
|  248 } |  | 
|  249  |  | 
|  250 void IAccessible2StateToStringVector(int32 ia2_state, |  | 
|  251                                      std::vector<string16>* result) { |  | 
|  252   const std::map<int32, string16>& state_string_map = |  | 
|  253       AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map; |  | 
|  254   std::map<int32, string16>::const_iterator it; |  | 
|  255   for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |  | 
|  256     if (it->first & ia2_state) |  | 
|  257       result->push_back(it->second); |  | 
|  258   } |  | 
|  259 } |  | 
|  260  |  | 
|  261 string16 IAccessible2StateToString(int32 ia2_state) { |  | 
|  262   std::vector<string16> strings; |  | 
|  263   IAccessible2StateToStringVector(ia2_state, &strings); |  | 
|  264   return JoinString(strings, ','); |  | 
|  265 } |  | 
| OLD | NEW |