Index: content/renderer/accessibility/accessibility_node_serializer.cc |
=================================================================== |
--- content/renderer/accessibility/accessibility_node_serializer.cc (revision 243239) |
+++ content/renderer/accessibility/accessibility_node_serializer.cc (working copy) |
@@ -51,6 +51,30 @@ |
return LowerCaseEqualsASCII(html_value, "true"); |
} |
+std::string GetEquivalentAriaRoleString(const ui::AXRole role) { |
+ switch (role) { |
+ case ui::AX_ROLE_ARTICLE: |
+ return "article"; |
+ case ui::AX_ROLE_BANNER: |
+ return "banner"; |
+ case ui::AX_ROLE_COMPLEMENTARY: |
+ return "complementary"; |
+ case ui::AX_ROLE_CONTENT_INFO: |
+ case ui::AX_ROLE_FOOTER: |
+ return "contentinfo"; |
+ case ui::AX_ROLE_MAIN: |
+ return "main"; |
+ case ui::AX_ROLE_NAVIGATION: |
+ return "navigation"; |
+ case ui::AX_ROLE_REGION: |
+ return "region"; |
+ default: |
+ break; |
+ } |
+ |
+ return std::string(); |
+} |
+ |
} // Anonymous namespace |
void SerializeAccessibilityNode( |
@@ -202,6 +226,10 @@ |
if (element.hasAttribute("role")) { |
dst->AddStringAttribute(ui::AX_ATTR_ROLE, |
UTF16ToUTF8(element.getAttribute("role"))); |
+ } else { |
+ std::string role = GetEquivalentAriaRoleString(dst->role); |
+ if (!role.empty()) |
+ dst->AddStringAttribute(ui::AX_ATTR_ROLE, role); |
} |
// Live region attributes |