Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Unified Diff: Source/modules/accessibility/AXObject.cpp

Issue 742353004: Implement computedRole and computedName (behind a flag) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Set upstream correctly Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698