OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 #include "platform/text/PlatformLocale.h" | 42 #include "platform/text/PlatformLocale.h" |
43 #include "wtf/StdLibExtras.h" | 43 #include "wtf/StdLibExtras.h" |
44 #include "wtf/text/WTFString.h" | 44 #include "wtf/text/WTFString.h" |
45 | 45 |
46 using blink::WebLocalizedString; | 46 using blink::WebLocalizedString; |
47 | 47 |
48 namespace blink { | 48 namespace blink { |
49 | 49 |
50 using namespace HTMLNames; | 50 using namespace HTMLNames; |
51 | 51 |
| 52 namespace { |
52 typedef HashMap<String, AccessibilityRole, CaseFoldingHash> ARIARoleMap; | 53 typedef HashMap<String, AccessibilityRole, CaseFoldingHash> ARIARoleMap; |
53 | 54 |
54 struct RoleEntry { | 55 struct RoleEntry { |
55 String ariaRole; | 56 const char* ariaRole; |
56 AccessibilityRole webcoreRole; | 57 AccessibilityRole webcoreRole; |
57 }; | 58 }; |
58 | 59 |
| 60 const RoleEntry roles[] = { |
| 61 { "alert", AlertRole }, |
| 62 { "alertdialog", AlertDialogRole }, |
| 63 { "application", ApplicationRole }, |
| 64 { "article", ArticleRole }, |
| 65 { "banner", BannerRole }, |
| 66 { "button", ButtonRole }, |
| 67 { "checkbox", CheckBoxRole }, |
| 68 { "complementary", ComplementaryRole }, |
| 69 { "contentinfo", ContentInfoRole }, |
| 70 { "dialog", DialogRole }, |
| 71 { "directory", DirectoryRole }, |
| 72 { "grid", GridRole }, |
| 73 { "gridcell", CellRole }, |
| 74 { "columnheader", ColumnHeaderRole }, |
| 75 { "combobox", ComboBoxRole }, |
| 76 { "definition", DefinitionRole }, |
| 77 { "document", DocumentRole }, |
| 78 { "rowheader", RowHeaderRole }, |
| 79 { "form", FormRole }, |
| 80 { "group", GroupRole }, |
| 81 { "heading", HeadingRole }, |
| 82 { "img", ImageRole }, |
| 83 { "link", LinkRole }, |
| 84 { "list", ListRole }, |
| 85 { "listitem", ListItemRole }, |
| 86 { "listbox", ListBoxRole }, |
| 87 { "log", LogRole }, |
| 88 { "main", MainRole }, |
| 89 { "marquee", MarqueeRole }, |
| 90 { "math", MathRole }, |
| 91 { "menu", MenuRole }, |
| 92 { "menubar", MenuBarRole }, |
| 93 { "menuitem", MenuItemRole }, |
| 94 { "menuitemcheckbox", MenuItemCheckBoxRole }, |
| 95 { "menuitemradio", MenuItemRadioRole }, |
| 96 { "note", NoteRole }, |
| 97 { "navigation", NavigationRole }, |
| 98 { "none", NoneRole }, |
| 99 { "option", ListBoxOptionRole }, |
| 100 { "presentation", PresentationalRole }, |
| 101 { "progressbar", ProgressIndicatorRole }, |
| 102 { "radio", RadioButtonRole }, |
| 103 { "radiogroup", RadioGroupRole }, |
| 104 { "region", RegionRole }, |
| 105 { "row", RowRole }, |
| 106 { "scrollbar", ScrollBarRole }, |
| 107 { "search", SearchRole }, |
| 108 { "separator", SplitterRole }, |
| 109 { "slider", SliderRole }, |
| 110 { "spinbutton", SpinButtonRole }, |
| 111 { "status", StatusRole }, |
| 112 { "tab", TabRole }, |
| 113 { "tablist", TabListRole }, |
| 114 { "tabpanel", TabPanelRole }, |
| 115 { "text", StaticTextRole }, |
| 116 { "textbox", TextAreaRole }, |
| 117 { "timer", TimerRole }, |
| 118 { "toolbar", ToolbarRole }, |
| 119 { "tooltip", UserInterfaceTooltipRole }, |
| 120 { "tree", TreeRole }, |
| 121 { "treegrid", TreeGridRole }, |
| 122 { "treeitem", TreeItemRole } |
| 123 }; |
| 124 |
59 static ARIARoleMap* createARIARoleMap() | 125 static ARIARoleMap* createARIARoleMap() |
60 { | 126 { |
61 const RoleEntry roles[] = { | |
62 { "alert", AlertRole }, | |
63 { "alertdialog", AlertDialogRole }, | |
64 { "application", ApplicationRole }, | |
65 { "article", ArticleRole }, | |
66 { "banner", BannerRole }, | |
67 { "button", ButtonRole }, | |
68 { "checkbox", CheckBoxRole }, | |
69 { "complementary", ComplementaryRole }, | |
70 { "contentinfo", ContentInfoRole }, | |
71 { "dialog", DialogRole }, | |
72 { "directory", DirectoryRole }, | |
73 { "grid", GridRole }, | |
74 { "gridcell", CellRole }, | |
75 { "columnheader", ColumnHeaderRole }, | |
76 { "combobox", ComboBoxRole }, | |
77 { "definition", DefinitionRole }, | |
78 { "document", DocumentRole }, | |
79 { "rowheader", RowHeaderRole }, | |
80 { "form", FormRole }, | |
81 { "group", GroupRole }, | |
82 { "heading", HeadingRole }, | |
83 { "img", ImageRole }, | |
84 { "link", LinkRole }, | |
85 { "list", ListRole }, | |
86 { "listitem", ListItemRole }, | |
87 { "listbox", ListBoxRole }, | |
88 { "log", LogRole }, | |
89 // "option" isn't here because it may map to different roles depending o
n the parent element's role | |
90 { "main", MainRole }, | |
91 { "marquee", MarqueeRole }, | |
92 { "math", MathRole }, | |
93 { "menu", MenuRole }, | |
94 { "menubar", MenuBarRole }, | |
95 { "menuitem", MenuItemRole }, | |
96 { "menuitemcheckbox", MenuItemCheckBoxRole }, | |
97 { "menuitemradio", MenuItemRadioRole }, | |
98 { "note", NoteRole }, | |
99 { "navigation", NavigationRole }, | |
100 { "none", NoneRole }, | |
101 { "option", ListBoxOptionRole }, | |
102 { "presentation", PresentationalRole }, | |
103 { "progressbar", ProgressIndicatorRole }, | |
104 { "radio", RadioButtonRole }, | |
105 { "radiogroup", RadioGroupRole }, | |
106 { "region", RegionRole }, | |
107 { "row", RowRole }, | |
108 { "scrollbar", ScrollBarRole }, | |
109 { "search", SearchRole }, | |
110 { "separator", SplitterRole }, | |
111 { "slider", SliderRole }, | |
112 { "spinbutton", SpinButtonRole }, | |
113 { "status", StatusRole }, | |
114 { "tab", TabRole }, | |
115 { "tablist", TabListRole }, | |
116 { "tabpanel", TabPanelRole }, | |
117 { "text", StaticTextRole }, | |
118 { "textbox", TextAreaRole }, | |
119 { "timer", TimerRole }, | |
120 { "toolbar", ToolbarRole }, | |
121 { "tooltip", UserInterfaceTooltipRole }, | |
122 { "tree", TreeRole }, | |
123 { "treegrid", TreeGridRole }, | |
124 { "treeitem", TreeItemRole } | |
125 }; | |
126 ARIARoleMap* roleMap = new ARIARoleMap; | 127 ARIARoleMap* roleMap = new ARIARoleMap; |
127 | 128 |
128 for (size_t i = 0; i < WTF_ARRAY_LENGTH(roles); ++i) | 129 for (size_t i = 0; i < WTF_ARRAY_LENGTH(roles); ++i) |
129 roleMap->set(roles[i].ariaRole, roles[i].webcoreRole); | 130 roleMap->set(roles[i].ariaRole, roles[i].webcoreRole); |
130 return roleMap; | 131 return roleMap; |
131 } | 132 } |
132 | 133 |
| 134 static Vector<AtomicString>* createRoleNameVector() |
| 135 { |
| 136 Vector<AtomicString>* roleNameVector = new Vector<AtomicString>(NumRoles); |
| 137 for (int i = 0; i < NumRoles; i++) |
| 138 (*roleNameVector)[i] = nullAtom; |
| 139 |
| 140 for (size_t i = 0; i < WTF_ARRAY_LENGTH(roles); ++i) |
| 141 (*roleNameVector)[roles[i].webcoreRole] = AtomicString(roles[i].ariaRole
); |
| 142 |
| 143 return roleNameVector; |
| 144 } |
| 145 |
| 146 } // namespace |
| 147 |
133 AXObject::AXObject(AXObjectCacheImpl* axObjectCache) | 148 AXObject::AXObject(AXObjectCacheImpl* axObjectCache) |
134 : m_id(0) | 149 : m_id(0) |
135 , m_haveChildren(false) | 150 , m_haveChildren(false) |
136 , m_role(UnknownRole) | 151 , m_role(UnknownRole) |
137 , m_lastKnownIsIgnoredValue(DefaultBehavior) | 152 , m_lastKnownIsIgnoredValue(DefaultBehavior) |
138 , m_detached(false) | 153 , m_detached(false) |
139 , m_parent(0) | 154 , m_parent(0) |
140 , m_lastModificationCount(-1) | 155 , m_lastModificationCount(-1) |
141 , m_cachedIsIgnored(false) | 156 , m_cachedIsIgnored(false) |
142 , m_cachedLiveRegionRoot(0) | 157 , m_cachedLiveRegionRoot(0) |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 if (ariaPressedIsPresent()) | 962 if (ariaPressedIsPresent()) |
948 return ToggleButtonRole; | 963 return ToggleButtonRole; |
949 if (ariaHasPopup()) | 964 if (ariaHasPopup()) |
950 return PopUpButtonRole; | 965 return PopUpButtonRole; |
951 // We don't contemplate RadioButtonRole, as it depends on the input | 966 // We don't contemplate RadioButtonRole, as it depends on the input |
952 // type. | 967 // type. |
953 | 968 |
954 return ButtonRole; | 969 return ButtonRole; |
955 } | 970 } |
956 | 971 |
| 972 const AtomicString& AXObject::roleName(AccessibilityRole role) |
| 973 { |
| 974 static const Vector<AtomicString>* roleNameVector = createRoleNameVector(); |
| 975 |
| 976 return roleNameVector->at(role); |
| 977 } |
| 978 |
957 } // namespace blink | 979 } // namespace blink |
OLD | NEW |