| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |