1 /*
2 * Implementation of IPersist interfaces for WebBrowser control
3 *
4 * Copyright 2001 John R. Sheets (for CodeWeavers)
5 * Copyright 2005 Jacek Caban
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22 #include "ieframe.h"
23
24 #include "wine/debug.h"
25
26 WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
27
28 /**********************************************************************
29 * Implement the IPersistStorage interface
30 */
31
impl_from_IPersistStorage(IPersistStorage * iface)32 static inline WebBrowser *impl_from_IPersistStorage(IPersistStorage *iface)
33 {
34 return CONTAINING_RECORD(iface, WebBrowser, IPersistStorage_iface);
35 }
36
PersistStorage_QueryInterface(IPersistStorage * iface,REFIID riid,LPVOID * ppobj)37 static HRESULT WINAPI PersistStorage_QueryInterface(IPersistStorage *iface,
38 REFIID riid, LPVOID *ppobj)
39 {
40 WebBrowser *This = impl_from_IPersistStorage(iface);
41 return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppobj);
42 }
43
PersistStorage_AddRef(IPersistStorage * iface)44 static ULONG WINAPI PersistStorage_AddRef(IPersistStorage *iface)
45 {
46 WebBrowser *This = impl_from_IPersistStorage(iface);
47 return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
48 }
49
PersistStorage_Release(IPersistStorage * iface)50 static ULONG WINAPI PersistStorage_Release(IPersistStorage *iface)
51 {
52 WebBrowser *This = impl_from_IPersistStorage(iface);
53 return IWebBrowser2_Release(&This->IWebBrowser2_iface);
54 }
55
PersistStorage_GetClassID(IPersistStorage * iface,CLSID * pClassID)56 static HRESULT WINAPI PersistStorage_GetClassID(IPersistStorage *iface, CLSID *pClassID)
57 {
58 WebBrowser *This = impl_from_IPersistStorage(iface);
59 FIXME("(%p)->(%p)\n", This, pClassID);
60 return E_NOTIMPL;
61 }
62
PersistStorage_IsDirty(IPersistStorage * iface)63 static HRESULT WINAPI PersistStorage_IsDirty(IPersistStorage *iface)
64 {
65 WebBrowser *This = impl_from_IPersistStorage(iface);
66 FIXME("(%p)\n", This);
67 return E_NOTIMPL;
68 }
69
PersistStorage_InitNew(IPersistStorage * iface,LPSTORAGE pStg)70 static HRESULT WINAPI PersistStorage_InitNew(IPersistStorage *iface, LPSTORAGE pStg)
71 {
72 WebBrowser *This = impl_from_IPersistStorage(iface);
73 FIXME("(%p)->(%p)\n", This, pStg);
74 return S_OK;
75 }
76
PersistStorage_Load(IPersistStorage * iface,LPSTORAGE pStg)77 static HRESULT WINAPI PersistStorage_Load(IPersistStorage *iface, LPSTORAGE pStg)
78 {
79 WebBrowser *This = impl_from_IPersistStorage(iface);
80 FIXME("(%p)->(%p)\n", This, pStg);
81 return E_NOTIMPL;
82 }
83
PersistStorage_Save(IPersistStorage * iface,LPSTORAGE pStg,BOOL fSameAsLoad)84 static HRESULT WINAPI PersistStorage_Save(IPersistStorage *iface, LPSTORAGE pStg,
85 BOOL fSameAsLoad)
86 {
87 WebBrowser *This = impl_from_IPersistStorage(iface);
88 FIXME("(%p)->(%p %x)\n", This, pStg, fSameAsLoad);
89 return E_NOTIMPL;
90 }
91
PersistStorage_SaveCompleted(IPersistStorage * iface,LPSTORAGE pStgNew)92 static HRESULT WINAPI PersistStorage_SaveCompleted(IPersistStorage *iface, LPSTORAGE pStgNew)
93 {
94 WebBrowser *This = impl_from_IPersistStorage(iface);
95 FIXME("(%p)->(%p)\n", This, pStgNew);
96 return E_NOTIMPL;
97 }
98
99 static const IPersistStorageVtbl PersistStorageVtbl =
100 {
101 PersistStorage_QueryInterface,
102 PersistStorage_AddRef,
103 PersistStorage_Release,
104 PersistStorage_GetClassID,
105 PersistStorage_IsDirty,
106 PersistStorage_InitNew,
107 PersistStorage_Load,
108 PersistStorage_Save,
109 PersistStorage_SaveCompleted
110 };
111
112 /**********************************************************************
113 * Implement the IPersistMemory interface
114 */
115
impl_from_IPersistMemory(IPersistMemory * iface)116 static inline WebBrowser *impl_from_IPersistMemory(IPersistMemory *iface)
117 {
118 return CONTAINING_RECORD(iface, WebBrowser, IPersistMemory_iface);
119 }
120
PersistMemory_QueryInterface(IPersistMemory * iface,REFIID riid,LPVOID * ppobj)121 static HRESULT WINAPI PersistMemory_QueryInterface(IPersistMemory *iface,
122 REFIID riid, LPVOID *ppobj)
123 {
124 WebBrowser *This = impl_from_IPersistMemory(iface);
125 return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppobj);
126 }
127
PersistMemory_AddRef(IPersistMemory * iface)128 static ULONG WINAPI PersistMemory_AddRef(IPersistMemory *iface)
129 {
130 WebBrowser *This = impl_from_IPersistMemory(iface);
131 return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
132 }
133
PersistMemory_Release(IPersistMemory * iface)134 static ULONG WINAPI PersistMemory_Release(IPersistMemory *iface)
135 {
136 WebBrowser *This = impl_from_IPersistMemory(iface);
137 return IWebBrowser2_Release(&This->IWebBrowser2_iface);
138 }
139
PersistMemory_GetClassID(IPersistMemory * iface,CLSID * pClassID)140 static HRESULT WINAPI PersistMemory_GetClassID(IPersistMemory *iface, CLSID *pClassID)
141 {
142 WebBrowser *This = impl_from_IPersistMemory(iface);
143 FIXME("(%p)->(%p)\n", This, pClassID);
144 return E_NOTIMPL;
145 }
146
PersistMemory_IsDirty(IPersistMemory * iface)147 static HRESULT WINAPI PersistMemory_IsDirty(IPersistMemory *iface)
148 {
149 WebBrowser *This = impl_from_IPersistMemory(iface);
150 FIXME("(%p)\n", This);
151 return E_NOTIMPL;
152 }
153
PersistMemory_InitNew(IPersistMemory * iface)154 static HRESULT WINAPI PersistMemory_InitNew(IPersistMemory *iface)
155 {
156 WebBrowser *This = impl_from_IPersistMemory(iface);
157 FIXME("(%p)\n", This);
158 return S_OK;
159 }
160
PersistMemory_Load(IPersistMemory * iface,LPVOID pMem,ULONG cbSize)161 static HRESULT WINAPI PersistMemory_Load(IPersistMemory *iface, LPVOID pMem, ULONG cbSize)
162 {
163 WebBrowser *This = impl_from_IPersistMemory(iface);
164 FIXME("(%p)->(%p %x)\n", This, pMem, cbSize);
165 return S_OK;
166 }
167
PersistMemory_Save(IPersistMemory * iface,LPVOID pMem,BOOL fClearDirty,ULONG cbSize)168 static HRESULT WINAPI PersistMemory_Save(IPersistMemory *iface, LPVOID pMem,
169 BOOL fClearDirty, ULONG cbSize)
170 {
171 WebBrowser *This = impl_from_IPersistMemory(iface);
172 FIXME("(%p)->(%p %x %x)\n", This, pMem, fClearDirty, cbSize);
173 return E_NOTIMPL;
174 }
175
PersistMemory_GetSizeMax(IPersistMemory * iface,ULONG * pCbSize)176 static HRESULT WINAPI PersistMemory_GetSizeMax(IPersistMemory *iface, ULONG *pCbSize)
177 {
178 WebBrowser *This = impl_from_IPersistMemory(iface);
179 FIXME("(%p)->(%p)\n", This, pCbSize);
180 return E_NOTIMPL;
181 }
182
183 static const IPersistMemoryVtbl PersistMemoryVtbl =
184 {
185 PersistMemory_QueryInterface,
186 PersistMemory_AddRef,
187 PersistMemory_Release,
188 PersistMemory_GetClassID,
189 PersistMemory_IsDirty,
190 PersistMemory_Load,
191 PersistMemory_Save,
192 PersistMemory_GetSizeMax,
193 PersistMemory_InitNew
194 };
195
196 /**********************************************************************
197 * Implement the IPersistStreamInit interface
198 */
199
impl_from_IPersistStreamInit(IPersistStreamInit * iface)200 static inline WebBrowser *impl_from_IPersistStreamInit(IPersistStreamInit *iface)
201 {
202 return CONTAINING_RECORD(iface, WebBrowser, IPersistStreamInit_iface);
203 }
204
PersistStreamInit_QueryInterface(IPersistStreamInit * iface,REFIID riid,LPVOID * ppobj)205 static HRESULT WINAPI PersistStreamInit_QueryInterface(IPersistStreamInit *iface,
206 REFIID riid, LPVOID *ppobj)
207 {
208 WebBrowser *This = impl_from_IPersistStreamInit(iface);
209 return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppobj);
210 }
211
PersistStreamInit_AddRef(IPersistStreamInit * iface)212 static ULONG WINAPI PersistStreamInit_AddRef(IPersistStreamInit *iface)
213 {
214 WebBrowser *This = impl_from_IPersistStreamInit(iface);
215 return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
216 }
217
PersistStreamInit_Release(IPersistStreamInit * iface)218 static ULONG WINAPI PersistStreamInit_Release(IPersistStreamInit *iface)
219 {
220 WebBrowser *This = impl_from_IPersistStreamInit(iface);
221 return IWebBrowser2_Release(&This->IWebBrowser2_iface);
222 }
223
PersistStreamInit_GetClassID(IPersistStreamInit * iface,CLSID * pClassID)224 static HRESULT WINAPI PersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *pClassID)
225 {
226 WebBrowser *This = impl_from_IPersistStreamInit(iface);
227 return IPersistStorage_GetClassID(&This->IPersistStorage_iface, pClassID);
228 }
229
PersistStreamInit_IsDirty(IPersistStreamInit * iface)230 static HRESULT WINAPI PersistStreamInit_IsDirty(IPersistStreamInit *iface)
231 {
232 WebBrowser *This = impl_from_IPersistStreamInit(iface);
233 return IPersistStorage_IsDirty(&This->IPersistStorage_iface);
234 }
235
PersistStreamInit_Load(IPersistStreamInit * iface,LPSTREAM pStg)236 static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM pStg)
237 {
238 WebBrowser *This = impl_from_IPersistStreamInit(iface);
239 FIXME("(%p)->(%p)\n", This, pStg);
240 return S_OK;
241 }
242
PersistStreamInit_Save(IPersistStreamInit * iface,LPSTREAM pStg,BOOL fSameAsLoad)243 static HRESULT WINAPI PersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM pStg,
244 BOOL fSameAsLoad)
245 {
246 WebBrowser *This = impl_from_IPersistStreamInit(iface);
247 FIXME("(%p)->(%p %x)\n", This, pStg, fSameAsLoad);
248 return E_NOTIMPL;
249 }
250
PersistStreamInit_GetSizeMax(IPersistStreamInit * iface,ULARGE_INTEGER * pcbSize)251 static HRESULT WINAPI PersistStreamInit_GetSizeMax(IPersistStreamInit *iface,
252 ULARGE_INTEGER *pcbSize)
253 {
254 WebBrowser *This = impl_from_IPersistStreamInit(iface);
255 FIXME("(%p)->(%p)\n", This, pcbSize);
256 return E_NOTIMPL;
257 }
258
PersistStreamInit_InitNew(IPersistStreamInit * iface)259 static HRESULT WINAPI PersistStreamInit_InitNew(IPersistStreamInit *iface)
260 {
261 WebBrowser *This = impl_from_IPersistStreamInit(iface);
262 FIXME("(%p)\n", This);
263 return S_OK;
264 }
265
266 static const IPersistStreamInitVtbl PersistStreamInitVtbl =
267 {
268 PersistStreamInit_QueryInterface,
269 PersistStreamInit_AddRef,
270 PersistStreamInit_Release,
271 PersistStreamInit_GetClassID,
272 PersistStreamInit_IsDirty,
273 PersistStreamInit_Load,
274 PersistStreamInit_Save,
275 PersistStreamInit_GetSizeMax,
276 PersistStreamInit_InitNew
277 };
278
WebBrowser_Persist_Init(WebBrowser * This)279 void WebBrowser_Persist_Init(WebBrowser *This)
280 {
281 This->IPersistStorage_iface.lpVtbl = &PersistStorageVtbl;
282 This->IPersistMemory_iface.lpVtbl = &PersistMemoryVtbl;
283 This->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
284 }
285