| 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 #include <stddef.h> |
| 7 #include <stdint.h> |
| 6 | 8 |
| 7 #import "content/browser/accessibility/browser_accessibility_cocoa.h" | 9 #import "content/browser/accessibility/browser_accessibility_cocoa.h" |
| 8 | 10 |
| 9 #include <map> | 11 #include <map> |
| 10 | 12 |
| 11 #include "base/basictypes.h" | |
| 12 #include "base/strings/string16.h" | 13 #include "base/strings/string16.h" |
| 13 #include "base/strings/sys_string_conversions.h" | 14 #include "base/strings/sys_string_conversions.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 15 #include "content/app/strings/grit/content_strings.h" | 16 #include "content/app/strings/grit/content_strings.h" |
| 16 #include "content/browser/accessibility/browser_accessibility_manager.h" | 17 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 17 #include "content/browser/accessibility/browser_accessibility_manager_mac.h" | 18 #include "content/browser/accessibility/browser_accessibility_manager_mac.h" |
| 18 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h" | 19 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h" |
| 19 #include "content/public/common/content_client.h" | 20 #include "content/public/common/content_client.h" |
| 20 #import "ui/accessibility/platform/ax_platform_node_mac.h" | 21 #import "ui/accessibility/platform/ax_platform_node_mac.h" |
| 21 | 22 |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 | 459 |
| 459 - (NSNumber*)ariaSetSize { | 460 - (NSNumber*)ariaSetSize { |
| 460 return [NSNumber numberWithInt: | 461 return [NSNumber numberWithInt: |
| 461 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)]; | 462 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)]; |
| 462 } | 463 } |
| 463 | 464 |
| 464 // Returns an array of BrowserAccessibilityCocoa objects, representing the | 465 // Returns an array of BrowserAccessibilityCocoa objects, representing the |
| 465 // accessibility children of this object. | 466 // accessibility children of this object. |
| 466 - (NSArray*)children { | 467 - (NSArray*)children { |
| 467 if (!children_) { | 468 if (!children_) { |
| 468 uint32 childCount = browserAccessibility_->PlatformChildCount(); | 469 uint32_t childCount = browserAccessibility_->PlatformChildCount(); |
| 469 children_.reset([[NSMutableArray alloc] initWithCapacity:childCount]); | 470 children_.reset([[NSMutableArray alloc] initWithCapacity:childCount]); |
| 470 for (uint32 index = 0; index < childCount; ++index) { | 471 for (uint32_t index = 0; index < childCount; ++index) { |
| 471 BrowserAccessibilityCocoa* child = | 472 BrowserAccessibilityCocoa* child = |
| 472 browserAccessibility_->PlatformGetChild(index)-> | 473 browserAccessibility_->PlatformGetChild(index)-> |
| 473 ToBrowserAccessibilityCocoa(); | 474 ToBrowserAccessibilityCocoa(); |
| 474 if ([child isIgnored]) | 475 if ([child isIgnored]) |
| 475 [children_ addObjectsFromArray:[child children]]; | 476 [children_ addObjectsFromArray:[child children]]; |
| 476 else | 477 else |
| 477 [children_ addObject:child]; | 478 [children_ addObject:child]; |
| 478 } | 479 } |
| 479 | 480 |
| 480 // Also, add indirect children (if any). | 481 // Also, add indirect children (if any). |
| 481 const std::vector<int32>& indirectChildIds = | 482 const std::vector<int32_t>& indirectChildIds = |
| 482 browserAccessibility_->GetIntListAttribute( | 483 browserAccessibility_->GetIntListAttribute( |
| 483 ui::AX_ATTR_INDIRECT_CHILD_IDS); | 484 ui::AX_ATTR_INDIRECT_CHILD_IDS); |
| 484 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { | 485 for (uint32_t i = 0; i < indirectChildIds.size(); ++i) { |
| 485 int32 child_id = indirectChildIds[i]; | 486 int32_t child_id = indirectChildIds[i]; |
| 486 BrowserAccessibility* child = | 487 BrowserAccessibility* child = |
| 487 browserAccessibility_->manager()->GetFromID(child_id); | 488 browserAccessibility_->manager()->GetFromID(child_id); |
| 488 | 489 |
| 489 // This only became necessary as a result of crbug.com/93095. It should be | 490 // This only became necessary as a result of crbug.com/93095. It should be |
| 490 // a DCHECK in the future. | 491 // a DCHECK in the future. |
| 491 if (child) { | 492 if (child) { |
| 492 BrowserAccessibilityCocoa* child_cocoa = | 493 BrowserAccessibilityCocoa* child_cocoa = |
| 493 child->ToBrowserAccessibilityCocoa(); | 494 child->ToBrowserAccessibilityCocoa(); |
| 494 [children_ addObject:child_cocoa]; | 495 [children_ addObject:child_cocoa]; |
| 495 } | 496 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 507 } | 508 } |
| 508 } | 509 } |
| 509 | 510 |
| 510 - (NSArray*)columnHeaders { | 511 - (NSArray*)columnHeaders { |
| 511 if ([self internalRole] != ui::AX_ROLE_TABLE && | 512 if ([self internalRole] != ui::AX_ROLE_TABLE && |
| 512 [self internalRole] != ui::AX_ROLE_GRID) { | 513 [self internalRole] != ui::AX_ROLE_GRID) { |
| 513 return nil; | 514 return nil; |
| 514 } | 515 } |
| 515 | 516 |
| 516 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 517 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 517 const std::vector<int32>& uniqueCellIds = | 518 const std::vector<int32_t>& uniqueCellIds = |
| 518 browserAccessibility_->GetIntListAttribute( | 519 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 519 ui::AX_ATTR_UNIQUE_CELL_IDS); | |
| 520 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 520 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 521 int id = uniqueCellIds[i]; | 521 int id = uniqueCellIds[i]; |
| 522 BrowserAccessibility* cell = | 522 BrowserAccessibility* cell = |
| 523 browserAccessibility_->manager()->GetFromID(id); | 523 browserAccessibility_->manager()->GetFromID(id); |
| 524 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) | 524 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) |
| 525 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 525 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 526 } | 526 } |
| 527 return ret; | 527 return ret; |
| 528 } | 528 } |
| 529 | 529 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 551 return ret; | 551 return ret; |
| 552 } | 552 } |
| 553 | 553 |
| 554 - (NSString*)description { | 554 - (NSString*)description { |
| 555 // Mac OS X wants static text exposed in AXValue. | 555 // Mac OS X wants static text exposed in AXValue. |
| 556 if ([self shouldExposeNameInAXValue]) | 556 if ([self shouldExposeNameInAXValue]) |
| 557 return @""; | 557 return @""; |
| 558 | 558 |
| 559 // If the name came from a single related element and it's present in the | 559 // If the name came from a single related element and it's present in the |
| 560 // tree, it will be exposed in AXTitleUIElement. | 560 // tree, it will be exposed in AXTitleUIElement. |
| 561 std::vector<int32> labelledby_ids = | 561 std::vector<int32_t> labelledby_ids = |
| 562 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); | 562 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); |
| 563 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( | 563 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( |
| 564 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); | 564 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); |
| 565 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && | 565 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && |
| 566 labelledby_ids.size() == 1 && | 566 labelledby_ids.size() == 1 && |
| 567 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) { | 567 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) { |
| 568 return @""; | 568 return @""; |
| 569 } | 569 } |
| 570 | 570 |
| 571 std::string name = browserAccessibility_->GetStringAttribute( | 571 std::string name = browserAccessibility_->GetStringAttribute( |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 return NSStringForStringAttribute( | 782 return NSStringForStringAttribute( |
| 783 browserAccessibility_, ui::AX_ATTR_DESCRIPTION); | 783 browserAccessibility_, ui::AX_ATTR_DESCRIPTION); |
| 784 } | 784 } |
| 785 | 785 |
| 786 return NSStringForStringAttribute( | 786 return NSStringForStringAttribute( |
| 787 browserAccessibility_, ui::AX_ATTR_PLACEHOLDER); | 787 browserAccessibility_, ui::AX_ATTR_PLACEHOLDER); |
| 788 } | 788 } |
| 789 | 789 |
| 790 - (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute | 790 - (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute |
| 791 addTo:(NSMutableArray*)outArray { | 791 addTo:(NSMutableArray*)outArray { |
| 792 const std::vector<int32>& attributeValues = | 792 const std::vector<int32_t>& attributeValues = |
| 793 browserAccessibility_->GetIntListAttribute(attribute); | 793 browserAccessibility_->GetIntListAttribute(attribute); |
| 794 for (size_t i = 0; i < attributeValues.size(); ++i) { | 794 for (size_t i = 0; i < attributeValues.size(); ++i) { |
| 795 BrowserAccessibility* element = | 795 BrowserAccessibility* element = |
| 796 browserAccessibility_->manager()->GetFromID(attributeValues[i]); | 796 browserAccessibility_->manager()->GetFromID(attributeValues[i]); |
| 797 if (element) | 797 if (element) |
| 798 [outArray addObject:element->ToBrowserAccessibilityCocoa()]; | 798 [outArray addObject:element->ToBrowserAccessibilityCocoa()]; |
| 799 } | 799 } |
| 800 } | 800 } |
| 801 | 801 |
| 802 - (NSArray*)linkedUIElements { | 802 - (NSArray*)linkedUIElements { |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 return NSAccessibilityRoleDescription(role, nil); | 1070 return NSAccessibilityRoleDescription(role, nil); |
| 1071 } | 1071 } |
| 1072 | 1072 |
| 1073 - (NSArray*)rowHeaders { | 1073 - (NSArray*)rowHeaders { |
| 1074 if ([self internalRole] != ui::AX_ROLE_TABLE && | 1074 if ([self internalRole] != ui::AX_ROLE_TABLE && |
| 1075 [self internalRole] != ui::AX_ROLE_GRID) { | 1075 [self internalRole] != ui::AX_ROLE_GRID) { |
| 1076 return nil; | 1076 return nil; |
| 1077 } | 1077 } |
| 1078 | 1078 |
| 1079 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 1079 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 1080 const std::vector<int32>& uniqueCellIds = | 1080 const std::vector<int32_t>& uniqueCellIds = |
| 1081 browserAccessibility_->GetIntListAttribute( | 1081 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 1082 ui::AX_ATTR_UNIQUE_CELL_IDS); | |
| 1083 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 1082 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 1084 int id = uniqueCellIds[i]; | 1083 int id = uniqueCellIds[i]; |
| 1085 BrowserAccessibility* cell = | 1084 BrowserAccessibility* cell = |
| 1086 browserAccessibility_->manager()->GetFromID(id); | 1085 browserAccessibility_->manager()->GetFromID(id); |
| 1087 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) | 1086 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) |
| 1088 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 1087 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 1089 } | 1088 } |
| 1090 return ret; | 1089 return ret; |
| 1091 } | 1090 } |
| 1092 | 1091 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1108 - (NSArray*)rows { | 1107 - (NSArray*)rows { |
| 1109 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 1108 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 1110 | 1109 |
| 1111 if ([self internalRole] == ui::AX_ROLE_TABLE|| | 1110 if ([self internalRole] == ui::AX_ROLE_TABLE|| |
| 1112 [self internalRole] == ui::AX_ROLE_GRID) { | 1111 [self internalRole] == ui::AX_ROLE_GRID) { |
| 1113 for (BrowserAccessibilityCocoa* child in [self children]) { | 1112 for (BrowserAccessibilityCocoa* child in [self children]) { |
| 1114 if ([[child role] isEqualToString:NSAccessibilityRowRole]) | 1113 if ([[child role] isEqualToString:NSAccessibilityRowRole]) |
| 1115 [ret addObject:child]; | 1114 [ret addObject:child]; |
| 1116 } | 1115 } |
| 1117 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { | 1116 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { |
| 1118 const std::vector<int32>& indirectChildIds = | 1117 const std::vector<int32_t>& indirectChildIds = |
| 1119 browserAccessibility_->GetIntListAttribute( | 1118 browserAccessibility_->GetIntListAttribute( |
| 1120 ui::AX_ATTR_INDIRECT_CHILD_IDS); | 1119 ui::AX_ATTR_INDIRECT_CHILD_IDS); |
| 1121 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { | 1120 for (uint32_t i = 0; i < indirectChildIds.size(); ++i) { |
| 1122 int id = indirectChildIds[i]; | 1121 int id = indirectChildIds[i]; |
| 1123 BrowserAccessibility* rowElement = | 1122 BrowserAccessibility* rowElement = |
| 1124 browserAccessibility_->manager()->GetFromID(id); | 1123 browserAccessibility_->manager()->GetFromID(id); |
| 1125 if (rowElement) | 1124 if (rowElement) |
| 1126 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; | 1125 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; |
| 1127 } | 1126 } |
| 1128 } | 1127 } |
| 1129 | 1128 |
| 1130 return ret; | 1129 return ret; |
| 1131 } | 1130 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1153 if (activeDescendant) { | 1152 if (activeDescendant) { |
| 1154 [ret addObject:activeDescendant->ToBrowserAccessibilityCocoa()]; | 1153 [ret addObject:activeDescendant->ToBrowserAccessibilityCocoa()]; |
| 1155 return ret; | 1154 return ret; |
| 1156 } | 1155 } |
| 1157 } | 1156 } |
| 1158 } | 1157 } |
| 1159 | 1158 |
| 1160 // If it's multiselectable or if the previous attempts failed, | 1159 // If it's multiselectable or if the previous attempts failed, |
| 1161 // return any children with the "selected" state, which may | 1160 // return any children with the "selected" state, which may |
| 1162 // come from aria-selected. | 1161 // come from aria-selected. |
| 1163 uint32 childCount = browserAccessibility_->PlatformChildCount(); | 1162 uint32_t childCount = browserAccessibility_->PlatformChildCount(); |
| 1164 for (uint32 index = 0; index < childCount; ++index) { | 1163 for (uint32_t index = 0; index < childCount; ++index) { |
| 1165 BrowserAccessibility* child = | 1164 BrowserAccessibility* child = |
| 1166 browserAccessibility_->PlatformGetChild(index); | 1165 browserAccessibility_->PlatformGetChild(index); |
| 1167 if (child->HasState(ui::AX_STATE_SELECTED)) | 1166 if (child->HasState(ui::AX_STATE_SELECTED)) |
| 1168 [ret addObject:child->ToBrowserAccessibilityCocoa()]; | 1167 [ret addObject:child->ToBrowserAccessibilityCocoa()]; |
| 1169 } | 1168 } |
| 1170 | 1169 |
| 1171 // And if nothing's selected but one has focus, use the focused one. | 1170 // And if nothing's selected but one has focus, use the focused one. |
| 1172 if ([ret count] == 0 && | 1171 if ([ret count] == 0 && |
| 1173 focusedChild && | 1172 focusedChild && |
| 1174 focusedChild != browserAccessibility_) { | 1173 focusedChild != browserAccessibility_) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 return tabSubtree; | 1238 return tabSubtree; |
| 1240 } | 1239 } |
| 1241 | 1240 |
| 1242 - (NSString*)title { | 1241 - (NSString*)title { |
| 1243 // Mac OS X wants static text exposed in AXValue. | 1242 // Mac OS X wants static text exposed in AXValue. |
| 1244 if ([self shouldExposeNameInAXValue]) | 1243 if ([self shouldExposeNameInAXValue]) |
| 1245 return @""; | 1244 return @""; |
| 1246 | 1245 |
| 1247 // If the name came from a single related element and it's present in the | 1246 // If the name came from a single related element and it's present in the |
| 1248 // tree, it will be exposed in AXTitleUIElement. | 1247 // tree, it will be exposed in AXTitleUIElement. |
| 1249 std::vector<int32> labelledby_ids = | 1248 std::vector<int32_t> labelledby_ids = |
| 1250 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); | 1249 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); |
| 1251 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( | 1250 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( |
| 1252 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); | 1251 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); |
| 1253 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && | 1252 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && |
| 1254 labelledby_ids.size() == 1 && | 1253 labelledby_ids.size() == 1 && |
| 1255 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) { | 1254 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) { |
| 1256 return @""; | 1255 return @""; |
| 1257 } | 1256 } |
| 1258 | 1257 |
| 1259 // On Mac OS X, the accessible name of an object is exposed as its | 1258 // On Mac OS X, the accessible name of an object is exposed as its |
| 1260 // title if it comes from visible text, and as its description | 1259 // title if it comes from visible text, and as its description |
| 1261 // otherwise, but never both. | 1260 // otherwise, but never both. |
| 1262 if (nameFrom == ui::AX_NAME_FROM_CONTENTS || | 1261 if (nameFrom == ui::AX_NAME_FROM_CONTENTS || |
| 1263 nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT || | 1262 nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT || |
| 1264 nameFrom == ui::AX_NAME_FROM_VALUE) { | 1263 nameFrom == ui::AX_NAME_FROM_VALUE) { |
| 1265 return NSStringForStringAttribute( | 1264 return NSStringForStringAttribute( |
| 1266 browserAccessibility_, ui::AX_ATTR_NAME); | 1265 browserAccessibility_, ui::AX_ATTR_NAME); |
| 1267 } | 1266 } |
| 1268 | 1267 |
| 1269 return nil; | 1268 return nil; |
| 1270 } | 1269 } |
| 1271 | 1270 |
| 1272 - (id)titleUIElement { | 1271 - (id)titleUIElement { |
| 1273 std::vector<int32> labelledby_ids = | 1272 std::vector<int32_t> labelledby_ids = |
| 1274 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); | 1273 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); |
| 1275 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( | 1274 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>( |
| 1276 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); | 1275 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM)); |
| 1277 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && | 1276 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT && |
| 1278 labelledby_ids.size() == 1) { | 1277 labelledby_ids.size() == 1) { |
| 1279 BrowserAccessibility* titleElement = | 1278 BrowserAccessibility* titleElement = |
| 1280 browserAccessibility_->manager()->GetFromID(labelledby_ids[0]); | 1279 browserAccessibility_->manager()->GetFromID(labelledby_ids[0]); |
| 1281 if (titleElement) | 1280 if (titleElement) |
| 1282 return titleElement->ToBrowserAccessibilityCocoa(); | 1281 return titleElement->ToBrowserAccessibilityCocoa(); |
| 1283 } | 1282 } |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1367 return nil; | 1366 return nil; |
| 1368 } | 1367 } |
| 1369 | 1368 |
| 1370 - (NSValue*)visibleCharacterRange { | 1369 - (NSValue*)visibleCharacterRange { |
| 1371 base::string16 value = browserAccessibility_->GetValue(); | 1370 base::string16 value = browserAccessibility_->GetValue(); |
| 1372 return [NSValue valueWithRange:NSMakeRange(0, value.size())]; | 1371 return [NSValue valueWithRange:NSMakeRange(0, value.size())]; |
| 1373 } | 1372 } |
| 1374 | 1373 |
| 1375 - (NSArray*)visibleCells { | 1374 - (NSArray*)visibleCells { |
| 1376 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 1375 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 1377 const std::vector<int32>& uniqueCellIds = | 1376 const std::vector<int32_t>& uniqueCellIds = |
| 1378 browserAccessibility_->GetIntListAttribute( | 1377 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 1379 ui::AX_ATTR_UNIQUE_CELL_IDS); | |
| 1380 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 1378 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 1381 int id = uniqueCellIds[i]; | 1379 int id = uniqueCellIds[i]; |
| 1382 BrowserAccessibility* cell = | 1380 BrowserAccessibility* cell = |
| 1383 browserAccessibility_->manager()->GetFromID(id); | 1381 browserAccessibility_->manager()->GetFromID(id); |
| 1384 if (cell) | 1382 if (cell) |
| 1385 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 1383 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 1386 } | 1384 } |
| 1387 return ret; | 1385 return ret; |
| 1388 } | 1386 } |
| 1389 | 1387 |
| 1390 - (NSArray*)visibleChildren { | 1388 - (NSArray*)visibleChildren { |
| 1391 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 1389 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 1392 uint32 childCount = browserAccessibility_->PlatformChildCount(); | 1390 uint32_t childCount = browserAccessibility_->PlatformChildCount(); |
| 1393 for (uint32 index = 0; index < childCount; ++index) { | 1391 for (uint32_t index = 0; index < childCount; ++index) { |
| 1394 BrowserAccessibilityCocoa* child = | 1392 BrowserAccessibilityCocoa* child = |
| 1395 browserAccessibility_->PlatformGetChild(index)-> | 1393 browserAccessibility_->PlatformGetChild(index)-> |
| 1396 ToBrowserAccessibilityCocoa(); | 1394 ToBrowserAccessibilityCocoa(); |
| 1397 [ret addObject:child]; | 1395 [ret addObject:child]; |
| 1398 } | 1396 } |
| 1399 return ret; | 1397 return ret; |
| 1400 } | 1398 } |
| 1401 | 1399 |
| 1402 - (NSArray*)visibleColumns { | 1400 - (NSArray*)visibleColumns { |
| 1403 return [self columns]; | 1401 return [self columns]; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 int selStart, selEnd; | 1458 int selStart, selEnd; |
| 1461 if (browserAccessibility_->GetIntAttribute( | 1459 if (browserAccessibility_->GetIntAttribute( |
| 1462 ui::AX_ATTR_TEXT_SEL_START, &selStart) && | 1460 ui::AX_ATTR_TEXT_SEL_START, &selStart) && |
| 1463 browserAccessibility_-> | 1461 browserAccessibility_-> |
| 1464 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &selEnd)) { | 1462 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &selEnd)) { |
| 1465 if (selStart > selEnd) | 1463 if (selStart > selEnd) |
| 1466 std::swap(selStart, selEnd); | 1464 std::swap(selStart, selEnd); |
| 1467 int selLength = selEnd - selStart; | 1465 int selLength = selEnd - selStart; |
| 1468 if ([attribute isEqualToString: | 1466 if ([attribute isEqualToString: |
| 1469 NSAccessibilityInsertionPointLineNumberAttribute]) { | 1467 NSAccessibilityInsertionPointLineNumberAttribute]) { |
| 1470 const std::vector<int32>& line_breaks = | 1468 const std::vector<int32_t>& line_breaks = |
| 1471 browserAccessibility_->GetIntListAttribute( | 1469 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LINE_BREAKS); |
| 1472 ui::AX_ATTR_LINE_BREAKS); | |
| 1473 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { | 1470 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { |
| 1474 if (line_breaks[i] > selStart) | 1471 if (line_breaks[i] > selStart) |
| 1475 return [NSNumber numberWithInt:i]; | 1472 return [NSNumber numberWithInt:i]; |
| 1476 } | 1473 } |
| 1477 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; | 1474 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; |
| 1478 } | 1475 } |
| 1479 if ([attribute isEqualToString:NSAccessibilitySelectedTextAttribute]) { | 1476 if ([attribute isEqualToString:NSAccessibilitySelectedTextAttribute]) { |
| 1480 base::string16 value = browserAccessibility_->GetValue(); | 1477 base::string16 value = browserAccessibility_->GetValue(); |
| 1481 return base::SysUTF16ToNSString(value.substr(selStart, selLength)); | 1478 return base::SysUTF16ToNSString(value.substr(selStart, selLength)); |
| 1482 } | 1479 } |
| 1483 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { | 1480 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { |
| 1484 return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; | 1481 return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; |
| 1485 } | 1482 } |
| 1486 } | 1483 } |
| 1487 return nil; | 1484 return nil; |
| 1488 } | 1485 } |
| 1489 | 1486 |
| 1490 // Returns the accessibility value for the given attribute and parameter. If the | 1487 // Returns the accessibility value for the given attribute and parameter. If the |
| 1491 // value isn't supported this will return nil. | 1488 // value isn't supported this will return nil. |
| 1492 - (id)accessibilityAttributeValue:(NSString*)attribute | 1489 - (id)accessibilityAttributeValue:(NSString*)attribute |
| 1493 forParameter:(id)parameter { | 1490 forParameter:(id)parameter { |
| 1494 if (!browserAccessibility_) | 1491 if (!browserAccessibility_) |
| 1495 return nil; | 1492 return nil; |
| 1496 | 1493 |
| 1497 const std::vector<int32>& line_breaks = | 1494 const std::vector<int32_t>& line_breaks = |
| 1498 browserAccessibility_->GetIntListAttribute( | 1495 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LINE_BREAKS); |
| 1499 ui::AX_ATTR_LINE_BREAKS); | |
| 1500 base::string16 value = browserAccessibility_->GetValue(); | 1496 base::string16 value = browserAccessibility_->GetValue(); |
| 1501 int len = static_cast<int>(value.size()); | 1497 int len = static_cast<int>(value.size()); |
| 1502 | 1498 |
| 1503 if ([attribute isEqualToString: | 1499 if ([attribute isEqualToString: |
| 1504 NSAccessibilityStringForRangeParameterizedAttribute]) { | 1500 NSAccessibilityStringForRangeParameterizedAttribute]) { |
| 1505 return [self valueForRange:[(NSValue*)parameter rangeValue]]; | 1501 return [self valueForRange:[(NSValue*)parameter rangeValue]]; |
| 1506 } | 1502 } |
| 1507 | 1503 |
| 1508 if ([attribute | 1504 if ([attribute |
| 1509 isEqualToString: | 1505 isEqualToString: |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2086 if (!browserAccessibility_) | 2082 if (!browserAccessibility_) |
| 2087 return [super hash]; | 2083 return [super hash]; |
| 2088 return browserAccessibility_->GetId(); | 2084 return browserAccessibility_->GetId(); |
| 2089 } | 2085 } |
| 2090 | 2086 |
| 2091 - (BOOL)accessibilityShouldUseUniqueId { | 2087 - (BOOL)accessibilityShouldUseUniqueId { |
| 2092 return YES; | 2088 return YES; |
| 2093 } | 2089 } |
| 2094 | 2090 |
| 2095 @end | 2091 @end |
| OLD | NEW |