Commit ac78981a authored by Ian Prest's avatar Ian Prest Committed by Commit Bot

UIA: Fix role on <button> with aria-haspopup

Per the Core-AAM specification, buttons with non-false values for
aria-haspopup should report as a UIA "button" control.

This change also ensures that GetPropertyValue reports the value for
UIA_ExpandCollapseExpandCollapseStatePropertyId when requested (this
ensures that property-change events get the new-value correctly).

Bug: 1048821
Change-Id: I0b222480ec76f9a0989658ded3fab0952f34822c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2037822Reviewed-by: default avatarKevin Babbitt <kbabbitt@microsoft.com>
Commit-Queue: Ian Prest <iapres@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#738806}
parent fe41fe71
...@@ -2,7 +2,7 @@ document ...@@ -2,7 +2,7 @@ document
++button Name='Button1' ++button Name='Button1'
++button Name='Button2' Toggle.ToggleState='On' ++button Name='Button2' Toggle.ToggleState='On'
++button Name='Button3' Toggle.ToggleState='Off' ++button Name='Button3' Toggle.ToggleState='Off'
++menu Name='Button4' ExpandCollapse.ExpandCollapseState='Collapsed' ++button Name='Button4' ExpandCollapse.ExpandCollapseState='Collapsed'
++button Name='Button5' ++button Name='Button5'
++button Name='Complex button ' ++button Name='Complex button '
++++description Name='Complex button ' IsControlElement=false ++++description Name='Complex button ' IsControlElement=false
...@@ -10,6 +10,7 @@ document ...@@ -10,6 +10,7 @@ document
++button Name='Complex toggle button ' Toggle.ToggleState='On' ++button Name='Complex toggle button ' Toggle.ToggleState='On'
++++description Name='Complex toggle button ' ++++description Name='Complex toggle button '
++++textbox ++++textbox
++menu Name='Complex pop up button ' ExpandCollapse.ExpandCollapseState='Collapsed' ++button Name='Complex pop up button ' ExpandCollapse.ExpandCollapseState='Collapsed'
++++description Name='Complex pop up button ' ++++description Name='Complex pop up button '
++++textbox ++++textbox
<-- End-of-file -->
...@@ -2,9 +2,10 @@ document ...@@ -2,9 +2,10 @@ document
++group IsControlElement=false ++group IsControlElement=false
++++group IsControlElement=false ++++group IsControlElement=false
++++++description Name='Choose one:' ++++++description Name='Choose one:'
++++menu Name='Choose one: Foo' ExpandCollapse.ExpandCollapseState='LeafNode' ++++button Name='Choose one: Foo' ExpandCollapse.ExpandCollapseState='LeafNode'
++++++description Name='Foo' ++++++description Name='Foo'
++++listbox Name='Choose one:' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false ++++listbox Name='Choose one:' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
++++++option Name='Baz' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:' ++++++option Name='Baz' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:'
++++++option Name='Bar' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:' ++++++option Name='Bar' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:'
++++++option Name='Foo' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:' ++++++option Name='Foo' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Choose one:'
<-- End-of-file -->
...@@ -11,7 +11,7 @@ document ...@@ -11,7 +11,7 @@ document
++++++++++description Name='/' ++++++++++description Name='/'
++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008' ++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
++++++++++++description Name='2008' ++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++textbox LocalizedControlType='date picker' Name='When' ++++textbox LocalizedControlType='date picker' Name='When'
++++++group IsControlElement=false ++++++group IsControlElement=false
++++++++group IsControlElement=false ++++++++group IsControlElement=false
...@@ -23,4 +23,5 @@ document ...@@ -23,4 +23,5 @@ document
++++++++++description Name='/' ++++++++++description Name='/'
++++++++++spinbutton Name='Year When' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008' ++++++++++spinbutton Name='Year When' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
++++++++++++description Name='2008' ++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
<-- End-of-file -->
...@@ -11,7 +11,7 @@ document ...@@ -11,7 +11,7 @@ document
++++++++++description Name='/' ++++++++++description Name='/'
++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008' ++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
++++++++++++description Name='2008' ++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++textbox LocalizedControlType='date picker' ++++textbox LocalizedControlType='date picker'
++++++group IsControlElement=false ++++++group IsControlElement=false
++++++++group IsControlElement=false ++++++++group IsControlElement=false
...@@ -23,7 +23,7 @@ document ...@@ -23,7 +23,7 @@ document
++++++++++description Name='/' ++++++++++description Name='/'
++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008' ++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
++++++++++++description Name='2008' ++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++textbox LocalizedControlType='date picker' Name='Third date picker' ControllerFor='{document}' ++++textbox LocalizedControlType='date picker' Name='Third date picker' ControllerFor='{document}'
++++++group IsControlElement=false ++++++group IsControlElement=false
++++++++group IsControlElement=false ++++++++group IsControlElement=false
...@@ -35,7 +35,7 @@ document ...@@ -35,7 +35,7 @@ document
++++++++++description Name='/' ++++++++++description Name='/'
++++++++++spinbutton Name='Year Third date picker' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008' ++++++++++spinbutton Name='Year Third date picker' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
++++++++++++description Name='2008' ++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++++Name='Chrome Legacy Window' IsControlElement=false ++++++Name='Chrome Legacy Window' IsControlElement=false
++++++++document ++++++++document
++++++++++group IsControlElement=false ++++++++++group IsControlElement=false
...@@ -67,3 +67,4 @@ document ...@@ -67,3 +67,4 @@ document
++++++++++++++++group IsControlElement=false ++++++++++++++++group IsControlElement=false
++++++++++++++++++group IsControlElement=false ++++++++++++++++++group IsControlElement=false
++++++++++++++++button Name='Today' ++++++++++++++++button Name='Today'
<-- End-of-file -->
...@@ -20,4 +20,5 @@ document ...@@ -20,4 +20,5 @@ document
++++++++++description Name=' ' ++++++++++description Name=' '
++++++++++spinbutton Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=0.00 Value.Value='0' ++++++++++spinbutton Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=0.00 Value.Value='0'
++++++++++++description Name='--' ++++++++++++description Name='--'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
<-- End-of-file -->
...@@ -11,7 +11,7 @@ document ...@@ -11,7 +11,7 @@ document
++++++++++description Name=' ' ++++++++++description Name=' '
++++++++++spinbutton Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='AM' ++++++++++spinbutton Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='AM'
++++++++++++description Name='AM' ++++++++++++description Name='AM'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++group Name='Breakfast' ++++group Name='Breakfast'
++++++group IsControlElement=false ++++++group IsControlElement=false
++++++++group IsControlElement=false ++++++++group IsControlElement=false
...@@ -23,4 +23,5 @@ document ...@@ -23,4 +23,5 @@ document
++++++++++description Name=' ' ++++++++++description Name=' '
++++++++++spinbutton Name='AM/PM Breakfast' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='AM' ++++++++++spinbutton Name='AM/PM Breakfast' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='AM'
++++++++++++description Name='AM' ++++++++++++description Name='AM'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
<-- End-of-file -->
...@@ -9,4 +9,5 @@ document ...@@ -9,4 +9,5 @@ document
++++++++++description Name=', ' ++++++++++description Name=', '
++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=0.00 Value.Value='0' ++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=0.00 Value.Value='0'
++++++++++++description Name='----' ++++++++++++description Name='----'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed' ++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
<-- End-of-file -->
...@@ -1786,12 +1786,7 @@ IFACEMETHODIMP AXPlatformNodeWin::Expand() { ...@@ -1786,12 +1786,7 @@ IFACEMETHODIMP AXPlatformNodeWin::Expand() {
return E_FAIL; return E_FAIL;
} }
IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState( ExpandCollapseState AXPlatformNodeWin::ComputeExpandCollapseState() const {
ExpandCollapseState* result) {
WIN_ACCESSIBILITY_API_HISTOGRAM(
UMA_API_EXPANDCOLLAPSE_GET_EXPANDCOLLAPSESTATE);
UIA_VALIDATE_CALL_1_ARG(result);
const AXNodeData& data = GetData(); const AXNodeData& data = GetData();
const bool is_menu_button = data.GetHasPopup() == ax::mojom::HasPopup::kMenu; const bool is_menu_button = data.GetHasPopup() == ax::mojom::HasPopup::kMenu;
const bool is_expanded_menu_button = const bool is_expanded_menu_button =
...@@ -1802,13 +1797,23 @@ IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState( ...@@ -1802,13 +1797,23 @@ IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState(
data.GetCheckedState() != ax::mojom::CheckedState::kTrue; data.GetCheckedState() != ax::mojom::CheckedState::kTrue;
if (data.HasState(ax::mojom::State::kExpanded) || is_expanded_menu_button) { if (data.HasState(ax::mojom::State::kExpanded) || is_expanded_menu_button) {
*result = ExpandCollapseState_Expanded; return ExpandCollapseState_Expanded;
} else if (data.HasState(ax::mojom::State::kCollapsed) || } else if (data.HasState(ax::mojom::State::kCollapsed) ||
is_collapsed_menu_button) { is_collapsed_menu_button) {
*result = ExpandCollapseState_Collapsed; return ExpandCollapseState_Collapsed;
} else { } else {
*result = ExpandCollapseState_LeafNode; return ExpandCollapseState_LeafNode;
} }
}
IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState(
ExpandCollapseState* result) {
WIN_ACCESSIBILITY_API_HISTOGRAM(
UMA_API_EXPANDCOLLAPSE_GET_EXPANDCOLLAPSESTATE);
UIA_VALIDATE_CALL_1_ARG(result);
*result = ComputeExpandCollapseState();
return S_OK; return S_OK;
} }
...@@ -4280,6 +4285,11 @@ IFACEMETHODIMP AXPlatformNodeWin::GetPropertyValue(PROPERTYID property_id, ...@@ -4280,6 +4285,11 @@ IFACEMETHODIMP AXPlatformNodeWin::GetPropertyValue(PROPERTYID property_id,
break; break;
} }
case UIA_ExpandCollapseExpandCollapseStatePropertyId:
result->vt = VT_I4;
result->intVal = static_cast<int>(ComputeExpandCollapseState());
break;
// Not currently implemented. // Not currently implemented.
case UIA_AnnotationObjectsPropertyId: case UIA_AnnotationObjectsPropertyId:
case UIA_AnnotationTypesPropertyId: case UIA_AnnotationTypesPropertyId:
...@@ -5838,7 +5848,7 @@ base::string16 AXPlatformNodeWin::UIAAriaRole() { ...@@ -5838,7 +5848,7 @@ base::string16 AXPlatformNodeWin::UIAAriaRole() {
GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag); GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
if (html_tag == "select") if (html_tag == "select")
return L"combobox"; return L"combobox";
return L"menu"; return L"button";
} }
case ax::mojom::Role::kPortal: case ax::mojom::Role::kPortal:
...@@ -6509,7 +6519,7 @@ LONG AXPlatformNodeWin::ComputeUIAControlType() { // NOLINT(runtime/int) ...@@ -6509,7 +6519,7 @@ LONG AXPlatformNodeWin::ComputeUIAControlType() { // NOLINT(runtime/int)
GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag); GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
if (html_tag == "select") if (html_tag == "select")
return UIA_ComboBoxControlTypeId; return UIA_ComboBoxControlTypeId;
return UIA_MenuControlTypeId; return UIA_ButtonControlTypeId;
} }
case ax::mojom::Role::kPortal: case ax::mojom::Role::kPortal:
......
...@@ -1095,6 +1095,8 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) ...@@ -1095,6 +1095,8 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2"))
bool ShouldHideChildrenForUIA() const; bool ShouldHideChildrenForUIA() const;
ExpandCollapseState ComputeExpandCollapseState() const;
// AXPlatformNodeBase overrides. // AXPlatformNodeBase overrides.
void Dispose() override; void Dispose() override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment