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 FIXME("(%p)->(IID_IOleControl %p)\n", This, ppv);
62 }else if(IsEqualGUID (&IID_IPersistStorage, riid)) {
63 FIXME("(%p)->(IID_IPersistStorage %p)\n", This, ppv);
64 *ppv = &SHDOCVW_PersistStorage;
65 }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) {
66 FIXME("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
67 *ppv = &SHDOCVW_PersistStreamInit;
68 }else if(IsEqualGUID (&IID_IProvideClassInfo, riid)) {
69 FIXME("(%p)->(IID_IProvideClassInfo %p)\n", This, ppv);
70 *ppv = &SHDOCVW_ProvideClassInfo;
71 }else if(IsEqualGUID (&IID_IProvideClassInfo2, riid)) {
72 FIXME("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv);
73 *ppv = &SHDOCVW_ProvideClassInfo2;
74 }else if(IsEqualGUID (&IID_IQuickActivate, riid)) {
75 FIXME("(%p)->(IID_IQuickActivate %p)\n", This, ppv);
76 *ppv = &SHDOCVW_QuickActivate;
77 }else if(IsEqualGUID (&IID_IConnectionPointContainer, riid)) {
78 FIXME("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
79 *ppv = &SHDOCVW_ConnectionPointContainer;
83 IUnknown_AddRef((IUnknown*)*ppv);
87 FIXME("(%p)->(%s %p) interface not supported\n", This, debugstr_guid(riid), ppv);
91 static ULONG WINAPI WebBrowser_AddRef(IWebBrowser *iface)
93 WebBrowser *This = WEBBROWSER_THIS(iface);
94 LONG ref = InterlockedIncrement(&This->ref);
95 TRACE("(%p) ref=%ld\n", This, ref);
99 static ULONG WINAPI WebBrowser_Release(IWebBrowser *iface)
101 WebBrowser *This = WEBBROWSER_THIS(iface);
102 LONG ref = InterlockedDecrement(&This->ref);
104 TRACE("(%p) ref=%ld\n", This, ref);
107 HeapFree(GetProcessHeap(), 0, This);
108 SHDOCVW_UnlockModule();
114 /* IDispatch methods */
115 static HRESULT WINAPI WebBrowser_GetTypeInfoCount(IWebBrowser *iface, UINT *pctinfo)
117 WebBrowser *This = WEBBROWSER_THIS(iface);
118 FIXME("(%p)->(%p)\n", This, pctinfo);
122 static HRESULT WINAPI WebBrowser_GetTypeInfo(IWebBrowser *iface, UINT iTInfo, LCID lcid,
125 WebBrowser *This = WEBBROWSER_THIS(iface);
126 FIXME("(%p)->(%d %ld %p)\n", This, iTInfo, lcid, ppTInfo);
130 static HRESULT WINAPI WebBrowser_GetIDsOfNames(IWebBrowser *iface, REFIID riid,
131 LPOLESTR *rgszNames, UINT cNames,
132 LCID lcid, DISPID *rgDispId)
134 WebBrowser *This = WEBBROWSER_THIS(iface);
135 FIXME("(%p)->(%s %p %d %ld %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
140 static HRESULT WINAPI WebBrowser_Invoke(IWebBrowser *iface, DISPID dispIdMember,
141 REFIID riid, LCID lcid, WORD wFlags,
142 DISPPARAMS *pDispParams, VARIANT *pVarResult,
143 EXCEPINFO *pExepInfo, UINT *puArgErr)
145 WebBrowser *This = WEBBROWSER_THIS(iface);
146 FIXME("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
147 lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
151 /* IWebBrowser methods */
152 static HRESULT WINAPI WebBrowser_GoBack(IWebBrowser *iface)
154 WebBrowser *This = WEBBROWSER_THIS(iface);
155 FIXME("(%p)\n", This);
159 static HRESULT WINAPI WebBrowser_GoForward(IWebBrowser *iface)
161 WebBrowser *This = WEBBROWSER_THIS(iface);
162 FIXME("(%p)\n", This);
166 static HRESULT WINAPI WebBrowser_GoHome(IWebBrowser *iface)
168 WebBrowser *This = WEBBROWSER_THIS(iface);
169 FIXME("(%p)\n", This);
173 static HRESULT WINAPI WebBrowser_GoSearch(IWebBrowser *iface)
175 WebBrowser *This = WEBBROWSER_THIS(iface);
176 FIXME("(%p)\n", This);
180 static HRESULT WINAPI WebBrowser_Navigate(IWebBrowser *iface, BSTR URL,
181 VARIANT *Flags, VARIANT *TargetFrameName,
182 VARIANT *PostData, VARIANT *Headers)
184 WebBrowser *This = WEBBROWSER_THIS(iface);
185 FIXME("(%p)->(%s %p %p %p %p)\n", This, debugstr_w(URL), Flags, TargetFrameName,
190 static HRESULT WINAPI WebBrowser_Refresh(IWebBrowser *iface)
192 WebBrowser *This = WEBBROWSER_THIS(iface);
193 FIXME("(%p)\n", This);
197 static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser *iface, VARIANT *Level)
199 WebBrowser *This = WEBBROWSER_THIS(iface);
200 FIXME("(%p)->(%p)\n", This, Level);
204 static HRESULT WINAPI WebBrowser_Stop(IWebBrowser *iface)
206 WebBrowser *This = WEBBROWSER_THIS(iface);
207 FIXME("(%p)\n", This);
211 static HRESULT WINAPI WebBrowser_get_Application(IWebBrowser *iface, IDispatch **ppDisp)
213 WebBrowser *This = WEBBROWSER_THIS(iface);
214 FIXME("(%p)->(%p)\n", This, ppDisp);
218 static HRESULT WINAPI WebBrowser_get_Parent(IWebBrowser *iface, IDispatch **ppDisp)
220 WebBrowser *This = WEBBROWSER_THIS(iface);
221 FIXME("(%p)->(%p)\n", This, ppDisp);
225 static HRESULT WINAPI WebBrowser_get_Container(IWebBrowser *iface, IDispatch **ppDisp)
227 WebBrowser *This = WEBBROWSER_THIS(iface);
228 FIXME("(%p)->(%p)\n", This, ppDisp);
232 static HRESULT WINAPI WebBrowser_get_Document(IWebBrowser *iface, IDispatch **ppDisp)
234 WebBrowser *This = WEBBROWSER_THIS(iface);
235 FIXME("(%p)->(%p)\n", This, ppDisp);
239 static HRESULT WINAPI WebBrowser_get_TopLevelContainer(IWebBrowser *iface, VARIANT_BOOL *pBool)
241 WebBrowser *This = WEBBROWSER_THIS(iface);
242 FIXME("(%p)->(%p)\n", This, pBool);
246 static HRESULT WINAPI WebBrowser_get_Type(IWebBrowser *iface, BSTR *Type)
248 WebBrowser *This = WEBBROWSER_THIS(iface);
249 FIXME("(%p)->(%p)\n", This, Type);
253 static HRESULT WINAPI WebBrowser_get_Left(IWebBrowser *iface, long *pl)
255 WebBrowser *This = WEBBROWSER_THIS(iface);
256 FIXME("(%p)->(%p)\n", This, pl);
260 static HRESULT WINAPI WebBrowser_put_Left(IWebBrowser *iface, long Left)
262 WebBrowser *This = WEBBROWSER_THIS(iface);
263 FIXME("(%p)->(%ld)\n", This, Left);
267 static HRESULT WINAPI WebBrowser_get_Top(IWebBrowser *iface, long *pl)
269 WebBrowser *This = WEBBROWSER_THIS(iface);
270 FIXME("(%p)->(%p)\n", This, pl);
274 static HRESULT WINAPI WebBrowser_put_Top(IWebBrowser *iface, long Top)
276 WebBrowser *This = WEBBROWSER_THIS(iface);
277 FIXME("(%p)->(%ld)\n", This, Top);
281 static HRESULT WINAPI WebBrowser_get_Width(IWebBrowser *iface, long *pl)
283 WebBrowser *This = WEBBROWSER_THIS(iface);
284 FIXME("(%p)->(%p)\n", This, pl);
288 static HRESULT WINAPI WebBrowser_put_Width(IWebBrowser *iface, long Width)
290 WebBrowser *This = WEBBROWSER_THIS(iface);
291 FIXME("(%p)->(%ld)\n", This, Width);
295 static HRESULT WINAPI WebBrowser_get_Height(IWebBrowser *iface, long *pl)
297 WebBrowser *This = WEBBROWSER_THIS(iface);
298 FIXME("(%p)->(%p)\n", This, pl);
302 static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser *iface, long Height)
304 WebBrowser *This = WEBBROWSER_THIS(iface);
305 FIXME("(%p)->(%ld)\n", This, Height);
309 static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser *iface, BSTR *LocationName)
311 WebBrowser *This = WEBBROWSER_THIS(iface);
312 FIXME("(%p)->(%p)\n", This, LocationName);
316 static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser *iface, BSTR *LocationURL)
318 WebBrowser *This = WEBBROWSER_THIS(iface);
319 FIXME("(%p)->(%p)\n", This, LocationURL);
323 static HRESULT WINAPI WebBrowser_get_Busy(IWebBrowser *iface, VARIANT_BOOL *pBool)
325 WebBrowser *This = WEBBROWSER_THIS(iface);
326 FIXME("(%p)->(%p)\n", This, pBool);
330 #undef WEBBROWSER_THIS
332 /**********************************************************************
333 * IWebBrowser virtual function table for IWebBrowser interface
336 static const IWebBrowserVtbl WebBrowserVtbl =
338 WebBrowser_QueryInterface,
341 WebBrowser_GetTypeInfoCount,
342 WebBrowser_GetTypeInfo,
343 WebBrowser_GetIDsOfNames,
346 WebBrowser_GoForward,
353 WebBrowser_get_Application,
354 WebBrowser_get_Parent,
355 WebBrowser_get_Container,
356 WebBrowser_get_Document,
357 WebBrowser_get_TopLevelContainer,
363 WebBrowser_get_Width,
364 WebBrowser_put_Width,
365 WebBrowser_get_Height,
366 WebBrowser_put_Height,
367 WebBrowser_get_LocationName,
368 WebBrowser_get_LocationURL,
372 HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
377 TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
379 ret = HeapAlloc(GetProcessHeap(), 0, sizeof(WebBrowser));
381 ret->lpWebBrowserVtbl = &WebBrowserVtbl;
384 WebBrowser_OleObject_Init(ret);
386 hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
387 if(SUCCEEDED(hres)) {
388 SHDOCVW_LockModule();
390 HeapFree(GetProcessHeap(), 0, ret);