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

Side by Side Diff: ui/accessibility/platform/ax_platform_node_win.cc

Issue 2965873002: Move IA2 Role handling to AXPlatformNodeWin. (Closed)
Patch Set: handle presentation elements in axplatformnodewin. Also delete InitRoleAndState method 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <atlbase.h> 5 #include <atlbase.h>
6 #include <atlcom.h> 6 #include <atlcom.h>
7 #include <limits.h> 7 #include <limits.h>
8 #include <oleacc.h> 8 #include <oleacc.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 // Deprecated. 734 // Deprecated.
735 return E_NOTIMPL; 735 return E_NOTIMPL;
736 } 736 }
737 737
738 // 738 //
739 // IAccessible2 implementation. 739 // IAccessible2 implementation.
740 // 740 //
741 741
742 STDMETHODIMP AXPlatformNodeWin::role(LONG* role) { 742 STDMETHODIMP AXPlatformNodeWin::role(LONG* role) {
743 COM_OBJECT_VALIDATE_1_ARG(role); 743 COM_OBJECT_VALIDATE_1_ARG(role);
744 *role = MSAARole(); 744
745 *role = MSAA_IA2Role();
746 // If we didn't explicitly set the IAccessible2 role, make it the same
747 // as the MSAA role.
748 if (!*role)
749 *role = MSAARole();
745 return S_OK; 750 return S_OK;
746 } 751 }
747 752
748 STDMETHODIMP AXPlatformNodeWin::get_states(AccessibleStates* states) { 753 STDMETHODIMP AXPlatformNodeWin::get_states(AccessibleStates* states) {
749 COM_OBJECT_VALIDATE_1_ARG(states); 754 COM_OBJECT_VALIDATE_1_ARG(states);
750 *states = MSAA_IA2State(); 755 *states = MSAA_IA2State();
751 return S_OK; 756 return S_OK;
752 } 757 }
753 758
754 STDMETHODIMP AXPlatformNodeWin::get_uniqueID(LONG* unique_id) { 759 STDMETHODIMP AXPlatformNodeWin::get_uniqueID(LONG* unique_id) {
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 ia2_state |= IA2_STATE_SINGLE_LINE; 1649 ia2_state |= IA2_STATE_SINGLE_LINE;
1645 } 1650 }
1646 ia2_state |= IA2_STATE_SELECTABLE_TEXT; 1651 ia2_state |= IA2_STATE_SELECTABLE_TEXT;
1647 break; 1652 break;
1648 default: 1653 default:
1649 break; 1654 break;
1650 } 1655 }
1651 return ia2_state; 1656 return ia2_state;
1652 } 1657 }
1653 1658
1659 int32_t AXPlatformNodeWin::MSAA_IA2Role() {
dmazzoni 2017/07/06 22:58:05 Same, I'd drop MSAA_ I'd also add a comment here
1660 // If this is a web area for a presentational iframe, give it a role of
1661 // something other than DOCUMENT so that the fact that it's a separate doc
1662 // is not exposed to AT.
1663 if (IsWebAreaForPresentationalIframe()) {
1664 return ROLE_SYSTEM_GROUPING;
1665 }
1666
1667 int32_t ia2_role = 0;
1668
1669 switch (GetData().role) {
1670 case ui::AX_ROLE_BANNER:
1671 ia2_role = IA2_ROLE_HEADER;
1672 break;
1673 case ui::AX_ROLE_BLOCKQUOTE:
1674 ia2_role = IA2_ROLE_SECTION;
1675 break;
1676 case ui::AX_ROLE_CANVAS:
1677 if (GetBoolAttribute(ui::AX_ATTR_CANVAS_HAS_FALLBACK)) {
1678 ia2_role = IA2_ROLE_CANVAS;
1679 }
1680 break;
1681 case ui::AX_ROLE_CAPTION:
1682 ia2_role = IA2_ROLE_CAPTION;
1683 break;
1684 case ui::AX_ROLE_COLOR_WELL:
1685 ia2_role = IA2_ROLE_COLOR_CHOOSER;
1686 break;
1687 case ui::AX_ROLE_COMPLEMENTARY:
1688 ia2_role = IA2_ROLE_NOTE;
1689 break;
1690 case ui::AX_ROLE_CONTENT_INFO:
1691 ia2_role = IA2_ROLE_PARAGRAPH;
1692 break;
1693 case ui::AX_ROLE_DATE:
1694 case ui::AX_ROLE_DATE_TIME:
1695 ia2_role = IA2_ROLE_DATE_EDITOR;
1696 break;
1697 case ui::AX_ROLE_DEFINITION:
1698 ia2_role = IA2_ROLE_PARAGRAPH;
1699 break;
1700 case ui::AX_ROLE_DESCRIPTION_LIST_DETAIL:
1701 ia2_role = IA2_ROLE_PARAGRAPH;
1702 break;
1703 case ui::AX_ROLE_EMBEDDED_OBJECT:
1704 if (!delegate_->GetChildCount()) {
1705 ia2_role = IA2_ROLE_EMBEDDED_OBJECT;
1706 }
1707 break;
1708 case ui::AX_ROLE_FIGCAPTION:
1709 ia2_role = IA2_ROLE_CAPTION;
1710 break;
1711 case ui::AX_ROLE_FORM:
1712 ia2_role = IA2_ROLE_FORM;
1713 break;
1714 case ui::AX_ROLE_FOOTER:
1715 ia2_role = IA2_ROLE_FOOTER;
1716 break;
1717 case ui::AX_ROLE_GENERIC_CONTAINER:
1718 ia2_role = IA2_ROLE_SECTION;
1719 break;
1720 case ui::AX_ROLE_HEADING:
1721 ia2_role = IA2_ROLE_HEADING;
1722 break;
1723 case ui::AX_ROLE_IFRAME:
1724 ia2_role = IA2_ROLE_INTERNAL_FRAME;
1725 break;
1726 case ui::AX_ROLE_IMAGE_MAP:
1727 ia2_role = IA2_ROLE_IMAGE_MAP;
1728 break;
1729 case ui::AX_ROLE_LABEL_TEXT:
1730 case ui::AX_ROLE_LEGEND:
1731 ia2_role = IA2_ROLE_LABEL;
1732 break;
1733 case ui::AX_ROLE_MAIN:
1734 ia2_role = IA2_ROLE_PARAGRAPH;
1735 break;
1736 case ui::AX_ROLE_MARK:
1737 ia2_role = IA2_ROLE_TEXT_FRAME;
1738 break;
1739 case ui::AX_ROLE_MENU_ITEM_CHECK_BOX:
1740 ia2_role = IA2_ROLE_CHECK_MENU_ITEM;
1741 break;
1742 case ui::AX_ROLE_MENU_ITEM_RADIO:
1743 ia2_role = IA2_ROLE_RADIO_MENU_ITEM;
1744 break;
1745 case ui::AX_ROLE_NAVIGATION:
1746 ia2_role = IA2_ROLE_SECTION;
1747 break;
1748 case ui::AX_ROLE_NOTE:
1749 ia2_role = IA2_ROLE_NOTE;
1750 break;
1751 case ui::AX_ROLE_PARAGRAPH:
1752 ia2_role = IA2_ROLE_PARAGRAPH;
1753 break;
1754 case ui::AX_ROLE_PRE:
1755 ia2_role = IA2_ROLE_PARAGRAPH;
1756 break;
1757 case ui::AX_ROLE_REGION: {
1758 base::string16 html_tag = GetString16Attribute(ui::AX_ATTR_HTML_TAG);
1759
1760 if (html_tag == L"section") {
1761 ia2_role = IA2_ROLE_SECTION;
1762 }
1763 } break;
1764 case ui::AX_ROLE_RUBY:
1765 ia2_role = IA2_ROLE_TEXT_FRAME;
1766 break;
1767 case ui::AX_ROLE_RULER:
1768 ia2_role = IA2_ROLE_RULER;
1769 break;
1770 case ui::AX_ROLE_SCROLL_AREA:
1771 ia2_role = IA2_ROLE_SCROLL_PANE;
1772 break;
1773 case ui::AX_ROLE_SEARCH:
1774 ia2_role = IA2_ROLE_SECTION;
1775 break;
1776 case ui::AX_ROLE_SWITCH:
1777 ia2_role = IA2_ROLE_TOGGLE_BUTTON;
1778 break;
1779 case ui::AX_ROLE_TABLE_HEADER_CONTAINER:
1780 ia2_role = IA2_ROLE_SECTION;
1781 break;
1782 case ui::AX_ROLE_TOGGLE_BUTTON:
1783 ia2_role = IA2_ROLE_TOGGLE_BUTTON;
1784 break;
1785 case ui::AX_ROLE_ABBR:
1786 case ui::AX_ROLE_TIME:
1787 ia2_role = IA2_ROLE_TEXT_FRAME;
1788 break;
1789 default:
1790 break;
1791 }
1792 return ia2_role;
1793 }
1794
1654 bool AXPlatformNodeWin::ShouldNodeHaveReadonlyState( 1795 bool AXPlatformNodeWin::ShouldNodeHaveReadonlyState(
1655 const AXNodeData& data) const { 1796 const AXNodeData& data) const {
1656 if (data.GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY)) 1797 if (data.GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY))
1657 return true; 1798 return true;
1658 1799
1659 if (!data.HasState(ui::AX_STATE_READ_ONLY)) 1800 if (!data.HasState(ui::AX_STATE_READ_ONLY))
1660 return false; 1801 return false;
1661 1802
1662 switch (data.role) { 1803 switch (data.role) {
1663 case ui::AX_ROLE_ARTICLE: 1804 case ui::AX_ROLE_ARTICLE:
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
1987 } 2128 }
1988 2129
1989 if (!container) { 2130 if (!container) {
1990 return false; 2131 return false;
1991 } 2132 }
1992 2133
1993 return container->GetData().role == ui::AX_ROLE_TREE_GRID; 2134 return container->GetData().role == ui::AX_ROLE_TREE_GRID;
1994 } 2135 }
1995 2136
1996 } // namespace ui 2137 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698