Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: content/browser/accessibility/browser_accessibility_com_win.cc

Issue 2931893002: More precise use of multiline state (Closed)
Patch Set: Fix typo Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2848 matching lines...) Expand 10 before | Expand all | Expand 10 after
2859 if (owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag)) 2859 if (owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag))
2860 *node_name = SysAllocString(tag.c_str()); 2860 *node_name = SysAllocString(tag.c_str());
2861 else 2861 else
2862 *node_name = nullptr; 2862 *node_name = nullptr;
2863 2863
2864 *name_space_id = 0; 2864 *name_space_id = 0;
2865 *node_value = SysAllocString(value().c_str()); 2865 *node_value = SysAllocString(value().c_str());
2866 *num_children = owner()->PlatformChildCount(); 2866 *num_children = owner()->PlatformChildCount();
2867 *unique_id = -owner()->unique_id(); 2867 *unique_id = -owner()->unique_id();
2868 2868
2869 if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || 2869 if (owner()->IsDocument()) {
2870 owner()->GetRole() == ui::AX_ROLE_WEB_AREA) {
2871 *node_type = NODETYPE_DOCUMENT; 2870 *node_type = NODETYPE_DOCUMENT;
2872 } else if (owner()->IsTextOnlyObject()) { 2871 } else if (owner()->IsTextOnlyObject()) {
2873 *node_type = NODETYPE_TEXT; 2872 *node_type = NODETYPE_TEXT;
2874 } else { 2873 } else {
2875 *node_type = NODETYPE_ELEMENT; 2874 *node_type = NODETYPE_ELEMENT;
2876 } 2875 }
2877 2876
2878 return S_OK; 2877 return S_OK;
2879 } 2878 }
2880 2879
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after
3704 3703
3705 base::string16 value = owner()->GetValue(); 3704 base::string16 value = owner()->GetValue();
3706 3705
3707 // Expose slider value. 3706 // Expose slider value.
3708 if (IsRangeValueSupported()) { 3707 if (IsRangeValueSupported()) {
3709 value = GetRangeValueText(); 3708 value = GetRangeValueText();
3710 SanitizeStringAttributeForIA2(value, &value); 3709 SanitizeStringAttributeForIA2(value, &value);
3711 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value); 3710 win_attributes_->ia2_attributes.push_back(L"valuetext:" + value);
3712 } else { 3711 } else {
3713 // On Windows, the value of a document should be its url. 3712 // On Windows, the value of a document should be its url.
3714 if (owner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || 3713 if (owner()->IsDocument()) {
3715 owner()->GetRole() == ui::AX_ROLE_WEB_AREA) {
3716 value = base::UTF8ToUTF16(Manager()->GetTreeData().url); 3714 value = base::UTF8ToUTF16(Manager()->GetTreeData().url);
3717 } 3715 }
3718 // If this doesn't have a value and is linked then set its value to the url 3716 // If this doesn't have a value and is linked then set its value to the url
3719 // attribute. This allows screen readers to read an empty link's 3717 // attribute. This allows screen readers to read an empty link's
3720 // destination. 3718 // destination.
3721 if (value.empty() && (ia_state() & STATE_SYSTEM_LINKED)) 3719 if (value.empty() && (ia_state() & STATE_SYSTEM_LINKED))
3722 value = owner()->GetString16Attribute(ui::AX_ATTR_URL); 3720 value = owner()->GetString16Attribute(ui::AX_ATTR_URL);
3723 } 3721 }
3724 3722
3725 win_attributes_->value = value; 3723 win_attributes_->value = value;
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after
5005 // Expose whether or not the mouse is over an element, but suppress 5003 // Expose whether or not the mouse is over an element, but suppress
5006 // this for tests because it can make the test results flaky depending 5004 // this for tests because it can make the test results flaky depending
5007 // on the position of the mouse. 5005 // on the position of the mouse.
5008 BrowserAccessibilityStateImpl* accessibility_state = 5006 BrowserAccessibilityStateImpl* accessibility_state =
5009 BrowserAccessibilityStateImpl::GetInstance(); 5007 BrowserAccessibilityStateImpl::GetInstance();
5010 if (!accessibility_state->disable_hot_tracking_for_testing()) { 5008 if (!accessibility_state->disable_hot_tracking_for_testing()) {
5011 if (owner()->HasState(ui::AX_STATE_HOVERED)) 5009 if (owner()->HasState(ui::AX_STATE_HOVERED))
5012 ia_state |= STATE_SYSTEM_HOTTRACKED; 5010 ia_state |= STATE_SYSTEM_HOTTRACKED;
5013 } 5011 }
5014 5012
5015 if (owner()->HasState(ui::AX_STATE_EDITABLE)) 5013 const bool is_editable = owner()->HasState(ui::AX_STATE_EDITABLE);
5014 if (is_editable)
5016 ia2_state |= IA2_STATE_EDITABLE; 5015 ia2_state |= IA2_STATE_EDITABLE;
5017 5016
5017 if (owner()->IsRichTextControl() || owner()->IsEditBox()) {
5018 // Support multi/single line states if root editable or appropriate role.
5019 // We support the edit box roles even if the area is not actually editable,
5020 // because it is technically feasible for JS to implement the edit box
5021 // by controlling selection.
5022 if (owner()->HasState(ui::AX_STATE_MULTILINE)) {
5023 ia2_state |= IA2_STATE_MULTI_LINE;
5024 } else {
5025 ia2_state |= IA2_STATE_SINGLE_LINE;
5026 }
5027 }
5028
5018 if (!owner()->GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty()) 5029 if (!owner()->GetStringAttribute(ui::AX_ATTR_AUTO_COMPLETE).empty())
5019 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION; 5030 ia2_state |= IA2_STATE_SUPPORTS_AUTOCOMPLETION;
5020 5031
5021 if (owner()->GetBoolAttribute(ui::AX_ATTR_MODAL)) 5032 if (owner()->GetBoolAttribute(ui::AX_ATTR_MODAL))
5022 ia2_state |= IA2_STATE_MODAL; 5033 ia2_state |= IA2_STATE_MODAL;
5023 5034
5024 base::string16 html_tag = owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG); 5035 base::string16 html_tag = owner()->GetString16Attribute(ui::AX_ATTR_HTML_TAG);
5025 switch (owner()->GetRole()) { 5036 switch (owner()->GetRole()) {
5026 case ui::AX_ROLE_ALERT: 5037 case ui::AX_ROLE_ALERT:
5027 ia_role = ROLE_SYSTEM_ALERT; 5038 ia_role = ROLE_SYSTEM_ALERT;
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
5404 ia_role = ROLE_SYSTEM_LISTITEM; 5415 ia_role = ROLE_SYSTEM_LISTITEM;
5405 ia_state |= STATE_SYSTEM_READONLY; 5416 ia_state |= STATE_SYSTEM_READONLY;
5406 break; 5417 break;
5407 case ui::AX_ROLE_TOGGLE_BUTTON: 5418 case ui::AX_ROLE_TOGGLE_BUTTON:
5408 ia_role = ROLE_SYSTEM_PUSHBUTTON; 5419 ia_role = ROLE_SYSTEM_PUSHBUTTON;
5409 ia2_role = IA2_ROLE_TOGGLE_BUTTON; 5420 ia2_role = IA2_ROLE_TOGGLE_BUTTON;
5410 break; 5421 break;
5411 case ui::AX_ROLE_TEXT_FIELD: 5422 case ui::AX_ROLE_TEXT_FIELD:
5412 case ui::AX_ROLE_SEARCH_BOX: 5423 case ui::AX_ROLE_SEARCH_BOX:
5413 ia_role = ROLE_SYSTEM_TEXT; 5424 ia_role = ROLE_SYSTEM_TEXT;
5414 if (owner()->HasState(ui::AX_STATE_MULTILINE)) {
5415 ia2_state |= IA2_STATE_MULTI_LINE;
5416 } else {
5417 ia2_state |= IA2_STATE_SINGLE_LINE;
5418 }
5419 if (owner()->HasState(ui::AX_STATE_READ_ONLY)) 5425 if (owner()->HasState(ui::AX_STATE_READ_ONLY))
5420 ia_state |= STATE_SYSTEM_READONLY; 5426 ia_state |= STATE_SYSTEM_READONLY;
5421 ia2_state |= IA2_STATE_SELECTABLE_TEXT; 5427 ia2_state |= IA2_STATE_SELECTABLE_TEXT;
5422 break; 5428 break;
5423 case ui::AX_ROLE_ABBR: 5429 case ui::AX_ROLE_ABBR:
5424 case ui::AX_ROLE_TIME: 5430 case ui::AX_ROLE_TIME:
5425 role_name = html_tag; 5431 role_name = html_tag;
5426 ia_role = ROLE_SYSTEM_TEXT; 5432 ia_role = ROLE_SYSTEM_TEXT;
5427 ia2_role = IA2_ROLE_TEXT_FRAME; 5433 ia2_role = IA2_ROLE_TEXT_FRAME;
5428 break; 5434 break;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
5517 5523
5518 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( 5524 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin(
5519 BrowserAccessibility* obj) { 5525 BrowserAccessibility* obj) {
5520 if (!obj || !obj->IsNative()) 5526 if (!obj || !obj->IsNative())
5521 return nullptr; 5527 return nullptr;
5522 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); 5528 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM();
5523 return result; 5529 return result;
5524 } 5530 }
5525 5531
5526 } // namespace content 5532 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698