summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
diff options
context:
space:
mode:
authordtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-07 17:59:03 +0000
committerdtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-07 17:59:03 +0000
commit917179de6825d247849270bd56bd1b715395a678 (patch)
tree834e556710277a2074f46086515a433a1e1837ab /chrome/browser/accessibility
parent56ae2e4710ba37c7c73a8d624d7b9ce9c9559f8a (diff)
downloadchromium_src-917179de6825d247849270bd56bd1b715395a678.zip
chromium_src-917179de6825d247849270bd56bd1b715395a678.tar.gz
chromium_src-917179de6825d247849270bd56bd1b715395a678.tar.bz2
Reland 7058037
TBR=dtseng BUG=none TEST=none git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88147 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.h2
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.mm36
2 files changed, 34 insertions, 4 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_cocoa.h b/chrome/browser/accessibility/browser_accessibility_cocoa.h
index 77f8438..5a8e326 100644
--- a/chrome/browser/accessibility/browser_accessibility_cocoa.h
+++ b/chrome/browser/accessibility/browser_accessibility_cocoa.h
@@ -34,6 +34,8 @@
// Invalidate children for a non-ignored ancestor (including self).
- (void)childrenChanged;
+// The tabs owned by a tablist.
+- (NSArray*)tabs;
// Children is an array of BrowserAccessibility objects, representing
// the accessibility children of this object.
diff --git a/chrome/browser/accessibility/browser_accessibility_cocoa.mm b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
index 76bdd64..d737802 100644
--- a/chrome/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
@@ -76,6 +76,9 @@ static const RoleEntry roles[] = {
{ WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
{ WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
{ WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
+ { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole },
+ { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
+ { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
{ WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
{ WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
@@ -205,18 +208,20 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
if ([[self role] isEqualToString:@"AXHeading"])
return l10n_util::GetNSString(IDS_AX_ROLE_HEADING);
- if ([[self role] isEqualToString:NSAccessibilityGroupRole]) {
+ if ([[self role] isEqualToString:NSAccessibilityGroupRole] ||
+ [[self role] isEqualToString:NSAccessibilityRadioButtonRole]) {
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) {
+ if ((browserAccessibilityRole != WebAccessibility::ROLE_GROUP &&
+ browserAccessibilityRole != WebAccessibility::ROLE_LIST_ITEM) ||
+ browserAccessibilityRole == WebAccessibility::ROLE_TAB) {
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.
+ // TODO(dtseng): This is not localized; see crbug/84814.
return base::SysUTF16ToNSString(htmlAttribute.second);
}
}
@@ -232,6 +237,22 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
browserAccessibility_->location().height());
}
+// Returns all tabs in this subtree.
+- (NSArray*)tabs {
+ NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease];
+
+ if (browserAccessibility_->role() == WebAccessibility::ROLE_TAB)
+ [tabSubtree addObject:self];
+
+ for (uint i=0; i < [[self children] count]; ++i) {
+ NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs];
+ if ([tabChildren count] > 0)
+ [tabSubtree addObjectsFromArray:tabChildren];
+ }
+
+ return tabSubtree;
+}
+
// Returns the accessibility value for the given attribute. If the value isn't
// supported this will return nil.
- (id)accessibilityAttributeValue:(NSString*)attribute {
@@ -266,6 +287,9 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
return browserAccessibility_->manager()->GetParentView();
}
}
+ if ([attribute isEqualToString:NSAccessibilityTabsAttribute]) {
+ return [self tabs];
+ }
if ([attribute isEqualToString:NSAccessibilityTitleAttribute]) {
return base::SysUTF16ToNSString(browserAccessibility_->name());
}
@@ -522,6 +546,10 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
NSAccessibilityVisibleCharacterRangeAttribute,
nil]];
}
+
+ if ([self role] == NSAccessibilityTabGroupRole)
+ [ret addObject:NSAccessibilityTabsAttribute];
+
return ret;
}