| OLD | NEW |
| 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2017 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_com_win.h" | 5 #include "content/browser/accessibility/browser_accessibility_com_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 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 | 624 |
| 625 return AXPlatformNodeWin::get_accRole(var_id, role); | 625 return AXPlatformNodeWin::get_accRole(var_id, role); |
| 626 } | 626 } |
| 627 | 627 |
| 628 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id, | 628 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id, |
| 629 VARIANT* state) { | 629 VARIANT* state) { |
| 630 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE); | 630 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE); |
| 631 if (!owner()) | 631 if (!owner()) |
| 632 return E_FAIL; | 632 return E_FAIL; |
| 633 | 633 |
| 634 auto* manager = Manager(); | 634 return AXPlatformNodeWin::get_accState(var_id, state); |
| 635 if (!manager) | |
| 636 return E_FAIL; | |
| 637 | |
| 638 if (!state) | |
| 639 return E_INVALIDARG; | |
| 640 | |
| 641 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); | |
| 642 if (!target) | |
| 643 return E_INVALIDARG; | |
| 644 | |
| 645 state->vt = VT_I4; | |
| 646 state->lVal = target->ia_state(); | |
| 647 if (manager->GetFocus() == owner()) | |
| 648 state->lVal |= STATE_SYSTEM_FOCUSED; | |
| 649 | |
| 650 return S_OK; | |
| 651 } | 635 } |
| 652 | 636 |
| 653 bool BrowserAccessibilityComWin::IsRangeValueSupported() { | 637 bool BrowserAccessibilityComWin::IsRangeValueSupported() { |
| 654 switch (ia_role()) { | 638 switch (ia_role()) { |
| 655 case ROLE_SYSTEM_PROGRESSBAR: | 639 case ROLE_SYSTEM_PROGRESSBAR: |
| 656 case ROLE_SYSTEM_SLIDER: | 640 case ROLE_SYSTEM_SLIDER: |
| 657 case ROLE_SYSTEM_SPINBUTTON: | 641 case ROLE_SYSTEM_SPINBUTTON: |
| 658 case ROLE_SYSTEM_SCROLLBAR: | 642 case ROLE_SYSTEM_SCROLLBAR: |
| 659 return true; | 643 return true; |
| 660 case ROLE_SYSTEM_SEPARATOR: | 644 case ROLE_SYSTEM_SEPARATOR: |
| (...skipping 1883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 2528 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
| 2545 if (!owner() || !IsHyperlink()) | 2529 if (!owner() || !IsHyperlink()) |
| 2546 return E_FAIL; | 2530 return E_FAIL; |
| 2547 | 2531 |
| 2548 // IA2 text links can have at most one target, that is when they represent an | 2532 // IA2 text links can have at most one target, that is when they represent an |
| 2549 // HTML hyperlink, i.e. an <a> element with a "href" attribute. | 2533 // HTML hyperlink, i.e. an <a> element with a "href" attribute. |
| 2550 if (index != 0 || !anchor_target) | 2534 if (index != 0 || !anchor_target) |
| 2551 return E_INVALIDARG; | 2535 return E_INVALIDARG; |
| 2552 | 2536 |
| 2553 BSTR target; | 2537 BSTR target; |
| 2554 if (!(ia_state() & STATE_SYSTEM_LINKED) || | 2538 if (!(MSAAState() & STATE_SYSTEM_LINKED) || |
| 2555 FAILED(GetStringAttributeAsBstr(ui::AX_ATTR_URL, &target))) { | 2539 FAILED(GetStringAttributeAsBstr(ui::AX_ATTR_URL, &target))) { |
| 2556 target = SysAllocString(L""); | 2540 target = SysAllocString(L""); |
| 2557 } | 2541 } |
| 2558 DCHECK(target); | 2542 DCHECK(target); |
| 2559 anchor_target->vt = VT_BSTR; | 2543 anchor_target->vt = VT_BSTR; |
| 2560 anchor_target->bstrVal = target; | 2544 anchor_target->bstrVal = target; |
| 2561 | 2545 |
| 2562 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been | 2546 // Returning S_FALSE is not mentioned in the IA2 Spec, but it might have been |
| 2563 // an oversight. | 2547 // an oversight. |
| 2564 if (!SysStringLen(target)) | 2548 if (!SysStringLen(target)) |
| (...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3777 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value); | 3761 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value); |
| 3778 } else { | 3762 } else { |
| 3779 // On Windows, the value of a document should be its url. | 3763 // On Windows, the value of a document should be its url. |
| 3780 if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || | 3764 if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || |
| 3781 owner()->GetRole() == ui::AX_ROLE_WEB_AREA) { | 3765 owner()->GetRole() == ui::AX_ROLE_WEB_AREA) { |
| 3782 value = base::UTF8ToUTF16(Manager()->GetTreeData().url); | 3766 value = base::UTF8ToUTF16(Manager()->GetTreeData().url); |
| 3783 } | 3767 } |
| 3784 // If this doesn't have a value and is linked then set its value to the url | 3768 // If this doesn't have a value and is linked then set its value to the url |
| 3785 // attribute. This allows screen readers to read an empty link's | 3769 // attribute. This allows screen readers to read an empty link's |
| 3786 // destination. | 3770 // destination. |
| 3787 if (value.empty() && (ia_state() & STATE_SYSTEM_LINKED)) | 3771 if (value.empty() && (MSAAState() & STATE_SYSTEM_LINKED)) |
| 3788 value = owner()->GetString16Attribute(ui::AX_ATTR_URL); | 3772 value = owner()->GetString16Attribute(ui::AX_ATTR_URL); |
| 3789 } | 3773 } |
| 3790 | 3774 |
| 3791 win_attributes_->value = value; | 3775 win_attributes_->value = value; |
| 3792 | 3776 |
| 3793 ClearOwnRelations(); | 3777 ClearOwnRelations(); |
| 3794 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR, | 3778 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR, |
| 3795 IA2_RELATION_CONTROLLED_BY, | 3779 IA2_RELATION_CONTROLLED_BY, |
| 3796 ui::AX_ATTR_CONTROLS_IDS); | 3780 ui::AX_ATTR_CONTROLS_IDS); |
| 3797 AddBidirectionalRelations(IA2_RELATION_DESCRIBED_BY, | 3781 AddBidirectionalRelations(IA2_RELATION_DESCRIBED_BY, |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3874 // The rest of the events only fire on changes, not on new objects. | 3858 // The rest of the events only fire on changes, not on new objects. |
| 3875 if (old_win_attributes_->ia_role != 0 || | 3859 if (old_win_attributes_->ia_role != 0 || |
| 3876 !old_win_attributes_->role_name.empty()) { | 3860 !old_win_attributes_->role_name.empty()) { |
| 3877 // Fire an event if the name, description, help, or value changes. | 3861 // Fire an event if the name, description, help, or value changes. |
| 3878 if (name() != old_win_attributes_->name) | 3862 if (name() != old_win_attributes_->name) |
| 3879 FireNativeEvent(EVENT_OBJECT_NAMECHANGE); | 3863 FireNativeEvent(EVENT_OBJECT_NAMECHANGE); |
| 3880 if (description() != old_win_attributes_->description) | 3864 if (description() != old_win_attributes_->description) |
| 3881 FireNativeEvent(EVENT_OBJECT_DESCRIPTIONCHANGE); | 3865 FireNativeEvent(EVENT_OBJECT_DESCRIPTIONCHANGE); |
| 3882 if (value() != old_win_attributes_->value) | 3866 if (value() != old_win_attributes_->value) |
| 3883 FireNativeEvent(EVENT_OBJECT_VALUECHANGE); | 3867 FireNativeEvent(EVENT_OBJECT_VALUECHANGE); |
| 3884 if (ia_state() != old_win_attributes_->ia_state) | 3868 |
| 3869 // Do not fire EVENT_OBJECT_STATECHANGE if the change was due to a focus |
| 3870 // change. |
| 3871 if ((MSAAState() & ~STATE_SYSTEM_FOCUSED) != |
| 3872 (old_win_attributes_->ia_state & ~STATE_SYSTEM_FOCUSED)) |
| 3885 FireNativeEvent(EVENT_OBJECT_STATECHANGE); | 3873 FireNativeEvent(EVENT_OBJECT_STATECHANGE); |
| 3886 | 3874 |
| 3887 // Handle selection being added or removed. | 3875 // Handle selection being added or removed. |
| 3888 bool is_selected_now = (ia_state() & STATE_SYSTEM_SELECTED) != 0; | 3876 bool is_selected_now = (MSAAState() & STATE_SYSTEM_SELECTED) != 0; |
| 3889 bool was_selected_before = | 3877 bool was_selected_before = |
| 3890 (old_win_attributes_->ia_state & STATE_SYSTEM_SELECTED) != 0; | 3878 (old_win_attributes_->ia_state & STATE_SYSTEM_SELECTED) != 0; |
| 3891 if (is_selected_now || was_selected_before) { | 3879 if (is_selected_now || was_selected_before) { |
| 3892 bool multiselect = false; | 3880 bool multiselect = false; |
| 3893 if (owner()->PlatformGetParent() && | 3881 if (owner()->PlatformGetParent() && |
| 3894 owner()->PlatformGetParent()->HasState(ui::AX_STATE_MULTISELECTABLE)) | 3882 owner()->PlatformGetParent()->HasState(ui::AX_STATE_MULTISELECTABLE)) |
| 3895 multiselect = true; | 3883 multiselect = true; |
| 3896 | 3884 |
| 3897 if (multiselect) { | 3885 if (multiselect) { |
| 3898 // In a multi-select box, fire SELECTIONADD and SELECTIONREMOVE events. | 3886 // In a multi-select box, fire SELECTIONADD and SELECTIONREMOVE events. |
| (...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4993 } | 4981 } |
| 4994 | 4982 |
| 4995 void BrowserAccessibilityComWin::FireNativeEvent(LONG win_event_type) const { | 4983 void BrowserAccessibilityComWin::FireNativeEvent(LONG win_event_type) const { |
| 4996 (new BrowserAccessibilityEventWin(BrowserAccessibilityEvent::FromTreeChange, | 4984 (new BrowserAccessibilityEventWin(BrowserAccessibilityEvent::FromTreeChange, |
| 4997 ui::AX_EVENT_NONE, win_event_type, owner())) | 4985 ui::AX_EVENT_NONE, win_event_type, owner())) |
| 4998 ->Fire(); | 4986 ->Fire(); |
| 4999 } | 4987 } |
| 5000 | 4988 |
| 5001 void BrowserAccessibilityComWin::InitRoleAndState() { | 4989 void BrowserAccessibilityComWin::InitRoleAndState() { |
| 5002 int32_t ia_role = 0; | 4990 int32_t ia_role = 0; |
| 5003 int32_t ia_state = 0; | |
| 5004 base::string16 role_name; | 4991 base::string16 role_name; |
| 5005 int32_t ia2_role = 0; | 4992 int32_t ia2_role = 0; |
| 5006 int32_t ia2_state = IA2_STATE_OPAQUE; | 4993 int32_t ia2_state = IA2_STATE_OPAQUE; |
| 5007 | 4994 |
| 5008 if (owner()->HasState(ui::AX_STATE_BUSY)) | |
| 5009 ia_state |= STATE_SYSTEM_BUSY; | |
| 5010 | |
| 5011 const auto checked_state = static_cast<ui::AXCheckedState>( | 4995 const auto checked_state = static_cast<ui::AXCheckedState>( |
| 5012 owner()->GetIntAttribute(ui::AX_ATTR_CHECKED_STATE)); | 4996 owner()->GetIntAttribute(ui::AX_ATTR_CHECKED_STATE)); |
| 5013 if (checked_state) { | 4997 if (checked_state) { |
| 5014 ia2_state |= IA2_STATE_CHECKABLE; | 4998 ia2_state |= IA2_STATE_CHECKABLE; |
| 5015 switch (checked_state) { | |
| 5016 case ui::AX_CHECKED_STATE_TRUE: | |
| 5017 ia_state |= owner()->GetRole() == ui::AX_ROLE_TOGGLE_BUTTON | |
| 5018 ? STATE_SYSTEM_PRESSED | |
| 5019 : STATE_SYSTEM_CHECKED; | |
| 5020 break; | |
| 5021 case ui::AX_CHECKED_STATE_MIXED: | |
| 5022 ia_state |= STATE_SYSTEM_MIXED; | |
| 5023 break; | |
| 5024 default: | |
| 5025 break; | |
| 5026 } | |
| 5027 } | 4999 } |
| 5028 | 5000 |
| 5029 if (owner()->HasState(ui::AX_STATE_COLLAPSED)) | |
| 5030 ia_state |= STATE_SYSTEM_COLLAPSED; | |
| 5031 if (owner()->HasState(ui::AX_STATE_EXPANDED)) | |
| 5032 ia_state |= STATE_SYSTEM_EXPANDED; | |
| 5033 if (owner()->HasState(ui::AX_STATE_FOCUSABLE)) | |
| 5034 ia_state |= STATE_SYSTEM_FOCUSABLE; | |
| 5035 if (owner()->HasState(ui::AX_STATE_HASPOPUP)) | |
| 5036 ia_state |= STATE_SYSTEM_HASPOPUP; | |
| 5037 if (owner()->HasIntAttribute(ui::AX_ATTR_INVALID_STATE) && | 5001 if (owner()->HasIntAttribute(ui::AX_ATTR_INVALID_STATE) && |
| 5038 owner()->GetIntAttribute(ui::AX_ATTR_INVALID_STATE) != | 5002 owner()->GetIntAttribute(ui::AX_ATTR_INVALID_STATE) != |
| 5039 ui::AX_INVALID_STATE_FALSE) | 5003 ui::AX_INVALID_STATE_FALSE) |
| 5040 ia2_state |= IA2_STATE_INVALID_ENTRY; | 5004 ia2_state |= IA2_STATE_INVALID_ENTRY; |
| 5041 if (owner()->HasState(ui::AX_STATE_INVISIBLE)) | |
| 5042 ia_state |= STATE_SYSTEM_INVISIBLE; | |
| 5043 if (owner()->HasState(ui::AX_STATE_LINKED)) | |
| 5044 ia_state |= STATE_SYSTEM_LINKED; | |
| 5045 if (owner()->HasState(ui::AX_STATE_MULTISELECTABLE)) { | |
| 5046 ia_state |= STATE_SYSTEM_EXTSELECTABLE; | |
| 5047 ia_state |= STATE_SYSTEM_MULTISELECTABLE; | |
| 5048 } | |
| 5049 // TODO(ctguil): Support STATE_SYSTEM_EXTSELECTABLE/accSelect. | |
| 5050 if (owner()->HasState(ui::AX_STATE_OFFSCREEN)) | |
| 5051 ia_state |= STATE_SYSTEM_OFFSCREEN; | |
| 5052 if (owner()->HasState(ui::AX_STATE_PROTECTED)) | |
| 5053 ia_state |= STATE_SYSTEM_PROTECTED; | |
| 5054 if (owner()->HasState(ui::AX_STATE_REQUIRED)) | 5005 if (owner()->HasState(ui::AX_STATE_REQUIRED)) |
| 5055 ia2_state |= IA2_STATE_REQUIRED; | 5006 ia2_state |= IA2_STATE_REQUIRED; |
| 5056 if (owner()->HasState(ui::AX_STATE_SELECTABLE)) | |
| 5057 ia_state |= STATE_SYSTEM_SELECTABLE; | |
| 5058 if (owner()->HasState(ui::AX_STATE_SELECTED)) | |
| 5059 ia_state |= STATE_SYSTEM_SELECTED; | |
| 5060 if (owner()->HasState(ui::AX_STATE_VISITED)) | |
| 5061 ia_state |= STATE_SYSTEM_TRAVERSED; | |
| 5062 if (owner()->HasState(ui::AX_STATE_DISABLED)) | |
| 5063 ia_state |= STATE_SYSTEM_UNAVAILABLE; | |
| 5064 if (owner()->HasState(ui::AX_STATE_VERTICAL)) | 5007 if (owner()->HasState(ui::AX_STATE_VERTICAL)) |
| 5065 ia2_state |= IA2_STATE_VERTICAL; | 5008 ia2_state |= IA2_STATE_VERTICAL; |
| 5066 if (owner()->HasState(ui::AX_STATE_HORIZONTAL)) | 5009 if (owner()->HasState(ui::AX_STATE_HORIZONTAL)) |
| 5067 ia2_state |= IA2_STATE_HORIZONTAL; | 5010 ia2_state |= IA2_STATE_HORIZONTAL; |
| 5068 if (owner()->HasState(ui::AX_STATE_VISITED)) | |
| 5069 ia_state |= STATE_SYSTEM_TRAVERSED; | |
| 5070 | |
| 5071 // Expose whether or not the mouse is over an element, but suppress | |
| 5072 // this for tests because it can make the test results flaky depending | |
| 5073 // on the position of the mouse. | |
| 5074 BrowserAccessibilityStateImpl* accessibility_state = | |
| 5075 BrowserAccessibilityStateImpl::GetInstance(); | |
| 5076 if (!accessibility_state->disable_hot_tracking_for_testing()) { | |
| 5077 if (owner()->HasState(ui::AX_STATE_HOVERED)) | |
| 5078 ia_state |= STATE_SYSTEM_HOTTRACKED; | |
| 5079 } | |
| 5080 | 5011 |
| 5081 if (owner()->HasState(ui::AX_STATE_EDITABLE)) | 5012 if (owner()->HasState(ui::AX_STATE_EDITABLE)) |
| 5082 ia2_state |= IA2_STATE_EDITABLE; | 5013 ia2_state |= IA2_STATE_EDITABLE; |
| 5083 | 5014 |
| 5084 if (!owner()->GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) | 5015 if (!owner()->GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) |
| 5085 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; | 5016 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; |
| 5086 | 5017 |
| 5087 if (owner()->GetBoolAttribute(ui::AX_ATTR_MODAL)) | 5018 if (owner()->GetBoolAttribute(ui::AX_ATTR_MODAL)) |
| 5088 ia2_state |= IA2_STATE_MODAL; | 5019 ia2_state |= IA2_STATE_MODAL; |
| 5089 | 5020 |
| 5090 base::string16 html_tag = owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG); | 5021 base::string16 html_tag = owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG); |
| 5091 switch (owner()->GetRole()) { | 5022 switch (owner()->GetRole()) { |
| 5092 case ui::AX_ROLE_ALERT: | 5023 case ui::AX_ROLE_ALERT: |
| 5093 ia_role = ROLE_SYSTEM_ALERT; | 5024 ia_role = ROLE_SYSTEM_ALERT; |
| 5094 break; | 5025 break; |
| 5095 case ui::AX_ROLE_ALERT_DIALOG: | 5026 case ui::AX_ROLE_ALERT_DIALOG: |
| 5096 ia_role = ROLE_SYSTEM_DIALOG; | 5027 ia_role = ROLE_SYSTEM_DIALOG; |
| 5097 break; | 5028 break; |
| 5098 case ui::AX_ROLE_ANCHOR: | 5029 case ui::AX_ROLE_ANCHOR: |
| 5099 ia_role = ROLE_SYSTEM_LINK; | 5030 ia_role = ROLE_SYSTEM_LINK; |
| 5100 break; | 5031 break; |
| 5101 case ui::AX_ROLE_APPLICATION: | 5032 case ui::AX_ROLE_APPLICATION: |
| 5102 ia_role = ROLE_SYSTEM_APPLICATION; | 5033 ia_role = ROLE_SYSTEM_APPLICATION; |
| 5103 break; | 5034 break; |
| 5104 case ui::AX_ROLE_ARTICLE: | 5035 case ui::AX_ROLE_ARTICLE: |
| 5105 ia_role = ROLE_SYSTEM_DOCUMENT; | 5036 ia_role = ROLE_SYSTEM_DOCUMENT; |
| 5106 ia_state |= STATE_SYSTEM_READONLY; | |
| 5107 break; | 5037 break; |
| 5108 case ui::AX_ROLE_AUDIO: | 5038 case ui::AX_ROLE_AUDIO: |
| 5109 ia_role = ROLE_SYSTEM_GROUPING; | 5039 ia_role = ROLE_SYSTEM_GROUPING; |
| 5110 break; | 5040 break; |
| 5111 case ui::AX_ROLE_BANNER: | 5041 case ui::AX_ROLE_BANNER: |
| 5112 ia_role = ROLE_SYSTEM_GROUPING; | 5042 ia_role = ROLE_SYSTEM_GROUPING; |
| 5113 ia2_role = IA2_ROLE_HEADER; | 5043 ia2_role = IA2_ROLE_HEADER; |
| 5114 break; | 5044 break; |
| 5115 case ui::AX_ROLE_BLOCKQUOTE: | 5045 case ui::AX_ROLE_BLOCKQUOTE: |
| 5116 role_name = html_tag; | 5046 role_name = html_tag; |
| 5117 ia2_role = IA2_ROLE_SECTION; | 5047 ia2_role = IA2_ROLE_SECTION; |
| 5118 break; | 5048 break; |
| 5119 case ui::AX_ROLE_BUSY_INDICATOR: | 5049 case ui::AX_ROLE_BUSY_INDICATOR: |
| 5120 ia_role = ROLE_SYSTEM_ANIMATION; | 5050 ia_role = ROLE_SYSTEM_ANIMATION; |
| 5121 ia_state |= STATE_SYSTEM_READONLY; | |
| 5122 break; | 5051 break; |
| 5123 case ui::AX_ROLE_BUTTON: | 5052 case ui::AX_ROLE_BUTTON: |
| 5124 ia_role = ROLE_SYSTEM_PUSHBUTTON; | 5053 ia_role = ROLE_SYSTEM_PUSHBUTTON; |
| 5125 break; | 5054 break; |
| 5126 case ui::AX_ROLE_CANVAS: | 5055 case ui::AX_ROLE_CANVAS: |
| 5127 if (owner()->GetBoolAttribute(ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { | 5056 if (owner()->GetBoolAttribute(ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { |
| 5128 role_name = L"canvas"; | 5057 role_name = L"canvas"; |
| 5129 ia2_role = IA2_ROLE_CANVAS; | 5058 ia2_role = IA2_ROLE_CANVAS; |
| 5130 } else { | 5059 } else { |
| 5131 ia_role = ROLE_SYSTEM_GRAPHIC; | 5060 ia_role = ROLE_SYSTEM_GRAPHIC; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5163 ia2_role = IA2_ROLE_PARAGRAPH; | 5092 ia2_role = IA2_ROLE_PARAGRAPH; |
| 5164 break; | 5093 break; |
| 5165 case ui::AX_ROLE_DATE: | 5094 case ui::AX_ROLE_DATE: |
| 5166 case ui::AX_ROLE_DATE_TIME: | 5095 case ui::AX_ROLE_DATE_TIME: |
| 5167 ia_role = ROLE_SYSTEM_DROPLIST; | 5096 ia_role = ROLE_SYSTEM_DROPLIST; |
| 5168 ia2_role = IA2_ROLE_DATE_EDITOR; | 5097 ia2_role = IA2_ROLE_DATE_EDITOR; |
| 5169 break; | 5098 break; |
| 5170 case ui::AX_ROLE_DEFINITION: | 5099 case ui::AX_ROLE_DEFINITION: |
| 5171 role_name = html_tag; | 5100 role_name = html_tag; |
| 5172 ia2_role = IA2_ROLE_PARAGRAPH; | 5101 ia2_role = IA2_ROLE_PARAGRAPH; |
| 5173 ia_state |= STATE_SYSTEM_READONLY; | |
| 5174 break; | 5102 break; |
| 5175 case ui::AX_ROLE_DESCRIPTION_LIST_DETAIL: | 5103 case ui::AX_ROLE_DESCRIPTION_LIST_DETAIL: |
| 5176 role_name = html_tag; | 5104 role_name = html_tag; |
| 5177 ia_role = ROLE_SYSTEM_TEXT; | 5105 ia_role = ROLE_SYSTEM_TEXT; |
| 5178 ia2_role = IA2_ROLE_PARAGRAPH; | 5106 ia2_role = IA2_ROLE_PARAGRAPH; |
| 5179 break; | 5107 break; |
| 5180 case ui::AX_ROLE_DESCRIPTION_LIST: | 5108 case ui::AX_ROLE_DESCRIPTION_LIST: |
| 5181 role_name = html_tag; | 5109 role_name = html_tag; |
| 5182 ia_role = ROLE_SYSTEM_LIST; | 5110 ia_role = ROLE_SYSTEM_LIST; |
| 5183 ia_state |= STATE_SYSTEM_READONLY; | |
| 5184 break; | 5111 break; |
| 5185 case ui::AX_ROLE_DESCRIPTION_LIST_TERM: | 5112 case ui::AX_ROLE_DESCRIPTION_LIST_TERM: |
| 5186 ia_role = ROLE_SYSTEM_LISTITEM; | 5113 ia_role = ROLE_SYSTEM_LISTITEM; |
| 5187 ia_state |= STATE_SYSTEM_READONLY; | |
| 5188 break; | 5114 break; |
| 5189 case ui::AX_ROLE_DETAILS: | 5115 case ui::AX_ROLE_DETAILS: |
| 5190 role_name = html_tag; | 5116 role_name = html_tag; |
| 5191 ia_role = ROLE_SYSTEM_GROUPING; | 5117 ia_role = ROLE_SYSTEM_GROUPING; |
| 5192 break; | 5118 break; |
| 5193 case ui::AX_ROLE_DIALOG: | 5119 case ui::AX_ROLE_DIALOG: |
| 5194 ia_role = ROLE_SYSTEM_DIALOG; | 5120 ia_role = ROLE_SYSTEM_DIALOG; |
| 5195 break; | 5121 break; |
| 5196 case ui::AX_ROLE_DISCLOSURE_TRIANGLE: | 5122 case ui::AX_ROLE_DISCLOSURE_TRIANGLE: |
| 5197 ia_role = ROLE_SYSTEM_PUSHBUTTON; | 5123 ia_role = ROLE_SYSTEM_PUSHBUTTON; |
| 5198 break; | 5124 break; |
| 5199 case ui::AX_ROLE_DOCUMENT: | 5125 case ui::AX_ROLE_DOCUMENT: |
| 5200 case ui::AX_ROLE_ROOT_WEB_AREA: | 5126 case ui::AX_ROLE_ROOT_WEB_AREA: |
| 5201 case ui::AX_ROLE_WEB_AREA: | 5127 case ui::AX_ROLE_WEB_AREA: |
| 5202 ia_role = ROLE_SYSTEM_DOCUMENT; | 5128 ia_role = ROLE_SYSTEM_DOCUMENT; |
| 5203 ia_state |= STATE_SYSTEM_READONLY; | |
| 5204 ia_state |= STATE_SYSTEM_FOCUSABLE; | |
| 5205 break; | 5129 break; |
| 5206 case ui::AX_ROLE_EMBEDDED_OBJECT: | 5130 case ui::AX_ROLE_EMBEDDED_OBJECT: |
| 5207 if (owner()->PlatformChildCount()) { | 5131 if (owner()->PlatformChildCount()) { |
| 5208 // Windows screen readers assume that IA2_ROLE_EMBEDDED_OBJECT | 5132 // Windows screen readers assume that IA2_ROLE_EMBEDDED_OBJECT |
| 5209 // doesn't have any children, but it may be something like a | 5133 // doesn't have any children, but it may be something like a |
| 5210 // browser plugin that has a document inside. | 5134 // browser plugin that has a document inside. |
| 5211 ia_role = ROLE_SYSTEM_GROUPING; | 5135 ia_role = ROLE_SYSTEM_GROUPING; |
| 5212 } else { | 5136 } else { |
| 5213 ia_role = ROLE_SYSTEM_CLIENT; | 5137 ia_role = ROLE_SYSTEM_CLIENT; |
| 5214 ia2_role = IA2_ROLE_EMBEDDED_OBJECT; | 5138 ia2_role = IA2_ROLE_EMBEDDED_OBJECT; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 5232 ia_role = ROLE_SYSTEM_GROUPING; | 5156 ia_role = ROLE_SYSTEM_GROUPING; |
| 5233 ia2_role = IA2_ROLE_FOOTER; | 5157 ia2_role = IA2_ROLE_FOOTER; |
| 5234 break; | 5158 break; |
| 5235 case ui::AX_ROLE_GENERIC_CONTAINER: | 5159 case ui::AX_ROLE_GENERIC_CONTAINER: |
| 5236 ia_role = ROLE_SYSTEM_GROUPING; | 5160 ia_role = ROLE_SYSTEM_GROUPING; |
| 5237 ia2_role = IA2_ROLE_SECTION; | 5161 ia2_role = IA2_ROLE_SECTION; |
| 5238 role_name = html_tag.empty() ? L"div" : html_tag; | 5162 role_name = html_tag.empty() ? L"div" : html_tag; |
| 5239 break; | 5163 break; |
| 5240 case ui::AX_ROLE_GRID: | 5164 case ui::AX_ROLE_GRID: |
| 5241 ia_role = ROLE_SYSTEM_TABLE; | 5165 ia_role = ROLE_SYSTEM_TABLE; |
| 5242 // TODO(aleventhal) this changed between ARIA 1.0 and 1.1, | |
| 5243 // need to determine whether grids/treegrids should really be readonly | |
| 5244 // or editable by default | |
| 5245 // ia_state |= STATE_SYSTEM_READONLY; | |
| 5246 break; | 5166 break; |
| 5247 case ui::AX_ROLE_GROUP: | 5167 case ui::AX_ROLE_GROUP: |
| 5248 ia_role = ROLE_SYSTEM_GROUPING; | 5168 ia_role = ROLE_SYSTEM_GROUPING; |
| 5249 break; | 5169 break; |
| 5250 case ui::AX_ROLE_HEADING: | 5170 case ui::AX_ROLE_HEADING: |
| 5251 role_name = html_tag; | 5171 role_name = html_tag; |
| 5252 if (html_tag.empty()) | 5172 if (html_tag.empty()) |
| 5253 ia_role = ROLE_SYSTEM_GROUPING; | 5173 ia_role = ROLE_SYSTEM_GROUPING; |
| 5254 ia2_role = IA2_ROLE_HEADING; | 5174 ia2_role = IA2_ROLE_HEADING; |
| 5255 break; | 5175 break; |
| 5256 case ui::AX_ROLE_IFRAME: | 5176 case ui::AX_ROLE_IFRAME: |
| 5257 ia_role = ROLE_SYSTEM_DOCUMENT; | 5177 ia_role = ROLE_SYSTEM_DOCUMENT; |
| 5258 ia2_role = IA2_ROLE_INTERNAL_FRAME; | 5178 ia2_role = IA2_ROLE_INTERNAL_FRAME; |
| 5259 ia_state = STATE_SYSTEM_READONLY; | |
| 5260 break; | 5179 break; |
| 5261 case ui::AX_ROLE_IFRAME_PRESENTATIONAL: | 5180 case ui::AX_ROLE_IFRAME_PRESENTATIONAL: |
| 5262 ia_role = ROLE_SYSTEM_GROUPING; | 5181 ia_role = ROLE_SYSTEM_GROUPING; |
| 5263 break; | 5182 break; |
| 5264 case ui::AX_ROLE_IMAGE: | 5183 case ui::AX_ROLE_IMAGE: |
| 5265 ia_role = ROLE_SYSTEM_GRAPHIC; | 5184 ia_role = ROLE_SYSTEM_GRAPHIC; |
| 5266 ia_state |= STATE_SYSTEM_READONLY; | |
| 5267 break; | 5185 break; |
| 5268 case ui::AX_ROLE_IMAGE_MAP: | 5186 case ui::AX_ROLE_IMAGE_MAP: |
| 5269 role_name = html_tag; | 5187 role_name = html_tag; |
| 5270 ia2_role = IA2_ROLE_IMAGE_MAP; | 5188 ia2_role = IA2_ROLE_IMAGE_MAP; |
| 5271 ia_state |= STATE_SYSTEM_READONLY; | |
| 5272 break; | 5189 break; |
| 5273 case ui::AX_ROLE_IMAGE_MAP_LINK: | 5190 case ui::AX_ROLE_IMAGE_MAP_LINK: |
| 5274 ia_role = ROLE_SYSTEM_LINK; | 5191 ia_role = ROLE_SYSTEM_LINK; |
| 5275 ia_state |= STATE_SYSTEM_LINKED; | |
| 5276 ia_state |= STATE_SYSTEM_READONLY; | |
| 5277 break; | 5192 break; |
| 5278 case ui::AX_ROLE_INPUT_TIME: | 5193 case ui::AX_ROLE_INPUT_TIME: |
| 5279 ia_role = ROLE_SYSTEM_GROUPING; | 5194 ia_role = ROLE_SYSTEM_GROUPING; |
| 5280 break; | 5195 break; |
| 5281 case ui::AX_ROLE_LABEL_TEXT: | 5196 case ui::AX_ROLE_LABEL_TEXT: |
| 5282 case ui::AX_ROLE_LEGEND: | 5197 case ui::AX_ROLE_LEGEND: |
| 5283 ia_role = ROLE_SYSTEM_TEXT; | 5198 ia_role = ROLE_SYSTEM_TEXT; |
| 5284 ia2_role = IA2_ROLE_LABEL; | 5199 ia2_role = IA2_ROLE_LABEL; |
| 5285 break; | 5200 break; |
| 5286 case ui::AX_ROLE_LINK: | 5201 case ui::AX_ROLE_LINK: |
| 5287 ia_role = ROLE_SYSTEM_LINK; | 5202 ia_role = ROLE_SYSTEM_LINK; |
| 5288 ia_state |= STATE_SYSTEM_LINKED; | |
| 5289 break; | 5203 break; |
| 5290 case ui::AX_ROLE_LIST: | 5204 case ui::AX_ROLE_LIST: |
| 5291 ia_role = ROLE_SYSTEM_LIST; | 5205 ia_role = ROLE_SYSTEM_LIST; |
| 5292 ia_state |= STATE_SYSTEM_READONLY; | |
| 5293 break; | 5206 break; |
| 5294 case ui::AX_ROLE_LIST_BOX: | 5207 case ui::AX_ROLE_LIST_BOX: |
| 5295 ia_role = ROLE_SYSTEM_LIST; | 5208 ia_role = ROLE_SYSTEM_LIST; |
| 5296 break; | 5209 break; |
| 5297 case ui::AX_ROLE_LIST_BOX_OPTION: | 5210 case ui::AX_ROLE_LIST_BOX_OPTION: |
| 5298 ia_role = ROLE_SYSTEM_LISTITEM; | 5211 ia_role = ROLE_SYSTEM_LISTITEM; |
| 5299 break; | 5212 break; |
| 5300 case ui::AX_ROLE_LIST_ITEM: | 5213 case ui::AX_ROLE_LIST_ITEM: |
| 5301 ia_role = ROLE_SYSTEM_LISTITEM; | 5214 ia_role = ROLE_SYSTEM_LISTITEM; |
| 5302 ia_state |= STATE_SYSTEM_READONLY; | |
| 5303 break; | 5215 break; |
| 5304 case ui::AX_ROLE_MAIN: | 5216 case ui::AX_ROLE_MAIN: |
| 5305 ia_role = ROLE_SYSTEM_GROUPING; | 5217 ia_role = ROLE_SYSTEM_GROUPING; |
| 5306 ia2_role = IA2_ROLE_PARAGRAPH; | 5218 ia2_role = IA2_ROLE_PARAGRAPH; |
| 5307 break; | 5219 break; |
| 5308 case ui::AX_ROLE_MARK: | 5220 case ui::AX_ROLE_MARK: |
| 5309 ia_role = ROLE_SYSTEM_TEXT; | 5221 ia_role = ROLE_SYSTEM_TEXT; |
| 5310 ia2_role = IA2_ROLE_TEXT_FRAME; | 5222 ia2_role = IA2_ROLE_TEXT_FRAME; |
| 5311 break; | 5223 break; |
| 5312 case ui::AX_ROLE_MARQUEE: | 5224 case ui::AX_ROLE_MARQUEE: |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5367 ia_role = ROLE_SYSTEM_BUTTONMENU; | 5279 ia_role = ROLE_SYSTEM_BUTTONMENU; |
| 5368 } | 5280 } |
| 5369 break; | 5281 break; |
| 5370 case ui::AX_ROLE_PRE: | 5282 case ui::AX_ROLE_PRE: |
| 5371 role_name = html_tag; | 5283 role_name = html_tag; |
| 5372 ia_role = ROLE_SYSTEM_TEXT; | 5284 ia_role = ROLE_SYSTEM_TEXT; |
| 5373 ia2_role = IA2_ROLE_PARAGRAPH; | 5285 ia2_role = IA2_ROLE_PARAGRAPH; |
| 5374 break; | 5286 break; |
| 5375 case ui::AX_ROLE_PROGRESS_INDICATOR: | 5287 case ui::AX_ROLE_PROGRESS_INDICATOR: |
| 5376 ia_role = ROLE_SYSTEM_PROGRESSBAR; | 5288 ia_role = ROLE_SYSTEM_PROGRESSBAR; |
| 5377 ia_state |= STATE_SYSTEM_READONLY; | |
| 5378 break; | 5289 break; |
| 5379 case ui::AX_ROLE_RADIO_BUTTON: | 5290 case ui::AX_ROLE_RADIO_BUTTON: |
| 5380 ia_role = ROLE_SYSTEM_RADIOBUTTON; | 5291 ia_role = ROLE_SYSTEM_RADIOBUTTON; |
| 5381 break; | 5292 break; |
| 5382 case ui::AX_ROLE_RADIO_GROUP: | 5293 case ui::AX_ROLE_RADIO_GROUP: |
| 5383 ia_role = ROLE_SYSTEM_GROUPING; | 5294 ia_role = ROLE_SYSTEM_GROUPING; |
| 5384 break; | 5295 break; |
| 5385 case ui::AX_ROLE_REGION: | 5296 case ui::AX_ROLE_REGION: |
| 5386 if (html_tag == L"section") { | 5297 if (html_tag == L"section") { |
| 5387 ia_role = ROLE_SYSTEM_GROUPING; | 5298 ia_role = ROLE_SYSTEM_GROUPING; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5400 case ui::AX_ROLE_ROW_HEADER: | 5311 case ui::AX_ROLE_ROW_HEADER: |
| 5401 ia_role = ROLE_SYSTEM_ROWHEADER; | 5312 ia_role = ROLE_SYSTEM_ROWHEADER; |
| 5402 break; | 5313 break; |
| 5403 case ui::AX_ROLE_RUBY: | 5314 case ui::AX_ROLE_RUBY: |
| 5404 ia_role = ROLE_SYSTEM_TEXT; | 5315 ia_role = ROLE_SYSTEM_TEXT; |
| 5405 ia2_role = IA2_ROLE_TEXT_FRAME; | 5316 ia2_role = IA2_ROLE_TEXT_FRAME; |
| 5406 break; | 5317 break; |
| 5407 case ui::AX_ROLE_RULER: | 5318 case ui::AX_ROLE_RULER: |
| 5408 ia_role = ROLE_SYSTEM_CLIENT; | 5319 ia_role = ROLE_SYSTEM_CLIENT; |
| 5409 ia2_role = IA2_ROLE_RULER; | 5320 ia2_role = IA2_ROLE_RULER; |
| 5410 ia_state |= STATE_SYSTEM_READONLY; | |
| 5411 break; | 5321 break; |
| 5412 case ui::AX_ROLE_SCROLL_AREA: | 5322 case ui::AX_ROLE_SCROLL_AREA: |
| 5413 ia_role = ROLE_SYSTEM_CLIENT; | 5323 ia_role = ROLE_SYSTEM_CLIENT; |
| 5414 ia2_role = IA2_ROLE_SCROLL_PANE; | 5324 ia2_role = IA2_ROLE_SCROLL_PANE; |
| 5415 ia_state |= STATE_SYSTEM_READONLY; | |
| 5416 ia2_state &= ~(IA2_STATE_EDITABLE); | 5325 ia2_state &= ~(IA2_STATE_EDITABLE); |
| 5417 break; | 5326 break; |
| 5418 case ui::AX_ROLE_SCROLL_BAR: | 5327 case ui::AX_ROLE_SCROLL_BAR: |
| 5419 ia_role = ROLE_SYSTEM_SCROLLBAR; | 5328 ia_role = ROLE_SYSTEM_SCROLLBAR; |
| 5420 break; | 5329 break; |
| 5421 case ui::AX_ROLE_SEARCH: | 5330 case ui::AX_ROLE_SEARCH: |
| 5422 ia_role = ROLE_SYSTEM_GROUPING; | 5331 ia_role = ROLE_SYSTEM_GROUPING; |
| 5423 ia2_role = IA2_ROLE_SECTION; | 5332 ia2_role = IA2_ROLE_SECTION; |
| 5424 break; | 5333 break; |
| 5425 case ui::AX_ROLE_SLIDER: | 5334 case ui::AX_ROLE_SLIDER: |
| (...skipping 25 matching lines...) Expand all Loading... |
| 5451 break; | 5360 break; |
| 5452 case ui::AX_ROLE_TAB: | 5361 case ui::AX_ROLE_TAB: |
| 5453 ia_role = ROLE_SYSTEM_PAGETAB; | 5362 ia_role = ROLE_SYSTEM_PAGETAB; |
| 5454 break; | 5363 break; |
| 5455 case ui::AX_ROLE_TABLE: | 5364 case ui::AX_ROLE_TABLE: |
| 5456 ia_role = ROLE_SYSTEM_TABLE; | 5365 ia_role = ROLE_SYSTEM_TABLE; |
| 5457 break; | 5366 break; |
| 5458 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: | 5367 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: |
| 5459 ia_role = ROLE_SYSTEM_GROUPING; | 5368 ia_role = ROLE_SYSTEM_GROUPING; |
| 5460 ia2_role = IA2_ROLE_SECTION; | 5369 ia2_role = IA2_ROLE_SECTION; |
| 5461 ia_state |= STATE_SYSTEM_READONLY; | |
| 5462 break; | 5370 break; |
| 5463 case ui::AX_ROLE_TAB_LIST: | 5371 case ui::AX_ROLE_TAB_LIST: |
| 5464 ia_role = ROLE_SYSTEM_PAGETABLIST; | 5372 ia_role = ROLE_SYSTEM_PAGETABLIST; |
| 5465 break; | 5373 break; |
| 5466 case ui::AX_ROLE_TAB_PANEL: | 5374 case ui::AX_ROLE_TAB_PANEL: |
| 5467 ia_role = ROLE_SYSTEM_PROPERTYPAGE; | 5375 ia_role = ROLE_SYSTEM_PROPERTYPAGE; |
| 5468 break; | 5376 break; |
| 5469 case ui::AX_ROLE_TERM: | 5377 case ui::AX_ROLE_TERM: |
| 5470 ia_role = ROLE_SYSTEM_LISTITEM; | 5378 ia_role = ROLE_SYSTEM_LISTITEM; |
| 5471 ia_state |= STATE_SYSTEM_READONLY; | |
| 5472 break; | 5379 break; |
| 5473 case ui::AX_ROLE_TOGGLE_BUTTON: | 5380 case ui::AX_ROLE_TOGGLE_BUTTON: |
| 5474 ia_role = ROLE_SYSTEM_PUSHBUTTON; | 5381 ia_role = ROLE_SYSTEM_PUSHBUTTON; |
| 5475 ia2_role = IA2_ROLE_TOGGLE_BUTTON; | 5382 ia2_role = IA2_ROLE_TOGGLE_BUTTON; |
| 5476 break; | 5383 break; |
| 5477 case ui::AX_ROLE_TEXT_FIELD: | 5384 case ui::AX_ROLE_TEXT_FIELD: |
| 5478 case ui::AX_ROLE_SEARCH_BOX: | 5385 case ui::AX_ROLE_SEARCH_BOX: |
| 5479 ia_role = ROLE_SYSTEM_TEXT; | 5386 ia_role = ROLE_SYSTEM_TEXT; |
| 5480 if (owner()->HasState(ui::AX_STATE_MULTILINE)) { | 5387 if (owner()->HasState(ui::AX_STATE_MULTILINE)) { |
| 5481 ia2_state |= IA2_STATE_MULTI_LINE; | 5388 ia2_state |= IA2_STATE_MULTI_LINE; |
| 5482 } else { | 5389 } else { |
| 5483 ia2_state |= IA2_STATE_SINGLE_LINE; | 5390 ia2_state |= IA2_STATE_SINGLE_LINE; |
| 5484 } | 5391 } |
| 5485 if (owner()->HasState(ui::AX_STATE_READ_ONLY)) | |
| 5486 ia_state |= STATE_SYSTEM_READONLY; | |
| 5487 ia2_state |= IA2_STATE_SELECTABLE_TEXT; | 5392 ia2_state |= IA2_STATE_SELECTABLE_TEXT; |
| 5488 break; | 5393 break; |
| 5489 case ui::AX_ROLE_ABBR: | 5394 case ui::AX_ROLE_ABBR: |
| 5490 case ui::AX_ROLE_TIME: | 5395 case ui::AX_ROLE_TIME: |
| 5491 role_name = html_tag; | 5396 role_name = html_tag; |
| 5492 ia_role = ROLE_SYSTEM_TEXT; | 5397 ia_role = ROLE_SYSTEM_TEXT; |
| 5493 ia2_role = IA2_ROLE_TEXT_FRAME; | 5398 ia2_role = IA2_ROLE_TEXT_FRAME; |
| 5494 break; | 5399 break; |
| 5495 case ui::AX_ROLE_TIMER: | 5400 case ui::AX_ROLE_TIMER: |
| 5496 ia_role = ROLE_SYSTEM_CLOCK; | 5401 ia_role = ROLE_SYSTEM_CLOCK; |
| 5497 ia_state |= STATE_SYSTEM_READONLY; | |
| 5498 break; | 5402 break; |
| 5499 case ui::AX_ROLE_TOOLBAR: | 5403 case ui::AX_ROLE_TOOLBAR: |
| 5500 ia_role = ROLE_SYSTEM_TOOLBAR; | 5404 ia_role = ROLE_SYSTEM_TOOLBAR; |
| 5501 ia_state |= STATE_SYSTEM_READONLY; | |
| 5502 break; | 5405 break; |
| 5503 case ui::AX_ROLE_TOOLTIP: | 5406 case ui::AX_ROLE_TOOLTIP: |
| 5504 ia_role = ROLE_SYSTEM_TOOLTIP; | 5407 ia_role = ROLE_SYSTEM_TOOLTIP; |
| 5505 ia_state |= STATE_SYSTEM_READONLY; | |
| 5506 break; | 5408 break; |
| 5507 case ui::AX_ROLE_TREE: | 5409 case ui::AX_ROLE_TREE: |
| 5508 ia_role = ROLE_SYSTEM_OUTLINE; | 5410 ia_role = ROLE_SYSTEM_OUTLINE; |
| 5509 break; | 5411 break; |
| 5510 case ui::AX_ROLE_TREE_GRID: | 5412 case ui::AX_ROLE_TREE_GRID: |
| 5511 ia_role = ROLE_SYSTEM_OUTLINE; | 5413 ia_role = ROLE_SYSTEM_OUTLINE; |
| 5512 break; | 5414 break; |
| 5513 case ui::AX_ROLE_TREE_ITEM: | 5415 case ui::AX_ROLE_TREE_ITEM: |
| 5514 ia_role = ROLE_SYSTEM_OUTLINEITEM; | 5416 ia_role = ROLE_SYSTEM_OUTLINEITEM; |
| 5515 break; | 5417 break; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5528 case ui::AX_ROLE_IGNORED: | 5430 case ui::AX_ROLE_IGNORED: |
| 5529 case ui::AX_ROLE_LOG: | 5431 case ui::AX_ROLE_LOG: |
| 5530 case ui::AX_ROLE_NONE: | 5432 case ui::AX_ROLE_NONE: |
| 5531 case ui::AX_ROLE_PRESENTATIONAL: | 5433 case ui::AX_ROLE_PRESENTATIONAL: |
| 5532 case ui::AX_ROLE_SLIDER_THUMB: | 5434 case ui::AX_ROLE_SLIDER_THUMB: |
| 5533 default: | 5435 default: |
| 5534 ia_role = ROLE_SYSTEM_CLIENT; | 5436 ia_role = ROLE_SYSTEM_CLIENT; |
| 5535 break; | 5437 break; |
| 5536 } | 5438 } |
| 5537 | 5439 |
| 5538 // Compute the final value of READONLY for MSAA. | |
| 5539 // | |
| 5540 // We always set the READONLY state for elements that have the | |
| 5541 // aria-readonly attribute and for a few roles (in the switch above), | |
| 5542 // including read-only text fields. | |
| 5543 // The majority of focusable controls should not have the read-only state | |
| 5544 // set. | |
| 5545 if (owner()->HasState(ui::AX_STATE_FOCUSABLE) && | |
| 5546 ia_role != ROLE_SYSTEM_DOCUMENT && ia_role != ROLE_SYSTEM_TEXT) { | |
| 5547 ia_state &= ~(STATE_SYSTEM_READONLY); | |
| 5548 } | |
| 5549 if (!owner()->HasState(ui::AX_STATE_READ_ONLY)) | |
| 5550 ia_state &= ~(STATE_SYSTEM_READONLY); | |
| 5551 if (owner()->GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY)) | |
| 5552 ia_state |= STATE_SYSTEM_READONLY; | |
| 5553 | |
| 5554 // The role should always be set. | 5440 // The role should always be set. |
| 5555 DCHECK(!role_name.empty() || ia_role); | 5441 DCHECK(!role_name.empty() || ia_role); |
| 5556 | 5442 |
| 5557 // If we didn't explicitly set the IAccessible2 role, make it the same | 5443 // If we didn't explicitly set the IAccessible2 role, make it the same |
| 5558 // as the MSAA role. | 5444 // as the MSAA role. |
| 5559 if (!ia2_role) | 5445 if (!ia2_role) |
| 5560 ia2_role = ia_role; | 5446 ia2_role = ia_role; |
| 5561 | 5447 |
| 5562 win_attributes_->ia_role = ia_role; | 5448 win_attributes_->ia_role = ia_role; |
| 5563 win_attributes_->ia_state = ia_state; | 5449 win_attributes_->ia_state = MSAAState(); |
| 5564 win_attributes_->role_name = role_name; | 5450 win_attributes_->role_name = role_name; |
| 5565 win_attributes_->ia2_role = ia2_role; | 5451 win_attributes_->ia2_role = ia2_role; |
| 5566 win_attributes_->ia2_state = ia2_state; | 5452 win_attributes_->ia2_state = ia2_state; |
| 5567 } | 5453 } |
| 5568 | 5454 |
| 5569 bool BrowserAccessibilityComWin::IsInTreeGrid( | 5455 bool BrowserAccessibilityComWin::IsInTreeGrid( |
| 5570 const BrowserAccessibility* item) { | 5456 const BrowserAccessibility* item) { |
| 5571 BrowserAccessibility* container = item->PlatformGetParent(); | 5457 BrowserAccessibility* container = item->PlatformGetParent(); |
| 5572 if (container && container->GetRole() == ui::AX_ROLE_GROUP) { | 5458 if (container && container->GetRole() == ui::AX_ROLE_GROUP) { |
| 5573 // If parent was a rowgroup, we need to look at the grandparent | 5459 // If parent was a rowgroup, we need to look at the grandparent |
| 5574 container = container->PlatformGetParent(); | 5460 container = container->PlatformGetParent(); |
| 5575 } | 5461 } |
| 5576 | 5462 |
| 5577 if (!container) { | 5463 if (!container) { |
| 5578 return false; | 5464 return false; |
| 5579 } | 5465 } |
| 5580 | 5466 |
| 5581 return container->GetRole() == ui::AX_ROLE_TREE_GRID; | 5467 return container->GetRole() == ui::AX_ROLE_TREE_GRID; |
| 5582 } | 5468 } |
| 5583 | 5469 |
| 5584 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( | 5470 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( |
| 5585 BrowserAccessibility* obj) { | 5471 BrowserAccessibility* obj) { |
| 5586 if (!obj || !obj->IsNative()) | 5472 if (!obj || !obj->IsNative()) |
| 5587 return nullptr; | 5473 return nullptr; |
| 5588 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); | 5474 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); |
| 5589 return result; | 5475 return result; |
| 5590 } | 5476 } |
| 5591 | 5477 |
| 5592 } // namespace content | 5478 } // namespace content |
| OLD | NEW |