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

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 bad rebase Created 3 years, 11 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>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 using ui::AXNodeData; 44 using ui::AXNodeData;
45 using StringAttribute = ui::AXStringAttribute; 45 using StringAttribute = ui::AXStringAttribute;
46 using AXTextMarkerRef = CFTypeRef; 46 using AXTextMarkerRef = CFTypeRef;
47 using AXTextMarkerRangeRef = CFTypeRef; 47 using AXTextMarkerRangeRef = CFTypeRef;
48 48
49 namespace { 49 namespace {
50 50
51 // Private WebKit accessibility attributes. 51 // Private WebKit accessibility attributes.
52 NSString* const NSAccessibilityARIAAtomicAttribute = @"AXARIAAtomic"; 52 NSString* const NSAccessibilityARIAAtomicAttribute = @"AXARIAAtomic";
53 NSString* const NSAccessibilityARIABusyAttribute = @"AXARIABusy"; 53 NSString* const NSAccessibilityARIABusyAttribute = @"AXARIABusy";
54 NSString* const NSAccessibilityARIAColumnCountAttribute = @"AXARIAColumnCount";
55 NSString* const NSAccessibilityARIAColumnIndexAttribute = @"AXARIAColumnIndex";
54 NSString* const NSAccessibilityARIALiveAttribute = @"AXARIALive"; 56 NSString* const NSAccessibilityARIALiveAttribute = @"AXARIALive";
55 NSString* const NSAccessibilityARIAPosInSetAttribute = @"AXARIAPosInSet"; 57 NSString* const NSAccessibilityARIAPosInSetAttribute = @"AXARIAPosInSet";
56 NSString* const NSAccessibilityARIARelevantAttribute = @"AXARIARelevant"; 58 NSString* const NSAccessibilityARIARelevantAttribute = @"AXARIARelevant";
59 NSString* const NSAccessibilityARIARowCountAttribute = @"AXARIARowCount";
60 NSString* const NSAccessibilityARIARowIndexAttribute = @"AXARIARowIndex";
57 NSString* const NSAccessibilityARIASetSizeAttribute = @"AXARIASetSize"; 61 NSString* const NSAccessibilityARIASetSizeAttribute = @"AXARIASetSize";
58 NSString* const NSAccessibilityAccessKeyAttribute = @"AXAccessKey"; 62 NSString* const NSAccessibilityAccessKeyAttribute = @"AXAccessKey";
59 NSString* const NSAccessibilityDropEffectsAttribute = @"AXDropEffects"; 63 NSString* const NSAccessibilityDropEffectsAttribute = @"AXDropEffects";
60 NSString* const NSAccessibilityGrabbedAttribute = @"AXGrabbed"; 64 NSString* const NSAccessibilityGrabbedAttribute = @"AXGrabbed";
61 NSString* const NSAccessibilityInvalidAttribute = @"AXInvalid"; 65 NSString* const NSAccessibilityInvalidAttribute = @"AXInvalid";
62 NSString* const NSAccessibilityIsMultiSelectableAttribute = 66 NSString* const NSAccessibilityIsMultiSelectableAttribute =
63 @"AXIsMultiSelectable"; 67 @"AXIsMultiSelectable";
64 NSString* const NSAccessibilityLoadingProgressAttribute = @"AXLoadingProgress"; 68 NSString* const NSAccessibilityLoadingProgressAttribute = @"AXLoadingProgress";
65 NSString* const 69 NSString* const
66 NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute = 70 NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute =
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 525
522 @implementation BrowserAccessibilityCocoa 526 @implementation BrowserAccessibilityCocoa
523 527
524 + (void)initialize { 528 + (void)initialize {
525 const struct { 529 const struct {
526 NSString* attribute; 530 NSString* attribute;
527 NSString* methodName; 531 NSString* methodName;
528 } attributeToMethodNameContainer[] = { 532 } attributeToMethodNameContainer[] = {
529 {NSAccessibilityARIAAtomicAttribute, @"ariaAtomic"}, 533 {NSAccessibilityARIAAtomicAttribute, @"ariaAtomic"},
530 {NSAccessibilityARIABusyAttribute, @"ariaBusy"}, 534 {NSAccessibilityARIABusyAttribute, @"ariaBusy"},
535 {NSAccessibilityARIAColumnCountAttribute, @"ariaColumnCount"},
536 {NSAccessibilityARIAColumnIndexAttribute, @"ariaColumnIndex"},
531 {NSAccessibilityARIALiveAttribute, @"ariaLive"}, 537 {NSAccessibilityARIALiveAttribute, @"ariaLive"},
532 {NSAccessibilityARIAPosInSetAttribute, @"ariaPosInSet"}, 538 {NSAccessibilityARIAPosInSetAttribute, @"ariaPosInSet"},
533 {NSAccessibilityARIARelevantAttribute, @"ariaRelevant"}, 539 {NSAccessibilityARIARelevantAttribute, @"ariaRelevant"},
540 {NSAccessibilityARIARowCountAttribute, @"ariaRowCount"},
541 {NSAccessibilityARIARowIndexAttribute, @"ariaRowIndex"},
534 {NSAccessibilityARIASetSizeAttribute, @"ariaSetSize"}, 542 {NSAccessibilityARIASetSizeAttribute, @"ariaSetSize"},
535 {NSAccessibilityAccessKeyAttribute, @"accessKey"}, 543 {NSAccessibilityAccessKeyAttribute, @"accessKey"},
536 {NSAccessibilityChildrenAttribute, @"children"}, 544 {NSAccessibilityChildrenAttribute, @"children"},
537 {NSAccessibilityColumnsAttribute, @"columns"}, 545 {NSAccessibilityColumnsAttribute, @"columns"},
538 {NSAccessibilityColumnHeaderUIElementsAttribute, @"columnHeaders"}, 546 {NSAccessibilityColumnHeaderUIElementsAttribute, @"columnHeaders"},
539 {NSAccessibilityColumnIndexRangeAttribute, @"columnIndexRange"}, 547 {NSAccessibilityColumnIndexRangeAttribute, @"columnIndexRange"},
540 {NSAccessibilityContentsAttribute, @"contents"}, 548 {NSAccessibilityContentsAttribute, @"contents"},
541 {NSAccessibilityDescriptionAttribute, @"description"}, 549 {NSAccessibilityDescriptionAttribute, @"description"},
542 {NSAccessibilityDisclosingAttribute, @"disclosing"}, 550 {NSAccessibilityDisclosingAttribute, @"disclosing"},
543 {NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow"}, 551 {NSAccessibilityDisclosedByRowAttribute, @"disclosedByRow"},
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 return [NSNumber numberWithBool:boolValue]; 648 return [NSNumber numberWithBool:boolValue];
641 } 649 }
642 650
643 - (NSNumber*)ariaBusy { 651 - (NSNumber*)ariaBusy {
644 if (![self instanceActive]) 652 if (![self instanceActive])
645 return nil; 653 return nil;
646 return [NSNumber numberWithBool: 654 return [NSNumber numberWithBool:
647 GetState(browserAccessibility_, ui::AX_STATE_BUSY)]; 655 GetState(browserAccessibility_, ui::AX_STATE_BUSY)];
648 } 656 }
649 657
658 - (NSNumber*)ariaColumnCount {
659 if (!browserAccessibility_->IsTableOrGridOrTreeGridRole())
660 return nil;
661 int count = -1;
662 if (!browserAccessibility_->GetIntAttribute(
663 ui::AX_ATTR_ARIA_COL_COUNT, &count))
664 return nil;
665 return [NSNumber numberWithInt:count];
666 }
667
668 - (NSNumber*)ariaColumnIndex {
669 if (!browserAccessibility_->IsCellOrTableHeaderRole())
670 return nil;
671 int index = -1;
672 if (!browserAccessibility_->GetIntAttribute(
673 ui::AX_ATTR_ARIA_COL_INDEX, &index))
674 return nil;
675 return [NSNumber numberWithInt:index];
676 }
677
650 - (NSString*)ariaLive { 678 - (NSString*)ariaLive {
651 if (![self instanceActive]) 679 if (![self instanceActive])
652 return nil; 680 return nil;
653 return NSStringForStringAttribute( 681 return NSStringForStringAttribute(
654 browserAccessibility_, ui::AX_ATTR_LIVE_STATUS); 682 browserAccessibility_, ui::AX_ATTR_LIVE_STATUS);
655 } 683 }
656 684
657 - (NSNumber*)ariaPosInSet { 685 - (NSNumber*)ariaPosInSet {
658 if (![self instanceActive]) 686 if (![self instanceActive])
659 return nil; 687 return nil;
660 return [NSNumber numberWithInt: 688 return [NSNumber numberWithInt:
661 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_POS_IN_SET)]; 689 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_POS_IN_SET)];
662 } 690 }
663 691
664 - (NSString*)ariaRelevant { 692 - (NSString*)ariaRelevant {
665 if (![self instanceActive]) 693 if (![self instanceActive])
666 return nil; 694 return nil;
667 return NSStringForStringAttribute(browserAccessibility_, 695 return NSStringForStringAttribute(browserAccessibility_,
668 ui::AX_ATTR_LIVE_RELEVANT); 696 ui::AX_ATTR_LIVE_RELEVANT);
669 } 697 }
670 698
699 - (NSNumber*)ariaRowCount {
700 if (!browserAccessibility_->IsTableOrGridOrTreeGridRole())
701 return nil;
702 int count = -1;
703 if (!browserAccessibility_->GetIntAttribute(
704 ui::AX_ATTR_ARIA_ROW_COUNT, &count))
705 return nil;
706 return [NSNumber numberWithInt:count];
707 }
708
709 - (NSNumber*)ariaRowIndex {
710 if (!browserAccessibility_->IsCellOrTableHeaderRole())
711 return nil;
712 int index = -1;
713 if (!browserAccessibility_->GetIntAttribute(
714 ui::AX_ATTR_ARIA_ROW_INDEX, &index))
715 return nil;
716 return [NSNumber numberWithInt:index];
717 }
718
671 - (NSNumber*)ariaSetSize { 719 - (NSNumber*)ariaSetSize {
672 if (![self instanceActive]) 720 if (![self instanceActive])
673 return nil; 721 return nil;
674 return [NSNumber numberWithInt: 722 return [NSNumber numberWithInt:
675 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)]; 723 browserAccessibility_->GetIntAttribute(ui::AX_ATTR_SET_SIZE)];
676 } 724 }
677 725
678 // Returns an array of BrowserAccessibilityCocoa objects, representing the 726 // Returns an array of BrowserAccessibilityCocoa objects, representing the
679 // accessibility children of this object. 727 // accessibility children of this object.
680 - (NSArray*)children { 728 - (NSArray*)children {
(...skipping 1786 matching lines...) Expand 10 before | Expand all | Expand 10 after
2467 // Specific role attributes. 2515 // Specific role attributes.
2468 NSString* role = [self role]; 2516 NSString* role = [self role];
2469 NSString* subrole = [self subrole]; 2517 NSString* subrole = [self subrole];
2470 if ([role isEqualToString:NSAccessibilityTableRole] || 2518 if ([role isEqualToString:NSAccessibilityTableRole] ||
2471 [role isEqualToString:NSAccessibilityGridRole]) { 2519 [role isEqualToString:NSAccessibilityGridRole]) {
2472 [ret addObjectsFromArray:@[ 2520 [ret addObjectsFromArray:@[
2473 NSAccessibilityColumnsAttribute, NSAccessibilityVisibleColumnsAttribute, 2521 NSAccessibilityColumnsAttribute, NSAccessibilityVisibleColumnsAttribute,
2474 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute, 2522 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute,
2475 NSAccessibilityVisibleCellsAttribute, NSAccessibilityHeaderAttribute, 2523 NSAccessibilityVisibleCellsAttribute, NSAccessibilityHeaderAttribute,
2476 NSAccessibilityColumnHeaderUIElementsAttribute, 2524 NSAccessibilityColumnHeaderUIElementsAttribute,
2477 NSAccessibilityRowHeaderUIElementsAttribute 2525 NSAccessibilityRowHeaderUIElementsAttribute,
2526 NSAccessibilityARIAColumnCountAttribute,
2527 NSAccessibilityARIARowCountAttribute,
2478 ]]; 2528 ]];
2479 } else if ([role isEqualToString:NSAccessibilityColumnRole]) { 2529 } else if ([role isEqualToString:NSAccessibilityColumnRole]) {
2480 [ret addObjectsFromArray:@[ 2530 [ret addObjectsFromArray:@[
2481 NSAccessibilityIndexAttribute, NSAccessibilityHeaderAttribute, 2531 NSAccessibilityIndexAttribute, NSAccessibilityHeaderAttribute,
2482 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute 2532 NSAccessibilityRowsAttribute, NSAccessibilityVisibleRowsAttribute
2483 ]]; 2533 ]];
2484 } else if ([role isEqualToString:NSAccessibilityCellRole]) { 2534 } else if ([role isEqualToString:NSAccessibilityCellRole]) {
2485 [ret addObjectsFromArray:@[ 2535 [ret addObjectsFromArray:@[
2486 NSAccessibilityColumnIndexRangeAttribute, 2536 NSAccessibilityColumnIndexRangeAttribute,
2487 NSAccessibilityRowIndexRangeAttribute, @"AXSortDirection" 2537 NSAccessibilityRowIndexRangeAttribute,
2538 NSAccessibilityARIAColumnIndexAttribute,
2539 NSAccessibilityARIARowIndexAttribute,
2540 @"AXSortDirection",
2488 ]]; 2541 ]];
2489 } else if ([role isEqualToString:@"AXWebArea"]) { 2542 } else if ([role isEqualToString:@"AXWebArea"]) {
2490 [ret addObjectsFromArray:@[ 2543 [ret addObjectsFromArray:@[
2491 @"AXLoaded", NSAccessibilityLoadingProgressAttribute 2544 @"AXLoaded", NSAccessibilityLoadingProgressAttribute
2492 ]]; 2545 ]];
2493 } else if ([role isEqualToString:NSAccessibilityTabGroupRole]) { 2546 } else if ([role isEqualToString:NSAccessibilityTabGroupRole]) {
2494 [ret addObject:NSAccessibilityTabsAttribute]; 2547 [ret addObject:NSAccessibilityTabsAttribute];
2495 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || 2548 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] ||
2496 [role isEqualToString:NSAccessibilitySliderRole] || 2549 [role isEqualToString:NSAccessibilitySliderRole] ||
2497 [role isEqualToString:NSAccessibilityIncrementorRole] || 2550 [role isEqualToString:NSAccessibilityIncrementorRole] ||
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
2755 } 2808 }
2756 2809
2757 - (BOOL)accessibilityNotifiesWhenDestroyed { 2810 - (BOOL)accessibilityNotifiesWhenDestroyed {
2758 // Indicate that BrowserAccessibilityCocoa will post a notification when it's 2811 // Indicate that BrowserAccessibilityCocoa will post a notification when it's
2759 // destroyed (see -detach). This allows VoiceOver to do some internal things 2812 // destroyed (see -detach). This allows VoiceOver to do some internal things
2760 // more efficiently. 2813 // more efficiently.
2761 return YES; 2814 return YES;
2762 } 2815 }
2763 2816
2764 @end 2817 @end
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | content/browser/accessibility/browser_accessibility_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698