summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
diff options
context:
space:
mode:
authordtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-15 21:12:10 +0000
committerdtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-15 21:12:10 +0000
commitf49c90cce21af0cab3c32c95863fa93a930d442d (patch)
tree11b70576b2da8fcf014655ec9219ab343d705407 /chrome/browser/accessibility
parent3d2beafb0dfaeba3dad95dbe1dde6d9582980c78 (diff)
downloadchromium_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.h3
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.mm66
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,