Bug 395077. Allow QueryService from any accessible to IAccessibleApplication. r=surkov, a=dsicore

This commit is contained in:
aaronleventhal@moonset.net 2007-09-05 21:22:12 -07:00
Родитель 38e4a52b47
Коммит 1ffa4e6e49
4 изменённых файлов: 36 добавлений и 27 удалений

Просмотреть файл

@ -55,6 +55,8 @@
#include "nsPIDOMWindow.h"
#include "nsRootAccessible.h"
#include "nsIServiceManager.h"
#include "AccessibleApplication.h"
#include "nsApplicationAccessibleWrap.h"
/// the accessible library and cached methods
HINSTANCE nsAccessNodeWrap::gmAccLib = nsnull;
@ -126,6 +128,34 @@ STDMETHODIMP nsAccessNodeWrap::QueryInterface(REFIID iid, void** ppv)
return S_OK;
}
STDMETHODIMP
nsAccessNodeWrap::QueryService(REFGUID guidService, REFIID iid, void** ppv)
{
// Can get to IAccessibleApplication from any node via QS
if (iid == IID_IAccessibleApplication) {
nsRefPtr<nsApplicationAccessibleWrap> app =
GetApplicationAccessible();
nsresult rv = app->QueryNativeInterface(iid, ppv);
return NS_SUCCEEDED(rv) ? S_OK : E_NOINTERFACE;
}
/**
* To get an ISimpleDOMNode, ISimpleDOMDocument, ISimpleDOMText
* or any IAccessible2 interface on should use IServiceProvider like this:
* -----------------------------------------------------------------------
* ISimpleDOMDocument *pAccDoc = NULL;
* IServiceProvider *pServProv = NULL;
* pAcc->QueryInterface(IID_IServiceProvider, (void**)&pServProv);
* if (pServProv) {
* const GUID unused;
* pServProv->QueryService(unused, IID_ISimpleDOMDocument, (void**)&pAccDoc);
* pServProv->Release();
* }
*/
return QueryInterface(iid, ppv);
}
//-----------------------------------------------------
// ISimpleDOMNode methods
//-----------------------------------------------------

Просмотреть файл

@ -61,12 +61,16 @@ typedef LRESULT (STDAPICALLTYPE *LPFNGETGUITHREADINFO)(DWORD idThread, GUITHREAD
class nsAccessNodeWrap : public nsAccessNode,
public nsIWinAccessNode,
public ISimpleDOMNode
public ISimpleDOMNode,
public IServiceProvider
{
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIWINACCESSNODE
public: // IServiceProvider
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void** ppv);
public: // construction, destruction
nsAccessNodeWrap(nsIDOMNode *, nsIWeakReference* aShell);
virtual ~nsAccessNodeWrap();

Просмотреть файл

@ -1005,27 +1005,6 @@ STDMETHODIMP nsAccessibleWrap::put_accValue(
#include "mshtml.h"
STDMETHODIMP
nsAccessibleWrap::QueryService(REFGUID guidService, REFIID iid, void** ppv)
{
/**
* To get an ISimpleDOMNode, ISimpleDOMDocument or ISimpleDOMText
* from an IAccessible you have to use IServiceProvider like this:
* --------------------------------------------------------------
* ISimpleDOMDocument *pAccDoc = NULL;
* IServiceProvider *pServProv = NULL;
* pAcc->QueryInterface(IID_IServiceProvider, (void**)&pServProv);
* if (pServProv) {
* const GUID unused;
* pServProv->QueryService(unused, IID_ISimpleDOMDocument, (void**)&pAccDoc);
* pServProv->Release();
* }
*/
return QueryInterface(iid, ppv);
}
STDMETHODIMP
nsAccessibleWrap::Next(ULONG aNumElementsRequested, VARIANT FAR* pvar, ULONG FAR* aNumElementsFetched)
{

Просмотреть файл

@ -94,8 +94,7 @@ class nsAccessibleWrap : public nsAccessible,
public CAccessibleHyperlink,
public CAccessibleValue,
public IAccessible2,
public IEnumVARIANT,
public IServiceProvider
public IEnumVARIANT
{
public: // construction, destruction
nsAccessibleWrap(nsIDOMNode*, nsIWeakReference *aShell);
@ -107,9 +106,6 @@ class nsAccessibleWrap : public nsAccessible,
public: // IUnknown methods - see iunknown.h for documentation
STDMETHODIMP QueryInterface(REFIID, void**);
public: // IServiceProvider
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void** ppv);
// Return the registered OLE class ID of this object's CfDataObj.
CLSID GetClassID() const;