Nikolay Sivov : msxml3: Add stub connection container support.

Alexandre Julliard julliard at winehq.org
Mon Oct 25 10:58:23 CDT 2010


Module: wine
Branch: master
Commit: 0f2c996092897ad4368741b1932347ccf889d3ff
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0f2c996092897ad4368741b1932347ccf889d3ff

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat Oct 23 15:55:42 2010 +0400

msxml3: Add stub connection container support.

---

 dlls/msxml3/domdoc.c       |   66 ++++++++++++++++++++++++++++++++++++++++---
 dlls/msxml3/tests/domdoc.c |   17 +++++++++++
 2 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index a7ea78d..be56ecd 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -82,11 +82,12 @@ typedef struct _domdoc_properties {
 typedef struct _domdoc
 {
     xmlnode node;
-    const struct IXMLDOMDocument3Vtbl *lpVtbl;
-    const struct IPersistStreamInitVtbl   *lpvtblIPersistStreamInit;
-    const struct IObjectWithSiteVtbl  *lpvtblIObjectWithSite;
-    const struct IObjectSafetyVtbl    *lpvtblIObjectSafety;
-    const struct ISupportErrorInfoVtbl *lpvtblISupportErrorInfo;
+    const struct IXMLDOMDocument3Vtbl          *lpVtbl;
+    const struct IPersistStreamInitVtbl        *lpvtblIPersistStreamInit;
+    const struct IObjectWithSiteVtbl           *lpvtblIObjectWithSite;
+    const struct IObjectSafetyVtbl             *lpvtblIObjectSafety;
+    const struct ISupportErrorInfoVtbl         *lpvtblISupportErrorInfo;
+    const struct IConnectionPointContainerVtbl *lpVtblConnectionPointContainer;
     LONG ref;
     VARIANT_BOOL async;
     VARIANT_BOOL validating;
@@ -540,6 +541,11 @@ static inline domdoc *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
     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.
  */
@@ -768,6 +774,10 @@ static HRESULT WINAPI domdoc_QueryInterface( IXMLDOMDocument3 *iface, REFIID rii
     {
         return *ppvObject ? S_OK : E_NOINTERFACE;
     }
+    else if (IsEqualGUID( riid, &IID_IConnectionPointContainer ))
+    {
+        *ppvObject = &This->lpVtblConnectionPointContainer;
+    }
     else if(IsEqualGUID(&IID_IRunnableObject, riid))
     {
         TRACE("IID_IRunnableObject not supported returning NULL\n");
@@ -2758,6 +2768,51 @@ static const struct IXMLDOMDocument3Vtbl domdoc_vtbl =
     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 */
 static HRESULT WINAPI
 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->lpvtblIObjectSafety = &domdocObjectSafetyVtbl;
     doc->lpvtblISupportErrorInfo = &support_error_vtbl;
+    doc->lpVtblConnectionPointContainer = &ConnectionPointContainerVtbl;
     doc->ref = 1;
     doc->async = VARIANT_TRUE;
     doc->validating = 0;
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index d7d94e6..b7db1bf 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -7097,6 +7097,22 @@ static void test_selectSingleNode(void)
     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)
 {
     IXMLDOMDocument *doc;
@@ -7157,6 +7173,7 @@ START_TEST(domdoc)
     test_get_prefix();
     test_default_properties();
     test_selectSingleNode();
+    test_events();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list