Closed Bug 300642 Opened 19 years ago Closed 19 years ago

Fastback regression: screen readers can't load pages

Categories

(Core :: Disability Access APIs, defect)

x86
Windows XP
defect
Not set
critical

Tracking

()

RESOLVED FIXED

People

(Reporter: aaronlev, Assigned: aaronlev)

References

Details

(Keywords: access, regression)

Attachments

(1 file, 1 obsolete file)

Load Window-Eyes or another screen reader with Firefox.

Navigate to a new page.

The screen reader does not see the text for the new page.

This regressed in the June 29 build, and was caused by the enablement of
fastback (bug 298293).
Flags: blocking1.8b4?
Summary: Regression: screen readers can't load new pages → Fastback regression: screen readers can't load pages
Attachment #189196 - Flags: superreview?(bryner)
Attachment #189196 - Flags: review?(timeless)
Interesting clues:
1. The screen reader can see the content for the first page that loads into the
browser
2. If you hit Ctrl+R to reload the current page, the screen reader can then load
the content after the reload finishes.
It seems like the likely culprit is that there may be multiple windows with that
class now.  If screen readers can't deal with that, perhaps we should remove the
window class when hiding the page and restore it when showing the page.
(In reply to comment #3)
> It seems like the likely culprit is that there may be multiple windows with that
> class now.  If screen readers can't deal with that, perhaps we should remove the
> window class when hiding the page and restore it when showing the page.

Or maybe we can just forward WM_GETOBJECT requests to the appropriate window.

Here's the window structure I'm seeing now:
MozillaContentWindowClass
   MozillaWindowClass    (scrollbar window)
       MozillaWindowClass   (client area window) --> has the accessible info
   MozillaWindowClass    (hidden scrollbar window)
       MozillaWindowClass   (hidden client area window)

It used to be that the MozillaContentWindowClass had only 1 child. Is this correct?
Attachment #189196 - Attachment is obsolete: true
Attachment #189196 - Flags: superreview?(bryner)
Attachment #189196 - Flags: review?(timeless)
This fix will allow things to work as they used to. 

* If WM_GETOBJECT is on the MozillaContentWindowClass it will find the active
child window and return the info for that. In the past that was the only child.
Now it requests an accessible from presshell and receives null if the
corresponding presshell is not the current one (it checks by looking for a
docshell on that).
* If WM_GETOBJECT is on the child MozillaWindowClass of that window, it acts as
before and and gets the accessible from the corresponding presshell.

Also I removed the extra caching of root accessible on nsWindow because it would
require a depth first window search to clear it out, and it isn't necessary now
that we cache accessibles in the accessibility module on a per DOM node basis.
Attachment #189358 - Flags: superreview?(bryner)
Attachment #189358 - Flags: superreview+
Attachment #189358 - Flags: review?(bryner)
Attachment #189358 - Flags: review+
Attachment #189358 - Flags: approval1.8b4?
Attachment #189358 - Flags: approval1.8b4? → approval1.8b4+
Checking in layout/base/nsPresShell.cpp;
/cvsroot/mozilla/layout/base/nsPresShell.cpp,v  <--  nsPresShell.cpp
new revision: 3.844; previous revision: 3.843
done
Checking in widget/src/windows/nsWindow.cpp;
/cvsroot/mozilla/widget/src/windows/nsWindow.cpp,v  <--  nsWindow.cpp
new revision: 3.563; previous revision: 3.562
done
Checking in widget/src/windows/nsWindow.h;
/cvsroot/mozilla/widget/src/windows/nsWindow.h,v  <--  nsWindow.h
new revision: 3.204; previous revision: 3.203
done
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
Note that the mContainer member of prescontext really needs to go away, so it'd
be good if we could find some other way to do this... :(
(In reply to comment #8)
> Note that the mContainer member of prescontext really needs to go away, so it'd
> be good if we could find some other way to do this... :(

We probably need something more self-documenting. Who would know that if a
presshell didn't have a docshell that it's in the bfcache but not active?

How about nsIPresShell::IsCachedInactive() or something so people can find it?
Sounds like a good idea to me.  Then the impl can check mContainer on the
prescontext for now and do something else if we nuke mContainer.
Flags: blocking1.8b4?
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: