Wine-20041201 vendor drop Added: vendor/wine/dlls/shdocvw/ Added: vendor/wine/dlls/shdocvw/current/ Added: vendor/wine/dlls/shdocvw/current/Makefile.in Added: vendor/wine/dlls/shdocvw/current/classinfo.c Added: vendor/wine/dlls/shdocvw/current/events.c Added: vendor/wine/dlls/shdocvw/current/factory.c Added: vendor/wine/dlls/shdocvw/current/misc.c Added: vendor/wine/dlls/shdocvw/current/oleobject.c Added: vendor/wine/dlls/shdocvw/current/persist.c Added: vendor/wine/dlls/shdocvw/current/regsvr.c Added: vendor/wine/dlls/shdocvw/current/shdocvw.h Added: vendor/wine/dlls/shdocvw/current/shdocvw.rc Added: vendor/wine/dlls/shdocvw/current/shdocvw.spec Added: vendor/wine/dlls/shdocvw/current/shdocvw_main.c Added: vendor/wine/dlls/shdocvw/current/version.rc Added: vendor/wine/dlls/shdocvw/current/webbrowser.c _____
Added: vendor/wine/dlls/shdocvw/current/Makefile.in --- vendor/wine/dlls/shdocvw/current/Makefile.in 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/Makefile.in 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,25 @@
+EXTRADEFS = -D_SHDOCVW_ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = shdocvw.dll +IMPORTS = urlmon ole32 user32 advapi32 kernel32 +EXTRALIBS = -luuid + +C_SRCS = \ + classinfo.c \ + events.c \ + factory.c \ + misc.c \ + oleobject.c \ + persist.c \ + regsvr.c \ + shdocvw_main.c \ + webbrowser.c + +RC_SRCS = shdocvw.rc + +@MAKE_DLL_RULES@ + +### Dependencies: _____
Added: vendor/wine/dlls/shdocvw/current/classinfo.c --- vendor/wine/dlls/shdocvw/current/classinfo.c 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/classinfo.c 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,170 @@
+/* + * Implementation of IProvideClassInfo interfaces for IE Web Browser control + * + * Copyright 2001 John R. Sheets (for CodeWeavers) + * + * 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 <stdarg.h> +#include <string.h> + +#include "windef.h" +#include "winbase.h" +#include "shdocvw.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +/********************************************************************** + * Implement the IProvideClassInfo interface + * + * FIXME: Should we just pass in the IProvideClassInfo2 methods rather + * reimplementing them here? + */ + +static HRESULT WINAPI WBPCI_QueryInterface(LPPROVIDECLASSINFO iface, + REFIID riid, LPVOID *ppobj) +{ + IProvideClassInfoImpl *This = (IProvideClassInfoImpl *)iface; + + FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI WBPCI_AddRef(LPPROVIDECLASSINFO iface) +{ + IProvideClassInfoImpl *This = (IProvideClassInfoImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +static ULONG WINAPI WBPCI_Release(LPPROVIDECLASSINFO iface) +{ + IProvideClassInfoImpl *This = (IProvideClassInfoImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/* Return an ITypeInfo interface to retrieve type library info about + * this control. + */ +static HRESULT WINAPI WBPCI_GetClassInfo(LPPROVIDECLASSINFO iface, LPTYPEINFO *ppTI) +{ + FIXME("stub: LPTYPEINFO = %p\n", *ppTI); + return S_OK; +} + +/********************************************************************** + * IProvideClassInfo virtual function table for IE Web Browser component + */ + +static IProvideClassInfoVtbl WBPCI_Vtbl = +{ + WBPCI_QueryInterface, + WBPCI_AddRef, + WBPCI_Release, + WBPCI_GetClassInfo +}; + +IProvideClassInfoImpl SHDOCVW_ProvideClassInfo = { &WBPCI_Vtbl, 1 }; + + +/********************************************************************** + * Implement the IProvideClassInfo2 interface (inherits from + * IProvideClassInfo). + */ + +static HRESULT WINAPI WBPCI2_QueryInterface(LPPROVIDECLASSINFO2 iface, + REFIID riid, LPVOID *ppobj) +{ + IProvideClassInfo2Impl *This = (IProvideClassInfo2Impl *)iface; + + FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI WBPCI2_AddRef(LPPROVIDECLASSINFO2 iface) +{ + IProvideClassInfo2Impl *This = (IProvideClassInfo2Impl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +static ULONG WINAPI WBPCI2_Release(LPPROVIDECLASSINFO2 iface) +{ + IProvideClassInfo2Impl *This = (IProvideClassInfo2Impl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/* Return an ITypeInfo interface to retrieve type library info about + * this control. + */ +static HRESULT WINAPI WBPCI2_GetClassInfo(LPPROVIDECLASSINFO2 iface, LPTYPEINFO *ppTI) +{ + FIXME("stub: LPTYPEINFO = %p\n", *ppTI); + return S_OK; +} + +/* Get the IID for generic default event callbacks. This IID will + * in theory be used to later query for an IConnectionPoint to connect + * an event sink (callback implementation in the OLE control site) + * to this control. +*/ +static HRESULT WINAPI WBPCI2_GetGUID(LPPROVIDECLASSINFO2 iface, + DWORD dwGuidKind, GUID *pGUID) +{ + FIXME("stub: dwGuidKind = %ld, pGUID = %s\n", dwGuidKind, debugstr_guid(pGUID)); + + if (dwGuidKind != GUIDKIND_DEFAULT_SOURCE_DISP_IID) + { + FIXME ("Requested unsupported GUID type: %ld\n", dwGuidKind); + return E_FAIL; /* Is there a better return type here? */ + } + + /* FIXME: Returning IPropertyNotifySink interface, but should really + * return a more generic event set (???) dispinterface. + * However, this hack, allows a control site to return with success + * (MFC's COleControlSite falls back to older IProvideClassInfo interface + * if GetGUID() fails to return a non-NULL GUID). + */ + memcpy(pGUID, &IID_IPropertyNotifySink, sizeof(GUID)); + FIXME("Wrongly returning IPropertyNotifySink interface %s\n", + debugstr_guid(pGUID)); + + return S_OK; +} + +/********************************************************************** + * IProvideClassInfo virtual function table for IE Web Browser component + */ + +static IProvideClassInfo2Vtbl WBPCI2_Vtbl = +{ + WBPCI2_QueryInterface, + WBPCI2_AddRef, + WBPCI2_Release, + WBPCI2_GetClassInfo, + WBPCI2_GetGUID +}; + +IProvideClassInfo2Impl SHDOCVW_ProvideClassInfo2 = { &WBPCI2_Vtbl, 1 }; _____
Added: vendor/wine/dlls/shdocvw/current/events.c --- vendor/wine/dlls/shdocvw/current/events.c 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/events.c 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,212 @@
+/* + * Implementation of event-related interfaces for IE Web Browser control: + * + * - IConnectionPointContainer + * - IConnectionPoint + * + * Copyright 2001 John R. Sheets (for CodeWeavers) + * + * 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 <string.h> +#include "wine/debug.h" +#include "shdocvw.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + + +static const GUID IID_INotifyDBEvents = + { 0xdb526cc0, 0xd188, 0x11cd, { 0xad, 0x48, 0x00, 0xaa, 0x00, 0x3c, 0x9c, 0xb6 } }; + +/********************************************************************** + * Implement the IConnectionPointContainer interface + */ + +static HRESULT WINAPI WBCPC_QueryInterface(LPCONNECTIONPOINTCONTAINER iface, + REFIID riid, LPVOID *ppobj) +{ + IConnectionPointContainerImpl *This = (IConnectionPointContainerImpl *)iface; + + FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI WBCPC_AddRef(LPCONNECTIONPOINTCONTAINER iface) +{ + IConnectionPointContainerImpl *This = (IConnectionPointContainerImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +static ULONG WINAPI WBCPC_Release(LPCONNECTIONPOINTCONTAINER iface) +{ + IConnectionPointContainerImpl *This = (IConnectionPointContainerImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/* Get a list of connection points inside this container. */ +static HRESULT WINAPI WBCPC_EnumConnectionPoints(LPCONNECTIONPOINTCONTAINER iface, + LPENUMCONNECTIONPOINTS *ppEnum) +{ + FIXME("stub: IEnumConnectionPoints = %p\n", *ppEnum); + return S_OK; +} + +/* Retrieve the connection point in this container associated with the + * riid interface. When events occur in the control, the control can + * call backwards into its embedding site, through these interfaces. + */ +static HRESULT WINAPI WBCPC_FindConnectionPoint(LPCONNECTIONPOINTCONTAINER iface, + REFIID riid, LPCONNECTIONPOINT *ppCP) +{ + TRACE(": IID = %s, IConnectionPoint = %p\n", debugstr_guid(riid), *ppCP); + + /* For now, return the same IConnectionPoint object for both + * event interface requests. + */ + if (IsEqualGUID (&IID_INotifyDBEvents, riid)) + { + TRACE("Returning connection point %p for IID_INotifyDBEvents\n", + &SHDOCVW_ConnectionPoint); + *ppCP = (LPCONNECTIONPOINT)&SHDOCVW_ConnectionPoint; + return S_OK; + } + else if (IsEqualGUID (&IID_IPropertyNotifySink, riid)) + { + TRACE("Returning connection point %p for IID_IPropertyNotifySink\n", + &SHDOCVW_ConnectionPoint); + *ppCP = (LPCONNECTIONPOINT)&SHDOCVW_ConnectionPoint; + return S_OK; + } + + return E_FAIL; +} + +/********************************************************************** + * IConnectionPointContainer virtual function table for IE Web Browser component + */ + +static IConnectionPointContainerVtbl WBCPC_Vtbl = +{ + WBCPC_QueryInterface, + WBCPC_AddRef, + WBCPC_Release, + WBCPC_EnumConnectionPoints, + WBCPC_FindConnectionPoint +}; + +IConnectionPointContainerImpl SHDOCVW_ConnectionPointContainer = { &WBCPC_Vtbl, 1 }; + + +/********************************************************************** + * Implement the IConnectionPoint interface + */ + +static HRESULT WINAPI WBCP_QueryInterface(LPCONNECTIONPOINT iface, + REFIID riid, LPVOID *ppobj) +{ + IConnectionPointImpl *This = (IConnectionPointImpl *)iface; + + FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI WBCP_AddRef(LPCONNECTIONPOINT iface) +{ + IConnectionPointImpl *This = (IConnectionPointImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +static ULONG WINAPI WBCP_Release(LPCONNECTIONPOINT iface) +{ + IConnectionPointImpl *This = (IConnectionPointImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +static HRESULT WINAPI WBCP_GetConnectionInterface(LPCONNECTIONPOINT iface, IID* pIId) +{ + FIXME("stub: %s\n", debugstr_guid(pIId)); + return S_OK; +} + +/* Get this connection point's owning container */ +static HRESULT WINAPI +WBCP_GetConnectionPointContainer(LPCONNECTIONPOINT iface, + LPCONNECTIONPOINTCONTAINER *ppCPC) +{ + FIXME("stub: IConnectionPointContainer = %p\n", *ppCPC); + return S_OK; +} + +/* Connect the pUnkSink event-handling implementation (in the control site) + * to this connection point. Return a handle to this connection in + * pdwCookie (for later use in Unadvise()). + */ +static HRESULT WINAPI WBCP_Advise(LPCONNECTIONPOINT iface, + LPUNKNOWN pUnkSink, DWORD *pdwCookie) +{ + static int new_cookie; + + FIXME("stub: IUnknown = %p, connection cookie = %ld\n", pUnkSink, *pdwCookie); + + *pdwCookie = ++new_cookie; + TRACE ("Returning cookie = %ld\n", *pdwCookie); + + return S_OK; +} + +/* Disconnect this implementation from the connection point. */ +static HRESULT WINAPI WBCP_Unadvise(LPCONNECTIONPOINT iface, + DWORD dwCookie) +{ + FIXME("stub: cookie to disconnect = %lx\n", dwCookie); + return S_OK; +} + +/* Get a list of connections in this connection point. */ +static HRESULT WINAPI WBCP_EnumConnections(LPCONNECTIONPOINT iface, + LPENUMCONNECTIONS *ppEnum) +{ + FIXME("stub: IEnumConnections = %p\n", *ppEnum); + return S_OK; +} + +/********************************************************************** + * IConnectionPoint virtual function table for IE Web Browser component + */ + +static IConnectionPointVtbl WBCP_Vtbl = +{ + WBCP_QueryInterface, + WBCP_AddRef, + WBCP_Release, + WBCP_GetConnectionInterface, + WBCP_GetConnectionPointContainer, + WBCP_Advise, + WBCP_Unadvise, + WBCP_EnumConnections +}; + +IConnectionPointImpl SHDOCVW_ConnectionPoint = { &WBCP_Vtbl, 1 }; _____
Added: vendor/wine/dlls/shdocvw/current/factory.c --- vendor/wine/dlls/shdocvw/current/factory.c 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/factory.c 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,121 @@
+/* + * Implementation of class factory for IE Web Browser + * + * Copyright 2001 John R. Sheets (for CodeWeavers) + * + * 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 <string.h> +#include "wine/debug.h" +#include "shdocvw.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +/********************************************************************** + * Implement the IWebBrowser class factory + * + * (Based on implementation in ddraw/main.c) + */ + +/********************************************************************** + * WBCF_QueryInterface (IUnknown) + */ +static HRESULT WINAPI WBCF_QueryInterface(LPCLASSFACTORY iface, + REFIID riid, LPVOID *ppobj) +{ + IClassFactoryImpl *This = (IClassFactoryImpl *)iface; + + TRACE ("\n"); + + /* + * Perform a sanity check on the parameters. + */ + if ((This == NULL) || (ppobj == NULL) ) + return E_INVALIDARG; + + return E_NOINTERFACE; +} + +/********************************************************************** ** + * WBCF_AddRef (IUnknown) + */ +static ULONG WINAPI WBCF_AddRef(LPCLASSFACTORY iface) +{ + IClassFactoryImpl *This = (IClassFactoryImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +/********************************************************************** ** + * WBCF_Release (IUnknown) + */ +static ULONG WINAPI WBCF_Release(LPCLASSFACTORY iface) +{ + IClassFactoryImpl *This = (IClassFactoryImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/********************************************************************** ** + * WBCF_CreateInstance (IClassFactory) + */ +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; +} + +/********************************************************************** ** + * WBCF_LockServer (IClassFactory) + */ +static HRESULT WINAPI WBCF_LockServer(LPCLASSFACTORY iface, BOOL dolock) +{ + IClassFactoryImpl *This = (IClassFactoryImpl *)iface; + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static IClassFactoryVtbl WBCF_Vtbl = +{ + WBCF_QueryInterface, + WBCF_AddRef, + WBCF_Release, + WBCF_CreateInstance, + WBCF_LockServer +}; + +IClassFactoryImpl SHDOCVW_ClassFactory = { &WBCF_Vtbl, 1 }; _____
Added: vendor/wine/dlls/shdocvw/current/misc.c --- vendor/wine/dlls/shdocvw/current/misc.c 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/misc.c 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,93 @@
+/* + * Implementation of miscellaneous interfaces for IE Web Browser control: + * + * - IQuickActivate + * + * Copyright 2001 John R. Sheets (for CodeWeavers) + * + * 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 "wine/debug.h" +#include "shdocvw.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +/********************************************************************** + * Implement the IQuickActivate interface + */ + +static HRESULT WINAPI WBQA_QueryInterface(LPQUICKACTIVATE iface, + REFIID riid, LPVOID *ppobj) +{ + IQuickActivateImpl *This = (IQuickActivateImpl *)iface; + + FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI WBQA_AddRef(LPQUICKACTIVATE iface) +{ + IQuickActivateImpl *This = (IQuickActivateImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +static ULONG WINAPI WBQA_Release(LPQUICKACTIVATE iface) +{ + IQuickActivateImpl *This = (IQuickActivateImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/* Alternative interface for quicker, easier activation of a control. */ +static HRESULT WINAPI WBQA_QuickActivate(LPQUICKACTIVATE iface, + QACONTAINER *pQaContainer, + QACONTROL *pQaControl) +{ + FIXME("stub: QACONTAINER = %p, QACONTROL = %p\n", pQaContainer, pQaControl); + return S_OK; +} + +static HRESULT WINAPI WBQA_SetContentExtent(LPQUICKACTIVATE iface, LPSIZEL pSizel) +{ + FIXME("stub: LPSIZEL = %p\n", pSizel); + return E_NOINTERFACE; +} + +static HRESULT WINAPI WBQA_GetContentExtent(LPQUICKACTIVATE iface, LPSIZEL pSizel) +{ + FIXME("stub: LPSIZEL = %p\n", pSizel); + return E_NOINTERFACE; +} + +/********************************************************************** + * IQuickActivate virtual function table for IE Web Browser component + */ + +static IQuickActivateVtbl WBQA_Vtbl = +{ + WBQA_QueryInterface, + WBQA_AddRef, + WBQA_Release, + WBQA_QuickActivate, + WBQA_SetContentExtent, + WBQA_GetContentExtent +}; + +IQuickActivateImpl SHDOCVW_QuickActivate = { &WBQA_Vtbl, 1 }; _____
Added: vendor/wine/dlls/shdocvw/current/oleobject.c --- vendor/wine/dlls/shdocvw/current/oleobject.c 2004-12-31 16:00:23 UTC (rev 12599) +++ vendor/wine/dlls/shdocvw/current/oleobject.c 2004-12-31 16:05:11 UTC (rev 12600) @@ -0,0 +1,615 @@
+/* + * Implementation of IOleObject interfaces for IE Web Browser + * + * - IOleObject + * - IOleInPlaceObject + * - IOleControl + * + * Copyright 2001 John R. Sheets (for CodeWeavers) + * + * 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 <string.h> +#include "wine/debug.h" +#include "shdocvw.h" +#include "ole2.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +/********************************************************************** + * 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; +} + +/********************************************************************** ** + * WBOOBJ_AddRef (IUnknown) + */ +static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface) +{ + IOleObjectImpl *This = (IOleObjectImpl *)iface; + + TRACE("\n"); + return ++(This->ref); +} + +/********************************************************************** ** + * WBOOBJ_Release (IUnknown) + */ +static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface) +{ + IOleObjectImpl *This = (IOleObjectImpl *)iface; + + /* static class, won't be freed */ + TRACE("\n"); + return --(This->ref); +} + +/********************************************************************** ** + * WBOOBJ_SetClientSite (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_SetClientSite(LPOLEOBJECT iface, + LPOLECLIENTSITE pClientSite) +{ + FIXME("stub: (%p, %p)\n", iface, pClientSite); + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_GetClientSite (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_GetClientSite(LPOLEOBJECT iface, + LPOLECLIENTSITE* ppClientSite) +{ + FIXME("stub: (%p)\n", *ppClientSite); + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_SetHostNames (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_SetHostNames(LPOLEOBJECT iface, LPCOLESTR szContainerApp, + LPCOLESTR szContainerObj) +{ + FIXME("stub: (%p, %s, %s)\n", iface, debugstr_w(szContainerApp), + debugstr_w(szContainerObj)); + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_Close (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_Close(LPOLEOBJECT iface, DWORD dwSaveOption) +{ + FIXME("stub: ()\n"); + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_SetMoniker (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_SetMoniker(LPOLEOBJECT iface, + DWORD dwWhichMoniker, IMoniker* pmk) +{ + FIXME("stub: (%p, %ld, %p)\n", iface, dwWhichMoniker, pmk); + return S_OK; +} + +/********************************************************************** ** + * 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) +{ + FIXME("stub (%p, %ld, %ld, %p)\n", iface, dwAssign, dwWhichMoniker, ppmk); + return E_FAIL; +} + +/********************************************************************** ** + * 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) +{ + FIXME("stub: (%p, %p, %d, %ld)\n", iface, pDataObject, fCreation, dwReserved); + return OLE_E_NOTRUNNING; +} + +/********************************************************************** ** + * WBOOBJ_GetClipboardData (IOleObject) + * + * This method is meaningless if the server is not running + */ +static HRESULT WINAPI WBOOBJ_GetClipboardData(LPOLEOBJECT iface, DWORD dwReserved, + LPDATAOBJECT *ppDataObject) +{ + FIXME("stub: (%p, %ld, %p)\n", iface, dwReserved, ppDataObject); + return OLE_E_NOTRUNNING; +} + +/********************************************************************** ** + * WBOOBJ_DoVerb (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_DoVerb(LPOLEOBJECT iface, LONG iVerb, struct tagMSG* lpmsg, + LPOLECLIENTSITE pActiveSite, LONG lindex, + HWND hwndParent, LPCRECT lprcPosRect) +{ + FIXME(": stub iVerb = %ld\n", iVerb); + switch (iVerb) + { + case OLEIVERB_INPLACEACTIVATE: + FIXME ("stub for OLEIVERB_INPLACEACTIVATE\n"); + break; + case OLEIVERB_HIDE: + FIXME ("stub for OLEIVERB_HIDE\n"); + break; + } + + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_EnumVerbs (IOleObject) + * + * Delegate to OleRegEnumVerbs. + */ +static HRESULT WINAPI WBOOBJ_EnumVerbs(LPOLEOBJECT iface, + IEnumOLEVERB** ppEnumOleVerb) +{ + TRACE("(%p, %p)\n", iface, ppEnumOleVerb); + + return OleRegEnumVerbs(&CLSID_WebBrowser, ppEnumOleVerb); +} + +/********************************************************************** ** + * WBOOBJ_EnumVerbs (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_Update(LPOLEOBJECT iface) +{ + FIXME(": Stub\n"); + return E_NOTIMPL; +} + +/********************************************************************** ** + * WBOOBJ_IsUpToDate (IOleObject) + * + * This method is meaningless if the server is not running + */ +static HRESULT WINAPI WBOOBJ_IsUpToDate(LPOLEOBJECT iface) +{ + FIXME("(%p)\n", iface); + return OLE_E_NOTRUNNING; +} + +/********************************************************************** ** + * WBOOBJ_GetUserClassID (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_GetUserClassID(LPOLEOBJECT iface, CLSID* pClsid) +{ + FIXME("stub: (%p, %p)\n", iface, pClsid); + return S_OK; +} + +/********************************************************************** ** + * WBOOBJ_GetUserType (IOleObject) + * + * Delegate to OleRegGetUserType. + */ +static HRESULT WINAPI WBOOBJ_GetUserType(LPOLEOBJECT iface, DWORD dwFormOfType, + LPOLESTR* pszUserType) +{ + TRACE("(%p, %ld, %p)\n", iface, 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) +{ + FIXME("stub: (%p, %lx, (%ld x %ld))\n", iface, dwDrawAspect, + psizel->cx, psizel->cy); + return OLE_E_NOTRUNNING; +} + +/********************************************************************** ** + * WBOOBJ_GetExtent (IOleObject) + */ +static HRESULT WINAPI WBOOBJ_GetExtent(LPOLEOBJECT iface, DWORD dwDrawAspect, + SIZEL* psizel) +{ + FIXME("stub: (%p, %lx, %p)\n", iface, dwDrawAspect, psizel); + return S_OK; +} + +/********************************************************************** ** [truncated at 1000 lines; 2280 more skipped]