Jacek Caban : shdocvw: Added support for QueryService(IID_IWebBrowserApp).

Alexandre Julliard julliard at winehq.org
Fri Dec 17 11:30:46 CST 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Dec 17 03:28:34 2010 +0100

shdocvw: Added support for QueryService(IID_IWebBrowserApp).

---

 dlls/shdocvw/client.c           |    5 ++++
 dlls/shdocvw/tests/webbrowser.c |   43 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c
index f1f4a3d..e94a32c 100644
--- a/dlls/shdocvw/client.c
+++ b/dlls/shdocvw/client.c
@@ -617,6 +617,11 @@ static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, RE
         return IDispatch_QueryInterface(This->disp, riid, ppv);
     }
 
+    if(IsEqualGUID(&IID_IWebBrowserApp, guidService)) {
+        TRACE("IWebBrowserApp service\n");
+        return IDispatch_QueryInterface(This->disp, riid, ppv);
+    }
+
     FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
 
     return E_NOINTERFACE;
diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index 6e3d54f..afde2e1 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -39,6 +39,7 @@
 #include "shlguid.h"
 #include "exdispid.h"
 #include "mimeinfo.h"
+#include "hlink.h"
 
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0);
@@ -157,6 +158,21 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
     return lstrcmpA(stra, buf);
 }
 
+static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
+{
+    IUnknown *unk1, *unk2;
+
+    if(iface1 == iface2)
+        return TRUE;
+
+    IUnknown_QueryInterface(iface1, &IID_IUnknown, (void**)&unk1);
+    IUnknown_Release(unk1);
+    IUnknown_QueryInterface(iface2, &IID_IUnknown, (void**)&unk2);
+    IUnknown_Release(unk2);
+
+    return unk1 == unk2;
+}
+
 static const char *debugstr_guid(REFIID riid)
 {
     static char buf[50];
@@ -2807,6 +2823,31 @@ static void test_TranslateAccelerator(IUnknown *unk)
     test_UIActivate(unk, FALSE);
 }
 
+static void test_dochost_qs(IUnknown *unk)
+{
+    IOleClientSite *client_site;
+    IServiceProvider *serv_prov;
+    IUnknown *service;
+    HRESULT hres;
+
+    client_site = get_dochost(unk);
+    hres = IOleClientSite_QueryInterface(client_site, &IID_IServiceProvider, (void**)&serv_prov);
+    IOleClientSite_Release(client_site);
+    ok(hres == S_OK, "Could not get IServiceProvider iface: %08x\n", hres);
+
+    hres = IServiceProvider_QueryService(serv_prov, &IID_IHlinkFrame, &IID_IHlinkFrame, (void**)&service);
+    ok(hres == S_OK, "QueryService failed: %08x\n", hres);
+    ok(iface_cmp(service, unk), "service != unk\n");
+    IUnknown_Release(service);
+
+    hres = IServiceProvider_QueryService(serv_prov, &IID_IWebBrowserApp, &IID_IHlinkFrame, (void**)&service);
+    ok(hres == S_OK, "QueryService failed: %08x\n", hres);
+    ok(iface_cmp(service, unk), "service != unk\n");
+    IUnknown_Release(service);
+
+    IServiceProvider_Release(serv_prov);
+}
+
 static void test_WebBrowser(BOOL do_download)
 {
     IUnknown *unk = NULL;
@@ -2855,6 +2896,8 @@ static void test_WebBrowser(BOOL do_download)
         ok(doc == doc2, "doc != doc2\n");
         IDispatch_Release(doc2);
         IDispatch_Release(doc2);
+
+        test_dochost_qs(unk);
     }
 
     test_ClientSite(unk, NULL, !do_download);




More information about the wine-cvs mailing list