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>
35 #define DEFINE_EXPECT(func) \
36 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
38 #define SET_EXPECT(func) \
39 expect_ ## func = TRUE
41 #define CHECK_EXPECT(func) \
43 ok(expect_ ##func, "unexpected call " #func "\n"); \
44 expect_ ## func = FALSE; \
45 called_ ## func = TRUE; \
48 #define CHECK_EXPECT2(func) \
50 ok(expect_ ##func, "unexpected call " #func "\n"); \
51 called_ ## func = TRUE; \
54 #define CHECK_CALLED(func) \
56 ok(called_ ## func, "expected " #func "\n"); \
57 expect_ ## func = called_ ## func = FALSE; \
60 DEFINE_EXPECT(GetContainer
);
61 DEFINE_EXPECT(Site_GetWindow
);
62 DEFINE_EXPECT(ShowObject
);
63 DEFINE_EXPECT(CanInPlaceActivate
);
64 DEFINE_EXPECT(OnInPlaceActivate
);
65 DEFINE_EXPECT(OnUIActivate
);
66 DEFINE_EXPECT(GetWindowContext
);
67 DEFINE_EXPECT(Frame_GetWindow
);
68 DEFINE_EXPECT(Frame_SetActiveObject
);
69 DEFINE_EXPECT(UIWindow_SetActiveObject
);
70 DEFINE_EXPECT(SetMenu
);
71 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE
);
72 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL
);
73 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT
);
74 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE
);
75 DEFINE_EXPECT(Invoke_AMBIENT_SILENT
);
76 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
77 DEFINE_EXPECT(EnableModeless_TRUE
);
78 DEFINE_EXPECT(EnableModeless_FALSE
);
79 DEFINE_EXPECT(GetHostInfo
);
80 DEFINE_EXPECT(GetOptionKeyPath
);
81 DEFINE_EXPECT(GetOverridesKeyPath
);
82 DEFINE_EXPECT(SetStatusText
);
84 static const WCHAR wszItem
[] = {'i','t','e','m',0};
86 static HWND container_hwnd
, shell_embedding_hwnd
;
88 static HRESULT
QueryInterface(REFIID
,void**);
90 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
92 if(IsEqualGUID(&IID_ITargetContainer
, riid
))
93 return E_NOINTERFACE
; /* TODO */
94 if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
95 return E_NOINTERFACE
; /* TODO */
97 ok(0, "unexpected call\n");
101 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
106 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
111 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
112 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
114 ok(0, "unexpected call\n");
118 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
119 IEnumUnknown
**ppenum
)
121 ok(0, "unexpected call\n");
125 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
127 ok(0, "unexpected call\n");
131 static const IOleContainerVtbl OleContainerVtbl
= {
132 OleContainer_QueryInterface
,
134 OleContainer_Release
,
135 OleContainer_ParseDisplayName
,
136 OleContainer_EnumObjects
,
137 OleContainer_LockContainer
140 static IOleContainer OleContainer
= { &OleContainerVtbl
};
142 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
144 return QueryInterface(riid
, ppv
);
147 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
152 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
157 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
159 ok(0, "unexpected call\n");
163 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
166 ok(0, "unexpected call\n");
170 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
171 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
173 ok(0, "unexpected call\n");
177 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
178 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
179 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
181 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
182 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
183 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
184 ok(V_VT(pVarResult
) == VT_EMPTY
, "V_VT(pVarResult)=%d\n", V_VT(pVarResult
));
185 ok(wFlags
== DISPATCH_PROPERTYGET
, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags
);
186 ok(pDispParams
->rgvarg
== NULL
, "pDispParams->rgvarg = %p\n", pDispParams
->rgvarg
);
187 ok(pDispParams
->rgdispidNamedArgs
== NULL
,
188 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams
->rgdispidNamedArgs
);
189 ok(pDispParams
->cArgs
== 0, "pDispParams->cArgs = %d\n", pDispParams
->cArgs
);
190 ok(pDispParams
->cNamedArgs
== 0, "pDispParams->cNamedArgs = %d\n", pDispParams
->cNamedArgs
);
192 switch(dispIdMember
) {
193 case DISPID_AMBIENT_USERMODE
:
194 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE
);
196 case DISPID_AMBIENT_DLCONTROL
:
197 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL
);
198 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
200 case DISPID_AMBIENT_USERAGENT
:
201 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
202 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
204 case DISPID_AMBIENT_PALETTE
:
205 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
206 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
208 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
:
209 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
210 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
211 V_VT(pVarResult
) = VT_BOOL
;
212 V_BOOL(pVarResult
) = VARIANT_FALSE
;
214 case DISPID_AMBIENT_SILENT
:
215 CHECK_EXPECT(Invoke_AMBIENT_SILENT
);
216 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
217 V_VT(pVarResult
) = VT_BOOL
;
218 V_BOOL(pVarResult
) = VARIANT_FALSE
;
222 ok(0, "unexpected dispIdMember %d\n", dispIdMember
);
226 static IDispatchVtbl DispatchVtbl
= {
227 Dispatch_QueryInterface
,
230 Dispatch_GetTypeInfoCount
,
231 Dispatch_GetTypeInfo
,
232 Dispatch_GetIDsOfNames
,
236 static IDispatch Dispatch
= { &DispatchVtbl
};
238 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
240 return QueryInterface(riid
, ppv
);
243 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
248 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
253 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
255 ok(0, "unexpected call\n");
259 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAsign
, DWORD dwWhichMoniker
,
262 ok(0, "unexpected call\n");
266 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
268 CHECK_EXPECT(GetContainer
);
270 ok(ppContainer
!= NULL
, "ppContainer == NULL\n");
272 *ppContainer
= &OleContainer
;
277 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
279 CHECK_EXPECT(ShowObject
);
283 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
285 ok(0, "unexpected call\n");
289 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
291 ok(0, "unexpected call\n");
295 static const IOleClientSiteVtbl ClientSiteVtbl
= {
296 ClientSite_QueryInterface
,
299 ClientSite_SaveObject
,
300 ClientSite_GetMoniker
,
301 ClientSite_GetContainer
,
302 ClientSite_ShowObject
,
303 ClientSite_OnShowWindow
,
304 ClientSite_RequestNewObjectLayout
307 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
309 static HRESULT WINAPI
InPlaceUIWindow_QueryInterface(IOleInPlaceFrame
*iface
,
310 REFIID riid
, void **ppv
)
312 ok(0, "unexpected call\n");
313 return E_NOINTERFACE
;
316 static ULONG WINAPI
InPlaceUIWindow_AddRef(IOleInPlaceFrame
*iface
)
321 static ULONG WINAPI
InPlaceUIWindow_Release(IOleInPlaceFrame
*iface
)
326 static HRESULT WINAPI
InPlaceUIWindow_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
328 ok(0, "unexpected call\n");
332 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
334 CHECK_EXPECT(Frame_GetWindow
);
335 ok(phwnd
!= NULL
, "phwnd == NULL\n");
337 *phwnd
= container_hwnd
;
341 static HRESULT WINAPI
InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
343 ok(0, "unexpected call\n");
347 static HRESULT WINAPI
InPlaceUIWindow_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
349 ok(0, "unexpected call\n");
353 static HRESULT WINAPI
InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame
*iface
,
354 LPCBORDERWIDTHS pborderwidths
)
356 ok(0, "unexpected call\n");
360 static HRESULT WINAPI
InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame
*iface
,
361 LPCBORDERWIDTHS pborderwidths
)
363 ok(0, "unexpected call\n");
367 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
368 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
370 CHECK_EXPECT(UIWindow_SetActiveObject
);
371 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
372 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
376 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
377 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
379 CHECK_EXPECT(Frame_SetActiveObject
);
380 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
381 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
385 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
386 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
388 ok(0, "unexpected call\n");
392 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
393 HOLEMENU holemenu
, HWND hwndActiveObject
)
395 CHECK_EXPECT(SetMenu
);
396 ok(hmenuShared
== NULL
, "hmenuShared=%p\n", hmenuShared
);
397 ok(holemenu
== NULL
, "holemenu=%p\n", holemenu
);
398 ok(hwndActiveObject
== shell_embedding_hwnd
, "hwndActiveObject=%p, expected %p\n",
399 hwndActiveObject
, shell_embedding_hwnd
);
403 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
405 ok(0, "unexpected call\n");
409 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
411 CHECK_EXPECT2(SetStatusText
);
412 /* FIXME: Check pszStatusText */
416 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
419 CHECK_EXPECT(EnableModeless_TRUE
);
421 CHECK_EXPECT(EnableModeless_FALSE
);
425 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
427 ok(0, "unexpected call\n");
431 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
432 InPlaceUIWindow_QueryInterface
,
433 InPlaceUIWindow_AddRef
,
434 InPlaceUIWindow_Release
,
435 InPlaceUIWindow_GetWindow
,
436 InPlaceUIWindow_ContextSensitiveHelp
,
437 InPlaceUIWindow_GetBorder
,
438 InPlaceUIWindow_RequestBorderSpace
,
439 InPlaceUIWindow_SetBorderSpace
,
440 InPlaceUIWindow_SetActiveObject
,
443 static IOleInPlaceUIWindow InPlaceUIWindow
= { (IOleInPlaceUIWindowVtbl
*)&InPlaceUIWindowVtbl
};
445 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
446 InPlaceUIWindow_QueryInterface
,
447 InPlaceUIWindow_AddRef
,
448 InPlaceUIWindow_Release
,
449 InPlaceFrame_GetWindow
,
450 InPlaceUIWindow_ContextSensitiveHelp
,
451 InPlaceUIWindow_GetBorder
,
452 InPlaceUIWindow_RequestBorderSpace
,
453 InPlaceUIWindow_SetBorderSpace
,
454 InPlaceFrame_SetActiveObject
,
455 InPlaceFrame_InsertMenus
,
456 InPlaceFrame_SetMenu
,
457 InPlaceFrame_RemoveMenus
,
458 InPlaceFrame_SetStatusText
,
459 InPlaceFrame_EnableModeless
,
460 InPlaceFrame_TranslateAccelerator
463 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
465 static HRESULT WINAPI
InPlaceSite_QueryInterface(IOleInPlaceSiteEx
*iface
, REFIID riid
, void **ppv
)
467 return QueryInterface(riid
, ppv
);
470 static ULONG WINAPI
InPlaceSite_AddRef(IOleInPlaceSiteEx
*iface
)
475 static ULONG WINAPI
InPlaceSite_Release(IOleInPlaceSiteEx
*iface
)
480 static HRESULT WINAPI
InPlaceSite_GetWindow(IOleInPlaceSiteEx
*iface
, HWND
*phwnd
)
482 CHECK_EXPECT(Site_GetWindow
);
483 ok(phwnd
!= NULL
, "phwnd == NULL\n");
485 *phwnd
= container_hwnd
;
489 static HRESULT WINAPI
InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx
*iface
, BOOL fEnterMode
)
491 ok(0, "unexpected call\n");
495 static HRESULT WINAPI
InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx
*iface
)
497 CHECK_EXPECT(CanInPlaceActivate
);
501 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx
*iface
)
503 CHECK_EXPECT(OnInPlaceActivate
);
507 static HRESULT WINAPI
InPlaceSite_OnUIActivate(IOleInPlaceSiteEx
*iface
)
509 CHECK_EXPECT(OnUIActivate
);
513 static HRESULT WINAPI
InPlaceSite_GetWindowContext(IOleInPlaceSiteEx
*iface
,
514 IOleInPlaceFrame
**ppFrame
, IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
515 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
517 static const RECT pos_rect
= {2,1,1002,901};
518 static const RECT clip_rect
= {10,10,990,890};
520 CHECK_EXPECT(GetWindowContext
);
522 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
524 *ppFrame
= &InPlaceFrame
;
526 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
528 *ppDoc
= &InPlaceUIWindow
;
530 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
532 memcpy(lprcPosRect
, &pos_rect
, sizeof(RECT
));
534 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
536 memcpy(lprcClipRect
, &clip_rect
, sizeof(RECT
));
538 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
540 lpFrameInfo
->cb
= sizeof(*lpFrameInfo
);
541 lpFrameInfo
->fMDIApp
= FALSE
;
542 lpFrameInfo
->hwndFrame
= container_hwnd
;
543 lpFrameInfo
->haccel
= NULL
;
544 lpFrameInfo
->cAccelEntries
= 0;
550 static HRESULT WINAPI
InPlaceSite_Scroll(IOleInPlaceSiteEx
*iface
, SIZE scrollExtant
)
552 ok(0, "unexpected call\n");
556 static HRESULT WINAPI
InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx
*iface
, BOOL fUndoable
)
558 ok(0, "unexpected call\n");
562 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx
*iface
)
564 ok(0, "unexpected call\n");
568 static HRESULT WINAPI
InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx
*iface
)
570 ok(0, "unexpected call\n");
574 static HRESULT WINAPI
InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx
*iface
)
576 ok(0, "unexpected call\n");
580 static HRESULT WINAPI
InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx
*iface
, LPCRECT lprcPosRect
)
582 ok(0, "unexpected call\n");
586 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx
*iface
,
587 BOOL
*pNoRedraw
, DWORD dwFlags
)
589 ok(0, "unexpected call\n");
593 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx
*iface
,
596 ok(0, "unexpected call\n");
600 static HRESULT WINAPI
InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx
*iface
)
602 ok(0, "unexpected call\n");
606 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl
= {
607 InPlaceSite_QueryInterface
,
610 InPlaceSite_GetWindow
,
611 InPlaceSite_ContextSensitiveHelp
,
612 InPlaceSite_CanInPlaceActivate
,
613 InPlaceSite_OnInPlaceActivate
,
614 InPlaceSite_OnUIActivate
,
615 InPlaceSite_GetWindowContext
,
617 InPlaceSite_OnUIDeactivate
,
618 InPlaceSite_OnInPlaceDeactivate
,
619 InPlaceSite_DiscardUndoState
,
620 InPlaceSite_DeactivateAndUndo
,
621 InPlaceSite_OnPosRectChange
,
622 InPlaceSite_OnInPlaceActivateEx
,
623 InPlaceSite_OnInPlaceDeactivateEx
,
624 InPlaceSite_RequestUIActivate
627 static IOleInPlaceSiteEx InPlaceSite
= { &InPlaceSiteExVtbl
};
629 static HRESULT WINAPI
DocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
631 return QueryInterface(riid
, ppv
);
634 static ULONG WINAPI
DocHostUIHandler_AddRef(IDocHostUIHandler2
*iface
)
639 static ULONG WINAPI
DocHostUIHandler_Release(IDocHostUIHandler2
*iface
)
644 static HRESULT WINAPI
DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2
*iface
, DWORD dwID
, POINT
*ppt
,
645 IUnknown
*pcmdtReserved
, IDispatch
*pdicpReserved
)
647 ok(0, "unexpected call %d %p %p %p\n", dwID
, ppt
, pcmdtReserved
, pdicpReserved
);
651 static HRESULT WINAPI
DocHostUIHandler_GetHostInfo(IDocHostUIHandler2
*iface
, DOCHOSTUIINFO
*pInfo
)
653 CHECK_EXPECT(GetHostInfo
);
654 ok(pInfo
!= NULL
, "pInfo=NULL\n");
656 ok(pInfo
->cbSize
== sizeof(DOCHOSTUIINFO
), "pInfo->cbSize=%u\n", pInfo
->cbSize
);
657 ok(!pInfo
->dwFlags
, "pInfo->dwFlags=%08x, expected 0\n", pInfo
->dwFlags
);
658 ok(!pInfo
->dwDoubleClick
, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo
->dwDoubleClick
);
659 ok(!pInfo
->pchHostCss
, "pInfo->pchHostCss=%p, expected NULL\n", pInfo
->pchHostCss
);
660 ok(!pInfo
->pchHostNS
, "pInfo->pchhostNS=%p, expected NULL\n", pInfo
->pchHostNS
);
665 static HRESULT WINAPI
DocHostUIHandler_ShowUI(IDocHostUIHandler2
*iface
, DWORD dwID
,
666 IOleInPlaceActiveObject
*pActiveObject
, IOleCommandTarget
*pCommandTarget
,
667 IOleInPlaceFrame
*pFrame
, IOleInPlaceUIWindow
*pDoc
)
669 ok(0, "unexpected call\n");
673 static HRESULT WINAPI
DocHostUIHandler_HideUI(IDocHostUIHandler2
*iface
)
675 ok(0, "unexpected call\n");
679 static HRESULT WINAPI
DocHostUIHandler_UpdateUI(IDocHostUIHandler2
*iface
)
681 ok(0, "unexpected call\n");
685 static HRESULT WINAPI
DocHostUIHandler_EnableModeless(IDocHostUIHandler2
*iface
, BOOL fEnable
)
687 ok(0, "unexpected call\n");
691 static HRESULT WINAPI
DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
693 ok(0, "unexpected call\n");
697 static HRESULT WINAPI
DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
699 ok(0, "unexpected call\n");
703 static HRESULT WINAPI
DocHostUIHandler_ResizeBorder(IDocHostUIHandler2
*iface
, LPCRECT prcBorder
,
704 IOleInPlaceUIWindow
*pUIWindow
, BOOL fRameWindow
)
706 ok(0, "unexpected call\n");
710 static HRESULT WINAPI
DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2
*iface
, LPMSG lpMsg
,
711 const GUID
*pguidCmdGroup
, DWORD nCmdID
)
713 ok(0, "unexpected call\n");
717 static HRESULT WINAPI
DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2
*iface
,
718 LPOLESTR
*pchKey
, DWORD dw
)
720 CHECK_EXPECT(GetOptionKeyPath
);
721 ok(pchKey
!= NULL
, "pchKey==NULL\n");
723 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
724 ok(!dw
, "dw=%x\n", dw
);
728 static HRESULT WINAPI
DocHostUIHandler_GetDropTarget(IDocHostUIHandler2
*iface
,
729 IDropTarget
*pDropTarget
, IDropTarget
**ppDropTarget
)
731 ok(0, "unexpected call\n");
735 static HRESULT WINAPI
DocHostUIHandler_GetExternal(IDocHostUIHandler2
*iface
, IDispatch
**ppDispatch
)
737 ok(0, "unexpected call\n");
741 static HRESULT WINAPI
DocHostUIHandler_TranslateUrl(IDocHostUIHandler2
*iface
, DWORD dwTranslate
,
742 OLECHAR
*pchURLIn
, OLECHAR
**ppchURLOut
)
744 ok(0, "unexpected call\n");
748 static HRESULT WINAPI
DocHostUIHandler_FilterDataObject(IDocHostUIHandler2
*iface
, IDataObject
*pDO
,
749 IDataObject
**ppPORet
)
751 ok(0, "unexpected call\n");
755 static HRESULT WINAPI
DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2
*iface
,
756 LPOLESTR
*pchKey
, DWORD dw
)
758 CHECK_EXPECT(GetOverridesKeyPath
);
759 ok(pchKey
!= NULL
, "pchKey==NULL\n");
761 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
762 ok(!dw
, "dw=%x\n", dw
);
766 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl
= {
767 DocHostUIHandler_QueryInterface
,
768 DocHostUIHandler_AddRef
,
769 DocHostUIHandler_Release
,
770 DocHostUIHandler_ShowContextMenu
,
771 DocHostUIHandler_GetHostInfo
,
772 DocHostUIHandler_ShowUI
,
773 DocHostUIHandler_HideUI
,
774 DocHostUIHandler_UpdateUI
,
775 DocHostUIHandler_EnableModeless
,
776 DocHostUIHandler_OnDocWindowActivate
,
777 DocHostUIHandler_OnFrameWindowActivate
,
778 DocHostUIHandler_ResizeBorder
,
779 DocHostUIHandler_TranslateAccelerator
,
780 DocHostUIHandler_GetOptionKeyPath
,
781 DocHostUIHandler_GetDropTarget
,
782 DocHostUIHandler_GetExternal
,
783 DocHostUIHandler_TranslateUrl
,
784 DocHostUIHandler_FilterDataObject
,
785 DocHostUIHandler_GetOverrideKeyPath
788 static IDocHostUIHandler2 DocHostUIHandler
= { &DocHostUIHandlerVtbl
};
790 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
794 if(IsEqualGUID(&IID_IUnknown
, riid
)
795 || IsEqualGUID(&IID_IOleClientSite
, riid
))
797 else if(IsEqualGUID(&IID_IOleWindow
, riid
)
798 || IsEqualGUID(&IID_IOleInPlaceSite
, riid
)
799 || IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
))
801 else if(IsEqualGUID(&IID_IDocHostUIHandler
, riid
)
802 || IsEqualGUID(&IID_IDocHostUIHandler2
, riid
))
803 *ppv
= &DocHostUIHandler
;
804 else if(IsEqualGUID(&IID_IDispatch
, riid
))
810 return E_NOINTERFACE
;
813 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
815 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
818 static HWND
create_container_window(void)
820 static const WCHAR wszWebBrowserContainer
[] =
821 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
822 static WNDCLASSEXW wndclass
= {
826 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
827 wszWebBrowserContainer
,
831 RegisterClassExW(&wndclass
);
832 return CreateWindowW(wszWebBrowserContainer
, wszWebBrowserContainer
,
833 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, CW_USEDEFAULT
,
834 CW_USEDEFAULT
, NULL
, NULL
, NULL
, NULL
);
837 static void test_DoVerb(IUnknown
*unk
)
840 RECT rect
= {0,0,1000,1000};
843 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
844 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
848 SET_EXPECT(CanInPlaceActivate
);
849 SET_EXPECT(Site_GetWindow
);
850 SET_EXPECT(OnInPlaceActivate
);
851 SET_EXPECT(GetWindowContext
);
852 SET_EXPECT(ShowObject
);
853 SET_EXPECT(GetContainer
);
854 SET_EXPECT(Frame_GetWindow
);
855 SET_EXPECT(OnUIActivate
);
856 SET_EXPECT(Frame_SetActiveObject
);
857 SET_EXPECT(UIWindow_SetActiveObject
);
860 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
861 0, (HWND
)0xdeadbeef, &rect
);
862 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
864 CHECK_CALLED(CanInPlaceActivate
);
865 CHECK_CALLED(Site_GetWindow
);
866 CHECK_CALLED(OnInPlaceActivate
);
867 CHECK_CALLED(GetWindowContext
);
868 CHECK_CALLED(ShowObject
);
869 CHECK_CALLED(GetContainer
);
870 CHECK_CALLED(Frame_GetWindow
);
871 CHECK_CALLED(OnUIActivate
);
872 CHECK_CALLED(Frame_SetActiveObject
);
873 CHECK_CALLED(UIWindow_SetActiveObject
);
874 CHECK_CALLED(SetMenu
);
876 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
877 0, (HWND
)0xdeadbeef, &rect
);
878 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
880 IOleObject_Release(oleobj
);
883 static void test_GetMiscStatus(IOleObject
*oleobj
)
888 for(i
=0; i
<10; i
++) {
890 hres
= IOleObject_GetMiscStatus(oleobj
, i
, &st
);
891 ok(hres
== S_OK
, "GetMiscStatus failed: %08x\n", hres
);
892 ok(st
== (OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
893 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
),
894 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
895 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st
);
899 static void test_ClientSite(IUnknown
*unk
, IOleClientSite
*client
)
902 IOleInPlaceObject
*inplace
;
906 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
907 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
911 test_GetMiscStatus(oleobj
);
913 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObject
, (void**)&inplace
);
914 ok(hres
== S_OK
, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres
);
916 IOleObject_Release(oleobj
);
920 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
921 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
922 ok((hwnd
== NULL
) ^ (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
925 SET_EXPECT(GetContainer
);
926 SET_EXPECT(Site_GetWindow
);
927 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
928 SET_EXPECT(Invoke_AMBIENT_SILENT
);
931 hres
= IOleObject_SetClientSite(oleobj
, client
);
932 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
935 CHECK_CALLED(GetContainer
);
936 CHECK_CALLED(Site_GetWindow
);
937 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
938 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
941 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
942 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
943 ok((hwnd
== NULL
) == (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
945 shell_embedding_hwnd
= hwnd
;
947 IOleInPlaceObject_Release(inplace
);
948 IOleObject_Release(oleobj
);
951 static void test_ClassInfo(IUnknown
*unk
)
953 IProvideClassInfo2
*class_info
;
957 hres
= IUnknown_QueryInterface(unk
, &IID_IProvideClassInfo2
, (void**)&class_info
);
958 ok(hres
== S_OK
, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres
);
962 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, &guid
);
963 ok(hres
== S_OK
, "GetGUID failed: %08x\n", hres
);
964 ok(IsEqualGUID(&DIID_DWebBrowserEvents2
, &guid
), "wrong guid\n");
966 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, &guid
);
967 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
968 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
970 hres
= IProvideClassInfo2_GetGUID(class_info
, 2, &guid
);
971 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
972 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
974 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, NULL
);
975 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
977 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, NULL
);
978 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
980 IProvideClassInfo2_Release(class_info
);
983 static void test_ie_funcs(IUnknown
*unk
)
991 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
992 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
999 hres
= IWebBrowser2_get_HWND(wb
, &hwnd
);
1000 ok(hres
== E_FAIL
, "get_HWND failed: %08x, expected E_FAIL\n", hres
);
1001 ok(hwnd
== 0, "unexpected hwnd %lx\n", hwnd
);
1005 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1006 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1007 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1009 hres
= IWebBrowser2_put_MenuBar(wb
, VARIANT_FALSE
);
1010 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1012 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1013 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1014 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1016 hres
= IWebBrowser2_put_MenuBar(wb
, 100);
1017 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1019 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1020 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1021 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1025 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1026 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1027 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1029 hres
= IWebBrowser2_put_AddressBar(wb
, VARIANT_FALSE
);
1030 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1032 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1033 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1034 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1036 hres
= IWebBrowser2_put_AddressBar(wb
, 100);
1037 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1039 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1040 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1041 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1043 hres
= IWebBrowser2_put_AddressBar(wb
, VARIANT_TRUE
);
1044 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1048 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1049 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1050 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1052 hres
= IWebBrowser2_put_StatusBar(wb
, VARIANT_TRUE
);
1053 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1055 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1056 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1057 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1059 hres
= IWebBrowser2_put_StatusBar(wb
, VARIANT_FALSE
);
1060 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1062 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1063 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1064 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1066 hres
= IWebBrowser2_put_StatusBar(wb
, 100);
1067 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1069 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1070 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1071 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1075 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1076 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1077 ok(i
== VARIANT_TRUE
, "i=%x\n", i
);
1079 hres
= IWebBrowser2_put_ToolBar(wb
, VARIANT_FALSE
);
1080 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1082 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1083 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1084 ok(i
== VARIANT_FALSE
, "b=%x\n", i
);
1086 hres
= IWebBrowser2_put_ToolBar(wb
, 100);
1087 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1089 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1090 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1091 ok(i
== VARIANT_TRUE
, "i=%x\n", i
);
1093 hres
= IWebBrowser2_put_ToolBar(wb
, VARIANT_TRUE
);
1094 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1096 IWebBrowser2_Release(wb
);
1099 static void test_Silent(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1105 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1106 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1107 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1109 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1110 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1113 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1114 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1115 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1117 hres
= IWebBrowser2_put_Silent(wb
, 100);
1118 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1121 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1122 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1123 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1125 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_FALSE
);
1126 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1129 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1130 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1131 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1134 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1135 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1137 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1140 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_SILENT
);
1141 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1144 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1147 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1148 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1149 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1152 static void test_Offline(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1158 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1159 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1160 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1162 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1163 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1166 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1167 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1168 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1170 hres
= IWebBrowser2_put_Offline(wb
, 100);
1171 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1174 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1175 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1176 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1178 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_FALSE
);
1179 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1182 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1183 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1184 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1187 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1188 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1190 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1193 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
);
1194 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1197 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1200 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1201 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1202 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1205 static void test_wb_funcs(IUnknown
*unk
, BOOL is_clientsite
)
1208 IOleControl
*control
;
1211 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
1212 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
1214 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1215 ok(hres
== S_OK
, "Could not get IOleControl interface: %08x\n", hres
);
1217 test_Silent(wb
, control
, is_clientsite
);
1218 test_Offline(wb
, control
, is_clientsite
);
1220 IWebBrowser_Release(wb
);
1221 IOleControl_Release(control
);
1224 static void test_GetControlInfo(IUnknown
*unk
)
1226 IOleControl
*control
;
1230 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1231 ok(hres
== S_OK
, "Could not get IOleControl: %08x\n", hres
);
1235 hres
= IOleControl_GetControlInfo(control
, &info
);
1236 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1237 hres
= IOleControl_GetControlInfo(control
, NULL
);
1238 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1240 IOleControl_Release(control
);
1243 static void test_Extent(IUnknown
*unk
)
1249 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1250 ok(hres
== S_OK
, "Could not get IOleObkect: %08x\n", hres
);
1254 size
.cx
= size
.cy
= 0xdeadbeef;
1255 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1256 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1257 ok(size
.cx
== 1323 && size
.cy
== 529, "size = {%d %d}\n", size
.cx
, size
.cy
);
1261 hres
= IOleObject_SetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1262 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1264 size
.cx
= size
.cy
= 0xdeadbeef;
1265 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1266 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1267 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
1269 size
.cx
= size
.cy
= 0xdeadbeef;
1270 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
1271 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1272 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
1276 hres
= IOleObject_SetExtent(oleobj
, 0, &size
);
1277 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1279 size
.cx
= size
.cy
= 0xdeadbeef;
1280 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
1281 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1282 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
1284 size
.cx
= size
.cy
= 0xdeadbeef;
1285 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
1286 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1287 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
1291 hres
= IOleObject_SetExtent(oleobj
, 0xdeadbeef, &size
);
1292 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1294 size
.cx
= size
.cy
= 0xdeadbeef;
1295 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
1296 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1297 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
1299 size
.cx
= size
.cy
= 0xdeadbeef;
1300 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1301 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1302 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
1304 IOleObject_Release(oleobj
);
1307 static void test_Navigate2(IUnknown
*unk
)
1309 IWebBrowser2
*webbrowser
;
1313 static const WCHAR wszAboutBlank
[] =
1314 {'a','b','o','u','t',':','b','l','a','n','k',0};
1316 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&webbrowser
);
1317 ok(hres
== S_OK
, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres
);
1321 V_VT(&url
) = VT_BSTR
;
1322 V_BSTR(&url
) = SysAllocString(wszAboutBlank
);
1324 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
1325 SET_EXPECT(EnableModeless_FALSE
);
1326 SET_EXPECT(GetHostInfo
);
1327 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
1328 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
1329 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
1330 SET_EXPECT(GetOptionKeyPath
);
1331 SET_EXPECT(GetOverridesKeyPath
);
1332 SET_EXPECT(SetStatusText
);
1333 SET_EXPECT(EnableModeless_TRUE
);
1335 hres
= IWebBrowser2_Navigate2(webbrowser
, &url
, NULL
, NULL
, NULL
, NULL
);
1336 ok(hres
== S_OK
, "Navigate2 failed: %08x\n", hres
);
1338 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
1339 CHECK_CALLED(EnableModeless_FALSE
);
1340 CHECK_CALLED(GetHostInfo
);
1341 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
1342 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
1343 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
1344 CHECK_CALLED(GetOptionKeyPath
);
1345 CHECK_CALLED(GetOverridesKeyPath
);
1346 CHECK_CALLED(SetStatusText
);
1347 CHECK_CALLED(EnableModeless_TRUE
);
1349 IWebBrowser2_Release(webbrowser
);
1352 static void test_QueryInterface(IUnknown
*unk
)
1354 IQuickActivate
*qa
= (IQuickActivate
*)0xdeadbeef;
1355 IRunnableObject
*runnable
= (IRunnableObject
*)0xdeadbeef;
1358 hres
= IUnknown_QueryInterface(unk
, &IID_IQuickActivate
, (void**)&qa
);
1359 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1360 ok(qa
== NULL
, "qa=%p, ezpected NULL\n", qa
);
1362 hres
= IUnknown_QueryInterface(unk
, &IID_IRunnableObject
, (void**)&runnable
);
1363 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1364 ok(runnable
== NULL
, "runnable=%p, ezpected NULL\n", runnable
);
1367 static void test_WebBrowser(void)
1369 IUnknown
*unk
= NULL
;
1373 hres
= CoCreateInstance(&CLSID_WebBrowser
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1374 &IID_IUnknown
, (void**)&unk
);
1375 ok(hres
== S_OK
, "CoCreateInterface failed: %08x\n", hres
);
1379 test_QueryInterface(unk
);
1380 test_ClassInfo(unk
);
1381 test_ClientSite(unk
, &ClientSite
);
1383 test_wb_funcs(unk
, TRUE
);
1385 test_Navigate2(unk
);
1386 test_ClientSite(unk
, NULL
);
1388 test_GetControlInfo(unk
);
1389 test_wb_funcs(unk
, FALSE
);
1391 ref
= IUnknown_Release(unk
);
1392 ok(ref
== 0, "ref=%d, expected 0\n", ref
);
1395 static void gecko_installer_workaround(BOOL disable
)
1400 static BOOL has_url
= FALSE
;
1401 static char url
[2048];
1403 if(!disable
&& !has_url
)
1406 res
= RegOpenKey(HKEY_CURRENT_USER
, "Software\\Wine\\MSHTML", &hkey
);
1407 if(res
!= ERROR_SUCCESS
)
1411 DWORD type
, size
= sizeof(url
);
1413 res
= RegQueryValueEx(hkey
, "GeckoUrl", NULL
, &type
, (PVOID
)url
, &size
);
1414 if(res
== ERROR_SUCCESS
&& type
== REG_SZ
)
1417 RegDeleteValue(hkey
, "GeckoUrl");
1419 RegSetValueEx(hkey
, "GeckoUrl", 0, REG_SZ
, (PVOID
)url
, lstrlenA(url
)+1);
1425 START_TEST(webbrowser
)
1427 gecko_installer_workaround(TRUE
);
1429 container_hwnd
= create_container_window();
1431 OleInitialize(NULL
);
1437 gecko_installer_workaround(FALSE
);