summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoraboxhall@chromium.org <aboxhall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-27 05:23:59 +0000
committeraboxhall@chromium.org <aboxhall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-27 05:23:59 +0000
commit502606e9969c25ed691a36da34ad7bd1814b075e (patch)
treee53997360f9d49775e8307c38212727354d3f641 /chrome
parentd0870532614ec8fa68782a55a013d3da41a9175b (diff)
downloadchromium_src-502606e9969c25ed691a36da34ad7bd1814b075e.zip
chromium_src-502606e9969c25ed691a36da34ad7bd1814b075e.tar.gz
chromium_src-502606e9969c25ed691a36da34ad7bd1814b075e.tar.bz2
First pass attempting to use html_attributes to get the ARIA role information in BrowserAccessibilityCocoa. Feedback welcome.
Review URL: http://codereview.chromium.org/6880230 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86973 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.mm53
1 files changed, 47 insertions, 6 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_cocoa.mm b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
index e19c6b3..76bdd64 100644
--- a/chrome/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
@@ -8,6 +8,7 @@
#include "base/string16.h"
#include "base/sys_string_conversions.h"
+#include "base/utf_string_conversions.h"
#include "chrome/browser/renderer_host/render_widget_host_view_mac.h"
#include "grit/webkit_strings.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
@@ -35,33 +36,55 @@ struct RoleEntry {
static const RoleEntry roles[] = {
{ WebAccessibility::ROLE_NONE, NSAccessibilityUnknownRole },
+ { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole },
- { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
{ WebAccessibility::ROLE_CELL, @"AXCell" },
+ { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
{ WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole },
{ WebAccessibility::ROLE_COLUMN_HEADER, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_GRID, NSAccessibilityGridRole },
{ WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_HEADING, @"AXHeading" },
{ WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole },
{ WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole },
+ { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole },
+ // TODO: role: main should report SubRole: AXLandmarkMain
+ { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole },
{ WebAccessibility::ROLE_LIST, NSAccessibilityListRole },
+ { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole },
{ WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole },
{ WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
+ { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_ROW, NSAccessibilityRowRole },
{ WebAccessibility::ROLE_ROW_HEADER, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole },
{ WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
{ WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
+ { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
{ WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
- { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
{ WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
- { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
+ { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
+ { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
+ { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
};
// GetState checks the bitmask used in webaccessibility.h to check
@@ -149,11 +172,11 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
// Returns a string indicating the role of this object.
- (NSString*)role {
- WebAccessibility::Role value =
+ WebAccessibility::Role browserAccessibilityRole =
static_cast<WebAccessibility::Role>( browserAccessibility_->role());
// Roles that we only determine at runtime.
- if (value == WebAccessibility::ROLE_TEXT_FIELD &&
+ if (browserAccessibilityRole == WebAccessibility::ROLE_TEXT_FIELD &&
GetState(browserAccessibility_, WebAccessibility::STATE_PROTECTED)) {
return @"AXSecureTextField";
}
@@ -161,7 +184,7 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
NSString* role = NSAccessibilityUnknownRole;
const size_t numRoles = sizeof(roles) / sizeof(roles[0]);
for (size_t i = 0; i < numRoles; ++i) {
- if (roles[i].value == value) {
+ if (roles[i].value == browserAccessibilityRole) {
role = roles[i].string;
break;
}
@@ -182,6 +205,24 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
if ([[self role] isEqualToString:@"AXHeading"])
return l10n_util::GetNSString(IDS_AX_ROLE_HEADING);
+ if ([[self role] isEqualToString:NSAccessibilityGroupRole]) {
+ const std::vector<std::pair<string16, string16> >& htmlAttributes =
+ browserAccessibility_->html_attributes();
+ WebAccessibility::Role browserAccessibilityRole =
+ static_cast<WebAccessibility::Role>(browserAccessibility_->role());
+
+ if (browserAccessibilityRole != WebAccessibility::ROLE_GROUP &&
+ browserAccessibilityRole != WebAccessibility::ROLE_LIST_ITEM) {
+ for (size_t i = 0; i < htmlAttributes.size(); ++i) {
+ const std::pair<string16, string16>& htmlAttribute = htmlAttributes[i];
+ if (htmlAttribute.first == ASCIIToUTF16("role")) {
+ // This is not localized.
+ return base::SysUTF16ToNSString(htmlAttribute.second);
+ }
+ }
+ }
+ }
+
return NSAccessibilityRoleDescription([self role], nil);
}