Jacek Caban : ieframe: Added support for SID_SHTMLWindow in WebBrowser:: QueryService.

Alexandre Julliard julliard at winehq.org
Mon Jan 9 14:24:31 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jan  9 17:55:52 2012 +0100

ieframe: Added support for SID_SHTMLWindow in WebBrowser::QueryService.

---

 dlls/ieframe/tests/webbrowser.c |   16 ++++++++++------
 dlls/ieframe/webbrowser.c       |    9 ++++++---
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c
index 8c12d39..516e0b8 100644
--- a/dlls/ieframe/tests/webbrowser.c
+++ b/dlls/ieframe/tests/webbrowser.c
@@ -2697,21 +2697,25 @@ static void test_olecmd(IUnknown *unk, BOOL loaded)
 static void test_IServiceProvider(IUnknown *unk)
 {
     IServiceProvider *servprov = (void*)0xdeadbeef;
+    IUnknown *iface;
     HRESULT hres;
-    IUnknown *ret = NULL;
 
     hres = IUnknown_QueryInterface(unk, &IID_IServiceProvider, (void**)&servprov);
     ok(hres == S_OK, "QueryInterface returned %08x, expected S_OK\n", hres);
     if(FAILED(hres))
         return;
 
-    hres = IServiceProvider_QueryService(servprov, &SID_STopLevelBrowser, &IID_IBrowserService2, (LPVOID*)&ret);
+    hres = IServiceProvider_QueryService(servprov, &SID_STopLevelBrowser, &IID_IBrowserService2, (LPVOID*)&iface);
     ok(hres == E_FAIL, "QueryService returned %08x, expected E_FAIL\n", hres);
-    ok(ret == NULL, "ret returned %p, expected NULL\n", ret);
+    ok(!iface, "QueryService returned %p, expected NULL\n", iface);
     if(hres == S_OK)
-    {
-        IUnknown_Release(ret);
-    }
+        IUnknown_Release(iface);
+
+    hres = IServiceProvider_QueryService(servprov, &SID_SHTMLWindow, &IID_IHTMLWindow2, (LPVOID*)&iface);
+    ok(hres == S_OK, "QueryService returned %08x, expected S_OK\n", hres);
+    ok(iface != NULL, "QueryService returned NULL\n");
+    if(hres == S_OK)
+        IUnknown_Release(iface);
 
     IServiceProvider_Release(servprov);
 }
diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c
index 706600d..ff026db 100644
--- a/dlls/ieframe/webbrowser.c
+++ b/dlls/ieframe/webbrowser.c
@@ -1143,16 +1143,19 @@ static HRESULT STDMETHODCALLTYPE WBServiceProvider_QueryService(IServiceProvider
 {
     WebBrowser *This = impl_from_IServiceProvider(iface);
 
-    if(*ppv)
-        ppv = NULL;
+    if(IsEqualGUID(&SID_SHTMLWindow, riid)) {
+        TRACE("(%p)->(SID_SHTMLWindow)\n", This);
+        return IHTMLWindow2_QueryInterface(&This->doc_host.html_window.IHTMLWindow2_iface, riid, ppv);
+    }
 
     if(IsEqualGUID(&IID_IBrowserService2, riid)) {
         TRACE("(%p)->(IID_IBrowserService2 return E_FAIL)\n", This);
+        *ppv = NULL;
         return E_FAIL;
     }
 
     FIXME("(%p)->(%s, %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
-
+    *ppv = NULL;
     return E_NOINTERFACE;
 }
 




More information about the wine-cvs mailing list