diff options
author | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-07 17:59:03 +0000 |
---|---|---|
committer | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-07 17:59:03 +0000 |
commit | 917179de6825d247849270bd56bd1b715395a678 (patch) | |
tree | 834e556710277a2074f46086515a433a1e1837ab /chrome/browser/accessibility | |
parent | 56ae2e4710ba37c7c73a8d624d7b9ce9c9559f8a (diff) | |
download | chromium_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.h | 2 | ||||
-rw-r--r-- | chrome/browser/accessibility/browser_accessibility_cocoa.mm | 36 |
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; } |