Chromium Code Reviews| Index: Source/modules/accessibility/AXObject.cpp |
| diff --git a/Source/modules/accessibility/AXObject.cpp b/Source/modules/accessibility/AXObject.cpp |
| index d4d99c2affaec06beb3b5ba635a6332c91b0ebb0..18f300d3f0c7189f74529014f9f4121b926308c5 100644 |
| --- a/Source/modules/accessibility/AXObject.cpp |
| +++ b/Source/modules/accessibility/AXObject.cpp |
| @@ -49,6 +49,7 @@ namespace blink { |
| using namespace HTMLNames; |
| +namespace { |
| typedef HashMap<String, AccessibilityRole, CaseFoldingHash> ARIARoleMap; |
| struct RoleEntry { |
| @@ -56,9 +57,9 @@ struct RoleEntry { |
| AccessibilityRole webcoreRole; |
| }; |
| -static ARIARoleMap* createARIARoleMap() |
| +void fillRoles(Vector<RoleEntry>* rolesVector) |
| { |
| - const RoleEntry roles[] = { |
| + RoleEntry roles[] = { |
| { "alert", AlertRole }, |
| { "alertdialog", AlertDialogRole }, |
| { "application", ApplicationRole }, |
| @@ -123,13 +124,40 @@ static ARIARoleMap* createARIARoleMap() |
| { "treegrid", TreeGridRole }, |
| { "treeitem", TreeItemRole } |
| }; |
| + size_t numRoles = WTF_ARRAY_LENGTH(roles); |
| + rolesVector->resize(numRoles); |
| + for (size_t i = 0; i < numRoles; ++i) |
| + rolesVector->at(i) = roles[i]; |
| +} |
| + |
| +static ARIARoleMap* createARIARoleMap() |
| +{ |
| ARIARoleMap* roleMap = new ARIARoleMap; |
| - for (size_t i = 0; i < WTF_ARRAY_LENGTH(roles); ++i) |
| + Vector<RoleEntry> roles; |
| + fillRoles(&roles); |
| + for (size_t i = 0; i < roles.size(); ++i) |
| roleMap->set(roles[i].ariaRole, roles[i].webcoreRole); |
| return roleMap; |
| } |
| +static void fillRoleNameVector(Vector<AtomicString>* roleNameVector) |
| +{ |
| + roleNameVector->resize(NumRoles); |
| + for (int i = 0; i < NumRoles; i++) { |
| + roleNameVector->at(i) = AtomicString(); |
| + } |
| + |
| + Vector<RoleEntry> roles; |
| + |
| + fillRoles(&roles); |
| + for (size_t i = 0; i < roles.size(); ++i) { |
| + roleNameVector->insert(roles[i].webcoreRole, AtomicString(roles[i].ariaRole)); |
| + } |
| +} |
| + |
| +} // namespace |
| + |
| AXObject::AXObject(AXObjectCacheImpl* axObjectCache) |
| : m_id(0) |
| , m_haveChildren(false) |
| @@ -954,4 +982,13 @@ AccessibilityRole AXObject::buttonRoleType() const |
| return ButtonRole; |
| } |
| +const AtomicString& AXObject::roleName(const AccessibilityRole role) |
| +{ |
| + static Vector<AtomicString> roleNameVector; |
| + if (roleNameVector.size() == 0) |
| + fillRoleNameVector(&roleNameVector); |
| + |
| + return roleNameVector[role]; |
|
dmazzoni
2014/12/12 00:41:48
Add a check/assert that this is in-bounds
aboxhall
2014/12/13 01:38:36
Done.
|
| +} |
| + |
| } // namespace blink |