Import and merge Wine-20041201

svn path=/trunk/; revision=12603
This commit is contained in:
Gé van Geldorp 2004-12-31 16:07:59 +00:00
parent dc540e8946
commit 1b515d5749
16 changed files with 3238 additions and 0 deletions

View file

@ -0,0 +1,9 @@
# $Id: Makefile 12297 2004-12-23 08:55:00Z gvg $
PATH_TO_TOP = ../..
TARGET_TYPE = winedll
include $(PATH_TO_TOP)/rules.mak
include $(TOOLS_PATH)/helper.mk

View file

@ -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:

View file

@ -0,0 +1,19 @@
# $Id: Makefile.ros-template 12297 2004-12-23 08:55:00Z gvg $
TARGET_NAME = shdocvw
TARGET_OBJECTS = @C_SRCS@
TARGET_CFLAGS = @EXTRADEFS@
TARGET_SDKLIBS = @IMPORTS@ wine.a wine_uuid.a ntdll.a
TARGET_BASE = $(TARGET_BASE_LIB_SHDOCVW)
TARGET_NORC = yes
default: all
DEP_OBJECTS = $(TARGET_OBJECTS)
include $(TOOLS_PATH)/depend.mk

View file

@ -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 };

View file

@ -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 };

View file

@ -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 };

View file

@ -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 };

View file

@ -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;
}
/************************************************************************
* WBOOBJ_Advise (IOleObject)
*/
static HRESULT WINAPI WBOOBJ_Advise(LPOLEOBJECT iface, IAdviseSink* pAdvSink,
DWORD* pdwConnection)
{
FIXME("stub: (%p, %p, %p)\n", iface, pAdvSink, pdwConnection);
return S_OK;
}
/************************************************************************
* WBOOBJ_Unadvise (IOleObject)
*/
static HRESULT WINAPI WBOOBJ_Unadvise(LPOLEOBJECT iface, DWORD dwConnection)
{
FIXME("stub: (%p, %ld)\n", iface, dwConnection);
return S_OK;
}
/************************************************************************
* WBOOBJ_EnumAdvise (IOleObject)
*/
static HRESULT WINAPI WBOOBJ_EnumAdvise(LPOLEOBJECT iface, IEnumSTATDATA** ppenumAdvise)
{
FIXME("stub: (%p, %p)\n", iface, ppenumAdvise);
return S_OK;
}
/************************************************************************
* WBOOBJ_GetMiscStatus (IOleObject)
*
* Delegate to OleRegGetMiscStatus.
*/
static HRESULT WINAPI WBOOBJ_GetMiscStatus(LPOLEOBJECT iface, DWORD dwAspect,
DWORD* pdwStatus)
{
HRESULT hres;
TRACE("(%p, %lx, %p)\n", iface, dwAspect, pdwStatus);
hres = OleRegGetMiscStatus(&CLSID_WebBrowser, dwAspect, pdwStatus);
if (FAILED(hres))
*pdwStatus = 0;
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)
{
FIXME("stub: (%p, %p))\n", iface, pLogpal);
return OLE_E_NOTRUNNING;
}
/**********************************************************************
* IOleObject virtual function table for IE Web Browser component
*/
static IOleObjectVtbl WBOOBJ_Vtbl =
{
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
};
IOleObjectImpl SHDOCVW_OleObject = { &WBOOBJ_Vtbl, 1 };
/**********************************************************************
* Implement the IOleInPlaceObject interface
*/
static HRESULT WINAPI WBOIPO_QueryInterface(LPOLEINPLACEOBJECT iface,
REFIID riid, LPVOID *ppobj)
{
IOleInPlaceObjectImpl *This = (IOleInPlaceObjectImpl *)iface;
FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI WBOIPO_AddRef(LPOLEINPLACEOBJECT iface)
{
IOleInPlaceObjectImpl *This = (IOleInPlaceObjectImpl *)iface;
TRACE("\n");
return ++(This->ref);
}
static ULONG WINAPI WBOIPO_Release(LPOLEINPLACEOBJECT iface)
{
IOleInPlaceObjectImpl *This = (IOleInPlaceObjectImpl *)iface;
/* static class, won't be freed */
TRACE("\n");
return --(This->ref);
}
static HRESULT WINAPI WBOIPO_GetWindow(LPOLEINPLACEOBJECT iface, HWND* phwnd)
{
#if 0
/* Create a fake window to fool MFC into believing that we actually
* have an implemented browser control. Avoids the assertion.
*/
HWND hwnd;
hwnd = CreateWindowA("BUTTON", "Web Control",
WS_HSCROLL | WS_VSCROLL | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 600,
400, NULL, NULL, NULL, NULL);
*phwnd = hwnd;
TRACE ("Returning hwnd = %d\n", hwnd);
#endif
FIXME("stub HWND* = %p\n", phwnd);
return S_OK;
}
static HRESULT WINAPI WBOIPO_ContextSensitiveHelp(LPOLEINPLACEOBJECT iface,
BOOL fEnterMode)
{
FIXME("stub fEnterMode = %d\n", fEnterMode);
return S_OK;
}
static HRESULT WINAPI WBOIPO_InPlaceDeactivate(LPOLEINPLACEOBJECT iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WBOIPO_UIDeactivate(LPOLEINPLACEOBJECT iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WBOIPO_SetObjectRects(LPOLEINPLACEOBJECT iface,
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
FIXME("stub PosRect = %p, ClipRect = %p\n", lprcPosRect, lprcClipRect);
return S_OK;
}
static HRESULT WINAPI WBOIPO_ReactivateAndUndo(LPOLEINPLACEOBJECT iface)
{
FIXME("stub \n");
return S_OK;
}
/**********************************************************************
* IOleInPlaceObject virtual function table for IE Web Browser component
*/
static IOleInPlaceObjectVtbl WBOIPO_Vtbl =
{
WBOIPO_QueryInterface,
WBOIPO_AddRef,
WBOIPO_Release,
WBOIPO_GetWindow,
WBOIPO_ContextSensitiveHelp,
WBOIPO_InPlaceDeactivate,
WBOIPO_UIDeactivate,
WBOIPO_SetObjectRects,
WBOIPO_ReactivateAndUndo
};
IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject = { &WBOIPO_Vtbl, 1 };
/**********************************************************************
* Implement the IOleControl interface
*/
static HRESULT WINAPI WBOC_QueryInterface(LPOLECONTROL iface,
REFIID riid, LPVOID *ppobj)
{
IOleControlImpl *This = (IOleControlImpl *)iface;
FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI WBOC_AddRef(LPOLECONTROL iface)
{
IOleControlImpl *This = (IOleControlImpl *)iface;
TRACE("\n");
return ++(This->ref);
}
static ULONG WINAPI WBOC_Release(LPOLECONTROL iface)
{
IOleControlImpl *This = (IOleControlImpl *)iface;
/* static class, won't be freed */
TRACE("\n");
return --(This->ref);
}
static HRESULT WINAPI WBOC_GetControlInfo(LPOLECONTROL iface, LPCONTROLINFO pCI)
{
FIXME("stub: LPCONTROLINFO = %p\n", pCI);
return S_OK;
}
static HRESULT WINAPI WBOC_OnMnemonic(LPOLECONTROL iface, struct tagMSG *pMsg)
{
FIXME("stub: MSG* = %p\n", pMsg);
return S_OK;
}
static HRESULT WINAPI WBOC_OnAmbientPropertyChange(LPOLECONTROL iface, DISPID dispID)
{
FIXME("stub: DISPID = %ld\n", dispID);
return S_OK;
}
static HRESULT WINAPI WBOC_FreezeEvents(LPOLECONTROL iface, BOOL bFreeze)
{
FIXME("stub: bFreeze = %d\n", bFreeze);
return S_OK;
}
/**********************************************************************
* IOleControl virtual function table for IE Web Browser component
*/
static IOleControlVtbl WBOC_Vtbl =
{
WBOC_QueryInterface,
WBOC_AddRef,
WBOC_Release,
WBOC_GetControlInfo,
WBOC_OnMnemonic,
WBOC_OnAmbientPropertyChange,
WBOC_FreezeEvents
};
IOleControlImpl SHDOCVW_OleControl = { &WBOC_Vtbl, 1 };

View file

@ -0,0 +1,198 @@
/*
* Implementation of IPersist 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 "wine/debug.h"
#include "shdocvw.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
/**********************************************************************
* Implement the IPersistStorage interface
*/
static HRESULT WINAPI WBPS_QueryInterface(LPPERSISTSTORAGE iface,
REFIID riid, LPVOID *ppobj)
{
IPersistStorageImpl *This = (IPersistStorageImpl *)iface;
FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI WBPS_AddRef(LPPERSISTSTORAGE iface)
{
IPersistStorageImpl *This = (IPersistStorageImpl *)iface;
TRACE("\n");
return ++(This->ref);
}
static ULONG WINAPI WBPS_Release(LPPERSISTSTORAGE iface)
{
IPersistStorageImpl *This = (IPersistStorageImpl *)iface;
/* static class, won't be freed */
TRACE("\n");
return --(This->ref);
}
static HRESULT WINAPI WBPS_GetClassID(LPPERSISTSTORAGE iface, CLSID *pClassID)
{
FIXME("stub: CLSID = %s\n", debugstr_guid(pClassID));
return S_OK;
}
static HRESULT WINAPI WBPS_IsDirty(LPPERSISTSTORAGE iface)
{
FIXME("stub\n");
return S_OK;
}
static HRESULT WINAPI WBPS_InitNew(LPPERSISTSTORAGE iface, LPSTORAGE pStg)
{
FIXME("stub: LPSTORAGE = %p\n", pStg);
return S_OK;
}
static HRESULT WINAPI WBPS_Load(LPPERSISTSTORAGE iface, LPSTORAGE pStg)
{
FIXME("stub: LPSTORAGE = %p\n", pStg);
return S_OK;
}
static HRESULT WINAPI WBPS_Save(LPPERSISTSTORAGE iface, LPSTORAGE pStg,
BOOL fSameAsLoad)
{
FIXME("stub: LPSTORAGE = %p, fSameAsLoad = %d\n", pStg, fSameAsLoad);
return S_OK;
}
static HRESULT WINAPI WBPS_SaveCompleted(LPPERSISTSTORAGE iface, LPSTORAGE pStgNew)
{
FIXME("stub: LPSTORAGE = %p\n", pStgNew);
return S_OK;
}
/**********************************************************************
* IPersistStorage virtual function table for IE Web Browser component
*/
static IPersistStorageVtbl WBPS_Vtbl =
{
WBPS_QueryInterface,
WBPS_AddRef,
WBPS_Release,
WBPS_GetClassID,
WBPS_IsDirty,
WBPS_InitNew,
WBPS_Load,
WBPS_Save,
WBPS_SaveCompleted
};
IPersistStorageImpl SHDOCVW_PersistStorage = { &WBPS_Vtbl, 1 };
/**********************************************************************
* Implement the IPersistStreamInit interface
*/
static HRESULT WINAPI WBPSI_QueryInterface(LPPERSISTSTREAMINIT iface,
REFIID riid, LPVOID *ppobj)
{
IPersistStreamInitImpl *This = (IPersistStreamInitImpl *)iface;
FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI WBPSI_AddRef(LPPERSISTSTREAMINIT iface)
{
IPersistStreamInitImpl *This = (IPersistStreamInitImpl *)iface;
TRACE("\n");
return ++(This->ref);
}
static ULONG WINAPI WBPSI_Release(LPPERSISTSTREAMINIT iface)
{
IPersistStreamInitImpl *This = (IPersistStreamInitImpl *)iface;
/* static class, won't be freed */
TRACE("\n");
return --(This->ref);
}
static HRESULT WINAPI WBPSI_GetClassID(LPPERSISTSTREAMINIT iface, CLSID *pClassID)
{
FIXME("stub: CLSID = %s\n", debugstr_guid(pClassID));
return S_OK;
}
static HRESULT WINAPI WBPSI_IsDirty(LPPERSISTSTREAMINIT iface)
{
FIXME("stub\n");
return S_OK;
}
static HRESULT WINAPI WBPSI_Load(LPPERSISTSTREAMINIT iface, LPSTREAM pStg)
{
FIXME("stub: LPSTORAGE = %p\n", pStg);
return S_OK;
}
static HRESULT WINAPI WBPSI_Save(LPPERSISTSTREAMINIT iface, LPSTREAM pStg,
BOOL fSameAsLoad)
{
FIXME("stub: LPSTORAGE = %p, fSameAsLoad = %d\n", pStg, fSameAsLoad);
return S_OK;
}
static HRESULT WINAPI WBPSI_GetSizeMax(LPPERSISTSTREAMINIT iface,
ULARGE_INTEGER *pcbSize)
{
FIXME("stub: ULARGE_INTEGER = %p\n", pcbSize);
return S_OK;
}
static HRESULT WINAPI WBPSI_InitNew(LPPERSISTSTREAMINIT iface)
{
FIXME("stub\n");
return S_OK;
}
/**********************************************************************
* IPersistStreamInit virtual function table for IE Web Browser component
*/
static IPersistStreamInitVtbl WBPSI_Vtbl =
{
WBPSI_QueryInterface,
WBPSI_AddRef,
WBPSI_Release,
WBPSI_GetClassID,
WBPSI_IsDirty,
WBPSI_Load,
WBPSI_Save,
WBPSI_GetSizeMax,
WBPSI_InitNew
};
IPersistStreamInitImpl SHDOCVW_PersistStreamInit = { &WBPSI_Vtbl, 1 };

View file

@ -0,0 +1,551 @@
/*
* self-registerable dll functions for shdocvw.dll
*
* Copyright (C) 2003 John K. Hohm
*
* 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 "winuser.h"
#include "winreg.h"
#include "winerror.h"
#include "shdocvw.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
/*
* Near the bottom of this file are the exported DllRegisterServer and
* DllUnregisterServer, which make all this worthwhile.
*/
/***********************************************************************
* interface for self-registering
*/
struct regsvr_interface
{
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
int num_methods; /* can be <0 to omit */
CLSID const *ps_clsid; /* can be NULL to omit */
CLSID const *ps_clsid32; /* can be NULL to omit */
};
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
struct regsvr_coclass
{
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
LPCSTR ips32; /* can be NULL to omit */
LPCSTR ips32_tmodel; /* can be NULL to omit */
LPCSTR progid; /* can be NULL to omit */
LPCSTR viprogid; /* can be NULL to omit */
LPCSTR progid_extra; /* can be NULL to omit */
};
static HRESULT register_coclasses(struct regsvr_coclass const *list);
static HRESULT unregister_coclasses(struct regsvr_coclass const *list);
/***********************************************************************
* static string constants
*/
static WCHAR const interface_keyname[10] = {
'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 };
static WCHAR const base_ifa_keyname[14] = {
'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c',
'e', 0 };
static WCHAR const num_methods_keyname[11] = {
'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 };
static WCHAR const ps_clsid_keyname[15] = {
'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
'i', 'd', 0 };
static WCHAR const ps_clsid32_keyname[17] = {
'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
'i', 'd', '3', '2', 0 };
static WCHAR const clsid_keyname[6] = {
'C', 'L', 'S', 'I', 'D', 0 };
static WCHAR const curver_keyname[7] = {
'C', 'u', 'r', 'V', 'e', 'r', 0 };
static WCHAR const ips_keyname[13] = {
'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
0 };
static WCHAR const ips32_keyname[15] = {
'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
'3', '2', 0 };
static WCHAR const progid_keyname[7] = {
'P', 'r', 'o', 'g', 'I', 'D', 0 };
static WCHAR const viprogid_keyname[25] = {
'V', 'e', 'r', 's', 'i', 'o', 'n', 'I', 'n', 'd', 'e', 'p',
'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D',
0 };
static char const tmodel_valuename[] = "ThreadingModel";
/***********************************************************************
* static helper functions
*/
static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid);
static LONG register_key_defvalueW(HKEY base, WCHAR const *name,
WCHAR const *value);
static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
char const *value);
static LONG register_progid(WCHAR const *clsid,
char const *progid, char const *curver_progid,
char const *name, char const *extra);
static LONG recursive_delete_key(HKEY key);
static LONG recursive_delete_keyA(HKEY base, char const *name);
static LONG recursive_delete_keyW(HKEY base, WCHAR const *name);
/***********************************************************************
* register_interfaces
*/
static HRESULT register_interfaces(struct regsvr_interface const *list)
{
LONG res = ERROR_SUCCESS;
HKEY interface_key;
res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &interface_key, NULL);
if (res != ERROR_SUCCESS) goto error_return;
for (; res == ERROR_SUCCESS && list->iid; ++list) {
WCHAR buf[39];
HKEY iid_key;
StringFromGUID2(list->iid, buf, 39);
res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &iid_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_interface_key;
if (list->name) {
res = RegSetValueExA(iid_key, NULL, 0, REG_SZ,
(CONST BYTE*)(list->name),
strlen(list->name) + 1);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (list->base_iid) {
register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (0 <= list->num_methods) {
static WCHAR const fmt[3] = { '%', 'd', 0 };
HKEY key;
res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &key, NULL);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
wsprintfW(buf, fmt, list->num_methods);
res = RegSetValueExW(key, NULL, 0, REG_SZ,
(CONST BYTE*)buf,
(lstrlenW(buf) + 1) * sizeof(WCHAR));
RegCloseKey(key);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (list->ps_clsid) {
register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (list->ps_clsid32) {
register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
error_close_iid_key:
RegCloseKey(iid_key);
}
error_close_interface_key:
RegCloseKey(interface_key);
error_return:
return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
}
/***********************************************************************
* unregister_interfaces
*/
static HRESULT unregister_interfaces(struct regsvr_interface const *list)
{
LONG res = ERROR_SUCCESS;
HKEY interface_key;
res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0,
KEY_READ | KEY_WRITE, &interface_key);
if (res == ERROR_FILE_NOT_FOUND) return S_OK;
if (res != ERROR_SUCCESS) goto error_return;
for (; res == ERROR_SUCCESS && list->iid; ++list) {
WCHAR buf[39];
StringFromGUID2(list->iid, buf, 39);
res = recursive_delete_keyW(interface_key, buf);
}
RegCloseKey(interface_key);
error_return:
return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
}
/***********************************************************************
* register_coclasses
*/
static HRESULT register_coclasses(struct regsvr_coclass const *list)
{
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL);
if (res != ERROR_SUCCESS) goto error_return;
for (; res == ERROR_SUCCESS && list->clsid; ++list) {
WCHAR buf[39];
HKEY clsid_key;
StringFromGUID2(list->clsid, buf, 39);
res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
if (list->name) {
res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ,
(CONST BYTE*)(list->name),
strlen(list->name) + 1);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->ips) {
res = register_key_defvalueA(clsid_key, ips_keyname, list->ips);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->ips32) {
HKEY ips32_key;
res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL,
&ips32_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ,
(CONST BYTE*)list->ips32,
lstrlenA(list->ips32) + 1);
if (res == ERROR_SUCCESS && list->ips32_tmodel)
res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ,
(CONST BYTE*)list->ips32_tmodel,
strlen(list->ips32_tmodel) + 1);
RegCloseKey(ips32_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->progid) {
res = register_key_defvalueA(clsid_key, progid_keyname,
list->progid);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
res = register_progid(buf, list->progid, NULL,
list->name, list->progid_extra);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->viprogid) {
res = register_key_defvalueA(clsid_key, viprogid_keyname,
list->viprogid);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
res = register_progid(buf, list->viprogid, list->progid,
list->name, list->progid_extra);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
error_close_clsid_key:
RegCloseKey(clsid_key);
}
error_close_coclass_key:
RegCloseKey(coclass_key);
error_return:
return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
}
/***********************************************************************
* unregister_coclasses
*/
static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
{
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0,
KEY_READ | KEY_WRITE, &coclass_key);
if (res == ERROR_FILE_NOT_FOUND) return S_OK;
if (res != ERROR_SUCCESS) goto error_return;
for (; res == ERROR_SUCCESS && list->clsid; ++list) {
WCHAR buf[39];
StringFromGUID2(list->clsid, buf, 39);
res = recursive_delete_keyW(coclass_key, buf);
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
if (list->progid) {
res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid);
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
}
if (list->viprogid) {
res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->viprogid);
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
}
}
error_close_coclass_key:
RegCloseKey(coclass_key);
error_return:
return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
}
/***********************************************************************
* regsvr_key_guid
*/
static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
{
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
return register_key_defvalueW(base, name, buf);
}
/***********************************************************************
* regsvr_key_defvalueW
*/
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
WCHAR const *value)
{
LONG res;
HKEY key;
res = RegCreateKeyExW(base, name, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &key, NULL);
if (res != ERROR_SUCCESS) return res;
res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
(lstrlenW(value) + 1) * sizeof(WCHAR));
RegCloseKey(key);
return res;
}
/***********************************************************************
* regsvr_key_defvalueA
*/
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
char const *value)
{
LONG res;
HKEY key;
res = RegCreateKeyExW(base, name, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &key, NULL);
if (res != ERROR_SUCCESS) return res;
res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
lstrlenA(value) + 1);
RegCloseKey(key);
return res;
}
/***********************************************************************
* regsvr_progid
*/
static LONG register_progid(
WCHAR const *clsid,
char const *progid,
char const *curver_progid,
char const *name,
char const *extra)
{
LONG res;
HKEY progid_key;
res = RegCreateKeyExA(HKEY_CLASSES_ROOT, progid, 0,
NULL, 0, KEY_READ | KEY_WRITE, NULL,
&progid_key, NULL);
if (res != ERROR_SUCCESS) return res;
if (name) {
res = RegSetValueExA(progid_key, NULL, 0, REG_SZ,
(CONST BYTE*)name, strlen(name) + 1);
if (res != ERROR_SUCCESS) goto error_close_progid_key;
}
if (clsid) {
res = register_key_defvalueW(progid_key, clsid_keyname, clsid);
if (res != ERROR_SUCCESS) goto error_close_progid_key;
}
if (curver_progid) {
res = register_key_defvalueA(progid_key, curver_keyname,
curver_progid);
if (res != ERROR_SUCCESS) goto error_close_progid_key;
}
if (extra) {
HKEY extra_key;
res = RegCreateKeyExA(progid_key, extra, 0,
NULL, 0, KEY_READ | KEY_WRITE, NULL,
&extra_key, NULL);
if (res == ERROR_SUCCESS)
RegCloseKey(extra_key);
}
error_close_progid_key:
RegCloseKey(progid_key);
return res;
}
/***********************************************************************
* recursive_delete_key
*/
static LONG recursive_delete_key(HKEY key)
{
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
HKEY subkey;
for (;;) {
cName = sizeof(subkey_name) / sizeof(WCHAR);
res = RegEnumKeyExW(key, 0, subkey_name, &cName,
NULL, NULL, NULL, NULL);
if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) {
res = ERROR_SUCCESS; /* presumably we're done enumerating */
break;
}
res = RegOpenKeyExW(key, subkey_name, 0,
KEY_READ | KEY_WRITE, &subkey);
if (res == ERROR_FILE_NOT_FOUND) continue;
if (res != ERROR_SUCCESS) break;
res = recursive_delete_key(subkey);
RegCloseKey(subkey);
if (res != ERROR_SUCCESS) break;
}
if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0);
return res;
}
/***********************************************************************
* recursive_delete_keyA
*/
static LONG recursive_delete_keyA(HKEY base, char const *name)
{
LONG res;
HKEY key;
res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key);
if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
if (res != ERROR_SUCCESS) return res;
res = recursive_delete_key(key);
RegCloseKey(key);
return res;
}
/***********************************************************************
* recursive_delete_keyW
*/
static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
{
LONG res;
HKEY key;
res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key);
if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
if (res != ERROR_SUCCESS) return res;
res = recursive_delete_key(key);
RegCloseKey(key);
return res;
}
/***********************************************************************
* coclass list
*/
static struct regsvr_coclass const coclass_list[] = {
{ &CLSID_WebBrowser,
"Microsoft Web Browser",
NULL,
"shdocvw.dll",
"Apartment",
"Shell.Explorer.2",
"Shell.Explorer"
},
{ NULL } /* list terminator */
};
/***********************************************************************
* interface list
*/
static struct regsvr_interface const interface_list[] = {
{ NULL } /* list terminator */
};
/***********************************************************************
* DllRegisterServer (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllRegisterServer(void)
{
HRESULT hr;
TRACE("\n");
hr = register_coclasses(coclass_list);
if (SUCCEEDED(hr))
hr = register_interfaces(interface_list);
return hr;
}
/***********************************************************************
* DllUnregisterServer (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllUnregisterServer(void)
{
HRESULT hr;
TRACE("\n");
hr = unregister_coclasses(coclass_list);
if (SUCCEEDED(hr))
hr = unregister_interfaces(interface_list);
return hr;
}

View file

@ -0,0 +1,193 @@
/*
* Header includes for shdocvw.dll
*
* 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
*/
#ifndef __WINE_SHDOCVW_H
#define __WINE_SHDOCVW_H
#define COM_NO_WINDOWS_H
/* FIXME: Is there a better way to deal with all these includes? */
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "ole2.h"
#include "olectl.h"
#include "shlobj.h"
#include "exdisp.h"
/**********************************************************************
* IClassFactory declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IClassFactoryVtbl *lpVtbl;
DWORD ref;
} IClassFactoryImpl;
extern IClassFactoryImpl SHDOCVW_ClassFactory;
/**********************************************************************
* IOleObject declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IOleObjectVtbl *lpVtbl;
DWORD ref;
} IOleObjectImpl;
extern IOleObjectImpl SHDOCVW_OleObject;
/**********************************************************************
* IOleInPlaceObject declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IOleInPlaceObjectVtbl *lpVtbl;
DWORD ref;
} IOleInPlaceObjectImpl;
extern IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject;
/**********************************************************************
* IOleControl declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IOleControlVtbl *lpVtbl;
DWORD ref;
} IOleControlImpl;
extern IOleControlImpl SHDOCVW_OleControl;
/**********************************************************************
* IWebBrowser declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IWebBrowserVtbl *lpVtbl;
DWORD ref;
} IWebBrowserImpl;
extern IWebBrowserImpl SHDOCVW_WebBrowser;
/**********************************************************************
* IProvideClassInfo declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IProvideClassInfoVtbl *lpVtbl;
DWORD ref;
} IProvideClassInfoImpl;
extern IProvideClassInfoImpl SHDOCVW_ProvideClassInfo;
/**********************************************************************
* IProvideClassInfo2 declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IProvideClassInfo2Vtbl *lpVtbl;
DWORD ref;
} IProvideClassInfo2Impl;
extern IProvideClassInfo2Impl SHDOCVW_ProvideClassInfo2;
/**********************************************************************
* IPersistStorage declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IPersistStorageVtbl *lpVtbl;
DWORD ref;
} IPersistStorageImpl;
extern IPersistStorageImpl SHDOCVW_PersistStorage;
/**********************************************************************
* IPersistStreamInit declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IPersistStreamInitVtbl *lpVtbl;
DWORD ref;
} IPersistStreamInitImpl;
extern IPersistStreamInitImpl SHDOCVW_PersistStreamInit;
/**********************************************************************
* IQuickActivate declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IQuickActivateVtbl *lpVtbl;
DWORD ref;
} IQuickActivateImpl;
extern IQuickActivateImpl SHDOCVW_QuickActivate;
/**********************************************************************
* IConnectionPointContainer declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IConnectionPointContainerVtbl *lpVtbl;
DWORD ref;
} IConnectionPointContainerImpl;
extern IConnectionPointContainerImpl SHDOCVW_ConnectionPointContainer;
/**********************************************************************
* IConnectionPoint declaration for SHDOCVW.DLL
*/
typedef struct
{
/* IUnknown fields */
IConnectionPointVtbl *lpVtbl;
DWORD ref;
} IConnectionPointImpl;
extern IConnectionPointImpl SHDOCVW_ConnectionPoint;
#endif /* __WINE_SHDOCVW_H */

View file

@ -0,0 +1,43 @@
/*
* Copyright 2004 Mike McCormack 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 "windef.h"
#include "winuser.h"
#include "winnls.h"
#include "commctrl.h"
#include "version.rc"
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
100 DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 62
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Downloading the Mozilla Active X control"
FONT 8, "Helv"
{
CONTROL "Progress1",1000,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12
LTEXT "", 104, 10, 30, 200, 10, SS_CENTER
PUSHBUTTON "Cancel", IDCANCEL, 85, 44, 50, 15, WS_GROUP | WS_TABSTOP
}
STRINGTABLE
BEGIN
1001 "This application is requesting an ActiveX browser object\n" \
"but the Mozilla Active X control is currently not installed." \
"Do you wish to download and install it?"
END

View file

@ -0,0 +1,129 @@
# ordinal exports
101 stub -noname IEWinMain
102 stub -noname CreateShortcutInDirA
103 stub -noname CreateShortcutInDirW
104 stub -noname WhichPlatformFORWARD
105 stub -noname CreateShortcutInDirEx
106 stub HlinkFindFrame
107 stub SetShellOfflineState
108 stub AddUrlToFavorites
110 stdcall -noname WinList_Init()
111 stub -noname WinList_Terminate
115 stub -noname CreateFromDesktop
116 stub -noname DDECreatePostNotify
117 stub -noname DDEHandleViewFolderNotify
@ stub IEAboutBox
118 stdcall -noname ShellDDEInit(long)
119 stub -noname SHCreateDesktop
120 stub -noname SHDesktopMessageLoop
121 stub -noname StopWatchModeFORWARD
122 stub -noname StopWatchFlushFORWARD
123 stub -noname StopWatchFORWARD
125 stdcall -noname RunInstallUninstallStubs()
130 stub -noname RunInstallUninstallStubs2
131 stub -noname SHCreateSplashScreen
135 stub -noname IsFileUrl
136 stub -noname IsFileUrlW
137 stub -noname PathIsFilePath
138 stub -noname URLSubLoadString
139 stub -noname OpenPidlOrderStream
140 stub -noname DragDrop
141 stub -noname IEInvalidateImageList
142 stub -noname IEMapPIDLToSystemImageListIndex
143 stub -noname ILIsWeb
145 stub -noname IEGetAttributesOf
146 stub -noname IEBindToObject
147 stub -noname IEGetNameAndFlags
148 stub -noname IEGetDisplayName
149 stub -noname IEBindToObjectEx
150 stub -noname _GetStdLocation
151 stub -noname URLSubRegQueryA
152 stub -noname CShellUIHelper_CreateInstance2
153 stub -noname IsURLChild
158 stub -noname SHRestricted2A
159 stub -noname SHRestricted2W
160 stub -noname SHIsRestricted2W
161 stub @ # CSearchAssistantOC::OnDraw
162 stub -noname CDDEAuto_Navigate
163 stub SHAddSubscribeFavorite
164 stub -noname ResetProfileSharing
165 stub -noname URLSubstitution
167 stub -noname IsIEDefaultBrowser
169 stub -noname ParseURLFromOutsideSourceA
170 stub -noname ParseURLFromOutsideSourceW
171 stub -noname _DeletePidlDPA
172 stub -noname IURLQualify
173 stub -noname SHIsRestricted
174 stub -noname SHIsGlobalOffline
175 stub -noname DetectAndFixAssociations
176 stub -noname EnsureWebViewRegSettings
177 stub -noname WinList_NotifyNewLocation
178 stub -noname WinList_FindFolderWindow
179 stub -noname WinList_GetShellWindows
180 stub -noname WinList_RegisterPending
181 stub -noname WinList_Revoke
183 stub -noname SHMapNbspToSp
185 stub -noname FireEvent_Quit
187 stub -noname SHDGetPageLocation
188 stub -noname SHIEErrorMsgBox
189 stub -noname IEGetDisplayName
190 stub -noname SHRunIndirectRegClientCommandForward
191 stub -noname SHIsRegisteredClient
192 stub -noname SHGetHistoryPIDL
194 stub -noname IECleanUpAutomationObject
195 stub -noname IEOnFirstBrowserCreation
196 stub -noname IEDDE_WindowDestroyed
197 stub -noname IEDDE_NewWindow
198 stub -noname IsErrorUrl
199 stub @
200 stub -noname SHGetViewStream
203 stub -noname NavToUrlUsingIEA
204 stub -noname NavToUrlUsingIEW
208 stub -noname SearchForElementInHead
209 stub -noname JITCoCreateInstance
210 stub -noname UrlHitsNetW
211 stub -noname ClearAutoSuggestForForms
212 stub -noname GetLinkInfo
213 stub -noname UseCustomInternetSearch
214 stub -noname GetSearchAssistantUrlW
215 stub -noname GetSearchAssistantUrlA
216 stub -noname GetDefaultInternetSearchUrlW
217 stub -noname GetDefaultInternetSearchUrlA
218 stub -noname IEParseDisplayNameWithBCW
219 stub -noname IEILIsEqual
220 stub @
221 stub -noname IECreateFromPathCPWithBCA
222 stub -noname IECreateFromPathCPWithBCW
223 stub -noname ResetWebSettings
224 stub -noname IsResetWebSettingsRequired
225 stub -noname PrepareURLForDisplayUTF8W
226 stub -noname IEIsLinkSafe
227 stub -noname SHUseClassicToolbarGlyphs
228 stub -noname SafeOpenPromptForShellExec
229 stub -noname SafeOpenPromptForPackager
@ stdcall -private DllCanUnloadNow() SHDOCVW_DllCanUnloadNow
@ stdcall -private DllGetClassObject(long long ptr) SHDOCVW_DllGetClassObject
@ stdcall DllGetVersion(ptr) SHDOCVW_DllGetVersion
@ stdcall DllInstall(long wstr) SHDOCVW_DllInstall
@ stdcall -private DllRegisterServer() SHDOCVW_DllRegisterServer
@ stdcall -private DllUnregisterServer() SHDOCVW_DllUnregisterServer
@ stub DllRegisterWindowClasses
@ stub DoAddToFavDlg
@ stub DoAddToFavDlgW
@ stub DoFileDownload
@ stub DoFileDownloadEx
@ stub DoOrganizeFavDlg
@ stub DoOrganizeFavDlgW
@ stub DoPrivacyDlg
@ stub HlinkFrameNavigate
@ stub HlinkFrameNavigateNHL
@ stub ImportPrivacySettings
@ stub InstallReg_RunDLL
@ stub IEWriteErrorLog
@ stub OpenURL
@ stub SHGetIDispatchForFolder
@ stdcall SetQueryNetSessionCount(long)
@ stub SoftwareUpdateMessageBox
@ stub URLQualifyA
@ stub URLQualifyW

View file

@ -0,0 +1,553 @@
/*
* SHDOCVW - Internet Explorer Web Control
*
* Copyright 2001 John R. Sheets (for CodeWeavers)
* Copyright 2004 Mike McCormack (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 "config.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#define COBJMACROS
#define COM_NO_WINDOWS_H
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "shlwapi.h"
#include "shdocvw.h"
#include "uuids.h"
#include "urlmon.h"
#include "wine/unicode.h"
#include "wine/debug.h"
#include "initguid.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
static const WCHAR szMozDlPath[] = {
'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\',
's','h','d','o','c','v','w',0
};
DEFINE_GUID( CLSID_MozillaBrowser, 0x1339B54C,0x3453,0x11D2,0x93,0xB9,0x00,0x00,0x00,0x00,0x00,0x00);
typedef HRESULT (WINAPI *fnGetClassObject)(REFCLSID rclsid, REFIID iid, LPVOID *ppv);
HINSTANCE shdocvw_hinstance = 0;
static HMODULE SHDOCVW_hshell32 = 0;
static HMODULE hMozCtl = (HMODULE)~0UL;
/* convert a guid to a wide character string */
static void SHDOCVW_guid2wstr( const GUID *guid, LPWSTR wstr )
{
char str[40];
sprintf(str, "{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
guid->Data1, guid->Data2, guid->Data3,
guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
MultiByteToWideChar( CP_ACP, 0, str, -1, wstr, 40 );
}
static BOOL SHDOCVW_GetMozctlPath( LPWSTR szPath, DWORD sz )
{
DWORD r, type;
BOOL ret = FALSE;
HKEY hkey;
static const WCHAR szPre[] = {
'S','o','f','t','w','a','r','e','\\',
'C','l','a','s','s','e','s','\\',
'C','L','S','I','D','\\',0 };
static const WCHAR szPost[] = {
'\\','I','n','p','r','o','c','S','e','r','v','e','r','3','2',0 };
WCHAR szRegPath[(sizeof(szPre)+sizeof(szPost))/sizeof(WCHAR)+40];
strcpyW( szRegPath, szPre );
SHDOCVW_guid2wstr( &CLSID_MozillaBrowser, &szRegPath[strlenW(szRegPath)] );
strcatW( szRegPath, szPost );
TRACE("key = %s\n", debugstr_w( szRegPath ) );
r = RegOpenKeyW( HKEY_LOCAL_MACHINE, szRegPath, &hkey );
if( r != ERROR_SUCCESS )
return FALSE;
r = RegQueryValueExW( hkey, NULL, NULL, &type, (LPBYTE)szPath, &sz );
ret = ( r == ERROR_SUCCESS ) && ( type == REG_SZ );
RegCloseKey( hkey );
return ret;
}
/*************************************************************************
* SHDOCVW DllMain
*/
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
{
TRACE("%p 0x%lx %p\n", hinst, fdwReason, fImpLoad);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
shdocvw_hinstance = hinst;
break;
case DLL_PROCESS_DETACH:
if (SHDOCVW_hshell32) FreeLibrary(SHDOCVW_hshell32);
if (hMozCtl && hMozCtl != (HMODULE)~0UL) FreeLibrary(hMozCtl);
break;
}
return TRUE;
}
/*************************************************************************
* DllCanUnloadNow (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllCanUnloadNow(void)
{
FIXME("(void): stub\n");
return S_FALSE;
}
/*************************************************************************
* SHDOCVW_TryDownloadMozillaControl
*/
typedef struct _IBindStatusCallbackImpl {
IBindStatusCallbackVtbl *vtbl;
DWORD ref;
HWND hDialog;
BOOL *pbCancelled;
} IBindStatusCallbackImpl;
static HRESULT WINAPI
dlQueryInterface( IBindStatusCallback* This, REFIID riid, void** ppvObject )
{
if( IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid, &IID_IBindStatusCallback))
{
IBindStatusCallback_AddRef( This );
*ppvObject = This;
return S_OK;
}
return E_NOINTERFACE;
}
static ULONG WINAPI dlAddRef( IBindStatusCallback* iface )
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
return InterlockedIncrement( &This->ref );
}
static ULONG WINAPI dlRelease( IBindStatusCallback* iface )
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
DWORD ref = InterlockedDecrement( &This->ref );
if( !ref )
{
DestroyWindow( This->hDialog );
HeapFree( GetProcessHeap(), 0, This );
}
return ref;
}
static HRESULT WINAPI
dlOnStartBinding( IBindStatusCallback* iface, DWORD dwReserved, IBinding* pib)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlGetPriority( IBindStatusCallback* iface, LONG* pnPriority)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlOnLowResource( IBindStatusCallback* iface, DWORD reserved)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlOnProgress( IBindStatusCallback* iface, ULONG ulProgress,
ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
{
IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface;
HWND hItem;
LONG r;
hItem = GetDlgItem( This->hDialog, 1000 );
if( hItem && ulProgressMax )
SendMessageW(hItem,PBM_SETPOS,(ulProgress*100)/ulProgressMax,0);
hItem = GetDlgItem(This->hDialog, 104);
if( hItem )
SendMessageW(hItem,WM_SETTEXT, 0, (LPARAM) szStatusText);
SetLastError(0);
r = GetWindowLongPtrW( This->hDialog, GWLP_USERDATA );
if( r || GetLastError() )
{
*This->pbCancelled = TRUE;
ERR("Cancelled\n");
return E_ABORT;
}
return S_OK;
}
static HRESULT WINAPI
dlOnStopBinding( IBindStatusCallback* iface, HRESULT hresult, LPCWSTR szError)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlGetBindInfo( IBindStatusCallback* iface, DWORD* grfBINDF, BINDINFO* pbindinfo)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlOnDataAvailable( IBindStatusCallback* iface, DWORD grfBSCF,
DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
{
ERR("\n");
return S_OK;
}
static HRESULT WINAPI
dlOnObjectAvailable( IBindStatusCallback* iface, REFIID riid, IUnknown* punk)
{
ERR("\n");
return S_OK;
}
struct IBindStatusCallbackVtbl dlVtbl =
{
dlQueryInterface,
dlAddRef,
dlRelease,
dlOnStartBinding,
dlGetPriority,
dlOnLowResource,
dlOnProgress,
dlOnStopBinding,
dlGetBindInfo,
dlOnDataAvailable,
dlOnObjectAvailable
};
static IBindStatusCallback* create_dl(HWND dlg, BOOL *pbCancelled)
{
IBindStatusCallbackImpl *This;
This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
This->vtbl = &dlVtbl;
This->ref = 1;
This->hDialog = dlg;
This->pbCancelled = pbCancelled;
return (IBindStatusCallback*) This;
}
static DWORD WINAPI ThreadFunc( LPVOID info )
{
IBindStatusCallback *dl;
static const WCHAR szUrlVal[] = {'M','o','z','i','l','l','a','U','r','l',0};
WCHAR path[MAX_PATH], szUrl[MAX_PATH];
LPWSTR p;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HWND hDlg = info;
DWORD r, sz, type;
HKEY hkey;
BOOL bCancelled = FALSE;
/* find the name of the thing to download */
szUrl[0] = 0;
r = RegOpenKeyW( HKEY_LOCAL_MACHINE, szMozDlPath, &hkey );
if( r == ERROR_SUCCESS )
{
sz = MAX_PATH;
r = RegQueryValueExW( hkey, szUrlVal, NULL, &type, (LPBYTE)szUrl, &sz );
RegCloseKey( hkey );
}
if( r != ERROR_SUCCESS )
goto end;
/* built the path for the download */
p = strrchrW( szUrl, '/' );
if (!p)
goto end;
if (!GetTempPathW( MAX_PATH, path ))
goto end;
strcatW( path, p+1 );
/* download it */
dl = create_dl(info, &bCancelled);
r = URLDownloadToFileW( NULL, szUrl, path, 0, dl );
if( dl )
IBindStatusCallback_Release( dl );
if( (r != S_OK) || bCancelled )
goto end;
/* run it */
memset( &si, 0, sizeof si );
si.cb = sizeof si;
r = CreateProcessW( path, NULL, NULL, NULL, 0, 0, NULL, NULL, &si, &pi );
if( !r )
goto end;
WaitForSingleObject( pi.hProcess, INFINITE );
end:
EndDialog( hDlg, 0 );
return 0;
}
static INT_PTR CALLBACK
dlProc ( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HANDLE hThread;
DWORD ThreadId;
HWND hItem;
switch (uMsg)
{
case WM_INITDIALOG:
SetWindowLongPtrW( hwndDlg, GWLP_USERDATA, 0 );
hItem = GetDlgItem(hwndDlg, 1000);
if( hItem )
{
SendMessageW(hItem,PBM_SETRANGE,0,MAKELPARAM(0,100));
SendMessageW(hItem,PBM_SETPOS,0,0);
}
hThread = CreateThread(NULL,0,ThreadFunc,hwndDlg,0,&ThreadId);
if (!hThread)
return FALSE;
return TRUE;
case WM_COMMAND:
if( wParam == IDCANCEL )
SetWindowLongPtrW( hwndDlg, GWLP_USERDATA, 1 );
return FALSE;
default:
return FALSE;
}
}
static BOOL SHDOCVW_TryDownloadMozillaControl()
{
DWORD r;
WCHAR buf[0x100];
static const WCHAR szWine[] = { 'W','i','n','e',0 };
HANDLE hsem;
SetLastError( ERROR_SUCCESS );
hsem = CreateSemaphoreA( NULL, 0, 1, "mozctl_install_semaphore");
if( GetLastError() != ERROR_ALREADY_EXISTS )
{
LoadStringW( shdocvw_hinstance, 1001, buf, sizeof buf/sizeof(WCHAR) );
r = MessageBoxW(NULL, buf, szWine, MB_YESNO | MB_ICONQUESTION);
if( r != IDYES )
return FALSE;
DialogBoxW(shdocvw_hinstance, MAKEINTRESOURCEW(100), 0, dlProc);
}
else
WaitForSingleObject( hsem, INFINITE );
ReleaseSemaphore( hsem, 1, NULL );
CloseHandle( hsem );
return TRUE;
}
static BOOL SHDOCVW_TryLoadMozillaControl()
{
WCHAR szPath[MAX_PATH];
BOOL bTried = FALSE;
if( hMozCtl != (HMODULE)~0UL )
return hMozCtl ? TRUE : FALSE;
while( 1 )
{
if( SHDOCVW_GetMozctlPath( szPath, sizeof szPath ) )
{
hMozCtl = LoadLibraryExW(szPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
if( hMozCtl )
return TRUE;
}
if( bTried )
{
MESSAGE("You need to install the Mozilla ActiveX control to\n");
MESSAGE("use Wine's builtin CLSID_WebBrowser from SHDOCVW.DLL\n");
return FALSE;
}
SHDOCVW_TryDownloadMozillaControl();
bTried = TRUE;
}
return TRUE;
}
/*************************************************************************
* DllGetClassObject (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
TRACE("\n");
if( IsEqualGUID( &CLSID_WebBrowser, rclsid ) &&
SHDOCVW_TryLoadMozillaControl() )
{
HRESULT r;
fnGetClassObject pGetClassObject;
TRACE("WebBrowser class %s\n", debugstr_guid(rclsid) );
pGetClassObject = (fnGetClassObject)
GetProcAddress( hMozCtl, "DllGetClassObject" );
if( !pGetClassObject )
return CLASS_E_CLASSNOTAVAILABLE;
r = pGetClassObject( &CLSID_MozillaBrowser, riid, ppv );
TRACE("r = %08lx *ppv = %p\n", r, *ppv );
return r;
}
if (IsEqualGUID(&IID_IClassFactory, riid))
{
/* Pass back our shdocvw class factory */
*ppv = (LPVOID)&SHDOCVW_ClassFactory;
IClassFactory_AddRef((IClassFactory*)&SHDOCVW_ClassFactory);
return S_OK;
}
return CLASS_E_CLASSNOTAVAILABLE;
}
/***********************************************************************
* DllGetVersion (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllGetVersion(DLLVERSIONINFO *info)
{
if (info->cbSize != sizeof(DLLVERSIONINFO)) FIXME("support DLLVERSIONINFO2\n");
/* this is what IE6 on Windows 98 reports */
info->dwMajorVersion = 6;
info->dwMinorVersion = 0;
info->dwBuildNumber = 2600;
info->dwPlatformID = DLLVER_PLATFORM_WINDOWS;
return NOERROR;
}
/*************************************************************************
* DllInstall (SHDOCVW.@)
*/
HRESULT WINAPI SHDOCVW_DllInstall(BOOL bInstall, LPCWSTR cmdline)
{
FIXME("(%s, %s): stub!\n", bInstall ? "TRUE":"FALSE", debugstr_w(cmdline));
return S_OK;
}
/*************************************************************************
* SHDOCVW_LoadShell32
*
* makes sure the handle to shell32 is valid
*/
BOOL SHDOCVW_LoadShell32(void)
{
if (SHDOCVW_hshell32)
return TRUE;
return ((SHDOCVW_hshell32 = LoadLibraryA("shell32.dll")) != NULL);
}
/***********************************************************************
* @ (SHDOCVW.110)
*
* Called by Win98 explorer.exe main binary, definitely has 0
* parameters.
*/
DWORD WINAPI WinList_Init(void)
{
FIXME("(), stub!\n");
return 0x0deadfeed;
}
/***********************************************************************
* @ (SHDOCVW.118)
*
* Called by Win98 explorer.exe main binary, definitely has only one
* parameter.
*/
static BOOL (WINAPI *pShellDDEInit)(BOOL start) = NULL;
BOOL WINAPI ShellDDEInit(BOOL start)
{
TRACE("(%d)\n", start);
if (!pShellDDEInit)
{
if (!SHDOCVW_LoadShell32())
return FALSE;
pShellDDEInit = GetProcAddress(SHDOCVW_hshell32, (LPCSTR)188);
}
if (pShellDDEInit)
return pShellDDEInit(start);
else
return FALSE;
}
/***********************************************************************
* @ (SHDOCVW.125)
*
* Called by Win98 explorer.exe main binary, definitely has 0
* parameters.
*/
DWORD WINAPI RunInstallUninstallStubs(void)
{
FIXME("(), stub!\n");
return 0x0deadbee;
}
/***********************************************************************
* SetQueryNetSessionCount (SHDOCVW.@)
*/
DWORD WINAPI SetQueryNetSessionCount(DWORD arg)
{
FIXME("(%lu), stub!\n", arg);
return 0;
}

View file

@ -0,0 +1,27 @@
/*
* Copyright 2003 Francois Gouget (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
*/
#define WINE_OLESELFREGISTER
#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#define WINE_FILENAME_STR "shdocvw.dll"
#define WINE_FILEVERSION 5,50,0,0
#define WINE_FILEVERSION_STR "5.50.0.0"
#define WINE_PRODUCTVERSION 5,50,0,0
#define WINE_PRODUCTVERSION_STR "5.50"
#include "wine/wine_common_ver.rc"

View file

@ -0,0 +1,280 @@
/*
* Implementation of IWebBrowser interface 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 "wine/debug.h"
#include "shdocvw.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
/**********************************************************************
* Implement the IWebBrowser interface
*/
static HRESULT WINAPI WB_QueryInterface(IWebBrowser *iface, REFIID riid, LPVOID *ppobj)
{
IWebBrowserImpl *This = (IWebBrowserImpl *)iface;
FIXME("(%p)->(%s,%p),stub!\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
static ULONG WINAPI WB_AddRef(IWebBrowser *iface)
{
IWebBrowserImpl *This = (IWebBrowserImpl *)iface;
TRACE("\n");
return ++(This->ref);
}
static ULONG WINAPI WB_Release(IWebBrowser *iface)
{
IWebBrowserImpl *This = (IWebBrowserImpl *)iface;
/* static class, won't be freed */
TRACE("\n");
return --(This->ref);
}
/* IDispatch methods */
static HRESULT WINAPI WB_GetTypeInfoCount(IWebBrowser *iface, UINT *pctinfo)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_GetTypeInfo(IWebBrowser *iface, UINT iTInfo, LCID lcid,
LPTYPEINFO *ppTInfo)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_GetIDsOfNames(IWebBrowser *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames,
LCID lcid, DISPID *rgDispId)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_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;
}
/* IWebBrowser methods */
static HRESULT WINAPI WB_GoBack(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_GoForward(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_GoHome(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_GoSearch(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_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,
PostData, Headers);
return S_OK;
}
static HRESULT WINAPI WB_Refresh(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_Refresh2(IWebBrowser *iface, VARIANT *Level)
{
FIXME("stub: %p\n", Level);
return S_OK;
}
static HRESULT WINAPI WB_Stop(IWebBrowser *iface)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Application(IWebBrowser *iface, IDispatch **ppDisp)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Parent(IWebBrowser *iface, IDispatch **ppDisp)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Container(IWebBrowser *iface, IDispatch **ppDisp)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Document(IWebBrowser *iface, IDispatch **ppDisp)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_TopLevelContainer(IWebBrowser *iface, VARIANT_BOOL *pBool)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Type(IWebBrowser *iface, BSTR *Type)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Left(IWebBrowser *iface, long *pl)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_put_Left(IWebBrowser *iface, long Left)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Top(IWebBrowser *iface, long *pl)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_put_Top(IWebBrowser *iface, long Top)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Width(IWebBrowser *iface, long *pl)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_put_Width(IWebBrowser *iface, long Width)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Height(IWebBrowser *iface, long *pl)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_put_Height(IWebBrowser *iface, long Height)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_LocationName(IWebBrowser *iface, BSTR *LocationName)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_LocationURL(IWebBrowser *iface, BSTR *LocationURL)
{
FIXME("stub \n");
return S_OK;
}
static HRESULT WINAPI WB_get_Busy(IWebBrowser *iface, VARIANT_BOOL *pBool)
{
FIXME("stub \n");
return S_OK;
}
/**********************************************************************
* IWebBrowser virtual function table for IE Web Browser component
*/
static IWebBrowserVtbl WB_Vtbl =
{
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
};
IWebBrowserImpl SHDOCVW_WebBrowser = { &WB_Vtbl, 1 };