diff --git a/dlls/shdocvw/persist.c b/dlls/shdocvw/persist.c index b4fecbbfe35..940dd16dd11 100644 --- a/dlls/shdocvw/persist.c +++ b/dlls/shdocvw/persist.c @@ -92,8 +92,6 @@ static HRESULT WINAPI PersistStorage_SaveCompleted(IPersistStorage *iface, LPSTO return E_NOTIMPL; } -#define PERSTORAGE_THIS(ifce) DEFINE_THIS(WebBrowser, PersistStorage, iface) - static const IPersistStorageVtbl PersistStorageVtbl = { PersistStorage_QueryInterface, @@ -107,6 +105,87 @@ static const IPersistStorageVtbl PersistStorageVtbl = PersistStorage_SaveCompleted }; +/********************************************************************** + * Implement the IPersistMemory interface + */ + +#define PERMEMORY_THIS(ifce) DEFINE_THIS(WebBrowser, PersistMemory, iface) + +static HRESULT WINAPI PersistMemory_QueryInterface(IPersistMemory *iface, + REFIID riid, LPVOID *ppobj) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj); +} + +static ULONG WINAPI PersistMemory_AddRef(IPersistMemory *iface) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + return IWebBrowser_AddRef(WEBBROWSER(This)); +} + +static ULONG WINAPI PersistMemory_Release(IPersistMemory *iface) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + return IWebBrowser_Release(WEBBROWSER(This)); +} + +static HRESULT WINAPI PersistMemory_GetClassID(IPersistMemory *iface, CLSID *pClassID) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)->(%p)\n", This, pClassID); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMemory_IsDirty(IPersistMemory *iface) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMemory_InitNew(IPersistMemory *iface) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)\n", This); + return S_OK; +} + +static HRESULT WINAPI PersistMemory_Load(IPersistMemory *iface, LPVOID pMem, ULONG cbSize) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)->(%p %x)\n", This, pMem, cbSize); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMemory_Save(IPersistMemory *iface, LPVOID pMem, + BOOL fClearDirty, ULONG cbSize) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)->(%p %x %x)\n", This, pMem, fClearDirty, cbSize); + return E_NOTIMPL; +} + +static HRESULT WINAPI PersistMemory_GetSizeMax(IPersistMemory *iface, ULONG *pCbSize) +{ + WebBrowser *This = PERMEMORY_THIS(iface); + FIXME("(%p)->(%p)\n", This, pCbSize); + return E_NOTIMPL; +} + +static const IPersistMemoryVtbl PersistMemoryVtbl = +{ + PersistMemory_QueryInterface, + PersistMemory_AddRef, + PersistMemory_Release, + PersistMemory_GetClassID, + PersistMemory_IsDirty, + PersistMemory_Load, + PersistMemory_Save, + PersistMemory_GetSizeMax, + PersistMemory_InitNew +}; + /********************************************************************** * Implement the IPersistStreamInit interface */ @@ -192,5 +271,6 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = void WebBrowser_Persist_Init(WebBrowser *This) { This->lpPersistStorageVtbl = &PersistStorageVtbl; + This->lpPersistMemoryVtbl = &PersistMemoryVtbl; This->lpPersistStreamInitVtbl = &PersistStreamInitVtbl; } diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 28637bf0920..db47b637fc8 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -100,6 +100,7 @@ struct WebBrowser { const IOleInPlaceObjectVtbl *lpOleInPlaceObjectVtbl; const IOleControlVtbl *lpOleControlVtbl; const IPersistStorageVtbl *lpPersistStorageVtbl; + const IPersistMemoryVtbl *lpPersistMemoryVtbl; const IPersistStreamInitVtbl *lpPersistStreamInitVtbl; const IProvideClassInfo2Vtbl *lpProvideClassInfoVtbl; const IViewObject2Vtbl *lpViewObjectVtbl; @@ -152,6 +153,7 @@ struct InternetExplorer { #define INPLACEOBJ(x) ((IOleInPlaceObject*) &(x)->lpOleInPlaceObjectVtbl) #define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl) #define PERSTORAGE(x) ((IPersistStorage*) &(x)->lpPersistStorageVtbl) +#define PERMEMORY(x) ((IPersistMemory*) &(x)->lpPersistMemoryVtbl) #define PERSTRINIT(x) ((IPersistStreamInit*) &(x)->lpPersistStreamInitVtbl) #define CLASSINFO(x) ((IProvideClassInfo2*) &(x)->lpProvideClassInfoVtbl) #define CONPTCONT(x) ((IConnectionPointContainer*) &(x)->lpConnectionPointContainerVtbl) diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c index c9af82f7448..49914f7184a 100644 --- a/dlls/shdocvw/webbrowser.c +++ b/dlls/shdocvw/webbrowser.c @@ -72,6 +72,9 @@ static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid }else if(IsEqualGUID(&IID_IPersistStorage, riid)) { TRACE("(%p)->(IID_IPersistStorage %p)\n", This, ppv); *ppv = PERSTORAGE(This); + }else if(IsEqualGUID(&IID_IPersistMemory, riid)) { + TRACE("(%p)->(IID_IPersistStorage %p)\n", This, ppv); + *ppv = PERMEMORY(This); }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) { TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv); *ppv = PERSTRINIT(This);