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

Side by Side Diff: content/browser/accessibility/browser_accessibility.cc

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 #include "content/browser/accessibility/browser_accessibility.h" 5 #include "content/browser/accessibility/browser_accessibility.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 return GetData().GetHtmlAttribute(html_attr, value); 735 return GetData().GetHtmlAttribute(html_attr, value);
736 } 736 }
737 737
738 bool BrowserAccessibility::GetHtmlAttribute( 738 bool BrowserAccessibility::GetHtmlAttribute(
739 const char* html_attr, base::string16* value) const { 739 const char* html_attr, base::string16* value) const {
740 return GetData().GetHtmlAttribute(html_attr, value); 740 return GetData().GetHtmlAttribute(html_attr, value);
741 } 741 }
742 742
743 BrowserAccessibility* BrowserAccessibility::GetTable() const { 743 BrowserAccessibility* BrowserAccessibility::GetTable() const {
744 BrowserAccessibility* table = const_cast<BrowserAccessibility*>(this); 744 BrowserAccessibility* table = const_cast<BrowserAccessibility*>(this);
745 while (table && !table->IsTableLikeRole()) 745 while (table && !ui::IsTableLikeRole(table->GetRole()))
746 table = table->PlatformGetParent(); 746 table = table->PlatformGetParent();
747 return table; 747 return table;
748 } 748 }
749 749
750 BrowserAccessibility* BrowserAccessibility::GetTableCell(int index) const { 750 BrowserAccessibility* BrowserAccessibility::GetTableCell(int index) const {
751 if (!IsTableLikeRole() && !IsCellOrTableHeaderRole()) 751 if (!ui::IsTableLikeRole(GetRole()) &&
752 !ui::IsCellOrTableHeaderRole(GetRole()))
752 return nullptr; 753 return nullptr;
753 754
754 BrowserAccessibility* table = GetTable(); 755 BrowserAccessibility* table = GetTable();
755 if (!table) 756 if (!table)
756 return nullptr; 757 return nullptr;
757 const std::vector<int32_t>& unique_cell_ids = 758 const std::vector<int32_t>& unique_cell_ids =
758 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); 759 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
759 if (index < 0 || index >= static_cast<int>(unique_cell_ids.size())) 760 if (index < 0 || index >= static_cast<int>(unique_cell_ids.size()))
760 return nullptr; 761 return nullptr;
761 return table->manager_->GetFromID(unique_cell_ids[index]); 762 return table->manager_->GetFromID(unique_cell_ids[index]);
762 } 763 }
763 764
764 BrowserAccessibility* BrowserAccessibility::GetTableCell(int row, 765 BrowserAccessibility* BrowserAccessibility::GetTableCell(int row,
765 int column) const { 766 int column) const {
766 if (!IsTableLikeRole() && !IsCellOrTableHeaderRole()) 767 if (!ui::IsTableLikeRole(GetRole()) &&
768 !ui::IsCellOrTableHeaderRole(GetRole()))
767 return nullptr; 769 return nullptr;
768 if (row < 0 || row >= GetTableRowCount() || column < 0 || 770 if (row < 0 || row >= GetTableRowCount() || column < 0 ||
769 column >= GetTableColumnCount()) { 771 column >= GetTableColumnCount()) {
770 return nullptr; 772 return nullptr;
771 } 773 }
772 774
773 BrowserAccessibility* table = GetTable(); 775 BrowserAccessibility* table = GetTable();
774 if (!table) 776 if (!table)
775 return nullptr; 777 return nullptr;
776 778
777 // In contrast to unique cell IDs, these are duplicated whenever a cell spans 779 // In contrast to unique cell IDs, these are duplicated whenever a cell spans
778 // multiple columns or rows. 780 // multiple columns or rows.
779 const std::vector<int32_t>& cell_ids = 781 const std::vector<int32_t>& cell_ids =
780 table->GetIntListAttribute(ui::AX_ATTR_CELL_IDS); 782 table->GetIntListAttribute(ui::AX_ATTR_CELL_IDS);
781 DCHECK_EQ(GetTableRowCount() * GetTableColumnCount(), 783 DCHECK_EQ(GetTableRowCount() * GetTableColumnCount(),
782 static_cast<int>(cell_ids.size())); 784 static_cast<int>(cell_ids.size()));
783 int position = row * GetTableColumnCount() + column; 785 int position = row * GetTableColumnCount() + column;
784 if (position < 0 || position >= static_cast<int>(cell_ids.size())) 786 if (position < 0 || position >= static_cast<int>(cell_ids.size()))
785 return nullptr; 787 return nullptr;
786 return table->manager_->GetFromID(cell_ids[position]); 788 return table->manager_->GetFromID(cell_ids[position]);
787 } 789 }
788 790
789 int BrowserAccessibility::GetTableCellIndex() const { 791 int BrowserAccessibility::GetTableCellIndex() const {
790 if (!IsCellOrTableHeaderRole()) 792 if (!ui::IsCellOrTableHeaderRole(GetRole()))
791 return -1; 793 return -1;
792 794
793 BrowserAccessibility* table = GetTable(); 795 BrowserAccessibility* table = GetTable();
794 if (!table) 796 if (!table)
795 return -1; 797 return -1;
796 798
797 const std::vector<int32_t>& unique_cell_ids = 799 const std::vector<int32_t>& unique_cell_ids =
798 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); 800 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
799 auto iter = 801 auto iter =
800 std::find(unique_cell_ids.begin(), unique_cell_ids.end(), GetId()); 802 std::find(unique_cell_ids.begin(), unique_cell_ids.end(), GetId());
801 if (iter == unique_cell_ids.end()) 803 if (iter == unique_cell_ids.end())
802 return -1; 804 return -1;
803 805
804 return std::distance(unique_cell_ids.begin(), iter); 806 return std::distance(unique_cell_ids.begin(), iter);
805 } 807 }
806 808
807 int BrowserAccessibility::GetTableColumn() const { 809 int BrowserAccessibility::GetTableColumn() const {
808 return GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX); 810 return GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX);
809 } 811 }
810 812
811 int BrowserAccessibility::GetTableColumnCount() const { 813 int BrowserAccessibility::GetTableColumnCount() const {
812 BrowserAccessibility* table = GetTable(); 814 BrowserAccessibility* table = GetTable();
813 if (!table) 815 if (!table)
814 return 0; 816 return 0;
815 817
816 return table->GetIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT); 818 return table->GetIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT);
817 } 819 }
818 820
819 int BrowserAccessibility::GetTableColumnSpan() const { 821 int BrowserAccessibility::GetTableColumnSpan() const {
820 if (!IsCellOrTableHeaderRole()) 822 if (!ui::IsCellOrTableHeaderRole(GetRole()))
821 return 0; 823 return 0;
822 824
823 int column_span; 825 int column_span;
824 if (GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, &column_span)) 826 if (GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, &column_span))
825 return column_span; 827 return column_span;
826 return 1; 828 return 1;
827 } 829 }
828 830
829 int BrowserAccessibility::GetTableRow() const { 831 int BrowserAccessibility::GetTableRow() const {
830 return GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX); 832 return GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX);
831 } 833 }
832 834
833 int BrowserAccessibility::GetTableRowCount() const { 835 int BrowserAccessibility::GetTableRowCount() const {
834 BrowserAccessibility* table = GetTable(); 836 BrowserAccessibility* table = GetTable();
835 if (!table) 837 if (!table)
836 return 0; 838 return 0;
837 839
838 return table->GetIntAttribute(ui::AX_ATTR_TABLE_ROW_COUNT); 840 return table->GetIntAttribute(ui::AX_ATTR_TABLE_ROW_COUNT);
839 } 841 }
840 842
841 int BrowserAccessibility::GetTableRowSpan() const { 843 int BrowserAccessibility::GetTableRowSpan() const {
842 if (!IsCellOrTableHeaderRole()) 844 if (!ui::IsCellOrTableHeaderRole(GetRole()))
843 return 0; 845 return 0;
844 846
845 int row_span; 847 int row_span;
846 if (GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_SPAN, &row_span)) 848 if (GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_SPAN, &row_span))
847 return row_span; 849 return row_span;
848 return 1; 850 return 1;
849 } 851 }
850 852
851 base::string16 BrowserAccessibility::GetText() const { 853 base::string16 BrowserAccessibility::GetText() const {
852 return GetInnerText(); 854 return GetInnerText();
853 } 855 }
854 856
855 bool BrowserAccessibility::HasState(ui::AXState state_enum) const { 857 bool BrowserAccessibility::HasState(ui::AXState state_enum) const {
856 return GetData().HasState(state_enum); 858 return GetData().HasState(state_enum);
857 } 859 }
858 860
859 bool BrowserAccessibility::HasAction(ui::AXAction action_enum) const { 861 bool BrowserAccessibility::HasAction(ui::AXAction action_enum) const {
860 return GetData().HasAction(action_enum); 862 return GetData().HasAction(action_enum);
861 } 863 }
862 864
863 bool BrowserAccessibility::IsCellOrTableHeaderRole() const {
864 return (GetRole() == ui::AX_ROLE_CELL ||
865 GetRole() == ui::AX_ROLE_COLUMN_HEADER ||
866 GetRole() == ui::AX_ROLE_ROW_HEADER);
867 }
868
869 bool BrowserAccessibility::IsTableLikeRole() const {
870 return (GetRole() == ui::AX_ROLE_TABLE ||
871 GetRole() == ui::AX_ROLE_GRID ||
872 GetRole() == ui::AX_ROLE_TREE_GRID);
873 }
874
875 bool BrowserAccessibility::HasCaret() const { 865 bool BrowserAccessibility::HasCaret() const {
876 if (IsSimpleTextControl() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) && 866 if (IsSimpleTextControl() && HasIntAttribute(ui::AX_ATTR_TEXT_SEL_START) &&
877 HasIntAttribute(ui::AX_ATTR_TEXT_SEL_END)) { 867 HasIntAttribute(ui::AX_ATTR_TEXT_SEL_END)) {
878 return true; 868 return true;
879 } 869 }
880 870
881 // The caret is always at the focus of the selection. 871 // The caret is always at the focus of the selection.
882 int32_t focus_id = manager()->GetTreeData().sel_focus_object_id; 872 int32_t focus_id = manager()->GetTreeData().sel_focus_object_id;
883 BrowserAccessibility* focus_object = manager()->GetFromID(focus_id); 873 BrowserAccessibility* focus_object = manager()->GetFromID(focus_id);
884 if (!focus_object) 874 if (!focus_object)
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 1150
1161 if (data.action == ui::AX_ACTION_FOCUS) { 1151 if (data.action == ui::AX_ACTION_FOCUS) {
1162 manager_->SetFocus(*this); 1152 manager_->SetFocus(*this);
1163 return true; 1153 return true;
1164 } 1154 }
1165 1155
1166 return false; 1156 return false;
1167 } 1157 }
1168 1158
1169 } // namespace content 1159 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.h ('k') | content/browser/accessibility/browser_accessibility_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698