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>
43 DEFINE_GUID(GUID_NULL
,0,0,0,0,0,0,0,0,0,0,0);
45 #define DEFINE_EXPECT(func) \
46 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
48 #define SET_EXPECT(func) \
49 expect_ ## func = TRUE
51 #define CHECK_EXPECT2(func) \
53 ok(expect_ ##func, "unexpected call " #func "\n"); \
54 called_ ## func = TRUE; \
57 #define CHECK_EXPECT(func) \
59 CHECK_EXPECT2(func); \
60 expect_ ## func = FALSE; \
63 #define CHECK_CALLED(func) \
65 ok(called_ ## func, "expected " #func "\n"); \
66 expect_ ## func = called_ ## func = FALSE; \
69 #define CHECK_CALLED_BROKEN(func) \
71 ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
72 expect_ ## func = called_ ## func = FALSE; \
75 #define CLEAR_CALLED(func) \
76 expect_ ## func = called_ ## func = FALSE
78 DEFINE_EXPECT(GetContainer
);
79 DEFINE_EXPECT(Site_GetWindow
);
80 DEFINE_EXPECT(ShowObject
);
81 DEFINE_EXPECT(CanInPlaceActivate
);
82 DEFINE_EXPECT(OnInPlaceActivate
);
83 DEFINE_EXPECT(OnUIActivate
);
84 DEFINE_EXPECT(GetWindowContext
);
85 DEFINE_EXPECT(Frame_GetWindow
);
86 DEFINE_EXPECT(Frame_SetActiveObject
);
87 DEFINE_EXPECT(UIWindow_SetActiveObject
);
88 DEFINE_EXPECT(SetMenu
);
89 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE
);
90 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL
);
91 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT
);
92 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE
);
93 DEFINE_EXPECT(Invoke_AMBIENT_SILENT
);
94 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
95 DEFINE_EXPECT(Invoke_STATUSTEXTCHANGE
);
96 DEFINE_EXPECT(Invoke_PROPERTYCHANGE
);
97 DEFINE_EXPECT(Invoke_DOWNLOADBEGIN
);
98 DEFINE_EXPECT(Invoke_BEFORENAVIGATE2
);
99 DEFINE_EXPECT(Invoke_SETSECURELOCKICON
);
100 DEFINE_EXPECT(Invoke_FILEDOWNLOAD
);
101 DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE
);
102 DEFINE_EXPECT(Invoke_DOWNLOADCOMPLETE
);
103 DEFINE_EXPECT(Invoke_ONMENUBAR
);
104 DEFINE_EXPECT(Invoke_ONADDRESSBAR
);
105 DEFINE_EXPECT(Invoke_ONSTATUSBAR
);
106 DEFINE_EXPECT(Invoke_ONTOOLBAR
);
107 DEFINE_EXPECT(Invoke_ONFULLSCREEN
);
108 DEFINE_EXPECT(Invoke_ONTHEATERMODE
);
109 DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE
);
110 DEFINE_EXPECT(Invoke_TITLECHANGE
);
111 DEFINE_EXPECT(Invoke_NAVIGATECOMPLETE2
);
112 DEFINE_EXPECT(Invoke_PROGRESSCHANGE
);
113 DEFINE_EXPECT(Invoke_DOCUMENTCOMPLETE
);
114 DEFINE_EXPECT(Invoke_282
);
115 DEFINE_EXPECT(EnableModeless_TRUE
);
116 DEFINE_EXPECT(EnableModeless_FALSE
);
117 DEFINE_EXPECT(GetHostInfo
);
118 DEFINE_EXPECT(GetOptionKeyPath
);
119 DEFINE_EXPECT(GetOverridesKeyPath
);
120 DEFINE_EXPECT(SetStatusText
);
121 DEFINE_EXPECT(UpdateUI
);
122 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0
);
123 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1
);
124 DEFINE_EXPECT(Exec_SETPROGRESSMAX
);
125 DEFINE_EXPECT(Exec_SETPROGRESSPOS
);
126 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT
);
127 DEFINE_EXPECT(QueryStatus_STOP
);
128 DEFINE_EXPECT(DocHost_EnableModeless_TRUE
);
129 DEFINE_EXPECT(DocHost_EnableModeless_FALSE
);
130 DEFINE_EXPECT(GetDropTarget
);
132 static const WCHAR wszItem
[] = {'i','t','e','m',0};
133 static const WCHAR about_blankW
[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
134 static const WCHAR emptyW
[] = {0};
136 static VARIANT_BOOL exvb
;
137 static IWebBrowser2
*wb
;
139 static HWND container_hwnd
, shell_embedding_hwnd
;
140 static BOOL is_downloading
= FALSE
;
142 static const char *debugstr_w(LPCWSTR str
)
144 static char buf
[1024];
147 WideCharToMultiByte(CP_ACP
, 0, str
, -1, buf
, sizeof(buf
), NULL
, NULL
);
151 static const char *debugstr_guid(REFIID riid
)
155 sprintf(buf
, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
156 riid
->Data1
, riid
->Data2
, riid
->Data3
, riid
->Data4
[0],
157 riid
->Data4
[1], riid
->Data4
[2], riid
->Data4
[3], riid
->Data4
[4],
158 riid
->Data4
[5], riid
->Data4
[6], riid
->Data4
[7]);
163 #define test_LocationURL(a,b) _test_LocationURL(__LINE__,a,b)
164 static void _test_LocationURL(unsigned line
, IUnknown
*unk
, LPCWSTR exurl
)
167 BSTR url
= (void*)0xdeadbeef;
170 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
171 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
175 hres
= IWebBrowser2_get_LocationURL(wb
, &url
);
176 ok_(__FILE__
,line
) (hres
== (*exurl
? S_OK
: S_FALSE
), "get_LocationURL failed: %08x\n", hres
);
177 ok_(__FILE__
,line
) (!lstrcmpW(url
, exurl
), "unexpected URL: %s\n", debugstr_w(url
));
180 IWebBrowser2_Release(wb
);
183 static HRESULT
QueryInterface(REFIID
,void**);
185 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
186 REFIID riid
, void **ppv
)
188 ok(0, "unexpected call\n");
189 return E_NOINTERFACE
;
192 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
197 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
202 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
203 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
205 ok(!pguidCmdGroup
, "pguidCmdGroup != MULL\n");
206 ok(cCmds
== 1, "cCmds=%d, expected 1\n", cCmds
);
207 ok(!pCmdText
, "pCmdText != NULL\n");
209 switch(prgCmds
[0].cmdID
) {
211 CHECK_EXPECT2(QueryStatus_STOP
);
212 prgCmds
[0].cmdf
= OLECMDF_SUPPORTED
;
214 case OLECMDID_SETPROGRESSTEXT
:
215 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT
);
216 prgCmds
[0].cmdf
= OLECMDF_ENABLED
;
219 ok(0, "unexpected command %d\n", prgCmds
[0].cmdID
);
225 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
226 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
230 case OLECMDID_SETPROGRESSMAX
:
231 CHECK_EXPECT2(Exec_SETPROGRESSMAX
);
232 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
233 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
235 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
236 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
238 case OLECMDID_SETPROGRESSPOS
:
239 CHECK_EXPECT2(Exec_SETPROGRESSPOS
);
240 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
241 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
243 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
244 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
246 case OLECMDID_SETDOWNLOADSTATE
:
248 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
|| !nCmdexecopt
,
249 "nCmdexecopts=%08x\n", nCmdexecopt
);
251 ok(!nCmdexecopt
, "nCmdexecopts=%08x\n", nCmdexecopt
);
252 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
253 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
254 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
255 switch(V_I4(pvaIn
)) {
257 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_0
);
260 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1
);
263 ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn
));
267 ok(0, "unexpected nsCmdID %d\n", nCmdID
);
269 }else if(IsEqualGUID(&CGID_Explorer
, pguidCmdGroup
)) {
278 case 101: /* TODO (IE8) */
281 ok(0, "unexpected nCmdID %d\n", nCmdID
);
283 }else if(IsEqualGUID(&CGID_ShellDocView
, pguidCmdGroup
)) {
288 ok(0, "unexpected nCmdID %d\n", nCmdID
);
291 ok(0, "unexpected pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
297 static IOleCommandTargetVtbl OleCommandTargetVtbl
= {
298 OleCommandTarget_QueryInterface
,
299 OleCommandTarget_AddRef
,
300 OleCommandTarget_Release
,
301 OleCommandTarget_QueryStatus
,
302 OleCommandTarget_Exec
305 static IOleCommandTarget OleCommandTarget
= { &OleCommandTargetVtbl
};
307 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
309 if(IsEqualGUID(&IID_ITargetContainer
, riid
))
310 return E_NOINTERFACE
; /* TODO */
312 if(IsEqualGUID(&IID_IOleCommandTarget
, riid
)) {
313 *ppv
= &OleCommandTarget
;
317 ok(0, "unexpected call\n");
318 return E_NOINTERFACE
;
321 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
326 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
331 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
332 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
334 ok(0, "unexpected call\n");
338 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
339 IEnumUnknown
**ppenum
)
341 ok(0, "unexpected call\n");
345 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
347 ok(0, "unexpected call\n");
351 static const IOleContainerVtbl OleContainerVtbl
= {
352 OleContainer_QueryInterface
,
354 OleContainer_Release
,
355 OleContainer_ParseDisplayName
,
356 OleContainer_EnumObjects
,
357 OleContainer_LockContainer
360 static IOleContainer OleContainer
= { &OleContainerVtbl
};
362 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
364 return QueryInterface(riid
, ppv
);
367 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
372 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
377 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
379 ok(0, "unexpected call\n");
383 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
386 ok(0, "unexpected call\n");
390 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
391 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
393 ok(0, "unexpected call\n");
397 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
398 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
399 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
401 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
402 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
403 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
404 ok(V_VT(pVarResult
) == VT_EMPTY
, "V_VT(pVarResult)=%d\n", V_VT(pVarResult
));
405 ok(wFlags
== DISPATCH_PROPERTYGET
, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags
);
406 ok(pDispParams
->rgvarg
== NULL
, "pDispParams->rgvarg = %p\n", pDispParams
->rgvarg
);
407 ok(pDispParams
->rgdispidNamedArgs
== NULL
,
408 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams
->rgdispidNamedArgs
);
409 ok(pDispParams
->cArgs
== 0, "pDispParams->cArgs = %d\n", pDispParams
->cArgs
);
410 ok(pDispParams
->cNamedArgs
== 0, "pDispParams->cNamedArgs = %d\n", pDispParams
->cNamedArgs
);
412 switch(dispIdMember
) {
413 case DISPID_AMBIENT_USERMODE
:
414 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE
);
416 case DISPID_AMBIENT_DLCONTROL
:
417 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL
);
418 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
420 case DISPID_AMBIENT_USERAGENT
:
421 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
422 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
424 case DISPID_AMBIENT_PALETTE
:
425 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
426 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
428 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
:
429 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
430 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
431 V_VT(pVarResult
) = VT_BOOL
;
432 V_BOOL(pVarResult
) = VARIANT_FALSE
;
434 case DISPID_AMBIENT_SILENT
:
435 CHECK_EXPECT(Invoke_AMBIENT_SILENT
);
436 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
437 V_VT(pVarResult
) = VT_BOOL
;
438 V_BOOL(pVarResult
) = VARIANT_FALSE
;
442 ok(0, "unexpected dispIdMember %d\n", dispIdMember
);
446 static IDispatchVtbl DispatchVtbl
= {
447 Dispatch_QueryInterface
,
450 Dispatch_GetTypeInfoCount
,
451 Dispatch_GetTypeInfo
,
452 Dispatch_GetIDsOfNames
,
456 static IDispatch Dispatch
= { &DispatchVtbl
};
458 static HRESULT WINAPI
WebBrowserEvents2_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
462 if(IsEqualGUID(&DIID_DWebBrowserEvents2
, riid
)) {
467 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
468 return E_NOINTERFACE
;
471 #define test_invoke_bool(p,s) _test_invoke_bool(__LINE__,p,s)
472 static void _test_invoke_bool(unsigned line
, const DISPPARAMS
*params
, BOOL strict
)
474 ok_(__FILE__
,line
) (params
->rgvarg
!= NULL
, "rgvarg == NULL\n");
475 ok_(__FILE__
,line
) (params
->cArgs
== 1, "cArgs=%d, expected 1\n", params
->cArgs
);
476 ok_(__FILE__
,line
) (V_VT(params
->rgvarg
) == VT_BOOL
, "V_VT(arg)=%d\n", V_VT(params
->rgvarg
));
478 ok_(__FILE__
,line
) (V_BOOL(params
->rgvarg
) == exvb
, "V_VT(arg)=%x, expected %x\n",
479 V_BOOL(params
->rgvarg
), exvb
);
481 ok_(__FILE__
,line
) (!V_BOOL(params
->rgvarg
) == !exvb
, "V_VT(arg)=%x, expected %x\n",
482 V_BOOL(params
->rgvarg
), exvb
);
485 static void test_OnBeforeNavigate(const VARIANT
*disp
, const VARIANT
*url
, const VARIANT
*flags
,
486 const VARIANT
*frame
, const VARIANT
*post_data
, const VARIANT
*headers
, const VARIANT
*cancel
)
488 ok(V_VT(disp
) == VT_DISPATCH
, "V_VT(disp)=%d, expected VT_DISPATCH\n", V_VT(disp
));
489 ok(V_DISPATCH(disp
) != NULL
, "V_DISPATCH(disp) == NULL\n");
490 ok(V_DISPATCH(disp
) == (IDispatch
*)wb
, "V_DISPATCH(disp)=%p, wb=%p\n", V_DISPATCH(disp
), wb
);
492 ok(V_VT(url
) == (VT_BYREF
|VT_VARIANT
), "V_VT(url)=%x, expected VT_BYREF|VT_VARIANT\n", V_VT(url
));
493 ok(V_VARIANTREF(url
) != NULL
, "V_VARIANTREF(url) == NULL)\n");
494 if(V_VARIANTREF(url
)) {
495 ok(V_VT(V_VARIANTREF(url
)) == VT_BSTR
, "V_VT(V_VARIANTREF(url))=%d, expected VT_BSTR\n",
496 V_VT(V_VARIANTREF(url
)));
497 ok(V_BSTR(V_VARIANTREF(url
)) != NULL
, "V_BSTR(V_VARIANTREF(url)) == NULL\n");
498 ok(!lstrcmpW(V_BSTR(V_VARIANTREF(url
)), about_blankW
), "unexpected url %s\n",
499 debugstr_w(V_BSTR(V_VARIANTREF(url
))));
502 ok(V_VT(flags
) == (VT_BYREF
|VT_VARIANT
), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
504 ok(V_VT(flags
) == (VT_BYREF
|VT_VARIANT
), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
506 ok(V_VARIANTREF(flags
) != NULL
, "V_VARIANTREF(flags) == NULL)\n");
507 if(V_VARIANTREF(flags
)) {
508 ok(V_VT(V_VARIANTREF(flags
)) == VT_I4
, "V_VT(V_VARIANTREF(flags))=%d, expected VT_I4\n",
509 V_VT(V_VARIANTREF(flags
)));
510 ok(V_I4(V_VARIANTREF(flags
)) == 0, "V_I4(V_VARIANTREF(flags)) = %d, expected 0\n",
511 V_I4(V_VARIANTREF(flags
)));
514 ok(V_VT(frame
) == (VT_BYREF
|VT_VARIANT
), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
516 ok(V_VT(frame
) == (VT_BYREF
|VT_VARIANT
), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
518 ok(V_VARIANTREF(frame
) != NULL
, "V_VARIANTREF(frame) == NULL)\n");
519 if(V_VARIANTREF(frame
)) {
520 ok(V_VT(V_VARIANTREF(frame
)) == VT_BSTR
, "V_VT(V_VARIANTREF(frame))=%d, expected VT_BSTR\n",
521 V_VT(V_VARIANTREF(frame
)));
522 ok(V_BSTR(V_VARIANTREF(frame
)) == NULL
, "V_BSTR(V_VARIANTREF(frame)) = %p, expected NULL\n",
523 V_BSTR(V_VARIANTREF(frame
)));
526 ok(V_VT(post_data
) == (VT_BYREF
|VT_VARIANT
), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
528 ok(V_VT(post_data
) == (VT_BYREF
|VT_VARIANT
), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
530 ok(V_VARIANTREF(post_data
) != NULL
, "V_VARIANTREF(post_data) == NULL)\n");
531 if(V_VARIANTREF(post_data
)) {
532 ok(V_VT(V_VARIANTREF(post_data
)) == (VT_VARIANT
|VT_BYREF
),
533 "V_VT(V_VARIANTREF(post_data))=%d, expected VT_VARIANT|VT_BYREF\n",
534 V_VT(V_VARIANTREF(post_data
)));
535 ok(V_VARIANTREF(V_VARIANTREF(post_data
)) != NULL
,
536 "V_VARIANTREF(V_VARIANTREF(post_data)) == NULL\n");
537 if(V_VARIANTREF(V_VARIANTREF(post_data
))) {
538 ok(V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))) == VT_EMPTY
,
539 "V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) = %d, expected VT_EMPTY\n",
540 V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))));
542 if(V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))) == (VT_UI1
|VT_ARRAY
)) {
543 const SAFEARRAY
*sa
= V_ARRAY(V_VARIANTREF(V_VARIANTREF(post_data
)));
545 ok(sa
->cDims
== 1, "sa->cDims = %d, expected 1\n", sa
->cDims
);
546 ok(sa
->fFeatures
== 0, "sa->fFeatures = %d, expected 0\n", sa
->fFeatures
);
551 ok(V_VT(headers
) == (VT_BYREF
|VT_VARIANT
), "V_VT(headers)=%x, expected VT_BYREF|VT_VARIANT\n",
553 ok(V_VARIANTREF(headers
) != NULL
, "V_VARIANTREF(headers) == NULL)\n");
554 if(V_VARIANTREF(headers
)) {
555 ok(V_VT(V_VARIANTREF(headers
)) == VT_BSTR
, "V_VT(V_VARIANTREF(headers))=%d, expected VT_BSTR\n",
556 V_VT(V_VARIANTREF(headers
)));
557 ok(V_BSTR(V_VARIANTREF(headers
)) == NULL
, "V_BSTR(V_VARIANTREF(heders)) = %p, expected NULL\n",
558 V_BSTR(V_VARIANTREF(headers
)));
561 ok(V_VT(cancel
) == (VT_BYREF
|VT_BOOL
), "V_VT(cancel)=%x, expected VT_BYREF|VT_BOOL\n",
563 ok(V_BOOLREF(cancel
) != NULL
, "V_BOOLREF(pDispParams->rgvarg[0] == NULL)\n");
564 if(V_BOOLREF(cancel
))
565 ok(*V_BOOLREF(cancel
) == VARIANT_FALSE
, "*V_BOOLREF(calcel) = %x, expected VARIANT_FALSE\n",
569 static HRESULT WINAPI
WebBrowserEvents2_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
570 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
571 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
573 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
574 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
575 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
576 ok(pVarResult
== NULL
, "pVarResult=%p\n", pVarResult
);
577 ok(wFlags
== DISPATCH_METHOD
, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags
);
578 ok(pDispParams
->rgdispidNamedArgs
== NULL
,
579 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams
->rgdispidNamedArgs
);
580 ok(pDispParams
->cNamedArgs
== 0, "pDispParams->cNamedArgs = %d\n", pDispParams
->cNamedArgs
);
582 switch(dispIdMember
) {
583 case DISPID_STATUSTEXTCHANGE
:
584 CHECK_EXPECT2(Invoke_STATUSTEXTCHANGE
);
586 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
587 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
588 ok(V_VT(pDispParams
->rgvarg
) == VT_BSTR
, "V_VT(pDispParams->rgvarg)=%d, expected VT_BSTR\n",
589 V_VT(pDispParams
->rgvarg
));
590 /* TODO: Check text */
593 case DISPID_PROPERTYCHANGE
:
594 CHECK_EXPECT2(Invoke_PROPERTYCHANGE
);
596 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
597 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
598 /* TODO: Check args */
601 case DISPID_DOWNLOADBEGIN
:
602 CHECK_EXPECT(Invoke_DOWNLOADBEGIN
);
604 ok(pDispParams
->rgvarg
== NULL
, "rgvarg=%p, expected NULL\n", pDispParams
->rgvarg
);
605 ok(pDispParams
->cArgs
== 0, "cArgs=%d, expected 0\n", pDispParams
->cArgs
);
608 case DISPID_BEFORENAVIGATE2
:
609 CHECK_EXPECT(Invoke_BEFORENAVIGATE2
);
611 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
612 ok(pDispParams
->cArgs
== 7, "cArgs=%d, expected 7\n", pDispParams
->cArgs
);
613 test_OnBeforeNavigate(pDispParams
->rgvarg
+6, pDispParams
->rgvarg
+5, pDispParams
->rgvarg
+4,
614 pDispParams
->rgvarg
+3, pDispParams
->rgvarg
+2, pDispParams
->rgvarg
+1,
615 pDispParams
->rgvarg
);
618 case DISPID_SETSECURELOCKICON
:
619 CHECK_EXPECT2(Invoke_SETSECURELOCKICON
);
621 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
622 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
623 /* TODO: Check args */
626 case DISPID_FILEDOWNLOAD
:
627 CHECK_EXPECT(Invoke_FILEDOWNLOAD
);
629 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
630 ok(pDispParams
->cArgs
== 2, "cArgs=%d, expected 2\n", pDispParams
->cArgs
);
631 /* TODO: Check args */
634 case DISPID_COMMANDSTATECHANGE
:
635 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE
);
637 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
638 ok(pDispParams
->cArgs
== 2, "cArgs=%d, expected 2\n", pDispParams
->cArgs
);
639 /* TODO: Check args */
642 case DISPID_DOWNLOADCOMPLETE
:
643 CHECK_EXPECT(Invoke_DOWNLOADCOMPLETE
);
645 ok(pDispParams
->rgvarg
== NULL
, "rgvarg=%p, expected NULL\n", pDispParams
->rgvarg
);
646 ok(pDispParams
->cArgs
== 0, "cArgs=%d, expected 0\n", pDispParams
->cArgs
);
649 case DISPID_ONMENUBAR
:
650 CHECK_EXPECT(Invoke_ONMENUBAR
);
651 test_invoke_bool(pDispParams
, TRUE
);
654 case DISPID_ONADDRESSBAR
:
655 CHECK_EXPECT(Invoke_ONADDRESSBAR
);
656 test_invoke_bool(pDispParams
, TRUE
);
659 case DISPID_ONSTATUSBAR
:
660 CHECK_EXPECT(Invoke_ONSTATUSBAR
);
661 test_invoke_bool(pDispParams
, TRUE
);
664 case DISPID_ONTOOLBAR
:
665 CHECK_EXPECT(Invoke_ONTOOLBAR
);
666 test_invoke_bool(pDispParams
, FALSE
);
669 case DISPID_ONFULLSCREEN
:
670 CHECK_EXPECT(Invoke_ONFULLSCREEN
);
671 test_invoke_bool(pDispParams
, TRUE
);
674 case DISPID_ONTHEATERMODE
:
675 CHECK_EXPECT(Invoke_ONTHEATERMODE
);
676 test_invoke_bool(pDispParams
, TRUE
);
679 case DISPID_WINDOWSETRESIZABLE
:
680 CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE
);
681 test_invoke_bool(pDispParams
, TRUE
);
684 case DISPID_TITLECHANGE
:
685 CHECK_EXPECT2(Invoke_TITLECHANGE
);
689 case DISPID_NAVIGATECOMPLETE2
:
690 CHECK_EXPECT(Invoke_NAVIGATECOMPLETE2
);
694 case DISPID_PROGRESSCHANGE
:
695 CHECK_EXPECT(Invoke_PROGRESSCHANGE
);
699 case DISPID_DOCUMENTCOMPLETE
:
700 CHECK_EXPECT(Invoke_DOCUMENTCOMPLETE
);
704 case 282: /* FIXME */
705 CHECK_EXPECT2(Invoke_282
);
709 ok(0, "unexpected dispIdMember %d\n", dispIdMember
);
715 static IDispatchVtbl WebBrowserEvents2Vtbl
= {
716 WebBrowserEvents2_QueryInterface
,
719 Dispatch_GetTypeInfoCount
,
720 Dispatch_GetTypeInfo
,
721 Dispatch_GetIDsOfNames
,
722 WebBrowserEvents2_Invoke
725 static IDispatch WebBrowserEvents2
= { &WebBrowserEvents2Vtbl
};
727 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
729 return QueryInterface(riid
, ppv
);
732 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
737 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
742 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
744 ok(0, "unexpected call\n");
748 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAssign
, DWORD dwWhichMoniker
,
751 ok(0, "unexpected call\n");
755 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
757 CHECK_EXPECT(GetContainer
);
759 ok(ppContainer
!= NULL
, "ppContainer == NULL\n");
761 *ppContainer
= &OleContainer
;
766 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
768 CHECK_EXPECT(ShowObject
);
772 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
774 ok(0, "unexpected call\n");
778 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
780 ok(0, "unexpected call\n");
784 static const IOleClientSiteVtbl ClientSiteVtbl
= {
785 ClientSite_QueryInterface
,
788 ClientSite_SaveObject
,
789 ClientSite_GetMoniker
,
790 ClientSite_GetContainer
,
791 ClientSite_ShowObject
,
792 ClientSite_OnShowWindow
,
793 ClientSite_RequestNewObjectLayout
796 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
798 static HRESULT WINAPI
InPlaceUIWindow_QueryInterface(IOleInPlaceFrame
*iface
,
799 REFIID riid
, void **ppv
)
801 ok(0, "unexpected call\n");
802 return E_NOINTERFACE
;
805 static ULONG WINAPI
InPlaceUIWindow_AddRef(IOleInPlaceFrame
*iface
)
810 static ULONG WINAPI
InPlaceUIWindow_Release(IOleInPlaceFrame
*iface
)
815 static HRESULT WINAPI
InPlaceUIWindow_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
817 ok(0, "unexpected call\n");
821 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
823 CHECK_EXPECT(Frame_GetWindow
);
824 ok(phwnd
!= NULL
, "phwnd == NULL\n");
826 *phwnd
= container_hwnd
;
830 static HRESULT WINAPI
InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
832 ok(0, "unexpected call\n");
836 static HRESULT WINAPI
InPlaceUIWindow_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
838 ok(0, "unexpected call\n");
842 static HRESULT WINAPI
InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame
*iface
,
843 LPCBORDERWIDTHS pborderwidths
)
845 ok(0, "unexpected call\n");
849 static HRESULT WINAPI
InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame
*iface
,
850 LPCBORDERWIDTHS pborderwidths
)
852 ok(0, "unexpected call\n");
856 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
857 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
859 CHECK_EXPECT(UIWindow_SetActiveObject
);
860 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
861 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
865 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
866 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
868 CHECK_EXPECT(Frame_SetActiveObject
);
869 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
870 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
874 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
875 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
877 ok(0, "unexpected call\n");
881 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
882 HOLEMENU holemenu
, HWND hwndActiveObject
)
884 CHECK_EXPECT(SetMenu
);
885 ok(hmenuShared
== NULL
, "hmenuShared=%p\n", hmenuShared
);
886 ok(holemenu
== NULL
, "holemenu=%p\n", holemenu
);
887 ok(hwndActiveObject
== shell_embedding_hwnd
, "hwndActiveObject=%p, expected %p\n",
888 hwndActiveObject
, shell_embedding_hwnd
);
892 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
894 ok(0, "unexpected call\n");
898 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
900 CHECK_EXPECT2(SetStatusText
);
901 /* FIXME: Check pszStatusText */
905 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
908 CHECK_EXPECT2(EnableModeless_TRUE
);
910 CHECK_EXPECT2(EnableModeless_FALSE
);
914 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
916 ok(0, "unexpected call\n");
920 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
921 InPlaceUIWindow_QueryInterface
,
922 InPlaceUIWindow_AddRef
,
923 InPlaceUIWindow_Release
,
924 InPlaceUIWindow_GetWindow
,
925 InPlaceUIWindow_ContextSensitiveHelp
,
926 InPlaceUIWindow_GetBorder
,
927 InPlaceUIWindow_RequestBorderSpace
,
928 InPlaceUIWindow_SetBorderSpace
,
929 InPlaceUIWindow_SetActiveObject
,
932 static IOleInPlaceUIWindow InPlaceUIWindow
= { (IOleInPlaceUIWindowVtbl
*)&InPlaceUIWindowVtbl
};
934 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
935 InPlaceUIWindow_QueryInterface
,
936 InPlaceUIWindow_AddRef
,
937 InPlaceUIWindow_Release
,
938 InPlaceFrame_GetWindow
,
939 InPlaceUIWindow_ContextSensitiveHelp
,
940 InPlaceUIWindow_GetBorder
,
941 InPlaceUIWindow_RequestBorderSpace
,
942 InPlaceUIWindow_SetBorderSpace
,
943 InPlaceFrame_SetActiveObject
,
944 InPlaceFrame_InsertMenus
,
945 InPlaceFrame_SetMenu
,
946 InPlaceFrame_RemoveMenus
,
947 InPlaceFrame_SetStatusText
,
948 InPlaceFrame_EnableModeless
,
949 InPlaceFrame_TranslateAccelerator
952 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
954 static HRESULT WINAPI
InPlaceSite_QueryInterface(IOleInPlaceSiteEx
*iface
, REFIID riid
, void **ppv
)
956 return QueryInterface(riid
, ppv
);
959 static ULONG WINAPI
InPlaceSite_AddRef(IOleInPlaceSiteEx
*iface
)
964 static ULONG WINAPI
InPlaceSite_Release(IOleInPlaceSiteEx
*iface
)
969 static HRESULT WINAPI
InPlaceSite_GetWindow(IOleInPlaceSiteEx
*iface
, HWND
*phwnd
)
971 CHECK_EXPECT(Site_GetWindow
);
972 ok(phwnd
!= NULL
, "phwnd == NULL\n");
974 *phwnd
= container_hwnd
;
978 static HRESULT WINAPI
InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx
*iface
, BOOL fEnterMode
)
980 ok(0, "unexpected call\n");
984 static HRESULT WINAPI
InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx
*iface
)
986 CHECK_EXPECT(CanInPlaceActivate
);
990 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx
*iface
)
992 CHECK_EXPECT(OnInPlaceActivate
);
996 static HRESULT WINAPI
InPlaceSite_OnUIActivate(IOleInPlaceSiteEx
*iface
)
998 CHECK_EXPECT(OnUIActivate
);
1002 static HRESULT WINAPI
InPlaceSite_GetWindowContext(IOleInPlaceSiteEx
*iface
,
1003 IOleInPlaceFrame
**ppFrame
, IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
1004 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
1006 static const RECT pos_rect
= {2,1,1002,901};
1007 static const RECT clip_rect
= {10,10,990,890};
1009 CHECK_EXPECT(GetWindowContext
);
1011 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
1013 *ppFrame
= &InPlaceFrame
;
1015 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
1017 *ppDoc
= &InPlaceUIWindow
;
1019 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
1021 memcpy(lprcPosRect
, &pos_rect
, sizeof(RECT
));
1023 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
1025 memcpy(lprcClipRect
, &clip_rect
, sizeof(RECT
));
1027 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
1029 lpFrameInfo
->cb
= sizeof(*lpFrameInfo
);
1030 lpFrameInfo
->fMDIApp
= FALSE
;
1031 lpFrameInfo
->hwndFrame
= container_hwnd
;
1032 lpFrameInfo
->haccel
= NULL
;
1033 lpFrameInfo
->cAccelEntries
= 0;
1039 static HRESULT WINAPI
InPlaceSite_Scroll(IOleInPlaceSiteEx
*iface
, SIZE scrollExtant
)
1041 ok(0, "unexpected call\n");
1045 static HRESULT WINAPI
InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx
*iface
, BOOL fUndoable
)
1047 ok(0, "unexpected call\n");
1051 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx
*iface
)
1053 ok(0, "unexpected call\n");
1057 static HRESULT WINAPI
InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx
*iface
)
1059 ok(0, "unexpected call\n");
1063 static HRESULT WINAPI
InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx
*iface
)
1065 ok(0, "unexpected call\n");
1069 static HRESULT WINAPI
InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx
*iface
, LPCRECT lprcPosRect
)
1071 ok(0, "unexpected call\n");
1075 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx
*iface
,
1076 BOOL
*pNoRedraw
, DWORD dwFlags
)
1078 ok(0, "unexpected call\n");
1082 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx
*iface
,
1085 ok(0, "unexpected call\n");
1089 static HRESULT WINAPI
InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx
*iface
)
1091 ok(0, "unexpected call\n");
1095 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl
= {
1096 InPlaceSite_QueryInterface
,
1098 InPlaceSite_Release
,
1099 InPlaceSite_GetWindow
,
1100 InPlaceSite_ContextSensitiveHelp
,
1101 InPlaceSite_CanInPlaceActivate
,
1102 InPlaceSite_OnInPlaceActivate
,
1103 InPlaceSite_OnUIActivate
,
1104 InPlaceSite_GetWindowContext
,
1106 InPlaceSite_OnUIDeactivate
,
1107 InPlaceSite_OnInPlaceDeactivate
,
1108 InPlaceSite_DiscardUndoState
,
1109 InPlaceSite_DeactivateAndUndo
,
1110 InPlaceSite_OnPosRectChange
,
1111 InPlaceSite_OnInPlaceActivateEx
,
1112 InPlaceSite_OnInPlaceDeactivateEx
,
1113 InPlaceSite_RequestUIActivate
1116 static IOleInPlaceSiteEx InPlaceSite
= { &InPlaceSiteExVtbl
};
1118 static HRESULT WINAPI
DocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
1120 return QueryInterface(riid
, ppv
);
1123 static ULONG WINAPI
DocHostUIHandler_AddRef(IDocHostUIHandler2
*iface
)
1128 static ULONG WINAPI
DocHostUIHandler_Release(IDocHostUIHandler2
*iface
)
1133 static HRESULT WINAPI
DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2
*iface
, DWORD dwID
, POINT
*ppt
,
1134 IUnknown
*pcmdtReserved
, IDispatch
*pdicpReserved
)
1136 ok(0, "unexpected call %d %p %p %p\n", dwID
, ppt
, pcmdtReserved
, pdicpReserved
);
1140 static HRESULT WINAPI
DocHostUIHandler_GetHostInfo(IDocHostUIHandler2
*iface
, DOCHOSTUIINFO
*pInfo
)
1142 CHECK_EXPECT2(GetHostInfo
);
1143 ok(pInfo
!= NULL
, "pInfo=NULL\n");
1145 ok(pInfo
->cbSize
== sizeof(DOCHOSTUIINFO
) || broken(!pInfo
->cbSize
), "pInfo->cbSize=%u\n", pInfo
->cbSize
);
1146 ok(!pInfo
->dwFlags
, "pInfo->dwFlags=%08x, expected 0\n", pInfo
->dwFlags
);
1147 ok(!pInfo
->dwDoubleClick
, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo
->dwDoubleClick
);
1148 ok(!pInfo
->pchHostCss
, "pInfo->pchHostCss=%p, expected NULL\n", pInfo
->pchHostCss
);
1149 ok(!pInfo
->pchHostNS
, "pInfo->pchhostNS=%p, expected NULL\n", pInfo
->pchHostNS
);
1154 static HRESULT WINAPI
DocHostUIHandler_ShowUI(IDocHostUIHandler2
*iface
, DWORD dwID
,
1155 IOleInPlaceActiveObject
*pActiveObject
, IOleCommandTarget
*pCommandTarget
,
1156 IOleInPlaceFrame
*pFrame
, IOleInPlaceUIWindow
*pDoc
)
1158 ok(0, "unexpected call\n");
1162 static HRESULT WINAPI
DocHostUIHandler_HideUI(IDocHostUIHandler2
*iface
)
1164 ok(0, "unexpected call\n");
1168 static HRESULT WINAPI
DocHostUIHandler_UpdateUI(IDocHostUIHandler2
*iface
)
1170 CHECK_EXPECT(UpdateUI
);
1174 static HRESULT WINAPI
DocHostUIHandler_EnableModeless(IDocHostUIHandler2
*iface
, BOOL fEnable
)
1177 CHECK_EXPECT(DocHost_EnableModeless_TRUE
);
1179 CHECK_EXPECT(DocHost_EnableModeless_FALSE
);
1184 static HRESULT WINAPI
DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1186 ok(0, "unexpected call\n");
1190 static HRESULT WINAPI
DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1192 ok(0, "unexpected call\n");
1196 static HRESULT WINAPI
DocHostUIHandler_ResizeBorder(IDocHostUIHandler2
*iface
, LPCRECT prcBorder
,
1197 IOleInPlaceUIWindow
*pUIWindow
, BOOL fRameWindow
)
1199 ok(0, "unexpected call\n");
1203 static HRESULT WINAPI
DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2
*iface
, LPMSG lpMsg
,
1204 const GUID
*pguidCmdGroup
, DWORD nCmdID
)
1206 ok(0, "unexpected call\n");
1210 static HRESULT WINAPI
DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2
*iface
,
1211 LPOLESTR
*pchKey
, DWORD dw
)
1213 CHECK_EXPECT(GetOptionKeyPath
);
1214 ok(pchKey
!= NULL
, "pchKey==NULL\n");
1216 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
1217 ok(!dw
, "dw=%x\n", dw
);
1221 static HRESULT WINAPI
DocHostUIHandler_GetDropTarget(IDocHostUIHandler2
*iface
,
1222 IDropTarget
*pDropTarget
, IDropTarget
**ppDropTarget
)
1224 CHECK_EXPECT(GetDropTarget
);
1228 static HRESULT WINAPI
DocHostUIHandler_GetExternal(IDocHostUIHandler2
*iface
, IDispatch
**ppDispatch
)
1230 ok(0, "unexpected call\n");
1234 static HRESULT WINAPI
DocHostUIHandler_TranslateUrl(IDocHostUIHandler2
*iface
, DWORD dwTranslate
,
1235 OLECHAR
*pchURLIn
, OLECHAR
**ppchURLOut
)
1237 ok(0, "unexpected call\n");
1241 static HRESULT WINAPI
DocHostUIHandler_FilterDataObject(IDocHostUIHandler2
*iface
, IDataObject
*pDO
,
1242 IDataObject
**ppPORet
)
1244 ok(0, "unexpected call\n");
1248 static HRESULT WINAPI
DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2
*iface
,
1249 LPOLESTR
*pchKey
, DWORD dw
)
1251 CHECK_EXPECT(GetOverridesKeyPath
);
1252 ok(pchKey
!= NULL
, "pchKey==NULL\n");
1254 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
1255 ok(!dw
, "dw=%x\n", dw
);
1259 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl
= {
1260 DocHostUIHandler_QueryInterface
,
1261 DocHostUIHandler_AddRef
,
1262 DocHostUIHandler_Release
,
1263 DocHostUIHandler_ShowContextMenu
,
1264 DocHostUIHandler_GetHostInfo
,
1265 DocHostUIHandler_ShowUI
,
1266 DocHostUIHandler_HideUI
,
1267 DocHostUIHandler_UpdateUI
,
1268 DocHostUIHandler_EnableModeless
,
1269 DocHostUIHandler_OnDocWindowActivate
,
1270 DocHostUIHandler_OnFrameWindowActivate
,
1271 DocHostUIHandler_ResizeBorder
,
1272 DocHostUIHandler_TranslateAccelerator
,
1273 DocHostUIHandler_GetOptionKeyPath
,
1274 DocHostUIHandler_GetDropTarget
,
1275 DocHostUIHandler_GetExternal
,
1276 DocHostUIHandler_TranslateUrl
,
1277 DocHostUIHandler_FilterDataObject
,
1278 DocHostUIHandler_GetOverrideKeyPath
1281 static IDocHostUIHandler2 DocHostUIHandler
= { &DocHostUIHandlerVtbl
};
1284 static HRESULT WINAPI
ServiceProvider_QueryInterface(IServiceProvider
*iface
, REFIID riid
, void **ppv
)
1286 return QueryInterface(riid
, ppv
);
1289 static ULONG WINAPI
ServiceProvider_AddRef(IServiceProvider
*iface
)
1294 static ULONG WINAPI
ServiceProvider_Release(IServiceProvider
*iface
)
1299 static HRESULT WINAPI
ServiceProvider_QueryService(IServiceProvider
*iface
,
1300 REFGUID guidService
, REFIID riid
, void **ppv
)
1304 if (IsEqualGUID(&SID_STopLevelBrowser
, guidService
))
1305 trace("Service SID_STopLevelBrowser\n");
1306 else if (IsEqualGUID(&SID_SEditCommandTarget
, guidService
))
1307 trace("Service SID_SEditCommandTarget\n");
1308 else if (IsEqualGUID(&IID_ITargetFrame2
, guidService
))
1309 trace("Service IID_ITargetFrame2\n");
1310 else if (IsEqualGUID(&SID_SInternetSecurityManager
, guidService
))
1311 trace("Service SID_SInternetSecurityManager\n");
1312 else if (IsEqualGUID(&SID_SOleUndoManager
, guidService
))
1313 trace("Service SID_SOleUndoManager\n");
1314 else if (IsEqualGUID(&SID_IMimeInfo
, guidService
))
1315 trace("Service SID_IMimeInfo\n");
1316 else if (IsEqualGUID(&SID_STopWindow
, guidService
))
1317 trace("Service SID_STopWindow\n");
1319 /* 30D02401-6A81-11D0-8274-00C04FD5AE38 Explorer Bar: Search */
1320 /* D1E7AFEC-6A2E-11D0-8C78-00C04FD918B4 no info */
1321 /* A9227C3C-7F8E-11D0-8CB0-00A0C92DBFE8 no info */
1322 /* 371EA634-DC5C-11D1-BA57-00C04FC2040E one reference to IVersionHost */
1323 /* 3050F429-98B5-11CF-BB82-00AA00BDCE0B IID_IElementBehaviorFactory */
1324 /* 6D12FE80-7911-11CF-9534-0000C05BAE0B SID_DefView */
1325 /* AD7F6C62-F6BD-11D2-959B-006097C553C8 no info */
1326 /* 53A2D5B1-D2FC-11D0-84E0-006097C9987D no info */
1327 /* 3050F312-98B5-11CF-BB82-00AA00BDCE0B HTMLFrameBaseClass */
1328 /* 639447BD-B2D3-44B9-9FB0-510F23CB45E4 no info */
1329 /* 20C46561-8491-11CF-960C-0080C7F4EE85 no info */
1332 trace("Service %s not supported\n", debugstr_guid(guidService
));
1334 return E_NOINTERFACE
;
1338 static const IServiceProviderVtbl ServiceProviderVtbl
= {
1339 ServiceProvider_QueryInterface
,
1340 ServiceProvider_AddRef
,
1341 ServiceProvider_Release
,
1342 ServiceProvider_QueryService
1345 static IServiceProvider ServiceProvider
= { &ServiceProviderVtbl
};
1348 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
1352 if(IsEqualGUID(&IID_IUnknown
, riid
)
1353 || IsEqualGUID(&IID_IOleClientSite
, riid
))
1355 else if(IsEqualGUID(&IID_IOleWindow
, riid
)
1356 || IsEqualGUID(&IID_IOleInPlaceSite
, riid
)
1357 || IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
))
1358 *ppv
= &InPlaceSite
;
1359 else if(IsEqualGUID(&IID_IDocHostUIHandler
, riid
)
1360 || IsEqualGUID(&IID_IDocHostUIHandler2
, riid
))
1361 *ppv
= &DocHostUIHandler
;
1362 else if(IsEqualGUID(&IID_IDispatch
, riid
))
1364 else if(IsEqualGUID(&IID_IServiceProvider
, riid
))
1365 *ppv
= &ServiceProvider
;
1366 else if(IsEqualGUID(&IID_IDocHostShowUI
, riid
))
1367 trace("interface IID_IDocHostShowUI\n");
1368 else if(IsEqualGUID(&IID_IOleControlSite
, riid
))
1369 trace("interface IID_IOleControlSite\n");
1370 else if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
1371 trace("interface IID_IOleCommandTarget\n");
1373 /* B6EA2050-048A-11D1-82B9-00C04FB9942E IAxWinHostWindow */
1377 /* are there more interfaces, that a host can support? */
1378 trace("%s: interface not supported\n", debugstr_guid(riid
));
1381 return (*ppv
) ? S_OK
: E_NOINTERFACE
;
1384 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
1386 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
1389 static HWND
create_container_window(void)
1391 static const WCHAR wszWebBrowserContainer
[] =
1392 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
1393 static WNDCLASSEXW wndclass
= {
1394 sizeof(WNDCLASSEXW
),
1397 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
1398 wszWebBrowserContainer
,
1402 RegisterClassExW(&wndclass
);
1403 return CreateWindowW(wszWebBrowserContainer
, wszWebBrowserContainer
,
1404 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, CW_USEDEFAULT
,
1405 CW_USEDEFAULT
, NULL
, NULL
, NULL
, NULL
);
1408 static void test_DoVerb(IUnknown
*unk
)
1411 RECT rect
= {0,0,1000,1000};
1414 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1415 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
1419 SET_EXPECT(CanInPlaceActivate
);
1420 SET_EXPECT(Site_GetWindow
);
1421 SET_EXPECT(OnInPlaceActivate
);
1422 SET_EXPECT(GetWindowContext
);
1423 SET_EXPECT(ShowObject
);
1424 SET_EXPECT(GetContainer
);
1425 SET_EXPECT(Frame_GetWindow
);
1426 SET_EXPECT(OnUIActivate
);
1427 SET_EXPECT(Frame_SetActiveObject
);
1428 SET_EXPECT(UIWindow_SetActiveObject
);
1429 SET_EXPECT(SetMenu
);
1431 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
1432 0, (HWND
)0xdeadbeef, &rect
);
1433 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
1435 CHECK_CALLED(CanInPlaceActivate
);
1436 CHECK_CALLED(Site_GetWindow
);
1437 CHECK_CALLED(OnInPlaceActivate
);
1438 CHECK_CALLED(GetWindowContext
);
1439 CHECK_CALLED(ShowObject
);
1440 CHECK_CALLED(GetContainer
);
1441 CHECK_CALLED(Frame_GetWindow
);
1442 CHECK_CALLED(OnUIActivate
);
1443 CHECK_CALLED(Frame_SetActiveObject
);
1444 CHECK_CALLED(UIWindow_SetActiveObject
);
1445 CHECK_CALLED(SetMenu
);
1447 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
1448 0, (HWND
)0xdeadbeef, &rect
);
1449 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
1451 IOleObject_Release(oleobj
);
1454 static void test_GetMiscStatus(IOleObject
*oleobj
)
1459 for(i
=0; i
<10; i
++) {
1461 hres
= IOleObject_GetMiscStatus(oleobj
, i
, &st
);
1462 ok(hres
== S_OK
, "GetMiscStatus failed: %08x\n", hres
);
1463 ok(st
== (OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
1464 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
),
1465 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
1466 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st
);
1470 static void test_SetHostNames(IOleObject
*oleobj
)
1474 static const WCHAR test_appW
[] = {'t','e','s','t',' ','a','p','p',0};
1476 hres
= IOleObject_SetHostNames(oleobj
, test_appW
, (void*)0xdeadbeef);
1477 ok(hres
== S_OK
, "SetHostNames failed: %08x\n", hres
);
1480 static void test_ClientSite(IUnknown
*unk
, IOleClientSite
*client
)
1483 IOleInPlaceObject
*inplace
;
1487 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1488 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
1492 test_GetMiscStatus(oleobj
);
1493 test_SetHostNames(oleobj
);
1495 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObject
, (void**)&inplace
);
1496 ok(hres
== S_OK
, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres
);
1498 IOleObject_Release(oleobj
);
1502 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
1503 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
1504 ok((hwnd
== NULL
) ^ (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
1507 SET_EXPECT(GetContainer
);
1508 SET_EXPECT(Site_GetWindow
);
1509 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1510 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1511 }else if(!is_downloading
) {
1512 SET_EXPECT(Invoke_DOWNLOADCOMPLETE
);
1513 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
1514 SET_EXPECT(Invoke_COMMANDSTATECHANGE
);
1517 hres
= IOleObject_SetClientSite(oleobj
, client
);
1518 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
1521 CHECK_CALLED(GetContainer
);
1522 CHECK_CALLED(Site_GetWindow
);
1523 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1524 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1525 }else if(!is_downloading
) {
1526 todo_wine
CHECK_CALLED(Invoke_DOWNLOADCOMPLETE
);
1527 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
1528 todo_wine
CHECK_CALLED(Invoke_COMMANDSTATECHANGE
);
1531 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
1532 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
1533 ok((hwnd
== NULL
) == (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
1535 shell_embedding_hwnd
= hwnd
;
1537 test_SetHostNames(oleobj
);
1539 IOleInPlaceObject_Release(inplace
);
1540 IOleObject_Release(oleobj
);
1543 static void test_ClassInfo(IUnknown
*unk
)
1545 IProvideClassInfo2
*class_info
;
1549 hres
= IUnknown_QueryInterface(unk
, &IID_IProvideClassInfo2
, (void**)&class_info
);
1550 ok(hres
== S_OK
, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres
);
1554 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, &guid
);
1555 ok(hres
== S_OK
, "GetGUID failed: %08x\n", hres
);
1556 ok(IsEqualGUID(&DIID_DWebBrowserEvents2
, &guid
), "wrong guid\n");
1558 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, &guid
);
1559 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
1560 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
1562 hres
= IProvideClassInfo2_GetGUID(class_info
, 2, &guid
);
1563 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
1564 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
1566 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, NULL
);
1567 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
1569 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, NULL
);
1570 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
1572 IProvideClassInfo2_Release(class_info
);
1575 static void test_ie_funcs(IUnknown
*unk
)
1584 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
1585 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
1592 hres
= IWebBrowser2_get_HWND(wb
, &hwnd
);
1593 ok(hres
== E_FAIL
, "get_HWND failed: %08x, expected E_FAIL\n", hres
);
1594 ok(hwnd
== 0, "unexpected hwnd %x\n", hwnd
);
1598 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1599 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1600 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1602 SET_EXPECT(Invoke_ONMENUBAR
);
1603 hres
= IWebBrowser2_put_MenuBar(wb
, (exvb
= VARIANT_FALSE
));
1604 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1605 CHECK_CALLED(Invoke_ONMENUBAR
);
1607 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1608 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1609 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1611 SET_EXPECT(Invoke_ONMENUBAR
);
1612 hres
= IWebBrowser2_put_MenuBar(wb
, (exvb
= 100));
1613 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1614 CHECK_CALLED(Invoke_ONMENUBAR
);
1616 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1617 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1618 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1622 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1623 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1624 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1626 SET_EXPECT(Invoke_ONADDRESSBAR
);
1627 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= VARIANT_FALSE
));
1628 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1629 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1631 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1632 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1633 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1635 SET_EXPECT(Invoke_ONADDRESSBAR
);
1636 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= 100));
1637 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1638 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1640 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1641 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1642 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1644 SET_EXPECT(Invoke_ONADDRESSBAR
);
1645 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= VARIANT_TRUE
));
1646 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1647 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1651 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1652 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1653 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1655 SET_EXPECT(Invoke_ONSTATUSBAR
);
1656 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= VARIANT_TRUE
));
1657 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1658 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1660 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1661 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1662 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1664 SET_EXPECT(Invoke_ONSTATUSBAR
);
1665 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= VARIANT_FALSE
));
1666 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1667 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1669 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1670 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1671 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1673 SET_EXPECT(Invoke_ONSTATUSBAR
);
1674 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= 100));
1675 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1676 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1678 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1679 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1680 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1684 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1685 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1688 SET_EXPECT(Invoke_ONTOOLBAR
);
1689 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= VARIANT_FALSE
));
1690 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1691 CHECK_CALLED(Invoke_ONTOOLBAR
);
1693 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1694 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1695 ok(i
== VARIANT_FALSE
, "b=%x\n", i
);
1697 SET_EXPECT(Invoke_ONTOOLBAR
);
1698 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= 100));
1699 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1700 CHECK_CALLED(Invoke_ONTOOLBAR
);
1702 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1703 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1706 SET_EXPECT(Invoke_ONTOOLBAR
);
1707 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= VARIANT_TRUE
));
1708 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1709 CHECK_CALLED(Invoke_ONTOOLBAR
);
1713 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1714 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1715 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1717 SET_EXPECT(Invoke_ONFULLSCREEN
);
1718 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= VARIANT_TRUE
));
1719 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1720 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1722 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1723 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1724 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1726 SET_EXPECT(Invoke_ONFULLSCREEN
);
1727 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= 100));
1728 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1729 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1731 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1732 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1733 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1735 SET_EXPECT(Invoke_ONFULLSCREEN
);
1736 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= VARIANT_FALSE
));
1737 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1738 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1742 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1743 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1744 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1746 SET_EXPECT(Invoke_ONTHEATERMODE
);
1747 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= VARIANT_TRUE
));
1748 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1749 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1751 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1752 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1753 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1755 SET_EXPECT(Invoke_ONTHEATERMODE
);
1756 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= 100));
1757 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1758 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1760 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1761 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1762 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1764 SET_EXPECT(Invoke_ONTHEATERMODE
);
1765 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= VARIANT_FALSE
));
1766 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1767 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1772 hres
= IWebBrowser2_get_Resizable(wb
, &b
);
1773 ok(hres
== E_NOTIMPL
, "get_Resizable failed: %08x\n", hres
);
1774 ok(b
== 0x100, "b=%x\n", b
);
1776 SET_EXPECT(Invoke_WINDOWSETRESIZABLE
);
1777 hres
= IWebBrowser2_put_Resizable(wb
, (exvb
= VARIANT_TRUE
));
1778 ok(hres
== S_OK
|| broken(hres
== E_NOTIMPL
), "put_Resizable failed: %08x\n", hres
);
1779 CHECK_CALLED_BROKEN(Invoke_WINDOWSETRESIZABLE
);
1781 SET_EXPECT(Invoke_WINDOWSETRESIZABLE
);
1782 hres
= IWebBrowser2_put_Resizable(wb
, (exvb
= VARIANT_FALSE
));
1783 ok(hres
== S_OK
|| broken(hres
== E_NOTIMPL
), "put_Resizable failed: %08x\n", hres
);
1784 CHECK_CALLED_BROKEN(Invoke_WINDOWSETRESIZABLE
);
1786 hres
= IWebBrowser2_get_Resizable(wb
, &b
);
1787 ok(hres
== E_NOTIMPL
, "get_Resizable failed: %08x\n", hres
);
1788 ok(b
== 0x100, "b=%x\n", b
);
1793 hres
= IWebBrowser2_get_Application(wb
, &disp
);
1794 ok(hres
== S_OK
, "get_Application failed: %08x\n", hres
);
1795 ok(disp
== (void*)wb
, "disp=%p, expected %p\n", disp
, wb
);
1797 IDispatch_Release(disp
);
1799 hres
= IWebBrowser2_get_Application(wb
, NULL
);
1800 ok(hres
== E_POINTER
, "get_Application failed: %08x, expected E_POINTER\n", hres
);
1804 hres
= IWebBrowser2_Quit(wb
);
1805 ok(hres
== E_FAIL
, "Quit failed: %08x, expected E_FAIL\n", hres
);
1807 IWebBrowser2_Release(wb
);
1810 static void test_Silent(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1816 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1817 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1818 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1820 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1821 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1824 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1825 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1826 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1828 hres
= IWebBrowser2_put_Silent(wb
, 100);
1829 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1832 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1833 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1834 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1836 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_FALSE
);
1837 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1840 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1841 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1842 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1845 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1846 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1848 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1851 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_SILENT
);
1852 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1855 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1858 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1859 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1860 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1863 static void test_Offline(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1869 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1870 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1871 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1873 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1874 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1877 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1878 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1879 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1881 hres
= IWebBrowser2_put_Offline(wb
, 100);
1882 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1885 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1886 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1887 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1889 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_FALSE
);
1890 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1893 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1894 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1895 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1898 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1899 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1901 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1904 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
);
1905 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1908 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1911 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1912 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1913 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1916 static void test_ambient_unknown(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1920 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1921 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1922 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
1923 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
1924 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
1925 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
1927 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_UNKNOWN
);
1928 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1930 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1931 CHECK_EXPECT(Invoke_AMBIENT_SILENT
);
1932 CHECK_EXPECT(Invoke_AMBIENT_USERMODE
);
1933 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL
);
1934 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
1935 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
1937 CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1938 CLEAR_CALLED(Invoke_AMBIENT_SILENT
);
1939 CLEAR_CALLED(Invoke_AMBIENT_USERMODE
);
1940 CLEAR_CALLED(Invoke_AMBIENT_DLCONTROL
);
1941 CLEAR_CALLED(Invoke_AMBIENT_USERAGENT
);
1942 CLEAR_CALLED(Invoke_AMBIENT_PALETTE
);
1945 static void test_wb_funcs(IUnknown
*unk
, BOOL is_clientsite
)
1948 IOleControl
*control
;
1951 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
1952 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
1954 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1955 ok(hres
== S_OK
, "Could not get IOleControl interface: %08x\n", hres
);
1957 test_Silent(wb
, control
, is_clientsite
);
1958 test_Offline(wb
, control
, is_clientsite
);
1959 test_ambient_unknown(wb
, control
, is_clientsite
);
1961 IWebBrowser_Release(wb
);
1962 IOleControl_Release(control
);
1965 static void test_GetControlInfo(IUnknown
*unk
)
1967 IOleControl
*control
;
1971 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1972 ok(hres
== S_OK
, "Could not get IOleControl: %08x\n", hres
);
1976 hres
= IOleControl_GetControlInfo(control
, &info
);
1977 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1978 hres
= IOleControl_GetControlInfo(control
, NULL
);
1979 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1981 IOleControl_Release(control
);
1984 static void test_Extent(IUnknown
*unk
)
1987 SIZE size
, expected
;
1993 /* default aspect ratio is 96dpi / 96dpi */
1995 dpi_x
= GetDeviceCaps(hdc
, LOGPIXELSX
);
1996 dpi_y
= GetDeviceCaps(hdc
, LOGPIXELSY
);
1998 if (dpi_x
!= 96 || dpi_y
!= 96)
1999 trace("dpi: %d / %d\n", dpi_y
, dpi_y
);
2001 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
2002 ok(hres
== S_OK
, "Could not get IOleObkect: %08x\n", hres
);
2006 size
.cx
= size
.cy
= 0xdeadbeef;
2007 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
2008 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2009 /* Default size is 50x20 pixels, in himetric units */
2010 expected
.cx
= MulDiv( 50, 2540, dpi_x
);
2011 expected
.cy
= MulDiv( 20, 2540, dpi_y
);
2012 ok(size
.cx
== expected
.cx
&& size
.cy
== expected
.cy
, "size = {%d %d} (expected %d %d)\n",
2013 size
.cx
, size
.cy
, expected
.cx
, expected
.cy
);
2017 hres
= IOleObject_SetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
2018 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
2020 size
.cx
= size
.cy
= 0xdeadbeef;
2021 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
2022 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2023 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
2025 size
.cx
= size
.cy
= 0xdeadbeef;
2026 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
2027 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2028 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
2032 hres
= IOleObject_SetExtent(oleobj
, 0, &size
);
2033 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
2035 size
.cx
= size
.cy
= 0xdeadbeef;
2036 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
2037 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2038 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
2040 size
.cx
= size
.cy
= 0xdeadbeef;
2041 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
2042 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2043 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
2047 hres
= IOleObject_SetExtent(oleobj
, 0xdeadbeef, &size
);
2048 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
2050 size
.cx
= size
.cy
= 0xdeadbeef;
2051 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
2052 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2053 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
2055 size
.cx
= size
.cy
= 0xdeadbeef;
2056 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
2057 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
2058 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
2060 IOleObject_Release(oleobj
);
2063 static void test_ConnectionPoint(IUnknown
*unk
, BOOL init
)
2065 IConnectionPointContainer
*container
;
2066 IConnectionPoint
*point
;
2069 static DWORD dw
= 100;
2071 hres
= IUnknown_QueryInterface(unk
, &IID_IConnectionPointContainer
, (void**)&container
);
2072 ok(hres
== S_OK
, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres
);
2076 hres
= IConnectionPointContainer_FindConnectionPoint(container
, &DIID_DWebBrowserEvents2
, &point
);
2077 IConnectionPointContainer_Release(container
);
2078 ok(hres
== S_OK
, "FindConnectionPoint failed: %08x\n", hres
);
2083 hres
= IConnectionPoint_Advise(point
, (IUnknown
*)&WebBrowserEvents2
, &dw
);
2084 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
2085 ok(dw
== 1, "dw=%d, expected 1\n", dw
);
2087 hres
= IConnectionPoint_Unadvise(point
, dw
);
2088 ok(hres
== S_OK
, "Unadvise failed: %08x\n", hres
);
2091 IConnectionPoint_Release(point
);
2094 static void test_Navigate2(IUnknown
*unk
)
2096 IWebBrowser2
*webbrowser
;
2100 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&webbrowser
);
2101 ok(hres
== S_OK
, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres
);
2105 test_LocationURL(unk
, emptyW
);
2107 V_VT(&url
) = VT_BSTR
;
2108 V_BSTR(&url
) = SysAllocString(about_blankW
);
2110 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
2111 SET_EXPECT(Invoke_PROPERTYCHANGE
);
2112 SET_EXPECT(Invoke_BEFORENAVIGATE2
);
2113 SET_EXPECT(Invoke_DOWNLOADBEGIN
);
2114 SET_EXPECT(Exec_SETDOWNLOADSTATE_1
);
2115 SET_EXPECT(EnableModeless_FALSE
);
2116 SET_EXPECT(Invoke_STATUSTEXTCHANGE
);
2117 SET_EXPECT(SetStatusText
);
2118 SET_EXPECT(GetHostInfo
);
2119 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
2120 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
2121 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
2122 SET_EXPECT(GetOptionKeyPath
);
2123 SET_EXPECT(GetOverridesKeyPath
);
2124 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
2125 SET_EXPECT(Exec_SETPROGRESSMAX
);
2126 SET_EXPECT(Exec_SETPROGRESSPOS
);
2127 SET_EXPECT(Invoke_SETSECURELOCKICON
);
2128 SET_EXPECT(Invoke_FILEDOWNLOAD
);
2129 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
2130 SET_EXPECT(Invoke_COMMANDSTATECHANGE
);
2131 SET_EXPECT(EnableModeless_TRUE
);
2133 hres
= IWebBrowser2_Navigate2(webbrowser
, &url
, NULL
, NULL
, NULL
, NULL
);
2134 ok(hres
== S_OK
, "Navigate2 failed: %08x\n", hres
);
2136 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
2137 todo_wine
CHECK_CALLED(Invoke_PROPERTYCHANGE
);
2138 CHECK_CALLED(Invoke_BEFORENAVIGATE2
);
2139 todo_wine
CHECK_CALLED(Invoke_DOWNLOADBEGIN
);
2140 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_1
);
2141 CHECK_CALLED(EnableModeless_FALSE
);
2142 CHECK_CALLED(Invoke_STATUSTEXTCHANGE
);
2143 CHECK_CALLED(SetStatusText
);
2144 CHECK_CALLED(GetHostInfo
);
2145 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
2146 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
2147 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
2148 CHECK_CALLED(GetOptionKeyPath
);
2149 CHECK_CALLED_BROKEN(GetOverridesKeyPath
);
2150 todo_wine
CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
2151 todo_wine
CHECK_CALLED(Exec_SETPROGRESSMAX
);
2152 todo_wine
CHECK_CALLED(Exec_SETPROGRESSPOS
);
2153 todo_wine
CHECK_CALLED_BROKEN(Invoke_SETSECURELOCKICON
);
2154 todo_wine
CHECK_CALLED_BROKEN(Invoke_FILEDOWNLOAD
);
2155 todo_wine
CHECK_CALLED(Invoke_COMMANDSTATECHANGE
);
2156 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
2157 CHECK_CALLED(EnableModeless_TRUE
);
2160 IWebBrowser2_Release(webbrowser
);
2163 static void test_download(void)
2167 is_downloading
= TRUE
;
2169 SET_EXPECT(Exec_SETPROGRESSMAX
);
2170 SET_EXPECT(Exec_SETPROGRESSPOS
);
2171 SET_EXPECT(Exec_SETDOWNLOADSTATE_1
);
2172 SET_EXPECT(DocHost_EnableModeless_FALSE
);
2173 SET_EXPECT(DocHost_EnableModeless_TRUE
);
2174 SET_EXPECT(Invoke_SETSECURELOCKICON
);
2175 SET_EXPECT(Invoke_282
);
2176 SET_EXPECT(EnableModeless_FALSE
);
2177 SET_EXPECT(Invoke_COMMANDSTATECHANGE
);
2178 SET_EXPECT(Invoke_STATUSTEXTCHANGE
);
2179 SET_EXPECT(SetStatusText
);
2180 SET_EXPECT(EnableModeless_TRUE
);
2181 SET_EXPECT(QueryStatus_STOP
);
2182 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
2183 SET_EXPECT(Invoke_TITLECHANGE
);
2184 SET_EXPECT(Invoke_NAVIGATECOMPLETE2
);
2185 SET_EXPECT(GetDropTarget
);
2186 SET_EXPECT(Invoke_PROGRESSCHANGE
);
2187 SET_EXPECT(Invoke_DOCUMENTCOMPLETE
);
2189 while(!called_Invoke_DOCUMENTCOMPLETE
&& GetMessage(&msg
, NULL
, 0, 0)) {
2190 TranslateMessage(&msg
);
2191 DispatchMessage(&msg
);
2194 todo_wine
CHECK_CALLED(Exec_SETPROGRESSMAX
);
2195 todo_wine
CHECK_CALLED(Exec_SETPROGRESSPOS
);
2196 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_1
);
2197 CLEAR_CALLED(DocHost_EnableModeless_FALSE
); /* IE 7 */
2198 CLEAR_CALLED(DocHost_EnableModeless_TRUE
); /* IE 7 */
2199 todo_wine
CHECK_CALLED(Invoke_SETSECURELOCKICON
);
2200 CLEAR_CALLED(Invoke_282
); /* IE 7 */
2201 todo_wine
CHECK_CALLED(EnableModeless_FALSE
);
2202 todo_wine
CHECK_CALLED(Invoke_COMMANDSTATECHANGE
);
2203 todo_wine
CHECK_CALLED(Invoke_STATUSTEXTCHANGE
);
2204 todo_wine
CHECK_CALLED(SetStatusText
);
2205 todo_wine
CHECK_CALLED(EnableModeless_TRUE
);
2206 todo_wine
CHECK_CALLED(QueryStatus_STOP
);
2207 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
2208 todo_wine
CHECK_CALLED(Invoke_TITLECHANGE
);
2209 CHECK_CALLED(Invoke_NAVIGATECOMPLETE2
);
2210 todo_wine
CHECK_CALLED(GetDropTarget
);
2211 todo_wine
CHECK_CALLED(Invoke_PROGRESSCHANGE
);
2212 CHECK_CALLED(Invoke_DOCUMENTCOMPLETE
);
2215 static void test_olecmd(IUnknown
*unk
, BOOL loaded
)
2217 IOleCommandTarget
*cmdtrg
;
2221 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
2222 ok(hres
== S_OK
, "Could not get IOleCommandTarget iface: %08x\n", hres
);
2226 cmds
[0].cmdID
= OLECMDID_SPELL
;
2227 cmds
[0].cmdf
= 0xdeadbeef;
2228 cmds
[1].cmdID
= OLECMDID_REFRESH
;
2229 cmds
[1].cmdf
= 0xdeadbeef;
2230 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 2, cmds
, NULL
);
2232 ok(hres
== S_OK
, "QueryStatus failed: %08x\n", hres
);
2233 ok(cmds
[0].cmdf
== OLECMDF_SUPPORTED
, "OLECMDID_SPELL cmdf = %x\n", cmds
[0].cmdf
);
2234 ok(cmds
[1].cmdf
== (OLECMDF_ENABLED
|OLECMDF_SUPPORTED
),
2235 "OLECMDID_REFRESH cmdf = %x\n", cmds
[1].cmdf
);
2237 ok(hres
== 0x80040104, "QueryStatus failed: %08x\n", hres
);
2238 ok(cmds
[0].cmdf
== 0xdeadbeef, "OLECMDID_SPELL cmdf = %x\n", cmds
[0].cmdf
);
2239 ok(cmds
[1].cmdf
== 0xdeadbeef, "OLECMDID_REFRESH cmdf = %x\n", cmds
[0].cmdf
);
2242 IOleCommandTarget_Release(cmdtrg
);
2245 static void test_IServiceProvider(IUnknown
*unk
)
2247 IServiceProvider
*servprov
= (void*)0xdeadbeef;
2249 IUnknown
*ret
= NULL
;
2250 static const IID IID_IBrowserService2
=
2251 {0x68BD21CC,0x438B,0x11d2,{0xA5,0x60,0x00,0xA0,0xC,0x2D,0xBF,0xE8}};
2253 hres
= IUnknown_QueryInterface(unk
, &IID_IServiceProvider
, (void**)&servprov
);
2254 ok(hres
== S_OK
, "QueryInterface returned %08x, expected S_OK\n", hres
);
2258 hres
= IServiceProvider_QueryService(servprov
, &SID_STopLevelBrowser
, &IID_IBrowserService2
, (LPVOID
*)&ret
);
2259 ok(hres
== E_FAIL
, "QueryService returned %08x, expected E_FAIL\n", hres
);
2260 ok(ret
== NULL
, "ret returned %p, expected NULL\n", ret
);
2263 IUnknown_Release(ret
);
2266 IServiceProvider_Release(servprov
);
2269 static void test_QueryInterface(IUnknown
*unk
)
2271 IQuickActivate
*qa
= (IQuickActivate
*)0xdeadbeef;
2272 IRunnableObject
*runnable
= (IRunnableObject
*)0xdeadbeef;
2273 IPerPropertyBrowsing
*propbrowse
= (void*)0xdeadbeef;
2274 IOleInPlaceSite
*inplace
= (void*)0xdeadbeef;
2275 IOleCache
*cache
= (void*)0xdeadbeef;
2276 IObjectWithSite
*site
= (void*)0xdeadbeef;
2277 IViewObjectEx
*viewex
= (void*)0xdeadbeef;
2280 hres
= IUnknown_QueryInterface(unk
, &IID_IQuickActivate
, (void**)&qa
);
2281 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2282 ok(qa
== NULL
, "qa=%p, expected NULL\n", qa
);
2284 hres
= IUnknown_QueryInterface(unk
, &IID_IRunnableObject
, (void**)&runnable
);
2285 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2286 ok(runnable
== NULL
, "runnable=%p, expected NULL\n", runnable
);
2288 hres
= IUnknown_QueryInterface(unk
, &IID_IPerPropertyBrowsing
, (void**)&propbrowse
);
2289 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2290 ok(propbrowse
== NULL
, "propbrowse=%p, expected NULL\n", propbrowse
);
2292 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCache
, (void**)&cache
);
2293 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2294 ok(cache
== NULL
, "cache=%p, expected NULL\n", cache
);
2296 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceSite
, (void**)&inplace
);
2297 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2298 ok(inplace
== NULL
, "inplace=%p, expected NULL\n", inplace
);
2300 hres
= IUnknown_QueryInterface(unk
, &IID_IObjectWithSite
, (void**)&site
);
2301 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2302 ok(site
== NULL
, "site=%p, expected NULL\n", site
);
2304 hres
= IUnknown_QueryInterface(unk
, &IID_IViewObjectEx
, (void**)&viewex
);
2305 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
2306 ok(viewex
== NULL
, "viewex=%p, expected NULL\n", viewex
);
2310 static void test_WebBrowser(BOOL do_download
)
2312 IUnknown
*unk
= NULL
;
2316 hres
= CoCreateInstance(&CLSID_WebBrowser
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
2317 &IID_IUnknown
, (void**)&unk
);
2318 ok(hres
== S_OK
, "CoCreateInterface failed: %08x\n", hres
);
2322 is_downloading
= FALSE
;
2324 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
2325 ok(hres
== S_OK
, "Could not get IWebBrowser2 iface: %08x\n", hres
);
2327 test_QueryInterface(unk
);
2328 test_ClassInfo(unk
);
2329 test_LocationURL(unk
, emptyW
);
2330 test_ConnectionPoint(unk
, TRUE
);
2331 test_ClientSite(unk
, &ClientSite
);
2333 test_wb_funcs(unk
, TRUE
);
2335 test_olecmd(unk
, FALSE
);
2336 test_Navigate2(unk
);
2340 test_olecmd(unk
, TRUE
);
2343 test_ClientSite(unk
, NULL
);
2345 test_GetControlInfo(unk
);
2346 test_wb_funcs(unk
, FALSE
);
2347 test_ConnectionPoint(unk
, FALSE
);
2348 test_IServiceProvider(unk
);
2350 IWebBrowser2_Release(wb
);
2351 ref
= IUnknown_Release(unk
);
2352 ok(ref
== 0, "ref=%d, expected 0\n", ref
);
2355 static void gecko_installer_workaround(BOOL disable
)
2360 static BOOL has_url
= FALSE
;
2361 static char url
[2048];
2363 if(!disable
&& !has_url
)
2366 res
= RegOpenKey(HKEY_CURRENT_USER
, "Software\\Wine\\MSHTML", &hkey
);
2367 if(res
!= ERROR_SUCCESS
)
2371 DWORD type
, size
= sizeof(url
);
2373 res
= RegQueryValueEx(hkey
, "GeckoUrl", NULL
, &type
, (PVOID
)url
, &size
);
2374 if(res
== ERROR_SUCCESS
&& type
== REG_SZ
)
2377 RegDeleteValue(hkey
, "GeckoUrl");
2379 RegSetValueEx(hkey
, "GeckoUrl", 0, REG_SZ
, (PVOID
)url
, lstrlenA(url
)+1);
2385 START_TEST(webbrowser
)
2387 gecko_installer_workaround(TRUE
);
2389 container_hwnd
= create_container_window();
2391 OleInitialize(NULL
);
2393 trace("Testing WebBrowser (no download)...\n");
2394 test_WebBrowser(FALSE
);
2395 trace("Testing WebBrowser...\n");
2396 test_WebBrowser(TRUE
);
2400 gecko_installer_workaround(FALSE
);