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 AccessibilityEnumMap { |
20 public: | 20 public: |
21 static AccessibilityRoleStateMap* GetInstance(); | 21 static AccessibilityEnumMap* 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 AccessibilityEnumMap(); |
30 virtual ~AccessibilityRoleStateMap() {} | 31 virtual ~AccessibilityEnumMap() {} |
31 | 32 |
32 friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>; | 33 friend struct DefaultSingletonTraits<AccessibilityEnumMap>; |
33 | 34 |
34 DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap); | 35 DISALLOW_COPY_AND_ASSIGN(AccessibilityEnumMap); |
35 }; | 36 }; |
36 | 37 |
37 // static | 38 // static |
38 AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() { | 39 AccessibilityEnumMap* AccessibilityEnumMap::GetInstance() { |
39 return Singleton<AccessibilityRoleStateMap, | 40 return Singleton<AccessibilityEnumMap, |
40 LeakySingletonTraits<AccessibilityRoleStateMap> >::get(); | 41 LeakySingletonTraits<AccessibilityEnumMap> >::get(); |
41 } | 42 } |
42 | 43 |
43 AccessibilityRoleStateMap::AccessibilityRoleStateMap() { | 44 AccessibilityEnumMap::AccessibilityEnumMap() { |
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_SELECTABLE_TEXT) | 212 IA2_STATE_MAP(IA2_STATE_SELECTABLE_TEXT) |
211 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) | 213 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) |
212 IA2_STATE_MAP(IA2_STATE_STALE) | 214 IA2_STATE_MAP(IA2_STATE_STALE) |
213 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) | 215 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) |
214 IA2_STATE_MAP(IA2_STATE_TRANSIENT) | 216 IA2_STATE_MAP(IA2_STATE_TRANSIENT) |
215 IA2_STATE_MAP(IA2_STATE_VERTICAL) | 217 IA2_STATE_MAP(IA2_STATE_VERTICAL) |
216 | 218 |
217 // Untested states include those that would be repeated on nearly every node, | 219 // Untested states include those that would be repeated on nearly every node, |
218 // or would vary based on window size. | 220 // or would vary based on window size. |
219 // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested. | 221 // IA2_STATE_MAP(IA2_STATE_OPAQUE) // 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 AccessibilityEnumMap::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 AccessibilityEnumMap::GetInstance()->ia2_role_string_map[ia_role]; |
230 } | 301 } |
231 | 302 |
232 void IAccessibleStateToStringVector(int32 ia_state, | 303 void IAccessibleStateToStringVector(int32 ia_state, |
233 std::vector<base::string16>* result) { | 304 std::vector<base::string16>* result) { |
234 const std::map<int32, base::string16>& state_string_map = | 305 const std::map<int32, base::string16>& state_string_map = |
235 AccessibilityRoleStateMap::GetInstance()->ia_state_string_map; | 306 AccessibilityEnumMap::GetInstance()->ia_state_string_map; |
236 std::map<int32, base::string16>::const_iterator it; | 307 std::map<int32, base::string16>::const_iterator it; |
237 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { | 308 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |
238 if (it->first & ia_state) | 309 if (it->first & ia_state) |
239 result->push_back(it->second); | 310 result->push_back(it->second); |
240 } | 311 } |
241 } | 312 } |
242 | 313 |
243 base::string16 IAccessibleStateToString(int32 ia_state) { | 314 base::string16 IAccessibleStateToString(int32 ia_state) { |
244 std::vector<base::string16> strings; | 315 std::vector<base::string16> strings; |
245 IAccessibleStateToStringVector(ia_state, &strings); | 316 IAccessibleStateToStringVector(ia_state, &strings); |
246 return JoinString(strings, ','); | 317 return JoinString(strings, ','); |
247 } | 318 } |
248 | 319 |
249 void IAccessible2StateToStringVector(int32 ia2_state, | 320 void IAccessible2StateToStringVector(int32 ia2_state, |
250 std::vector<base::string16>* result) { | 321 std::vector<base::string16>* result) { |
251 const std::map<int32, base::string16>& state_string_map = | 322 const std::map<int32, base::string16>& state_string_map = |
252 AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map; | 323 AccessibilityEnumMap::GetInstance()->ia2_state_string_map; |
253 std::map<int32, base::string16>::const_iterator it; | 324 std::map<int32, base::string16>::const_iterator it; |
254 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { | 325 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |
255 if (it->first & ia2_state) | 326 if (it->first & ia2_state) |
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 AccessibilityEnumMap::GetInstance()->event_string_map[event_id]; |
| 339 } |
| 340 |
266 } // namespace content | 341 } // namespace content |
OLD | NEW |