Closed Bug 78390 Opened 23 years ago Closed 22 years ago

Active Accessibility: support not working with Acrobat plugin

Categories

(Core Graveyard :: Plug-ins, defect, P1)

x86
Windows 2000
defect

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.0

People

(Reporter: lmcquarr, Assigned: mozilla)

References

()

Details

(Keywords: access, topembed)

Attachments

(3 files, 3 obsolete files)

From Bugzilla Helper:
User-Agent: Mozilla/4.73 [en] (Windows NT 5.0; U)
BuildID:    

We understand that important feature that is being worked on
in mozilla is the accessibility of the browser for those with
disabilities, especially those who are visually impaired.

One main feature of our latest release of Adobe Acrobat
is accessibility.  A lot of work was done for Acrobat
5 was to make it accessible, including inside the browser.
Frankly, the only game in town at that time in terms
of browser accessibility was Internet Explorer, so that
is where we focused our development efforts.  

Now that the mozilla team is looking at mozilla accessibility,
we would like to work with you to ensure that Acrobat is
accessible in mozilla.  

The contact person in Acrobat
Engineering is Loretta Guarino Reid, lguarino@adobe.com


See http://access.adobe.com for more details on the Acrobat
accessibility efforts.



Reproducible: Always
Steps to Reproduce:
1.Start any screen reading program on Windows 2000, e.g. JAWS. 
2.Install Adobe Acrobat 5 and mozilla.
3.Drop the nppdf32.dll plug-in from the Acrobat install directory
into the mozilla plug-ins directory.
4.Browse to any PDF file on the web, e.g. 
http://access.adobe.com/browser/cookbook.pdf
5.Attempt to read the PDF document using the screen reader.

Then, compare what happens when you use IE to browse to the same
document (you don't have to move a plug-in to IE). 

Actual Results:  The screen reader is unable to read the Acrobat PDF document. 

Expected Results:  The screen reader can read the Acrobat PDF document. 

If you are just starting your efforts to make mozilla accessible,
it is possible that the folks here can give you a leg up.
Keywords: acrobat
=>plugins?
Assignee: asa → av
Status: UNCONFIRMED → NEW
Component: Browser-General → Plug-ins
Ever confirmed: true
Keywords: access
QA Contact: doronr → shrir
I'll take this
Assignee: av → aaronl
Severity: normal → major
Keywords: fcc508
Priority: -- → P1
Target Milestone: --- → mozilla0.9.3
Status: NEW → ASSIGNED
Target Milestone: mozilla0.9.3 → mozilla0.9.4
Status report:

I tried the new Adobe 5.0 plugin with accessibility enabled (don't ask me why
they don't include it with the normal download).

With IE, the MSAA Accessible Explorer reports objects for most of the user
interface elements, but it does not report anything for the actual document
content. How is the screen reader supposed to get at that information?

With Netscape, we must be hogging the MSAA messages and not passing them to the
next application. I'll have to look into how we can fix that.
Summary: Accessibility for the Visually Impaired and Adobe Acrobat → Active Accessibility support not working with Acrobat plugin
What test file did you use when examining the MSAA tree under IE? We still have
problems with IE if the PDF is in a frame within an html page. Otherwise, I can
show you where the PDF content should be in the MSAA tree for Acrobat.
lguarino@adobe.com
I had a pdf file on my hard drive, which I referenced in the URL bar with
c:\aaron\docs\document.pdf

I also had problems accessing the document in the reader itself.

I get "Alert - protection failure"
This document's settings prevent access.

So, let me get this straight - as I sighted person I'm allowed to read this
document, but a blind person is not allowed?
Yes, when the protections are set "the wrong way", the document is inaccessible.
For a document that uses 40-bit encryption, if copying the text and graphics is
prohibited, we can't send the data out through the MSAA interface. For a
document that uses 128-bit encryption, there is a separate bit that controls
whether the data can go out over MSAA. Can you fix the security settings on your
document? 
Ah! I found the document content.

Okay, looks like we have some work to do on our end to make sure your MSAA gets
through.

What screen readers so far work with the MSAA Acrobate generates?
WindowEyes 4.1 and JAWS, although we are still working through some bugs with
JAWS. The public beta of JAWS 3.71 works pretty well.
I tested the status of accessibility support for the Acrobat plugin in Mozilla, 
Build ID 2001080103. I loaded the PDF file at 
  http://www.adobe/com/products/acrobat/pdfx/accessbooklet.pdf

then I ran AccExplorer to look at the resulting tree. I suspect an error is 
occuring when AccExplorer tries to access the plugin window. What I see in 
AccExplorer is:
  > Mozilla {Build ID: 2001080103}, role window, 7 children
    > NAMELESS
    > Mozilla {Build ID: 2001080103}, role client, 2 children
      > unnamed, role window, 7 children
        > unnamed, role pane, 2 children, value 
chrome://navigator/content/navigator.xul
           > text node "Enter search term, keyword, or web address"
           > unnamed, role pane, 1 child, value 
chrome://communicator/content/sidebar/PageNotFound.xul
             > text node "This tab is not available right now"
So "unname, role window, 7 children" only displays 1 child. This usually 
indicates that errors occured in trying to process the second child, causing
the rest of the tree walk to abort.
Target Milestone: mozilla0.9.4 → mozilla0.9.5
-> 0.9.6
-> 0.9.6
Target Milestone: mozilla0.9.5 → mozilla0.9.6
Target Milestone: mozilla0.9.6 → mozilla0.9.7
Summary: Active Accessibility support not working with Acrobat plugin → Active Accessibility: support not working with Acrobat plugin
Target Milestone: mozilla0.9.7 → Future
This is a tough one - if anyone has some ideas please let me know.
Target Milestone: Future → mozilla1.0
Keywords: nsbeta1
Depends on: 124448
plusing. ADT/Emeddinig triage.
Keywords: nsbeta1nsbeta1+
-> John Gaunt
Assignee: aaronl → jgaunt
Status: ASSIGNED → NEW
Some initial thoughts:
  there are a couple ways to tackle this. since we are going to receive the call
from the msaa library to get the information about the acrobat stuff we can 1)
act as a proxy, receiving the call and asking the plugin for the info we need
and passing it back 2) when we get a call for the acrobat  info we may be able
to return a handle to the acrobat's COM interface ( I'm assuming acrobat has a
COM interface much like we have for interfacing with the MSAA library ) and let
the MSAA library ask it directly 3) well, I guess there are just 2 options. :-)

lguarino: how do you interact with IE? I'm looking at our plugin apis (
specifically nsIPluginInstancePeer and nsIPluginInstance ) looking at how I can
get ahold of your object and querying it for information. Do you use one of the
two approaches above or something different I haven't considered?
Status: NEW → ASSIGNED
John,
  With IE, the Acrobat window tree is attached to IE's window tree; I think 
the screen readers are able to use standard MSAA support to descend 
from the IE window into Acrobat's tree, that is, if they query for children on 
the window in IE where we attach Acrobat's window, they can descend 
into our MSAA subtree.
  What took more work with IE was handling moving focus between the
applications. We were able to monitor focus notifications on our window 
in IE, and pass them on to Acrobat explicitly. Similarly, when Acrobat 
wanted to return focus to the browser, we sent a message back to our 
plug-in code and assigned focus to the IE window.
  Let me know if you want to discuss this on the phone.
Loretta
John, Acrobat doesn't support AccessibleObjectFromPoint(). However, it is
possible to see Acrobat's MSAA tree using Accessible Explorer, and searching for
a node with a certain name. Loretta, can you remind us what that name was?

AccessibleObjectFromWindow(), AccessibleObjectFromPoint() and
AccessibleObjectFromEvent() work in two parts: 1) use the WM_GETOBJECT message
to get the root IAccessible from a window, and then 2) use that root IAccessible
to go from there, with a specific method call such as accHitTest(long xLeft,
long yTop, VARIANT __RPC_FAR *pvarChild) or get_accChild(VARIANT varChild,
IDispatch __RPC_FAR *__RPC_FAR *ppdispChild)

In the case of an embedded PDF object (or any other special <object> window>, I
think we should be able to see some "outer" container object that Mozilla houses
the content in. It should know how to walk into that by again using
AccessibleObjectFromWindow() or AccessibleObjectFromPoint() all over again.
To find the content of the PDF file in the Acrobat MSAA tree, find the first
object named AVScrollView. It will contain a child named AVScrollView, which
will contain a number of children. The first child will be NAMELESS, and that is
the start of the PDF content subtree. However, anytime you start seeing object
with names that start with AV, you are within Acrobat's MSAA subtree.

I should look into why AVAccessibleFromPoint isn't working properly; it is
probably due to sloppy implementations of AVHitTest.
Severity: major → blocker
Keywords: topembed
Blocks: 75785
Keywords: topembedtopembed+
Blocks: 135206
Intersting, I just brought up a pdf file in our mfcembed test program and we get
into the pdf content just fine. :-) Althought the navigation seems a bit weird (
lots of AVScrollView windows ) and I couldn't actually navigate into the
document, and I couldn't get an object from point either.

This is good, because I think I have a way to get it working in the main browser
I just have to make sure I don't break the support in the embedded side. The
plan is to use the XUL TabPanel to look for a window or content or something
special when there is no children ( the case when there is a full page plugin ).
This _should_ enable us to get to the IAccessible from the plugin. 

I better check and figure out how we are allowing event through for the embedded
case too. :-) Best to know why it is working.
Loretta, 

I'm looking at the windows present for a pdf file in two cases. When the PDF
file is linked to directly I see a whole bunch of AV windows starting with an
AmberExternalWindow. From the first AVScrollView window I see the first child
being nameless and being a scrollbar. From your comment above I thought the
first nameless child was going to be the document root, but it would seem that
the AVScrollView window is the document root and it's first child is the first
part of the content. Am I understanding this correctly? If I try and get an
accessible from the AVScrollView window ( using AccessibleObjectFromWindow() )
will that get us into your content accessibility tree?

The second case I am looking at is when a pdf file is referenced in an object
tag. In this case the pdf isn't loaded full screen but only given a portion of
the screen. I don't get any functionality of the pdf viewer. Instead I get the
first page of the document. No toolbar, no ability to navigate the document. It
seems to me the pdf viewer is not supposed to be used in this manner. Is this
correct? I do get the AmberExternalWindow in this case, but it has no children.
This is with respect to bug 124448.
I'm going to re-test this functionality with MFCembed. Last time I tested I
remember it working just fine. I think this bug has to do specifically with the
full client. Of course, specific embeddors may run into the same problems we do
with the client, but that will have to be dealt with one-off most likely.
removing topembed+ and nsbeta1+ since this bug deals only with the client,
MFCEmbed is working fine with pdf files, and this bug isn't a candidate for the
next netscape release.
Keywords: nsbeta1+, topembed+
Attached patch working patch (obsolete) — Splinter Review
Walking into and out of the PDF IAccessible works. Yay!
Attachment #84655 - Attachment is obsolete: true
aaronl, peterl can you review this?
The biggest thing I see, is that the tabpanelaccessible is not the right place
for this. it should be at the level of <browser>. In browser.xml, I see that we
call createIFrameAccessible. I believe that <tabbrowser> contains <browser> in
the anon content.

This line is superfluous, and the naming convention is wrong.
nsIWebShell *Shell ;
Not sure why it's there - looks like a mistake, you arleady have nsIWebShell
*webShell on the next line.

+{
+  nsAccessible::GetAccLastChild(_retval);
+  if (*_retval == nsnull)
+    GetAccPluginChild(_retval);
+
+  return NS_OK;
+}
perhaps should be 
+{
+  nsresult rv = nsAccessible::GetAccLastChild(_retval);
+  if (*_retval == nsnull)
+    rv = GetAccPluginChild(_retval);
+
+  return rv;
+}
+
for both GetAccFirstChild and GetAccLastChild
uh, nevermind on the reviews. Just realized this doesn't work when you have a
frameset. I've based this in the wrong area in the accessible code. have to move it.
I installed today's build (Build ID: 2002052408) and loaded a local PDF file
using "Open File...". It display fine. Then I ran AccExplorer to see what sort
of accessibility tree is exposed. AccExplorer isn't able to see any of the
Acrobat subtree from the Mozilla root. I can get to a MozillaWindowClass window
that covers the plug-in area; it has 2 children. The first is a PropertyPage
with the same coordinates as its parent window. The second looks like most of
its MSAA calls must have failed. 
Loretta, John hasn't checked this in yet. He has a working patch. You would have
to download the source, apply the patch and build in order to test it. He'll be
back from vacation June 9, so he should be able to get it reviewed and checked
in shortly thereafter.
Thanks, Aaron. I'll wait for his return to test this support.
I was looking at the latest MSAA docs on MSDN.
I noticed that there are some interesting functions that might be helpful here:
CreateStdAccessibleProxy and CreateStdAccessibleObject

See
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaaccrf_8otw.asp

John, do you think we should be using this? It looks right on.
Attachment #84830 - Attachment is obsolete: true
Comment on attachment 89423 [details] [diff] [review]
latest patch, checking the linux/gmake on win builds

r=aaronl

It looks like you need to go back and check the spacing/tabbing of the lines
you added to the various makefiles you're touching, to make it consistent with
the rest of the file.
Attachment #89423 - Flags: review+
Comment on attachment 89567 [details] [diff] [review]
Last patch with fixed makefile foo for Linux and gmake win

carrying forward aaron's r=

ready for sr=

( sanity building on mac just to be sure )
Attachment #89567 - Flags: review+
r=peterl
I'll just roll this in without posting a new patch unless sr requires
Comment on attachment 89567 [details] [diff] [review]
Last patch with fixed makefile foo for Linux and gmake win

- In nsXULTabPanelsAccessible::GetAccPluginChild():

...
+  if (domDoc) {
+    nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc));

The above |if (domDoc)| check is not needed, do_QueryInterface() is null safe.

...
+	 if (docShell) {
+	   nsCOMPtr<nsIWebShell> webShell(do_QueryInterface(docShell));

The above |if (docShell)| is not needed, same reason.

...
+	     if (container) {
+	       nsCOMPtr<nsIWebShellWindow> wsWin(do_QueryInterface(container));

Same here, no need for the |if (container)|

...
+		 if (contentShell){
+		   nsCOMPtr<nsIDocShell>
contentDocShell(do_QueryInterface(contentShell));

No need for the |if (contentShell)|...

...
+		     if (contentViewer) {
+		       nsCOMPtr<nsIPluginViewer> pluginViewer
(do_QueryInterface(contentViewer));

Same here, no need for |if (contentViewer)|...

- In mozilla/modules/plugin/base/src/Makefile.in

		nsIPluginInstanceOwner.h \
+    nsPluginViewer.h \
		$(NULL)

Use tabs in Makefile.in's, they're significant.

sr=jst if you fix the above.
Attachment #89567 - Flags: superreview+
tabs can be significant in makefiles, but they are not in this case because of 
the \ line continuation character.
opted to leave the spaces in the makefiles alone since it matches the rest of
the file.
checked in to trunk
Status: ASSIGNED → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Liz, could you please verify this one for me, Thanks !!
QA Contact: shrir → lmcquarr
This looks good; using AccExplorer, I can see the Acrobat subtree within the
Mozilla IAccessible tree, including the contents of the document. Is there a
(Mozilla + Acrobat aware) screen reader that I could test with, to see whether
the screen reader can read the content in the browser?
Loretta, we're still working on getting a Gecko-aware screen reader, period :\
Once we do, we're definitely work with you on PDF support.
batch: adding topembed per Gecko2 document
http://rocknroll.mcom.com/users/marek/publish/Gecko/Gecko2Tasks.html
Keywords: topembed
Blocks: grouper
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: