15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <oleacc.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/iaccessible2/ia2_api_all.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AccessibilityRoleStateMap {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static AccessibilityRoleStateMap* GetInstance();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16> ia_role_string_map;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16> ia2_role_string_map;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16> ia_state_string_map;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16> ia2_state_string_map;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AccessibilityRoleStateMap();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AccessibilityRoleStateMap() {}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Singleton<AccessibilityRoleStateMap,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   LeakySingletonTraits<AccessibilityRoleStateMap> >::get();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AccessibilityRoleStateMap::AccessibilityRoleStateMap() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convenience macros for generating readable strings.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IA_ROLE_MAP(x) ia_role_string_map[x] = L#x;  \
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ia2_role_string_map[x] = L#x;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L#x;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L#x;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IA2_STATE_MAP(x) ia2_state_string_map[x] = L#x;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // MSAA / IAccessible roles. Each one of these is also a valid
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IAccessible2 role, the IA_ROLE_MAP macro adds it to both.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_ALERT)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_BORDER)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CARET)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CELL)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CHARACTER)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CHART)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CHECKBUTTON)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CLIENT)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CLOCK)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_COLUMN)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_COLUMNHEADER)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_COMBOBOX)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_CURSOR)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_DIAGRAM)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_DIAL)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_DIALOG)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_DOCUMENT)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_DROPLIST)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_EQUATION)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_GRAPHIC)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_GRIP)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_GROUPING)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_HELPBALLOON)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_HOTKEYFIELD)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_INDICATOR)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_IPADDRESS)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_LINK)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_LIST)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_LISTITEM)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_MENUBAR)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_MENUITEM)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_MENUPOPUP)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_OUTLINE)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_OUTLINEBUTTON)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_OUTLINEITEM)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PAGETAB)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PAGETABLIST)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PANE)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PROGRESSBAR)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PROPERTYPAGE)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_PUSHBUTTON)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_RADIOBUTTON)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_ROW)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_ROWHEADER)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SCROLLBAR)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SEPARATOR)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SLIDER)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SOUND)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SPINBUTTON)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_SPLITBUTTON)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_STATICTEXT)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_STATUSBAR)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_TABLE)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_TEXT)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_TITLEBAR)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_TOOLBAR)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_TOOLTIP)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_WHITESPACE)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_ROLE_MAP(ROLE_SYSTEM_WINDOW)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IAccessible2 roles.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_CANVAS)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_CAPTION)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_CHECK_MENU_ITEM)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_COLOR_CHOOSER)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_DATE_EDITOR)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_DESKTOP_ICON)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_DESKTOP_PANE)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_DIRECTORY_PANE)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_EDITBAR)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_EMBEDDED_OBJECT)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_ENDNOTE)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FILE_CHOOSER)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FONT_CHOOSER)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FOOTER)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FOOTNOTE)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FORM)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_FRAME)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_GLASS_PANE)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_HEADER)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_HEADING)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_ICON)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_IMAGE_MAP)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_INPUT_METHOD_WINDOW)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_INTERNAL_FRAME)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_LABEL)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_LAYERED_PANE)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_NOTE)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_OPTION_PANE)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_PAGE)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_PARAGRAPH)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_RADIO_MENU_ITEM)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_REDUNDANT_OBJECT)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_ROOT_PANE)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_RULER)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_SCROLL_PANE)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_SECTION)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_SHAPE)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_SPLIT_PANE)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_TEAR_OFF_MENU)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_TERMINAL)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_TEXT_FRAME)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_TOGGLE_BUTTON)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_UNKNOWN)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_ROLE_MAP(IA2_ROLE_VIEW_PORT)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // MSAA / IAccessible states. Unlike roles, these are not also IA2 states.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(ALERT_HIGH)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(ALERT_LOW)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(ALERT_MEDIUM)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(ANIMATED)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(BUSY)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(CHECKED)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(COLLAPSED)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(DEFAULT)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(EXPANDED)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(EXTSELECTABLE)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(FLOATING)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(FOCUSABLE)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(FOCUSED)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(HASPOPUP)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(HOTTRACKED)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(INVISIBLE)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(LINKED)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(MARQUEED)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(MIXED)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(MOVEABLE)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(MULTISELECTABLE)
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  IA_STATE_MAP(OFFSCREEN)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(PRESSED)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(PROTECTED)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(READONLY)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(SELECTABLE)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(SELECTED)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(SELFVOICING)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(SIZEABLE)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(TRAVERSED)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA_STATE_MAP(UNAVAILABLE)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IAccessible2 states.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_ACTIVE)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_ARMED)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_DEFUNCT)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_EDITABLE)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_ICONIFIED)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_INVALID_ENTRY)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_MANAGES_DESCENDANTS)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_MODAL)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_MULTI_LINE)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_REQUIRED)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_SELECTABLE_TEXT)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_SINGLE_LINE)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_STALE)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IA2_STATE_MAP(IA2_STATE_TRANSIENT)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Untested states include those that would be repeated on nearly every node,
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // or would vary based on window size.
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IA2_STATE_MAP(IA2_STATE_HORIZONTAL) // Untested.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested.
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IA2_STATE_MAP(IA2_STATE_VERTICAL) // Untested.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace.
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 IAccessibleRoleToString(int32 ia_role) {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return AccessibilityRoleStateMap::GetInstance()->ia_role_string_map[ia_role];
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 IAccessible2RoleToString(int32 ia_role) {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role];
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IAccessibleStateToStringVector(int32 ia_state,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    std::vector<string16>* result) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::map<int32, string16>& state_string_map =
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AccessibilityRoleStateMap::GetInstance()->ia_state_string_map;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16>::const_iterator it;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it->first & ia_state)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result->push_back(it->second);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 IAccessibleStateToString(int32 ia_state) {
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<string16> strings;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IAccessibleStateToStringVector(ia_state, &strings);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return JoinString(strings, ',');
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IAccessible2StateToStringVector(int32 ia2_state,
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     std::vector<string16>* result) {
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::map<int32, string16>& state_string_map =
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, string16>::const_iterator it;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it->first & ia2_state)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result->push_back(it->second);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 IAccessible2StateToString(int32 ia2_state) {
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<string16> strings;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IAccessible2StateToStringVector(ia2_state, &strings);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return JoinString(strings, ',');
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
266