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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <execinfo.h> 5 #include <execinfo.h>
6 6
7 #import "content/browser/accessibility/browser_accessibility_cocoa.h" 7 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
8 8
9 #include <map> 9 #include <map>
10 10
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 { NSAccessibilityDescriptionAttribute, @"description" }, 249 { NSAccessibilityDescriptionAttribute, @"description" },
250 { NSAccessibilityDisclosingAttribute, @"disclosing" }, 250 { NSAccessibilityDisclosingAttribute, @"disclosing" },
251 { NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow" }, 251 { NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow" },
252 { NSAccessibilityDisclosureLevelAttribute, @"disclosureLevel" }, 252 { NSAccessibilityDisclosureLevelAttribute, @"disclosureLevel" },
253 { NSAccessibilityDisclosedRowsAttribute, @"disclosedRows" }, 253 { NSAccessibilityDisclosedRowsAttribute, @"disclosedRows" },
254 { NSAccessibilityEnabledAttribute, @"enabled" }, 254 { NSAccessibilityEnabledAttribute, @"enabled" },
255 { NSAccessibilityFocusedAttribute, @"focused" }, 255 { NSAccessibilityFocusedAttribute, @"focused" },
256 { NSAccessibilityHeaderAttribute, @"header" }, 256 { NSAccessibilityHeaderAttribute, @"header" },
257 { NSAccessibilityHelpAttribute, @"help" }, 257 { NSAccessibilityHelpAttribute, @"help" },
258 { NSAccessibilityIndexAttribute, @"index" }, 258 { NSAccessibilityIndexAttribute, @"index" },
259 { NSAccessibilityLinkedUIElementsAttribute, @"linkedUIElements" },
259 { NSAccessibilityMaxValueAttribute, @"maxValue" }, 260 { NSAccessibilityMaxValueAttribute, @"maxValue" },
260 { NSAccessibilityMinValueAttribute, @"minValue" }, 261 { NSAccessibilityMinValueAttribute, @"minValue" },
261 { NSAccessibilityNumberOfCharactersAttribute, @"numberOfCharacters" }, 262 { NSAccessibilityNumberOfCharactersAttribute, @"numberOfCharacters" },
262 { NSAccessibilityOrientationAttribute, @"orientation" }, 263 { NSAccessibilityOrientationAttribute, @"orientation" },
263 { NSAccessibilityParentAttribute, @"parent" }, 264 { NSAccessibilityParentAttribute, @"parent" },
264 { NSAccessibilityPositionAttribute, @"position" }, 265 { NSAccessibilityPositionAttribute, @"position" },
265 { NSAccessibilityRoleAttribute, @"role" }, 266 { NSAccessibilityRoleAttribute, @"role" },
266 { NSAccessibilityRoleDescriptionAttribute, @"roleDescription" }, 267 { NSAccessibilityRoleDescriptionAttribute, @"roleDescription" },
267 { NSAccessibilityRowHeaderUIElementsAttribute, @"rowHeaders" }, 268 { NSAccessibilityRowHeaderUIElementsAttribute, @"rowHeaders" },
268 { NSAccessibilityRowIndexRangeAttribute, @"rowIndexRange" }, 269 { NSAccessibilityRowIndexRangeAttribute, @"rowIndexRange" },
269 { NSAccessibilityRowsAttribute, @"rows" }, 270 { NSAccessibilityRowsAttribute, @"rows" },
271 // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute
270 { NSAccessibilitySizeAttribute, @"size" }, 272 { NSAccessibilitySizeAttribute, @"size" },
271 { NSAccessibilitySubroleAttribute, @"subrole" }, 273 { NSAccessibilitySubroleAttribute, @"subrole" },
272 { NSAccessibilityTabsAttribute, @"tabs" }, 274 { NSAccessibilityTabsAttribute, @"tabs" },
273 { NSAccessibilityTitleAttribute, @"title" }, 275 { NSAccessibilityTitleAttribute, @"title" },
274 { NSAccessibilityTitleUIElementAttribute, @"titleUIElement" }, 276 { NSAccessibilityTitleUIElementAttribute, @"titleUIElement" },
275 { NSAccessibilityTopLevelUIElementAttribute, @"window" }, 277 { NSAccessibilityTopLevelUIElementAttribute, @"window" },
276 { NSAccessibilityURLAttribute, @"url" }, 278 { NSAccessibilityURLAttribute, @"url" },
277 { NSAccessibilityValueAttribute, @"value" }, 279 { NSAccessibilityValueAttribute, @"value" },
278 { NSAccessibilityValueDescriptionAttribute, @"valueDescription" }, 280 { NSAccessibilityValueDescriptionAttribute, @"valueDescription" },
279 { NSAccessibilityVisibleCharacterRangeAttribute, @"visibleCharacterRange" }, 281 { NSAccessibilityVisibleCharacterRangeAttribute, @"visibleCharacterRange" },
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 if (!browserAccessibility_->GetHtmlAttribute("aria-invalid", &invalidUTF)) 573 if (!browserAccessibility_->GetHtmlAttribute("aria-invalid", &invalidUTF))
572 return NULL; 574 return NULL;
573 NSString* invalid = base::SysUTF16ToNSString(invalidUTF); 575 NSString* invalid = base::SysUTF16ToNSString(invalidUTF);
574 if ([invalid isEqualToString:@"false"] || 576 if ([invalid isEqualToString:@"false"] ||
575 [invalid isEqualToString:@""]) { 577 [invalid isEqualToString:@""]) {
576 return @"false"; 578 return @"false";
577 } 579 }
578 return invalid; 580 return invalid;
579 } 581 }
580 582
583 - (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute
584 addTo:(NSMutableArray*)outArray {
585 const std::vector<int32>& attributeValues =
586 browserAccessibility_->GetIntListAttribute(attribute);
587 for (size_t i = 0; i < attributeValues.size(); ++i) {
588 BrowserAccessibility* element =
589 browserAccessibility_->manager()->GetFromRendererID(attributeValues[i]);
590 if (element)
591 [outArray addObject:element->ToBrowserAccessibilityCocoa()];
592 }
593 }
594
595 - (NSArray*)linkedUIElements {
596 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
597 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_OWNS_IDS addTo:ret];
598 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_CONTROLS_IDS addTo:ret];
599 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_FLOWTO_IDS addTo:ret];
600 if ([ret count] == 0)
601 return nil;
602 return ret;
603 }
604
581 - (NSNumber*)loaded { 605 - (NSNumber*)loaded {
582 return [NSNumber numberWithBool:YES]; 606 return [NSNumber numberWithBool:YES];
583 } 607 }
584 608
585 - (NSNumber*)loadingProgress { 609 - (NSNumber*)loadingProgress {
586 float floatValue = browserAccessibility_->GetFloatAttribute( 610 float floatValue = browserAccessibility_->GetFloatAttribute(
587 ui::AX_ATTR_DOC_LOADING_PROGRESS); 611 ui::AX_ATTR_DOC_LOADING_PROGRESS);
588 return [NSNumber numberWithFloat:floatValue]; 612 return [NSNumber numberWithFloat:floatValue];
589 } 613 }
590 614
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 868
845 - (id)titleUIElement { 869 - (id)titleUIElement {
846 int titleElementId; 870 int titleElementId;
847 if (browserAccessibility_->GetIntAttribute( 871 if (browserAccessibility_->GetIntAttribute(
848 ui::AX_ATTR_TITLE_UI_ELEMENT, &titleElementId)) { 872 ui::AX_ATTR_TITLE_UI_ELEMENT, &titleElementId)) {
849 BrowserAccessibility* titleElement = 873 BrowserAccessibility* titleElement =
850 browserAccessibility_->manager()->GetFromRendererID(titleElementId); 874 browserAccessibility_->manager()->GetFromRendererID(titleElementId);
851 if (titleElement) 875 if (titleElement)
852 return titleElement->ToBrowserAccessibilityCocoa(); 876 return titleElement->ToBrowserAccessibilityCocoa();
853 } 877 }
878 std::vector<int32> labelledby_ids =
879 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
880 if (labelledby_ids.size() == 1) {
881 BrowserAccessibility* titleElement =
882 browserAccessibility_->manager()->GetFromRendererID(labelledby_ids[0]);
883 if (titleElement)
884 return titleElement->ToBrowserAccessibilityCocoa();
885 }
886
854 return nil; 887 return nil;
855 } 888 }
856 889
857 - (NSString*)url { 890 - (NSString*)url {
858 StringAttribute urlAttribute = 891 StringAttribute urlAttribute =
859 [[self role] isEqualToString:@"AXWebArea"] ? 892 [[self role] isEqualToString:@"AXWebArea"] ?
860 ui::AX_ATTR_DOC_URL : 893 ui::AX_ATTR_DOC_URL :
861 ui::AX_ATTR_URL; 894 ui::AX_ATTR_URL;
862 return NSStringForStringAttribute(browserAccessibility_, urlAttribute); 895 return NSStringForStringAttribute(browserAccessibility_, urlAttribute);
863 } 896 }
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 if (!browserAccessibility_) 1268 if (!browserAccessibility_)
1236 return nil; 1269 return nil;
1237 1270
1238 // General attributes. 1271 // General attributes.
1239 NSMutableArray* ret = [NSMutableArray arrayWithObjects: 1272 NSMutableArray* ret = [NSMutableArray arrayWithObjects:
1240 NSAccessibilityChildrenAttribute, 1273 NSAccessibilityChildrenAttribute,
1241 NSAccessibilityDescriptionAttribute, 1274 NSAccessibilityDescriptionAttribute,
1242 NSAccessibilityEnabledAttribute, 1275 NSAccessibilityEnabledAttribute,
1243 NSAccessibilityFocusedAttribute, 1276 NSAccessibilityFocusedAttribute,
1244 NSAccessibilityHelpAttribute, 1277 NSAccessibilityHelpAttribute,
1278 NSAccessibilityLinkedUIElementsAttribute,
1245 NSAccessibilityParentAttribute, 1279 NSAccessibilityParentAttribute,
1246 NSAccessibilityPositionAttribute, 1280 NSAccessibilityPositionAttribute,
1247 NSAccessibilityRoleAttribute, 1281 NSAccessibilityRoleAttribute,
1248 NSAccessibilityRoleDescriptionAttribute, 1282 NSAccessibilityRoleDescriptionAttribute,
1249 NSAccessibilitySizeAttribute, 1283 NSAccessibilitySizeAttribute,
1250 NSAccessibilitySubroleAttribute, 1284 NSAccessibilitySubroleAttribute,
1251 NSAccessibilityTitleAttribute, 1285 NSAccessibilityTitleAttribute,
1252 NSAccessibilityTopLevelUIElementAttribute, 1286 NSAccessibilityTopLevelUIElementAttribute,
1253 NSAccessibilityValueAttribute, 1287 NSAccessibilityValueAttribute,
1254 NSAccessibilityWindowAttribute, 1288 NSAccessibilityWindowAttribute,
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 } 1383 }
1350 if (browserAccessibility_->HasStringAttribute( 1384 if (browserAccessibility_->HasStringAttribute(
1351 ui::AX_ATTR_CONTAINER_LIVE_STATUS)) { 1385 ui::AX_ATTR_CONTAINER_LIVE_STATUS)) {
1352 [ret addObjectsFromArray:[NSArray arrayWithObjects: 1386 [ret addObjectsFromArray:[NSArray arrayWithObjects:
1353 @"AXARIAAtomic", 1387 @"AXARIAAtomic",
1354 @"AXARIABusy", 1388 @"AXARIABusy",
1355 nil]]; 1389 nil]];
1356 } 1390 }
1357 1391
1358 // Title UI Element. 1392 // Title UI Element.
1359 if (browserAccessibility_->HasIntAttribute( 1393 if (browserAccessibility_->HasIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT) ||
1360 ui::AX_ATTR_TITLE_UI_ELEMENT)) { 1394 (browserAccessibility_->HasIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS) &&
1395 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS)
1396 .size() == 1)) {
1361 [ret addObjectsFromArray:[NSArray arrayWithObjects: 1397 [ret addObjectsFromArray:[NSArray arrayWithObjects:
1362 NSAccessibilityTitleUIElementAttribute, 1398 NSAccessibilityTitleUIElementAttribute,
1363 nil]]; 1399 nil]];
1364 } 1400 }
1401 // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute
1402 // for elements which are referred to by labelledby or are labels
1365 1403
1366 return ret; 1404 return ret;
1367 } 1405 }
1368 1406
1369 // Returns the index of the child in this objects array of children. 1407 // Returns the index of the child in this objects array of children.
1370 - (NSUInteger)accessibilityGetIndexOf:(id)child { 1408 - (NSUInteger)accessibilityGetIndexOf:(id)child {
1371 if (!browserAccessibility_) 1409 if (!browserAccessibility_)
1372 return nil; 1410 return nil;
1373 1411
1374 NSUInteger index = 0; 1412 NSUInteger index = 0;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1499 return [super hash]; 1537 return [super hash];
1500 return browserAccessibility_->renderer_id(); 1538 return browserAccessibility_->renderer_id();
1501 } 1539 }
1502 1540
1503 - (BOOL)accessibilityShouldUseUniqueId { 1541 - (BOOL)accessibilityShouldUseUniqueId {
1504 return YES; 1542 return YES;
1505 } 1543 }
1506 1544
1507 @end 1545 @end
1508 1546
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698