diff options
author | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-15 21:12:10 +0000 |
---|---|---|
committer | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-15 21:12:10 +0000 |
commit | f49c90cce21af0cab3c32c95863fa93a930d442d (patch) | |
tree | 11b70576b2da8fcf014655ec9219ab343d705407 /chrome/browser/accessibility | |
parent | 3d2beafb0dfaeba3dad95dbe1dde6d9582980c78 (diff) | |
download | chromium_src-f49c90cce21af0cab3c32c95863fa93a930d442d.zip chromium_src-f49c90cce21af0cab3c32c95863fa93a930d442d.tar.gz chromium_src-f49c90cce21af0cab3c32c95863fa93a930d442d.tar.bz2 |
Set appropriate roles in bookmarks WebUI page.
This patch does not address the focus/selection problems that will require a
This patch also shores up some functionality on Mac to expose the correct in
BUG=86064
TEST=manual.
Review URL: http://codereview.chromium.org/7149025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89248 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r-- | chrome/browser/accessibility/browser_accessibility_cocoa.h | 3 | ||||
-rw-r--r-- | chrome/browser/accessibility/browser_accessibility_cocoa.mm | 66 |
2 files changed, 56 insertions, 13 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_cocoa.h b/chrome/browser/accessibility/browser_accessibility_cocoa.h index 5a8e326..641dc52 100644 --- a/chrome/browser/accessibility/browser_accessibility_cocoa.h +++ b/chrome/browser/accessibility/browser_accessibility_cocoa.h @@ -52,6 +52,9 @@ @property(nonatomic, readonly) NSString* role; // The size of this object. @property(nonatomic, readonly) NSSize size; +// A string indicating the subrole of this object as far as accessibility +// is concerned. +@property(nonatomic, readonly) NSString* subrole; @end diff --git a/chrome/browser/accessibility/browser_accessibility_cocoa.mm b/chrome/browser/accessibility/browser_accessibility_cocoa.mm index 0ac916e..85544a6 100644 --- a/chrome/browser/accessibility/browser_accessibility_cocoa.mm +++ b/chrome/browser/accessibility/browser_accessibility_cocoa.mm @@ -6,6 +6,8 @@ #import "chrome/browser/accessibility/browser_accessibility_cocoa.h" +#include <map> + #include "base/string16.h" #include "base/sys_string_conversions.h" #include "base/utf_string_conversions.h" @@ -29,12 +31,12 @@ NSString* NSStringForWebAccessibilityAttribute( return returnValue; } -struct RoleEntry { - WebAccessibility::Role value; - NSString* string; +struct MapEntry { + WebAccessibility::Role webKitValue; + NSString* nativeValue; }; -static const RoleEntry roles[] = { +static const MapEntry roles[] = { { WebAccessibility::ROLE_NONE, NSAccessibilityUnknownRole }, { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole }, { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole }, @@ -62,6 +64,7 @@ static const RoleEntry roles[] = { { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole }, { WebAccessibility::ROLE_LIST, NSAccessibilityListRole }, { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole }, + { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole }, { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole }, { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole }, { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole }, @@ -86,10 +89,19 @@ static const RoleEntry roles[] = { { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole }, { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole }, { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole }, + { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole }, + { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole }, { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole }, { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" }, }; +static const MapEntry subroles[] = { + { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole } +}; + +std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeRole; +std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeSubrole; + // GetState checks the bitmask used in webaccessibility.h to check // if the given state was set on the accessibility object. bool GetState(BrowserAccessibility* accessibility, int state) { @@ -100,6 +112,19 @@ bool GetState(BrowserAccessibility* accessibility, int state) { @implementation BrowserAccessibilityCocoa ++ (void)initialize { + const size_t numRoles = sizeof(roles) / sizeof(roles[0]); + for (size_t i = 0; i < numRoles; ++i) { + webAccessibilityToNativeRole[roles[i].webKitValue] = roles[i].nativeValue; + } + + const size_t numSubroles = sizeof(subroles) / sizeof(subroles[0]); + for (size_t i = 0; i < numSubroles; ++i) { + webAccessibilityToNativeSubrole[subroles[i].webKitValue] = + subroles[i].nativeValue; + } +} + - (id)initWithObject:(BrowserAccessibility*)accessibility delegate:(id<BrowserAccessibilityDelegateCocoa>)delegate { if ((self = [super init])) { @@ -184,16 +209,13 @@ bool GetState(BrowserAccessibility* accessibility, int state) { return @"AXSecureTextField"; } - NSString* role = NSAccessibilityUnknownRole; - const size_t numRoles = sizeof(roles) / sizeof(roles[0]); - for (size_t i = 0; i < numRoles; ++i) { - if (roles[i].value == browserAccessibilityRole) { - role = roles[i].string; - break; - } - } + std::map<WebAccessibility::Role, NSString*>::iterator it = + webAccessibilityToNativeRole.find(browserAccessibilityRole); - return role; + if (it != webAccessibilityToNativeRole.end()) + return it->second; + else + return NSAccessibilityUnknownRole; } // Returns a string indicating the role description of this object. @@ -238,6 +260,20 @@ bool GetState(BrowserAccessibility* accessibility, int state) { browserAccessibility_->location().height()); } +// Returns a subrole based upon the role. +- (NSString*) subrole { + WebAccessibility::Role browserAccessibilityRole = + static_cast<WebAccessibility::Role>( browserAccessibility_->role()); + + std::map<WebAccessibility::Role, NSString*>::iterator it = + webAccessibilityToNativeSubrole.find(browserAccessibilityRole); + + if (it != webAccessibilityToNativeSubrole.end()) + return it->second; + else + return nil; +} + // Returns all tabs in this subtree. - (NSArray*)tabs { NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; @@ -271,6 +307,9 @@ bool GetState(BrowserAccessibility* accessibility, int state) { if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) { return [NSValue valueWithSize:[self size]]; } + if ([attribute isEqualToString:NSAccessibilitySubroleAttribute]) { + return [self subrole]; + } if ([attribute isEqualToString:NSAccessibilityTopLevelUIElementAttribute] || [attribute isEqualToString:NSAccessibilityWindowAttribute]) { return [delegate_ window]; @@ -513,6 +552,7 @@ bool GetState(BrowserAccessibility* accessibility, int state) { NSAccessibilityRoleAttribute, NSAccessibilityRoleDescriptionAttribute, NSAccessibilitySizeAttribute, + NSAccessibilitySubroleAttribute, NSAccessibilityTitleAttribute, NSAccessibilityTopLevelUIElementAttribute, NSAccessibilityValueAttribute, |