Module: wine Branch: master Commit: fe863e0326ec28e87454b5cc5700f2c8a9860605 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe863e0326ec28e87454b5cc57...
Author: Jacek Caban jacek@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) {