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

Side by Side Diff: content/renderer/accessibility/blink_ax_tree_source.cc

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 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 case ui::AX_ROLE_MAIN: 92 case ui::AX_ROLE_MAIN:
93 return "main"; 93 return "main";
94 case ui::AX_ROLE_NAVIGATION: 94 case ui::AX_ROLE_NAVIGATION:
95 return "navigation"; 95 return "navigation";
96 case ui::AX_ROLE_RADIO_BUTTON: 96 case ui::AX_ROLE_RADIO_BUTTON:
97 return "radio"; 97 return "radio";
98 case ui::AX_ROLE_REGION: 98 case ui::AX_ROLE_REGION:
99 return "region"; 99 return "region";
100 case ui::AX_ROLE_SLIDER: 100 case ui::AX_ROLE_SLIDER:
101 return "slider"; 101 return "slider";
102 case ui::AX_ROLE_TIME:
103 return "time";
102 default: 104 default:
103 break; 105 break;
104 } 106 }
105 107
106 return std::string(); 108 return std::string();
107 } 109 }
108 110
109 void AddIntListAttributeFromWebObjects(ui::AXIntListAttribute attr, 111 void AddIntListAttributeFromWebObjects(ui::AXIntListAttribute attr,
110 WebVector<WebAXObject> objects, 112 WebVector<WebAXObject> objects,
111 AXContentNodeData* dst) { 113 AXContentNodeData* dst) {
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 565
564 // ARIA role. 566 // ARIA role.
565 if (element.hasAttribute("role")) { 567 if (element.hasAttribute("role")) {
566 dst->AddStringAttribute( 568 dst->AddStringAttribute(
567 ui::AX_ATTR_ROLE, 569 ui::AX_ATTR_ROLE,
568 element.getAttribute("role").utf8()); 570 element.getAttribute("role").utf8());
569 } else { 571 } else {
570 std::string role = GetEquivalentAriaRoleString(dst->role); 572 std::string role = GetEquivalentAriaRoleString(dst->role);
571 if (!role.empty()) 573 if (!role.empty())
572 dst->AddStringAttribute(ui::AX_ATTR_ROLE, role); 574 dst->AddStringAttribute(ui::AX_ATTR_ROLE, role);
573 else if (dst->role == ui::AX_ROLE_TIME)
574 dst->AddStringAttribute(ui::AX_ATTR_ROLE, "time");
575 } 575 }
576 576
577 // Browser plugin (used in a <webview>). 577 // Browser plugin (used in a <webview>).
578 BrowserPlugin* browser_plugin = BrowserPlugin::GetFromNode(element); 578 BrowserPlugin* browser_plugin = BrowserPlugin::GetFromNode(element);
579 if (browser_plugin) { 579 if (browser_plugin) {
580 dst->AddContentIntAttribute( 580 dst->AddContentIntAttribute(
581 AX_CONTENT_ATTR_CHILD_BROWSER_PLUGIN_INSTANCE_ID, 581 AX_CONTENT_ATTR_CHILD_BROWSER_PLUGIN_INSTANCE_ID,
582 browser_plugin->browser_plugin_instance_id()); 582 browser_plugin->browser_plugin_instance_id());
583 } 583 }
584 584
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 unique_cell_ids.push_back(cell_id); 660 unique_cell_ids.push_back(cell_id);
661 } 661 }
662 } 662 }
663 cell_ids.push_back(cell_id); 663 cell_ids.push_back(cell_id);
664 } 664 }
665 dst->AddIntListAttribute(ui::AX_ATTR_CELL_IDS, cell_ids); 665 dst->AddIntListAttribute(ui::AX_ATTR_CELL_IDS, cell_ids);
666 dst->AddIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS, unique_cell_ids); 666 dst->AddIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS, unique_cell_ids);
667 } 667 }
668 } 668 }
669 669
670 if (dst->role == ui::AX_ROLE_TABLE ||
671 dst->role == ui::AX_ROLE_GRID ||
672 dst->role == ui::AX_ROLE_TREE_GRID) {
673 int aria_colcount = src.ariaColumnCount();
674 if (aria_colcount)
675 dst->AddIntAttribute(ui::AX_ATTR_ARIA_COL_COUNT, aria_colcount);
676
677 int aria_rowcount = src.ariaRowCount();
678 if (aria_rowcount)
679 dst->AddIntAttribute(ui::AX_ATTR_ARIA_ROW_COUNT, aria_rowcount);
680 }
681
670 if (dst->role == ui::AX_ROLE_ROW) { 682 if (dst->role == ui::AX_ROLE_ROW) {
671 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_INDEX, src.rowIndex()); 683 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_INDEX, src.rowIndex());
672 WebAXObject header = src.rowHeader(); 684 WebAXObject header = src.rowHeader();
673 if (!header.isDetached()) 685 if (!header.isDetached())
674 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_HEADER_ID, header.axID()); 686 dst->AddIntAttribute(ui::AX_ATTR_TABLE_ROW_HEADER_ID, header.axID());
675 } 687 }
676 688
677 if (dst->role == ui::AX_ROLE_COLUMN) { 689 if (dst->role == ui::AX_ROLE_COLUMN) {
678 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_INDEX, src.columnIndex()); 690 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_INDEX, src.columnIndex());
679 WebAXObject header = src.columnHeader(); 691 WebAXObject header = src.columnHeader();
680 if (!header.isDetached()) 692 if (!header.isDetached())
681 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_HEADER_ID, header.axID()); 693 dst->AddIntAttribute(ui::AX_ATTR_TABLE_COLUMN_HEADER_ID, header.axID());
682 } 694 }
683 695
684 if (dst->role == ui::AX_ROLE_CELL || 696 if (dst->role == ui::AX_ROLE_CELL ||
685 dst->role == ui::AX_ROLE_ROW_HEADER || 697 dst->role == ui::AX_ROLE_ROW_HEADER ||
686 dst->role == ui::AX_ROLE_COLUMN_HEADER) { 698 dst->role == ui::AX_ROLE_COLUMN_HEADER ||
687 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, 699 dst->role == ui::AX_ROLE_ROW) {
688 src.cellColumnIndex()); 700 if (dst->role != ui::AX_ROLE_ROW) {
689 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, 701 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX,
690 src.cellColumnSpan()); 702 src.cellColumnIndex());
691 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX, src.cellRowIndex()); 703 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN,
692 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_SPAN, src.cellRowSpan()); 704 src.cellColumnSpan());
705 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX,
706 src.cellRowIndex());
707 dst->AddIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_SPAN,src.cellRowSpan());
708
709 int aria_colindex = src.ariaColumnIndex();
710 if (aria_colindex)
711 dst->AddIntAttribute(ui::AX_ATTR_ARIA_COL_INDEX, aria_colindex);
712 }
713
714 int aria_rowindex = src.ariaRowIndex();
715 if (aria_rowindex)
716 dst->AddIntAttribute(ui::AX_ATTR_ARIA_ROW_INDEX, aria_rowindex);
693 } 717 }
694 718
695 if ((dst->role == ui::AX_ROLE_ROW_HEADER || 719 if ((dst->role == ui::AX_ROLE_ROW_HEADER ||
696 dst->role == ui::AX_ROLE_COLUMN_HEADER) && src.sortDirection()) { 720 dst->role == ui::AX_ROLE_COLUMN_HEADER) && src.sortDirection()) {
697 dst->AddIntAttribute(ui::AX_ATTR_SORT_DIRECTION, 721 dst->AddIntAttribute(ui::AX_ATTR_SORT_DIRECTION,
698 AXSortDirectionFromBlink(src.sortDirection())); 722 AXSortDirectionFromBlink(src.sortDirection()));
699 } 723 }
700 724
701 // Add the ids of *indirect* children - those who are children of this node, 725 // Add the ids of *indirect* children - those who are children of this node,
702 // but whose parent is *not* this node. One example is a table 726 // but whose parent is *not* this node. One example is a table
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 return WebAXObject(); 780 return WebAXObject();
757 781
758 WebDocument document = render_frame_->GetWebFrame()->document(); 782 WebDocument document = render_frame_->GetWebFrame()->document();
759 if (!document.isNull()) 783 if (!document.isNull())
760 return document.accessibilityObject(); 784 return document.accessibilityObject();
761 785
762 return WebAXObject(); 786 return WebAXObject();
763 } 787 }
764 788
765 } // namespace content 789 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698