Bug 1804714 - Expose <summary> in Android correctly. r=Jamie,geckoview-reviewers,tcampbell

Differential Revision: https://phabricator.services.mozilla.com/D322450
This commit is contained in:
Eitan Isaacson
2026-09-03 18:40:05 +00:00
committed by eisaacson@mozilla.com
parent d44c96a3f9
commit e03fc8bd6b
4 changed files with 52 additions and 1 deletions
+1
View File
@@ -274,6 +274,7 @@ uint16_t TraversalRule::DefaultMatch(Accessible* aAccessible) {
case roles::OPTION:
case roles::SWITCH:
case roles::MATHML_MATH:
case roles::SUMMARY:
// Ignore the subtree, if there is one. So that we don't land on
// the same content that was already presented by its parent.
return nsIAccessibleTraversalRule::FILTER_MATCH |
+1 -1
View File
@@ -1526,7 +1526,7 @@ ROLE(SUMMARY,
@"AXSummary",
ROLE_SYSTEM_PUSHBUTTON,
ROLE_SYSTEM_PUSHBUTTON,
java::SessionAccessibility::CLASSNAME_BUTTON,
java::SessionAccessibility::CLASSNAME_VIEW,
IsAccessibilityElementRule::Yes,
UIA_ButtonControlTypeId,
eNameFromSubtreeRule)
@@ -64,6 +64,7 @@ figure = figure
definitionlist = definition list
term = term
definition = definition
summary = summary
mathmltable = math table
mathmlcell = cell
@@ -828,6 +828,55 @@ class AccessibilityTest : BaseSessionTest() {
)
}
@Test
fun testSummary() {
var nodeId = AccessibilityNodeProvider.HOST_VIEW_ID
mainSession.loadUri("data:text/html;charset=utf-8,<details><summary>Question</summary><p>Answer</p></details>")
waitForInitialFocus(true)
sessionRule.waitUntilCalled(
object : EventDelegate {
@AssertCalled(count = 1)
override fun onAccessibilityFocused(event: AccessibilityEvent) {
nodeId = getSourceId(event)
val node = createNodeInfo(nodeId)
assertThat("Accessibility focus on summary", node.text.toString(), equalTo("Question"))
assertThat(
"Summary has role description",
node.extras.getCharSequence("AccessibilityNodeInfo.roleDescription")!!.toString(),
equalTo("summary"),
)
assertThat(
"summary is expandable",
node.actionList,
hasItem(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND),
)
}
}
)
provider.performAction(nodeId, AccessibilityNodeInfo.ACTION_EXPAND, null)
sessionRule.waitUntilCalled(
object : EventDelegate {
@AssertCalled(count = 1)
override fun onClicked(event: AccessibilityEvent) {
assertThat("Clicked event is from same node", getSourceId(event), equalTo(nodeId))
val node = createNodeInfo(nodeId)
assertThat(
"summary is collapsable",
node.actionList,
hasItem(AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE),
)
assertThat(
"node is not expandable",
node.actionList,
not(hasItem(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND)),
)
}
}
)
}
@Test
fun testMoveByCharacter() {
var nodeId = AccessibilityNodeProvider.HOST_VIEW_ID