| /* |
| * CLSID_WebBrowser |
| * FIXME - stub |
| * |
| * Copyright 2001 John R. Sheets (for CodeWeavers) |
| * Copyright 2002 Hidenori Takeshima |
| * |
| * 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 <string.h> |
| #include "winbase.h" |
| #include "winuser.h" |
| #include "wingdi.h" |
| #include "ole2.h" |
| |
| #include "wine/obj_base.h" |
| #include "wine/obj_storage.h" |
| #include "wine/obj_misc.h" |
| #include "wine/obj_moniker.h" |
| #include "wine/obj_inplace.h" |
| #include "wine/obj_dataobject.h" |
| #include "wine/obj_oleobj.h" |
| #include "wine/obj_oleaut.h" |
| #include "wine/obj_olefont.h" |
| #include "wine/obj_dragdrop.h" |
| #include "wine/obj_oleview.h" |
| #include "wine/obj_control.h" |
| #include "wine/obj_connection.h" |
| #include "wine/obj_property.h" |
| #include "wine/obj_oleundo.h" |
| #include "wine/obj_webbrowser.h" |
| |
| #include "wine/debug.h" |
| WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); |
| |
| #include "shdocvw.h" |
| |
| |
| typedef struct CWebBrowserImpl |
| { |
| COMIMPL_IUnkImpl vfunk; /* must be the first member of this struct */ |
| struct { ICOM_VFIELD(IOleObject); } vfoleobj; |
| struct { ICOM_VFIELD(IOleInPlaceObject); } vfoleinpobj; |
| struct { ICOM_VFIELD(IOleControl); } vfolectl; |
| struct { ICOM_VFIELD(IWebBrowser); } vfwbrowser; |
| struct { ICOM_VFIELD(IProvideClassInfo2); } vfpcinfo; |
| struct { ICOM_VFIELD(IPersistStorage); } vfpstrg; |
| struct { ICOM_VFIELD(IPersistStreamInit); } vfpstrminit; |
| struct { ICOM_VFIELD(IQuickActivate); } vfqactive; |
| struct { ICOM_VFIELD(IConnectionPointContainer); } vfcpointcont; |
| |
| /* CWebBrowserImpl variables */ |
| |
| } CWebBrowserImpl; |
| |
| #define CWebBrowserImpl_THIS(iface,member) CWebBrowserImpl* This = ((CWebBrowserImpl*)(((char*)iface)-offsetof(CWebBrowserImpl,member))) |
| |
| |
| static COMIMPL_IFEntry IFEntries[] = |
| { |
| { &IID_IOleObject, offsetof(CWebBrowserImpl,vfoleobj)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IOleInPlaceObject, offsetof(CWebBrowserImpl,vfoleinpobj)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IOleControl, offsetof(CWebBrowserImpl,vfolectl)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IWebBrowser, offsetof(CWebBrowserImpl,vfwbrowser)-offsetof(CWebBrowserImpl,vfunk) }, |
| /* { &IID_IWebBrowserApp, offsetof(CWebBrowserImpl,vfwbrowser)-offsetof(CWebBrowserImpl,vfunk) }, */ |
| /* { &IID_IWebBrowser2, offsetof(CWebBrowserImpl,vfwbrowser)-offsetof(CWebBrowserImpl,vfunk) }, */ |
| { &IID_IProvideClassInfo, offsetof(CWebBrowserImpl,vfpcinfo)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IProvideClassInfo2, offsetof(CWebBrowserImpl,vfpcinfo)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IPersist, offsetof(CWebBrowserImpl,vfpstrg)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IPersistStorage, offsetof(CWebBrowserImpl,vfpstrg)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IPersistStreamInit, offsetof(CWebBrowserImpl,vfpstrminit)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IQuickActivate, offsetof(CWebBrowserImpl,vfqactive)-offsetof(CWebBrowserImpl,vfunk) }, |
| { &IID_IConnectionPointContainer, offsetof(CWebBrowserImpl,vfcpointcont)-offsetof(CWebBrowserImpl,vfunk) }, |
| }; |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IOleObject |
| */ |
| |
| /********************************************************************** |
| * Implement the IOleObject interface for the web browser component |
| * |
| * Based on DefaultHandler code in dlls/ole32/defaulthandler.c. |
| */ |
| /************************************************************************ |
| * 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) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_AddRef (IUnknown) |
| */ |
| static ULONG WINAPI WBOOBJ_AddRef(LPOLEOBJECT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_Release (IUnknown) |
| */ |
| static ULONG WINAPI WBOOBJ_Release(LPOLEOBJECT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_SetClientSite (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_SetClientSite(LPOLEOBJECT iface, |
| LPOLECLIENTSITE pClientSite) |
| { |
| FIXME("stub: (%p, %p)\n", iface, pClientSite); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_GetClientSite (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_GetClientSite(LPOLEOBJECT iface, |
| LPOLECLIENTSITE* ppClientSite) |
| { |
| FIXME("stub: (%p)\n", *ppClientSite); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * 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 E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_Close (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_Close(LPOLEOBJECT iface, DWORD dwSaveOption) |
| { |
| FIXME("stub: ()\n"); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_SetMoniker (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_SetMoniker(LPOLEOBJECT iface, |
| DWORD dwWhichMoniker, IMoniker* pmk) |
| { |
| FIXME("stub: (%p, %ld, %p)\n", iface, dwWhichMoniker, pmk); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_GetMoniker (IOleObject) |
| * |
| * Delegate this request to the client site if we have one. |
| */ |
| static HRESULT WINAPI WBOOBJ_GetMoniker(LPOLEOBJECT iface, DWORD dwAssign, |
| DWORD dwWhichMoniker, LPMONIKER *ppmk) |
| { |
| FIXME("stub (%p, %ld, %ld, %p)\n", iface, dwAssign, dwWhichMoniker, ppmk); |
| return E_UNSPEC; |
| } |
| |
| /************************************************************************ |
| * 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 E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * 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 E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * 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 E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_Advise (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_Advise(LPOLEOBJECT iface, IAdviseSink* pAdvSink, |
| DWORD* pdwConnection) |
| { |
| FIXME("stub: (%p, %p, %p)\n", iface, pAdvSink, pdwConnection); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_Unadvise (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_Unadvise(LPOLEOBJECT iface, DWORD dwConnection) |
| { |
| FIXME("stub: (%p, %ld)\n", iface, dwConnection); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * WBOOBJ_EnumAdvise (IOleObject) |
| */ |
| static HRESULT WINAPI WBOOBJ_EnumAdvise(LPOLEOBJECT iface, IEnumSTATDATA** ppenumAdvise) |
| { |
| FIXME("stub: (%p, %p)\n", iface, ppenumAdvise); |
| return E_NOTIMPL; |
| } |
| |
| /************************************************************************ |
| * 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 hres; |
| } |
| |
| /************************************************************************ |
| * 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 ICOM_VTABLE(IOleObject) WBOOBJ_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| 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 |
| }; |
| |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IOleInPlaceObject |
| */ |
| |
| |
| /********************************************************************** |
| * Implement the IOleInPlaceObject interface |
| */ |
| |
| static HRESULT WINAPI WBOIPO_QueryInterface(LPOLEINPLACEOBJECT iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleinpobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBOIPO_AddRef(LPOLEINPLACEOBJECT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleinpobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBOIPO_Release(LPOLEINPLACEOBJECT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfoleinpobj); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| 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 E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOIPO_ContextSensitiveHelp(LPOLEINPLACEOBJECT iface, |
| BOOL fEnterMode) |
| { |
| FIXME("stub fEnterMode = %d\n", fEnterMode); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOIPO_InPlaceDeactivate(LPOLEINPLACEOBJECT iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOIPO_UIDeactivate(LPOLEINPLACEOBJECT iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOIPO_SetObjectRects(LPOLEINPLACEOBJECT iface, |
| LPCRECT lprcPosRect, LPCRECT lprcClipRect) |
| { |
| FIXME("stub PosRect = %p, ClipRect = %p\n", lprcPosRect, lprcClipRect); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOIPO_ReactivateAndUndo(LPOLEINPLACEOBJECT iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IOleInPlaceObject virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IOleInPlaceObject) WBOIPO_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBOIPO_QueryInterface, |
| WBOIPO_AddRef, |
| WBOIPO_Release, |
| WBOIPO_GetWindow, |
| WBOIPO_ContextSensitiveHelp, |
| WBOIPO_InPlaceDeactivate, |
| WBOIPO_UIDeactivate, |
| WBOIPO_SetObjectRects, |
| WBOIPO_ReactivateAndUndo |
| }; |
| |
| |
| |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IOleControl |
| */ |
| |
| /********************************************************************** |
| * Implement the IOleControl interface |
| */ |
| |
| static HRESULT WINAPI WBOC_QueryInterface(LPOLECONTROL iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfolectl); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBOC_AddRef(LPOLECONTROL iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfolectl); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBOC_Release(LPOLECONTROL iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfolectl); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| static HRESULT WINAPI WBOC_GetControlInfo(LPOLECONTROL iface, LPCONTROLINFO pCI) |
| { |
| FIXME("stub: LPCONTROLINFO = %p\n", pCI); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOC_OnMnemonic(LPOLECONTROL iface, struct tagMSG *pMsg) |
| { |
| FIXME("stub: MSG* = %p\n", pMsg); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOC_OnAmbientPropertyChange(LPOLECONTROL iface, DISPID dispID) |
| { |
| FIXME("stub: DISPID = %ld\n", dispID); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBOC_FreezeEvents(LPOLECONTROL iface, BOOL bFreeze) |
| { |
| FIXME("stub: bFreeze = %d\n", bFreeze); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IOleControl virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IOleControl) WBOC_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBOC_QueryInterface, |
| WBOC_AddRef, |
| WBOC_Release, |
| WBOC_GetControlInfo, |
| WBOC_OnMnemonic, |
| WBOC_OnAmbientPropertyChange, |
| WBOC_FreezeEvents |
| }; |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IWebBrowser |
| */ |
| |
| /********************************************************************** |
| * Implement the IWebBrowser interface |
| */ |
| |
| static HRESULT WINAPI WB_QueryInterface(LPWEBBROWSER iface, REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfwbrowser); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WB_AddRef(LPWEBBROWSER iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfwbrowser); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WB_Release(LPWEBBROWSER iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfwbrowser); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| /* IDispatch methods */ |
| static HRESULT WINAPI WB_GetTypeInfoCount(LPWEBBROWSER iface, UINT *pctinfo) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_GetTypeInfo(LPWEBBROWSER iface, UINT iTInfo, LCID lcid, |
| LPTYPEINFO *ppTInfo) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_GetIDsOfNames(LPWEBBROWSER iface, REFIID riid, |
| LPOLESTR *rgszNames, UINT cNames, |
| LCID lcid, DISPID *rgDispId) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_Invoke(LPWEBBROWSER 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 E_NOTIMPL; |
| } |
| |
| /* IWebBrowser methods */ |
| static HRESULT WINAPI WB_GoBack(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_GoForward(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_GoHome(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_GoSearch(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_Navigate(LPWEBBROWSER 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 E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_Refresh(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_Refresh2(LPWEBBROWSER iface, VARIANT *Level) |
| { |
| FIXME("stub: %p\n", Level); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_Stop(LPWEBBROWSER iface) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Application(LPWEBBROWSER iface, LPVOID *ppDisp) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Parent(LPWEBBROWSER iface, LPVOID *ppDisp) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Container(LPWEBBROWSER iface, LPVOID *ppDisp) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Document(LPWEBBROWSER iface, LPVOID *ppDisp) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_TopLevelContainer(LPWEBBROWSER iface, VARIANT *pBool) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Type(LPWEBBROWSER iface, BSTR *Type) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Left(LPWEBBROWSER iface, long *pl) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_put_Left(LPWEBBROWSER iface, long Left) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Top(LPWEBBROWSER iface, long *pl) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_put_Top(LPWEBBROWSER iface, long Top) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Width(LPWEBBROWSER iface, long *pl) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_put_Width(LPWEBBROWSER iface, long Width) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Height(LPWEBBROWSER iface, long *pl) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_put_Height(LPWEBBROWSER iface, long Height) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_LocationName(LPWEBBROWSER iface, BSTR *LocationName) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_LocationURL(LPWEBBROWSER iface, BSTR *LocationURL) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WB_get_Busy(LPWEBBROWSER iface, VARIANT *pBool) |
| { |
| FIXME("stub \n"); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IWebBrowser virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IWebBrowser) WB_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| 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 |
| }; |
| |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IProvideClassInfo2 |
| */ |
| |
| /********************************************************************** |
| * Implement the IProvideClassInfo2 interface (inherits from |
| * IProvideClassInfo). |
| */ |
| |
| static HRESULT WINAPI WBPCI2_QueryInterface(LPPROVIDECLASSINFO2 iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfpcinfo); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBPCI2_AddRef(LPPROVIDECLASSINFO2 iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpcinfo); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBPCI2_Release(LPPROVIDECLASSINFO2 iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpcinfo); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| /* 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 E_NOTIMPL; |
| } |
| |
| /* 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 implmentation 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 0 |
| 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)); |
| #endif |
| |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IProvideClassInfo virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IProvideClassInfo2) WBPCI2_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBPCI2_QueryInterface, |
| WBPCI2_AddRef, |
| WBPCI2_Release, |
| WBPCI2_GetClassInfo, |
| WBPCI2_GetGUID |
| }; |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IPersistStorage |
| */ |
| |
| /********************************************************************** |
| * Implement the IPersistStorage interface |
| */ |
| |
| static HRESULT WINAPI WBPS_QueryInterface(LPPERSISTSTORAGE iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrg); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBPS_AddRef(LPPERSISTSTORAGE iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrg); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBPS_Release(LPPERSISTSTORAGE iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrg); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| static HRESULT WINAPI WBPS_GetClassID(LPPERSISTSTORAGE iface, CLSID *pClassID) |
| { |
| FIXME("stub: CLSID = %s\n", debugstr_guid(pClassID)); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPS_IsDirty(LPPERSISTSTORAGE iface) |
| { |
| FIXME("stub\n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPS_InitNew(LPPERSISTSTORAGE iface, LPSTORAGE pStg) |
| { |
| FIXME("stub: LPSTORAGE = %p\n", pStg); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPS_Load(LPPERSISTSTORAGE iface, LPSTORAGE pStg) |
| { |
| FIXME("stub: LPSTORAGE = %p\n", pStg); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPS_Save(LPPERSISTSTORAGE iface, LPSTORAGE pStg, |
| BOOL fSameAsLoad) |
| { |
| FIXME("stub: LPSTORAGE = %p, fSameAsLoad = %d\n", pStg, fSameAsLoad); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPS_SaveCompleted(LPPERSISTSTORAGE iface, LPSTORAGE pStgNew) |
| { |
| FIXME("stub: LPSTORAGE = %p\n", pStgNew); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IPersistStorage virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IPersistStorage) WBPS_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBPS_QueryInterface, |
| WBPS_AddRef, |
| WBPS_Release, |
| WBPS_GetClassID, |
| WBPS_IsDirty, |
| WBPS_InitNew, |
| WBPS_Load, |
| WBPS_Save, |
| WBPS_SaveCompleted |
| }; |
| |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IPersistStreamInit |
| */ |
| |
| |
| |
| /********************************************************************** |
| * Implement the IPersistStreamInit interface |
| */ |
| |
| static HRESULT WINAPI WBPSI_QueryInterface(LPPERSISTSTREAMINIT iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrminit); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBPSI_AddRef(LPPERSISTSTREAMINIT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrminit); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBPSI_Release(LPPERSISTSTREAMINIT iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfpstrminit); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| static HRESULT WINAPI WBPSI_GetClassID(LPPERSISTSTREAMINIT iface, CLSID *pClassID) |
| { |
| FIXME("stub: CLSID = %s\n", debugstr_guid(pClassID)); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPSI_IsDirty(LPPERSISTSTREAMINIT iface) |
| { |
| FIXME("stub\n"); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPSI_Load(LPPERSISTSTREAMINIT iface, LPSTREAM pStg) |
| { |
| FIXME("stub: LPSTORAGE = %p\n", pStg); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPSI_Save(LPPERSISTSTREAMINIT iface, LPSTREAM pStg, |
| BOOL fSameAsLoad) |
| { |
| FIXME("stub: LPSTORAGE = %p, fSameAsLoad = %d\n", pStg, fSameAsLoad); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPSI_GetSizeMax(LPPERSISTSTREAMINIT iface, |
| ULARGE_INTEGER *pcbSize) |
| { |
| FIXME("stub: ULARGE_INTEGER = %p\n", pcbSize); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBPSI_InitNew(LPPERSISTSTREAMINIT iface) |
| { |
| FIXME("stub\n"); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IPersistStreamInit virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IPersistStreamInit) WBPSI_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBPSI_QueryInterface, |
| WBPSI_AddRef, |
| WBPSI_Release, |
| WBPSI_GetClassID, |
| WBPSI_IsDirty, |
| WBPSI_Load, |
| WBPSI_Save, |
| WBPSI_GetSizeMax, |
| WBPSI_InitNew |
| }; |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IQuickActivate |
| */ |
| |
| /********************************************************************** |
| * Implement the IQuickActivate interface |
| */ |
| |
| static HRESULT WINAPI WBQA_QueryInterface(LPQUICKACTIVATE iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfqactive); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBQA_AddRef(LPQUICKACTIVATE iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfqactive); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBQA_Release(LPQUICKACTIVATE iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfqactive); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| /* 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 E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBQA_SetContentExtent(LPQUICKACTIVATE iface, LPSIZEL pSizel) |
| { |
| FIXME("stub: LPSIZEL = %p\n", pSizel); |
| return E_NOTIMPL; |
| } |
| |
| static HRESULT WINAPI WBQA_GetContentExtent(LPQUICKACTIVATE iface, LPSIZEL pSizel) |
| { |
| FIXME("stub: LPSIZEL = %p\n", pSizel); |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IQuickActivate virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IQuickActivate) WBQA_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBQA_QueryInterface, |
| WBQA_AddRef, |
| WBQA_Release, |
| WBQA_QuickActivate, |
| WBQA_SetContentExtent, |
| WBQA_GetContentExtent |
| }; |
| |
| |
| /*************************************************************************** |
| * |
| * CWebBrowserImpl::IConnectionPointContainer |
| */ |
| |
| /********************************************************************** |
| * Implement the IConnectionPointContainer interface |
| */ |
| |
| static HRESULT WINAPI WBCPC_QueryInterface(LPCONNECTIONPOINTCONTAINER iface, |
| REFIID riid, LPVOID *ppobj) |
| { |
| CWebBrowserImpl_THIS(iface,vfcpointcont); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_QueryInterface(This->vfunk.punkControl,riid,ppobj); |
| } |
| |
| static ULONG WINAPI WBCPC_AddRef(LPCONNECTIONPOINTCONTAINER iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfcpointcont); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_AddRef(This->vfunk.punkControl); |
| } |
| |
| static ULONG WINAPI WBCPC_Release(LPCONNECTIONPOINTCONTAINER iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfcpointcont); |
| |
| TRACE("(%p)->()\n",This); |
| |
| return IUnknown_Release(This->vfunk.punkControl); |
| } |
| |
| /* 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 E_NOTIMPL; |
| } |
| |
| /* 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) |
| { |
| FIXME(": IID = %s, IConnectionPoint = %p\n", debugstr_guid(riid), *ppCP); |
| |
| #if 0 |
| 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; |
| } |
| #endif |
| |
| return E_NOTIMPL; |
| } |
| |
| /********************************************************************** |
| * IConnectionPointContainer virtual function table for IE Web Browser component |
| */ |
| |
| static ICOM_VTABLE(IConnectionPointContainer) WBCPC_Vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| WBCPC_QueryInterface, |
| WBCPC_AddRef, |
| WBCPC_Release, |
| WBCPC_EnumConnectionPoints, |
| WBCPC_FindConnectionPoint |
| }; |
| |
| |
| |
| /*************************************************************************** |
| * |
| * new/delete CWebBrowserImpl |
| * |
| */ |
| |
| static void CWebBrowserImpl_Destructor(IUnknown* iface) |
| { |
| CWebBrowserImpl_THIS(iface,vfunk); |
| |
| FIXME("(%p)\n",This); |
| |
| /* destructor */ |
| } |
| |
| HRESULT CWebBrowserImpl_AllocObj(IUnknown* punkOuter,void** ppobj) |
| { |
| CWebBrowserImpl* This; |
| |
| This = (CWebBrowserImpl*)COMIMPL_AllocObj( sizeof(CWebBrowserImpl) ); |
| if ( This == NULL ) return E_OUTOFMEMORY; |
| COMIMPL_IUnkInit( &This->vfunk, punkOuter ); |
| This->vfunk.pEntries = IFEntries; |
| This->vfunk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); |
| This->vfunk.pOnFinalRelease = CWebBrowserImpl_Destructor; |
| |
| ICOM_VTBL(&This->vfoleobj) = &WBOOBJ_Vtbl; |
| ICOM_VTBL(&This->vfoleinpobj) = &WBOIPO_Vtbl; |
| ICOM_VTBL(&This->vfolectl) = &WBOC_Vtbl; |
| ICOM_VTBL(&This->vfwbrowser) = &WB_Vtbl; |
| ICOM_VTBL(&This->vfpcinfo) = &WBPCI2_Vtbl; |
| ICOM_VTBL(&This->vfpstrg) = &WBPS_Vtbl; |
| ICOM_VTBL(&This->vfpstrminit) = &WBPSI_Vtbl; |
| ICOM_VTBL(&This->vfqactive) = &WBQA_Vtbl; |
| ICOM_VTBL(&This->vfcpointcont) = &WBCPC_Vtbl; |
| |
| /* constructor */ |
| FIXME("()\n"); |
| |
| *ppobj = (void*)(&This->vfunk); |
| |
| return S_OK; |
| } |
| |
| |