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 |