| Index: content/browser/accessibility/browser_accessibility_cocoa.mm
|
| diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| index 66b7826286b40da35b41bd17463a42284a48cdd5..f1565eba01336ab3769b34b25adb68ab9650aab7 100644
|
| --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| @@ -256,6 +256,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| { NSAccessibilityHeaderAttribute, @"header" },
|
| { NSAccessibilityHelpAttribute, @"help" },
|
| { NSAccessibilityIndexAttribute, @"index" },
|
| + { NSAccessibilityLinkedUIElementsAttribute, @"linkedUIElements" },
|
| { NSAccessibilityMaxValueAttribute, @"maxValue" },
|
| { NSAccessibilityMinValueAttribute, @"minValue" },
|
| { NSAccessibilityNumberOfCharactersAttribute, @"numberOfCharacters" },
|
| @@ -267,6 +268,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| { NSAccessibilityRowHeaderUIElementsAttribute, @"rowHeaders" },
|
| { NSAccessibilityRowIndexRangeAttribute, @"rowIndexRange" },
|
| { NSAccessibilityRowsAttribute, @"rows" },
|
| + // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute
|
| { NSAccessibilitySizeAttribute, @"size" },
|
| { NSAccessibilitySubroleAttribute, @"subrole" },
|
| { NSAccessibilityTabsAttribute, @"tabs" },
|
| @@ -578,6 +580,28 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| return invalid;
|
| }
|
|
|
| +- (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute
|
| + addTo:(NSMutableArray*)outArray {
|
| + const std::vector<int32>& attributeValues =
|
| + browserAccessibility_->GetIntListAttribute(attribute);
|
| + for (size_t i = 0; i < attributeValues.size(); ++i) {
|
| + BrowserAccessibility* element =
|
| + browserAccessibility_->manager()->GetFromRendererID(attributeValues[i]);
|
| + if (element)
|
| + [outArray addObject:element->ToBrowserAccessibilityCocoa()];
|
| + }
|
| +}
|
| +
|
| +- (NSArray*)linkedUIElements {
|
| + NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
|
| + [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_OWNS_IDS addTo:ret];
|
| + [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_CONTROLS_IDS addTo:ret];
|
| + [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_FLOWTO_IDS addTo:ret];
|
| + if ([ret count] == 0)
|
| + return nil;
|
| + return ret;
|
| +}
|
| +
|
| - (NSNumber*)loaded {
|
| return [NSNumber numberWithBool:YES];
|
| }
|
| @@ -851,6 +875,15 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| if (titleElement)
|
| return titleElement->ToBrowserAccessibilityCocoa();
|
| }
|
| + std::vector<int32> labelledby_ids =
|
| + browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
|
| + if (labelledby_ids.size() == 1) {
|
| + BrowserAccessibility* titleElement =
|
| + browserAccessibility_->manager()->GetFromRendererID(labelledby_ids[0]);
|
| + if (titleElement)
|
| + return titleElement->ToBrowserAccessibilityCocoa();
|
| + }
|
| +
|
| return nil;
|
| }
|
|
|
| @@ -1242,6 +1275,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| NSAccessibilityEnabledAttribute,
|
| NSAccessibilityFocusedAttribute,
|
| NSAccessibilityHelpAttribute,
|
| + NSAccessibilityLinkedUIElementsAttribute,
|
| NSAccessibilityParentAttribute,
|
| NSAccessibilityPositionAttribute,
|
| NSAccessibilityRoleAttribute,
|
| @@ -1356,12 +1390,16 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| }
|
|
|
| // Title UI Element.
|
| - if (browserAccessibility_->HasIntAttribute(
|
| - ui::AX_ATTR_TITLE_UI_ELEMENT)) {
|
| + if (browserAccessibility_->HasIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT) ||
|
| + (browserAccessibility_->HasIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS) &&
|
| + browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS)
|
| + .size() == 1)) {
|
| [ret addObjectsFromArray:[NSArray arrayWithObjects:
|
| NSAccessibilityTitleUIElementAttribute,
|
| nil]];
|
| }
|
| + // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute
|
| + // for elements which are referred to by labelledby or are labels
|
|
|
| return ret;
|
| }
|
|
|