d3d8: Render state additions.
[wine/multimedia.git] / dlls / shdocvw / webbrowser.c
blob81109505899cac89f96794bc158ab0fc87acf21d
1 /*
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"
23 #include "shdocvw.h"
24 #include "mshtml.h"
27 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
29 /**********************************************************************
30 * Implement the IWebBrowser interface
33 #define WEBBROWSER_THIS(iface) DEFINE_THIS(WebBrowser, WebBrowser2, iface)
35 static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, LPVOID *ppv)
37 WebBrowser *This = WEBBROWSER_THIS(iface);
39 if (ppv == NULL)
40 return E_POINTER;
41 *ppv = NULL;
43 if(IsEqualGUID(&IID_IUnknown, riid)) {
44 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
45 *ppv = WEBBROWSER(This);
46 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
47 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
48 *ppv = WEBBROWSER(This);
49 }else if(IsEqualGUID(&IID_IWebBrowser, riid)) {
50 TRACE("(%p)->(IID_IWebBrowser %p)\n", This, ppv);
51 *ppv = WEBBROWSER(This);
52 }else if(IsEqualGUID(&IID_IWebBrowserApp, riid)) {
53 TRACE("(%p)->(IID_IWebBrowserApp %p)\n", This, ppv);
54 *ppv = WEBBROWSER(This);
55 }else if(IsEqualGUID(&IID_IWebBrowser2, riid)) {
56 TRACE("(%p)->(IID_IWebBrowser2 %p)\n", This, ppv);
57 *ppv = WEBBROWSER(This);
58 }else if(IsEqualGUID(&IID_IOleObject, riid)) {
59 TRACE("(%p)->(IID_IOleObject %p)\n", This, ppv);
60 *ppv = OLEOBJ(This);
61 }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
62 TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
63 *ppv = INPLACEOBJ(This);
64 }else if(IsEqualGUID (&IID_IOleInPlaceObject, riid)) {
65 TRACE("(%p)->(IID_IOleInPlaceObject %p)\n", This, ppv);
66 *ppv = INPLACEOBJ(This);
67 }else if(IsEqualGUID(&IID_IOleControl, riid)) {
68 TRACE("(%p)->(IID_IOleControl %p)\n", This, ppv);
69 *ppv = CONTROL(This);
70 }else if(IsEqualGUID(&IID_IPersist, riid)) {
71 TRACE("(%p)->(IID_IPersist %p)\n", This, ppv);
72 *ppv = PERSTORAGE(This);
73 }else if(IsEqualGUID(&IID_IPersistStorage, riid)) {
74 TRACE("(%p)->(IID_IPersistStorage %p)\n", This, ppv);
75 *ppv = PERSTORAGE(This);
76 }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) {
77 TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
78 *ppv = PERSTRINIT(This);
79 }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) {
80 TRACE("(%p)->(IID_IProvideClassInfo %p)\n", This, ppv);
81 *ppv = CLASSINFO(This);
82 }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) {
83 TRACE("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv);
84 *ppv = CLASSINFO(This);
85 }else if(IsEqualGUID(&IID_IQuickActivate, riid)) {
86 TRACE("(%p)->(IID_IQuickActivate %p)\n", This, ppv);
87 *ppv = QUICKACT(This);
88 }else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
89 TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
90 *ppv = CONPTCONT(This);
91 }else if(IsEqualGUID(&IID_IViewObject, riid)) {
92 TRACE("(%p)->(IID_IViewObject %p)\n", This, ppv);
93 *ppv = VIEWOBJ(This);
94 }else if(IsEqualGUID(&IID_IViewObject2, riid)) {
95 TRACE("(%p)->(IID_IViewObject2 %p)\n", This, ppv);
96 *ppv = VIEWOBJ2(This);
97 }else if(IsEqualGUID(&IID_IOleInPlaceActiveObject, riid)) {
98 TRACE("(%p)->(IID_IOleInPlaceActiveObject %p)\n", This, ppv);
99 *ppv = ACTIVEOBJ(This);
102 if(*ppv) {
103 IUnknown_AddRef((IUnknown*)*ppv);
104 return S_OK;
107 FIXME("(%p)->(%s %p) interface not supported\n", This, debugstr_guid(riid), ppv);
108 return E_NOINTERFACE;
111 static ULONG WINAPI WebBrowser_AddRef(IWebBrowser2 *iface)
113 WebBrowser *This = WEBBROWSER_THIS(iface);
114 LONG ref = InterlockedIncrement(&This->ref);
115 TRACE("(%p) ref=%ld\n", This, ref);
116 return ref;
119 static ULONG WINAPI WebBrowser_Release(IWebBrowser2 *iface)
121 WebBrowser *This = WEBBROWSER_THIS(iface);
122 LONG ref = InterlockedDecrement(&This->ref);
124 TRACE("(%p) ref=%ld\n", This, ref);
126 if(!ref) {
127 if(This->document)
128 IUnknown_Release(This->document);
130 WebBrowser_OleObject_Destroy(This);
131 WebBrowser_Events_Destroy(This);
132 WebBrowser_ClientSite_Destroy(This);
134 SysFreeString(This->url);
135 HeapFree(GetProcessHeap(), 0, This);
136 SHDOCVW_UnlockModule();
139 return ref;
142 /* IDispatch methods */
143 static HRESULT WINAPI WebBrowser_GetTypeInfoCount(IWebBrowser2 *iface, UINT *pctinfo)
145 WebBrowser *This = WEBBROWSER_THIS(iface);
146 FIXME("(%p)->(%p)\n", This, pctinfo);
147 return E_NOTIMPL;
150 static HRESULT WINAPI WebBrowser_GetTypeInfo(IWebBrowser2 *iface, UINT iTInfo, LCID lcid,
151 LPTYPEINFO *ppTInfo)
153 WebBrowser *This = WEBBROWSER_THIS(iface);
154 FIXME("(%p)->(%d %ld %p)\n", This, iTInfo, lcid, ppTInfo);
155 return E_NOTIMPL;
158 static HRESULT WINAPI WebBrowser_GetIDsOfNames(IWebBrowser2 *iface, REFIID riid,
159 LPOLESTR *rgszNames, UINT cNames,
160 LCID lcid, DISPID *rgDispId)
162 WebBrowser *This = WEBBROWSER_THIS(iface);
163 FIXME("(%p)->(%s %p %d %ld %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
164 lcid, rgDispId);
165 return E_NOTIMPL;
168 static HRESULT WINAPI WebBrowser_Invoke(IWebBrowser2 *iface, DISPID dispIdMember,
169 REFIID riid, LCID lcid, WORD wFlags,
170 DISPPARAMS *pDispParams, VARIANT *pVarResult,
171 EXCEPINFO *pExepInfo, UINT *puArgErr)
173 WebBrowser *This = WEBBROWSER_THIS(iface);
174 FIXME("(%p)->(%ld %s %ld %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
175 lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
176 return E_NOTIMPL;
179 /* IWebBrowser methods */
180 static HRESULT WINAPI WebBrowser_GoBack(IWebBrowser2 *iface)
182 WebBrowser *This = WEBBROWSER_THIS(iface);
183 FIXME("(%p)\n", This);
184 return E_NOTIMPL;
187 static HRESULT WINAPI WebBrowser_GoForward(IWebBrowser2 *iface)
189 WebBrowser *This = WEBBROWSER_THIS(iface);
190 FIXME("(%p)\n", This);
191 return E_NOTIMPL;
194 static HRESULT WINAPI WebBrowser_GoHome(IWebBrowser2 *iface)
196 WebBrowser *This = WEBBROWSER_THIS(iface);
197 FIXME("(%p)\n", This);
198 return E_NOTIMPL;
201 static HRESULT WINAPI WebBrowser_GoSearch(IWebBrowser2 *iface)
203 WebBrowser *This = WEBBROWSER_THIS(iface);
204 FIXME("(%p)\n", This);
205 return E_NOTIMPL;
208 static HRESULT WINAPI WebBrowser_Navigate(IWebBrowser2 *iface, BSTR URL,
209 VARIANT *Flags, VARIANT *TargetFrameName,
210 VARIANT *PostData, VARIANT *Headers)
212 WebBrowser *This = WEBBROWSER_THIS(iface);
213 FIXME("(%p)->(%s %p %p %p %p)\n", This, debugstr_w(URL), Flags, TargetFrameName,
214 PostData, Headers);
215 return E_NOTIMPL;
218 static HRESULT WINAPI WebBrowser_Refresh(IWebBrowser2 *iface)
220 WebBrowser *This = WEBBROWSER_THIS(iface);
221 FIXME("(%p)\n", This);
222 return E_NOTIMPL;
225 static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser2 *iface, VARIANT *Level)
227 WebBrowser *This = WEBBROWSER_THIS(iface);
228 FIXME("(%p)->(%p)\n", This, Level);
229 return E_NOTIMPL;
232 static HRESULT WINAPI WebBrowser_Stop(IWebBrowser2 *iface)
234 WebBrowser *This = WEBBROWSER_THIS(iface);
235 FIXME("(%p)\n", This);
236 return E_NOTIMPL;
239 static HRESULT WINAPI WebBrowser_get_Application(IWebBrowser2 *iface, IDispatch **ppDisp)
241 WebBrowser *This = WEBBROWSER_THIS(iface);
242 FIXME("(%p)->(%p)\n", This, ppDisp);
243 return E_NOTIMPL;
246 static HRESULT WINAPI WebBrowser_get_Parent(IWebBrowser2 *iface, IDispatch **ppDisp)
248 WebBrowser *This = WEBBROWSER_THIS(iface);
249 FIXME("(%p)->(%p)\n", This, ppDisp);
250 return E_NOTIMPL;
253 static HRESULT WINAPI WebBrowser_get_Container(IWebBrowser2 *iface, IDispatch **ppDisp)
255 WebBrowser *This = WEBBROWSER_THIS(iface);
256 FIXME("(%p)->(%p)\n", This, ppDisp);
257 return E_NOTIMPL;
260 static HRESULT WINAPI WebBrowser_get_Document(IWebBrowser2 *iface, IDispatch **ppDisp)
262 WebBrowser *This = WEBBROWSER_THIS(iface);
264 TRACE("(%p)->(%p)\n", This, ppDisp);
266 *ppDisp = NULL;
267 if(This->document)
268 IUnknown_QueryInterface(This->document, &IID_IDispatch, (void**)ppDisp);
270 return S_OK;
273 static HRESULT WINAPI WebBrowser_get_TopLevelContainer(IWebBrowser2 *iface, VARIANT_BOOL *pBool)
275 WebBrowser *This = WEBBROWSER_THIS(iface);
276 FIXME("(%p)->(%p)\n", This, pBool);
277 return E_NOTIMPL;
280 static HRESULT WINAPI WebBrowser_get_Type(IWebBrowser2 *iface, BSTR *Type)
282 WebBrowser *This = WEBBROWSER_THIS(iface);
283 FIXME("(%p)->(%p)\n", This, Type);
284 return E_NOTIMPL;
287 static HRESULT WINAPI WebBrowser_get_Left(IWebBrowser2 *iface, long *pl)
289 WebBrowser *This = WEBBROWSER_THIS(iface);
290 FIXME("(%p)->(%p)\n", This, pl);
291 return E_NOTIMPL;
294 static HRESULT WINAPI WebBrowser_put_Left(IWebBrowser2 *iface, long Left)
296 WebBrowser *This = WEBBROWSER_THIS(iface);
297 FIXME("(%p)->(%ld)\n", This, Left);
298 return E_NOTIMPL;
301 static HRESULT WINAPI WebBrowser_get_Top(IWebBrowser2 *iface, long *pl)
303 WebBrowser *This = WEBBROWSER_THIS(iface);
304 FIXME("(%p)->(%p)\n", This, pl);
305 return E_NOTIMPL;
308 static HRESULT WINAPI WebBrowser_put_Top(IWebBrowser2 *iface, long Top)
310 WebBrowser *This = WEBBROWSER_THIS(iface);
311 FIXME("(%p)->(%ld)\n", This, Top);
312 return E_NOTIMPL;
315 static HRESULT WINAPI WebBrowser_get_Width(IWebBrowser2 *iface, long *pl)
317 WebBrowser *This = WEBBROWSER_THIS(iface);
318 FIXME("(%p)->(%p)\n", This, pl);
319 return E_NOTIMPL;
322 static HRESULT WINAPI WebBrowser_put_Width(IWebBrowser2 *iface, long Width)
324 WebBrowser *This = WEBBROWSER_THIS(iface);
325 FIXME("(%p)->(%ld)\n", This, Width);
326 return E_NOTIMPL;
329 static HRESULT WINAPI WebBrowser_get_Height(IWebBrowser2 *iface, long *pl)
331 WebBrowser *This = WEBBROWSER_THIS(iface);
332 FIXME("(%p)->(%p)\n", This, pl);
333 return E_NOTIMPL;
336 static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser2 *iface, long Height)
338 WebBrowser *This = WEBBROWSER_THIS(iface);
339 FIXME("(%p)->(%ld)\n", This, Height);
340 return E_NOTIMPL;
343 static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser2 *iface, BSTR *LocationName)
345 WebBrowser *This = WEBBROWSER_THIS(iface);
346 FIXME("(%p)->(%p)\n", This, LocationName);
347 return E_NOTIMPL;
350 static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser2 *iface, BSTR *LocationURL)
352 WebBrowser *This = WEBBROWSER_THIS(iface);
353 FIXME("(%p)->(%p)\n", This, LocationURL);
354 return E_NOTIMPL;
357 static HRESULT WINAPI WebBrowser_get_Busy(IWebBrowser2 *iface, VARIANT_BOOL *pBool)
359 WebBrowser *This = WEBBROWSER_THIS(iface);
360 FIXME("(%p)->(%p)\n", This, pBool);
361 return E_NOTIMPL;
364 static HRESULT WINAPI WebBrowser_Quit(IWebBrowser2 *iface)
366 WebBrowser *This = WEBBROWSER_THIS(iface);
367 FIXME("(%p)\n", This);
368 return E_NOTIMPL;
371 static HRESULT WINAPI WebBrowser_ClientToWindow(IWebBrowser2 *iface, int *pcx, int *pcy)
373 WebBrowser *This = WEBBROWSER_THIS(iface);
374 FIXME("(%p)->(%p %p)\n", This, pcx, pcy);
375 return E_NOTIMPL;
378 static HRESULT WINAPI WebBrowser_PutProperty(IWebBrowser2 *iface, BSTR szProperty, VARIANT vtValue)
380 WebBrowser *This = WEBBROWSER_THIS(iface);
381 FIXME("(%p)->(%s)\n", This, debugstr_w(szProperty));
382 return E_NOTIMPL;
385 static HRESULT WINAPI WebBrowser_GetProperty(IWebBrowser2 *iface, BSTR szProperty, VARIANT *pvtValue)
387 WebBrowser *This = WEBBROWSER_THIS(iface);
388 FIXME("(%p)->(%s %p)\n", This, debugstr_w(szProperty), pvtValue);
389 return E_NOTIMPL;
392 static HRESULT WINAPI WebBrowser_get_Name(IWebBrowser2 *iface, BSTR *Name)
394 WebBrowser *This = WEBBROWSER_THIS(iface);
395 FIXME("(%p)->(%p)\n", This, Name);
396 return E_NOTIMPL;
399 static HRESULT WINAPI WebBrowser_get_HWND(IWebBrowser2 *iface, long *pHWND)
401 WebBrowser *This = WEBBROWSER_THIS(iface);
402 FIXME("(%p)->(%p)\n", This, pHWND);
403 return E_NOTIMPL;
406 static HRESULT WINAPI WebBrowser_get_FullName(IWebBrowser2 *iface, BSTR *FullName)
408 WebBrowser *This = WEBBROWSER_THIS(iface);
409 FIXME("(%p)->(%p)\n", This, FullName);
410 return E_NOTIMPL;
413 static HRESULT WINAPI WebBrowser_get_Path(IWebBrowser2 *iface, BSTR *Path)
415 WebBrowser *This = WEBBROWSER_THIS(iface);
416 FIXME("(%p)->(%p)\n", This, Path);
417 return E_NOTIMPL;
420 static HRESULT WINAPI WebBrowser_get_Visible(IWebBrowser2 *iface, VARIANT_BOOL *pBool)
422 WebBrowser *This = WEBBROWSER_THIS(iface);
423 FIXME("(%p)->(%p)\n", This, pBool);
424 return E_NOTIMPL;
427 static HRESULT WINAPI WebBrowser_put_Visible(IWebBrowser2 *iface, VARIANT_BOOL Value)
429 WebBrowser *This = WEBBROWSER_THIS(iface);
430 FIXME("(%p)->(%x)\n", This, Value);
431 return E_NOTIMPL;
434 static HRESULT WINAPI WebBrowser_get_StatusBar(IWebBrowser2 *iface, VARIANT_BOOL *pBool)
436 WebBrowser *This = WEBBROWSER_THIS(iface);
437 FIXME("(%p)->(%p)\n", This, pBool);
438 return E_NOTIMPL;
441 static HRESULT WINAPI WebBrowser_put_StatusBar(IWebBrowser2 *iface, VARIANT_BOOL Value)
443 WebBrowser *This = WEBBROWSER_THIS(iface);
444 FIXME("(%p)->(%x)\n", This, Value);
445 return E_NOTIMPL;
448 static HRESULT WINAPI WebBrowser_get_StatusText(IWebBrowser2 *iface, BSTR *StatusText)
450 WebBrowser *This = WEBBROWSER_THIS(iface);
451 FIXME("(%p)->(%p)\n", This, StatusText);
452 return E_NOTIMPL;
455 static HRESULT WINAPI WebBrowser_put_StatusText(IWebBrowser2 *iface, BSTR StatusText)
457 WebBrowser *This = WEBBROWSER_THIS(iface);
458 FIXME("(%p)->(%s)\n", This, debugstr_w(StatusText));
459 return E_NOTIMPL;
462 static HRESULT WINAPI WebBrowser_get_ToolBar(IWebBrowser2 *iface, int *Value)
464 WebBrowser *This = WEBBROWSER_THIS(iface);
465 FIXME("(%p)->(%p)\n", This, Value);
466 return E_NOTIMPL;
469 static HRESULT WINAPI WebBrowser_put_ToolBar(IWebBrowser2 *iface, int Value)
471 WebBrowser *This = WEBBROWSER_THIS(iface);
472 FIXME("(%p)->(%d)\n", This, Value);
473 return E_NOTIMPL;
476 static HRESULT WINAPI WebBrowser_get_MenuBar(IWebBrowser2 *iface, VARIANT_BOOL *Value)
478 WebBrowser *This = WEBBROWSER_THIS(iface);
479 FIXME("(%p)->(%p)\n", This, Value);
480 return E_NOTIMPL;
483 static HRESULT WINAPI WebBrowser_put_MenuBar(IWebBrowser2 *iface, VARIANT_BOOL Value)
485 WebBrowser *This = WEBBROWSER_THIS(iface);
486 FIXME("(%p)->(%x)\n", This, Value);
487 return E_NOTIMPL;
490 static HRESULT WINAPI WebBrowser_get_FullScreen(IWebBrowser2 *iface, VARIANT_BOOL *pbFullScreen)
492 WebBrowser *This = WEBBROWSER_THIS(iface);
493 FIXME("(%p)->(%p)\n", This, pbFullScreen);
494 return E_NOTIMPL;
497 static HRESULT WINAPI WebBrowser_put_FullScreen(IWebBrowser2 *iface, VARIANT_BOOL bFullScreen)
499 WebBrowser *This = WEBBROWSER_THIS(iface);
500 FIXME("(%p)->(%x)\n", This, bFullScreen);
501 return E_NOTIMPL;
504 static HRESULT WINAPI WebBrowser_Navigate2(IWebBrowser2 *iface, VARIANT *URL, VARIANT *Flags,
505 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
507 WebBrowser *This = WEBBROWSER_THIS(iface);
508 IPersistMoniker *persist;
509 IOleObject *oleobj;
510 IMoniker *mon;
511 HRESULT hres;
513 TRACE("(%p)->(%p %p %p %p %p)\n", This, URL, Flags, TargetFrameName, PostData, Headers);
515 if(!This->client)
516 return E_FAIL;
518 if((Flags && V_VT(Flags) != VT_EMPTY)
519 || (TargetFrameName && V_VT(TargetFrameName) != VT_EMPTY)
520 || (PostData && V_VT(PostData) != VT_EMPTY)
521 || (Headers && V_VT(Headers) != VT_EMPTY))
522 FIXME("Unsupported arguments\n");
524 if(!URL)
525 return S_OK;
526 if(V_VT(URL) != VT_BSTR)
527 return E_INVALIDARG;
529 if(!This->doc_view_hwnd)
530 create_doc_view_hwnd(This);
533 * FIXME:
534 * We should use URLMoniker's BindToObject instead creating HTMLDocument here.
535 * This should be fixed when mshtml.dll and urlmon.dll will be good enough.
538 if(!This->document) {
539 hres = CoCreateInstance(&CLSID_HTMLDocument, NULL,
540 CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
541 &IID_IUnknown, (void**)&This->document);
542 if(FAILED(hres))
543 return hres;
546 hres = IUnknown_QueryInterface(This->document, &IID_IPersistMoniker, (void**)&persist);
547 if(FAILED(hres))
548 return hres;
550 hres = CreateURLMoniker(NULL, V_BSTR(URL), &mon);
551 if(FAILED(hres)) {
552 IPersistMoniker_Release(persist);
553 return hres;
556 hres = IPersistMoniker_Load(persist, FALSE, mon, NULL /* FIXME */, 0);
557 IMoniker_Release(mon);
558 IPersistMoniker_Release(persist);
559 if(FAILED(hres)) {
560 WARN("Load failed: %08lx\n", hres);
561 return hres;
564 This->url = SysAllocString(V_BSTR(URL));
566 hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&oleobj);
567 if(FAILED(hres))
568 return hres;
570 hres = IOleObject_SetClientSite(oleobj, CLIENTSITE(This));
571 IOleObject_Release(oleobj);
573 PostMessageW(This->doc_view_hwnd, WB_WM_NAVIGATE2, 0, 0);
575 return hres;
578 static HRESULT WINAPI WebBrowser_QueryStatusWB(IWebBrowser2 *iface, OLECMDID cmdID, OLECMDF *pcmdf)
580 WebBrowser *This = WEBBROWSER_THIS(iface);
581 FIXME("(%p)->(%d %p)\n", This, cmdID, pcmdf);
582 return E_NOTIMPL;
585 static HRESULT WINAPI WebBrowser_ExecWB(IWebBrowser2 *iface, OLECMDID cmdID,
586 OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
588 WebBrowser *This = WEBBROWSER_THIS(iface);
589 FIXME("(%p)->(%d %d %p %p)\n", This, cmdID, cmdexecopt, pvaIn, pvaOut);
590 return E_NOTIMPL;
593 static HRESULT WINAPI WebBrowser_ShowBrowserBar(IWebBrowser2 *iface, VARIANT *pvaClsid,
594 VARIANT *pvarShow, VARIANT *pvarSize)
596 WebBrowser *This = WEBBROWSER_THIS(iface);
597 FIXME("(%p)->(%p %p %p)\n", This, pvaClsid, pvarShow, pvarSize);
598 return E_NOTIMPL;
601 static HRESULT WINAPI WebBrowser_get_ReadyState(IWebBrowser2 *iface, READYSTATE *lpReadyState)
603 WebBrowser *This = WEBBROWSER_THIS(iface);
604 FIXME("(%p)->(%p)\n", This, lpReadyState);
605 return E_NOTIMPL;
608 static HRESULT WINAPI WebBrowser_get_Offline(IWebBrowser2 *iface, VARIANT_BOOL *pbOffline)
610 WebBrowser *This = WEBBROWSER_THIS(iface);
611 FIXME("(%p)->(%p)\n", This, pbOffline);
612 return E_NOTIMPL;
615 static HRESULT WINAPI WebBrowser_put_Offline(IWebBrowser2 *iface, VARIANT_BOOL bOffline)
617 WebBrowser *This = WEBBROWSER_THIS(iface);
618 FIXME("(%p)->(%x)\n", This, bOffline);
619 return E_NOTIMPL;
622 static HRESULT WINAPI WebBrowser_get_Silent(IWebBrowser2 *iface, VARIANT_BOOL *pbSilent)
624 WebBrowser *This = WEBBROWSER_THIS(iface);
625 FIXME("(%p)->(%p)\n", This, pbSilent);
626 return E_NOTIMPL;
629 static HRESULT WINAPI WebBrowser_put_Silent(IWebBrowser2 *iface, VARIANT_BOOL bSilent)
631 WebBrowser *This = WEBBROWSER_THIS(iface);
632 FIXME("(%p)->(%x)\n", This, bSilent);
633 return E_NOTIMPL;
636 static HRESULT WINAPI WebBrowser_get_RegisterAsBrowser(IWebBrowser2 *iface,
637 VARIANT_BOOL *pbRegister)
639 WebBrowser *This = WEBBROWSER_THIS(iface);
640 FIXME("(%p)->(%p)\n", This, pbRegister);
641 return E_NOTIMPL;
644 static HRESULT WINAPI WebBrowser_put_RegisterAsBrowser(IWebBrowser2 *iface,
645 VARIANT_BOOL bRegister)
647 WebBrowser *This = WEBBROWSER_THIS(iface);
648 FIXME("(%p)->(%x)\n", This, bRegister);
649 return E_NOTIMPL;
652 static HRESULT WINAPI WebBrowser_get_RegisterAsDropTarget(IWebBrowser2 *iface,
653 VARIANT_BOOL *pbRegister)
655 WebBrowser *This = WEBBROWSER_THIS(iface);
656 FIXME("(%p)->(%p)\n", This, pbRegister);
657 return E_NOTIMPL;
660 static HRESULT WINAPI WebBrowser_put_RegisterAsDropTarget(IWebBrowser2 *iface,
661 VARIANT_BOOL bRegister)
663 WebBrowser *This = WEBBROWSER_THIS(iface);
664 FIXME("(%p)->(%x)\n", This, bRegister);
665 return E_NOTIMPL;
668 static HRESULT WINAPI WebBrowser_get_TheaterMode(IWebBrowser2 *iface, VARIANT_BOOL *pbRegister)
670 WebBrowser *This = WEBBROWSER_THIS(iface);
671 FIXME("(%p)->(%p)\n", This, pbRegister);
672 return E_NOTIMPL;
675 static HRESULT WINAPI WebBrowser_put_TheaterMode(IWebBrowser2 *iface, VARIANT_BOOL bRegister)
677 WebBrowser *This = WEBBROWSER_THIS(iface);
678 FIXME("(%p)->(%x)\n", This, bRegister);
679 return E_NOTIMPL;
682 static HRESULT WINAPI WebBrowser_get_AddressBar(IWebBrowser2 *iface, VARIANT_BOOL *Value)
684 WebBrowser *This = WEBBROWSER_THIS(iface);
685 FIXME("(%p)->(%p)\n", This, Value);
686 return E_NOTIMPL;
689 static HRESULT WINAPI WebBrowser_put_AddressBar(IWebBrowser2 *iface, VARIANT_BOOL Value)
691 WebBrowser *This = WEBBROWSER_THIS(iface);
692 FIXME("(%p)->(%x)\n", This, Value);
693 return E_NOTIMPL;
696 static HRESULT WINAPI WebBrowser_get_Resizable(IWebBrowser2 *iface, VARIANT_BOOL *Value)
698 WebBrowser *This = WEBBROWSER_THIS(iface);
699 FIXME("(%p)->(%p)\n", This, Value);
700 return E_NOTIMPL;
703 static HRESULT WINAPI WebBrowser_put_Resizable(IWebBrowser2 *iface, VARIANT_BOOL Value)
705 WebBrowser *This = WEBBROWSER_THIS(iface);
706 FIXME("(%p)->(%x)\n", This, Value);
707 return E_NOTIMPL;
710 #undef WEBBROWSER_THIS
712 static const IWebBrowser2Vtbl WebBrowser2Vtbl =
714 WebBrowser_QueryInterface,
715 WebBrowser_AddRef,
716 WebBrowser_Release,
717 WebBrowser_GetTypeInfoCount,
718 WebBrowser_GetTypeInfo,
719 WebBrowser_GetIDsOfNames,
720 WebBrowser_Invoke,
721 WebBrowser_GoBack,
722 WebBrowser_GoForward,
723 WebBrowser_GoHome,
724 WebBrowser_GoSearch,
725 WebBrowser_Navigate,
726 WebBrowser_Refresh,
727 WebBrowser_Refresh2,
728 WebBrowser_Stop,
729 WebBrowser_get_Application,
730 WebBrowser_get_Parent,
731 WebBrowser_get_Container,
732 WebBrowser_get_Document,
733 WebBrowser_get_TopLevelContainer,
734 WebBrowser_get_Type,
735 WebBrowser_get_Left,
736 WebBrowser_put_Left,
737 WebBrowser_get_Top,
738 WebBrowser_put_Top,
739 WebBrowser_get_Width,
740 WebBrowser_put_Width,
741 WebBrowser_get_Height,
742 WebBrowser_put_Height,
743 WebBrowser_get_LocationName,
744 WebBrowser_get_LocationURL,
745 WebBrowser_get_Busy,
746 WebBrowser_Quit,
747 WebBrowser_ClientToWindow,
748 WebBrowser_PutProperty,
749 WebBrowser_GetProperty,
750 WebBrowser_get_Name,
751 WebBrowser_get_HWND,
752 WebBrowser_get_FullName,
753 WebBrowser_get_Path,
754 WebBrowser_get_Visible,
755 WebBrowser_put_Visible,
756 WebBrowser_get_StatusBar,
757 WebBrowser_put_StatusBar,
758 WebBrowser_get_StatusText,
759 WebBrowser_put_StatusText,
760 WebBrowser_get_ToolBar,
761 WebBrowser_put_ToolBar,
762 WebBrowser_get_MenuBar,
763 WebBrowser_put_MenuBar,
764 WebBrowser_get_FullScreen,
765 WebBrowser_put_FullScreen,
766 WebBrowser_Navigate2,
767 WebBrowser_QueryStatusWB,
768 WebBrowser_ExecWB,
769 WebBrowser_ShowBrowserBar,
770 WebBrowser_get_ReadyState,
771 WebBrowser_get_Offline,
772 WebBrowser_put_Offline,
773 WebBrowser_get_Silent,
774 WebBrowser_put_Silent,
775 WebBrowser_get_RegisterAsBrowser,
776 WebBrowser_put_RegisterAsBrowser,
777 WebBrowser_get_RegisterAsDropTarget,
778 WebBrowser_put_RegisterAsDropTarget,
779 WebBrowser_get_TheaterMode,
780 WebBrowser_put_TheaterMode,
781 WebBrowser_get_AddressBar,
782 WebBrowser_put_AddressBar,
783 WebBrowser_get_Resizable,
784 WebBrowser_put_Resizable
787 HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
789 WebBrowser *ret;
790 HRESULT hres;
792 TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
794 ret = HeapAlloc(GetProcessHeap(), 0, sizeof(WebBrowser));
796 ret->lpWebBrowser2Vtbl = &WebBrowser2Vtbl;
797 ret->ref = 0;
799 ret->document = NULL;
800 ret->url = NULL;
802 WebBrowser_OleObject_Init(ret);
803 WebBrowser_ViewObject_Init(ret);
804 WebBrowser_Persist_Init(ret);
805 WebBrowser_ClassInfo_Init(ret);
806 WebBrowser_Misc_Init(ret);
807 WebBrowser_Events_Init(ret);
808 WebBrowser_ClientSite_Init(ret);
809 WebBrowser_DocHost_Init(ret);
810 WebBrowser_Frame_Init(ret);
812 hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
813 if(SUCCEEDED(hres)) {
814 SHDOCVW_LockModule();
815 }else {
816 HeapFree(GetProcessHeap(), 0, ret);
817 return hres;
820 return hres;