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

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

Issue 184103036: Follow ARIA spec guidelines for role=button with aria-pressed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unused include of string_util.h in browser_accessibility_cocoa.mm 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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 { ui::AX_ROLE_SVG_ROOT, NSAccessibilityGroupRole }, 141 { ui::AX_ROLE_SVG_ROOT, NSAccessibilityGroupRole },
142 { ui::AX_ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole }, 142 { ui::AX_ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
143 { ui::AX_ROLE_TAB, NSAccessibilityRadioButtonRole }, 143 { ui::AX_ROLE_TAB, NSAccessibilityRadioButtonRole },
144 { ui::AX_ROLE_TABLE, NSAccessibilityTableRole }, 144 { ui::AX_ROLE_TABLE, NSAccessibilityTableRole },
145 { ui::AX_ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole }, 145 { ui::AX_ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
146 { ui::AX_ROLE_TAB_LIST, NSAccessibilityTabGroupRole }, 146 { ui::AX_ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
147 { ui::AX_ROLE_TAB_PANEL, NSAccessibilityGroupRole }, 147 { ui::AX_ROLE_TAB_PANEL, NSAccessibilityGroupRole },
148 { ui::AX_ROLE_TEXT_AREA, NSAccessibilityTextAreaRole }, 148 { ui::AX_ROLE_TEXT_AREA, NSAccessibilityTextAreaRole },
149 { ui::AX_ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole }, 149 { ui::AX_ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
150 { ui::AX_ROLE_TIMER, NSAccessibilityGroupRole }, 150 { ui::AX_ROLE_TIMER, NSAccessibilityGroupRole },
151 { ui::AX_ROLE_TOGGLE_BUTTON, NSAccessibilityButtonRole }, 151 { ui::AX_ROLE_TOGGLE_BUTTON, NSAccessibilityCheckBoxRole },
152 { ui::AX_ROLE_TOOLBAR, NSAccessibilityToolbarRole }, 152 { ui::AX_ROLE_TOOLBAR, NSAccessibilityToolbarRole },
153 { ui::AX_ROLE_TOOLTIP, NSAccessibilityGroupRole }, 153 { ui::AX_ROLE_TOOLTIP, NSAccessibilityGroupRole },
154 { ui::AX_ROLE_TREE, NSAccessibilityOutlineRole }, 154 { ui::AX_ROLE_TREE, NSAccessibilityOutlineRole },
155 { ui::AX_ROLE_TREE_GRID, NSAccessibilityTableRole }, 155 { ui::AX_ROLE_TREE_GRID, NSAccessibilityTableRole },
156 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityRowRole }, 156 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityRowRole },
157 { ui::AX_ROLE_VALUE_INDICATOR, NSAccessibilityValueIndicatorRole }, 157 { ui::AX_ROLE_VALUE_INDICATOR, NSAccessibilityValueIndicatorRole },
158 { ui::AX_ROLE_WEB_AREA, @"AXWebArea" }, 158 { ui::AX_ROLE_WEB_AREA, @"AXWebArea" },
159 { ui::AX_ROLE_WINDOW, NSAccessibilityWindowRole }, 159 { ui::AX_ROLE_WINDOW, NSAccessibilityWindowRole },
160 160
161 // TODO(dtseng): we don't correctly support the attributes for these roles. 161 // TODO(dtseng): we don't correctly support the attributes for these roles.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 { ui::AX_ROLE_NAVIGATION, @"AXLandmarkNavigation" }, 199 { ui::AX_ROLE_NAVIGATION, @"AXLandmarkNavigation" },
200 { ui::AX_ROLE_SEARCH, @"AXLandmarkSearch" }, 200 { ui::AX_ROLE_SEARCH, @"AXLandmarkSearch" },
201 { ui::AX_ROLE_LOG, @"AXApplicationLog" }, 201 { ui::AX_ROLE_LOG, @"AXApplicationLog" },
202 { ui::AX_ROLE_MARQUEE, @"AXApplicationMarquee" }, 202 { ui::AX_ROLE_MARQUEE, @"AXApplicationMarquee" },
203 { ui::AX_ROLE_MATH, @"AXDocumentMath" }, 203 { ui::AX_ROLE_MATH, @"AXDocumentMath" },
204 { ui::AX_ROLE_NOTE, @"AXDocumentNote" }, 204 { ui::AX_ROLE_NOTE, @"AXDocumentNote" },
205 { ui::AX_ROLE_REGION, @"AXDocumentRegion" }, 205 { ui::AX_ROLE_REGION, @"AXDocumentRegion" },
206 { ui::AX_ROLE_STATUS, @"AXApplicationStatus" }, 206 { ui::AX_ROLE_STATUS, @"AXApplicationStatus" },
207 { ui::AX_ROLE_TAB_PANEL, @"AXTabPanel" }, 207 { ui::AX_ROLE_TAB_PANEL, @"AXTabPanel" },
208 { ui::AX_ROLE_TIMER, @"AXApplicationTimer" }, 208 { ui::AX_ROLE_TIMER, @"AXApplicationTimer" },
209 { ui::AX_ROLE_TOGGLE_BUTTON, @"AXToggleButton" },
209 { ui::AX_ROLE_TOOLTIP, @"AXUserInterfaceTooltip" }, 210 { ui::AX_ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
210 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole }, 211 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
211 }; 212 };
212 213
213 RoleMap subrole_map; 214 RoleMap subrole_map;
214 for (size_t i = 0; i < arraysize(subroles); ++i) 215 for (size_t i = 0; i < arraysize(subroles); ++i)
215 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; 216 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue;
216 return subrole_map; 217 return subrole_map;
217 } 218 }
218 219
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 } 657 }
657 658
658 // Returns a string indicating the NSAccessibility role of this object. 659 // Returns a string indicating the NSAccessibility role of this object.
659 - (NSString*)role { 660 - (NSString*)role {
660 ui::AXRole role = [self internalRole]; 661 ui::AXRole role = [self internalRole];
661 if (role == ui::AX_ROLE_CANVAS && 662 if (role == ui::AX_ROLE_CANVAS &&
662 browserAccessibility_->GetBoolAttribute( 663 browserAccessibility_->GetBoolAttribute(
663 ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { 664 ui::AX_ATTR_CANVAS_HAS_FALLBACK)) {
664 return NSAccessibilityGroupRole; 665 return NSAccessibilityGroupRole;
665 } 666 }
667 if (role == ui::AX_ROLE_BUTTON) {
668 bool is_aria_pressed_defined;
dmazzoni 2014/03/06 06:09:09 Nit: Obj-C files use camelCase for local variables
aboxhall 2014/03/06 17:45:58 Done.
669 bool is_mixed;
670 browserAccessibility_->GetAriaTristate("aria-pressed",
671 &is_aria_pressed_defined,
672 &is_mixed);
673 if (is_aria_pressed_defined)
674 return NSAccessibilityCheckBoxRole;
675 else
676 return NSAccessibilityButtonRole;
677 }
666 return NativeRoleFromAXRole(role); 678 return NativeRoleFromAXRole(role);
667 } 679 }
668 680
669 // Returns a string indicating the role description of this object. 681 // Returns a string indicating the role description of this object.
670 - (NSString*)roleDescription { 682 - (NSString*)roleDescription {
671 NSString* role = [self role]; 683 NSString* role = [self role];
672 684
673 ContentClient* content_client = content::GetContentClient(); 685 ContentClient* content_client = content::GetContentClient();
674 686
675 // The following descriptions are specific to webkit. 687 // The following descriptions are specific to webkit.
(...skipping 27 matching lines...) Expand all
703 } 715 }
704 716
705 switch([self internalRole]) { 717 switch([self internalRole]) {
706 case ui::AX_ROLE_FOOTER: 718 case ui::AX_ROLE_FOOTER:
707 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 719 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
708 IDS_AX_ROLE_FOOTER)); 720 IDS_AX_ROLE_FOOTER));
709 case ui::AX_ROLE_SPIN_BUTTON: 721 case ui::AX_ROLE_SPIN_BUTTON:
710 // This control is similar to what VoiceOver calls a "stepper". 722 // This control is similar to what VoiceOver calls a "stepper".
711 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 723 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
712 IDS_AX_ROLE_STEPPER)); 724 IDS_AX_ROLE_STEPPER));
725 case ui::AX_ROLE_TOGGLE_BUTTON:
726 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
727 IDS_AX_ROLE_TOGGLE_BUTTON));
713 default: 728 default:
714 break; 729 break;
715 } 730 }
716 731
717 return NSAccessibilityRoleDescription(role, nil); 732 return NSAccessibilityRoleDescription(role, nil);
718 } 733 }
719 734
720 - (NSArray*)rowHeaders { 735 - (NSArray*)rowHeaders {
721 if ([self internalRole] != ui::AX_ROLE_TABLE && 736 if ([self internalRole] != ui::AX_ROLE_TABLE &&
722 [self internalRole] != ui::AX_ROLE_GRID) { 737 [self internalRole] != ui::AX_ROLE_GRID) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 value = GetState( 884 value = GetState(
870 browserAccessibility_, ui::AX_STATE_SELECTED) ? 885 browserAccessibility_, ui::AX_STATE_SELECTED) ?
871 1 : 886 1 :
872 value; 887 value;
873 888
874 if (browserAccessibility_->GetBoolAttribute( 889 if (browserAccessibility_->GetBoolAttribute(
875 ui::AX_ATTR_BUTTON_MIXED)) { 890 ui::AX_ATTR_BUTTON_MIXED)) {
876 value = 2; 891 value = 2;
877 } 892 }
878 return [NSNumber numberWithInt:value]; 893 return [NSNumber numberWithInt:value];
894 } else if ([self internalRole] == ui::AX_ROLE_TOGGLE_BUTTON) {
895 int value = 0;
896 bool aria_pressed_defined;
897 bool aria_pressed_mixed;
898 value = browserAccessibility_->GetAriaTristate(
899 "aria-pressed", &aria_pressed_defined, &aria_pressed_mixed) ? 1 : 0;
900
901 if (aria_pressed_mixed)
902 value = 2;
903
904 return [NSNumber numberWithInt:value];
905
879 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || 906 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] ||
880 [role isEqualToString:NSAccessibilitySliderRole] || 907 [role isEqualToString:NSAccessibilitySliderRole] ||
881 [role isEqualToString:NSAccessibilityScrollBarRole]) { 908 [role isEqualToString:NSAccessibilityScrollBarRole]) {
882 float floatValue; 909 float floatValue;
883 if (browserAccessibility_->GetFloatAttribute( 910 if (browserAccessibility_->GetFloatAttribute(
884 ui::AX_ATTR_VALUE_FOR_RANGE, &floatValue)) { 911 ui::AX_ATTR_VALUE_FOR_RANGE, &floatValue)) {
885 return [NSNumber numberWithFloat:floatValue]; 912 return [NSNumber numberWithFloat:floatValue];
886 } 913 }
887 } else if ([role isEqualToString:NSAccessibilityColorWellRole]) { 914 } else if ([role isEqualToString:NSAccessibilityColorWellRole]) {
888 int r = browserAccessibility_->GetIntAttribute( 915 int r = browserAccessibility_->GetIntAttribute(
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 return [super hash]; 1499 return [super hash];
1473 return browserAccessibility_->renderer_id(); 1500 return browserAccessibility_->renderer_id();
1474 } 1501 }
1475 1502
1476 - (BOOL)accessibilityShouldUseUniqueId { 1503 - (BOOL)accessibilityShouldUseUniqueId {
1477 return YES; 1504 return YES;
1478 } 1505 }
1479 1506
1480 @end 1507 @end
1481 1508
OLDNEW
« no previous file with comments | « no previous file | content/test/data/accessibility/aria-pressed.html » ('j') | webkit/glue/webkit_strings.grd » ('J')

Powered by Google App Engine
This is Rietveld 408576698