The details are in this Linux Foundation bug report: http://bugs.linux-foundation.org/show_bug.cgi?id=125, and in these two posts on the IA2 mailing list:
Basically, we need to perform these steps to make NVDA support Firefox from a USB stick (thumb drive):
1. Build the proxy DLL from our copy of the IA2 IDLs, meaning create another build step.
2. Make sure that DLL gets copied to the Firefox 3 directory upon installation.
3. Loading the DLL and registering the classes at startup, and cleaning up at shutdown. For this, since it is in-process, no administrative privileges are required.
Note that this is not specific to NVDA portability. It is necessary to allow any assistive technology running from a USB stick to utilise Firefox's IAccessible2 support. Currently, NVDA and Accessibility Probe would be the only beneficiaries of this, but there may be other products in future. It will also allow IAccessible2 support to work for portable versions of Firefox.
Would be nice to get exact steps to check the future patch work
about item 3) we will load dll but AT may be never ran, is it ok?
(In reply to comment #2)
> Would be nice to get exact steps to check the future patch work
NVDA snapshots (http://www.nvda-project.org/snapshots/) already do their part of the registration. So, once we have a gecko app that does the registration on its side, the steps would be:
1. Grab the latest snapshot of NVDA, must be the portable zip version, not the installer.
2. Make sure that you do not have an ia2 proxy dll currently registered on your system. You may need to regsvr32 /u <ia2proxydllPath> to unregister the last one you registered. Failing that, search your registry for IA2 and delete all registry keys to do with it.
To test you do not have the proxy registered, use a Gecko app that does not have the registration fix, and NVDA should not be able to announce anything in Gecko edit fields as you move the caret around with the keyboard.
3. Running NVDA, start the Gecko app with the registration fix.
4. Focus on a Gecko edit field and try interacting with it, type some text, arrow around it. If the registration worked, NVDA will be able to announce the characters you're moving around.
I am certainly happy to take a look at any try server builds. I am also happy to answer any other questions in regards to the steps I outlined in the Accessibility-IA2 email linked to in this bug's description. Note that there is a full chunk of c++ code in that email which shows how it works.
This info regarding how to build an IA2 proxy DLL may be helpful: http://bugs.freestandards.org/show_bug.cgi?id=110
It seems we create proxy DLL but do not put it into the package (see http://lxr.mozilla.org/mozilla/source/accessible/public/ia2). It seems we should register it as well (http://lxr.mozilla.org/mozilla/source/accessible/public/ia2/Makefile.in#132). Though I'm not sure if it is registered when I build firefox itself. This DLL isn't included into the browser package yet (see bug 420508, we could reopen and land that patch). Possibly we should include into another packages (like thunerbird's one) if it's different things.
There is unclear for me issue with DLL loading (https://lists.linux-foundation.org/pipermail/accessibility-ia2/2008-March/000452.html)
(In reply to comment #5)
It seems we
> should register it as well
> Though I'm not sure if it is registered when I build firefox itself. This DLL
> isn't included into the browser package yet (see bug 420508, we could reopen
> and land that patch). Possibly we should include into another packages (like
> thunerbird's one) if it's different things.
see also how we register AccessibleMarshal.dll for MSAA and ISimpleDOM interfaces:
(In reply to comment #5)
> There is unclear for me issue with DLL loading
OK, I think we can put that code to InitXPAccessibility/ShutdownXPAccessibility of nsAccessNode. That code will be executed once when accessibility is enabled by AT.
Created attachment 320868 [details] [diff] [review]
load ia2 wip
Created attachment 320872 [details] [diff] [review]
load ia2 dll
Mick, could you try the patch? If I get right then we put proxy dll into objdir/dist/bin directory but we don't register it. But if you build firefox with this patch and register that dll manually then it should work as you expected. So if that's the thing you wanted then I'll put another patch to register proxy dll by installer.
(In reply to comment #9)
> Mick, could you try the patch?
Neither Mick or I have a Mozilla build environment set up at this time. Any chance of a try build?
> If I get right then we put proxy dll into
> objdir/dist/bin directory but we don't register it.
I don't follow. Currently, ia2.dll isn't included with Firefox distributions at all.
> But if you build firefox
> with this patch and register that dll manually then it should work as you
The point of this patch is to register the dll with COM dynamically, on-demand, rather than needing to register it at install time. That is, this patch should eliminate the requirement to register it at install time.
> So if that's the thing you wanted then I'll put another patch to
> register proxy dll by installer.
The installer just needs to copy the dll into the correct location. It does not need to register it. Note, however, that the AT either needs to register it dynamically as is done here (NVDA already does this) or it needs to register ia2.dll at install time.
It was decided in the 2008/07/08 IAccessible2 meeting that the proxy dll is the responsibility of the AT, even in the case of a portable AT such as NVDA which cannot register the dll in the registry. A portable AT should inject code into the application process to register the proxy dll for that process if required. NVDA now does this. The minutes for the meeting in question are here:
A more detailed mailing list post (made just before the final decision) is here:
This bug should be closed as wontfix. (I don't have permission to do it myself.)
See comment #11 for reason. Thanks!