| 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 |