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

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

Issue 2539503003: ARIA 1.1: implementation for aria-col-* and aria-row-*. (Closed)
Patch Set: 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 (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_win.h" 5 #include "content/browser/accessibility/browser_accessibility_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 3804 matching lines...) Expand 10 before | Expand all | Expand 10 after
3815 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); 3815 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
3816 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { 3816 for (size_t i = 0; i < unique_cell_ids.size(); ++i) {
3817 if (unique_cell_ids[i] == GetId()) { 3817 if (unique_cell_ids[i] == GetId()) {
3818 win_attributes_->ia2_attributes.push_back( 3818 win_attributes_->ia2_attributes.push_back(
3819 base::string16(L"table-cell-index:") + base::IntToString16(i)); 3819 base::string16(L"table-cell-index:") + base::IntToString16(i));
3820 } 3820 }
3821 } 3821 }
3822 } 3822 }
3823 } 3823 }
3824 3824
3825 // Expose aria-colcount and aria-rowcount in a table, grid or treegrid.
3826 if (IsTableOrGridOrTreeGridRole()) {
3827 IntAttributeToIA2(ui::AX_ATTR_ARIA_COL_COUNT, "colcount");
3828 IntAttributeToIA2(ui::AX_ATTR_ARIA_ROW_COUNT, "rowcount");
3829 }
3830
3831 // Expose aria-colindex and aria-rowindex in a cell or row.
3832 if (IsCellOrTableHeaderRole() || GetRole() == ui::AX_ROLE_ROW) {
3833 if (GetRole() != ui::AX_ROLE_ROW)
3834 IntAttributeToIA2(ui::AX_ATTR_ARIA_COL_INDEX, "colindex");
3835 IntAttributeToIA2(ui::AX_ATTR_ARIA_ROW_INDEX, "rowindex");
3836 }
3837
3825 // Expose row or column header sort direction. 3838 // Expose row or column header sort direction.
3826 int32_t sort_direction; 3839 int32_t sort_direction;
3827 if ((ia_role() == ROLE_SYSTEM_COLUMNHEADER || 3840 if ((ia_role() == ROLE_SYSTEM_COLUMNHEADER ||
3828 ia_role() == ROLE_SYSTEM_ROWHEADER) && 3841 ia_role() == ROLE_SYSTEM_ROWHEADER) &&
3829 GetIntAttribute(ui::AX_ATTR_SORT_DIRECTION, &sort_direction)) { 3842 GetIntAttribute(ui::AX_ATTR_SORT_DIRECTION, &sort_direction)) {
3830 switch (static_cast<ui::AXSortDirection>(sort_direction)) { 3843 switch (static_cast<ui::AXSortDirection>(sort_direction)) {
3831 case ui::AX_SORT_DIRECTION_NONE: 3844 case ui::AX_SORT_DIRECTION_NONE:
3832 break; 3845 break;
3833 case ui::AX_SORT_DIRECTION_UNSORTED: 3846 case ui::AX_SORT_DIRECTION_UNSORTED:
3834 win_attributes_->ia2_attributes.push_back(L"sort:none"); 3847 win_attributes_->ia2_attributes.push_back(L"sort:none");
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3869 ui::AX_ATTR_DESCRIBEDBY_IDS); 3882 ui::AX_ATTR_DESCRIBEDBY_IDS);
3870 AddBidirectionalRelations(IA2_RELATION_FLOWS_TO, IA2_RELATION_FLOWS_FROM, 3883 AddBidirectionalRelations(IA2_RELATION_FLOWS_TO, IA2_RELATION_FLOWS_FROM,
3871 ui::AX_ATTR_FLOWTO_IDS); 3884 ui::AX_ATTR_FLOWTO_IDS);
3872 AddBidirectionalRelations(IA2_RELATION_LABELLED_BY, IA2_RELATION_LABEL_FOR, 3885 AddBidirectionalRelations(IA2_RELATION_LABELLED_BY, IA2_RELATION_LABEL_FOR,
3873 ui::AX_ATTR_LABELLEDBY_IDS); 3886 ui::AX_ATTR_LABELLEDBY_IDS);
3874 3887
3875 int member_of_id; 3888 int member_of_id;
3876 if (GetIntAttribute(ui::AX_ATTR_MEMBER_OF_ID, &member_of_id)) 3889 if (GetIntAttribute(ui::AX_ATTR_MEMBER_OF_ID, &member_of_id))
3877 AddRelation(IA2_RELATION_MEMBER_OF, member_of_id); 3890 AddRelation(IA2_RELATION_MEMBER_OF, member_of_id);
3878 3891
3892 // Expose slider value.
3893 if (ia_role() == ROLE_SYSTEM_PROGRESSBAR ||
3894 ia_role() == ROLE_SYSTEM_SCROLLBAR ||
3895 ia_role() == ROLE_SYSTEM_SLIDER) {
3896 base::string16 value_text = GetValueText();
3897 SanitizeStringAttributeForIA2(value_text, &value_text);
3898 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value_text);
3899 }
3900
3879 UpdateRequiredAttributes(); 3901 UpdateRequiredAttributes();
3880 // If this is a web area for a presentational iframe, give it a role of 3902 // If this is a web area for a presentational iframe, give it a role of
3881 // something other than DOCUMENT so that the fact that it's a separate doc 3903 // something other than DOCUMENT so that the fact that it's a separate doc
3882 // is not exposed to AT. 3904 // is not exposed to AT.
3883 if (IsWebAreaForPresentationalIframe()) { 3905 if (IsWebAreaForPresentationalIframe()) {
3884 win_attributes_->ia_role = ROLE_SYSTEM_GROUPING; 3906 win_attributes_->ia_role = ROLE_SYSTEM_GROUPING;
3885 win_attributes_->ia2_role = ROLE_SYSTEM_GROUPING; 3907 win_attributes_->ia2_role = ROLE_SYSTEM_GROUPING;
3886 } 3908 }
3887 } 3909 }
3888 3910
(...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after
4883 if (relation->get_target_ids().empty()) { 4905 if (relation->get_target_ids().empty()) {
4884 iter = relations_.erase(iter); 4906 iter = relations_.erase(iter);
4885 relation->Release(); 4907 relation->Release();
4886 } else { 4908 } else {
4887 ++iter; 4909 ++iter;
4888 } 4910 }
4889 } 4911 }
4890 } 4912 }
4891 4913
4892 void BrowserAccessibilityWin::UpdateRequiredAttributes() { 4914 void BrowserAccessibilityWin::UpdateRequiredAttributes() {
4893 // Expose slider value. 4915 if (IsCellOrTableHeaderRole()) {
4894 if (ia_role() == ROLE_SYSTEM_PROGRESSBAR || 4916 // Expose colspan attribute.
4895 ia_role() == ROLE_SYSTEM_SCROLLBAR || 4917 base::string16 colspan;
4896 ia_role() == ROLE_SYSTEM_SLIDER) { 4918 if (GetHtmlAttribute("aria-colspan", &colspan)) {
4897 base::string16 value_text = GetValueText(); 4919 SanitizeStringAttributeForIA2(colspan, &colspan);
4898 SanitizeStringAttributeForIA2(value_text, &value_text); 4920 win_attributes_->ia2_attributes.push_back(L"colspan:" + colspan);
4899 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value_text); 4921 }
4922 // Expose rowspan attribute.
4923 base::string16 rowspan;
4924 if (GetHtmlAttribute("aria-rowspan", &rowspan)) {
4925 SanitizeStringAttributeForIA2(rowspan, &rowspan);
4926 win_attributes_->ia2_attributes.push_back(L"rowspan:" + rowspan);
4927 }
4900 } 4928 }
4901 4929
4902 // Expose dropeffect attribute. 4930 // Expose dropeffect attribute.
4903 base::string16 drop_effect; 4931 base::string16 drop_effect;
4904 if (GetHtmlAttribute("aria-dropeffect", &drop_effect)) { 4932 if (GetHtmlAttribute("aria-dropeffect", &drop_effect)) {
4905 SanitizeStringAttributeForIA2(drop_effect, &drop_effect); 4933 SanitizeStringAttributeForIA2(drop_effect, &drop_effect);
4906 win_attributes_->ia2_attributes.push_back(L"dropeffect:" + drop_effect); 4934 win_attributes_->ia2_attributes.push_back(L"dropeffect:" + drop_effect);
4907 } 4935 }
4908 4936
4909 // Expose grabbed attribute. 4937 // Expose grabbed attribute.
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
5531 return static_cast<BrowserAccessibilityWin*>(obj); 5559 return static_cast<BrowserAccessibilityWin*>(obj);
5532 } 5560 }
5533 5561
5534 const BrowserAccessibilityWin* 5562 const BrowserAccessibilityWin*
5535 ToBrowserAccessibilityWin(const BrowserAccessibility* obj) { 5563 ToBrowserAccessibilityWin(const BrowserAccessibility* obj) {
5536 DCHECK(!obj || obj->IsNative()); 5564 DCHECK(!obj || obj->IsNative());
5537 return static_cast<const BrowserAccessibilityWin*>(obj); 5565 return static_cast<const BrowserAccessibilityWin*>(obj);
5538 } 5566 }
5539 5567
5540 } // namespace content 5568 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698