diff options
author | aboxhall@chromium.org <aboxhall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-27 05:23:59 +0000 |
---|---|---|
committer | aboxhall@chromium.org <aboxhall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-27 05:23:59 +0000 |
commit | 502606e9969c25ed691a36da34ad7bd1814b075e (patch) | |
tree | e53997360f9d49775e8307c38212727354d3f641 /chrome | |
parent | d0870532614ec8fa68782a55a013d3da41a9175b (diff) | |
download | chromium_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.mm | 53 |
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); } |