Jacek Caban : mshtml: Silence common invalid QueryInterface FIXME.

Alexandre Julliard julliard at winehq.org
Tue Jul 1 08:27:30 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 30 21:38:55 2008 +0200

mshtml: Silence common invalid QueryInterface FIXME.

---

 dlls/mshtml/dispex.c        |    6 ++++++
 dlls/mshtml/htmldoc.c       |    2 ++
 dlls/mshtml/htmlwindow.c    |    2 ++
 dlls/mshtml/tests/htmldoc.c |   14 +++++++++++---
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index a94806d..5d472ee 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -623,12 +623,18 @@ static IDispatchExVtbl DispatchExVtbl = {
 
 BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
 {
+    static const IID IID_UndocumentedScriptIface =
+        {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}};
+
     if(IsEqualGUID(&IID_IDispatch, riid)) {
         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
         *ppv = DISPATCHEX(This);
     }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
         TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
         *ppv = DISPATCHEX(This);
+    }else if(IsEqualGUID(&IID_UndocumentedScriptIface, riid)) {
+        TRACE("(%p)->(IID_UndocumentedScriptIface %p) returning NULL\n", This, ppv);
+        *ppv = NULL;
     }else {
         return FALSE;
     }
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 3a457cb..4a2c696 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -134,6 +134,8 @@ static HRESULT WINAPI HTMLDocument_QueryInterface(IHTMLDocument2 *iface, REFIID
     }else if(IsEqualGUID(&IID_IRunnableObject, riid)) {
         TRACE("(%p)->(IID_IRunnableObject %p) returning NULL\n", This, ppvObject);
         return E_NOINTERFACE;
+    }else if(dispex_query_interface(&This->dispex, riid, ppvObject)) {
+        return *ppvObject ? S_OK : E_NOINTERFACE;
     }
 
     if(*ppvObject) {
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index edd9491..b79067a 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -61,6 +61,8 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii
     }else if(IsEqualGUID(&IID_IHTMLWindow3, riid)) {
         TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
         *ppv = HTMLWINDOW3(This);
+    }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
+        return *ppv ? S_OK : E_NOINTERFACE;
     }
 
     if(*ppv) {
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index d46e11a..27248df 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -3701,20 +3701,28 @@ static void test_QueryInterface(IUnknown *unk)
     IUnknown *qi;
     HRESULT hres;
 
+    static const IID IID_UndocumentedScriptIface =
+        {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}};
+
     qi = (void*)0xdeadbeef;
     hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&qi);
     ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
-    ok(qi == NULL, "runnable=%p, ezpected NULL\n", qi);
+    ok(qi == NULL, "qirunnable=%p, ezpected NULL\n", qi);
 
     qi = (void*)0xdeadbeef;
     hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&qi);
     ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
-    ok(qi == NULL, "runnable=%p, ezpected NULL\n", qi);
+    ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
 
     qi = (void*)0xdeadbeef;
     hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode2, (void**)&qi);
     ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
-    ok(qi == NULL, "runnable=%p, ezpected NULL\n", qi);
+    ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
+
+    qi = (void*)0xdeadbeef;
+    hres = IUnknown_QueryInterface(unk, &IID_UndocumentedScriptIface, (void**)&qi);
+    ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
+    ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
 }
 
 static void init_test(enum load_state_t ls) {




More information about the wine-cvs mailing list