Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Unified Diff: content/browser/accessibility/browser_accessibility_cocoa.mm

Issue 175613002: Include relationship ARIA objects in serialized accessibility tree (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reuse MAYBE(x) for failing android test Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698