Index: chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
index 86ac8ce7399bb5bec11f6f9fea33447cbffd92d8..2d546af69bd18affe5a033e632a363dd4e70ce96 100644 |
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
@@ -227,25 +227,46 @@ |
return NO; |
} |
+// Returns AX children (tabs and new tab button), sorted from left to right. |
+- (NSArray*)accessibilityChildren { |
+ NSArray* children = |
+ [super accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; |
+ return [children sortedArrayUsingComparator: |
+ ^NSComparisonResult(id first, id second) { |
+ NSPoint firstPosition = |
+ [[first accessibilityAttributeValue: |
+ NSAccessibilityPositionAttribute] pointValue]; |
+ NSPoint secondPosition = |
+ [[second accessibilityAttributeValue: |
+ NSAccessibilityPositionAttribute] pointValue]; |
+ if (firstPosition.x < secondPosition.x) |
+ return NSOrderedAscending; |
+ else if (firstPosition.x > secondPosition.x) |
+ return NSOrderedDescending; |
+ else |
+ return NSOrderedSame; |
+ }]; |
+} |
+ |
- (id)accessibilityAttributeValue:(NSString*)attribute { |
- if ([attribute isEqual:NSAccessibilityRoleAttribute]) |
+ if ([attribute isEqual:NSAccessibilityRoleAttribute]) { |
return NSAccessibilityTabGroupRole; |
- if ([attribute isEqual:NSAccessibilityTabsAttribute]) { |
- NSMutableArray* tabs = [[[NSMutableArray alloc] init] autorelease]; |
- NSArray* children = |
- [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; |
- for (id child in children) { |
- if ([[child accessibilityAttributeValue:NSAccessibilityRoleAttribute] |
- isEqual:NSAccessibilityRadioButtonRole]) { |
- [tabs addObject:child]; |
- } |
- } |
- return tabs; |
- } |
- if ([attribute isEqual:NSAccessibilityContentsAttribute]) |
- return [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; |
- if ([attribute isEqual:NSAccessibilityValueAttribute]) |
+ } else if ([attribute isEqual:NSAccessibilityChildrenAttribute]) { |
+ return [self accessibilityChildren]; |
+ } else if ([attribute isEqual:NSAccessibilityTabsAttribute]) { |
+ NSArray* children = [self accessibilityChildren]; |
+ NSIndexSet* indexes = [children indexesOfObjectsPassingTest: |
+ ^BOOL(id child, NSUInteger idx, BOOL* stop) { |
+ NSString* role = [child |
+ accessibilityAttributeValue:NSAccessibilityRoleAttribute]; |
+ return [role isEqualToString:NSAccessibilityRadioButtonRole]; |
+ }]; |
+ return [children objectsAtIndexes:indexes]; |
+ } else if ([attribute isEqual:NSAccessibilityContentsAttribute]) { |
+ return [self accessibilityChildren]; |
+ } else if ([attribute isEqual:NSAccessibilityValueAttribute]) { |
return [controller_ activeTabView]; |
+ } |
return [super accessibilityAttributeValue:attribute]; |
} |