OLD | NEW |
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 "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 3423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3434 case ui::AX_ROLE_CHECK_BOX: | 3434 case ui::AX_ROLE_CHECK_BOX: |
3435 ia_role_ = ROLE_SYSTEM_CHECKBUTTON; | 3435 ia_role_ = ROLE_SYSTEM_CHECKBUTTON; |
3436 ia2_state_ |= IA2_STATE_CHECKABLE; | 3436 ia2_state_ |= IA2_STATE_CHECKABLE; |
3437 break; | 3437 break; |
3438 case ui::AX_ROLE_COLOR_WELL: | 3438 case ui::AX_ROLE_COLOR_WELL: |
3439 ia_role_ = ROLE_SYSTEM_CLIENT; | 3439 ia_role_ = ROLE_SYSTEM_CLIENT; |
3440 ia2_role_ = IA2_ROLE_COLOR_CHOOSER; | 3440 ia2_role_ = IA2_ROLE_COLOR_CHOOSER; |
3441 break; | 3441 break; |
3442 case ui::AX_ROLE_COLUMN: | 3442 case ui::AX_ROLE_COLUMN: |
3443 ia_role_ = ROLE_SYSTEM_COLUMN; | 3443 ia_role_ = ROLE_SYSTEM_COLUMN; |
3444 ia_state_ |= STATE_SYSTEM_READONLY; | |
3445 break; | 3444 break; |
3446 case ui::AX_ROLE_COLUMN_HEADER: | 3445 case ui::AX_ROLE_COLUMN_HEADER: |
3447 ia_role_ = ROLE_SYSTEM_COLUMNHEADER; | 3446 ia_role_ = ROLE_SYSTEM_COLUMNHEADER; |
3448 ia_state_ |= STATE_SYSTEM_READONLY; | |
3449 break; | 3447 break; |
3450 case ui::AX_ROLE_COMBO_BOX: | 3448 case ui::AX_ROLE_COMBO_BOX: |
3451 ia_role_ = ROLE_SYSTEM_COMBOBOX; | 3449 ia_role_ = ROLE_SYSTEM_COMBOBOX; |
3452 break; | 3450 break; |
3453 case ui::AX_ROLE_COMPLEMENTARY: | 3451 case ui::AX_ROLE_COMPLEMENTARY: |
3454 ia_role_ = ROLE_SYSTEM_GROUPING; | 3452 ia_role_ = ROLE_SYSTEM_GROUPING; |
3455 ia2_role_ = IA2_ROLE_NOTE; | 3453 ia2_role_ = IA2_ROLE_NOTE; |
3456 break; | 3454 break; |
3457 case ui::AX_ROLE_CONTENT_INFO: | 3455 case ui::AX_ROLE_CONTENT_INFO: |
3458 ia_role_ = ROLE_SYSTEM_TEXT; | 3456 ia_role_ = ROLE_SYSTEM_TEXT; |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3533 ia_role_ = ROLE_SYSTEM_TABLE; | 3531 ia_role_ = ROLE_SYSTEM_TABLE; |
3534 ia_state_ |= STATE_SYSTEM_READONLY; | 3532 ia_state_ |= STATE_SYSTEM_READONLY; |
3535 break; | 3533 break; |
3536 case ui::AX_ROLE_GROUP: { | 3534 case ui::AX_ROLE_GROUP: { |
3537 base::string16 aria_role = GetString16Attribute( | 3535 base::string16 aria_role = GetString16Attribute( |
3538 ui::AX_ATTR_ROLE); | 3536 ui::AX_ATTR_ROLE); |
3539 if (aria_role == L"group" || html_tag == L"fieldset") { | 3537 if (aria_role == L"group" || html_tag == L"fieldset") { |
3540 ia_role_ = ROLE_SYSTEM_GROUPING; | 3538 ia_role_ = ROLE_SYSTEM_GROUPING; |
3541 } else if (html_tag == L"li") { | 3539 } else if (html_tag == L"li") { |
3542 ia_role_ = ROLE_SYSTEM_LISTITEM; | 3540 ia_role_ = ROLE_SYSTEM_LISTITEM; |
| 3541 ia_state_ |= STATE_SYSTEM_READONLY; |
3543 } else { | 3542 } else { |
3544 if (html_tag.empty()) | 3543 if (html_tag.empty()) |
3545 role_name_ = L"div"; | 3544 role_name_ = L"div"; |
3546 else | 3545 else |
3547 role_name_ = html_tag; | 3546 role_name_ = html_tag; |
3548 ia2_role_ = IA2_ROLE_SECTION; | 3547 ia2_role_ = IA2_ROLE_SECTION; |
3549 } | 3548 } |
3550 ia_state_ |= STATE_SYSTEM_READONLY; | |
3551 break; | 3549 break; |
3552 } | 3550 } |
3553 case ui::AX_ROLE_GROW_AREA: | 3551 case ui::AX_ROLE_GROW_AREA: |
3554 ia_role_ = ROLE_SYSTEM_GRIP; | 3552 ia_role_ = ROLE_SYSTEM_GRIP; |
3555 ia_state_ |= STATE_SYSTEM_READONLY; | 3553 ia_state_ |= STATE_SYSTEM_READONLY; |
3556 break; | 3554 break; |
3557 case ui::AX_ROLE_HEADING: | 3555 case ui::AX_ROLE_HEADING: |
3558 role_name_ = html_tag; | 3556 role_name_ = html_tag; |
3559 ia2_role_ = IA2_ROLE_HEADING; | 3557 ia2_role_ = IA2_ROLE_HEADING; |
3560 ia_state_ |= STATE_SYSTEM_READONLY; | |
3561 break; | 3558 break; |
3562 case ui::AX_ROLE_HORIZONTAL_RULE: | 3559 case ui::AX_ROLE_HORIZONTAL_RULE: |
3563 ia_role_ = ROLE_SYSTEM_SEPARATOR; | 3560 ia_role_ = ROLE_SYSTEM_SEPARATOR; |
3564 break; | 3561 break; |
3565 case ui::AX_ROLE_IFRAME: | 3562 case ui::AX_ROLE_IFRAME: |
3566 ia_role_ = ROLE_SYSTEM_CLIENT; | 3563 ia_role_ = ROLE_SYSTEM_DOCUMENT; |
3567 ia2_role_ = IA2_ROLE_INTERNAL_FRAME; | 3564 ia2_role_ = IA2_ROLE_INTERNAL_FRAME; |
| 3565 ia_state_ = STATE_SYSTEM_READONLY; |
3568 break; | 3566 break; |
3569 case ui::AX_ROLE_IMAGE: | 3567 case ui::AX_ROLE_IMAGE: |
3570 ia_role_ = ROLE_SYSTEM_GRAPHIC; | 3568 ia_role_ = ROLE_SYSTEM_GRAPHIC; |
3571 ia_state_ |= STATE_SYSTEM_READONLY; | 3569 ia_state_ |= STATE_SYSTEM_READONLY; |
3572 break; | 3570 break; |
3573 case ui::AX_ROLE_IMAGE_MAP: | 3571 case ui::AX_ROLE_IMAGE_MAP: |
3574 role_name_ = html_tag; | 3572 role_name_ = html_tag; |
3575 ia2_role_ = IA2_ROLE_IMAGE_MAP; | 3573 ia2_role_ = IA2_ROLE_IMAGE_MAP; |
3576 ia_state_ |= STATE_SYSTEM_READONLY; | 3574 ia_state_ |= STATE_SYSTEM_READONLY; |
3577 break; | 3575 break; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3661 ia_role_ = ROLE_SYSTEM_GROUPING; | 3659 ia_role_ = ROLE_SYSTEM_GROUPING; |
3662 ia2_role_ = IA2_ROLE_SECTION; | 3660 ia2_role_ = IA2_ROLE_SECTION; |
3663 break; | 3661 break; |
3664 case ui::AX_ROLE_NOTE: | 3662 case ui::AX_ROLE_NOTE: |
3665 ia_role_ = ROLE_SYSTEM_GROUPING; | 3663 ia_role_ = ROLE_SYSTEM_GROUPING; |
3666 ia2_role_ = IA2_ROLE_NOTE; | 3664 ia2_role_ = IA2_ROLE_NOTE; |
3667 ia_state_ |= STATE_SYSTEM_READONLY; | 3665 ia_state_ |= STATE_SYSTEM_READONLY; |
3668 break; | 3666 break; |
3669 case ui::AX_ROLE_OUTLINE: | 3667 case ui::AX_ROLE_OUTLINE: |
3670 ia_role_ = ROLE_SYSTEM_OUTLINE; | 3668 ia_role_ = ROLE_SYSTEM_OUTLINE; |
3671 ia_state_ |= STATE_SYSTEM_READONLY; | |
3672 break; | 3669 break; |
3673 case ui::AX_ROLE_PARAGRAPH: | 3670 case ui::AX_ROLE_PARAGRAPH: |
3674 role_name_ = L"P"; | 3671 role_name_ = L"P"; |
3675 ia2_role_ = IA2_ROLE_PARAGRAPH; | 3672 ia2_role_ = IA2_ROLE_PARAGRAPH; |
3676 break; | 3673 break; |
3677 case ui::AX_ROLE_POP_UP_BUTTON: | 3674 case ui::AX_ROLE_POP_UP_BUTTON: |
3678 if (html_tag == L"select") { | 3675 if (html_tag == L"select") { |
3679 ia_role_ = ROLE_SYSTEM_COMBOBOX; | 3676 ia_role_ = ROLE_SYSTEM_COMBOBOX; |
3680 } else { | 3677 } else { |
3681 ia_role_ = ROLE_SYSTEM_BUTTONMENU; | 3678 ia_role_ = ROLE_SYSTEM_BUTTONMENU; |
(...skipping 17 matching lines...) Expand all Loading... |
3699 case ui::AX_ROLE_REGION: | 3696 case ui::AX_ROLE_REGION: |
3700 if (html_tag == L"section") { | 3697 if (html_tag == L"section") { |
3701 ia_role_ = ROLE_SYSTEM_GROUPING; | 3698 ia_role_ = ROLE_SYSTEM_GROUPING; |
3702 ia2_role_ = IA2_ROLE_SECTION; | 3699 ia2_role_ = IA2_ROLE_SECTION; |
3703 } else { | 3700 } else { |
3704 ia_role_ = ROLE_SYSTEM_PANE; | 3701 ia_role_ = ROLE_SYSTEM_PANE; |
3705 } | 3702 } |
3706 break; | 3703 break; |
3707 case ui::AX_ROLE_ROW: | 3704 case ui::AX_ROLE_ROW: |
3708 ia_role_ = ROLE_SYSTEM_ROW; | 3705 ia_role_ = ROLE_SYSTEM_ROW; |
3709 ia_state_ |= STATE_SYSTEM_READONLY; | |
3710 break; | 3706 break; |
3711 case ui::AX_ROLE_ROW_HEADER: | 3707 case ui::AX_ROLE_ROW_HEADER: |
3712 ia_role_ = ROLE_SYSTEM_ROWHEADER; | 3708 ia_role_ = ROLE_SYSTEM_ROWHEADER; |
3713 ia_state_ |= STATE_SYSTEM_READONLY; | |
3714 break; | 3709 break; |
3715 case ui::AX_ROLE_RULER: | 3710 case ui::AX_ROLE_RULER: |
3716 ia_role_ = ROLE_SYSTEM_CLIENT; | 3711 ia_role_ = ROLE_SYSTEM_CLIENT; |
3717 ia2_role_ = IA2_ROLE_RULER; | 3712 ia2_role_ = IA2_ROLE_RULER; |
3718 ia_state_ |= STATE_SYSTEM_READONLY; | 3713 ia_state_ |= STATE_SYSTEM_READONLY; |
3719 break; | 3714 break; |
3720 case ui::AX_ROLE_SCROLL_AREA: | 3715 case ui::AX_ROLE_SCROLL_AREA: |
3721 ia_role_ = ROLE_SYSTEM_CLIENT; | 3716 ia_role_ = ROLE_SYSTEM_CLIENT; |
3722 ia2_role_ = IA2_ROLE_SCROLL_PANE; | 3717 ia2_role_ = IA2_ROLE_SCROLL_PANE; |
3723 ia_state_ |= STATE_SYSTEM_READONLY; | 3718 ia_state_ |= STATE_SYSTEM_READONLY; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3758 case ui::AX_ROLE_TAB: | 3753 case ui::AX_ROLE_TAB: |
3759 ia_role_ = ROLE_SYSTEM_PAGETAB; | 3754 ia_role_ = ROLE_SYSTEM_PAGETAB; |
3760 break; | 3755 break; |
3761 case ui::AX_ROLE_TABLE: { | 3756 case ui::AX_ROLE_TABLE: { |
3762 base::string16 aria_role = GetString16Attribute( | 3757 base::string16 aria_role = GetString16Attribute( |
3763 ui::AX_ATTR_ROLE); | 3758 ui::AX_ATTR_ROLE); |
3764 if (aria_role == L"treegrid") { | 3759 if (aria_role == L"treegrid") { |
3765 ia_role_ = ROLE_SYSTEM_OUTLINE; | 3760 ia_role_ = ROLE_SYSTEM_OUTLINE; |
3766 } else { | 3761 } else { |
3767 ia_role_ = ROLE_SYSTEM_TABLE; | 3762 ia_role_ = ROLE_SYSTEM_TABLE; |
3768 ia_state_ |= STATE_SYSTEM_READONLY; | |
3769 } | 3763 } |
3770 break; | 3764 break; |
3771 } | 3765 } |
3772 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: | 3766 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: |
3773 ia_role_ = ROLE_SYSTEM_GROUPING; | 3767 ia_role_ = ROLE_SYSTEM_GROUPING; |
3774 ia2_role_ = IA2_ROLE_SECTION; | 3768 ia2_role_ = IA2_ROLE_SECTION; |
3775 ia_state_ |= STATE_SYSTEM_READONLY; | 3769 ia_state_ |= STATE_SYSTEM_READONLY; |
3776 break; | 3770 break; |
3777 case ui::AX_ROLE_TAB_LIST: | 3771 case ui::AX_ROLE_TAB_LIST: |
3778 ia_role_ = ROLE_SYSTEM_PAGETABLIST; | 3772 ia_role_ = ROLE_SYSTEM_PAGETABLIST; |
(...skipping 27 matching lines...) Expand all Loading... |
3806 case ui::AX_ROLE_TOOLBAR: | 3800 case ui::AX_ROLE_TOOLBAR: |
3807 ia_role_ = ROLE_SYSTEM_TOOLBAR; | 3801 ia_role_ = ROLE_SYSTEM_TOOLBAR; |
3808 ia_state_ |= STATE_SYSTEM_READONLY; | 3802 ia_state_ |= STATE_SYSTEM_READONLY; |
3809 break; | 3803 break; |
3810 case ui::AX_ROLE_TOOLTIP: | 3804 case ui::AX_ROLE_TOOLTIP: |
3811 ia_role_ = ROLE_SYSTEM_TOOLTIP; | 3805 ia_role_ = ROLE_SYSTEM_TOOLTIP; |
3812 ia_state_ |= STATE_SYSTEM_READONLY; | 3806 ia_state_ |= STATE_SYSTEM_READONLY; |
3813 break; | 3807 break; |
3814 case ui::AX_ROLE_TREE: | 3808 case ui::AX_ROLE_TREE: |
3815 ia_role_ = ROLE_SYSTEM_OUTLINE; | 3809 ia_role_ = ROLE_SYSTEM_OUTLINE; |
3816 ia_state_ |= STATE_SYSTEM_READONLY; | |
3817 break; | 3810 break; |
3818 case ui::AX_ROLE_TREE_GRID: | 3811 case ui::AX_ROLE_TREE_GRID: |
3819 ia_role_ = ROLE_SYSTEM_OUTLINE; | 3812 ia_role_ = ROLE_SYSTEM_OUTLINE; |
3820 ia_state_ |= STATE_SYSTEM_READONLY; | |
3821 break; | 3813 break; |
3822 case ui::AX_ROLE_TREE_ITEM: | 3814 case ui::AX_ROLE_TREE_ITEM: |
3823 ia_role_ = ROLE_SYSTEM_OUTLINEITEM; | 3815 ia_role_ = ROLE_SYSTEM_OUTLINEITEM; |
3824 ia_state_ |= STATE_SYSTEM_READONLY; | |
3825 break; | 3816 break; |
3826 case ui::AX_ROLE_WINDOW: | 3817 case ui::AX_ROLE_WINDOW: |
3827 ia_role_ = ROLE_SYSTEM_WINDOW; | 3818 ia_role_ = ROLE_SYSTEM_WINDOW; |
3828 break; | 3819 break; |
3829 | 3820 |
3830 // TODO(dmazzoni): figure out the proper MSAA role for all of these. | 3821 // TODO(dmazzoni): figure out the proper MSAA role for all of these. |
3831 case ui::AX_ROLE_BROWSER: | 3822 case ui::AX_ROLE_BROWSER: |
3832 case ui::AX_ROLE_DIRECTORY: | 3823 case ui::AX_ROLE_DIRECTORY: |
3833 case ui::AX_ROLE_DRAWER: | 3824 case ui::AX_ROLE_DRAWER: |
3834 case ui::AX_ROLE_HELP_TAG: | 3825 case ui::AX_ROLE_HELP_TAG: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3866 // The role should always be set. | 3857 // The role should always be set. |
3867 DCHECK(!role_name_.empty() || ia_role_); | 3858 DCHECK(!role_name_.empty() || ia_role_); |
3868 | 3859 |
3869 // If we didn't explicitly set the IAccessible2 role, make it the same | 3860 // If we didn't explicitly set the IAccessible2 role, make it the same |
3870 // as the MSAA role. | 3861 // as the MSAA role. |
3871 if (!ia2_role_) | 3862 if (!ia2_role_) |
3872 ia2_role_ = ia_role_; | 3863 ia2_role_ = ia_role_; |
3873 } | 3864 } |
3874 | 3865 |
3875 } // namespace content | 3866 } // namespace content |
OLD | NEW |