msxml3: Add stub connection container support.

This commit is contained in:
Nikolay Sivov 2010-10-23 15:55:42 +04:00 committed by Alexandre Julliard
parent 20043c0a46
commit 0f2c996092
2 changed files with 78 additions and 5 deletions

View File

@ -82,11 +82,12 @@ typedef struct _domdoc_properties {
typedef struct _domdoc typedef struct _domdoc
{ {
xmlnode node; xmlnode node;
const struct IXMLDOMDocument3Vtbl *lpVtbl; const struct IXMLDOMDocument3Vtbl *lpVtbl;
const struct IPersistStreamInitVtbl *lpvtblIPersistStreamInit; const struct IPersistStreamInitVtbl *lpvtblIPersistStreamInit;
const struct IObjectWithSiteVtbl *lpvtblIObjectWithSite; const struct IObjectWithSiteVtbl *lpvtblIObjectWithSite;
const struct IObjectSafetyVtbl *lpvtblIObjectSafety; const struct IObjectSafetyVtbl *lpvtblIObjectSafety;
const struct ISupportErrorInfoVtbl *lpvtblISupportErrorInfo; const struct ISupportErrorInfoVtbl *lpvtblISupportErrorInfo;
const struct IConnectionPointContainerVtbl *lpVtblConnectionPointContainer;
LONG ref; LONG ref;
VARIANT_BOOL async; VARIANT_BOOL async;
VARIANT_BOOL validating; VARIANT_BOOL validating;
@ -540,6 +541,11 @@ static inline domdoc *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
return (domdoc *)((char*)iface - FIELD_OFFSET(domdoc, lpvtblISupportErrorInfo)); return (domdoc *)((char*)iface - FIELD_OFFSET(domdoc, lpvtblISupportErrorInfo));
} }
static inline domdoc *impl_from_IConnectionPointContainer(IConnectionPointContainer *iface)
{
return (domdoc *)((char*)iface - FIELD_OFFSET(domdoc, lpVtblConnectionPointContainer));
}
/************************************************************************ /************************************************************************
* domdoc implementation of IPersistStream. * domdoc implementation of IPersistStream.
*/ */
@ -768,6 +774,10 @@ static HRESULT WINAPI domdoc_QueryInterface( IXMLDOMDocument3 *iface, REFIID rii
{ {
return *ppvObject ? S_OK : E_NOINTERFACE; return *ppvObject ? S_OK : E_NOINTERFACE;
} }
else if (IsEqualGUID( riid, &IID_IConnectionPointContainer ))
{
*ppvObject = &This->lpVtblConnectionPointContainer;
}
else if(IsEqualGUID(&IID_IRunnableObject, riid)) else if(IsEqualGUID(&IID_IRunnableObject, riid))
{ {
TRACE("IID_IRunnableObject not supported returning NULL\n"); TRACE("IID_IRunnableObject not supported returning NULL\n");
@ -2758,6 +2768,51 @@ static const struct IXMLDOMDocument3Vtbl domdoc_vtbl =
domdoc_importNode domdoc_importNode
}; };
/* IConnectionPointContainer */
static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface,
REFIID riid, void **ppv)
{
domdoc *This = impl_from_IConnectionPointContainer(iface);
return IXMLDOMDocument3_QueryInterface((IXMLDOMDocument3*)This, riid, ppv);
}
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
{
domdoc *This = impl_from_IConnectionPointContainer(iface);
return IXMLDOMDocument3_AddRef((IXMLDOMDocument3*)This);
}
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
{
domdoc *This = impl_from_IConnectionPointContainer(iface);
return IXMLDOMDocument3_Release((IXMLDOMDocument3*)This);
}
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
IEnumConnectionPoints **ppEnum)
{
domdoc *This = impl_from_IConnectionPointContainer(iface);
FIXME("(%p)->(%p): stub\n", This, ppEnum);
return E_NOTIMPL;
}
static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer *iface,
REFIID riid, IConnectionPoint **ppCP)
{
domdoc *This = impl_from_IConnectionPointContainer(iface);
FIXME("(%p)->(%s %p): stub\n", This, debugstr_guid(riid), ppCP);
return E_NOTIMPL;
}
static const struct IConnectionPointContainerVtbl ConnectionPointContainerVtbl =
{
ConnectionPointContainer_QueryInterface,
ConnectionPointContainer_AddRef,
ConnectionPointContainer_Release,
ConnectionPointContainer_EnumConnectionPoints,
ConnectionPointContainer_FindConnectionPoint
};
/* xmldoc implementation of IObjectWithSite */ /* xmldoc implementation of IObjectWithSite */
static HRESULT WINAPI static HRESULT WINAPI
xmldoc_ObjectWithSite_QueryInterface( IObjectWithSite* iface, REFIID riid, void** ppvObject ) xmldoc_ObjectWithSite_QueryInterface( IObjectWithSite* iface, REFIID riid, void** ppvObject )
@ -2914,6 +2969,7 @@ HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **docu
doc->lpvtblIObjectWithSite = &domdocObjectSite; doc->lpvtblIObjectWithSite = &domdocObjectSite;
doc->lpvtblIObjectSafety = &domdocObjectSafetyVtbl; doc->lpvtblIObjectSafety = &domdocObjectSafetyVtbl;
doc->lpvtblISupportErrorInfo = &support_error_vtbl; doc->lpvtblISupportErrorInfo = &support_error_vtbl;
doc->lpVtblConnectionPointContainer = &ConnectionPointContainerVtbl;
doc->ref = 1; doc->ref = 1;
doc->async = VARIANT_TRUE; doc->async = VARIANT_TRUE;
doc->validating = 0; doc->validating = 0;

View File

@ -7097,6 +7097,22 @@ static void test_selectSingleNode(void)
free_bstrs(); free_bstrs();
} }
static void test_events(void)
{
IConnectionPointContainer *conn;
IXMLDOMDocument *doc;
HRESULT hr;
doc = create_document(&IID_IXMLDOMDocument);
if (!doc) return;
hr = IXMLDOMDocument_QueryInterface(doc, &IID_IConnectionPointContainer, (void**)&conn);
ok(hr == S_OK, "got 0x%08x\n", hr);
IConnectionPointContainer_Release(conn);
IXMLDOMDocument_Release(doc);
}
START_TEST(domdoc) START_TEST(domdoc)
{ {
IXMLDOMDocument *doc; IXMLDOMDocument *doc;
@ -7157,6 +7173,7 @@ START_TEST(domdoc)
test_get_prefix(); test_get_prefix();
test_default_properties(); test_default_properties();
test_selectSingleNode(); test_selectSingleNode();
test_events();
CoUninitialize(); CoUninitialize();
} }