MSHTML: Added stub implementation of IServiceProvider

Jacek Caban jack at itma.pwr.wroc.pl
Sat Jul 2 08:05:55 CDT 2005


Changelog:
    Added stub implementation of IServiceProvider
-------------- next part --------------
Index: dlls/mshtml/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/Makefile.in,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile.in
--- dlls/mshtml/Makefile.in	28 Jun 2005 10:53:42 -0000	1.16
+++ dlls/mshtml/Makefile.in	2 Jul 2005 11:45:53 -0000
@@ -15,6 +15,7 @@ C_SRCS = \
 	olewnd.c \
 	persist.c \
 	protocol.c \
+	service.c \
 	view.c
 
 RC_SRCS = rsrc.rc
Index: dlls/mshtml/mshtml_private.h
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/mshtml_private.h,v
retrieving revision 1.10
diff -u -p -r1.10 mshtml_private.h
--- dlls/mshtml/mshtml_private.h	28 Jun 2005 10:53:42 -0000	1.10
+++ dlls/mshtml/mshtml_private.h	2 Jul 2005 11:45:53 -0000
@@ -27,6 +27,7 @@ typedef struct {
     const IOleInPlaceActiveObjectVtbl     *lpOleInPlaceActiveObjectVtbl;
     const IViewObject2Vtbl                *lpViewObject2Vtbl;
     const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl;
+    const IServiceProviderVtbl            *lpServiceProviderVtbl;
 
     ULONG ref;
 
@@ -51,6 +52,7 @@ typedef struct {
 #define VIEWOBJ2(x)      ((IViewObject2*)                 &(x)->lpViewObject2Vtbl)
 #define INPLACEOBJ(x)    ((IOleInPlaceObject*)            &(x)->lpOleInPlaceObjectWindowlessVtbl)
 #define INPLACEWIN(x)    ((IOleInPlaceObjectWindowless*)  &(x)->lpOleInPlaceObjectWindowlessVtbl)
+#define SERVPROV(x)      ((IServiceProvider*)             &(x)->lpServiceProviderVtbl)
 
 #define DEFINE_THIS(cls,ifc) cls* const This=(cls*)((char*)(iface)-offsetof(cls,lp ## ifc ## Vtbl));
 
@@ -60,6 +62,7 @@ void HTMLDocument_Persist_Init(HTMLDocum
 void HTMLDocument_OleObj_Init(HTMLDocument*);
 void HTMLDocument_View_Init(HTMLDocument*);
 void HTMLDocument_Window_Init(HTMLDocument*);
+void HTMLDocument_Service_Init(HTMLDocument*);
 
 HRESULT ProtocolFactory_Create(REFCLSID,REFIID,void**);
 
Index: dlls/mshtml/htmldoc.c
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/htmldoc.c,v
retrieving revision 1.9
diff -u -p -r1.9 htmldoc.c
--- dlls/mshtml/htmldoc.c	28 Jun 2005 10:53:42 -0000	1.9
+++ dlls/mshtml/htmldoc.c	2 Jul 2005 11:45:53 -0000
@@ -94,6 +94,9 @@ static HRESULT WINAPI HTMLDocument_Query
     }else if(IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
         TRACE("(%p)->(IID_IOleInPlaceObjectWindowless, %p)\n", This, ppvObject);
         *ppvObject = INPLACEWIN(This);
+    }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
+        TRACE("(%p)->(IID_IServiceProvider, %p)\n", This, ppvObject);
+        *ppvObject = SERVPROV(This);
     }
 
     if(*ppvObject) {
@@ -969,6 +972,7 @@ HRESULT HTMLDocument_Create(IUnknown *pU
     HTMLDocument_OleObj_Init(ret);
     HTMLDocument_View_Init(ret);
     HTMLDocument_Window_Init(ret);
+    HTMLDocument_Service_Init(ret);
 
     return hres;
 }
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ dlls/mshtml/service.c	2005-07-02 13:47:44.000000000 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+#include "docobj.h"
+
+#include "mshtml.h"
+
+#include "wine/debug.h"
+
+#include "mshtml_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+
+/**********************************************************
+ * IServiceProvider impementation
+ */
+
+#define SERVPROV_THIS(iface) (HTMLDocument*)((BYTE*)(iface)-offsetof(HTMLDocument,lpServiceProviderVtbl))
+
+static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
+{
+    HTMLDocument *This = SERVPROV_THIS(iface);
+    return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv);
+}
+
+static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
+{
+    HTMLDocument *This = SERVPROV_THIS(iface);
+    return IHTMLDocument2_AddRef(HTMLDOC(This));
+}
+
+static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
+{
+    HTMLDocument *This = SERVPROV_THIS(iface);
+    return IHTMLDocument_Release(HTMLDOC(This));
+}
+
+static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService,
+        REFIID riid, void **ppv)
+{
+    HTMLDocument *This = SERVPROV_THIS(iface);
+    
+    /* NOTE:
+     * IE queries for service {3050f84b-98b5-11cf-bb82-00aa00bdce0b}.
+     * Its interface has the same IID and HTMLDocument also implements this
+     * interface. I conldn't find that interface is it.
+     */
+
+    FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
+    
+    return E_UNEXPECTED;
+}
+
+static const IServiceProviderVtbl ServiceProviderVtbl = {
+    ServiceProvider_QueryInterface,
+    ServiceProvider_AddRef,
+    ServiceProvider_Release,
+    ServiceProvider_QueryService
+};
+
+void HTMLDocument_Service_Init(HTMLDocument *This)
+{
+    This->lpServiceProviderVtbl = &ServiceProviderVtbl;
+}


More information about the wine-patches mailing list