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

Side by Side Diff: ui/accessibility/ax_node_data.cc

Issue 2587343004: Finish implementation and tests of 5 ARIA 1.1 attributes. (Closed)
Patch Set: Rebase on previous change Created 3 years, 12 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
« no previous file with comments | « ui/accessibility/ax_node_data.h ('k') | ui/accessibility/ax_tree_combiner.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/accessibility/ax_node_data.h" 5 #include "ui/accessibility/ax_node_data.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <set> 10 #include <set>
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 FindInVectorOfPairs( 51 FindInVectorOfPairs(
52 FirstType first, 52 FirstType first,
53 const std::vector<std::pair<FirstType, SecondType>>& vector) { 53 const std::vector<std::pair<FirstType, SecondType>>& vector) {
54 return std::find_if(vector.begin(), 54 return std::find_if(vector.begin(),
55 vector.end(), 55 vector.end(),
56 FirstIs<FirstType, SecondType>(first)); 56 FirstIs<FirstType, SecondType>(first));
57 } 57 }
58 58
59 } // namespace 59 } // namespace
60 60
61 bool IsNodeIdIntAttribute(AXIntAttribute attr) {
62 switch (attr) {
63 case AX_ATTR_ACTIVEDESCENDANT_ID:
64 case AX_ATTR_ERRORMESSAGE_ID:
65 case AX_ATTR_MEMBER_OF_ID:
66 case AX_ATTR_NEXT_ON_LINE_ID:
67 case AX_ATTR_PREVIOUS_ON_LINE_ID:
68 case AX_ATTR_TABLE_HEADER_ID:
69 case AX_ATTR_TABLE_COLUMN_HEADER_ID:
70 case AX_ATTR_TABLE_ROW_HEADER_ID:
71 return true;
72
73 // Note: all of the attributes are included here explicitly,
74 // rather than using "default:", so that it's a compiler error to
75 // add a new attribute without explicitly considering whether it's
76 // a node id attribute or not.
77 case AX_INT_ATTRIBUTE_NONE:
78 case AX_ATTR_ACTION:
79 case AX_ATTR_SCROLL_X:
80 case AX_ATTR_SCROLL_X_MIN:
81 case AX_ATTR_SCROLL_X_MAX:
82 case AX_ATTR_SCROLL_Y:
83 case AX_ATTR_SCROLL_Y_MIN:
84 case AX_ATTR_SCROLL_Y_MAX:
85 case AX_ATTR_TEXT_SEL_START:
86 case AX_ATTR_TEXT_SEL_END:
87 case AX_ATTR_TABLE_ROW_COUNT:
88 case AX_ATTR_TABLE_COLUMN_COUNT:
89 case AX_ATTR_TABLE_ROW_INDEX:
90 case AX_ATTR_TABLE_COLUMN_INDEX:
91 case AX_ATTR_TABLE_CELL_COLUMN_INDEX:
92 case AX_ATTR_TABLE_CELL_COLUMN_SPAN:
93 case AX_ATTR_TABLE_CELL_ROW_INDEX:
94 case AX_ATTR_TABLE_CELL_ROW_SPAN:
95 case AX_ATTR_SORT_DIRECTION:
96 case AX_ATTR_HIERARCHICAL_LEVEL:
97 case AX_ATTR_NAME_FROM:
98 case AX_ATTR_DESCRIPTION_FROM:
99 case AX_ATTR_CHILD_TREE_ID:
100 case AX_ATTR_SET_SIZE:
101 case AX_ATTR_POS_IN_SET:
102 case AX_ATTR_COLOR_VALUE:
103 case AX_ATTR_ARIA_CURRENT_STATE:
104 case AX_ATTR_BACKGROUND_COLOR:
105 case AX_ATTR_COLOR:
106 case AX_ATTR_INVALID_STATE:
107 case AX_ATTR_TEXT_DIRECTION:
108 case AX_ATTR_TEXT_STYLE:
109 return false;
110 }
111
112 NOTREACHED();
113 return false;
114 }
115
116 bool IsNodeIdIntListAttribute(AXIntListAttribute attr) {
117 switch (attr) {
118 case AX_ATTR_CELL_IDS:
119 case AX_ATTR_CONTROLS_IDS:
120 case AX_ATTR_DESCRIBEDBY_IDS:
121 case AX_ATTR_DETAILS_IDS:
122 case AX_ATTR_FLOWTO_IDS:
123 case AX_ATTR_INDIRECT_CHILD_IDS:
124 case AX_ATTR_LABELLEDBY_IDS:
125 case AX_ATTR_UNIQUE_CELL_IDS:
126 return true;
127
128 // Note: all of the attributes are included here explicitly,
129 // rather than using "default:", so that it's a compiler error to
130 // add a new attribute without explicitly considering whether it's
131 // a node id attribute or not.
132 case AX_INT_LIST_ATTRIBUTE_NONE:
133 case AX_ATTR_LINE_BREAKS:
134 case AX_ATTR_MARKER_TYPES:
135 case AX_ATTR_MARKER_STARTS:
136 case AX_ATTR_MARKER_ENDS:
137 case AX_ATTR_CHARACTER_OFFSETS:
138 case AX_ATTR_CACHED_LINE_STARTS:
139 case AX_ATTR_WORD_STARTS:
140 case AX_ATTR_WORD_ENDS:
141 return false;
142 }
143
144 NOTREACHED();
145 return false;
146 }
147
61 AXNodeData::AXNodeData() 148 AXNodeData::AXNodeData()
62 : id(-1), 149 : id(-1),
63 role(AX_ROLE_UNKNOWN), 150 role(AX_ROLE_UNKNOWN),
64 // Turn on all flags to more easily catch bugs where no flags are set. 151 // Turn on all flags to more easily catch bugs where no flags are set.
65 // This will be cleared back to a 0-state before use. 152 // This will be cleared back to a 0-state before use.
66 state(0xFFFFFFFF), 153 state(0xFFFFFFFF),
67 offset_container_id(-1) { 154 offset_container_id(-1) {
68 } 155 }
69 156
70 AXNodeData::~AXNodeData() { 157 AXNodeData::~AXNodeData() {
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 ui::ToString(static_cast<AXNameFrom>(int_attributes[i].second)); 570 ui::ToString(static_cast<AXNameFrom>(int_attributes[i].second));
484 break; 571 break;
485 case AX_ATTR_DESCRIPTION_FROM: 572 case AX_ATTR_DESCRIPTION_FROM:
486 result += " description_from=" + 573 result += " description_from=" +
487 ui::ToString( 574 ui::ToString(
488 static_cast<AXDescriptionFrom>(int_attributes[i].second)); 575 static_cast<AXDescriptionFrom>(int_attributes[i].second));
489 break; 576 break;
490 case AX_ATTR_ACTIVEDESCENDANT_ID: 577 case AX_ATTR_ACTIVEDESCENDANT_ID:
491 result += " activedescendant=" + value; 578 result += " activedescendant=" + value;
492 break; 579 break;
580 case AX_ATTR_ERRORMESSAGE_ID:
581 result += " errormessage=" + value;
582 break;
493 case AX_ATTR_MEMBER_OF_ID: 583 case AX_ATTR_MEMBER_OF_ID:
494 result += " member_of_id=" + value; 584 result += " member_of_id=" + value;
495 break; 585 break;
496 case AX_ATTR_NEXT_ON_LINE_ID: 586 case AX_ATTR_NEXT_ON_LINE_ID:
497 result += " next_on_line_id=" + value; 587 result += " next_on_line_id=" + value;
498 break; 588 break;
499 case AX_ATTR_PREVIOUS_ON_LINE_ID: 589 case AX_ATTR_PREVIOUS_ON_LINE_ID:
500 result += " previous_on_line_id=" + value; 590 result += " previous_on_line_id=" + value;
501 break; 591 break;
502 case AX_ATTR_CHILD_TREE_ID: 592 case AX_ATTR_CHILD_TREE_ID:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 case AX_ATTR_FONT_FAMILY: 711 case AX_ATTR_FONT_FAMILY:
622 result += " font-family=" + value; 712 result += " font-family=" + value;
623 break; 713 break;
624 case AX_ATTR_HTML_TAG: 714 case AX_ATTR_HTML_TAG:
625 result += " html_tag=" + value; 715 result += " html_tag=" + value;
626 break; 716 break;
627 case AX_ATTR_IMAGE_DATA_URL: 717 case AX_ATTR_IMAGE_DATA_URL:
628 result += " image_data_url=(" + 718 result += " image_data_url=(" +
629 IntToString(static_cast<int>(value.size())) + " bytes)"; 719 IntToString(static_cast<int>(value.size())) + " bytes)";
630 break; 720 break;
721 case AX_ATTR_KEY_SHORTCUTS:
722 result += " key_shortcuts=" + value;
723 break;
631 case AX_ATTR_LANGUAGE: 724 case AX_ATTR_LANGUAGE:
632 result += " language=" + value; 725 result += " language=" + value;
633 break; 726 break;
634 case AX_ATTR_LIVE_RELEVANT: 727 case AX_ATTR_LIVE_RELEVANT:
635 result += " relevant=" + value; 728 result += " relevant=" + value;
636 break; 729 break;
637 case AX_ATTR_LIVE_STATUS: 730 case AX_ATTR_LIVE_STATUS:
638 result += " live=" + value; 731 result += " live=" + value;
639 break; 732 break;
640 case AX_ATTR_CONTAINER_LIVE_RELEVANT: 733 case AX_ATTR_CONTAINER_LIVE_RELEVANT:
641 result += " container_relevant=" + value; 734 result += " container_relevant=" + value;
642 break; 735 break;
643 case AX_ATTR_CONTAINER_LIVE_STATUS: 736 case AX_ATTR_CONTAINER_LIVE_STATUS:
644 result += " container_live=" + value; 737 result += " container_live=" + value;
645 break; 738 break;
646 case AX_ATTR_PLACEHOLDER: 739 case AX_ATTR_PLACEHOLDER:
647 result += " placeholder=" + value; 740 result += " placeholder=" + value;
648 break; 741 break;
649 case AX_ATTR_ROLE: 742 case AX_ATTR_ROLE:
650 result += " role=" + value; 743 result += " role=" + value;
651 break; 744 break;
745 case AX_ATTR_ROLE_DESCRIPTION:
746 result += " role_description=" + value;
747 break;
652 case AX_ATTR_SHORTCUT: 748 case AX_ATTR_SHORTCUT:
653 result += " shortcut=" + value; 749 result += " shortcut=" + value;
654 break; 750 break;
655 case AX_ATTR_URL: 751 case AX_ATTR_URL:
656 result += " url=" + value; 752 result += " url=" + value;
657 break; 753 break;
658 case AX_ATTR_NAME: 754 case AX_ATTR_NAME:
659 result += " name=" + value; 755 result += " name=" + value;
660 break; 756 break;
661 case AX_ATTR_VALUE: 757 case AX_ATTR_VALUE:
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 break; 805 break;
710 case AX_ATTR_CAN_SET_VALUE: 806 case AX_ATTR_CAN_SET_VALUE:
711 result += " can_set_value=" + value; 807 result += " can_set_value=" + value;
712 break; 808 break;
713 case AX_ATTR_UPDATE_LOCATION_ONLY: 809 case AX_ATTR_UPDATE_LOCATION_ONLY:
714 result += " update_location_only=" + value; 810 result += " update_location_only=" + value;
715 break; 811 break;
716 case AX_ATTR_CANVAS_HAS_FALLBACK: 812 case AX_ATTR_CANVAS_HAS_FALLBACK:
717 result += " has_fallback=" + value; 813 result += " has_fallback=" + value;
718 break; 814 break;
815 case AX_ATTR_MODAL:
816 result += " modal=" + value;
817 break;
719 case AX_BOOL_ATTRIBUTE_NONE: 818 case AX_BOOL_ATTRIBUTE_NONE:
720 break; 819 break;
721 } 820 }
722 } 821 }
723 822
724 for (size_t i = 0; i < intlist_attributes.size(); ++i) { 823 for (size_t i = 0; i < intlist_attributes.size(); ++i) {
725 const std::vector<int32_t>& values = intlist_attributes[i].second; 824 const std::vector<int32_t>& values = intlist_attributes[i].second;
726 switch (intlist_attributes[i].first) { 825 switch (intlist_attributes[i].first) {
727 case AX_ATTR_INDIRECT_CHILD_IDS: 826 case AX_ATTR_INDIRECT_CHILD_IDS:
728 result += " indirect_child_ids=" + IntVectorToString(values); 827 result += " indirect_child_ids=" + IntVectorToString(values);
729 break; 828 break;
730 case AX_ATTR_CONTROLS_IDS: 829 case AX_ATTR_CONTROLS_IDS:
731 result += " controls_ids=" + IntVectorToString(values); 830 result += " controls_ids=" + IntVectorToString(values);
732 break; 831 break;
733 case AX_ATTR_DESCRIBEDBY_IDS: 832 case AX_ATTR_DESCRIBEDBY_IDS:
734 result += " describedby_ids=" + IntVectorToString(values); 833 result += " describedby_ids=" + IntVectorToString(values);
735 break; 834 break;
835 case AX_ATTR_DETAILS_IDS:
836 result += " details_ids=" + IntVectorToString(values);
837 break;
736 case AX_ATTR_FLOWTO_IDS: 838 case AX_ATTR_FLOWTO_IDS:
737 result += " flowto_ids=" + IntVectorToString(values); 839 result += " flowto_ids=" + IntVectorToString(values);
738 break; 840 break;
739 case AX_ATTR_LABELLEDBY_IDS: 841 case AX_ATTR_LABELLEDBY_IDS:
740 result += " labelledby_ids=" + IntVectorToString(values); 842 result += " labelledby_ids=" + IntVectorToString(values);
741 break; 843 break;
742 case AX_ATTR_LINE_BREAKS: 844 case AX_ATTR_LINE_BREAKS:
743 result += " line_breaks=" + IntVectorToString(values); 845 result += " line_breaks=" + IntVectorToString(values);
744 break; 846 break;
745 case AX_ATTR_MARKER_TYPES: { 847 case AX_ATTR_MARKER_TYPES: {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 } 898 }
797 } 899 }
798 900
799 if (!child_ids.empty()) 901 if (!child_ids.empty())
800 result += " child_ids=" + IntVectorToString(child_ids); 902 result += " child_ids=" + IntVectorToString(child_ids);
801 903
802 return result; 904 return result;
803 } 905 }
804 906
805 } // namespace ui 907 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accessibility/ax_node_data.h ('k') | ui/accessibility/ax_tree_combiner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698