Closed Bug 1407471 Opened 7 years ago Closed 6 years ago

A11y consumer shows only UIAUTOMATION when NVDA is running

Categories

(Core :: Disability Access APIs, defect, P2)

All
Windows
defect

Tracking

()

RESOLVED WORKSFORME
Tracking Status
firefox57 --- fix-optional
firefox58 --- affected

People

(Reporter: Jamie, Unassigned)

Details

STR:
1. Start NVDA.
2. Start Firefox.
3. Visit about:support
4. Check the value of Accessibility Instantiator.
Expected: "NVDA|.."...
Actual: "UIAUTOMATION|"

The code which gathers this info only runs when a11y is first instantiated. I guess what happens here is that UIA gets injected first and responds to an event, since NVDA asks UIA Core to listen for all events. However, NVDA's in-proc dlls only get injected later, and because UIA instantiated a11y in-proc, we don't get the out-proc indication either (because LazyInstantiator isn't used any more after a11y is instantiated).

Jim noted that we do see nvda.exe in telemetry sometimes. It's possible this is timing related; maybe, on some systems, UIA gets there second. It's also possible this is different in different Windows versions. There hvae been significant changes to UIA Core throughout Windows versions (7 and up). I tested this on Windows 10; I don't have a 7 machine here to test with yet.

It's quite possible this might happen for other clients too.

I think we need to special case UIA somehow so that we try the consumer test again later in that case. How we do this will need some brainstorming. Some initial thoughts:
1. We could run the consumer test again for every WM_GETOBJECT. However, that probably has undesirable perf implications.
2. Perhaps we could run it for a set number of WM_GETOBJECTs or for all WM_GETOBJECTs within a given time period.
3. We could schedule it to run once more after a short delay, rather than tying it to WM_GETOBJECT.
4. None of these handles purely out-proc clients because LazyInstantiator (which is responsible for detecting those) only gets used *before* a11y is instantiated. I guess we'd have to make instantiator get used a bit longer, similar to 2) and 3).
UIA instantiator detection (bug 1419886) means that even if UIA does get injected before NVDA, we'll still get the out-of-process executable name of nvda.exe:
UIAUTOMATION|C:\Program Files (x86)\NVDA\nvda.exe
That said, on my system, I now always get the in-process detection anyway:
NVDA,UIAUTOMATION|C:\Program Files (x86)\NVDA\nvda.exe
Either way, we're done here.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.