2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <wine/test.h>
31 #define DEFINE_EXPECT(func) \
32 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
34 #define SET_EXPECT(func) \
35 expect_ ## func = TRUE
37 #define CHECK_EXPECT(func) \
39 ok(expect_ ##func, "unexpected call " #func "\n"); \
40 expect_ ## func = FALSE; \
41 called_ ## func = TRUE; \
44 #define CHECK_EXPECT2(func) \
46 ok(expect_ ##func, "unexpected call " #func "\n"); \
47 called_ ## func = TRUE; \
50 #define CHECK_CALLED(func) \
52 ok(called_ ## func, "expected " #func "\n"); \
53 expect_ ## func = called_ ## func = FALSE; \
56 DEFINE_EXPECT(GetContainer);
57 DEFINE_EXPECT(Site_GetWindow);
58 DEFINE_EXPECT(ShowObject);
59 DEFINE_EXPECT(CanInPlaceActivate);
60 DEFINE_EXPECT(OnInPlaceActivate);
61 DEFINE_EXPECT(OnUIActivate);
62 DEFINE_EXPECT(GetWindowContext);
63 DEFINE_EXPECT(Frame_GetWindow);
64 DEFINE_EXPECT(Frame_SetActiveObject);
65 DEFINE_EXPECT(UIWindow_SetActiveObject);
66 DEFINE_EXPECT(SetMenu);
68 static const WCHAR wszItem[] = {'i','t','e','m',0};
70 static HWND container_hwnd, shell_embedding_hwnd;
72 static HRESULT QueryInterface(REFIID,void**);
74 static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
76 if(IsEqualGUID(&IID_ITargetContainer, riid))
77 return E_NOINTERFACE; /* TODO */
78 if(IsEqualGUID(&IID_IOleCommandTarget, riid))
79 return E_NOINTERFACE; /* TODO */
81 ok(0, "unexpected call\n");
85 static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
90 static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
95 static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc,
96 LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut)
98 ok(0, "unexpected call\n");
102 static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags,
103 IEnumUnknown **ppenum)
105 ok(0, "unexpected call\n");
109 static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
111 ok(0, "unexpected call\n");
115 static const IOleContainerVtbl OleContainerVtbl = {
116 OleContainer_QueryInterface,
118 OleContainer_Release,
119 OleContainer_ParseDisplayName,
120 OleContainer_EnumObjects,
121 OleContainer_LockContainer
124 static IOleContainer OleContainer = { &OleContainerVtbl };
126 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
128 return QueryInterface(riid, ppv);
131 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
136 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
141 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
143 ok(0, "unexpected call\n");
147 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAsign, DWORD dwWhichMoniker,
150 ok(0, "unexpected call\n");
154 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
156 CHECK_EXPECT(GetContainer);
158 ok(ppContainer != NULL, "ppContainer == NULL\n");
160 *ppContainer = &OleContainer;
165 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
167 CHECK_EXPECT(ShowObject);
171 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
173 ok(0, "unexpected call\n");
177 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
179 ok(0, "unexpected call\n");
183 static const IOleClientSiteVtbl ClientSiteVtbl = {
184 ClientSite_QueryInterface,
187 ClientSite_SaveObject,
188 ClientSite_GetMoniker,
189 ClientSite_GetContainer,
190 ClientSite_ShowObject,
191 ClientSite_OnShowWindow,
192 ClientSite_RequestNewObjectLayout
195 static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceFrame *iface,
196 REFIID riid, void **ppv)
198 ok(0, "unexpected call\n");
199 return E_NOINTERFACE;
202 static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceFrame *iface)
207 static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceFrame *iface)
212 static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
214 ok(0, "unexpected call\n");
218 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
220 CHECK_EXPECT(Frame_GetWindow);
221 ok(phwnd != NULL, "phwnd == NULL\n");
223 *phwnd = container_hwnd;
227 static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
229 ok(0, "unexpected call\n");
233 static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
235 ok(0, "unexpected call\n");
239 static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame *iface,
240 LPCBORDERWIDTHS pborderwidths)
242 ok(0, "unexpected call\n");
246 static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame *iface,
247 LPCBORDERWIDTHS pborderwidths)
249 ok(0, "unexpected call\n");
253 static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface,
254 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
256 CHECK_EXPECT(UIWindow_SetActiveObject);
257 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
258 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
262 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
263 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
265 CHECK_EXPECT(Frame_SetActiveObject);
266 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
267 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
271 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
272 LPOLEMENUGROUPWIDTHS lpMenuWidths)
274 ok(0, "unexpected call\n");
278 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
279 HOLEMENU holemenu, HWND hwndActiveObject)
281 CHECK_EXPECT(SetMenu);
282 ok(hmenuShared == NULL, "hmenuShared=%p\n", hmenuShared);
283 ok(holemenu == NULL, "holemenu=%p\n", holemenu);
284 ok(hwndActiveObject == shell_embedding_hwnd, "hwndActiveObject=%p, expected %p\n",
285 hwndActiveObject, shell_embedding_hwnd);
289 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
291 ok(0, "unexpected call\n");
295 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
297 ok(0, "unexpected call\n");
301 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
303 ok(0, "unexpected call\n");
307 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
309 ok(0, "unexpected call\n");
313 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = {
314 InPlaceUIWindow_QueryInterface,
315 InPlaceUIWindow_AddRef,
316 InPlaceUIWindow_Release,
317 InPlaceUIWindow_GetWindow,
318 InPlaceUIWindow_ContextSensitiveHelp,
319 InPlaceUIWindow_GetBorder,
320 InPlaceUIWindow_RequestBorderSpace,
321 InPlaceUIWindow_SetBorderSpace,
322 InPlaceUIWindow_SetActiveObject,
325 static IOleInPlaceUIWindow InPlaceUIWindow = { (IOleInPlaceUIWindowVtbl*)&InPlaceUIWindowVtbl };
327 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
328 InPlaceUIWindow_QueryInterface,
329 InPlaceUIWindow_AddRef,
330 InPlaceUIWindow_Release,
331 InPlaceFrame_GetWindow,
332 InPlaceUIWindow_ContextSensitiveHelp,
333 InPlaceUIWindow_GetBorder,
334 InPlaceUIWindow_RequestBorderSpace,
335 InPlaceUIWindow_SetBorderSpace,
336 InPlaceFrame_SetActiveObject,
337 InPlaceFrame_InsertMenus,
338 InPlaceFrame_SetMenu,
339 InPlaceFrame_RemoveMenus,
340 InPlaceFrame_SetStatusText,
341 InPlaceFrame_EnableModeless,
342 InPlaceFrame_TranslateAccelerator
345 static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
347 static IOleClientSite ClientSite = { &ClientSiteVtbl };
349 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
351 return QueryInterface(riid, ppv);
354 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface)
359 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface)
364 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd)
366 CHECK_EXPECT(Site_GetWindow);
367 ok(phwnd != NULL, "phwnd == NULL\n");
369 *phwnd = container_hwnd;
373 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode)
375 ok(0, "unexpected call\n");
379 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface)
381 CHECK_EXPECT(CanInPlaceActivate);
385 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface)
387 CHECK_EXPECT(OnInPlaceActivate);
391 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface)
393 CHECK_EXPECT(OnUIActivate);
397 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface,
398 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
399 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
401 static const RECT pos_rect = {2,1,1002,901};
402 static const RECT clip_rect = {10,10,990,890};
404 CHECK_EXPECT(GetWindowContext);
406 ok(ppFrame != NULL, "ppFrame = NULL\n");
408 *ppFrame = &InPlaceFrame;
410 ok(ppDoc != NULL, "ppDoc = NULL\n");
412 *ppDoc = &InPlaceUIWindow;
414 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
416 memcpy(lprcPosRect, &pos_rect, sizeof(RECT));
418 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
420 memcpy(lprcClipRect, &clip_rect, sizeof(RECT));
422 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
424 lpFrameInfo->cb = sizeof(*lpFrameInfo);
425 lpFrameInfo->fMDIApp = FALSE;
426 lpFrameInfo->hwndFrame = container_hwnd;
427 lpFrameInfo->haccel = NULL;
428 lpFrameInfo->cAccelEntries = 0;
434 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
436 ok(0, "unexpected call\n");
440 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable)
442 ok(0, "unexpected call\n");
446 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface)
448 ok(0, "unexpected call\n");
452 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface)
454 ok(0, "unexpected call\n");
458 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface)
460 ok(0, "unexpected call\n");
464 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect)
466 ok(0, "unexpected call\n");
470 static HRESULT WINAPI InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface,
471 BOOL *pNoRedraw, DWORD dwFlags)
473 ok(0, "unexpected call\n");
477 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface,
480 ok(0, "unexpected call\n");
484 static HRESULT WINAPI InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx *iface)
486 ok(0, "unexpected call\n");
490 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl = {
491 InPlaceSite_QueryInterface,
494 InPlaceSite_GetWindow,
495 InPlaceSite_ContextSensitiveHelp,
496 InPlaceSite_CanInPlaceActivate,
497 InPlaceSite_OnInPlaceActivate,
498 InPlaceSite_OnUIActivate,
499 InPlaceSite_GetWindowContext,
501 InPlaceSite_OnUIDeactivate,
502 InPlaceSite_OnInPlaceDeactivate,
503 InPlaceSite_DiscardUndoState,
504 InPlaceSite_DeactivateAndUndo,
505 InPlaceSite_OnPosRectChange,
506 InPlaceSite_OnInPlaceActivateEx,
507 InPlaceSite_OnInPlaceDeactivateEx,
508 InPlaceSite_RequestUIActivate
511 static IOleInPlaceSiteEx InPlaceSite = { &InPlaceSiteExVtbl };
513 static HRESULT QueryInterface(REFIID riid, void **ppv)
517 if(IsEqualGUID(&IID_IUnknown, riid)
518 || IsEqualGUID(&IID_IOleClientSite, riid))
520 else if(IsEqualGUID(&IID_IOleWindow, riid)
521 || IsEqualGUID(&IID_IOleInPlaceSite, riid)
522 || IsEqualGUID(&IID_IOleInPlaceSiteEx, riid))
528 return E_NOINTERFACE;
531 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
533 return DefWindowProcW(hwnd, msg, wParam, lParam);
536 static HWND create_container_window(void)
538 static const WCHAR wszWebBrowserContainer[] =
539 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
540 static WNDCLASSEXW wndclass = {
544 0, 0, NULL, NULL, NULL, NULL, NULL,
545 wszWebBrowserContainer,
549 RegisterClassExW(&wndclass);
550 return CreateWindowW(wszWebBrowserContainer, wszWebBrowserContainer,
551 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
552 CW_USEDEFAULT, NULL, NULL, NULL, NULL);
555 static void test_DoVerb(IUnknown *unk)
558 RECT rect = {0,0,1000,1000};
561 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
562 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
566 SET_EXPECT(CanInPlaceActivate);
567 SET_EXPECT(Site_GetWindow);
568 SET_EXPECT(OnInPlaceActivate);
569 SET_EXPECT(GetWindowContext);
570 SET_EXPECT(ShowObject);
571 SET_EXPECT(GetContainer);
572 SET_EXPECT(Frame_GetWindow);
573 SET_EXPECT(OnUIActivate);
574 SET_EXPECT(Frame_SetActiveObject);
575 SET_EXPECT(UIWindow_SetActiveObject);
578 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
579 0, container_hwnd, &rect);
580 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
582 CHECK_CALLED(CanInPlaceActivate);
583 CHECK_CALLED(Site_GetWindow);
584 CHECK_CALLED(OnInPlaceActivate);
585 CHECK_CALLED(GetWindowContext);
586 CHECK_CALLED(ShowObject);
587 CHECK_CALLED(GetContainer);
588 CHECK_CALLED(Frame_GetWindow);
589 CHECK_CALLED(OnUIActivate);
590 CHECK_CALLED(Frame_SetActiveObject);
591 CHECK_CALLED(UIWindow_SetActiveObject);
592 CHECK_CALLED(SetMenu);
594 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
595 0, container_hwnd, &rect);
596 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
598 IOleObject_Release(oleobj);
601 static void test_GetMiscStatus(IOleObject *oleobj)
606 for(i=0; i<10; i++) {
608 hres = IOleObject_GetMiscStatus(oleobj, i, &st);
609 ok(hres == S_OK, "GetMiscStatus failed: %08x\n", hres);
610 ok(st == (OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_INSIDEOUT
611 |OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE),
612 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
613 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st);
617 static void test_ClientSite(IUnknown *unk, IOleClientSite *client)
620 IOleInPlaceObject *inplace;
624 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
625 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
629 test_GetMiscStatus(oleobj);
631 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
632 ok(hres == S_OK, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres);
634 IOleObject_Release(oleobj);
638 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
639 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
640 ok((hwnd == NULL) ^ (client == NULL), "unexpected hwnd %p\n", hwnd);
643 SET_EXPECT(GetContainer);
644 SET_EXPECT(Site_GetWindow);
647 hres = IOleObject_SetClientSite(oleobj, client);
648 ok(hres == S_OK, "SetClientSite failed: %08x\n", hres);
651 CHECK_CALLED(GetContainer);
652 CHECK_CALLED(Site_GetWindow);
655 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
656 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
657 ok((hwnd == NULL) == (client == NULL), "unexpected hwnd %p\n", hwnd);
659 shell_embedding_hwnd = hwnd;
661 IOleInPlaceObject_Release(inplace);
662 IOleObject_Release(oleobj);
665 static void test_ClassInfo(IUnknown *unk)
667 IProvideClassInfo2 *class_info;
671 hres = IUnknown_QueryInterface(unk, &IID_IProvideClassInfo2, (void**)&class_info);
672 ok(hres == S_OK, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres);
676 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid);
677 ok(hres == S_OK, "GetGUID failed: %08x\n", hres);
678 ok(IsEqualGUID(&DIID_DWebBrowserEvents2, &guid), "wrong guid\n");
680 hres = IProvideClassInfo2_GetGUID(class_info, 0, &guid);
681 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
682 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
684 hres = IProvideClassInfo2_GetGUID(class_info, 2, &guid);
685 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
686 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
688 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, NULL);
689 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
691 hres = IProvideClassInfo2_GetGUID(class_info, 0, NULL);
692 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
694 IProvideClassInfo2_Release(class_info);
697 static void test_ie_funcs(IUnknown *unk)
705 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
706 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
713 hres = IWebBrowser2_get_HWND(wb, &hwnd);
714 ok(hres == E_FAIL, "get_HWND failed: %08x, expected E_FAIL\n", hres);
715 ok(hwnd == 0, "unexpected hwnd %lx\n", hwnd);
719 hres = IWebBrowser2_get_MenuBar(wb, &b);
720 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
721 ok(b == VARIANT_TRUE, "b=%x\n", b);
723 hres = IWebBrowser2_put_MenuBar(wb, VARIANT_FALSE);
724 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
726 hres = IWebBrowser2_get_MenuBar(wb, &b);
727 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
728 ok(b == VARIANT_FALSE, "b=%x\n", b);
730 hres = IWebBrowser2_put_MenuBar(wb, 100);
731 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
733 hres = IWebBrowser2_get_MenuBar(wb, &b);
734 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
735 ok(b == VARIANT_TRUE, "b=%x\n", b);
739 hres = IWebBrowser2_get_AddressBar(wb, &b);
740 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
741 ok(b == VARIANT_TRUE, "b=%x\n", b);
743 hres = IWebBrowser2_put_AddressBar(wb, VARIANT_FALSE);
744 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
746 hres = IWebBrowser2_get_AddressBar(wb, &b);
747 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
748 ok(b == VARIANT_FALSE, "b=%x\n", b);
750 hres = IWebBrowser2_put_AddressBar(wb, 100);
751 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
753 hres = IWebBrowser2_get_AddressBar(wb, &b);
754 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
755 ok(b == VARIANT_TRUE, "b=%x\n", b);
757 hres = IWebBrowser2_put_AddressBar(wb, VARIANT_TRUE);
758 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
762 hres = IWebBrowser2_get_StatusBar(wb, &b);
763 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
764 ok(b == VARIANT_TRUE, "b=%x\n", b);
766 hres = IWebBrowser2_put_StatusBar(wb, VARIANT_TRUE);
767 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
769 hres = IWebBrowser2_get_StatusBar(wb, &b);
770 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
771 ok(b == VARIANT_TRUE, "b=%x\n", b);
773 hres = IWebBrowser2_put_StatusBar(wb, VARIANT_FALSE);
774 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
776 hres = IWebBrowser2_get_StatusBar(wb, &b);
777 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
778 ok(b == VARIANT_FALSE, "b=%x\n", b);
780 hres = IWebBrowser2_put_StatusBar(wb, 100);
781 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
783 hres = IWebBrowser2_get_StatusBar(wb, &b);
784 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
785 ok(b == VARIANT_TRUE, "b=%x\n", b);
789 hres = IWebBrowser2_get_ToolBar(wb, &i);
790 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
791 ok(i == VARIANT_TRUE, "i=%x\n", i);
793 hres = IWebBrowser2_put_ToolBar(wb, VARIANT_FALSE);
794 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
796 hres = IWebBrowser2_get_ToolBar(wb, &i);
797 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
798 ok(i == VARIANT_FALSE, "b=%x\n", i);
800 hres = IWebBrowser2_put_ToolBar(wb, 100);
801 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
803 hres = IWebBrowser2_get_ToolBar(wb, &i);
804 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
805 ok(i == VARIANT_TRUE, "i=%x\n", i);
807 hres = IWebBrowser2_put_ToolBar(wb, VARIANT_TRUE);
808 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
810 IWebBrowser2_Release(wb);
813 static void test_Silent(IUnknown *unk)
819 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
820 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
825 hres = IWebBrowser2_get_Silent(wb, &b);
826 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
827 ok(b == VARIANT_FALSE, "b=%x\n", b);
829 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
830 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
833 hres = IWebBrowser2_get_Silent(wb, &b);
834 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
835 ok(b == VARIANT_TRUE, "b=%x\n", b);
837 hres = IWebBrowser2_put_Silent(wb, 100);
838 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
841 hres = IWebBrowser2_get_Silent(wb, &b);
842 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
843 ok(b == VARIANT_TRUE, "b=%x\n", b);
845 hres = IWebBrowser2_put_Silent(wb, VARIANT_FALSE);
846 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
849 hres = IWebBrowser2_get_Silent(wb, &b);
850 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
851 ok(b == VARIANT_FALSE, "b=%x\n", b);
853 IWebBrowser_Release(wb);
856 static void test_GetControlInfo(IUnknown *unk)
858 IOleControl *control;
862 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
863 ok(hres == S_OK, "Could not get IOleControl: %08x\n", hres);
867 hres = IOleControl_GetControlInfo(control, &info);
868 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
869 hres = IOleControl_GetControlInfo(control, NULL);
870 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
872 IOleControl_Release(control);
875 static void test_Extent(IUnknown *unk)
881 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
882 ok(hres == S_OK, "Could not get IOleObkect: %08x\n", hres);
886 size.cx = size.cy = 0xdeadbeef;
887 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
888 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
889 ok(size.cx == 1323 && size.cy == 529, "size = {%d %d}\n", size.cx, size.cy);
893 hres = IOleObject_SetExtent(oleobj, DVASPECT_CONTENT, &size);
894 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
896 size.cx = size.cy = 0xdeadbeef;
897 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
898 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
899 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
901 size.cx = size.cy = 0xdeadbeef;
902 hres = IOleObject_GetExtent(oleobj, 0, &size);
903 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
904 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
908 hres = IOleObject_SetExtent(oleobj, 0, &size);
909 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
911 size.cx = size.cy = 0xdeadbeef;
912 hres = IOleObject_GetExtent(oleobj, 0, &size);
913 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
914 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
916 size.cx = size.cy = 0xdeadbeef;
917 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
918 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
919 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
923 hres = IOleObject_SetExtent(oleobj, 0xdeadbeef, &size);
924 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
926 size.cx = size.cy = 0xdeadbeef;
927 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
928 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
929 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
931 size.cx = size.cy = 0xdeadbeef;
932 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
933 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
934 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
936 IOleObject_Release(oleobj);
939 static void test_QueryInterface(IUnknown *unk)
941 IQuickActivate *qa = (IQuickActivate*)0xdeadbeef;
942 IRunnableObject *runnable = (IRunnableObject*)0xdeadbeef;
945 hres = IUnknown_QueryInterface(unk, &IID_IQuickActivate, (void**)&qa);
946 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
947 ok(qa == NULL, "qa=%p, ezpected NULL\n", qa);
949 hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&runnable);
950 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
951 ok(runnable == NULL, "runnable=%p, ezpected NULL\n", runnable);
954 static void test_WebBrowser(void)
956 IUnknown *unk = NULL;
960 hres = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
961 &IID_IUnknown, (void**)&unk);
962 ok(hres == S_OK, "CoCreateInterface failed: %08x\n", hres);
966 test_QueryInterface(unk);
968 test_ClientSite(unk, &ClientSite);
971 test_ClientSite(unk, NULL);
973 test_GetControlInfo(unk);
976 ref = IUnknown_Release(unk);
977 ok(ref == 0, "ref=%d, expected 0\n", ref);
980 START_TEST(webbrowser)
982 container_hwnd = create_container_window();