Chromium Code Reviews| 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 |