OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |