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

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

Issue 1057083002: Fix menu list and list box screen reader accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix on Mac too Created 5 years, 8 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
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 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; 751 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()];
752 } 752 }
753 } 753 }
754 754
755 return ret; 755 return ret;
756 } 756 }
757 757
758 - (NSArray*)selectedChildren { 758 - (NSArray*)selectedChildren {
759 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 759 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
760 760
761 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); 761 // If it's not multiselectable, try to skip iterating over the
762 BrowserAccessibility* focusedChild = 762 // children.
763 manager->GetFocus(browserAccessibility_); 763 if (!GetState(browserAccessibility_, ui::AX_STATE_MULTISELECTABLE)) {
764 if (focusedChild && focusedChild != browserAccessibility_) {
765 // First try the focused child. 764 // First try the focused child.
766 [ret addObject:focusedChild->ToBrowserAccessibilityCocoa()]; 765 BrowserAccessibilityManager* manager = browserAccessibility_->manager();
767 } else { 766 BrowserAccessibility* focusedChild =
767 manager->GetFocus(browserAccessibility_);
768 if (focusedChild && focusedChild != browserAccessibility_) {
769 [ret addObject:focusedChild->ToBrowserAccessibilityCocoa()];
770 return ret;
771 }
772
768 // Next try the active descendant. 773 // Next try the active descendant.
769 int activeDescendantId; 774 int activeDescendantId;
770 if (browserAccessibility_->GetIntAttribute( 775 if (browserAccessibility_->GetIntAttribute(
771 ui::AX_ATTR_ACTIVEDESCENDANT_ID, &activeDescendantId)) { 776 ui::AX_ATTR_ACTIVEDESCENDANT_ID, &activeDescendantId)) {
772 BrowserAccessibility* activeDescendant = 777 BrowserAccessibility* activeDescendant =
773 manager->GetFromID(activeDescendantId); 778 manager->GetFromID(activeDescendantId);
774 if (activeDescendant) 779 if (activeDescendant) {
775 [ret addObject:activeDescendant->ToBrowserAccessibilityCocoa()]; 780 [ret addObject:activeDescendant->ToBrowserAccessibilityCocoa()];
776 } else { 781 return ret;
777 // Otherwise return any children with the "selected" state, which
778 // may come from aria-selected.
779 uint32 childCount = browserAccessibility_->PlatformChildCount();
780 for (uint32 index = 0; index < childCount; ++index) {
781 BrowserAccessibility* child =
782 browserAccessibility_->PlatformGetChild(index);
783 if (child->HasState(ui::AX_STATE_SELECTED))
784 [ret addObject:child->ToBrowserAccessibilityCocoa()];
785 } 782 }
786 } 783 }
787 } 784 }
788 785
786 // If it's multiselectable or if the previous attempts failed,
787 // return any children with the "selected" state, which may
788 // come from aria-selected.
789 uint32 childCount = browserAccessibility_->PlatformChildCount();
790 for (uint32 index = 0; index < childCount; ++index) {
791 BrowserAccessibility* child =
792 browserAccessibility_->PlatformGetChild(index);
793 if (child->HasState(ui::AX_STATE_SELECTED))
794 [ret addObject:child->ToBrowserAccessibilityCocoa()];
795 }
796
789 return ret; 797 return ret;
790 } 798 }
791 799
792 // Returns the size of this object. 800 // Returns the size of this object.
793 - (NSValue*)size { 801 - (NSValue*)size {
794 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); 802 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect();
795 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; 803 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())];
796 } 804 }
797 805
798 - (NSString*)sortDirection { 806 - (NSString*)sortDirection {
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 if (!browserAccessibility_) 1632 if (!browserAccessibility_)
1625 return [super hash]; 1633 return [super hash];
1626 return browserAccessibility_->GetId(); 1634 return browserAccessibility_->GetId();
1627 } 1635 }
1628 1636
1629 - (BOOL)accessibilityShouldUseUniqueId { 1637 - (BOOL)accessibilityShouldUseUniqueId {
1630 return YES; 1638 return YES;
1631 } 1639 }
1632 1640
1633 @end 1641 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698