| 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 AccessibilityEnumMap { | 19 class AccessibilityRoleStateMap { |
| 20 public: | 20 public: |
| 21 static AccessibilityEnumMap* 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; | |
| 28 | 27 |
| 29 private: | 28 private: |
| 30 AccessibilityEnumMap(); | 29 AccessibilityRoleStateMap(); |
| 31 virtual ~AccessibilityEnumMap() {} | 30 virtual ~AccessibilityRoleStateMap() {} |
| 32 | 31 |
| 33 friend struct DefaultSingletonTraits<AccessibilityEnumMap>; | 32 friend struct DefaultSingletonTraits<AccessibilityRoleStateMap>; |
| 34 | 33 |
| 35 DISALLOW_COPY_AND_ASSIGN(AccessibilityEnumMap); | 34 DISALLOW_COPY_AND_ASSIGN(AccessibilityRoleStateMap); |
| 36 }; | 35 }; |
| 37 | 36 |
| 38 // static | 37 // static |
| 39 AccessibilityEnumMap* AccessibilityEnumMap::GetInstance() { | 38 AccessibilityRoleStateMap* AccessibilityRoleStateMap::GetInstance() { |
| 40 return Singleton<AccessibilityEnumMap, | 39 return Singleton<AccessibilityRoleStateMap, |
| 41 LeakySingletonTraits<AccessibilityEnumMap> >::get(); | 40 LeakySingletonTraits<AccessibilityRoleStateMap> >::get(); |
| 42 } | 41 } |
| 43 | 42 |
| 44 AccessibilityEnumMap::AccessibilityEnumMap() { | 43 AccessibilityRoleStateMap::AccessibilityRoleStateMap() { |
| 45 // Convenience macros for generating readable strings. | 44 // Convenience macros for generating readable strings. |
| 46 #define IA_ROLE_MAP(x) ia_role_string_map[x] = L###x; \ | 45 #define IA_ROLE_MAP(x) ia_role_string_map[x] = L###x; \ |
| 47 ia2_role_string_map[x] = L###x; | 46 ia2_role_string_map[x] = L###x; |
| 48 #define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L###x; | 47 #define IA2_ROLE_MAP(x) ia2_role_string_map[x] = L###x; |
| 49 #define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L###x; | 48 #define IA_STATE_MAP(x) ia_state_string_map[STATE_SYSTEM_##x] = L###x; |
| 50 #define IA2_STATE_MAP(x) ia2_state_string_map[x] = L###x; | 49 #define IA2_STATE_MAP(x) ia2_state_string_map[x] = L###x; |
| 51 #define EVENT_MAP(x) event_string_map[x] = L###x; | |
| 52 | 50 |
| 53 // MSAA / IAccessible roles. Each one of these is also a valid | 51 // MSAA / IAccessible roles. Each one of these is also a valid |
| 54 // IAccessible2 role, the IA_ROLE_MAP macro adds it to both. | 52 // IAccessible2 role, the IA_ROLE_MAP macro adds it to both. |
| 55 IA_ROLE_MAP(ROLE_SYSTEM_ALERT) | 53 IA_ROLE_MAP(ROLE_SYSTEM_ALERT) |
| 56 IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION) | 54 IA_ROLE_MAP(ROLE_SYSTEM_ANIMATION) |
| 57 IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION) | 55 IA_ROLE_MAP(ROLE_SYSTEM_APPLICATION) |
| 58 IA_ROLE_MAP(ROLE_SYSTEM_BORDER) | 56 IA_ROLE_MAP(ROLE_SYSTEM_BORDER) |
| 59 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) | 57 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWN) |
| 60 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) | 58 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONDROPDOWNGRID) |
| 61 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) | 59 IA_ROLE_MAP(ROLE_SYSTEM_BUTTONMENU) |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 IA2_STATE_MAP(IA2_STATE_SELECTABLE_TEXT) | 210 IA2_STATE_MAP(IA2_STATE_SELECTABLE_TEXT) |
| 213 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) | 211 IA2_STATE_MAP(IA2_STATE_SINGLE_LINE) |
| 214 IA2_STATE_MAP(IA2_STATE_STALE) | 212 IA2_STATE_MAP(IA2_STATE_STALE) |
| 215 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) | 213 IA2_STATE_MAP(IA2_STATE_SUPPORTS_AUTOCOMPLETION) |
| 216 IA2_STATE_MAP(IA2_STATE_TRANSIENT) | 214 IA2_STATE_MAP(IA2_STATE_TRANSIENT) |
| 217 IA2_STATE_MAP(IA2_STATE_VERTICAL) | 215 IA2_STATE_MAP(IA2_STATE_VERTICAL) |
| 218 | 216 |
| 219 // 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, |
| 220 // or would vary based on window size. | 218 // or would vary based on window size. |
| 221 // IA2_STATE_MAP(IA2_STATE_OPAQUE) // Untested. | 219 // 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) | |
| 291 } | 220 } |
| 292 | 221 |
| 293 } // namespace. | 222 } // namespace. |
| 294 | 223 |
| 295 base::string16 IAccessibleRoleToString(int32 ia_role) { | 224 base::string16 IAccessibleRoleToString(int32 ia_role) { |
| 296 return AccessibilityEnumMap::GetInstance()->ia_role_string_map[ia_role]; | 225 return AccessibilityRoleStateMap::GetInstance()->ia_role_string_map[ia_role]; |
| 297 } | 226 } |
| 298 | 227 |
| 299 base::string16 IAccessible2RoleToString(int32 ia_role) { | 228 base::string16 IAccessible2RoleToString(int32 ia_role) { |
| 300 return AccessibilityEnumMap::GetInstance()->ia2_role_string_map[ia_role]; | 229 return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role]; |
| 301 } | 230 } |
| 302 | 231 |
| 303 void IAccessibleStateToStringVector(int32 ia_state, | 232 void IAccessibleStateToStringVector(int32 ia_state, |
| 304 std::vector<base::string16>* result) { | 233 std::vector<base::string16>* result) { |
| 305 const std::map<int32, base::string16>& state_string_map = | 234 const std::map<int32, base::string16>& state_string_map = |
| 306 AccessibilityEnumMap::GetInstance()->ia_state_string_map; | 235 AccessibilityRoleStateMap::GetInstance()->ia_state_string_map; |
| 307 std::map<int32, base::string16>::const_iterator it; | 236 std::map<int32, base::string16>::const_iterator it; |
| 308 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { | 237 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |
| 309 if (it->first & ia_state) | 238 if (it->first & ia_state) |
| 310 result->push_back(it->second); | 239 result->push_back(it->second); |
| 311 } | 240 } |
| 312 } | 241 } |
| 313 | 242 |
| 314 base::string16 IAccessibleStateToString(int32 ia_state) { | 243 base::string16 IAccessibleStateToString(int32 ia_state) { |
| 315 std::vector<base::string16> strings; | 244 std::vector<base::string16> strings; |
| 316 IAccessibleStateToStringVector(ia_state, &strings); | 245 IAccessibleStateToStringVector(ia_state, &strings); |
| 317 return JoinString(strings, ','); | 246 return JoinString(strings, ','); |
| 318 } | 247 } |
| 319 | 248 |
| 320 void IAccessible2StateToStringVector(int32 ia2_state, | 249 void IAccessible2StateToStringVector(int32 ia2_state, |
| 321 std::vector<base::string16>* result) { | 250 std::vector<base::string16>* result) { |
| 322 const std::map<int32, base::string16>& state_string_map = | 251 const std::map<int32, base::string16>& state_string_map = |
| 323 AccessibilityEnumMap::GetInstance()->ia2_state_string_map; | 252 AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map; |
| 324 std::map<int32, base::string16>::const_iterator it; | 253 std::map<int32, base::string16>::const_iterator it; |
| 325 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { | 254 for (it = state_string_map.begin(); it != state_string_map.end(); ++it) { |
| 326 if (it->first & ia2_state) | 255 if (it->first & ia2_state) |
| 327 result->push_back(it->second); | 256 result->push_back(it->second); |
| 328 } | 257 } |
| 329 } | 258 } |
| 330 | 259 |
| 331 base::string16 IAccessible2StateToString(int32 ia2_state) { | 260 base::string16 IAccessible2StateToString(int32 ia2_state) { |
| 332 std::vector<base::string16> strings; | 261 std::vector<base::string16> strings; |
| 333 IAccessible2StateToStringVector(ia2_state, &strings); | 262 IAccessible2StateToStringVector(ia2_state, &strings); |
| 334 return JoinString(strings, ','); | 263 return JoinString(strings, ','); |
| 335 } | 264 } |
| 336 | 265 |
| 337 base::string16 AccessibilityEventToString(int32 event_id) { | |
| 338 return AccessibilityEnumMap::GetInstance()->event_string_map[event_id]; | |
| 339 } | |
| 340 | |
| 341 } // namespace content | 266 } // namespace content |
| OLD | NEW |