2 * Implementation of IOleObject interfaces for IE Web Browser
8 * 2001 John R. Sheets (for CodeWeavers)
12 #include "debugtools.h"
16 DEFAULT_DEBUG_CHANNEL(shdocvw
);
18 /**********************************************************************
19 * Implement the IOleObject interface for the web browser component
21 * Based on DefaultHandler code in dlls/ole32/defaulthandler.c.
24 static ULONG WINAPI
WBOOBJ_AddRef(LPOLEOBJECT iface
);
25 static ULONG WINAPI
WBOOBJ_Release(LPOLEOBJECT iface
);
27 /************************************************************************
28 * WBOOBJ_QueryInterface (IUnknown)
30 * Interfaces we need to (at least pretend to) retrieve:
32 * a6bc3ac0-dbaa-11ce-9de3-00aa004bb851 IID_IProvideClassInfo2
33 * b196b283-bab4-101a-b69c-00aa00341d07 IID_IProvideClassInfo
34 * cf51ed10-62fe-11cf-bf86-00a0c9034836 IID_IQuickActivate
35 * 7fd52380-4e07-101b-ae2d-08002b2ec713 IID_IPersistStreamInit
36 * 0000010a-0000-0000-c000-000000000046 IID_IPersistStorage
37 * b196b284-bab4-101a-b69c-00aa00341d07 IID_IConnectionPointContainer
39 static HRESULT WINAPI
WBOOBJ_QueryInterface(LPOLEOBJECT iface
,
40 REFIID riid
, void** ppobj
)
42 ICOM_THIS(IOleObjectImpl
, iface
);
45 * Perform a sanity check on the parameters.
47 if ((This
== NULL
) || (ppobj
== NULL
) )
50 if (IsEqualGUID (&IID_IPersistStorage
, riid
))
52 TRACE("Returning IID_IPersistStorage interface\n");
53 *ppobj
= (LPVOID
)&SHDOCVW_PersistStorage
;
54 WBOOBJ_AddRef (iface
);
57 else if (IsEqualGUID (&IID_IPersistStreamInit
, riid
))
59 TRACE("Returning IID_IPersistStreamInit interface\n");
60 *ppobj
= (LPVOID
)&SHDOCVW_PersistStreamInit
;
61 WBOOBJ_AddRef (iface
);
64 else if (IsEqualGUID (&IID_IProvideClassInfo
, riid
))
66 TRACE("Returning IID_IProvideClassInfo interface\n");
67 *ppobj
= (LPVOID
)&SHDOCVW_ProvideClassInfo
;
68 WBOOBJ_AddRef (iface
);
71 else if (IsEqualGUID (&IID_IProvideClassInfo2
, riid
))
73 TRACE("Returning IID_IProvideClassInfo2 interface %p\n",
74 &SHDOCVW_ProvideClassInfo2
);
75 *ppobj
= (LPVOID
)&SHDOCVW_ProvideClassInfo2
;
76 WBOOBJ_AddRef (iface
);
79 else if (IsEqualGUID (&IID_IQuickActivate
, riid
))
81 TRACE("Returning IID_IQuickActivate interface\n");
82 *ppobj
= (LPVOID
)&SHDOCVW_QuickActivate
;
83 WBOOBJ_AddRef (iface
);
86 else if (IsEqualGUID (&IID_IConnectionPointContainer
, riid
))
88 TRACE("Returning IID_IConnectionPointContainer interface\n");
89 *ppobj
= (LPVOID
)&SHDOCVW_ConnectionPointContainer
;
90 WBOOBJ_AddRef (iface
);
93 else if (IsEqualGUID (&IID_IOleInPlaceObject
, riid
))
95 TRACE("Returning IID_IOleInPlaceObject interface\n");
96 *ppobj
= (LPVOID
)&SHDOCVW_OleInPlaceObject
;
97 WBOOBJ_AddRef (iface
);
100 else if (IsEqualGUID (&IID_IOleControl
, riid
))
102 TRACE("Returning IID_IOleControl interface\n");
103 *ppobj
= (LPVOID
)&SHDOCVW_OleControl
;
104 WBOOBJ_AddRef (iface
);
107 else if (IsEqualGUID (&IID_IWebBrowser
, riid
))
109 TRACE("Returning IID_IWebBrowser interface\n");
110 *ppobj
= (LPVOID
)&SHDOCVW_WebBrowser
;
111 WBOOBJ_AddRef (iface
);
114 else if (IsEqualGUID (&IID_IDispatch
, riid
))
116 TRACE("Returning IID_IDispatch interface\n");
117 *ppobj
= (LPVOID
)&SHDOCVW_WebBrowser
;
118 WBOOBJ_AddRef (iface
);
122 TRACE ("Failed to find iid = %s\n", debugstr_guid(riid
));
124 return E_NOINTERFACE
;
127 /************************************************************************
128 * WBOOBJ_AddRef (IUnknown)
130 static ULONG WINAPI
WBOOBJ_AddRef(LPOLEOBJECT iface
)
132 ICOM_THIS(IOleObjectImpl
, iface
);
135 return ++(This
->ref
);
138 /************************************************************************
139 * WBOOBJ_Release (IUnknown)
141 static ULONG WINAPI
WBOOBJ_Release(LPOLEOBJECT iface
)
143 ICOM_THIS(IOleObjectImpl
, iface
);
145 /* static class, won't be freed */
147 return --(This
->ref
);
150 /************************************************************************
151 * WBOOBJ_SetClientSite (IOleObject)
153 static HRESULT WINAPI
WBOOBJ_SetClientSite(LPOLEOBJECT iface
,
154 LPOLECLIENTSITE pClientSite
)
156 FIXME("stub: (%p, %p)\n", iface
, pClientSite
);
160 /************************************************************************
161 * WBOOBJ_GetClientSite (IOleObject)
163 static HRESULT WINAPI
WBOOBJ_GetClientSite(LPOLEOBJECT iface
,
164 LPOLECLIENTSITE
* ppClientSite
)
166 FIXME("stub: (%p)\n", *ppClientSite
);
170 /************************************************************************
171 * WBOOBJ_SetHostNames (IOleObject)
173 static HRESULT WINAPI
WBOOBJ_SetHostNames(LPOLEOBJECT iface
, LPCOLESTR szContainerApp
,
174 LPCOLESTR szContainerObj
)
176 FIXME("stub: (%p, %s, %s)\n", iface
, debugstr_w(szContainerApp
),
177 debugstr_w(szContainerObj
));
181 /************************************************************************
182 * WBOOBJ_Close (IOleObject)
184 static HRESULT WINAPI
WBOOBJ_Close(LPOLEOBJECT iface
, DWORD dwSaveOption
)
190 /************************************************************************
191 * WBOOBJ_SetMoniker (IOleObject)
193 static HRESULT WINAPI
WBOOBJ_SetMoniker(LPOLEOBJECT iface
,
194 DWORD dwWhichMoniker
, IMoniker
* pmk
)
196 FIXME("stub: (%p, %ld, %p)\n", iface
, dwWhichMoniker
, pmk
);
200 /************************************************************************
201 * WBOOBJ_GetMoniker (IOleObject)
203 * Delegate this request to the client site if we have one.
205 static HRESULT WINAPI
WBOOBJ_GetMoniker(LPOLEOBJECT iface
, DWORD dwAssign
,
206 DWORD dwWhichMoniker
, LPMONIKER
*ppmk
)
208 FIXME("stub (%p, %ld, %ld, %p)\n", iface
, dwAssign
, dwWhichMoniker
, ppmk
);
212 /************************************************************************
213 * WBOOBJ_InitFromData (IOleObject)
215 * This method is meaningless if the server is not running
217 static HRESULT WINAPI
WBOOBJ_InitFromData(LPOLEOBJECT iface
, LPDATAOBJECT pDataObject
,
218 BOOL fCreation
, DWORD dwReserved
)
220 FIXME("stub: (%p, %p, %d, %ld)\n", iface
, pDataObject
, fCreation
, dwReserved
);
221 return OLE_E_NOTRUNNING
;
224 /************************************************************************
225 * WBOOBJ_GetClipboardData (IOleObject)
227 * This method is meaningless if the server is not running
229 static HRESULT WINAPI
WBOOBJ_GetClipboardData(LPOLEOBJECT iface
, DWORD dwReserved
,
230 LPDATAOBJECT
*ppDataObject
)
232 FIXME("stub: (%p, %ld, %p)\n", iface
, dwReserved
, ppDataObject
);
233 return OLE_E_NOTRUNNING
;
236 /************************************************************************
237 * WBOOBJ_DoVerb (IOleObject)
239 static HRESULT WINAPI
WBOOBJ_DoVerb(LPOLEOBJECT iface
, LONG iVerb
, struct tagMSG
* lpmsg
,
240 LPOLECLIENTSITE pActiveSite
, LONG lindex
,
241 HWND hwndParent
, LPCRECT lprcPosRect
)
243 FIXME(": stub iVerb = %ld\n", iVerb
);
246 case OLEIVERB_INPLACEACTIVATE
:
247 FIXME ("stub for OLEIVERB_INPLACEACTIVATE\n");
250 FIXME ("stub for OLEIVERB_HIDE\n");
257 /************************************************************************
258 * WBOOBJ_EnumVerbs (IOleObject)
260 * Delegate to OleRegEnumVerbs.
262 static HRESULT WINAPI
WBOOBJ_EnumVerbs(LPOLEOBJECT iface
,
263 IEnumOLEVERB
** ppEnumOleVerb
)
265 TRACE("(%p, %p)\n", iface
, ppEnumOleVerb
);
267 return OleRegEnumVerbs(&CLSID_WebBrowser
, ppEnumOleVerb
);
270 /************************************************************************
271 * WBOOBJ_EnumVerbs (IOleObject)
273 static HRESULT WINAPI
WBOOBJ_Update(LPOLEOBJECT iface
)
279 /************************************************************************
280 * WBOOBJ_IsUpToDate (IOleObject)
282 * This method is meaningless if the server is not running
284 static HRESULT WINAPI
WBOOBJ_IsUpToDate(LPOLEOBJECT iface
)
286 FIXME("(%p)\n", iface
);
287 return OLE_E_NOTRUNNING
;
290 /************************************************************************
291 * WBOOBJ_GetUserClassID (IOleObject)
293 static HRESULT WINAPI
WBOOBJ_GetUserClassID(LPOLEOBJECT iface
, CLSID
* pClsid
)
295 FIXME("stub: (%p, %p)\n", iface
, pClsid
);
299 /************************************************************************
300 * WBOOBJ_GetUserType (IOleObject)
302 * Delegate to OleRegGetUserType.
304 static HRESULT WINAPI
WBOOBJ_GetUserType(LPOLEOBJECT iface
, DWORD dwFormOfType
,
305 LPOLESTR
* pszUserType
)
307 TRACE("(%p, %ld, %p)\n", iface
, dwFormOfType
, pszUserType
);
309 return OleRegGetUserType(&CLSID_WebBrowser
, dwFormOfType
, pszUserType
);
312 /************************************************************************
313 * WBOOBJ_SetExtent (IOleObject)
315 * This method is meaningless if the server is not running
317 static HRESULT WINAPI
WBOOBJ_SetExtent(LPOLEOBJECT iface
, DWORD dwDrawAspect
,
320 FIXME("stub: (%p, %lx, (%ld x %ld))\n", iface
, dwDrawAspect
,
321 psizel
->cx
, psizel
->cy
);
322 return OLE_E_NOTRUNNING
;
325 /************************************************************************
326 * WBOOBJ_GetExtent (IOleObject)
328 static HRESULT WINAPI
WBOOBJ_GetExtent(LPOLEOBJECT iface
, DWORD dwDrawAspect
,
331 FIXME("stub: (%p, %lx, %p)\n", iface
, dwDrawAspect
, psizel
);
335 /************************************************************************
336 * WBOOBJ_Advise (IOleObject)
338 static HRESULT WINAPI
WBOOBJ_Advise(LPOLEOBJECT iface
, IAdviseSink
* pAdvSink
,
339 DWORD
* pdwConnection
)
341 FIXME("stub: (%p, %p, %p)\n", iface
, pAdvSink
, pdwConnection
);
345 /************************************************************************
346 * WBOOBJ_Unadvise (IOleObject)
348 static HRESULT WINAPI
WBOOBJ_Unadvise(LPOLEOBJECT iface
, DWORD dwConnection
)
350 FIXME("stub: (%p, %ld)\n", iface
, dwConnection
);
354 /************************************************************************
355 * WBOOBJ_EnumAdvise (IOleObject)
357 static HRESULT WINAPI
WBOOBJ_EnumAdvise(LPOLEOBJECT iface
, IEnumSTATDATA
** ppenumAdvise
)
359 FIXME("stub: (%p, %p)\n", iface
, ppenumAdvise
);
363 /************************************************************************
364 * WBOOBJ_GetMiscStatus (IOleObject)
366 * Delegate to OleRegGetMiscStatus.
368 static HRESULT WINAPI
WBOOBJ_GetMiscStatus(LPOLEOBJECT iface
, DWORD dwAspect
,
373 TRACE("(%p, %lx, %p)\n", iface
, dwAspect
, pdwStatus
);
375 hres
= OleRegGetMiscStatus(&CLSID_WebBrowser
, dwAspect
, pdwStatus
);
383 /************************************************************************
384 * WBOOBJ_SetColorScheme (IOleObject)
386 * This method is meaningless if the server is not running
388 static HRESULT WINAPI
WBOOBJ_SetColorScheme(LPOLEOBJECT iface
,
389 struct tagLOGPALETTE
* pLogpal
)
391 FIXME("stub: (%p, %p))\n", iface
, pLogpal
);
392 return OLE_E_NOTRUNNING
;
395 /**********************************************************************
396 * IOleObject virtual function table for IE Web Browser component
399 static ICOM_VTABLE(IOleObject
) WBOOBJ_Vtbl
=
401 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
402 WBOOBJ_QueryInterface
,
405 WBOOBJ_SetClientSite
,
406 WBOOBJ_GetClientSite
,
412 WBOOBJ_GetClipboardData
,
417 WBOOBJ_GetUserClassID
,
424 WBOOBJ_GetMiscStatus
,
425 WBOOBJ_SetColorScheme
428 IOleObjectImpl SHDOCVW_OleObject
= { &WBOOBJ_Vtbl
, 1 };
431 /**********************************************************************
432 * Implement the IOleInPlaceObject interface
435 static HRESULT WINAPI
WBOIPO_QueryInterface(LPOLEINPLACEOBJECT iface
,
436 REFIID riid
, LPVOID
*ppobj
)
438 ICOM_THIS(IOleInPlaceObjectImpl
, iface
);
440 FIXME("(%p)->(%s,%p),stub!\n", This
, debugstr_guid(riid
), ppobj
);
441 return E_NOINTERFACE
;
444 static ULONG WINAPI
WBOIPO_AddRef(LPOLEINPLACEOBJECT iface
)
446 ICOM_THIS(IOleInPlaceObjectImpl
, iface
);
449 return ++(This
->ref
);
452 static ULONG WINAPI
WBOIPO_Release(LPOLEINPLACEOBJECT iface
)
454 ICOM_THIS(IOleInPlaceObjectImpl
, iface
);
456 /* static class, won't be freed */
458 return --(This
->ref
);
461 static HRESULT WINAPI
WBOIPO_GetWindow(LPOLEINPLACEOBJECT iface
, HWND
* phwnd
)
464 /* Create a fake window to fool MFC into believing that we actually
465 * have an implemented browser control. Avoids the assertion.
468 hwnd
= CreateWindowA("BUTTON", "Web Control",
469 WS_HSCROLL
| WS_VSCROLL
| WS_OVERLAPPEDWINDOW
,
470 CW_USEDEFAULT
, CW_USEDEFAULT
, 600,
471 400, NULL
, NULL
, NULL
, NULL
);
474 TRACE ("Returning hwnd = %d\n", hwnd
);
477 FIXME("stub HWND* = %p\n", phwnd
);
481 static HRESULT WINAPI
WBOIPO_ContextSensitiveHelp(LPOLEINPLACEOBJECT iface
,
484 FIXME("stub fEnterMode = %d\n", fEnterMode
);
488 static HRESULT WINAPI
WBOIPO_InPlaceDeactivate(LPOLEINPLACEOBJECT iface
)
494 static HRESULT WINAPI
WBOIPO_UIDeactivate(LPOLEINPLACEOBJECT iface
)
500 static HRESULT WINAPI
WBOIPO_SetObjectRects(LPOLEINPLACEOBJECT iface
,
501 LPCRECT lprcPosRect
, LPCRECT lprcClipRect
)
503 FIXME("stub PosRect = %p, ClipRect = %p\n", lprcPosRect
, lprcClipRect
);
507 static HRESULT WINAPI
WBOIPO_ReactivateAndUndo(LPOLEINPLACEOBJECT iface
)
513 /**********************************************************************
514 * IOleInPlaceObject virtual function table for IE Web Browser component
517 static ICOM_VTABLE(IOleInPlaceObject
) WBOIPO_Vtbl
=
519 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
520 WBOIPO_QueryInterface
,
524 WBOIPO_ContextSensitiveHelp
,
525 WBOIPO_InPlaceDeactivate
,
527 WBOIPO_SetObjectRects
,
528 WBOIPO_ReactivateAndUndo
531 IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject
= { &WBOIPO_Vtbl
, 1 };
534 /**********************************************************************
535 * Implement the IOleControl interface
538 static HRESULT WINAPI
WBOC_QueryInterface(LPOLECONTROL iface
,
539 REFIID riid
, LPVOID
*ppobj
)
541 ICOM_THIS(IOleControlImpl
, iface
);
543 FIXME("(%p)->(%s,%p),stub!\n", This
, debugstr_guid(riid
), ppobj
);
544 return E_NOINTERFACE
;
547 static ULONG WINAPI
WBOC_AddRef(LPOLECONTROL iface
)
549 ICOM_THIS(IOleControlImpl
, iface
);
552 return ++(This
->ref
);
555 static ULONG WINAPI
WBOC_Release(LPOLECONTROL iface
)
557 ICOM_THIS(IOleControlImpl
, iface
);
559 /* static class, won't be freed */
561 return --(This
->ref
);
564 static HRESULT WINAPI
WBOC_GetControlInfo(LPOLECONTROL iface
, LPCONTROLINFO pCI
)
566 FIXME("stub: LPCONTROLINFO = %p\n", pCI
);
570 static HRESULT WINAPI
WBOC_OnMnemonic(LPOLECONTROL iface
, struct tagMSG
*pMsg
)
572 FIXME("stub: MSG* = %p\n", pMsg
);
576 static HRESULT WINAPI
WBOC_OnAmbientPropertyChange(LPOLECONTROL iface
, DISPID dispID
)
578 FIXME("stub: DISPID = %ld\n", dispID
);
582 static HRESULT WINAPI
WBOC_FreezeEvents(LPOLECONTROL iface
, BOOL bFreeze
)
584 FIXME("stub: bFreeze = %d\n", bFreeze
);
588 /**********************************************************************
589 * IOleControl virtual function table for IE Web Browser component
592 static ICOM_VTABLE(IOleControl
) WBOC_Vtbl
=
594 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
600 WBOC_OnAmbientPropertyChange
,
604 IOleControlImpl SHDOCVW_OleControl
= { &WBOC_Vtbl
, 1 };