| 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 <algorithm> | 10 #include <algorithm> |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 UMA_API_UNSELECT_ROW = 157, | 196 UMA_API_UNSELECT_ROW = 157, |
| 197 | 197 |
| 198 // This must always be the last enum. It's okay for its value to | 198 // This must always be the last enum. It's okay for its value to |
| 199 // increase, but none of the other enum values may change. | 199 // increase, but none of the other enum values may change. |
| 200 UMA_API_MAX | 200 UMA_API_MAX |
| 201 }; | 201 }; |
| 202 | 202 |
| 203 #define WIN_ACCESSIBILITY_API_HISTOGRAM(enum_value) \ | 203 #define WIN_ACCESSIBILITY_API_HISTOGRAM(enum_value) \ |
| 204 UMA_HISTOGRAM_ENUMERATION("Accessibility.WinAPIs", enum_value, UMA_API_MAX) | 204 UMA_HISTOGRAM_ENUMERATION("Accessibility.WinAPIs", enum_value, UMA_API_MAX) |
| 205 | 205 |
| 206 const WCHAR *const IA2_DETAILS = L"details"; |
| 207 const WCHAR *const IA2_DETAILS_FOR = L"detailsFor"; |
| 208 const WCHAR *const IA2_ERROR_MESSAGE = L"errorMessage"; |
| 209 |
| 206 } // namespace | 210 } // namespace |
| 207 | 211 |
| 208 namespace content { | 212 namespace content { |
| 209 | 213 |
| 210 // These nonstandard GUIDs are taken directly from the Mozilla sources | 214 // These nonstandard GUIDs are taken directly from the Mozilla sources |
| 211 // (accessible/src/msaa/nsAccessNodeWrap.cpp); some documentation is here: | 215 // (accessible/src/msaa/nsAccessNodeWrap.cpp); some documentation is here: |
| 212 // http://developer.mozilla.org/en/Accessibility/AT-APIs/ImplementationFeatures/
MSAA | 216 // http://developer.mozilla.org/en/Accessibility/AT-APIs/ImplementationFeatures/
MSAA |
| 213 const GUID GUID_ISimpleDOM = {0x0c539790, | 217 const GUID GUID_ISimpleDOM = {0x0c539790, |
| 214 0x12e4, | 218 0x12e4, |
| 215 0x11cf, | 219 0x11cf, |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 if (!instance_active()) | 647 if (!instance_active()) |
| 644 return E_FAIL; | 648 return E_FAIL; |
| 645 | 649 |
| 646 if (!acc_key) | 650 if (!acc_key) |
| 647 return E_INVALIDARG; | 651 return E_INVALIDARG; |
| 648 | 652 |
| 649 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); | 653 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); |
| 650 if (!target) | 654 if (!target) |
| 651 return E_INVALIDARG; | 655 return E_INVALIDARG; |
| 652 | 656 |
| 657 if (target->HasStringAttribute(ui::AX_ATTR_KEY_SHORTCUTS)) { |
| 658 return target->GetStringAttributeAsBstr( |
| 659 ui::AX_ATTR_KEY_SHORTCUTS, acc_key); |
| 660 } |
| 661 |
| 653 return target->GetStringAttributeAsBstr( | 662 return target->GetStringAttributeAsBstr( |
| 654 ui::AX_ATTR_SHORTCUT, acc_key); | 663 ui::AX_ATTR_SHORTCUT, acc_key); |
| 655 } | 664 } |
| 656 | 665 |
| 657 STDMETHODIMP BrowserAccessibilityWin::get_accName(VARIANT var_id, BSTR* name) { | 666 STDMETHODIMP BrowserAccessibilityWin::get_accName(VARIANT var_id, BSTR* name) { |
| 658 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_NAME); | 667 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_NAME); |
| 659 if (!instance_active()) | 668 if (!instance_active()) |
| 660 return E_FAIL; | 669 return E_FAIL; |
| 661 | 670 |
| 662 if (!name) | 671 if (!name) |
| (...skipping 3228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3891 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR, | 3900 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR, |
| 3892 IA2_RELATION_CONTROLLED_BY, | 3901 IA2_RELATION_CONTROLLED_BY, |
| 3893 ui::AX_ATTR_CONTROLS_IDS); | 3902 ui::AX_ATTR_CONTROLS_IDS); |
| 3894 AddBidirectionalRelations(IA2_RELATION_DESCRIBED_BY, | 3903 AddBidirectionalRelations(IA2_RELATION_DESCRIBED_BY, |
| 3895 IA2_RELATION_DESCRIPTION_FOR, | 3904 IA2_RELATION_DESCRIPTION_FOR, |
| 3896 ui::AX_ATTR_DESCRIBEDBY_IDS); | 3905 ui::AX_ATTR_DESCRIBEDBY_IDS); |
| 3897 AddBidirectionalRelations(IA2_RELATION_FLOWS_TO, IA2_RELATION_FLOWS_FROM, | 3906 AddBidirectionalRelations(IA2_RELATION_FLOWS_TO, IA2_RELATION_FLOWS_FROM, |
| 3898 ui::AX_ATTR_FLOWTO_IDS); | 3907 ui::AX_ATTR_FLOWTO_IDS); |
| 3899 AddBidirectionalRelations(IA2_RELATION_LABELLED_BY, IA2_RELATION_LABEL_FOR, | 3908 AddBidirectionalRelations(IA2_RELATION_LABELLED_BY, IA2_RELATION_LABEL_FOR, |
| 3900 ui::AX_ATTR_LABELLEDBY_IDS); | 3909 ui::AX_ATTR_LABELLEDBY_IDS); |
| 3910 AddBidirectionalRelations(IA2_RELATION_DETAILS, IA2_RELATION_DETAILS_FOR, |
| 3911 ui::AX_ATTR_DETAILS_IDS); |
| 3901 | 3912 |
| 3902 int member_of_id; | 3913 int member_of_id; |
| 3903 if (GetIntAttribute(ui::AX_ATTR_MEMBER_OF_ID, &member_of_id)) | 3914 if (GetIntAttribute(ui::AX_ATTR_MEMBER_OF_ID, &member_of_id)) |
| 3904 AddRelation(IA2_RELATION_MEMBER_OF, member_of_id); | 3915 AddRelation(IA2_RELATION_MEMBER_OF, member_of_id); |
| 3905 | 3916 |
| 3917 int error_message_id; |
| 3918 if (GetIntAttribute(ui::AX_ATTR_ERROR_MESSAGE, &error_message_id)) |
| 3919 AddRelation(IA2_RELATION_ERROR_MESSAGE, &error_message_id); |
| 3920 |
| 3906 UpdateRequiredAttributes(); | 3921 UpdateRequiredAttributes(); |
| 3907 // If this is a web area for a presentational iframe, give it a role of | 3922 // If this is a web area for a presentational iframe, give it a role of |
| 3908 // something other than DOCUMENT so that the fact that it's a separate doc | 3923 // something other than DOCUMENT so that the fact that it's a separate doc |
| 3909 // is not exposed to AT. | 3924 // is not exposed to AT. |
| 3910 if (IsWebAreaForPresentationalIframe()) { | 3925 if (IsWebAreaForPresentationalIframe()) { |
| 3911 win_attributes_->ia_role = ROLE_SYSTEM_GROUPING; | 3926 win_attributes_->ia_role = ROLE_SYSTEM_GROUPING; |
| 3912 win_attributes_->ia2_role = ROLE_SYSTEM_GROUPING; | 3927 win_attributes_->ia2_role = ROLE_SYSTEM_GROUPING; |
| 3913 } | 3928 } |
| 3914 } | 3929 } |
| 3915 | 3930 |
| (...skipping 1140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5056 | 5071 |
| 5057 if (GetBoolAttribute(ui::AX_ATTR_STATE_MIXED)) | 5072 if (GetBoolAttribute(ui::AX_ATTR_STATE_MIXED)) |
| 5058 ia_state |= STATE_SYSTEM_MIXED; | 5073 ia_state |= STATE_SYSTEM_MIXED; |
| 5059 | 5074 |
| 5060 if (GetBoolAttribute(ui::AX_ATTR_CAN_SET_VALUE)) | 5075 if (GetBoolAttribute(ui::AX_ATTR_CAN_SET_VALUE)) |
| 5061 ia2_state |= IA2_STATE_EDITABLE; | 5076 ia2_state |= IA2_STATE_EDITABLE; |
| 5062 | 5077 |
| 5063 if (!GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) | 5078 if (!GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) |
| 5064 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; | 5079 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; |
| 5065 | 5080 |
| 5081 if (HasIntAttribute(ui::AX_ATTR_MODAL)) |
| 5082 ia2_state |= IA2_STATE_MODAL; |
| 5083 |
| 5066 base::string16 html_tag = GetString16Attribute( | 5084 base::string16 html_tag = GetString16Attribute( |
| 5067 ui::AX_ATTR_HTML_TAG); | 5085 ui::AX_ATTR_HTML_TAG); |
| 5068 switch (GetRole()) { | 5086 switch (GetRole()) { |
| 5069 case ui::AX_ROLE_ALERT: | 5087 case ui::AX_ROLE_ALERT: |
| 5070 ia_role = ROLE_SYSTEM_ALERT; | 5088 ia_role = ROLE_SYSTEM_ALERT; |
| 5071 break; | 5089 break; |
| 5072 case ui::AX_ROLE_ALERT_DIALOG: | 5090 case ui::AX_ROLE_ALERT_DIALOG: |
| 5073 ia_role = ROLE_SYSTEM_DIALOG; | 5091 ia_role = ROLE_SYSTEM_DIALOG; |
| 5074 break; | 5092 break; |
| 5075 case ui::AX_ROLE_APPLICATION: | 5093 case ui::AX_ROLE_APPLICATION: |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5558 return static_cast<BrowserAccessibilityWin*>(obj); | 5576 return static_cast<BrowserAccessibilityWin*>(obj); |
| 5559 } | 5577 } |
| 5560 | 5578 |
| 5561 const BrowserAccessibilityWin* | 5579 const BrowserAccessibilityWin* |
| 5562 ToBrowserAccessibilityWin(const BrowserAccessibility* obj) { | 5580 ToBrowserAccessibilityWin(const BrowserAccessibility* obj) { |
| 5563 DCHECK(!obj || obj->IsNative()); | 5581 DCHECK(!obj || obj->IsNative()); |
| 5564 return static_cast<const BrowserAccessibilityWin*>(obj); | 5582 return static_cast<const BrowserAccessibilityWin*>(obj); |
| 5565 } | 5583 } |
| 5566 | 5584 |
| 5567 } // namespace content | 5585 } // namespace content |
| OLD | NEW |