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

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

Issue 2962453002: Move AX Role predicates into ax_role_properties.h. (Closed)
Patch Set: Android Created 3 years, 5 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 #import "content/browser/accessibility/browser_accessibility_cocoa.h" 5 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
6 6
7 #include <execinfo.h> 7 #include <execinfo.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <string.h> 10 #include <string.h>
11 11
12 #include <map> 12 #include <map>
13 #include <memory> 13 #include <memory>
14 #include <utility> 14 #include <utility>
15 15
16 #include "base/mac/foundation_util.h" 16 #include "base/mac/foundation_util.h"
17 #include "base/mac/scoped_cftyperef.h" 17 #include "base/mac/scoped_cftyperef.h"
18 #include "base/strings/string16.h" 18 #include "base/strings/string16.h"
19 #include "base/strings/sys_string_conversions.h" 19 #include "base/strings/sys_string_conversions.h"
20 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
21 #include "content/app/strings/grit/content_strings.h" 21 #include "content/app/strings/grit/content_strings.h"
22 #include "content/browser/accessibility/ax_platform_position.h" 22 #include "content/browser/accessibility/ax_platform_position.h"
23 #include "content/browser/accessibility/browser_accessibility_mac.h" 23 #include "content/browser/accessibility/browser_accessibility_mac.h"
24 #include "content/browser/accessibility/browser_accessibility_manager.h" 24 #include "content/browser/accessibility/browser_accessibility_manager.h"
25 #include "content/browser/accessibility/browser_accessibility_manager_mac.h" 25 #include "content/browser/accessibility/browser_accessibility_manager_mac.h"
26 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h" 26 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h"
27 #include "content/public/common/content_client.h" 27 #include "content/public/common/content_client.h"
28 #include "third_party/skia/include/core/SkColor.h" 28 #include "third_party/skia/include/core/SkColor.h"
29 #include "ui/accessibility/ax_range.h" 29 #include "ui/accessibility/ax_range.h"
30 #include "ui/accessibility/ax_role_properties.h"
31
30 #import "ui/accessibility/platform/ax_platform_node_mac.h" 32 #import "ui/accessibility/platform/ax_platform_node_mac.h"
31 33
32 using AXPlatformPositionInstance = 34 using AXPlatformPositionInstance =
33 content::AXPlatformPosition::AXPositionInstance; 35 content::AXPlatformPosition::AXPositionInstance;
34 using AXPlatformRange = ui::AXRange<AXPlatformPositionInstance::element_type>; 36 using AXPlatformRange = ui::AXRange<AXPlatformPositionInstance::element_type>;
35 using AXTextMarkerRangeRef = CFTypeRef; 37 using AXTextMarkerRangeRef = CFTypeRef;
36 using AXTextMarkerRef = CFTypeRef; 38 using AXTextMarkerRef = CFTypeRef;
37 using StringAttribute = ui::AXStringAttribute; 39 using StringAttribute = ui::AXStringAttribute;
38 using content::AXPlatformPosition; 40 using content::AXPlatformPosition;
39 using content::AccessibilityMatchPredicate; 41 using content::AccessibilityMatchPredicate;
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 } 652 }
651 653
652 - (NSNumber*)ariaBusy { 654 - (NSNumber*)ariaBusy {
653 if (![self instanceActive]) 655 if (![self instanceActive])
654 return nil; 656 return nil;
655 return [NSNumber numberWithBool: 657 return [NSNumber numberWithBool:
656 GetState(browserAccessibility_, ui::AX_STATE_BUSY)]; 658 GetState(browserAccessibility_, ui::AX_STATE_BUSY)];
657 } 659 }
658 660
659 - (NSNumber*)ariaColumnCount { 661 - (NSNumber*)ariaColumnCount {
660 if (!browserAccessibility_->IsTableLikeRole()) 662 if (!ui::IsTableLikeRole(browserAccessibility_->GetRole()))
661 return nil; 663 return nil;
662 int count = -1; 664 int count = -1;
663 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_COLUMN_COUNT, 665 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_COLUMN_COUNT,
664 &count)) { 666 &count)) {
665 return nil; 667 return nil;
666 } 668 }
667 return [NSNumber numberWithInt:count]; 669 return [NSNumber numberWithInt:count];
668 } 670 }
669 671
670 - (NSNumber*)ariaColumnIndex { 672 - (NSNumber*)ariaColumnIndex {
671 if (!browserAccessibility_->IsCellOrTableHeaderRole()) 673 if (!ui::IsCellOrTableHeaderRole(browserAccessibility_->GetRole()))
672 return nil; 674 return nil;
673 int index = -1; 675 int index = -1;
674 if (!browserAccessibility_->GetIntAttribute( 676 if (!browserAccessibility_->GetIntAttribute(
675 ui::AX_ATTR_ARIA_CELL_COLUMN_INDEX, &index)) { 677 ui::AX_ATTR_ARIA_CELL_COLUMN_INDEX, &index)) {
676 return nil; 678 return nil;
677 } 679 }
678 return [NSNumber numberWithInt:index]; 680 return [NSNumber numberWithInt:index];
679 } 681 }
680 682
681 - (NSString*)ariaLive { 683 - (NSString*)ariaLive {
(...skipping 11 matching lines...) Expand all
693 } 695 }
694 696
695 - (NSString*)ariaRelevant { 697 - (NSString*)ariaRelevant {
696 if (![self instanceActive]) 698 if (![self instanceActive])
697 return nil; 699 return nil;
698 return NSStringForStringAttribute(browserAccessibility_, 700 return NSStringForStringAttribute(browserAccessibility_,
699 ui::AX_ATTR_LIVE_RELEVANT); 701 ui::AX_ATTR_LIVE_RELEVANT);
700 } 702 }
701 703
702 - (NSNumber*)ariaRowCount { 704 - (NSNumber*)ariaRowCount {
703 if (!browserAccessibility_->IsTableLikeRole()) 705 if (!ui::IsTableLikeRole(browserAccessibility_->GetRole()))
704 return nil; 706 return nil;
705 int count = -1; 707 int count = -1;
706 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_ROW_COUNT, 708 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_ROW_COUNT,
707 &count)) { 709 &count)) {
708 return nil; 710 return nil;
709 } 711 }
710 return [NSNumber numberWithInt:count]; 712 return [NSNumber numberWithInt:count];
711 } 713 }
712 714
713 - (NSNumber*)ariaRowIndex { 715 - (NSNumber*)ariaRowIndex {
714 if (!browserAccessibility_->IsCellOrTableHeaderRole()) 716 if (!ui::IsCellOrTableHeaderRole(browserAccessibility_->GetRole()))
715 return nil; 717 return nil;
716 int index = -1; 718 int index = -1;
717 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_CELL_ROW_INDEX, 719 if (!browserAccessibility_->GetIntAttribute(ui::AX_ATTR_ARIA_CELL_ROW_INDEX,
718 &index)) { 720 &index)) {
719 return nil; 721 return nil;
720 } 722 }
721 return [NSNumber numberWithInt:index]; 723 return [NSNumber numberWithInt:index];
722 } 724 }
723 725
724 - (NSNumber*)ariaSetSize { 726 - (NSNumber*)ariaSetSize {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 children_.reset(); 776 children_.reset();
775 } else { 777 } else {
776 [ToBrowserAccessibilityCocoa(browserAccessibility_->PlatformGetParent()) 778 [ToBrowserAccessibilityCocoa(browserAccessibility_->PlatformGetParent())
777 childrenChanged]; 779 childrenChanged];
778 } 780 }
779 } 781 }
780 782
781 - (NSArray*)columnHeaders { 783 - (NSArray*)columnHeaders {
782 if (![self instanceActive]) 784 if (![self instanceActive])
783 return nil; 785 return nil;
784 if (!browserAccessibility_->IsTableLikeRole()) { 786 if (!ui::IsTableLikeRole(browserAccessibility_->GetRole())) {
785 return nil; 787 return nil;
786 } 788 }
787 789
788 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 790 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
789 const std::vector<int32_t>& uniqueCellIds = 791 const std::vector<int32_t>& uniqueCellIds =
790 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); 792 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
791 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { 793 for (size_t i = 0; i < uniqueCellIds.size(); ++i) {
792 int id = uniqueCellIds[i]; 794 int id = uniqueCellIds[i];
793 BrowserAccessibility* cell = 795 BrowserAccessibility* cell =
794 browserAccessibility_->manager()->GetFromID(id); 796 browserAccessibility_->manager()->GetFromID(id);
795 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) 797 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
796 [ret addObject:ToBrowserAccessibilityCocoa(cell)]; 798 [ret addObject:ToBrowserAccessibilityCocoa(cell)];
797 } 799 }
798 return ret; 800 return ret;
799 } 801 }
800 802
801 - (NSValue*)columnIndexRange { 803 - (NSValue*)columnIndexRange {
802 if (![self instanceActive]) 804 if (![self instanceActive])
803 return nil; 805 return nil;
804 if (!browserAccessibility_->IsCellOrTableHeaderRole()) 806 if (!ui::IsCellOrTableHeaderRole(browserAccessibility_->GetRole()))
805 return nil; 807 return nil;
806 808
807 int column = -1; 809 int column = -1;
808 int colspan = -1; 810 int colspan = -1;
809 browserAccessibility_->GetIntAttribute( 811 browserAccessibility_->GetIntAttribute(
810 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column); 812 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column);
811 browserAccessibility_->GetIntAttribute( 813 browserAccessibility_->GetIntAttribute(
812 ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, &colspan); 814 ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, &colspan);
813 if (column >= 0 && colspan >= 1) 815 if (column >= 0 && colspan >= 1)
814 return [NSValue valueWithRange:NSMakeRange(column, colspan)]; 816 return [NSValue valueWithRange:NSMakeRange(column, colspan)];
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 grabbed == "true") 1004 grabbed == "true")
1003 return [NSNumber numberWithBool:YES]; 1005 return [NSNumber numberWithBool:YES];
1004 1006
1005 return [NSNumber numberWithBool:NO]; 1007 return [NSNumber numberWithBool:NO];
1006 } 1008 }
1007 1009
1008 - (id)header { 1010 - (id)header {
1009 if (![self instanceActive]) 1011 if (![self instanceActive])
1010 return nil; 1012 return nil;
1011 int headerElementId = -1; 1013 int headerElementId = -1;
1012 if (browserAccessibility_->IsTableLikeRole()) { 1014 if (ui::IsTableLikeRole(browserAccessibility_->GetRole())) {
1013 browserAccessibility_->GetIntAttribute( 1015 browserAccessibility_->GetIntAttribute(
1014 ui::AX_ATTR_TABLE_HEADER_ID, &headerElementId); 1016 ui::AX_ATTR_TABLE_HEADER_ID, &headerElementId);
1015 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { 1017 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) {
1016 browserAccessibility_->GetIntAttribute( 1018 browserAccessibility_->GetIntAttribute(
1017 ui::AX_ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId); 1019 ui::AX_ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId);
1018 } else if ([self internalRole] == ui::AX_ROLE_ROW) { 1020 } else if ([self internalRole] == ui::AX_ROLE_ROW) {
1019 browserAccessibility_->GetIntAttribute( 1021 browserAccessibility_->GetIntAttribute(
1020 ui::AX_ATTR_TABLE_ROW_HEADER_ID, &headerElementId); 1022 ui::AX_ATTR_TABLE_ROW_HEADER_ID, &headerElementId);
1021 } 1023 }
1022 1024
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 default: 1502 default:
1501 break; 1503 break;
1502 } 1504 }
1503 1505
1504 return NSAccessibilityRoleDescription(role, nil); 1506 return NSAccessibilityRoleDescription(role, nil);
1505 } 1507 }
1506 1508
1507 - (NSArray*)rowHeaders { 1509 - (NSArray*)rowHeaders {
1508 if (![self instanceActive]) 1510 if (![self instanceActive])
1509 return nil; 1511 return nil;
1510 if (!browserAccessibility_->IsTableLikeRole()) { 1512 if (!ui::IsTableLikeRole(browserAccessibility_->GetRole())) {
1511 return nil; 1513 return nil;
1512 } 1514 }
1513 1515
1514 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 1516 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
1515 const std::vector<int32_t>& uniqueCellIds = 1517 const std::vector<int32_t>& uniqueCellIds =
1516 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); 1518 browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
1517 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { 1519 for (size_t i = 0; i < uniqueCellIds.size(); ++i) {
1518 int id = uniqueCellIds[i]; 1520 int id = uniqueCellIds[i];
1519 BrowserAccessibility* cell = 1521 BrowserAccessibility* cell =
1520 browserAccessibility_->manager()->GetFromID(id); 1522 browserAccessibility_->manager()->GetFromID(id);
1521 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) 1523 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER)
1522 [ret addObject:ToBrowserAccessibilityCocoa(cell)]; 1524 [ret addObject:ToBrowserAccessibilityCocoa(cell)];
1523 } 1525 }
1524 return ret; 1526 return ret;
1525 } 1527 }
1526 1528
1527 - (NSValue*)rowIndexRange { 1529 - (NSValue*)rowIndexRange {
1528 if (![self instanceActive]) 1530 if (![self instanceActive])
1529 return nil; 1531 return nil;
1530 if (!browserAccessibility_->IsCellOrTableHeaderRole()) 1532 if (!ui::IsCellOrTableHeaderRole(browserAccessibility_->GetRole()))
1531 return nil; 1533 return nil;
1532 1534
1533 int row = -1; 1535 int row = -1;
1534 int rowspan = -1; 1536 int rowspan = -1;
1535 browserAccessibility_->GetIntAttribute( 1537 browserAccessibility_->GetIntAttribute(
1536 ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row); 1538 ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row);
1537 browserAccessibility_->GetIntAttribute( 1539 browserAccessibility_->GetIntAttribute(
1538 ui::AX_ATTR_TABLE_CELL_ROW_SPAN, &rowspan); 1540 ui::AX_ATTR_TABLE_CELL_ROW_SPAN, &rowspan);
1539 if (row >= 0 && rowspan >= 1) 1541 if (row >= 0 && rowspan >= 1)
1540 return [NSValue valueWithRange:NSMakeRange(row, rowspan)]; 1542 return [NSValue valueWithRange:NSMakeRange(row, rowspan)];
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
2105 continue; 2107 continue;
2106 } 2108 }
2107 if (rowIndex < row) 2109 if (rowIndex < row)
2108 continue; 2110 continue;
2109 if (rowIndex > row) 2111 if (rowIndex > row)
2110 break; 2112 break;
2111 for (size_t j = 0; 2113 for (size_t j = 0;
2112 j < child->PlatformChildCount(); 2114 j < child->PlatformChildCount();
2113 ++j) { 2115 ++j) {
2114 BrowserAccessibility* cell = child->PlatformGetChild(j); 2116 BrowserAccessibility* cell = child->PlatformGetChild(j);
2115 if (!cell->IsCellOrTableHeaderRole()) 2117 if (!ui::IsCellOrTableHeaderRole(cell->GetRole()))
2116 continue; 2118 continue;
2117 int colIndex; 2119 int colIndex;
2118 if (!cell->GetIntAttribute( 2120 if (!cell->GetIntAttribute(
2119 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, 2121 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX,
2120 &colIndex)) { 2122 &colIndex)) {
2121 continue; 2123 continue;
2122 } 2124 }
2123 if (colIndex == column) 2125 if (colIndex == column)
2124 return ToBrowserAccessibilityCocoa(cell); 2126 return ToBrowserAccessibilityCocoa(cell);
2125 if (colIndex > column) 2127 if (colIndex > column)
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
2878 } 2880 }
2879 2881
2880 - (BOOL)accessibilityNotifiesWhenDestroyed { 2882 - (BOOL)accessibilityNotifiesWhenDestroyed {
2881 // Indicate that BrowserAccessibilityCocoa will post a notification when it's 2883 // Indicate that BrowserAccessibilityCocoa will post a notification when it's
2882 // destroyed (see -detach). This allows VoiceOver to do some internal things 2884 // destroyed (see -detach). This allows VoiceOver to do some internal things
2883 // more efficiently. 2885 // more efficiently.
2884 return YES; 2886 return YES;
2885 } 2887 }
2886 2888
2887 @end 2889 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698