2 * Implementation of IWebBrowser interface for WebBrowser control
4 * Copyright 2001 John R. Sheets (for CodeWeavers)
5 * Copyright 2005 Jacek Caban
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.
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.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "wine/debug.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
27 /**********************************************************************
28 * Implement the IWebBrowser interface
31 #define WEBBROWSER_THIS(iface) DEFINE_THIS(WebBrowser, WebBrowser, iface)
33 static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser *iface, REFIID riid, LPVOID *ppv)
35 WebBrowser *This = WEBBROWSER_THIS(iface);
41 if(IsEqualGUID(&IID_IUnknown, riid)) {
42 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
43 *ppv = WEBBROWSER(This);
44 }else if(IsEqualGUID (&IID_IDispatch, riid)) {
45 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
46 *ppv = WEBBROWSER(This);
47 }else if(IsEqualGUID(&IID_IWebBrowser, riid)) {
48 TRACE("(%p)->(IID_IWebBrowser %p)\n", This, ppv);
49 *ppv = WEBBROWSER(This);
50 }else if(IsEqualGUID(&IID_IOleObject, riid)) {
51 TRACE("(%p)->(IID_IOleObject %p)\n", This, ppv);
53 }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
54 TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
55 *ppv = INPLACEOBJ(This);
56 }else if(IsEqualGUID (&IID_IOleInPlaceObject, riid)) {
57 TRACE("(%p)->(IID_IOleInPlaceObject %p)\n", This, ppv);
58 *ppv = INPLACEOBJ(This);
59 }else if(IsEqualGUID(&IID_IOleControl, riid)) {
60 TRACE("(%p)->(IID_IOleControl %p)\n", This, ppv);
62 }else if(IsEqualGUID(&IID_IPersist, riid)) {
63 TRACE("(%p)->(IID_IPersist %p)\n", This, ppv);
64 *ppv = PERSTORAGE(This);
65 }else if(IsEqualGUID(&IID_IPersistStorage, riid)) {
66 TRACE("(%p)->(IID_IPersistStorage %p)\n", This, ppv);
67 *ppv = PERSTORAGE(This);
68 }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) {
69 TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
70 *ppv = PERSTRINIT(This);
71 }else if(IsEqualGUID (&IID_IProvideClassInfo, riid)) {
72 TRACE("(%p)->(IID_IProvideClassInfo %p)\n", This, ppv);
73 *ppv = CLASSINFO(This);
74 }else if(IsEqualGUID (&IID_IProvideClassInfo2, riid)) {
75 TRACE("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv);
76 *ppv = CLASSINFO(This);
77 }else if(IsEqualGUID (&IID_IQuickActivate, riid)) {
78 TRACE("(%p)->(IID_IQuickActivate %p)\n", This, ppv);
79 *ppv = QUICKACT(This);
80 }else if(IsEqualGUID (&IID_IConnectionPointContainer, riid)) {
81 FIXME("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
82 *ppv = &SHDOCVW_ConnectionPointContainer;
86 IUnknown_AddRef((IUnknown*)*ppv);
90 FIXME("(%p)->(%s %p) interface not supported\n", This, debugstr_guid(riid), ppv);
94 static ULONG WINAPI WebBrowser_AddRef(IWebBrowser *iface)
96 WebBrowser *This = WEBBROWSER_THIS(iface);
97 LONG ref = InterlockedIncrement(&This->ref);
98 TRACE("(%p) ref=%ld\n", This, ref);
102 static ULONG WINAPI WebBrowser_Release(IWebBrowser *iface)
104 WebBrowser *This = WEBBROWSER_THIS(iface);
105 LONG ref = InterlockedDecrement(&This->ref);
107 TRACE("(%p) ref=%ld\n", This, ref);
110 HeapFree(GetProcessHeap(), 0, This);
111 SHDOCVW_UnlockModule();
117 /* IDispatch methods */
118 static HRESULT WINAPI WebBrowser_GetTypeInfoCount(IWebBrowser *iface, UINT *pctinfo)
120 WebBrowser *This = WEBBROWSER_THIS(iface);
121 FIXME("(%p)->(%p)\n", This, pctinfo);
125 static HRESULT WINAPI WebBrowser_GetTypeInfo(IWebBrowser *iface, UINT iTInfo, LCID lcid,
128 WebBrowser *This = WEBBROWSER_THIS(iface);
129 FIXME("(%p)->(%d %ld %p)\n", This, iTInfo, lcid, ppTInfo);
133 static HRESULT WINAPI WebBrowser_GetIDsOfNames(IWebBrowser *iface, REFIID riid,
134 LPOLESTR *rgszNames, UINT cNames,
135 LCID lcid, DISPID *rgDispId)
137 WebBrowser *This = WEBBROWSER_THIS(iface);
138 FIXME("(%p)->(%s %p %d %ld %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
143 static HRESULT WINAPI WebBrowser_Invoke(IWebBrowser *iface, DISPID dispIdMember,
144 REFIID riid, LCID lcid, WORD wFlags,
145 DISPPARAMS *pDispParams, VARIANT *pVarResult,
146 EXCEPINFO *pExepInfo, UINT *puArgErr)
148 WebBrowser *This = WEBBROWSER_THIS(iface);
149 FIXME("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
150 lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
154 /* IWebBrowser methods */
155 static HRESULT WINAPI WebBrowser_GoBack(IWebBrowser *iface)
157 WebBrowser *This = WEBBROWSER_THIS(iface);
158 FIXME("(%p)\n", This);
162 static HRESULT WINAPI WebBrowser_GoForward(IWebBrowser *iface)
164 WebBrowser *This = WEBBROWSER_THIS(iface);
165 FIXME("(%p)\n", This);
169 static HRESULT WINAPI WebBrowser_GoHome(IWebBrowser *iface)
171 WebBrowser *This = WEBBROWSER_THIS(iface);
172 FIXME("(%p)\n", This);
176 static HRESULT WINAPI WebBrowser_GoSearch(IWebBrowser *iface)
178 WebBrowser *This = WEBBROWSER_THIS(iface);
179 FIXME("(%p)\n", This);
183 static HRESULT WINAPI WebBrowser_Navigate(IWebBrowser *iface, BSTR URL,
184 VARIANT *Flags, VARIANT *TargetFrameName,
185 VARIANT *PostData, VARIANT *Headers)
187 WebBrowser *This = WEBBROWSER_THIS(iface);
188 FIXME("(%p)->(%s %p %p %p %p)\n", This, debugstr_w(URL), Flags, TargetFrameName,
193 static HRESULT WINAPI WebBrowser_Refresh(IWebBrowser *iface)
195 WebBrowser *This = WEBBROWSER_THIS(iface);
196 FIXME("(%p)\n", This);
200 static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser *iface, VARIANT *Level)
202 WebBrowser *This = WEBBROWSER_THIS(iface);
203 FIXME("(%p)->(%p)\n", This, Level);
207 static HRESULT WINAPI WebBrowser_Stop(IWebBrowser *iface)
209 WebBrowser *This = WEBBROWSER_THIS(iface);
210 FIXME("(%p)\n", This);
214 static HRESULT WINAPI WebBrowser_get_Application(IWebBrowser *iface, IDispatch **ppDisp)
216 WebBrowser *This = WEBBROWSER_THIS(iface);
217 FIXME("(%p)->(%p)\n", This, ppDisp);
221 static HRESULT WINAPI WebBrowser_get_Parent(IWebBrowser *iface, IDispatch **ppDisp)
223 WebBrowser *This = WEBBROWSER_THIS(iface);
224 FIXME("(%p)->(%p)\n", This, ppDisp);
228 static HRESULT WINAPI WebBrowser_get_Container(IWebBrowser *iface, IDispatch **ppDisp)
230 WebBrowser *This = WEBBROWSER_THIS(iface);
231 FIXME("(%p)->(%p)\n", This, ppDisp);
235 static HRESULT WINAPI WebBrowser_get_Document(IWebBrowser *iface, IDispatch **ppDisp)
237 WebBrowser *This = WEBBROWSER_THIS(iface);
238 FIXME("(%p)->(%p)\n", This, ppDisp);
242 static HRESULT WINAPI WebBrowser_get_TopLevelContainer(IWebBrowser *iface, VARIANT_BOOL *pBool)
244 WebBrowser *This = WEBBROWSER_THIS(iface);
245 FIXME("(%p)->(%p)\n", This, pBool);
249 static HRESULT WINAPI WebBrowser_get_Type(IWebBrowser *iface, BSTR *Type)
251 WebBrowser *This = WEBBROWSER_THIS(iface);
252 FIXME("(%p)->(%p)\n", This, Type);
256 static HRESULT WINAPI WebBrowser_get_Left(IWebBrowser *iface, long *pl)
258 WebBrowser *This = WEBBROWSER_THIS(iface);
259 FIXME("(%p)->(%p)\n", This, pl);
263 static HRESULT WINAPI WebBrowser_put_Left(IWebBrowser *iface, long Left)
265 WebBrowser *This = WEBBROWSER_THIS(iface);
266 FIXME("(%p)->(%ld)\n", This, Left);
270 static HRESULT WINAPI WebBrowser_get_Top(IWebBrowser *iface, long *pl)
272 WebBrowser *This = WEBBROWSER_THIS(iface);
273 FIXME("(%p)->(%p)\n", This, pl);
277 static HRESULT WINAPI WebBrowser_put_Top(IWebBrowser *iface, long Top)
279 WebBrowser *This = WEBBROWSER_THIS(iface);
280 FIXME("(%p)->(%ld)\n", This, Top);
284 static HRESULT WINAPI WebBrowser_get_Width(IWebBrowser *iface, long *pl)
286 WebBrowser *This = WEBBROWSER_THIS(iface);
287 FIXME("(%p)->(%p)\n", This, pl);
291 static HRESULT WINAPI WebBrowser_put_Width(IWebBrowser *iface, long Width)
293 WebBrowser *This = WEBBROWSER_THIS(iface);
294 FIXME("(%p)->(%ld)\n", This, Width);
298 static HRESULT WINAPI WebBrowser_get_Height(IWebBrowser *iface, long *pl)
300 WebBrowser *This = WEBBROWSER_THIS(iface);
301 FIXME("(%p)->(%p)\n", This, pl);
305 static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser *iface, long Height)
307 WebBrowser *This = WEBBROWSER_THIS(iface);
308 FIXME("(%p)->(%ld)\n", This, Height);
312 static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser *iface, BSTR *LocationName)
314 WebBrowser *This = WEBBROWSER_THIS(iface);
315 FIXME("(%p)->(%p)\n", This, LocationName);
319 static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser *iface, BSTR *LocationURL)
321 WebBrowser *This = WEBBROWSER_THIS(iface);
322 FIXME("(%p)->(%p)\n", This, LocationURL);
326 static HRESULT WINAPI WebBrowser_get_Busy(IWebBrowser *iface, VARIANT_BOOL *pBool)
328 WebBrowser *This = WEBBROWSER_THIS(iface);
329 FIXME("(%p)->(%p)\n", This, pBool);
333 #undef WEBBROWSER_THIS
335 /**********************************************************************
336 * IWebBrowser virtual function table for IWebBrowser interface
339 static const IWebBrowserVtbl WebBrowserVtbl =
341 WebBrowser_QueryInterface,
344 WebBrowser_GetTypeInfoCount,
345 WebBrowser_GetTypeInfo,
346 WebBrowser_GetIDsOfNames,
349 WebBrowser_GoForward,
356 WebBrowser_get_Application,
357 WebBrowser_get_Parent,
358 WebBrowser_get_Container,
359 WebBrowser_get_Document,
360 WebBrowser_get_TopLevelContainer,
366 WebBrowser_get_Width,
367 WebBrowser_put_Width,
368 WebBrowser_get_Height,
369 WebBrowser_put_Height,
370 WebBrowser_get_LocationName,
371 WebBrowser_get_LocationURL,
375 HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
380 TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
382 ret = HeapAlloc(GetProcessHeap(), 0, sizeof(WebBrowser));
384 ret->lpWebBrowserVtbl = &WebBrowserVtbl;
387 WebBrowser_OleObject_Init(ret);
388 WebBrowser_Persist_Init(ret);
389 WebBrowser_ClassInfo_Init(ret);
390 WebBrowser_Misc_Init(ret);
392 hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
393 if(SUCCEEDED(hres)) {
394 SHDOCVW_LockModule();
396 HeapFree(GetProcessHeap(), 0, ret);