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
++button Name='Button1'
++button Name='Button2' Toggle.ToggleState='On'
++button Name='Button3' Toggle.ToggleState='Off'
++menu Name='Button4' ExpandCollapse.ExpandCollapseState='Collapsed'
++button Name='Button4' ExpandCollapse.ExpandCollapseState='Collapsed'
++button Name='Button5'
++button Name='Complex button '
++++description Name='Complex button ' IsControlElement=false
......@@ -10,6 +10,7 @@ document
++button Name='Complex toggle button ' Toggle.ToggleState='On'
++++description Name='Complex toggle button '
++++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 '
++++textbox
<-- End-of-file -->
......@@ -2,9 +2,10 @@ document
++group IsControlElement=false
++++group IsControlElement=false
++++++description Name='Choose one:'
++++menu Name='Choose one: Foo' ExpandCollapse.ExpandCollapseState='LeafNode'
++++button Name='Choose one: Foo' ExpandCollapse.ExpandCollapseState='LeafNode'
++++++description Name='Foo'
++++listbox Name='Choose one:' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
++++++option Name='Baz' 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:'
<-- End-of-file -->
......@@ -11,7 +11,7 @@ document
++++++++++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'
++++++++++++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'
++++++group IsControlElement=false
++++++++group IsControlElement=false
......@@ -23,4 +23,5 @@ document
++++++++++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'
++++++++++++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
++++++++++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'
++++++++++++description Name='2008'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++textbox LocalizedControlType='date picker'
++++++group IsControlElement=false
++++++++group IsControlElement=false
......@@ -23,7 +23,7 @@ document
++++++++++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'
++++++++++++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}'
++++++group IsControlElement=false
++++++++group IsControlElement=false
......@@ -35,7 +35,7 @@ document
++++++++++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'
++++++++++++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
++++++++document
++++++++++group IsControlElement=false
......@@ -67,3 +67,4 @@ document
++++++++++++++++group IsControlElement=false
++++++++++++++++++group IsControlElement=false
++++++++++++++++button Name='Today'
<-- End-of-file -->
......@@ -20,4 +20,5 @@ document
++++++++++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'
++++++++++++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
++++++++++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'
++++++++++++description Name='AM'
++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++++button Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
++++group Name='Breakfast'
++++++group IsControlElement=false
++++++++group IsControlElement=false
......@@ -23,4 +23,5 @@ document
++++++++++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'
++++++++++++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
++++++++++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'
++++++++++++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() {
return E_FAIL;
}
IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState(
ExpandCollapseState* result) {
WIN_ACCESSIBILITY_API_HISTOGRAM(
UMA_API_EXPANDCOLLAPSE_GET_EXPANDCOLLAPSESTATE);
UIA_VALIDATE_CALL_1_ARG(result);
ExpandCollapseState AXPlatformNodeWin::ComputeExpandCollapseState() const {
const AXNodeData& data = GetData();
const bool is_menu_button = data.GetHasPopup() == ax::mojom::HasPopup::kMenu;
const bool is_expanded_menu_button =
......@@ -1802,13 +1797,23 @@ IFACEMETHODIMP AXPlatformNodeWin::get_ExpandCollapseState(
data.GetCheckedState() != ax::mojom::CheckedState::kTrue;
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) ||
is_collapsed_menu_button) {
*result = ExpandCollapseState_Collapsed;
return ExpandCollapseState_Collapsed;
} 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;
}
......@@ -4280,6 +4285,11 @@ IFACEMETHODIMP AXPlatformNodeWin::GetPropertyValue(PROPERTYID property_id,
break;
}
case UIA_ExpandCollapseExpandCollapseStatePropertyId:
result->vt = VT_I4;
result->intVal = static_cast<int>(ComputeExpandCollapseState());
break;
// Not currently implemented.
case UIA_AnnotationObjectsPropertyId:
case UIA_AnnotationTypesPropertyId:
......@@ -5838,7 +5848,7 @@ base::string16 AXPlatformNodeWin::UIAAriaRole() {
GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
if (html_tag == "select")
return L"combobox";
return L"menu";
return L"button";
}
case ax::mojom::Role::kPortal:
......@@ -6509,7 +6519,7 @@ LONG AXPlatformNodeWin::ComputeUIAControlType() { // NOLINT(runtime/int)
GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
if (html_tag == "select")
return UIA_ComboBoxControlTypeId;
return UIA_MenuControlTypeId;
return UIA_ButtonControlTypeId;
}
case ax::mojom::Role::kPortal:
......
......@@ -1095,6 +1095,8 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2"))
bool ShouldHideChildrenForUIA() const;
ExpandCollapseState ComputeExpandCollapseState() const;
// AXPlatformNodeBase overrides.
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