SHDOCVW: Make WebBrowser heap based object

Jacek Caban jack at itma.pwr.wroc.pl
Thu Sep 1 09:38:59 CDT 2005


Changelog:
    - Make WebBrowser heap based object
    - Improve stubs
-------------- next part --------------
Index: dlls/shdocvw/factory.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/factory.c,v
retrieving revision 1.12
diff -u -p -r1.12 factory.c
--- dlls/shdocvw/factory.c	6 Jun 2005 19:50:36 -0000	1.12
+++ dlls/shdocvw/factory.c	1 Sep 2005 12:34:04 -0000
@@ -25,7 +25,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
 /**********************************************************************
- * Implement the IWebBrowser class factory
+ * Implement the WebBrowser class factory
  *
  * (Based on implementation in ddraw/main.c)
  */
@@ -36,10 +36,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 static HRESULT WINAPI WBCF_QueryInterface(LPCLASSFACTORY iface,
                                           REFIID riid, LPVOID *ppobj)
 {
-    FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
-    
-    if (ppobj == NULL) return E_POINTER;
-    
+    TRACE("(%s %p)\n", debugstr_guid(riid), ppobj);
+
+    if (!ppobj)
+        return E_POINTER;
+
+    if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) {
+        *ppobj = iface;
+        return S_OK;
+    }
+
+    WARN("Not supported interface %s\n", debugstr_guid(riid));
+
+    *ppobj = NULL;
     return E_NOINTERFACE;
 }
 
@@ -69,25 +78,7 @@ static ULONG WINAPI WBCF_Release(LPCLASS
 static HRESULT WINAPI WBCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
                                           REFIID riid, LPVOID *ppobj)
 {
-    IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-
-    /* Don't support aggregation (yet?) */
-    if (pOuter)
-    {
-        TRACE ("Failed attempt to aggregate IWebBrowser\n");
-        return CLASS_E_NOAGGREGATION;
-    }
-
-    TRACE("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
-    if ((IsEqualGUID (&IID_IOleObject, riid)))
-    {
-        TRACE ("Instantiating IOleObject component\n");
-        *ppobj = (LPVOID)&SHDOCVW_OleObject;
-
-        return S_OK;
-    }
-    return CLASS_E_CLASSNOTAVAILABLE;
+    return WebBrowser_Create(pOuter, riid, ppobj);
 }
 
 /************************************************************************
@@ -98,9 +89,9 @@ static HRESULT WINAPI WBCF_LockServer(LP
     TRACE("(%d)\n", dolock);
 
     if (dolock)
-	    SHDOCVW_LockModule();
+        SHDOCVW_LockModule();
     else
-	    SHDOCVW_UnlockModule();
+        SHDOCVW_UnlockModule();
     
     return S_OK;
 }
Index: dlls/shdocvw/oleobject.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/oleobject.c,v
retrieving revision 1.14
diff -u -p -r1.14 oleobject.c
--- dlls/shdocvw/oleobject.c	12 Jun 2005 10:42:03 -0000	1.14
+++ dlls/shdocvw/oleobject.c	1 Sep 2005 12:34:04 -0000
@@ -1,11 +1,12 @@
 /*
- * Implementation of IOleObject interfaces for IE Web Browser
+ * Implementation of IOleObject interfaces for WebBrowser control
  *
  * - IOleObject
  * - IOleInPlaceObject
  * - IOleControl
  *
  * Copyright 2001 John R. Sheets (for CodeWeavers)
+ * 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
@@ -25,257 +26,99 @@
 #include <string.h>
 #include "wine/debug.h"
 #include "shdocvw.h"
-#include "ole2.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
 /**********************************************************************
- * IOleControl declaration for SHDOCVW.DLL
+ * Implement the IOleObject interface for the WebBrowser control
  */
-typedef struct
-{
-    /* IUnknown fields */
-    const IOleControlVtbl *lpVtbl;
-    DWORD ref;
-} IOleControlImpl;
 
-static IOleControlImpl SHDOCVW_OleControl;
+#define OLEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleObject, iface)
 
-/**********************************************************************
- * IOleInPlaceObject declaration for SHDOCVW.DLL
- */
-typedef struct
+static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
 {
-    /* IUnknown fields */
-    const IOleInPlaceObjectVtbl *lpVtbl;
-    DWORD ref;
-} IOleInPlaceObjectImpl;
-
-static IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject;
-
-/**********************************************************************
- * Implement the IOleObject interface for the web browser component
- *
- * Based on DefaultHandler code in dlls/ole32/defaulthandler.c.
- */
-
-static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface);
-static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface);
-
-/************************************************************************
- * WBOOBJ_QueryInterface (IUnknown)
- *
- * Interfaces we need to (at least pretend to) retrieve:
- *
- *   a6bc3ac0-dbaa-11ce-9de3-00aa004bb851  IID_IProvideClassInfo2
- *   b196b283-bab4-101a-b69c-00aa00341d07  IID_IProvideClassInfo
- *   cf51ed10-62fe-11cf-bf86-00a0c9034836  IID_IQuickActivate
- *   7fd52380-4e07-101b-ae2d-08002b2ec713  IID_IPersistStreamInit
- *   0000010a-0000-0000-c000-000000000046  IID_IPersistStorage
- *   b196b284-bab4-101a-b69c-00aa00341d07  IID_IConnectionPointContainer
- */
-static HRESULT WINAPI WBOOBJ_QueryInterface(LPOLEOBJECT iface,
-                                            REFIID riid, void** ppobj)
-{
-    IOleObjectImpl *This = (IOleObjectImpl *)iface;
-
-    /*
-     * Perform a sanity check on the parameters.
-     */
-    if ((This == NULL) || (ppobj == NULL) )
-        return E_INVALIDARG;
-
-    if (IsEqualGUID (&IID_IPersistStorage, riid))
-    {
-        TRACE("Returning IID_IPersistStorage interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_PersistStorage;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IPersistStreamInit, riid))
-    {
-        TRACE("Returning IID_IPersistStreamInit interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_PersistStreamInit;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IProvideClassInfo, riid))
-    {
-        TRACE("Returning IID_IProvideClassInfo interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_ProvideClassInfo;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IProvideClassInfo2, riid))
-    {
-        TRACE("Returning IID_IProvideClassInfo2 interface %p\n",
-              &SHDOCVW_ProvideClassInfo2);
-        *ppobj = (LPVOID)&SHDOCVW_ProvideClassInfo2;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IQuickActivate, riid))
-    {
-        TRACE("Returning IID_IQuickActivate interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_QuickActivate;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IConnectionPointContainer, riid))
-    {
-        TRACE("Returning IID_IConnectionPointContainer interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_ConnectionPointContainer;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IOleInPlaceObject, riid))
-    {
-        TRACE("Returning IID_IOleInPlaceObject interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_OleInPlaceObject;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IOleControl, riid))
-    {
-        TRACE("Returning IID_IOleControl interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_OleControl;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IWebBrowser, riid))
-    {
-        TRACE("Returning IID_IWebBrowser interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_WebBrowser;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-    else if (IsEqualGUID (&IID_IDispatch, riid))
-    {
-        TRACE("Returning IID_IDispatch interface\n");
-        *ppobj = (LPVOID)&SHDOCVW_WebBrowser;
-        WBOOBJ_AddRef (iface);
-        return S_OK;
-    }
-
-    TRACE ("Failed to find iid = %s\n", debugstr_guid(riid));
-
-    return E_NOINTERFACE;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppv);
 }
 
-/************************************************************************
- * WBOOBJ_AddRef (IUnknown)
- */
-static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface)
+static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
 {
-    SHDOCVW_LockModule();
-
-    return 2; /* non-heap based object */
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    return IWebBrowser_AddRef(WEBBROWSER(This));
 }
 
-/************************************************************************
- * WBOOBJ_Release (IUnknown)
- */
-static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface)
+static ULONG WINAPI OleObject_Release(IOleObject *iface)
 {
-    SHDOCVW_UnlockModule();
-
-    return 1; /* non-heap based object */
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    return IWebBrowser_Release(WEBBROWSER(This));
 }
 
-/************************************************************************
- * WBOOBJ_SetClientSite (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_SetClientSite(LPOLEOBJECT iface,
-                                           LPOLECLIENTSITE pClientSite)
+static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite)
 {
-    FIXME("stub: (%p, %p)\n", iface, pClientSite);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pClientSite);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetClientSite (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_GetClientSite(LPOLEOBJECT iface,
-                                           LPOLECLIENTSITE* ppClientSite)
+static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, LPOLECLIENTSITE *ppClientSite)
 {
-    FIXME("stub: (%p)\n", *ppClientSite);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppClientSite);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_SetHostNames (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_SetHostNames(LPOLEOBJECT iface, LPCOLESTR szContainerApp,
-                                          LPCOLESTR szContainerObj)
+static HRESULT WINAPI OleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp,
+        LPCOLESTR szContainerObj)
 {
-    FIXME("stub: (%p, %s, %s)\n", iface, debugstr_w(szContainerApp),
-          debugstr_w(szContainerObj));
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%s, %s)\n", This, debugstr_w(szContainerApp), debugstr_w(szContainerObj));
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_Close (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_Close(LPOLEOBJECT iface, DWORD dwSaveOption)
+static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
 {
-    FIXME("stub: ()\n");
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, dwSaveOption);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_SetMoniker (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_SetMoniker(LPOLEOBJECT iface,
-                                        DWORD dwWhichMoniker, IMoniker* pmk)
+static HRESULT WINAPI OleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker* pmk)
 {
-    FIXME("stub: (%p, %ld, %p)\n", iface, dwWhichMoniker, pmk);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld, %p)\n", This, dwWhichMoniker, pmk);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetMoniker (IOleObject)
- *
- * Delegate this request to the client site if we have one.
- */
-static HRESULT WINAPI WBOOBJ_GetMoniker(LPOLEOBJECT iface, DWORD dwAssign,
-                                        DWORD dwWhichMoniker, LPMONIKER *ppmk)
+static HRESULT WINAPI OleObject_GetMoniker(IOleObject *iface, DWORD dwAssign,
+        DWORD dwWhichMoniker, LPMONIKER *ppmk)
 {
-    FIXME("stub (%p, %ld, %ld, %p)\n", iface, dwAssign, dwWhichMoniker, ppmk);
-    return E_FAIL;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld, %ld, %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_InitFromData (IOleObject)
- *
- * This method is meaningless if the server is not running
- */
-static HRESULT WINAPI WBOOBJ_InitFromData(LPOLEOBJECT iface, LPDATAOBJECT pDataObject,
-                                          BOOL fCreation, DWORD dwReserved)
+static HRESULT WINAPI OleObject_InitFromData(IOleObject *iface, LPDATAOBJECT pDataObject,
+        BOOL fCreation, DWORD dwReserved)
 {
-    FIXME("stub: (%p, %p, %d, %ld)\n", iface, pDataObject, fCreation, dwReserved);
-    return OLE_E_NOTRUNNING;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p, %d, %ld)\n", This, pDataObject, fCreation, dwReserved);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetClipboardData (IOleObject)
- *
- * This method is meaningless if the server is not running
- */
-static HRESULT WINAPI WBOOBJ_GetClipboardData(LPOLEOBJECT iface, DWORD dwReserved,
-                                              LPDATAOBJECT *ppDataObject)
+static HRESULT WINAPI OleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved,
+        LPDATAOBJECT *ppDataObject)
 {
-    FIXME("stub: (%p, %ld, %p)\n", iface, dwReserved, ppDataObject);
-    return OLE_E_NOTRUNNING;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld, %p)\n", This, dwReserved, ppDataObject);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_DoVerb (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_DoVerb(LPOLEOBJECT iface, LONG iVerb, struct tagMSG* lpmsg,
-                                    LPOLECLIENTSITE pActiveSite, LONG lindex,
-                                    HWND hwndParent, LPCRECT lprcPosRect)
+static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, struct tagMSG* lpmsg,
+        LPOLECLIENTSITE pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
 {
-    FIXME(": stub iVerb = %ld\n", iVerb);
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld %p %p %ld %p %p)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent,
+            lprcPosRect);
     switch (iVerb)
     {
     case OLEIVERB_INPLACEACTIVATE:
@@ -286,126 +129,87 @@ static HRESULT WINAPI WBOOBJ_DoVerb(LPOL
         break;
     }
 
-    return S_OK;
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_EnumVerbs (IOleObject)
- *
- * Delegate to OleRegEnumVerbs.
- */
-static HRESULT WINAPI WBOOBJ_EnumVerbs(LPOLEOBJECT iface,
-                                       IEnumOLEVERB** ppEnumOleVerb)
+static HRESULT WINAPI OleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
 {
-    TRACE("(%p, %p)\n", iface, ppEnumOleVerb);
-
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    TRACE("(%p)->(%p)\n", This, ppEnumOleVerb);
     return OleRegEnumVerbs(&CLSID_WebBrowser, ppEnumOleVerb);
 }
 
-/************************************************************************
- * WBOOBJ_EnumVerbs (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_Update(LPOLEOBJECT iface)
+static HRESULT WINAPI OleObject_Update(IOleObject *iface)
 {
-    FIXME(": Stub\n");
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_IsUpToDate (IOleObject)
- *
- * This method is meaningless if the server is not running
- */
-static HRESULT WINAPI WBOOBJ_IsUpToDate(LPOLEOBJECT iface)
+static HRESULT WINAPI OleObject_IsUpToDate(IOleObject *iface)
 {
-    FIXME("(%p)\n", iface);
-    return OLE_E_NOTRUNNING;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetUserClassID (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_GetUserClassID(LPOLEOBJECT iface, CLSID* pClsid)
+static HRESULT WINAPI OleObject_GetUserClassID(IOleObject *iface, CLSID* pClsid)
 {
-    FIXME("stub: (%p, %p)\n", iface, pClsid);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pClsid);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetUserType (IOleObject)
- *
- * Delegate to OleRegGetUserType.
- */
-static HRESULT WINAPI WBOOBJ_GetUserType(LPOLEOBJECT iface, DWORD dwFormOfType,
-                                         LPOLESTR* pszUserType)
+static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType,
+        LPOLESTR* pszUserType)
 {
-    TRACE("(%p, %ld, %p)\n", iface, dwFormOfType, pszUserType);
-
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    TRACE("(%p, %ld, %p)\n", This, dwFormOfType, pszUserType);
     return OleRegGetUserType(&CLSID_WebBrowser, dwFormOfType, pszUserType);
 }
 
-/************************************************************************
- * WBOOBJ_SetExtent (IOleObject)
- *
- * This method is meaningless if the server is not running
- */
-static HRESULT WINAPI WBOOBJ_SetExtent(LPOLEOBJECT iface, DWORD dwDrawAspect,
-                                       SIZEL* psizel)
+static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
 {
-    FIXME("stub: (%p, %lx, (%ld x %ld))\n", iface, dwDrawAspect,
-          psizel->cx, psizel->cy);
-    return OLE_E_NOTRUNNING;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%lx %p)\n", This, dwDrawAspect, psizel);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_GetExtent (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_GetExtent(LPOLEOBJECT iface, DWORD dwDrawAspect,
-                                       SIZEL* psizel)
+static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
 {
-    FIXME("stub: (%p, %lx, %p)\n", iface, dwDrawAspect, psizel);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%lx, %p)\n", This, dwDrawAspect, psizel);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_Advise (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_Advise(LPOLEOBJECT iface, IAdviseSink* pAdvSink,
-                                    DWORD* pdwConnection)
+static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink,
+        DWORD* pdwConnection)
 {
-    FIXME("stub: (%p, %p, %p)\n", iface, pAdvSink, pdwConnection);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_Unadvise (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_Unadvise(LPOLEOBJECT iface, DWORD dwConnection)
+static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
 {
-    FIXME("stub: (%p, %ld)\n", iface, dwConnection);
-    return S_OK;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, dwConnection);
+    return E_NOTIMPL;
 }
 
-/************************************************************************
- * WBOOBJ_EnumAdvise (IOleObject)
- */
-static HRESULT WINAPI WBOOBJ_EnumAdvise(LPOLEOBJECT iface, IEnumSTATDATA** ppenumAdvise)
+static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
 {
-    FIXME("stub: (%p, %p)\n", iface, ppenumAdvise);
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppenumAdvise);
     return S_OK;
 }
 
-/************************************************************************
- * WBOOBJ_GetMiscStatus (IOleObject)
- *
- * Delegate to OleRegGetMiscStatus.
- */
-static HRESULT WINAPI WBOOBJ_GetMiscStatus(LPOLEOBJECT iface, DWORD dwAspect,
-                                           DWORD* pdwStatus)
+static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
 {
+    WebBrowser *This = OLEOBJ_THIS(iface);
     HRESULT hres;
 
-    TRACE("(%p, %lx, %p)\n", iface, dwAspect, pdwStatus);
+    TRACE("(%p)->(%lx, %p)\n", This, dwAspect, pdwStatus);
 
     hres = OleRegGetMiscStatus(&CLSID_WebBrowser, dwAspect, pdwStatus);
 
@@ -415,53 +219,43 @@ static HRESULT WINAPI WBOOBJ_GetMiscStat
     return S_OK;
 }
 
-/************************************************************************
- * WBOOBJ_SetColorScheme (IOleObject)
- *
- * This method is meaningless if the server is not running
- */
-static HRESULT WINAPI WBOOBJ_SetColorScheme(LPOLEOBJECT iface,
-                                            struct tagLOGPALETTE* pLogpal)
+static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE* pLogpal)
 {
-    FIXME("stub: (%p, %p))\n", iface, pLogpal);
-    return OLE_E_NOTRUNNING;
+    WebBrowser *This = OLEOBJ_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pLogpal);
+    return E_NOTIMPL;
 }
 
-/**********************************************************************
- * IOleObject virtual function table for IE Web Browser component
- */
+#undef OLEOBJ_THIS
 
-static const IOleObjectVtbl WBOOBJ_Vtbl =
+static const IOleObjectVtbl OleObjectVtbl =
 {
-    WBOOBJ_QueryInterface,
-    WBOOBJ_AddRef,
-    WBOOBJ_Release,
-    WBOOBJ_SetClientSite,
-    WBOOBJ_GetClientSite,
-    WBOOBJ_SetHostNames,
-    WBOOBJ_Close,
-    WBOOBJ_SetMoniker,
-    WBOOBJ_GetMoniker,
-    WBOOBJ_InitFromData,
-    WBOOBJ_GetClipboardData,
-    WBOOBJ_DoVerb,
-    WBOOBJ_EnumVerbs,
-    WBOOBJ_Update,
-    WBOOBJ_IsUpToDate,
-    WBOOBJ_GetUserClassID,
-    WBOOBJ_GetUserType,
-    WBOOBJ_SetExtent,
-    WBOOBJ_GetExtent,
-    WBOOBJ_Advise,
-    WBOOBJ_Unadvise,
-    WBOOBJ_EnumAdvise,
-    WBOOBJ_GetMiscStatus,
-    WBOOBJ_SetColorScheme
+    OleObject_QueryInterface,
+    OleObject_AddRef,
+    OleObject_Release,
+    OleObject_SetClientSite,
+    OleObject_GetClientSite,
+    OleObject_SetHostNames,
+    OleObject_Close,
+    OleObject_SetMoniker,
+    OleObject_GetMoniker,
+    OleObject_InitFromData,
+    OleObject_GetClipboardData,
+    OleObject_DoVerb,
+    OleObject_EnumVerbs,
+    OleObject_Update,
+    OleObject_IsUpToDate,
+    OleObject_GetUserClassID,
+    OleObject_GetUserType,
+    OleObject_SetExtent,
+    OleObject_GetExtent,
+    OleObject_Advise,
+    OleObject_Unadvise,
+    OleObject_EnumAdvise,
+    OleObject_GetMiscStatus,
+    OleObject_SetColorScheme
 };
 
-IOleObjectImpl SHDOCVW_OleObject = {&WBOOBJ_Vtbl};
-
-
 /**********************************************************************
  * Implement the IOleInPlaceObject interface
  */
@@ -559,7 +353,7 @@ static const IOleInPlaceObjectVtbl WBOIP
     WBOIPO_ReactivateAndUndo
 };
 
-static IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject = {&WBOIPO_Vtbl};
+IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject = {&WBOIPO_Vtbl};
 
 
 /**********************************************************************
@@ -629,4 +423,9 @@ static const IOleControlVtbl WBOC_Vtbl =
     WBOC_FreezeEvents
 };
 
-static IOleControlImpl SHDOCVW_OleControl = {&WBOC_Vtbl};
+IOleControlImpl SHDOCVW_OleControl = {&WBOC_Vtbl};
+
+void WebBrowser_OleObject_Init(WebBrowser *This)
+{
+    This->lpOleObjectVtbl = &OleObjectVtbl;
+}
Index: dlls/shdocvw/shdocvw.h
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/shdocvw.h,v
retrieving revision 1.15
diff -u -p -r1.15 shdocvw.h
--- dlls/shdocvw/shdocvw.h	13 Jul 2005 11:59:15 -0000	1.15
+++ dlls/shdocvw/shdocvw.h	1 Sep 2005 12:34:04 -0000
@@ -22,7 +22,8 @@
 #define __WINE_SHDOCVW_H
 
 #define COM_NO_WINDOWS_H
-/* FIXME: Is there a better way to deal with all these includes? */
+#define COBJMACROS
+
 #include <stdarg.h>
 
 #include "windef.h"
@@ -49,29 +50,21 @@ extern IClassFactoryImpl SHDOCVW_ClassFa
 
 
 /**********************************************************************
- * IOleObject declaration for SHDOCVW.DLL
+ * WebBrowser declaration for SHDOCVW.DLL
  */
-typedef struct
-{
-    /* IUnknown fields */
-    const IOleObjectVtbl *lpVtbl;
-    LONG ref;
-} IOleObjectImpl;
-
-extern IOleObjectImpl SHDOCVW_OleObject;
+typedef struct {
+    const IWebBrowserVtbl   *lpWebBrowserVtbl;
+    const IOleObjectVtbl    *lpOleObjectVtbl;
 
-/**********************************************************************
- * IWebBrowser declaration for SHDOCVW.DLL
- */
-typedef struct
-{
-    /* IUnknown fields */
-    const IWebBrowserVtbl *lpVtbl;
     LONG ref;
-} IWebBrowserImpl;
+} WebBrowser;
+
+#define WEBBROWSER(x)   ((IWebBrowser*)     &(x)->lpWebBrowserVtbl)
+#define OLEOBJ(x)       ((IOleObject*)      &(x)->lpOleObjectVtbl)
 
-extern IWebBrowserImpl SHDOCVW_WebBrowser;
+void WebBrowser_OleObject_Init(WebBrowser*);
 
+HRESULT WebBrowser_Create(IUnknown*,REFIID,void**);
 
 /**********************************************************************
  * IProvideClassInfo declaration for SHDOCVW.DLL
@@ -162,6 +155,32 @@ typedef struct
 } IConnectionPointImpl;
 
 /**********************************************************************
+ * IOleInPlaceObject declaration for SHDOCVW.DLL
+ */
+typedef struct
+{
+        /* IUnknown fields */
+        const IOleInPlaceObjectVtbl *lpVtbl;
+            DWORD ref;
+} IOleInPlaceObjectImpl;
+
+extern IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject;
+
+/**********************************************************************
+ * IOleControl declaration for SHDOCVW.DLL
+ */
+typedef struct
+{
+    /* IUnknown fields */
+    const IOleControlVtbl *lpVtbl;
+    DWORD ref;
+} IOleControlImpl;
+
+extern IOleControlImpl SHDOCVW_OleControl;
+
+#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
+
+/**********************************************************************
  * Dll lifetime tracking declaration for shdocvw.dll
  */
 extern LONG SHDOCVW_refCount;
Index: dlls/shdocvw/webbrowser.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/webbrowser.c,v
retrieving revision 1.13
diff -u -p -r1.13 webbrowser.c
--- dlls/shdocvw/webbrowser.c	6 Jun 2005 19:50:36 -0000	1.13
+++ dlls/shdocvw/webbrowser.c	1 Sep 2005 12:34:04 -0000
@@ -1,7 +1,8 @@
 /*
- * Implementation of IWebBrowser interface for IE Web Browser control
+ * Implementation of IWebBrowser interface for WebBrowser control
  *
  * Copyright 2001 John R. Sheets (for CodeWeavers)
+ * 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
@@ -27,252 +28,365 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
  * Implement the IWebBrowser interface
  */
 
-static HRESULT WINAPI WB_QueryInterface(IWebBrowser *iface, REFIID riid, LPVOID *ppobj)
+#define WEBBROWSER_THIS(iface) DEFINE_THIS(WebBrowser, WebBrowser, iface)
+
+static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser *iface, REFIID riid, LPVOID *ppv)
 {
-    FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+
+    if (ppv == NULL)
+        return E_POINTER;
+    *ppv = NULL;
+
+    if(IsEqualGUID(&IID_IUnknown, riid)) {
+        TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+        *ppv = WEBBROWSER(This);
+    }else if(IsEqualGUID (&IID_IDispatch, riid)) {
+        FIXME("(%p)->(IID_IDispatch %p)\n", This, ppv);
+        *ppv = WEBBROWSER(This);
+    }else if(IsEqualGUID(&IID_IWebBrowser, riid)) {
+        TRACE("(%p)->(IID_IWebBrowser %p)\n", This, ppv);
+        *ppv = WEBBROWSER(This);
+    }else if(IsEqualGUID(&IID_IOleObject, riid)) {
+        FIXME("(%p)->(IID_IOleObject %p)\n", This, ppv);
+        *ppv = OLEOBJ(This);
+    }else if(IsEqualGUID (&IID_IPersistStorage, riid)) {
+        FIXME("(%p)->(IID_IPersistStorage %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_PersistStorage;
+    }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) {
+        FIXME("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_PersistStreamInit;
+    }else if(IsEqualGUID (&IID_IProvideClassInfo, riid)) {
+        FIXME("(%p)->(IID_IProvideClassInfo %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_ProvideClassInfo;
+    }else if(IsEqualGUID (&IID_IProvideClassInfo2, riid)) {
+        FIXME("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_ProvideClassInfo2;
+    }else if(IsEqualGUID (&IID_IQuickActivate, riid)) {
+        FIXME("(%p)->(IID_IQuickActivate %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_QuickActivate;
+    }else if(IsEqualGUID (&IID_IConnectionPointContainer, riid)) {
+        FIXME("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_ConnectionPointContainer;
+    }else if(IsEqualGUID (&IID_IOleInPlaceObject, riid)) {
+        FIXME("(%p)->(IID_IOleInPlaceObject %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_OleInPlaceObject;
+    }else if(IsEqualGUID (&IID_IOleControl, riid)) {
+        FIXME("(%p)->(IID_IOleControl %p)\n", This, ppv);
+        *ppv = (LPVOID)&SHDOCVW_OleControl;
+    }
+
+    if(*ppv) {
+        IUnknown_AddRef((IUnknown*)*ppv);
+        return S_OK;
+    }
 
-    if (ppobj == NULL) return E_POINTER;
-    
+    FIXME("(%p)->(%s %p) interface not supported\n", This, debugstr_guid(riid), ppv);
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI WB_AddRef(IWebBrowser *iface)
+static ULONG WINAPI WebBrowser_AddRef(IWebBrowser *iface)
 {
-    SHDOCVW_LockModule();
-
-    return 2; /* non-heap based object */
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    LONG ref = InterlockedIncrement(&This->ref);
+    TRACE("(%p) ref=%ld\n", This, ref);
+    return ref;
 }
 
-static ULONG WINAPI WB_Release(IWebBrowser *iface)
+static ULONG WINAPI WebBrowser_Release(IWebBrowser *iface)
 {
-    SHDOCVW_UnlockModule();
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    LONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%ld\n", This, ref);
 
-    return 1; /* non-heap based object */
+    if(!ref) {
+        HeapFree(GetProcessHeap(), 0, This);
+        SHDOCVW_UnlockModule();
+    }
+
+    return ref;
 }
 
 /* IDispatch methods */
-static HRESULT WINAPI WB_GetTypeInfoCount(IWebBrowser *iface, UINT *pctinfo)
+static HRESULT WINAPI WebBrowser_GetTypeInfoCount(IWebBrowser *iface, UINT *pctinfo)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pctinfo);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_GetTypeInfo(IWebBrowser *iface, UINT iTInfo, LCID lcid,
+static HRESULT WINAPI WebBrowser_GetTypeInfo(IWebBrowser *iface, UINT iTInfo, LCID lcid,
                                      LPTYPEINFO *ppTInfo)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%d %ld %p)\n", This, iTInfo, lcid, ppTInfo);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_GetIDsOfNames(IWebBrowser *iface, REFIID riid,
+static HRESULT WINAPI WebBrowser_GetIDsOfNames(IWebBrowser *iface, REFIID riid,
                                        LPOLESTR *rgszNames, UINT cNames,
                                        LCID lcid, DISPID *rgDispId)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%s %p %d %ld %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
+            lcid, rgDispId);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_Invoke(IWebBrowser *iface, DISPID dispIdMember,
+static HRESULT WINAPI WebBrowser_Invoke(IWebBrowser *iface, DISPID dispIdMember,
                                 REFIID riid, LCID lcid, WORD wFlags,
                                 DISPPARAMS *pDispParams, VARIANT *pVarResult,
                                 EXCEPINFO *pExepInfo, UINT *puArgErr)
 {
-    FIXME("stub dispIdMember = %d, IID = %s\n", (int)dispIdMember, debugstr_guid(riid));
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+            lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
+    return E_NOTIMPL;
 }
 
 /* IWebBrowser methods */
-static HRESULT WINAPI WB_GoBack(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_GoBack(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_GoForward(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_GoForward(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_GoHome(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_GoHome(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_GoSearch(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_GoSearch(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_Navigate(IWebBrowser *iface, BSTR URL,
+static HRESULT WINAPI WebBrowser_Navigate(IWebBrowser *iface, BSTR URL,
                                   VARIANT *Flags, VARIANT *TargetFrameName,
                                   VARIANT *PostData, VARIANT *Headers)
 {
-    FIXME("stub: URL = %p (%p, %p, %p, %p)\n", URL, Flags, TargetFrameName,
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%s %p %p %p %p)\n", This, debugstr_w(URL), Flags, TargetFrameName,
           PostData, Headers);
-    return S_OK;
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_Refresh(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_Refresh(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_Refresh2(IWebBrowser *iface, VARIANT *Level)
+static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser *iface, VARIANT *Level)
 {
-    FIXME("stub: %p\n", Level);
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, Level);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_Stop(IWebBrowser *iface)
+static HRESULT WINAPI WebBrowser_Stop(IWebBrowser *iface)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Application(IWebBrowser *iface, IDispatch **ppDisp)
+static HRESULT WINAPI WebBrowser_get_Application(IWebBrowser *iface, IDispatch **ppDisp)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppDisp);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Parent(IWebBrowser *iface, IDispatch **ppDisp)
+static HRESULT WINAPI WebBrowser_get_Parent(IWebBrowser *iface, IDispatch **ppDisp)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppDisp);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Container(IWebBrowser *iface, IDispatch **ppDisp)
+static HRESULT WINAPI WebBrowser_get_Container(IWebBrowser *iface, IDispatch **ppDisp)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppDisp);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Document(IWebBrowser *iface, IDispatch **ppDisp)
+static HRESULT WINAPI WebBrowser_get_Document(IWebBrowser *iface, IDispatch **ppDisp)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, ppDisp);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_TopLevelContainer(IWebBrowser *iface, VARIANT_BOOL *pBool)
+static HRESULT WINAPI WebBrowser_get_TopLevelContainer(IWebBrowser *iface, VARIANT_BOOL *pBool)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pBool);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Type(IWebBrowser *iface, BSTR *Type)
+static HRESULT WINAPI WebBrowser_get_Type(IWebBrowser *iface, BSTR *Type)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, Type);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Left(IWebBrowser *iface, long *pl)
+static HRESULT WINAPI WebBrowser_get_Left(IWebBrowser *iface, long *pl)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pl);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_put_Left(IWebBrowser *iface, long Left)
+static HRESULT WINAPI WebBrowser_put_Left(IWebBrowser *iface, long Left)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, Left);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Top(IWebBrowser *iface, long *pl)
+static HRESULT WINAPI WebBrowser_get_Top(IWebBrowser *iface, long *pl)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pl);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_put_Top(IWebBrowser *iface, long Top)
+static HRESULT WINAPI WebBrowser_put_Top(IWebBrowser *iface, long Top)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, Top);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Width(IWebBrowser *iface, long *pl)
+static HRESULT WINAPI WebBrowser_get_Width(IWebBrowser *iface, long *pl)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pl);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_put_Width(IWebBrowser *iface, long Width)
+static HRESULT WINAPI WebBrowser_put_Width(IWebBrowser *iface, long Width)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, Width);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Height(IWebBrowser *iface, long *pl)
+static HRESULT WINAPI WebBrowser_get_Height(IWebBrowser *iface, long *pl)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pl);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_put_Height(IWebBrowser *iface, long Height)
+static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser *iface, long Height)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%ld)\n", This, Height);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_LocationName(IWebBrowser *iface, BSTR *LocationName)
+static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser *iface, BSTR *LocationName)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, LocationName);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_LocationURL(IWebBrowser *iface, BSTR *LocationURL)
+static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser *iface, BSTR *LocationURL)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, LocationURL);
+    return E_NOTIMPL;
 }
 
-static HRESULT WINAPI WB_get_Busy(IWebBrowser *iface, VARIANT_BOOL *pBool)
+static HRESULT WINAPI WebBrowser_get_Busy(IWebBrowser *iface, VARIANT_BOOL *pBool)
 {
-    FIXME("stub \n");
-    return S_OK;
+    WebBrowser *This = WEBBROWSER_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pBool);
+    return E_NOTIMPL;
 }
 
+#undef WEBBROWSER_THIS
+
 /**********************************************************************
- * IWebBrowser virtual function table for IE Web Browser component
+ * IWebBrowser virtual function table for IWebBrowser interface
  */
 
-static const IWebBrowserVtbl WB_Vtbl =
+static const IWebBrowserVtbl WebBrowserVtbl =
 {
-    WB_QueryInterface,
-    WB_AddRef,
-    WB_Release,
-    WB_GetTypeInfoCount,
-    WB_GetTypeInfo,
-    WB_GetIDsOfNames,
-    WB_Invoke,
-    WB_GoBack,
-    WB_GoForward,
-    WB_GoHome,
-    WB_GoSearch,
-    WB_Navigate,
-    WB_Refresh,
-    WB_Refresh2,
-    WB_Stop,
-    WB_get_Application,
-    WB_get_Parent,
-    WB_get_Container,
-    WB_get_Document,
-    WB_get_TopLevelContainer,
-    WB_get_Type,
-    WB_get_Left,
-    WB_put_Left,
-    WB_get_Top,
-    WB_put_Top,
-    WB_get_Width,
-    WB_put_Width,
-    WB_get_Height,
-    WB_put_Height,
-    WB_get_LocationName,
-    WB_get_LocationURL,
-    WB_get_Busy
+    WebBrowser_QueryInterface,
+    WebBrowser_AddRef,
+    WebBrowser_Release,
+    WebBrowser_GetTypeInfoCount,
+    WebBrowser_GetTypeInfo,
+    WebBrowser_GetIDsOfNames,
+    WebBrowser_Invoke,
+    WebBrowser_GoBack,
+    WebBrowser_GoForward,
+    WebBrowser_GoHome,
+    WebBrowser_GoSearch,
+    WebBrowser_Navigate,
+    WebBrowser_Refresh,
+    WebBrowser_Refresh2,
+    WebBrowser_Stop,
+    WebBrowser_get_Application,
+    WebBrowser_get_Parent,
+    WebBrowser_get_Container,
+    WebBrowser_get_Document,
+    WebBrowser_get_TopLevelContainer,
+    WebBrowser_get_Type,
+    WebBrowser_get_Left,
+    WebBrowser_put_Left,
+    WebBrowser_get_Top,
+    WebBrowser_put_Top,
+    WebBrowser_get_Width,
+    WebBrowser_put_Width,
+    WebBrowser_get_Height,
+    WebBrowser_put_Height,
+    WebBrowser_get_LocationName,
+    WebBrowser_get_LocationURL,
+    WebBrowser_get_Busy
 };
 
-IWebBrowserImpl SHDOCVW_WebBrowser = {&WB_Vtbl};
+HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
+{
+    WebBrowser *ret;
+    HRESULT hres;
+
+    TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
+
+    ret = HeapAlloc(GetProcessHeap(), 0, sizeof(WebBrowser));
+
+    ret->lpWebBrowserVtbl = &WebBrowserVtbl;
+    ret->ref = 0;
+
+    WebBrowser_OleObject_Init(ret);
+
+    hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
+    if(SUCCEEDED(hres)) {
+        SHDOCVW_LockModule();
+    }else {
+        HeapFree(GetProcessHeap(), 0, ret);
+        return hres;
+    }
+
+    return hres;
+}


More information about the wine-patches mailing list