Open Bug 1343525 Opened 3 years ago Updated 3 years ago

QueryService() with IID_ISimpleDOMNode failed on non e10s ( single process mode on Windows7)

Categories

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

51 Branch
x86_64
Windows 7
defect

Tracking

()

UNCONFIRMED

People

(Reporter: robinson, Unassigned)

Details

User Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

Steps to reproduce:

We are trying to find the URL from Mozilla window using VC++ project. For doing this, I used QueryService() API with parameter IID_ISimpleDOMNode". But the API fails on single process ( non e10s) FireFox - Windows 7 machines  (both 32 bit and 64 bit) with Mozilla Version- 51.0.1.

SampleCode
==========
// header files
#include "ISimpleDOMNode.h"
#include "ISimpleDOMText.h"
#include "ISimpleDOMDocument.h"

// GUIDs
const GUID refguid = {0x0c539790, 0x12e4, 0x11cf, 0xb6, 0x61, 0x00, 0xaa, 0x00, 0x4c, 0xd6, 0xd8};
const IID IID_ISimpleDOMNode= {0x1814ceeb,0x49e2,0x407f,0xaf,0x99,0xfa,0x75,0x5a,0x7d,0x26,0x07};
const IID IID_ISimpleDOMText= {0x4e747be5,0x2052,0x4265,0x8a,0xf0,0x8e,0xca,0xd7,0xaa,0xd1,0xc0};
const IID IID_ISimpleDOMDocument= {0x0D68D6D0,0xD93D,0x4d08,0xA3,0x0D,0xF0,0x0D,0xD1,0xF4,0x5B,0x24};

Void FindURLfromWindow(HWND hwnd)
{
	try
	{
		if(hwnd)
		{
			IAccessible *pAccBrowser = NULL;
			HRESULT hr = AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&pAccBrowser);
			if(SUCCEEDED(hr) && (pAccBrowser))
			{
				VARIANT vtStart; 
				VARIANT vtResult;
				vtStart.vt = VT_I4;
				vtStart.lVal = CHILDID_SELF;
				/////////////////////////////
				hr = pAccBrowser->accNavigate(NAVRELATION_EMBEDS,vtStart,&vtResult);
				if(SUCCEEDED(hr))
				{
					IDispatch *pDisp = vtResult.pdispVal;
					IAccessible *pAccDoc = NULL; 
					hr = pDisp->QueryInterface(IID_IAccessible,(void **)&pAccDoc); 
					if(SUCCEEDED(hr) && (pAccDoc))
					{
						hr = pAccDoc->QueryInterface(IID_IServiceProvider, (void **)&pServProv); 
						if(SUCCEEDED(hr) && (pServProv))
						{
							ISimpleDOMNode *pNode = NULL; 
							hr = pServProv->QueryService(refguid, IID_ISimpleDOMNode,(void **)&pNode); //failed in Windows 7
							if(SUCCEEDED(hr) && (pNode))
							{
								ISimpleDOMDocument *pDoc = NULL; 
								hr = pNode->QueryInterface(IID_ISimpleDOMDocument, (void **)&pDoc); 
								if(SUCCEEDED(hr) && (pDoc))
								{
									BSTR bstrUrl = NULL;
									hr = pDoc->get_URL(&bstrUrl); 
									if(SUCCEEDED(hr) && (bstrUrl))
									{
										//success
									}
								}
							}
						}
					}
				}
			}
		}
	}
	catch(...)
	{
	}
}


Actual results:

QueryService() API with parameter IID_ISimpleDOMNode failed.


Expected results:

QueryService() API with parameter IID_ISimpleDOMNode should be success
Severity: normal → critical
Component: Untriaged → Disability Access
OS: Unspecified → Windows 7
Hardware: Unspecified → x86_64
Component: Disability Access → Disability Access APIs
Product: Firefox → Core
As I said in the previous bug report, it fails in FF51 and older versions of Firefox.

Do you have a link to test application to test again?
Loic, Please download the test applications and code from https://www.dropbox.com/s/zwbv0lu4ltutkwu/MozillaTestApp.zip?dl=0 

Steps to reproduce the problem.

1) Install Chrom 51.0.1 on Windows 7. Check whether e10s is enabled. if e10s is enabled, change it to non-e10s mode. Make sure that accessibility has been enabled from about:support.
2) Sometimes it pops up a window saying "Accessibility support is temporarily disabled due to compatibility issues." , Just close the pop up by clicking the close button. 

3) Run Dbgview as administrator (please check the options as mentioned in Screenshot folder dbg-options.jpg)
4) Run the test application. (MozillaTest.exe)

5) Browse any URL.
6) In the DbgView you can see the error message "QueryService(IID_ISimpleDOMNode) failed"

Please let me know if you need any help with this.
Correction on comment #2 above. Step1 . Instead of Chrome, please read it as FireFox 51.0.1.
Loic, have you got a chance to look into this issue?
The testcase doesn't work with FF51 and e10s disabled, even with old versions like FF33.
It seems the described issue is about that ISimpleDOMNode is not implemented on a document accessible. If this is correct, then this was likely regressed in bug 767756, which was 5 years ago. I don't see any reasoning behind, why a document accessible shouldn't implement ISimpleDOMNode interface, so this may be considered as a bug. Also, I was told that this issue may cause JAWS instability.
Just to follow up, this is both a multi and single process issue.
yzen, For the multi-process mode, fix is expected in FF54 (https://bugzilla.mozilla.org/show_bug.cgi?id=1310166 ). Can you let us know when the fix will be available for single process mode?
Do we have an update on this issue ?
Loic, Do we have any update on this?
Please note single process mode is expected to be de-supported in Firefox 57 or 58.

We would like to move monitoring software off of accessibility API. Please email me if you can help us understand requirements.
Priority: -- → P5
You need to log in before you can comment on or make changes to this bug.