Closed Bug 1951776 Opened 10 months ago Closed 6 months ago

Windows Voice Access does not number browser tabs

Categories

(Core :: Disability Access APIs, defect)

Unspecified
Windows
defect

Tracking

()

RESOLVED FIXED
142 Branch
Tracking Status
firefox138 --- wontfix
firefox142 --- fixed

People

(Reporter: nlapre, Assigned: Jamie)

References

(Blocks 1 open bug)

Details

(Whiteboard: [uiaFastFollow])

Attachments

(2 files)

STR:

  1. Launch Windows Voice Access
  2. Launch Firefox and open some tabs. 10 is an effective number for demonstration.
  3. With Firefox in the foreground, say "show numbers" to request that Voice Access label on-screen controls

Expected: Voice Access puts number labels over the tabs, clickable by saying "click x" where x is the number. This works in Edge.
Actual: Voice Access does not put number labels over the tabs.

Voice Access does label content and many pieces of the chrome, but not the tabs themselves. This is broken both in the IA2 -> UIA bridge and native UIA implementation. Without this functionality, users have to use the grid or some other less-convenient mechanism to click tabs.

One other note: Windows Speech Recognition does not have this problem (it properly labels the tabs with numbers).

Blocks: uia

Still reproducible. Testing shows that a focusable tab gets a number, but a non-focusable tab does not. Unfortunately, tabs other than the active tab aren't focusable in Firefox, which is probably why this breaks.

One way to give inactive tabs the focusable state (without giving them a tabindex, which has other consequences) is to set aria-activedescendant="" on the tablist and role="tab" id="something" on all of the tabs. This will trigger this code. However, forcing an id when we don't really need one is kinda ugly. Also, now that we have ARIA element reflection, I wonder whether the id requirement for this check is even sensible any more.

(In reply to James Teh [:Jamie] from comment #3)

Also, now that we have ARIA element reflection, I wonder whether the id requirement for this check is even sensible any more.

Filed https://github.com/w3c/aria/issues/2556 about this.

Another thing to check is whether the tablist being focusable (which it isn't currently) is enough to make Voice Access happy, even if the individual tabs aren't focusable.

(In reply to James Teh [:Jamie] from comment #5)

Another thing to check is whether the tablist being focusable (which it isn't currently) is enough to make Voice Access happy, even if the individual tabs aren't focusable.

Making the tablist focusable does not help. The individual tabs must be focusable in order for Voice Access to pick them up.

We did discover a bug in our UIA code, though. Even if the tabs are focusable, our ISelectionItemProvider::Select implementation calls Accessible::TakeSelection, even for a tab. That just results in the tab being focused, but not activated. We should be calling DoAction in this case, not TakeSelection.

Exposing the Invoke pattern instead of the SelectionItem pattern doesn't avoid the focusable requirement. That's contrary to the UIA spec anyway, but I thought it was worth a try nevertheless.

Even though tabs have the selectable and selected states, Gecko doesn't support TakeSelection on them; you just click (do action) on them.
However, UIA expects that tabs should support setting selection via the SelectionItem pattern.
Tabs do not support the Invoke pattern, which is what you would use to perform the default action on most things; e.g. buttons.
Fix this by calling DoAction for tabs in our ISelectionItemProvider::Select implementation.

Assignee: nobody → jteh
Status: NEW → ASSIGNED

UL tabs (including those on the browser tab bar) are implemented such that only the selected tab is programmatically focusable.
Unfortunately, Windows Voice Access requires tabs to be focusable in order for them to be discovered by the "show numbers" command.
Rather than trying to change the widget to support programmatically focusing tabs (which is more difficult and risky), just always expose the focusable state for accessibility.
While this seems strange on the surface, it can be argued that unselected tabs can receive focus at some point in the future (when they're selected), even if they can't receive focus now.
There is some precedent for this: aria-activedescendant requires browsers to expose the focusable state on all possible descendants even if they aren't the current active descendant.

Pushed by jteh@mozilla.com: https://github.com/mozilla-firefox/firefox/commit/0ef1fa56fb09 https://hg.mozilla.org/integration/autoland/rev/02d353e0f358 part 1: Make ISelectionItemProvider::Select use DoAction for tabs. r=morgan https://github.com/mozilla-firefox/firefox/commit/460da25768f2 https://hg.mozilla.org/integration/autoland/rev/22dd0baab072 part 2: Always expose the focusable state on XUL tabs (unless they are disabled). r=morgan
Status: ASSIGNED → RESOLVED
Closed: 6 months ago
Resolution: --- → FIXED
Target Milestone: --- → 142 Branch
QA Whiteboard: [qa-triage-done-c143/b142][qa-ver-opt-c143/b142]
Whiteboard: [uiaFastFollow]--do_not_change--
Whiteboard: [uiaFastFollow]--do_not_change-- → [uiaFastFollow]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: