Closed Bug 1427304 Opened 8 years ago Closed 5 years ago

FF ESR freezes clicking on the microphone with the JAWS screen reader on

Categories

(Core :: Disability Access APIs, defect)

52 Branch
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla78
Tracking Status
firefox78 --- fixed

People

(Reporter: vijay.kadri, Assigned: Jamie)

References

(Blocks 1 open bug)

Details

Attachments

(2 files)

User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36 Steps to reproduce: 1. Bring up JAWS JAWS 18, 17 or 16 2. Go to this ur : https://www.webrtc-experiment.com/RecordRTC/ 3. Chose "Microphone" then clicked "Start recording". When the microphone icon appears, click on it. Actual results: Firefox browser froze. Expected results: It should have let the user access the microphone icon
Summary: FF/FF ESR freezes clicking on the microphone with the JAWS screen reader on → FF ESR freezes clicking on the microphone with the JAWS screen reader on
Component: Untriaged → WebRTC: Audio/Video
Product: Firefox → Core
Hi, sorry for the post-holiday delay. Could you confirm if this is still a problem in Firefox 59 (Nightly?)
Flags: needinfo?(vijay.kadri)
Hello, Yes, I can still reproduce it on FirefoxNightly 59.0a1 (2018-01-15) (64-bit)
Flags: needinfo?(vijay.kadri)
Looks like Windows 7. Bryce, can I trouble you to see if you can repro on your windows box?
Flags: needinfo?(bvandyk)
I used the most recent version of JAWS I could find from here: https://www.freedomscientific.com/Downloads/JAWS I see very high CPU usage in Firefox (and several other programs). When trying to repro this, I see Firefox lock before I could even get to the prompt on the page mentioned. Profile run below: https://perfht.ml/2DfrT3u Took quite some time for the UI to become responsive again to end the run. Looks like the main thread is being saturated by accessibility related calls. Watching the attached .swf it looks like the hang takes place after opening the mic, and on different test page. I wonder if it's the a11y calls there also rather than WebRTC. Vijay, do you ever see issues like this when using JAWS but not interacting with microphone input?
Flags: needinfo?(bvandyk) → needinfo?(vijay.kadri)
Hello Bryce, I haven't come across such issues using just JAWS.
Flags: needinfo?(vijay.kadri)
I'm going to move this to the accessibility component: based on the above profile I think the issue lies there.
Component: WebRTC: Audio/Video → Disability Access APIs
JAWS and E10S Firefox are currently incompatible, so the profile probably shows us what we already know from other bugs. But am going to NI Davidb to confirm, since I can't use the profiler (too visual).
Flags: needinfo?(dbolter)
Yeah sort of expected. The STR is interesting and Jamie might be interested.
Flags: needinfo?(dbolter) → needinfo?(jteh)
(In reply to Vijay from comment #0) > When the microphone > icon appears, click on it. I'm totally blind, so I can't see your video. When you say "microphone icon", do you mean the sharing indicator that has a tool tip saying "Your microphone is being shared. Click here to control sharing."? Technical: Repeatedly calling accParent on the "alert" accessible for the sharing indicator (id: webrtcIndicator) will send the client into an infinite loop. The parent of the alert is a window accessible and the parent of that window accessible is the alert... and thus it continues forever. That is very likely to cause a client to freeze, and if it's an in-process client like JAWS, it'll probably take down the whole browser.
Flags: needinfo?(jteh)
The HWND for the alert accessible is itself a child of another HWND. Unfortunately, both HWNDs answer with the alert accessible when you request OBJID_CLIENT. There are two possible solutions: 1. The alert accessible and its descendants should use the outer HWND for all events and for the IA2 windowHandle property. (Currently, they use the inner HWND.) 2. accParent on the alert accessible should return the window accessible for the outer HWND, not the inner HWND. What is special about this XUL <window> that causes it to get wrapped in an outer HWND? David, who can we ask about this?
Flags: needinfo?(dbolter)
Not sure, Neil do you know?
Flags: needinfo?(dbolter) → needinfo?(enndeakin)
It looks like the microphone box is a regular window but opened with popup=yes as one of window.open flags. This is an outdated flag that we've never really supported. It makes a window behave like a popup (for example, it becomes a WS_POPUP style on Windows), but it doesn't work that well since everywhere else assumes that this will be a <panel> and not a <window>. The window is also opened with dialog=yes. I'm not sure why there are two HWNDs here. Is one of them for the parent window?
Flags: needinfo?(enndeakin)
(In reply to Neil Deakin from comment #12) > I'm not sure why there are two HWNDs here. Is one of them for the parent > window? Accessibility seems to think both HWNDs are associated with the webrtcIndicator window. Does this even have a parent window?

Hi, any update on this?

I spent a while looking into this again. It seems that when a window is opened with popup=yes, it gets two HWNDs. The outer one has WS_POPUP, the inner one does not. The root widget is associated with the inner HWND. If I remove popup=yes (obviously not practical), there is only one HWND.

I'm going around in circles trying to figure out how to detect this. Is there some easy way I can detect this popup=yes case via the root widget or similar?

Implementation note: I think the best solution here is to have accParent bypass the inner window accessible.

Neil, any thoughts on comment 15?

Flags: needinfo?(enndeakin)

The root widget for these popup windows returns null for GetParent(), but they have a "native" parent. I don't really understand why, but I think the parent widget gets passed as a native parent for some reason in nsBaseWidget::CreateChild:
https://searchfox.org/mozilla-central/rev/9aa7bebfd169bc2ead00ef596498a406e56bbb85/widget/nsBaseWidget.cpp#420
As to why we create a child, I think this is because we don't attach the nsDocumentViewer to the top level widget for popup windows (eWindowType_popup):
https://searchfox.org/mozilla-central/rev/9aa7bebfd169bc2ead00ef596498a406e56bbb85/layout/base/nsDocumentViewer.cpp#3648

Assignee: nobody → jteh
Blocks: 1639993
Flags: needinfo?(enndeakin)
Pushed by jteh@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/f65636dc2b12 Return the oleacc window accessible for the outer HWND of windows created with popup=yes. r=yzen
Status: UNCONFIRMED → RESOLVED
Closed: 5 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla78
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: