OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h " | 5 #include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h " |
6 | 6 |
7 #include <oleacc.h> | 7 #include <oleacc.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/memory/singleton.h" | 12 #include "base/memory/singleton.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "third_party/iaccessible2/ia2_api_all.h" | 14 #include "third_party/iaccessible2/ia2_api_all.h" |
15 | 15 |
16 namespace content { | 16 namespace content { |
17 namespace { | 17 namespace { |
18 | 18 |
19 class AccessibilityRoleStateMap { | 19 class AccessibilityRoleStateMap { |
20 public: | 20 public: |
21 static AccessibilityRoleStateMap* GetInstance(); | 21 static AccessibilityRoleStateMap* GetInstance(); |
22 | 22 |
23 std::map<int32, base::string16> ia_role_string_map; | 23 std::map<int32, base::string16> ia_role_string_map; |
24 std::map<int32, base::string16> ia2_role_string_map; | 24 std::map<int32, base::string16> ia2_role_string_map; |
25 std::map<int32, base::string16> ia_state_string_map; | 25 std::map<int32, base::string16> ia_state_string_map; |
26 std::map<int32, base::string16> ia2_state_string_map; | 26 std::map<int32, base::string16> ia2_state_string_map; |
27 std::map<int32, base::string16> event_string_map; | |
27 | 28 |
28 private: | 29 private: |
29 AccessibilityRoleStateMap(); | 30 AccessibilityRoleStateMap(); |
30 virtual ~AccessibilityRoleStateMap() {} | 31 virtual ~AccessibilityRoleStateMap() {} |
31 | 32 |
32 friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>; | 33 friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>; |
33 | 34 |
34 DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap); | 35 DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap); |
35 }; | 36 }; |
36 | 37 |
37 // static | 38 // static |
38 AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() { | 39 AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() { |
39 return Singleton<AccessibilityRoleStateMap, | 40 return Singleton<AccessibilityRoleStateMap, |
40 LeakySingletonTraits<AccessibilityRoleStateMap> >::get(); | 41 LeakySingletonTraits<AccessibilityRoleStateMap> >::get(); |
41 } | 42 } |
42 | 43 |
43 AccessibilityRoleStateMap::AccessibilityRoleStateMap() { | 44 AccessibilityRoleStateMap::AccessibilityRoleStateMap() { |
44 // Convenience macros for generating readable strings. | 45 // Convenience macros for generating readable strings. |
45 #define IA_ROLE_MAP(x) ia_role_string_map[x] = L###x; \ | 46 #define IA_ROLE_MAP(x) ia_role_string_map[x] = L###x; \ |
46 ia2_role_string_map[x] = L###x; | 47 ia2_role_string_map[x] = L###x; |
47 #define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L###x; | 48 #define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L###x; |
48 #define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L###x; | 49 #define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L###x; |
49 #define IA2_STATE_MAP(x) ia2_state_string_map[x] = L###x; | 50 #define IA2_STATE_MAP(x) ia2_state_string_map[x] = L###x; |
51 #define EVENT_MAP(x) event_string_map[x] = L###x; | |
50 | 52 |
51 // MSAA / IAccessible roles. Each one of these is also a valid | 53 // MSAA / IAccessible roles. Each one of these is also a valid |
52 // IAccessible2 role, the IA_ROLE_MAP macro adds it to both. | 54 // IAccessible2 role, the IA_ROLE_MAP macro adds it to both. |
53 IA_ROLE_MAP(ROLE_SYSTEM_ALERT) | 55 IA_ROLE_MAP(ROLE_SYSTEM_ALERT) |
54 IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION) | 56 IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION) |
55 IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION) | 57 IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION) |
56 IA_ROLE_MAP(ROLE_SYSTEM_BORDER) | 58 IA_ROLE_MAP(ROLE_SYSTEM_BORDER) |
57 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) | 59 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) |
58 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) | 60 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) |
59 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) | 61 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
210 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) | 212 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) |
211 IA2_STATE_MAP(IA2_STATE_STALE) | 213 IA2_STATE_MAP(IA2_STATE_STALE) |
212 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) | 214 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) |
213 IA2_STATE_MAP(IA2_STATE_TRANSIENT) | 215 IA2_STATE_MAP(IA2_STATE_TRANSIENT) |
214 | 216 |
215 // Untested states include those that would be repeated on nearly every node, | 217 // Untested states include those that would be repeated on nearly every node, |
216 // or would vary based on window size. | 218 // or would vary based on window size. |
217 // IA2_STATE_MAP(IA2_STATE_HORIZONTAL) // Untested. | 219 // IA2_STATE_MAP(IA2_STATE_HORIZONTAL) // Untested. |
218 // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested. | 220 // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested. |
219 // IA2_STATE_MAP(IA2_STATE_VERTICAL) // Untested. | 221 // IA2_STATE_MAP(IA2_STATE_VERTICAL) // Untested. |
222 | |
223 EVENT_MAP(EVENT_OBJECT_CREATE) | |
224 EVENT_MAP(EVENT_OBJECT_DESTROY) | |
225 EVENT_MAP(EVENT_OBJECT_SHOW) | |
226 EVENT_MAP(EVENT_OBJECT_HIDE) | |
227 EVENT_MAP(EVENT_OBJECT_REORDER) | |
228 EVENT_MAP(EVENT_OBJECT_FOCUS) | |
229 EVENT_MAP(EVENT_OBJECT_SELECTION) | |
230 EVENT_MAP(EVENT_OBJECT_SELECTIONADD) | |
231 EVENT_MAP(EVENT_OBJECT_SELECTIONREMOVE) | |
232 EVENT_MAP(EVENT_OBJECT_SELECTIONWITHIN) | |
233 EVENT_MAP(EVENT_OBJECT_STATECHANGE) | |
234 EVENT_MAP(EVENT_OBJECT_LOCATIONCHANGE) | |
235 EVENT_MAP(EVENT_OBJECT_NAMECHANGE) | |
236 EVENT_MAP(EVENT_OBJECT_DESCRIPTIONCHANGE) | |
237 EVENT_MAP(EVENT_OBJECT_VALUECHANGE) | |
238 EVENT_MAP(EVENT_OBJECT_PARENTCHANGE) | |
239 EVENT_MAP(EVENT_OBJECT_HELPCHANGE) | |
240 EVENT_MAP(EVENT_OBJECT_DEFACTIONCHANGE) | |
241 EVENT_MAP(EVENT_OBJECT_ACCELERATORCHANGE) | |
242 EVENT_MAP(EVENT_OBJECT_INVOKED) | |
243 EVENT_MAP(EVENT_OBJECT_TEXTSELECTIONCHANGED) | |
244 EVENT_MAP(EVENT_OBJECT_CONTENTSCROLLED) | |
245 EVENT_MAP(EVENT_OBJECT_LIVEREGIONCHANGED) | |
246 EVENT_MAP(EVENT_OBJECT_HOSTEDOBJECTSINVALIDATED) | |
247 EVENT_MAP(EVENT_OBJECT_DRAGSTART) | |
248 EVENT_MAP(EVENT_OBJECT_DRAGCANCEL) | |
249 EVENT_MAP(EVENT_OBJECT_DRAGCOMPLETE) | |
250 EVENT_MAP(EVENT_OBJECT_DRAGENTER) | |
251 EVENT_MAP(EVENT_OBJECT_DRAGLEAVE) | |
252 EVENT_MAP(EVENT_OBJECT_DRAGDROPPED) | |
253 EVENT_MAP(EVENT_SYSTEM_ALERT) | |
254 EVENT_MAP(EVENT_SYSTEM_SCROLLINGSTART) | |
255 EVENT_MAP(EVENT_SYSTEM_SCROLLINGEND) | |
256 EVENT_MAP(IA2_EVENT_ACTION_CHANGED) | |
257 EVENT_MAP(IA2_EVENT_ACTIVE_DECENDENT_CHANGED) | |
258 EVENT_MAP(IA2_EVENT_ACTIVE_DESCENDANT_CHANGED) | |
259 EVENT_MAP(IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED) | |
260 EVENT_MAP(IA2_EVENT_DOCUMENT_CONTENT_CHANGED) | |
261 EVENT_MAP(IA2_EVENT_DOCUMENT_LOAD_COMPLETE) | |
262 EVENT_MAP(IA2_EVENT_DOCUMENT_LOAD_STOPPED) | |
263 EVENT_MAP(IA2_EVENT_DOCUMENT_RELOAD) | |
264 EVENT_MAP(IA2_EVENT_HYPERLINK_END_INDEX_CHANGED) | |
265 EVENT_MAP(IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED) | |
266 EVENT_MAP(IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED) | |
267 EVENT_MAP(IA2_EVENT_HYPERTEXT_LINK_ACTIVATED) | |
268 EVENT_MAP(IA2_EVENT_HYPERTEXT_LINK_SELECTED) | |
269 EVENT_MAP(IA2_EVENT_HYPERLINK_START_INDEX_CHANGED) | |
270 EVENT_MAP(IA2_EVENT_HYPERTEXT_CHANGED) | |
271 EVENT_MAP(IA2_EVENT_HYPERTEXT_NLINKS_CHANGED) | |
272 EVENT_MAP(IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED) | |
273 EVENT_MAP(IA2_EVENT_PAGE_CHANGED) | |
274 EVENT_MAP(IA2_EVENT_SECTION_CHANGED) | |
275 EVENT_MAP(IA2_EVENT_TABLE_CAPTION_CHANGED) | |
276 EVENT_MAP(IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED) | |
277 EVENT_MAP(IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED) | |
278 EVENT_MAP(IA2_EVENT_TABLE_MODEL_CHANGED) | |
279 EVENT_MAP(IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED) | |
280 EVENT_MAP(IA2_EVENT_TABLE_ROW_HEADER_CHANGED) | |
281 EVENT_MAP(IA2_EVENT_TABLE_SUMMARY_CHANGED) | |
282 EVENT_MAP(IA2_EVENT_TEXT_ATTRIBUTE_CHANGED) | |
283 EVENT_MAP(IA2_EVENT_TEXT_CARET_MOVED) | |
284 EVENT_MAP(IA2_EVENT_TEXT_CHANGED) | |
285 EVENT_MAP(IA2_EVENT_TEXT_COLUMN_CHANGED) | |
286 EVENT_MAP(IA2_EVENT_TEXT_INSERTED) | |
287 EVENT_MAP(IA2_EVENT_TEXT_REMOVED) | |
288 EVENT_MAP(IA2_EVENT_TEXT_UPDATED) | |
289 EVENT_MAP(IA2_EVENT_TEXT_SELECTION_CHANGED) | |
290 EVENT_MAP(IA2_EVENT_VISIBLE_DATA_CHANGED) | |
220 } | 291 } |
221 | 292 |
222 } // namespace. | 293 } // namespace. |
223 | 294 |
224 base::string16 IAccessibleRoleToString(int32 ia_role) { | 295 base::string16 IAccessibleRoleToString(int32 ia_role) { |
225 return AccessibilityRoleStateMap::GetInstance()->ia_role_string_map[ia_role]; | 296 return AccessibilityRoleStateMap::GetInstance()->ia_role_string_map[ia_role]; |
226 } | 297 } |
227 | 298 |
228 base::string16 IAccessible2RoleToString(int32 ia_role) { | 299 base::string16 IAccessible2RoleToString(int32 ia_role) { |
229 return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role]; | 300 return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role]; |
(...skipping 26 matching lines...) Expand all Loading... | |
256 result->push_back(it->second); | 327 result->push_back(it->second); |
257 } | 328 } |
258 } | 329 } |
259 | 330 |
260 base::string16 IAccessible2StateToString(int32 ia2_state) { | 331 base::string16 IAccessible2StateToString(int32 ia2_state) { |
261 std::vector<base::string16> strings; | 332 std::vector<base::string16> strings; |
262 IAccessible2StateToStringVector(ia2_state, &strings); | 333 IAccessible2StateToStringVector(ia2_state, &strings); |
263 return JoinString(strings, ','); | 334 return JoinString(strings, ','); |
264 } | 335 } |
265 | 336 |
337 base::string16 AccessibilityEventToString(int32 event_id) { | |
338 return AccessibilityRoleStateMap::GetInstance()->event_string_map[event_id]; | |
David Tseng
2014/12/16 16:53:05
AccessibilityRoleStateMap no longer seems like an
dmazzoni
2014/12/16 23:26:32
Changed to AccessibilityEnumMap.
| |
339 } | |
340 | |
266 } // namespace content | 341 } // namespace content |
OLD | NEW |