OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/renderer/accessibility/blink_ax_tree_source.h" | 5 #include "content/renderer/accessibility/blink_ax_tree_source.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 } | 662 } |
663 | 663 |
664 if (dst->role == ui::AX_ROLE_DIALOG || | 664 if (dst->role == ui::AX_ROLE_DIALOG || |
665 dst->role == ui::AX_ROLE_ALERT_DIALOG) { | 665 dst->role == ui::AX_ROLE_ALERT_DIALOG) { |
666 dst->AddBoolAttribute(ui::AX_ATTR_MODAL, src.IsModal()); | 666 dst->AddBoolAttribute(ui::AX_ATTR_MODAL, src.IsModal()); |
667 } | 667 } |
668 | 668 |
669 if (dst->role == ui::AX_ROLE_ROOT_WEB_AREA) | 669 if (dst->role == ui::AX_ROLE_ROOT_WEB_AREA) |
670 dst->AddStringAttribute(ui::AX_ATTR_HTML_TAG, "#document"); | 670 dst->AddStringAttribute(ui::AX_ATTR_HTML_TAG, "#document"); |
671 | 671 |
672 if (dst->role == ui::AX_ROLE_TABLE) { | 672 const bool is_table_like_role = dst->role == ui::AX_ROLE_TABLE || |
| 673 dst->role == ui::AX_ROLE_GRID || |
| 674 dst->role == ui::AX_ROLE_TREE_GRID; |
| 675 if (is_table_like_role) { |
673 int column_count = src.ColumnCount(); | 676 int column_count = src.ColumnCount(); |
674 int row_count = src.RowCount(); | 677 int row_count = src.RowCount(); |
675 if (column_count > 0 && row_count > 0) { | 678 if (column_count > 0 && row_count > 0) { |
676 std::set<int32_t> unique_cell_id_set; | 679 std::set<int32_t> unique_cell_id_set; |
677 std::vector<int32_t> cell_ids; | 680 std::vector<int32_t> cell_ids; |
678 std::vector<int32_t> unique_cell_ids; | 681 std::vector<int32_t> unique_cell_ids; |
679 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT, column_count); | 682 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_COUNT, column_count); |
680 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_COUNT, row_count); | 683 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_COUNT, row_count); |
681 WebAXObject header = src.HeaderContainerObject(); | 684 WebAXObject header = src.HeaderContainerObject(); |
682 if (!header.IsDetached()) | 685 if (!header.IsDetached()) |
683 dst->AddIntAttribute(ui::AX_ATTR_TABLE_HEADER_ID, header.AxID()); | 686 dst->AddIntAttribute(ui::AX_ATTR_TABLE_HEADER_ID, header.AxID()); |
684 for (int i = 0; i < column_count * row_count; ++i) { | 687 for (int i = 0; i < column_count * row_count; ++i) { |
685 WebAXObject cell = | 688 WebAXObject cell = |
686 src.CellForColumnAndRow(i % column_count, i / column_count); | 689 src.CellForColumnAndRow(i % column_count, i / column_count); |
687 int cell_id = -1; | 690 int cell_id = -1; |
688 if (!cell.IsDetached()) { | 691 if (!cell.IsDetached()) { |
689 cell_id = cell.AxID(); | 692 cell_id = cell.AxID(); |
690 if (unique_cell_id_set.find(cell_id) == unique_cell_id_set.end()) { | 693 if (unique_cell_id_set.find(cell_id) == unique_cell_id_set.end()) { |
691 unique_cell_id_set.insert(cell_id); | 694 unique_cell_id_set.insert(cell_id); |
692 unique_cell_ids.push_back(cell_id); | 695 unique_cell_ids.push_back(cell_id); |
693 } | 696 } |
694 } | 697 } |
695 cell_ids.push_back(cell_id); | 698 cell_ids.push_back(cell_id); |
696 } | 699 } |
697 dst->AddIntListAttribute(ui::AX_ATTR_CELL_IDS, cell_ids); | 700 dst->AddIntListAttribute(ui::AX_ATTR_CELL_IDS, cell_ids); |
698 dst->AddIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS, unique_cell_ids); | 701 dst->AddIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS, unique_cell_ids); |
699 } | 702 } |
700 } | |
701 | 703 |
702 if (dst->role == ui::AX_ROLE_TABLE || | |
703 dst->role == ui::AX_ROLE_GRID || | |
704 dst->role == ui::AX_ROLE_TREE_GRID) { | |
705 int aria_colcount = src.AriaColumnCount(); | 704 int aria_colcount = src.AriaColumnCount(); |
706 if (aria_colcount) | 705 if (aria_colcount) |
707 dst->AddIntAttribute(ui::AX_ATTR_ARIA_COL_COUNT, aria_colcount); | 706 dst->AddIntAttribute(ui::AX_ATTR_ARIA_COL_COUNT, aria_colcount); |
708 | 707 |
709 int aria_rowcount = src.AriaRowCount(); | 708 int aria_rowcount = src.AriaRowCount(); |
710 if (aria_rowcount) | 709 if (aria_rowcount) |
711 dst->AddIntAttribute(ui::AX_ATTR_ARIA_ROW_COUNT, aria_rowcount); | 710 dst->AddIntAttribute(ui::AX_ATTR_ARIA_ROW_COUNT, aria_rowcount); |
712 } | 711 } |
713 | 712 |
714 if (dst->role == ui::AX_ROLE_ROW) { | 713 if (dst->role == ui::AX_ROLE_ROW) { |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 return WebAXObject(); | 884 return WebAXObject(); |
886 | 885 |
887 WebDocument document = render_frame_->GetWebFrame()->GetDocument(); | 886 WebDocument document = render_frame_->GetWebFrame()->GetDocument(); |
888 if (!document.IsNull()) | 887 if (!document.IsNull()) |
889 return document.AccessibilityObject(); | 888 return document.AccessibilityObject(); |
890 | 889 |
891 return WebAXObject(); | 890 return WebAXObject(); |
892 } | 891 } |
893 | 892 |
894 } // namespace content | 893 } // namespace content |
OLD | NEW |