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

Side by Side Diff: content/browser/accessibility/browser_accessibility_cocoa.mm

Issue 1435113003: Make use of new AX name calc in Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix issue with ariaTextAlternative Created 5 years, 1 month 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
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 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 - (NSArray*)columns { 545 - (NSArray*)columns {
546 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 546 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
547 for (BrowserAccessibilityCocoa* child in [self children]) { 547 for (BrowserAccessibilityCocoa* child in [self children]) {
548 if ([[child role] isEqualToString:NSAccessibilityColumnRole]) 548 if ([[child role] isEqualToString:NSAccessibilityColumnRole])
549 [ret addObject:child]; 549 [ret addObject:child];
550 } 550 }
551 return ret; 551 return ret;
552 } 552 }
553 553
554 - (NSString*)description { 554 - (NSString*)description {
555 std::string description; 555 // Mac OS X wants static text exposed in AXValue.
556 if (browserAccessibility_->GetStringAttribute( 556 if ([self shouldExposeNameInAXValue])
557 ui::AX_ATTR_DESCRIPTION, &description)) { 557 return @"";
558 return base::SysUTF8ToNSString(description); 558
559 // If the name came from a single related element and it's present in the
560 // tree, it will be exposed in AXTitleUIElement.
561 std::vector<int32> labelledby_ids =
562 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
563 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>(
564 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM));
565 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT &&
566 labelledby_ids.size() == 1 &&
567 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) {
568 return @"";
559 } 569 }
560 570
561 // If the role is anything other than an image, or if there's 571 std::string name = browserAccessibility_->GetStringAttribute(
562 // a title or title UI element, just return an empty string. 572 ui::AX_ATTR_NAME);
563 if (![[self role] isEqualToString:NSAccessibilityImageRole]) 573 if (!name.empty()) {
564 return @""; 574 // On Mac OS X, the accessible name of an object is exposed as its
565 if (browserAccessibility_->HasStringAttribute( 575 // title if it comes from visible text, and as its description
566 ui::AX_ATTR_NAME)) { 576 // otherwise, but never both.
567 return @""; 577 if (nameFrom == ui::AX_NAME_FROM_CONTENTS ||
578 nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT ||
579 nameFrom == ui::AX_NAME_FROM_VALUE) {
580 return @"";
581 } else {
582 return base::SysUTF8ToNSString(name);
583 }
568 } 584 }
569 if ([self titleUIElement])
570 return @"";
571 585
572 // The remaining case is an image where there's no other title. 586 // Given an image where there's no other title, return the base part
573 // Return the base part of the filename as the description. 587 // of the filename as the description.
574 std::string url; 588 if ([[self role] isEqualToString:NSAccessibilityImageRole]) {
575 if (browserAccessibility_->GetStringAttribute( 589 if (browserAccessibility_->HasStringAttribute(ui::AX_ATTR_NAME))
576 ui::AX_ATTR_URL, &url)) { 590 return @"";
577 // Given a url like http://foo.com/bar/baz.png, just return the 591 if ([self titleUIElement])
578 // base name, e.g., "baz.png". 592 return @"";
579 size_t leftIndex = url.rfind('/'); 593
580 std::string basename = 594 std::string url;
581 leftIndex != std::string::npos ? url.substr(leftIndex) : url; 595 if (browserAccessibility_->GetStringAttribute(
582 return base::SysUTF8ToNSString(basename); 596 ui::AX_ATTR_URL, &url)) {
597 // Given a url like http://foo.com/bar/baz.png, just return the
598 // base name, e.g., "baz.png".
599 size_t leftIndex = url.rfind('/');
600 std::string basename =
601 leftIndex != std::string::npos ? url.substr(leftIndex) : url;
602 return base::SysUTF8ToNSString(basename);
603 }
604 }
605
606 // If it's focusable but didn't have any other name or value, compute a name
607 // from its descendants.
608 std::string value = browserAccessibility_->GetStringAttribute(
609 ui::AX_ATTR_VALUE);
610 if (browserAccessibility_->HasState(ui::AX_STATE_FOCUSABLE) &&
611 !browserAccessibility_->IsControl() &&
612 value.empty() &&
613 [self internalRole] != ui::AX_ROLE_DATE_TIME &&
614 [self internalRole] != ui::AX_ROLE_WEB_AREA &&
615 [self internalRole] != ui::AX_ROLE_ROOT_WEB_AREA) {
616 return base::SysUTF8ToNSString(
617 browserAccessibility_->ComputeAccessibleNameFromDescendants());
583 } 618 }
584 619
585 return @""; 620 return @"";
586 } 621 }
587 622
588 - (NSNumber*)disclosing { 623 - (NSNumber*)disclosing {
589 if ([self internalRole] == ui::AX_ROLE_TREE_ITEM) { 624 if ([self internalRole] == ui::AX_ROLE_TREE_ITEM) {
590 return [NSNumber numberWithBool: 625 return [NSNumber numberWithBool:
591 GetState(browserAccessibility_, ui::AX_STATE_EXPANDED)]; 626 GetState(browserAccessibility_, ui::AX_STATE_EXPANDED)];
592 } else { 627 } else {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 BrowserAccessibility* headerObject = 707 BrowserAccessibility* headerObject =
673 browserAccessibility_->manager()->GetFromID(headerElementId); 708 browserAccessibility_->manager()->GetFromID(headerElementId);
674 if (headerObject) 709 if (headerObject)
675 return headerObject->ToBrowserAccessibilityCocoa(); 710 return headerObject->ToBrowserAccessibilityCocoa();
676 } 711 }
677 return nil; 712 return nil;
678 } 713 }
679 714
680 - (NSString*)help { 715 - (NSString*)help {
681 return NSStringForStringAttribute( 716 return NSStringForStringAttribute(
682 browserAccessibility_, ui::AX_ATTR_HELP); 717 browserAccessibility_, ui::AX_ATTR_DESCRIPTION);
683 } 718 }
684 719
685 - (NSNumber*)index { 720 - (NSNumber*)index {
686 if ([self internalRole] == ui::AX_ROLE_COLUMN) { 721 if ([self internalRole] == ui::AX_ROLE_COLUMN) {
687 int columnIndex = browserAccessibility_->GetIntAttribute( 722 int columnIndex = browserAccessibility_->GetIntAttribute(
688 ui::AX_ATTR_TABLE_COLUMN_INDEX); 723 ui::AX_ATTR_TABLE_COLUMN_INDEX);
689 return [NSNumber numberWithInt:columnIndex]; 724 return [NSNumber numberWithInt:columnIndex];
690 } else if ([self internalRole] == ui::AX_ROLE_ROW) { 725 } else if ([self internalRole] == ui::AX_ROLE_ROW) {
691 int rowIndex = browserAccessibility_->GetIntAttribute( 726 int rowIndex = browserAccessibility_->GetIntAttribute(
692 ui::AX_ATTR_TABLE_ROW_INDEX); 727 ui::AX_ATTR_TABLE_ROW_INDEX);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 return @"true"; 763 return @"true";
729 } 764 }
730 default: 765 default:
731 NOTREACHED(); 766 NOTREACHED();
732 } 767 }
733 768
734 return @"false"; 769 return @"false";
735 } 770 }
736 771
737 - (NSString*)placeholderValue { 772 - (NSString*)placeholderValue {
773 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>(
774 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM));
775 if (nameFrom == ui::AX_NAME_FROM_PLACEHOLDER) {
776 return NSStringForStringAttribute(
777 browserAccessibility_, ui::AX_ATTR_NAME);
778 }
779
780 ui::AXDescriptionFrom descriptionFrom = static_cast<ui::AXDescriptionFrom>(
781 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_DESCRIPTION_FROM));
782 if (descriptionFrom == ui::AX_DESCRIPTION_FROM_PLACEHOLDER) {
783 return NSStringForStringAttribute(
784 browserAccessibility_, ui::AX_ATTR_DESCRIPTION);
785 }
786
738 return NSStringForStringAttribute( 787 return NSStringForStringAttribute(
739 browserAccessibility_, ui::AX_ATTR_PLACEHOLDER); 788 browserAccessibility_, ui::AX_ATTR_PLACEHOLDER);
740 } 789 }
741 790
742 - (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute 791 - (void)addLinkedUIElementsFromAttribute:(ui::AXIntListAttribute)attribute
743 addTo:(NSMutableArray*)outArray { 792 addTo:(NSMutableArray*)outArray {
744 const std::vector<int32>& attributeValues = 793 const std::vector<int32>& attributeValues =
745 browserAccessibility_->GetIntListAttribute(attribute); 794 browserAccessibility_->GetIntListAttribute(attribute);
746 for (size_t i = 0; i < attributeValues.size(); ++i) { 795 for (size_t i = 0; i < attributeValues.size(); ++i) {
747 BrowserAccessibility* element = 796 BrowserAccessibility* element =
748 browserAccessibility_->manager()->GetFromID(attributeValues[i]); 797 browserAccessibility_->manager()->GetFromID(attributeValues[i]);
749 if (element) 798 if (element)
750 [outArray addObject:element->ToBrowserAccessibilityCocoa()]; 799 [outArray addObject:element->ToBrowserAccessibilityCocoa()];
751 } 800 }
752 } 801 }
753 802
754 - (NSArray*)linkedUIElements { 803 - (NSArray*)linkedUIElements {
755 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 804 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
756 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_OWNS_IDS addTo:ret];
757 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_CONTROLS_IDS addTo:ret]; 805 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_CONTROLS_IDS addTo:ret];
758 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_FLOWTO_IDS addTo:ret]; 806 [self addLinkedUIElementsFromAttribute:ui::AX_ATTR_FLOWTO_IDS addTo:ret];
759 if ([ret count] == 0) 807 if ([ret count] == 0)
760 return nil; 808 return nil;
761 return ret; 809 return ret;
762 } 810 }
763 811
764 - (NSNumber*)loaded { 812 - (NSNumber*)loaded {
765 return [NSNumber numberWithBool:YES]; 813 return [NSNumber numberWithBool:YES];
766 } 814 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 - (NSNumber*)required { 878 - (NSNumber*)required {
831 return [NSNumber numberWithBool: 879 return [NSNumber numberWithBool:
832 GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)]; 880 GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)];
833 } 881 }
834 882
835 // Returns an enum indicating the role from browserAccessibility_. 883 // Returns an enum indicating the role from browserAccessibility_.
836 - (ui::AXRole)internalRole { 884 - (ui::AXRole)internalRole {
837 return static_cast<ui::AXRole>(browserAccessibility_->GetRole()); 885 return static_cast<ui::AXRole>(browserAccessibility_->GetRole());
838 } 886 }
839 887
888 // Returns true if this should expose its accessible name in AXValue.
889 - (bool)shouldExposeNameInAXValue {
890 switch ([self internalRole]) {
891 case ui::AX_ROLE_LIST_BOX_OPTION:
892 case ui::AX_ROLE_LIST_MARKER:
893 case ui::AX_ROLE_MENU_LIST_OPTION:
894 case ui::AX_ROLE_STATIC_TEXT:
895 return true;
896 default:
897 return false;
898 }
899 }
900
840 - (content::BrowserAccessibilityDelegate*)delegate { 901 - (content::BrowserAccessibilityDelegate*)delegate {
841 return browserAccessibility_->manager() ? 902 return browserAccessibility_->manager() ?
842 browserAccessibility_->manager()->delegate() : 903 browserAccessibility_->manager()->delegate() :
843 nil; 904 nil;
844 } 905 }
845 906
846 - (content::BrowserAccessibility*)browserAccessibility { 907 - (content::BrowserAccessibility*)browserAccessibility {
847 return browserAccessibility_; 908 return browserAccessibility_;
848 } 909 }
849 910
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 for (uint i=0; i < [[self children] count]; ++i) { 1231 for (uint i=0; i < [[self children] count]; ++i) {
1171 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; 1232 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs];
1172 if ([tabChildren count] > 0) 1233 if ([tabChildren count] > 0)
1173 [tabSubtree addObjectsFromArray:tabChildren]; 1234 [tabSubtree addObjectsFromArray:tabChildren];
1174 } 1235 }
1175 1236
1176 return tabSubtree; 1237 return tabSubtree;
1177 } 1238 }
1178 1239
1179 - (NSString*)title { 1240 - (NSString*)title {
1180 return NSStringForStringAttribute( 1241 // Mac OS X wants static text exposed in AXValue.
1181 browserAccessibility_, ui::AX_ATTR_NAME); 1242 if ([self shouldExposeNameInAXValue])
1243 return @"";
1244
1245 // If the name came from a single related element and it's present in the
1246 // tree, it will be exposed in AXTitleUIElement.
1247 std::vector<int32> labelledby_ids =
1248 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
1249 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>(
1250 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM));
1251 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT &&
1252 labelledby_ids.size() == 1 &&
1253 browserAccessibility_->manager()->GetFromID(labelledby_ids[0])) {
1254 return @"";
1255 }
1256
1257 // On Mac OS X, the accessible name of an object is exposed as its
1258 // title if it comes from visible text, and as its description
1259 // otherwise, but never both.
1260 if (nameFrom == ui::AX_NAME_FROM_CONTENTS ||
1261 nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT ||
1262 nameFrom == ui::AX_NAME_FROM_VALUE) {
1263 return NSStringForStringAttribute(
1264 browserAccessibility_, ui::AX_ATTR_NAME);
1265 }
1266
1267 return nil;
1182 } 1268 }
1183 1269
1184 - (id)titleUIElement { 1270 - (id)titleUIElement {
1185 int titleElementId;
1186 if (browserAccessibility_->GetIntAttribute(
1187 ui::AX_ATTR_TITLE_UI_ELEMENT, &titleElementId)) {
1188 BrowserAccessibility* titleElement =
1189 browserAccessibility_->manager()->GetFromID(titleElementId);
1190 if (titleElement)
1191 return titleElement->ToBrowserAccessibilityCocoa();
1192 }
1193 std::vector<int32> labelledby_ids = 1271 std::vector<int32> labelledby_ids =
1194 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS); 1272 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
1195 if (labelledby_ids.size() == 1) { 1273 ui::AXNameFrom nameFrom = static_cast<ui::AXNameFrom>(
1274 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_NAME_FROM));
1275 if (nameFrom == ui::AX_NAME_FROM_RELATED_ELEMENT &&
1276 labelledby_ids.size() == 1) {
1196 BrowserAccessibility* titleElement = 1277 BrowserAccessibility* titleElement =
1197 browserAccessibility_->manager()->GetFromID(labelledby_ids[0]); 1278 browserAccessibility_->manager()->GetFromID(labelledby_ids[0]);
1198 if (titleElement) 1279 if (titleElement)
1199 return titleElement->ToBrowserAccessibilityCocoa(); 1280 return titleElement->ToBrowserAccessibilityCocoa();
1200 } 1281 }
1201 1282
1202 return nil; 1283 return nil;
1203 } 1284 }
1204 1285
1205 - (NSURL*)url { 1286 - (NSURL*)url {
1206 std::string url; 1287 std::string url;
1207 if ([[self role] isEqualToString:@"AXWebArea"]) 1288 if ([[self role] isEqualToString:@"AXWebArea"])
1208 url = browserAccessibility_->manager()->GetTreeData().url; 1289 url = browserAccessibility_->manager()->GetTreeData().url;
1209 else 1290 else
1210 url = browserAccessibility_->GetStringAttribute(ui::AX_ATTR_URL); 1291 url = browserAccessibility_->GetStringAttribute(ui::AX_ATTR_URL);
1211 1292
1212 if (url.empty()) 1293 if (url.empty())
1213 return nil; 1294 return nil;
1214 1295
1215 return [NSURL URLWithString:(base::SysUTF8ToNSString(url))]; 1296 return [NSURL URLWithString:(base::SysUTF8ToNSString(url))];
1216 } 1297 }
1217 1298
1218 - (id)value { 1299 - (id)value {
1219 // WebCore uses an attachmentView to get the below behavior.
1220 // We do not have any native views backing this object, so need
1221 // to approximate Cocoa ax behavior best as we can.
1222 NSString* role = [self role]; 1300 NSString* role = [self role];
1223 if ([role isEqualToString:@"AXHeading"]) { 1301 if ([self shouldExposeNameInAXValue]) {
1302 return NSStringForStringAttribute(
1303 browserAccessibility_, ui::AX_ATTR_NAME);
1304 } else if ([role isEqualToString:@"AXHeading"]) {
1224 int level = 0; 1305 int level = 0;
1225 if (browserAccessibility_->GetIntAttribute( 1306 if (browserAccessibility_->GetIntAttribute(
1226 ui::AX_ATTR_HIERARCHICAL_LEVEL, &level)) { 1307 ui::AX_ATTR_HIERARCHICAL_LEVEL, &level)) {
1227 return [NSNumber numberWithInt:level]; 1308 return [NSNumber numberWithInt:level];
1228 } 1309 }
1229 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { 1310 } else if ([role isEqualToString:NSAccessibilityButtonRole]) {
1230 // AXValue does not make sense for pure buttons. 1311 // AXValue does not make sense for pure buttons.
1231 return @""; 1312 return @"";
1232 } else if ([self internalRole] == ui::AX_ROLE_TOGGLE_BUTTON) { 1313 } else if ([self internalRole] == ui::AX_ROLE_TOGGLE_BUTTON) {
1233 int value = 0; 1314 int value = 0;
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 [ret addObjectsFromArray:[NSArray arrayWithObjects: 1909 [ret addObjectsFromArray:[NSArray arrayWithObjects:
1829 NSAccessibilityPlaceholderValueAttribute, nil]]; 1910 NSAccessibilityPlaceholderValueAttribute, nil]];
1830 } 1911 }
1831 1912
1832 if (GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)) { 1913 if (GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)) {
1833 [ret addObjectsFromArray:[NSArray arrayWithObjects: 1914 [ret addObjectsFromArray:[NSArray arrayWithObjects:
1834 @"AXRequired", nil]]; 1915 @"AXRequired", nil]];
1835 } 1916 }
1836 1917
1837 // Title UI Element. 1918 // Title UI Element.
1838 if (browserAccessibility_->HasIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT) || 1919 if (browserAccessibility_->HasIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS) &&
1839 (browserAccessibility_->HasIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS) && 1920 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS)
1840 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS) 1921 .size() > 0) {
1841 .size() == 1)) {
1842 [ret addObjectsFromArray:[NSArray arrayWithObjects: 1922 [ret addObjectsFromArray:[NSArray arrayWithObjects:
1843 NSAccessibilityTitleUIElementAttribute, 1923 NSAccessibilityTitleUIElementAttribute,
1844 nil]]; 1924 nil]];
1845 } 1925 }
1846 // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute 1926 // TODO(aboxhall): expose NSAccessibilityServesAsTitleForUIElementsAttribute
1847 // for elements which are referred to by labelledby or are labels 1927 // for elements which are referred to by labelledby or are labels
1848 1928
1849 return ret; 1929 return ret;
1850 } 1930 }
1851 1931
(...skipping 11 matching lines...) Expand all
1863 return NSNotFound; 1943 return NSNotFound;
1864 } 1944 }
1865 1945
1866 // Returns whether or not the specified attribute can be set by the 1946 // Returns whether or not the specified attribute can be set by the
1867 // accessibility API via |accessibilitySetValue:forAttribute:|. 1947 // accessibility API via |accessibilitySetValue:forAttribute:|.
1868 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { 1948 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute {
1869 if (!browserAccessibility_) 1949 if (!browserAccessibility_)
1870 return NO; 1950 return NO;
1871 1951
1872 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) 1952 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
1873 return GetState(browserAccessibility_, 1953 if ([self internalRole] == ui::AX_ROLE_DATE_TIME)
1874 ui::AX_STATE_FOCUSABLE); 1954 return NO;
1955 return GetState(browserAccessibility_, ui::AX_STATE_FOCUSABLE);
1875 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { 1956 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
1876 return browserAccessibility_->GetBoolAttribute( 1957 return browserAccessibility_->GetBoolAttribute(
1877 ui::AX_ATTR_CAN_SET_VALUE); 1958 ui::AX_ATTR_CAN_SET_VALUE);
1878 } 1959 }
1879 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && 1960 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] &&
1880 browserAccessibility_->IsEditableText()) 1961 browserAccessibility_->IsEditableText())
1881 return YES; 1962 return YES;
1882 1963
1883 return NO; 1964 return NO;
1884 } 1965 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1983 if (!browserAccessibility_) 2064 if (!browserAccessibility_)
1984 return [super hash]; 2065 return [super hash];
1985 return browserAccessibility_->GetId(); 2066 return browserAccessibility_->GetId();
1986 } 2067 }
1987 2068
1988 - (BOOL)accessibilityShouldUseUniqueId { 2069 - (BOOL)accessibilityShouldUseUniqueId {
1989 return YES; 2070 return YES;
1990 } 2071 }
1991 2072
1992 @end 2073 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698