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

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

Issue 2539503003: ARIA 1.1: implementation for aria-col-* and aria-row-*. (Closed)
Patch Set: Fix Mac Created 4 years 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 #include <stddef.h> 6 #include <stddef.h>
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #import "content/browser/accessibility/browser_accessibility_cocoa.h" 9 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
10 10
(...skipping 26 matching lines...) Expand all
37 using ui::AXNodeData; 37 using ui::AXNodeData;
38 using StringAttribute = ui::AXStringAttribute; 38 using StringAttribute = ui::AXStringAttribute;
39 using AXTextMarkerRef = CFTypeRef; 39 using AXTextMarkerRef = CFTypeRef;
40 using AXTextMarkerRangeRef = CFTypeRef; 40 using AXTextMarkerRangeRef = CFTypeRef;
41 41
42 namespace { 42 namespace {
43 43
44 // Private WebKit accessibility attributes. 44 // Private WebKit accessibility attributes.
45 NSString* const NSAccessibilityARIAAtomicAttribute = @"AXARIAAtomic"; 45 NSString* const NSAccessibilityARIAAtomicAttribute = @"AXARIAAtomic";
46 NSString* const NSAccessibilityARIABusyAttribute = @"AXARIABusy"; 46 NSString* const NSAccessibilityARIABusyAttribute = @"AXARIABusy";
47 NSString* const NSAccessibilityARIAColumnCountAttribute = @"AXARIAColumnCount";
48 NSString* const NSAccessibilityARIAColumnIndexAttribute = @"AXARIAColumnIndex";
47 NSString* const NSAccessibilityARIALiveAttribute = @"AXARIALive"; 49 NSString* const NSAccessibilityARIALiveAttribute = @"AXARIALive";
48 NSString* const NSAccessibilityARIAPosInSetAttribute = @"AXARIAPosInSet"; 50 NSString* const NSAccessibilityARIAPosInSetAttribute = @"AXARIAPosInSet";
49 NSString* const NSAccessibilityARIARelevantAttribute = @"AXARIARelevant"; 51 NSString* const NSAccessibilityARIARelevantAttribute = @"AXARIARelevant";
52 NSString* const NSAccessibilityARIARowCountAttribute = @"AXARIARowCount";
53 NSString* const NSAccessibilityARIARowIndexAttribute = @"AXARIARowIndex";
50 NSString* const NSAccessibilityARIASetSizeAttribute = @"AXARIASetSize"; 54 NSString* const NSAccessibilityARIASetSizeAttribute = @"AXARIASetSize";
51 NSString* const NSAccessibilityAccessKeyAttribute = @"AXAccessKey"; 55 NSString* const NSAccessibilityAccessKeyAttribute = @"AXAccessKey";
52 NSString* const NSAccessibilityDropEffectsAttribute = @"AXDropEffects"; 56 NSString* const NSAccessibilityDropEffectsAttribute = @"AXDropEffects";
53 NSString* const NSAccessibilityGrabbedAttribute = @"AXGrabbed"; 57 NSString* const NSAccessibilityGrabbedAttribute = @"AXGrabbed";
54 NSString* const NSAccessibilityInvalidAttribute = @"AXInvalid"; 58 NSString* const NSAccessibilityInvalidAttribute = @"AXInvalid";
55 NSString* const NSAccessibilityIsMultiSelectableAttribute = 59 NSString* const NSAccessibilityIsMultiSelectableAttribute =
56 @"AXIsMultiSelectable"; 60 @"AXIsMultiSelectable";
57 NSString* const NSAccessibilityLoadingProgressAttribute = @"AXLoadingProgress"; 61 NSString* const NSAccessibilityLoadingProgressAttribute = @"AXLoadingProgress";
58 NSString* const 62 NSString* const
59 NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute = 63 NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute =
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 521
518 @implementation BrowserAccessibilityCocoa 522 @implementation BrowserAccessibilityCocoa
519 523
520 + (void)initialize { 524 + (void)initialize {
521 const struct { 525 const struct {
522 NSString* attribute; 526 NSString* attribute;
523 NSString* methodName; 527 NSString* methodName;
524 } attributeToMethodNameContainer[] = { 528 } attributeToMethodNameContainer[] = {
525 {NSAccessibilityARIAAtomicAttribute, @"ariaAtomic"}, 529 {NSAccessibilityARIAAtomicAttribute, @"ariaAtomic"},
526 {NSAccessibilityARIABusyAttribute, @"ariaBusy"}, 530 {NSAccessibilityARIABusyAttribute, @"ariaBusy"},
531 {NSAccessibilityARIAColumnCountAttribute, @"ariaColumnCount"},
532 {NSAccessibilityARIAColumnIndexAttribute, @"ariaColumnIndex"},
527 {NSAccessibilityARIALiveAttribute, @"ariaLive"}, 533 {NSAccessibilityARIALiveAttribute, @"ariaLive"},
528 {NSAccessibilityARIAPosInSetAttribute, @"ariaPosInSet"}, 534 {NSAccessibilityARIAPosInSetAttribute, @"ariaPosInSet"},
529 {NSAccessibilityARIARelevantAttribute, @"ariaRelevant"}, 535 {NSAccessibilityARIARelevantAttribute, @"ariaRelevant"},
536 {NSAccessibilityARIARowCountAttribute, @"ariaRowCount"},
537 {NSAccessibilityARIARowIndexAttribute, @"ariaRowIndex"},
530 {NSAccessibilityARIASetSizeAttribute, @"ariaSetSize"}, 538 {NSAccessibilityARIASetSizeAttribute, @"ariaSetSize"},
531 {NSAccessibilityAccessKeyAttribute, @"accessKey"}, 539 {NSAccessibilityAccessKeyAttribute, @"accessKey"},
532 {NSAccessibilityChildrenAttribute, @"children"}, 540 {NSAccessibilityChildrenAttribute, @"children"},
533 {NSAccessibilityColumnsAttribute, @"columns"}, 541 {NSAccessibilityColumnsAttribute, @"columns"},
534 {NSAccessibilityColumnHeaderUIElementsAttribute, @"columnHeaders"}, 542 {NSAccessibilityColumnHeaderUIElementsAttribute, @"columnHeaders"},
535 {NSAccessibilityColumnIndexRangeAttribute, @"columnIndexRange"}, 543 {NSAccessibilityColumnIndexRangeAttribute, @"columnIndexRange"},
536 {NSAccessibilityContentsAttribute, @"contents"}, 544 {NSAccessibilityContentsAttribute, @"contents"},
537 {NSAccessibilityDescriptionAttribute, @"description"}, 545 {NSAccessibilityDescriptionAttribute, @"description"},
538 {NSAccessibilityDisclosingAttribute, @"disclosing"}, 546 {NSAccessibilityDisclosingAttribute, @"disclosing"},
539 {NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow"}, 547 {NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow"},
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 return [NSNumber numberWithBool:boolValue]; 644 return [NSNumber numberWithBool:boolValue];
637 } 645 }
638 646
639 - (NSNumber*)ariaBusy { 647 - (NSNumber*)ariaBusy {
640 if (![self instanceActive]) 648 if (![self instanceActive])
641 return nil; 649 return nil;
642 return [NSNumber numberWithBool: 650 return [NSNumber numberWithBool:
643 GetState(browserAccessibility_, ui::AX_STATE_BUSY)]; 651 GetState(browserAccessibility_, ui::AX_STATE_BUSY)];
644 } 652 }
645 653
654 - (NSNumber*)ariaColumnCount {
655 if (!browserAccessibility_->IsTableOrGridOrTreeGridRole())
656 return nil;
657 int count = -1;
658 if (!browserAccessibility_->GetIntAttribute(
659 ui::AX_ATTR_ARIA_COL_COUNT, &count))
660 return nil;
661 return [NSNumber numberWithInt:count];
662 }
663
664 - (NSNumber*)ariaColumnIndex {
665 if (!browserAccessibility_->IsCellOrTableHeaderRole())
666 return nil;
667 int index = -1;
668 if (!browserAccessibility_->GetIntAttribute(
669 ui::AX_ATTR_ARIA_COL_INDEX, &index))
670 return nil;
671 return [NSNumber numberWithInt:index];
672 }
673
646 - (NSString*)ariaLive { 674 - (NSString*)ariaLive {
647 if (![self instanceActive]) 675 if (![self instanceActive])
648 return nil; 676 return nil;
649 return NSStringForStringAttribute( 677 return NSStringForStringAttribute(
650 browserAccessibility_, ui::AX_ATTR_LIVE_STATUS); 678 browserAccessibility_, ui::AX_ATTR_LIVE_STATUS);
651 } 679 }
652 680
653 - (NSNumber*)ariaPosInSet { 681 - (NSNumber*)ariaPosInSet {
654 if (![self instanceActive]) 682 if (![self instanceActive])
655 return nil; 683 return nil;
656 return [NSNumber numberWithInt: 684 return [NSNumber numberWithInt:
657 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_POS_IN_SET)]; 685 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_POS_IN_SET)];
658 } 686 }
659 687
660 - (NSString*)ariaRelevant { 688 - (NSString*)ariaRelevant {
661 if (![self instanceActive]) 689 if (![self instanceActive])
662 return nil; 690 return nil;
663 return NSStringForStringAttribute(browserAccessibility_, 691 return NSStringForStringAttribute(browserAccessibility_,
664 ui::AX_ATTR_LIVE_RELEVANT); 692 ui::AX_ATTR_LIVE_RELEVANT);
665 } 693 }
666 694
695 - (NSNumber*)ariaRowCount {
696 if (!browserAccessibility_->IsTableOrGridOrTreeGridRole())
697 return nil;
698 int count = -1;
699 if (!browserAccessibility_->GetIntAttribute(
700 ui::AX_ATTR_ARIA_ROW_COUNT, &count))
701 return nil;
702 return [NSNumber numberWithInt:count];
703 }
704
705 - (NSNumber*)ariaRowIndex {
706 if (!browserAccessibility_->IsCellOrTableHeaderRole())
707 return nil;
708 int index = -1;
709 if (!browserAccessibility_->GetIntAttribute(
710 ui::AX_ATTR_ARIA_ROW_INDEX, &index))
711 return nil;
712 return [NSNumber numberWithInt:index];
713 }
714
667 - (NSNumber*)ariaSetSize { 715 - (NSNumber*)ariaSetSize {
668 if (![self instanceActive]) 716 if (![self instanceActive])
669 return nil; 717 return nil;
670 return [NSNumber numberWithInt: 718 return [NSNumber numberWithInt:
671 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)]; 719 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)];
672 } 720 }
673 721
674 // Returns an array of BrowserAccessibilityCocoa objects, representing the 722 // Returns an array of BrowserAccessibilityCocoa objects, representing the
675 // accessibility children of this object. 723 // accessibility children of this object.
676 - (NSArray*)children { 724 - (NSArray*)children {
(...skipping 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after
2595 // Specific role attributes. 2643 // Specific role attributes.
2596 NSString* role = [self role]; 2644 NSString* role = [self role];
2597 NSString* subrole = [self subrole]; 2645 NSString* subrole = [self subrole];
2598 if ([role isEqualToString:NSAccessibilityTableRole] || 2646 if ([role isEqualToString:NSAccessibilityTableRole] ||
2599 [role isEqualToString:NSAccessibilityGridRole]) { 2647 [role isEqualToString:NSAccessibilityGridRole]) {
2600 [ret addObjectsFromArray:@[ 2648 [ret addObjectsFromArray:@[
2601 NSAccessibilityColumnsAttribute, NSAccessibilityVisibleColumnsAttribute, 2649 NSAccessibilityColumnsAttribute, NSAccessibilityVisibleColumnsAttribute,
2602 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute, 2650 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute,
2603 NSAccessibilityVisibleCellsAttribute, NSAccessibilityHeaderAttribute, 2651 NSAccessibilityVisibleCellsAttribute, NSAccessibilityHeaderAttribute,
2604 NSAccessibilityColumnHeaderUIElementsAttribute, 2652 NSAccessibilityColumnHeaderUIElementsAttribute,
2605 NSAccessibilityRowHeaderUIElementsAttribute 2653 NSAccessibilityRowHeaderUIElementsAttribute,
2654 NSAccessibilityARIAColumnCountAttribute,
2655 NSAccessibilityARIARowCountAttribute,
2606 ]]; 2656 ]];
2607 } else if ([role isEqualToString:NSAccessibilityColumnRole]) { 2657 } else if ([role isEqualToString:NSAccessibilityColumnRole]) {
2608 [ret addObjectsFromArray:@[ 2658 [ret addObjectsFromArray:@[
2609 NSAccessibilityIndexAttribute, NSAccessibilityHeaderAttribute, 2659 NSAccessibilityIndexAttribute, NSAccessibilityHeaderAttribute,
2610 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute 2660 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute
2611 ]]; 2661 ]];
2612 } else if ([role isEqualToString:NSAccessibilityCellRole]) { 2662 } else if ([role isEqualToString:NSAccessibilityCellRole]) {
2613 [ret addObjectsFromArray:@[ 2663 [ret addObjectsFromArray:@[
2614 NSAccessibilityColumnIndexRangeAttribute, 2664 NSAccessibilityColumnIndexRangeAttribute,
2615 NSAccessibilityRowIndexRangeAttribute, @"AXSortDirection" 2665 NSAccessibilityRowIndexRangeAttribute,
2666 NSAccessibilityARIAColumnIndexAttribute,
2667 NSAccessibilityARIARowIndexAttribute,
2668 @"AXSortDirection",
2616 ]]; 2669 ]];
2617 } else if ([role isEqualToString:@"AXWebArea"]) { 2670 } else if ([role isEqualToString:@"AXWebArea"]) {
2618 [ret addObjectsFromArray:@[ 2671 [ret addObjectsFromArray:@[
2619 @"AXLoaded", NSAccessibilityLoadingProgressAttribute 2672 @"AXLoaded", NSAccessibilityLoadingProgressAttribute
2620 ]]; 2673 ]];
2621 } else if ([role isEqualToString:NSAccessibilityTabGroupRole]) { 2674 } else if ([role isEqualToString:NSAccessibilityTabGroupRole]) {
2622 [ret addObject:NSAccessibilityTabsAttribute]; 2675 [ret addObject:NSAccessibilityTabsAttribute];
2623 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || 2676 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] ||
2624 [role isEqualToString:NSAccessibilitySliderRole] || 2677 [role isEqualToString:NSAccessibilitySliderRole] ||
2625 [role isEqualToString:NSAccessibilityIncrementorRole] || 2678 [role isEqualToString:NSAccessibilityIncrementorRole] ||
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
2883 } 2936 }
2884 2937
2885 - (BOOL)accessibilityNotifiesWhenDestroyed { 2938 - (BOOL)accessibilityNotifiesWhenDestroyed {
2886 // Indicate that BrowserAccessibilityCocoa will post a notification when it's 2939 // Indicate that BrowserAccessibilityCocoa will post a notification when it's
2887 // destroyed (see -detach). This allows VoiceOver to do some internal things 2940 // destroyed (see -detach). This allows VoiceOver to do some internal things
2888 // more efficiently. 2941 // more efficiently.
2889 return YES; 2942 return YES;
2890 } 2943 }
2891 2944
2892 @end 2945 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698