| 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 struct MapEntry { | 42 struct MapEntry { |
| 43 ui::AXRole webKitValue; | 43 ui::AXRole webKitValue; |
| 44 NSString* nativeValue; | 44 NSString* nativeValue; |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 typedef std::map<ui::AXRole, NSString*> RoleMap; | 47 typedef std::map<ui::AXRole, NSString*> RoleMap; |
| 48 | 48 |
| 49 // GetState checks the bitmask used in AXNodeData to check | 49 // GetState checks the bitmask used in AXNodeData to check |
| 50 // if the given state was set on the accessibility object. | 50 // if the given state was set on the accessibility object. |
| 51 bool GetState(BrowserAccessibility* accessibility, ui::AXState state) { | 51 bool GetState(BrowserAccessibility* accessibility, ui::AXState state) { |
| 52 return ((accessibility->state() >> state) & 1); | 52 return ((accessibility->GetState() >> state) & 1); |
| 53 } | 53 } |
| 54 | 54 |
| 55 RoleMap BuildRoleMap() { | 55 RoleMap BuildRoleMap() { |
| 56 const MapEntry roles[] = { | 56 const MapEntry roles[] = { |
| 57 { ui::AX_ROLE_ALERT, NSAccessibilityGroupRole }, | 57 { ui::AX_ROLE_ALERT, NSAccessibilityGroupRole }, |
| 58 { ui::AX_ROLE_ALERT_DIALOG, NSAccessibilityGroupRole }, | 58 { ui::AX_ROLE_ALERT_DIALOG, NSAccessibilityGroupRole }, |
| 59 { ui::AX_ROLE_ANNOTATION, NSAccessibilityUnknownRole }, | 59 { ui::AX_ROLE_ANNOTATION, NSAccessibilityUnknownRole }, |
| 60 { ui::AX_ROLE_APPLICATION, NSAccessibilityGroupRole }, | 60 { ui::AX_ROLE_APPLICATION, NSAccessibilityGroupRole }, |
| 61 { ui::AX_ROLE_ARTICLE, NSAccessibilityGroupRole }, | 61 { ui::AX_ROLE_ARTICLE, NSAccessibilityGroupRole }, |
| 62 { ui::AX_ROLE_BANNER, NSAccessibilityGroupRole }, | 62 { ui::AX_ROLE_BANNER, NSAccessibilityGroupRole }, |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 } | 384 } |
| 385 } | 385 } |
| 386 } | 386 } |
| 387 return children_; | 387 return children_; |
| 388 } | 388 } |
| 389 | 389 |
| 390 - (void)childrenChanged { | 390 - (void)childrenChanged { |
| 391 if (![self isIgnored]) { | 391 if (![self isIgnored]) { |
| 392 children_.reset(); | 392 children_.reset(); |
| 393 } else { | 393 } else { |
| 394 [browserAccessibility_->parent()->ToBrowserAccessibilityCocoa() | 394 [browserAccessibility_->GetParent()->ToBrowserAccessibilityCocoa() |
| 395 childrenChanged]; | 395 childrenChanged]; |
| 396 } | 396 } |
| 397 } | 397 } |
| 398 | 398 |
| 399 - (NSArray*)columnHeaders { | 399 - (NSArray*)columnHeaders { |
| 400 if ([self internalRole] != ui::AX_ROLE_TABLE && | 400 if ([self internalRole] != ui::AX_ROLE_TABLE && |
| 401 [self internalRole] != ui::AX_ROLE_GRID) { | 401 [self internalRole] != ui::AX_ROLE_GRID) { |
| 402 return nil; | 402 return nil; |
| 403 } | 403 } |
| 404 | 404 |
| 405 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 405 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 406 const std::vector<int32>& uniqueCellIds = | 406 const std::vector<int32>& uniqueCellIds = |
| 407 browserAccessibility_->GetIntListAttribute( | 407 browserAccessibility_->GetIntListAttribute( |
| 408 ui::AX_ATTR_UNIQUE_CELL_IDS); | 408 ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 409 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 409 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 410 int id = uniqueCellIds[i]; | 410 int id = uniqueCellIds[i]; |
| 411 BrowserAccessibility* cell = | 411 BrowserAccessibility* cell = |
| 412 browserAccessibility_->manager()->GetFromRendererID(id); | 412 browserAccessibility_->manager()->GetFromRendererID(id); |
| 413 if (cell && cell->role() == ui::AX_ROLE_COLUMN_HEADER) | 413 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) |
| 414 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 414 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 415 } | 415 } |
| 416 return ret; | 416 return ret; |
| 417 } | 417 } |
| 418 | 418 |
| 419 - (NSValue*)columnIndexRange { | 419 - (NSValue*)columnIndexRange { |
| 420 if ([self internalRole] != ui::AX_ROLE_CELL) | 420 if ([self internalRole] != ui::AX_ROLE_CELL) |
| 421 return nil; | 421 return nil; |
| 422 | 422 |
| 423 int column = -1; | 423 int column = -1; |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 // The origin of this accessibility object in the page's document. | 644 // The origin of this accessibility object in the page's document. |
| 645 // This is relative to webkit's top-left origin, not Cocoa's | 645 // This is relative to webkit's top-left origin, not Cocoa's |
| 646 // bottom-left origin. | 646 // bottom-left origin. |
| 647 - (NSPoint)origin { | 647 - (NSPoint)origin { |
| 648 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); | 648 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); |
| 649 return NSMakePoint(bounds.x(), bounds.y()); | 649 return NSMakePoint(bounds.x(), bounds.y()); |
| 650 } | 650 } |
| 651 | 651 |
| 652 - (id)parent { | 652 - (id)parent { |
| 653 // A nil parent means we're the root. | 653 // A nil parent means we're the root. |
| 654 if (browserAccessibility_->parent()) { | 654 if (browserAccessibility_->GetParent()) { |
| 655 return NSAccessibilityUnignoredAncestor( | 655 return NSAccessibilityUnignoredAncestor( |
| 656 browserAccessibility_->parent()->ToBrowserAccessibilityCocoa()); | 656 browserAccessibility_->GetParent()->ToBrowserAccessibilityCocoa()); |
| 657 } else { | 657 } else { |
| 658 // Hook back up to RenderWidgetHostViewCocoa. | 658 // Hook back up to RenderWidgetHostViewCocoa. |
| 659 BrowserAccessibilityManagerMac* manager = | 659 BrowserAccessibilityManagerMac* manager = |
| 660 static_cast<BrowserAccessibilityManagerMac*>( | 660 static_cast<BrowserAccessibilityManagerMac*>( |
| 661 browserAccessibility_->manager()); | 661 browserAccessibility_->manager()); |
| 662 return manager->parent_view(); | 662 return manager->parent_view(); |
| 663 } | 663 } |
| 664 } | 664 } |
| 665 | 665 |
| 666 - (NSValue*)position { | 666 - (NSValue*)position { |
| 667 NSPoint origin = [self origin]; | 667 NSPoint origin = [self origin]; |
| 668 NSSize size = [[self size] sizeValue]; | 668 NSSize size = [[self size] sizeValue]; |
| 669 NSPoint pointInScreen = | 669 NSPoint pointInScreen = |
| 670 [delegate_ accessibilityPointInScreen:origin size:size]; | 670 [delegate_ accessibilityPointInScreen:origin size:size]; |
| 671 return [NSValue valueWithPoint:pointInScreen]; | 671 return [NSValue valueWithPoint:pointInScreen]; |
| 672 } | 672 } |
| 673 | 673 |
| 674 - (NSNumber*)required { | 674 - (NSNumber*)required { |
| 675 return [NSNumber numberWithBool: | 675 return [NSNumber numberWithBool: |
| 676 GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)]; | 676 GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)]; |
| 677 } | 677 } |
| 678 | 678 |
| 679 // Returns an enum indicating the role from browserAccessibility_. | 679 // Returns an enum indicating the role from browserAccessibility_. |
| 680 - (ui::AXRole)internalRole { | 680 - (ui::AXRole)internalRole { |
| 681 return static_cast<ui::AXRole>(browserAccessibility_->role()); | 681 return static_cast<ui::AXRole>(browserAccessibility_->GetRole()); |
| 682 } | 682 } |
| 683 | 683 |
| 684 // Returns a string indicating the NSAccessibility role of this object. | 684 // Returns a string indicating the NSAccessibility role of this object. |
| 685 - (NSString*)role { | 685 - (NSString*)role { |
| 686 ui::AXRole role = [self internalRole]; | 686 ui::AXRole role = [self internalRole]; |
| 687 if (role == ui::AX_ROLE_CANVAS && | 687 if (role == ui::AX_ROLE_CANVAS && |
| 688 browserAccessibility_->GetBoolAttribute( | 688 browserAccessibility_->GetBoolAttribute( |
| 689 ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { | 689 ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { |
| 690 return NSAccessibilityGroupRole; | 690 return NSAccessibilityGroupRole; |
| 691 } | 691 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 } | 764 } |
| 765 | 765 |
| 766 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 766 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 767 const std::vector<int32>& uniqueCellIds = | 767 const std::vector<int32>& uniqueCellIds = |
| 768 browserAccessibility_->GetIntListAttribute( | 768 browserAccessibility_->GetIntListAttribute( |
| 769 ui::AX_ATTR_UNIQUE_CELL_IDS); | 769 ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 770 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 770 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 771 int id = uniqueCellIds[i]; | 771 int id = uniqueCellIds[i]; |
| 772 BrowserAccessibility* cell = | 772 BrowserAccessibility* cell = |
| 773 browserAccessibility_->manager()->GetFromRendererID(id); | 773 browserAccessibility_->manager()->GetFromRendererID(id); |
| 774 if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER) | 774 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) |
| 775 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 775 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 776 } | 776 } |
| 777 return ret; | 777 return ret; |
| 778 } | 778 } |
| 779 | 779 |
| 780 - (NSValue*)rowIndexRange { | 780 - (NSValue*)rowIndexRange { |
| 781 if ([self internalRole] != ui::AX_ROLE_CELL) | 781 if ([self internalRole] != ui::AX_ROLE_CELL) |
| 782 return nil; | 782 return nil; |
| 783 | 783 |
| 784 int row = -1; | 784 int row = -1; |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 int num_rows = browserAccessibility_->GetIntAttribute( | 1108 int num_rows = browserAccessibility_->GetIntAttribute( |
| 1109 ui::AX_ATTR_TABLE_ROW_COUNT); | 1109 ui::AX_ATTR_TABLE_ROW_COUNT); |
| 1110 if (column < 0 || column >= num_columns || | 1110 if (column < 0 || column >= num_columns || |
| 1111 row < 0 || row >= num_rows) { | 1111 row < 0 || row >= num_rows) { |
| 1112 return nil; | 1112 return nil; |
| 1113 } | 1113 } |
| 1114 for (size_t i = 0; | 1114 for (size_t i = 0; |
| 1115 i < browserAccessibility_->PlatformChildCount(); | 1115 i < browserAccessibility_->PlatformChildCount(); |
| 1116 ++i) { | 1116 ++i) { |
| 1117 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); | 1117 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); |
| 1118 if (child->role() != ui::AX_ROLE_ROW) | 1118 if (child->GetRole() != ui::AX_ROLE_ROW) |
| 1119 continue; | 1119 continue; |
| 1120 int rowIndex; | 1120 int rowIndex; |
| 1121 if (!child->GetIntAttribute( | 1121 if (!child->GetIntAttribute( |
| 1122 ui::AX_ATTR_TABLE_ROW_INDEX, &rowIndex)) { | 1122 ui::AX_ATTR_TABLE_ROW_INDEX, &rowIndex)) { |
| 1123 continue; | 1123 continue; |
| 1124 } | 1124 } |
| 1125 if (rowIndex < row) | 1125 if (rowIndex < row) |
| 1126 continue; | 1126 continue; |
| 1127 if (rowIndex > row) | 1127 if (rowIndex > row) |
| 1128 break; | 1128 break; |
| 1129 for (size_t j = 0; | 1129 for (size_t j = 0; |
| 1130 j < child->PlatformChildCount(); | 1130 j < child->PlatformChildCount(); |
| 1131 ++j) { | 1131 ++j) { |
| 1132 BrowserAccessibility* cell = child->PlatformGetChild(j); | 1132 BrowserAccessibility* cell = child->PlatformGetChild(j); |
| 1133 if (cell->role() != ui::AX_ROLE_CELL) | 1133 if (cell->GetRole() != ui::AX_ROLE_CELL) |
| 1134 continue; | 1134 continue; |
| 1135 int colIndex; | 1135 int colIndex; |
| 1136 if (!cell->GetIntAttribute( | 1136 if (!cell->GetIntAttribute( |
| 1137 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, | 1137 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, |
| 1138 &colIndex)) { | 1138 &colIndex)) { |
| 1139 continue; | 1139 continue; |
| 1140 } | 1140 } |
| 1141 if (colIndex == column) | 1141 if (colIndex == column) |
| 1142 return cell->ToBrowserAccessibilityCocoa(); | 1142 return cell->ToBrowserAccessibilityCocoa(); |
| 1143 if (colIndex > column) | 1143 if (colIndex > column) |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1347 NSAccessibilityValueDescriptionAttribute, | 1347 NSAccessibilityValueDescriptionAttribute, |
| 1348 nil]]; | 1348 nil]]; |
| 1349 } else if ([subrole isEqualToString:NSAccessibilityOutlineRowSubrole]) { | 1349 } else if ([subrole isEqualToString:NSAccessibilityOutlineRowSubrole]) { |
| 1350 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1350 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
| 1351 NSAccessibilityDisclosingAttribute, | 1351 NSAccessibilityDisclosingAttribute, |
| 1352 NSAccessibilityDisclosedByRowAttribute, | 1352 NSAccessibilityDisclosedByRowAttribute, |
| 1353 NSAccessibilityDisclosureLevelAttribute, | 1353 NSAccessibilityDisclosureLevelAttribute, |
| 1354 NSAccessibilityDisclosedRowsAttribute, | 1354 NSAccessibilityDisclosedRowsAttribute, |
| 1355 nil]]; | 1355 nil]]; |
| 1356 } else if ([role isEqualToString:NSAccessibilityRowRole]) { | 1356 } else if ([role isEqualToString:NSAccessibilityRowRole]) { |
| 1357 if (browserAccessibility_->parent()) { | 1357 if (browserAccessibility_->GetParent()) { |
| 1358 base::string16 parentRole; | 1358 base::string16 parentRole; |
| 1359 browserAccessibility_->parent()->GetHtmlAttribute( | 1359 browserAccessibility_->GetParent()->GetHtmlAttribute( |
| 1360 "role", &parentRole); | 1360 "role", &parentRole); |
| 1361 const base::string16 treegridRole(base::ASCIIToUTF16("treegrid")); | 1361 const base::string16 treegridRole(base::ASCIIToUTF16("treegrid")); |
| 1362 if (parentRole == treegridRole) { | 1362 if (parentRole == treegridRole) { |
| 1363 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1363 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
| 1364 NSAccessibilityDisclosingAttribute, | 1364 NSAccessibilityDisclosingAttribute, |
| 1365 NSAccessibilityDisclosedByRowAttribute, | 1365 NSAccessibilityDisclosedByRowAttribute, |
| 1366 NSAccessibilityDisclosureLevelAttribute, | 1366 NSAccessibilityDisclosureLevelAttribute, |
| 1367 NSAccessibilityDisclosedRowsAttribute, | 1367 NSAccessibilityDisclosedRowsAttribute, |
| 1368 nil]]; | 1368 nil]]; |
| 1369 } else { | 1369 } else { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 } | 1450 } |
| 1451 | 1451 |
| 1452 // Performs the given accessibilty action on the webkit accessibility object | 1452 // Performs the given accessibilty action on the webkit accessibility object |
| 1453 // that backs this object. | 1453 // that backs this object. |
| 1454 - (void)accessibilityPerformAction:(NSString*)action { | 1454 - (void)accessibilityPerformAction:(NSString*)action { |
| 1455 if (!browserAccessibility_) | 1455 if (!browserAccessibility_) |
| 1456 return; | 1456 return; |
| 1457 | 1457 |
| 1458 // TODO(feldstein): Support more actions. | 1458 // TODO(feldstein): Support more actions. |
| 1459 if ([action isEqualToString:NSAccessibilityPressAction]) | 1459 if ([action isEqualToString:NSAccessibilityPressAction]) |
| 1460 [delegate_ doDefaultAction:browserAccessibility_->renderer_id()]; | 1460 [delegate_ doDefaultAction:browserAccessibility_->GetId()]; |
| 1461 else if ([action isEqualToString:NSAccessibilityShowMenuAction]) | 1461 else if ([action isEqualToString:NSAccessibilityShowMenuAction]) |
| 1462 [delegate_ performShowMenuAction:self]; | 1462 [delegate_ performShowMenuAction:self]; |
| 1463 } | 1463 } |
| 1464 | 1464 |
| 1465 // Returns the description of the given action. | 1465 // Returns the description of the given action. |
| 1466 - (NSString*)accessibilityActionDescription:(NSString*)action { | 1466 - (NSString*)accessibilityActionDescription:(NSString*)action { |
| 1467 if (!browserAccessibility_) | 1467 if (!browserAccessibility_) |
| 1468 return nil; | 1468 return nil; |
| 1469 | 1469 |
| 1470 return NSAccessibilityActionDescription(action); | 1470 return NSAccessibilityActionDescription(action); |
| 1471 } | 1471 } |
| 1472 | 1472 |
| 1473 // Sets an override value for a specific accessibility attribute. | 1473 // Sets an override value for a specific accessibility attribute. |
| 1474 // This class does not support this. | 1474 // This class does not support this. |
| 1475 - (BOOL)accessibilitySetOverrideValue:(id)value | 1475 - (BOOL)accessibilitySetOverrideValue:(id)value |
| 1476 forAttribute:(NSString*)attribute { | 1476 forAttribute:(NSString*)attribute { |
| 1477 return NO; | 1477 return NO; |
| 1478 } | 1478 } |
| 1479 | 1479 |
| 1480 // Sets the value for an accessibility attribute via the accessibility API. | 1480 // Sets the value for an accessibility attribute via the accessibility API. |
| 1481 - (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute { | 1481 - (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute { |
| 1482 if (!browserAccessibility_) | 1482 if (!browserAccessibility_) |
| 1483 return; | 1483 return; |
| 1484 | 1484 |
| 1485 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) { | 1485 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) { |
| 1486 NSNumber* focusedNumber = value; | 1486 NSNumber* focusedNumber = value; |
| 1487 BOOL focused = [focusedNumber intValue]; | 1487 BOOL focused = [focusedNumber intValue]; |
| 1488 [delegate_ setAccessibilityFocus:focused | 1488 [delegate_ setAccessibilityFocus:focused |
| 1489 accessibilityId:browserAccessibility_->renderer_id()]; | 1489 accessibilityId:browserAccessibility_->GetId()]; |
| 1490 } | 1490 } |
| 1491 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { | 1491 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { |
| 1492 NSRange range = [(NSValue*)value rangeValue]; | 1492 NSRange range = [(NSValue*)value rangeValue]; |
| 1493 [delegate_ | 1493 [delegate_ |
| 1494 accessibilitySetTextSelection:browserAccessibility_->renderer_id() | 1494 accessibilitySetTextSelection:browserAccessibility_->GetId() |
| 1495 startOffset:range.location | 1495 startOffset:range.location |
| 1496 endOffset:range.location + range.length]; | 1496 endOffset:range.location + range.length]; |
| 1497 } | 1497 } |
| 1498 } | 1498 } |
| 1499 | 1499 |
| 1500 // Returns the deepest accessibility child that should not be ignored. | 1500 // Returns the deepest accessibility child that should not be ignored. |
| 1501 // It is assumed that the hit test has been narrowed down to this object | 1501 // It is assumed that the hit test has been narrowed down to this object |
| 1502 // or one of its children, so this will never return nil unless this | 1502 // or one of its children, so this will never return nil unless this |
| 1503 // object is invalid. | 1503 // object is invalid. |
| 1504 - (id)accessibilityHitTest:(NSPoint)point { | 1504 - (id)accessibilityHitTest:(NSPoint)point { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1529 - (BOOL)isEqual:(id)object { | 1529 - (BOOL)isEqual:(id)object { |
| 1530 if (![object isKindOfClass:[BrowserAccessibilityCocoa class]]) | 1530 if (![object isKindOfClass:[BrowserAccessibilityCocoa class]]) |
| 1531 return NO; | 1531 return NO; |
| 1532 return ([self hash] == [object hash]); | 1532 return ([self hash] == [object hash]); |
| 1533 } | 1533 } |
| 1534 | 1534 |
| 1535 - (NSUInteger)hash { | 1535 - (NSUInteger)hash { |
| 1536 // Potentially called during dealloc. | 1536 // Potentially called during dealloc. |
| 1537 if (!browserAccessibility_) | 1537 if (!browserAccessibility_) |
| 1538 return [super hash]; | 1538 return [super hash]; |
| 1539 return browserAccessibility_->renderer_id(); | 1539 return browserAccessibility_->GetId(); |
| 1540 } | 1540 } |
| 1541 | 1541 |
| 1542 - (BOOL)accessibilityShouldUseUniqueId { | 1542 - (BOOL)accessibilityShouldUseUniqueId { |
| 1543 return YES; | 1543 return YES; |
| 1544 } | 1544 } |
| 1545 | 1545 |
| 1546 @end | 1546 @end |
| 1547 | 1547 |
| OLD | NEW |