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>
38 #define DEFINE_EXPECT(func) \
39 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
41 #define SET_EXPECT(func) \
42 expect_ ## func = TRUE
44 #define CHECK_EXPECT2(func) \
46 ok(expect_ ##func, "unexpected call " #func "\n"); \
47 called_ ## func = TRUE; \
50 #define CHECK_EXPECT(func) \
52 CHECK_EXPECT2(func); \
53 expect_ ## func = FALSE; \
56 #define CHECK_CALLED(func) \
58 ok(called_ ## func, "expected " #func "\n"); \
59 expect_ ## func = called_ ## func = FALSE; \
62 DEFINE_EXPECT(GetContainer
);
63 DEFINE_EXPECT(Site_GetWindow
);
64 DEFINE_EXPECT(ShowObject
);
65 DEFINE_EXPECT(CanInPlaceActivate
);
66 DEFINE_EXPECT(OnInPlaceActivate
);
67 DEFINE_EXPECT(OnUIActivate
);
68 DEFINE_EXPECT(GetWindowContext
);
69 DEFINE_EXPECT(Frame_GetWindow
);
70 DEFINE_EXPECT(Frame_SetActiveObject
);
71 DEFINE_EXPECT(UIWindow_SetActiveObject
);
72 DEFINE_EXPECT(SetMenu
);
73 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE
);
74 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL
);
75 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT
);
76 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE
);
77 DEFINE_EXPECT(Invoke_AMBIENT_SILENT
);
78 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
79 DEFINE_EXPECT(Invoke_STATUSTEXTCHANGE
);
80 DEFINE_EXPECT(Invoke_PROPERTYCHANGE
);
81 DEFINE_EXPECT(Invoke_DOWNLOADBEGIN
);
82 DEFINE_EXPECT(Invoke_BEFORENAVIGATE2
);
83 DEFINE_EXPECT(Invoke_SETSECURELOCKICON
);
84 DEFINE_EXPECT(Invoke_FILEDOWNLOAD
);
85 DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE
);
86 DEFINE_EXPECT(Invoke_DOWNLOADCOMPLETE
);
87 DEFINE_EXPECT(Invoke_ONMENUBAR
);
88 DEFINE_EXPECT(Invoke_ONADDRESSBAR
);
89 DEFINE_EXPECT(Invoke_ONSTATUSBAR
);
90 DEFINE_EXPECT(Invoke_ONTOOLBAR
);
91 DEFINE_EXPECT(Invoke_ONFULLSCREEN
);
92 DEFINE_EXPECT(Invoke_ONTHEATERMODE
);
93 DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE
);
94 DEFINE_EXPECT(EnableModeless_TRUE
);
95 DEFINE_EXPECT(EnableModeless_FALSE
);
96 DEFINE_EXPECT(GetHostInfo
);
97 DEFINE_EXPECT(GetOptionKeyPath
);
98 DEFINE_EXPECT(GetOverridesKeyPath
);
99 DEFINE_EXPECT(SetStatusText
);
100 DEFINE_EXPECT(UpdateUI
);
101 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0
);
102 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1
);
103 DEFINE_EXPECT(Exec_SETPROGRESSMAX
);
104 DEFINE_EXPECT(Exec_SETPROGRESSPOS
);
105 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT
);
107 static const WCHAR wszItem
[] = {'i','t','e','m',0};
108 static const WCHAR about_blankW
[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
109 static const WCHAR emptyW
[] = {0};
111 static VARIANT_BOOL exvb
;
112 static IWebBrowser2
*wb
;
114 static HWND container_hwnd
, shell_embedding_hwnd
;
116 static const char *debugstr_w(LPCWSTR str
)
118 static char buf
[1024];
121 WideCharToMultiByte(CP_ACP
, 0, str
, -1, buf
, sizeof(buf
), NULL
, NULL
);
125 static const char *debugstr_guid(REFIID riid
)
129 sprintf(buf
, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
130 riid
->Data1
, riid
->Data2
, riid
->Data3
, riid
->Data4
[0],
131 riid
->Data4
[1], riid
->Data4
[2], riid
->Data4
[3], riid
->Data4
[4],
132 riid
->Data4
[5], riid
->Data4
[6], riid
->Data4
[7]);
137 #define test_LocationURL(a,b) _test_LocationURL(__LINE__,a,b)
138 static void _test_LocationURL(unsigned line
, IUnknown
*unk
, LPCWSTR exurl
)
141 BSTR url
= (void*)0xdeadbeef;
144 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
145 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
149 hres
= IWebBrowser2_get_LocationURL(wb
, &url
);
150 ok_(__FILE__
,line
) (hres
== (*exurl
? S_OK
: S_FALSE
), "get_LocationURL failed: %08x\n", hres
);
151 ok_(__FILE__
,line
) (!lstrcmpW(url
, exurl
), "unexpected URL: %s\n", debugstr_w(url
));
154 IWebBrowser2_Release(wb
);
157 static HRESULT
QueryInterface(REFIID
,void**);
159 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
160 REFIID riid
, void **ppv
)
162 ok(0, "unexpected call\n");
163 return E_NOINTERFACE
;
166 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
171 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
176 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
177 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
179 ok(!pguidCmdGroup
, "pguidCmdGroup != MULL\n");
180 ok(cCmds
== 1, "cCmds=%d, expected 1\n", cCmds
);
181 ok(!pCmdText
, "pCmdText != NULL\n");
183 switch(prgCmds
[0].cmdID
) {
184 case OLECMDID_SETPROGRESSTEXT
:
185 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT
);
186 prgCmds
[0].cmdf
= OLECMDF_ENABLED
;
189 ok(0, "unexpected command %d\n", prgCmds
[0].cmdID
);
195 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
196 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
200 case OLECMDID_SETPROGRESSMAX
:
201 CHECK_EXPECT(Exec_SETPROGRESSMAX
);
202 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
203 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
205 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
206 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
208 case OLECMDID_SETPROGRESSPOS
:
209 CHECK_EXPECT(Exec_SETPROGRESSPOS
);
210 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
211 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
213 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
214 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
216 case OLECMDID_SETDOWNLOADSTATE
:
217 ok(!nCmdexecopt
, "nCmdexecopts=%08x\n", nCmdexecopt
);
218 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
219 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
220 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
221 switch(V_I4(pvaIn
)) {
223 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0
);
226 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1
);
229 ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn
));
233 ok(0, "unexpected nsCmdID %d\n", nCmdID
);
235 }else if(IsEqualGUID(&CGID_Explorer
, pguidCmdGroup
)) {
238 return E_FAIL
; /* TODO */
240 return E_FAIL
; /* TODO */
242 ok(0, "unexpected nCmdID %d\n", nCmdID
);
245 ok(0, "unepected pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
251 static IOleCommandTargetVtbl OleCommandTargetVtbl
= {
252 OleCommandTarget_QueryInterface
,
253 OleCommandTarget_AddRef
,
254 OleCommandTarget_Release
,
255 OleCommandTarget_QueryStatus
,
256 OleCommandTarget_Exec
259 static IOleCommandTarget OleCommandTarget
= { &OleCommandTargetVtbl
};
261 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
263 if(IsEqualGUID(&IID_ITargetContainer
, riid
))
264 return E_NOINTERFACE
; /* TODO */
266 if(IsEqualGUID(&IID_IOleCommandTarget
, riid
)) {
267 *ppv
= &OleCommandTarget
;
271 ok(0, "unexpected call\n");
272 return E_NOINTERFACE
;
275 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
280 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
285 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
286 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
288 ok(0, "unexpected call\n");
292 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
293 IEnumUnknown
**ppenum
)
295 ok(0, "unexpected call\n");
299 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
301 ok(0, "unexpected call\n");
305 static const IOleContainerVtbl OleContainerVtbl
= {
306 OleContainer_QueryInterface
,
308 OleContainer_Release
,
309 OleContainer_ParseDisplayName
,
310 OleContainer_EnumObjects
,
311 OleContainer_LockContainer
314 static IOleContainer OleContainer
= { &OleContainerVtbl
};
316 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
318 return QueryInterface(riid
, ppv
);
321 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
326 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
331 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
333 ok(0, "unexpected call\n");
337 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
340 ok(0, "unexpected call\n");
344 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
345 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
347 ok(0, "unexpected call\n");
351 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
352 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
353 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
355 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
356 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
357 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
358 ok(V_VT(pVarResult
) == VT_EMPTY
, "V_VT(pVarResult)=%d\n", V_VT(pVarResult
));
359 ok(wFlags
== DISPATCH_PROPERTYGET
, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags
);
360 ok(pDispParams
->rgvarg
== NULL
, "pDispParams->rgvarg = %p\n", pDispParams
->rgvarg
);
361 ok(pDispParams
->rgdispidNamedArgs
== NULL
,
362 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams
->rgdispidNamedArgs
);
363 ok(pDispParams
->cArgs
== 0, "pDispParams->cArgs = %d\n", pDispParams
->cArgs
);
364 ok(pDispParams
->cNamedArgs
== 0, "pDispParams->cNamedArgs = %d\n", pDispParams
->cNamedArgs
);
366 switch(dispIdMember
) {
367 case DISPID_AMBIENT_USERMODE
:
368 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE
);
370 case DISPID_AMBIENT_DLCONTROL
:
371 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL
);
372 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
374 case DISPID_AMBIENT_USERAGENT
:
375 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
376 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
378 case DISPID_AMBIENT_PALETTE
:
379 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
380 ok(puArgErr
!= NULL
, "puArgErr=%p\n", puArgErr
);
382 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
:
383 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
384 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
385 V_VT(pVarResult
) = VT_BOOL
;
386 V_BOOL(pVarResult
) = VARIANT_FALSE
;
388 case DISPID_AMBIENT_SILENT
:
389 CHECK_EXPECT(Invoke_AMBIENT_SILENT
);
390 ok(puArgErr
== NULL
, "puArgErr=%p\n", puArgErr
);
391 V_VT(pVarResult
) = VT_BOOL
;
392 V_BOOL(pVarResult
) = VARIANT_FALSE
;
396 ok(0, "unexpected dispIdMember %d\n", dispIdMember
);
400 static IDispatchVtbl DispatchVtbl
= {
401 Dispatch_QueryInterface
,
404 Dispatch_GetTypeInfoCount
,
405 Dispatch_GetTypeInfo
,
406 Dispatch_GetIDsOfNames
,
410 static IDispatch Dispatch
= { &DispatchVtbl
};
412 static HRESULT WINAPI
WebBrowserEvents2_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
416 if(IsEqualGUID(&DIID_DWebBrowserEvents2
, riid
)) {
421 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
422 return E_NOINTERFACE
;
425 #define test_invoke_bool(p) _test_invoke_bool(__LINE__,p)
426 static void _test_invoke_bool(unsigned line
, const DISPPARAMS
*params
)
428 ok_(__FILE__
,line
) (params
->rgvarg
!= NULL
, "rgvarg == NULL\n");
429 ok_(__FILE__
,line
) (params
->cArgs
== 1, "cArgs=%d, expected 1\n", params
->cArgs
);
430 ok_(__FILE__
,line
) (V_VT(params
->rgvarg
) == VT_BOOL
, "V_VT(arg)=%d\n", V_VT(params
->rgvarg
));
431 ok_(__FILE__
,line
) (V_BOOL(params
->rgvarg
) == exvb
, "V_VT(arg)=%x, expected %x\n",
432 V_BOOL(params
->rgvarg
), exvb
);
435 static void test_OnBeforeNavigate(const VARIANT
*disp
, const VARIANT
*url
, const VARIANT
*flags
,
436 const VARIANT
*frame
, const VARIANT
*post_data
, const VARIANT
*headers
, const VARIANT
*cancel
)
438 ok(V_VT(disp
) == VT_DISPATCH
, "V_VT(disp)=%d, expected VT_DISPATCH\n", V_VT(disp
));
439 ok(V_DISPATCH(disp
) != NULL
, "V_DISPATCH(disp) == NULL\n");
440 ok(V_DISPATCH(disp
) == (IDispatch
*)wb
, "V_DISPATCH(disp)=%p, wb=%p\n", V_DISPATCH(disp
), wb
);
442 ok(V_VT(url
) == (VT_BYREF
|VT_VARIANT
), "V_VT(url)=%x, expected VT_BYREF|VT_VARIANT\n", V_VT(url
));
443 ok(V_VARIANTREF(url
) != NULL
, "V_VARIANTREF(url) == NULL)\n");
444 if(V_VARIANTREF(url
)) {
445 ok(V_VT(V_VARIANTREF(url
)) == VT_BSTR
, "V_VT(V_VARIANTREF(url))=%d, expected VT_BSTR\n",
446 V_VT(V_VARIANTREF(url
)));
447 ok(V_BSTR(V_VARIANTREF(url
)) != NULL
, "V_BSTR(V_VARIANTREF(url)) == NULL\n");
448 ok(!lstrcmpW(V_BSTR(V_VARIANTREF(url
)), about_blankW
), "unexpected url %s\n",
449 debugstr_w(V_BSTR(V_VARIANTREF(url
))));
452 ok(V_VT(flags
) == (VT_BYREF
|VT_VARIANT
), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
454 ok(V_VT(flags
) == (VT_BYREF
|VT_VARIANT
), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
456 ok(V_VARIANTREF(flags
) != NULL
, "V_VARIANTREF(flags) == NULL)\n");
457 if(V_VARIANTREF(flags
)) {
458 ok(V_VT(V_VARIANTREF(flags
)) == VT_I4
, "V_VT(V_VARIANTREF(flags))=%d, expected VT_I4\n",
459 V_VT(V_VARIANTREF(flags
)));
460 ok(V_I4(V_VARIANTREF(flags
)) == 0, "V_I4(V_VARIANTREF(flags)) = %d, expected 0\n",
461 V_I4(V_VARIANTREF(flags
)));
464 ok(V_VT(frame
) == (VT_BYREF
|VT_VARIANT
), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
466 ok(V_VT(frame
) == (VT_BYREF
|VT_VARIANT
), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
468 ok(V_VARIANTREF(frame
) != NULL
, "V_VARIANTREF(frame) == NULL)\n");
469 if(V_VARIANTREF(frame
)) {
470 ok(V_VT(V_VARIANTREF(frame
)) == VT_BSTR
, "V_VT(V_VARIANTREF(frame))=%d, expected VT_BSTR\n",
471 V_VT(V_VARIANTREF(frame
)));
472 ok(V_BSTR(V_VARIANTREF(frame
)) == NULL
, "V_BSTR(V_VARIANTREF(frame)) = %p, expected NULL\n",
473 V_BSTR(V_VARIANTREF(frame
)));
476 ok(V_VT(post_data
) == (VT_BYREF
|VT_VARIANT
), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
478 ok(V_VT(post_data
) == (VT_BYREF
|VT_VARIANT
), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
480 ok(V_VARIANTREF(post_data
) != NULL
, "V_VARIANTREF(post_data) == NULL)\n");
481 if(V_VARIANTREF(post_data
)) {
482 ok(V_VT(V_VARIANTREF(post_data
)) == (VT_VARIANT
|VT_BYREF
),
483 "V_VT(V_VARIANTREF(post_data))=%d, expected VT_VARIANT|VT_BYREF\n",
484 V_VT(V_VARIANTREF(post_data
)));
485 ok(V_VARIANTREF(V_VARIANTREF(post_data
)) != NULL
,
486 "V_VARIANTREF(V_VARIANTREF(post_data)) == NULL\n");
487 if(V_VARIANTREF(V_VARIANTREF(post_data
))) {
488 ok(V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))) == VT_EMPTY
,
489 "V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) = %d, expected VT_EMPTY\n",
490 V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))));
492 if(V_VT(V_VARIANTREF(V_VARIANTREF(post_data
))) == (VT_UI1
|VT_ARRAY
)) {
493 const SAFEARRAY
*sa
= V_ARRAY(V_VARIANTREF(V_VARIANTREF(post_data
)));
495 ok(sa
->cDims
== 1, "sa->cDims = %d, expected 1\n", sa
->cDims
);
496 ok(sa
->fFeatures
== 0, "sa->fFeatures = %d, expected 0\n", sa
->fFeatures
);
501 ok(V_VT(headers
) == (VT_BYREF
|VT_VARIANT
), "V_VT(headers)=%x, expected VT_BYREF|VT_VARIANT\n",
503 ok(V_VARIANTREF(headers
) != NULL
, "V_VARIANTREF(headers) == NULL)\n");
504 if(V_VARIANTREF(headers
)) {
505 ok(V_VT(V_VARIANTREF(headers
)) == VT_BSTR
, "V_VT(V_VARIANTREF(headers))=%d, expected VT_BSTR\n",
506 V_VT(V_VARIANTREF(headers
)));
507 ok(V_BSTR(V_VARIANTREF(headers
)) == NULL
, "V_BSTR(V_VARIANTREF(heders)) = %p, expected NULL\n",
508 V_BSTR(V_VARIANTREF(headers
)));
511 ok(V_VT(cancel
) == (VT_BYREF
|VT_BOOL
), "V_VT(cancel)=%x, expected VT_BYREF|VT_BOOL\n",
513 ok(V_BOOLREF(cancel
) != NULL
, "V_BOOLREF(pDispParams->rgvarg[0] == NULL)\n");
514 if(V_BOOLREF(cancel
))
515 ok(*V_BOOLREF(cancel
) == VARIANT_FALSE
, "*V_BOOLREF(calcel) = %x, expected VARIANT_FALSE\n",
519 static HRESULT WINAPI
WebBrowserEvents2_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
520 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
521 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
523 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
524 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
525 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
526 ok(pVarResult
== NULL
, "pVarResult=%p\n", pVarResult
);
527 ok(wFlags
== DISPATCH_METHOD
, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags
);
528 ok(pDispParams
->rgdispidNamedArgs
== NULL
,
529 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams
->rgdispidNamedArgs
);
530 ok(pDispParams
->cNamedArgs
== 0, "pDispParams->cNamedArgs = %d\n", pDispParams
->cNamedArgs
);
532 switch(dispIdMember
) {
533 case DISPID_STATUSTEXTCHANGE
:
534 CHECK_EXPECT2(Invoke_STATUSTEXTCHANGE
);
536 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
537 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
538 ok(V_VT(pDispParams
->rgvarg
) == VT_BSTR
, "V_VT(pDispParams->rgvarg)=%d, expected VT_BSTR\n",
539 V_VT(pDispParams
->rgvarg
));
540 /* TODO: Check text */
543 case DISPID_PROPERTYCHANGE
:
544 CHECK_EXPECT2(Invoke_PROPERTYCHANGE
);
546 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
547 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
548 /* TODO: Check args */
551 case DISPID_DOWNLOADBEGIN
:
552 CHECK_EXPECT(Invoke_DOWNLOADBEGIN
);
554 ok(pDispParams
->rgvarg
== NULL
, "rgvarg=%p, expected NULL\n", pDispParams
->rgvarg
);
555 ok(pDispParams
->cArgs
== 0, "cArgs=%d, expected 0\n", pDispParams
->cArgs
);
558 case DISPID_BEFORENAVIGATE2
:
559 CHECK_EXPECT(Invoke_BEFORENAVIGATE2
);
561 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
562 ok(pDispParams
->cArgs
== 7, "cArgs=%d, expected 7\n", pDispParams
->cArgs
);
563 test_OnBeforeNavigate(pDispParams
->rgvarg
+6, pDispParams
->rgvarg
+5, pDispParams
->rgvarg
+4,
564 pDispParams
->rgvarg
+3, pDispParams
->rgvarg
+2, pDispParams
->rgvarg
+1,
565 pDispParams
->rgvarg
);
568 case DISPID_SETSECURELOCKICON
:
569 CHECK_EXPECT(Invoke_SETSECURELOCKICON
);
571 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
572 ok(pDispParams
->cArgs
== 1, "cArgs=%d, expected 1\n", pDispParams
->cArgs
);
573 /* TODO: Check args */
576 case DISPID_FILEDOWNLOAD
:
577 CHECK_EXPECT(Invoke_FILEDOWNLOAD
);
579 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
580 ok(pDispParams
->cArgs
== 2, "cArgs=%d, expected 2\n", pDispParams
->cArgs
);
581 /* TODO: Check args */
584 case DISPID_COMMANDSTATECHANGE
:
585 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE
);
587 ok(pDispParams
->rgvarg
!= NULL
, "rgvarg == NULL\n");
588 ok(pDispParams
->cArgs
== 2, "cArgs=%d, expected 2\n", pDispParams
->cArgs
);
589 /* TODO: Check args */
592 case DISPID_DOWNLOADCOMPLETE
:
593 CHECK_EXPECT(Invoke_DOWNLOADCOMPLETE
);
595 ok(pDispParams
->rgvarg
== NULL
, "rgvarg=%p, expected NULL\n", pDispParams
->rgvarg
);
596 ok(pDispParams
->cArgs
== 0, "cArgs=%d, expected 0\n", pDispParams
->cArgs
);
599 case DISPID_ONMENUBAR
:
600 CHECK_EXPECT(Invoke_ONMENUBAR
);
601 test_invoke_bool(pDispParams
);
604 case DISPID_ONADDRESSBAR
:
605 CHECK_EXPECT(Invoke_ONADDRESSBAR
);
606 test_invoke_bool(pDispParams
);
609 case DISPID_ONSTATUSBAR
:
610 CHECK_EXPECT(Invoke_ONSTATUSBAR
);
611 test_invoke_bool(pDispParams
);
614 case DISPID_ONTOOLBAR
:
615 CHECK_EXPECT(Invoke_ONTOOLBAR
);
616 test_invoke_bool(pDispParams
);
619 case DISPID_ONFULLSCREEN
:
620 CHECK_EXPECT(Invoke_ONFULLSCREEN
);
621 test_invoke_bool(pDispParams
);
624 case DISPID_ONTHEATERMODE
:
625 CHECK_EXPECT(Invoke_ONTHEATERMODE
);
626 test_invoke_bool(pDispParams
);
629 case DISPID_WINDOWSETRESIZABLE
:
630 CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE
);
631 test_invoke_bool(pDispParams
);
635 ok(0, "unexpected dispIdMember %d\n", dispIdMember
);
641 static IDispatchVtbl WebBrowserEvents2Vtbl
= {
642 WebBrowserEvents2_QueryInterface
,
645 Dispatch_GetTypeInfoCount
,
646 Dispatch_GetTypeInfo
,
647 Dispatch_GetIDsOfNames
,
648 WebBrowserEvents2_Invoke
651 static IDispatch WebBrowserEvents2
= { &WebBrowserEvents2Vtbl
};
653 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
655 return QueryInterface(riid
, ppv
);
658 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
663 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
668 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
670 ok(0, "unexpected call\n");
674 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAsign
, DWORD dwWhichMoniker
,
677 ok(0, "unexpected call\n");
681 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
683 CHECK_EXPECT(GetContainer
);
685 ok(ppContainer
!= NULL
, "ppContainer == NULL\n");
687 *ppContainer
= &OleContainer
;
692 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
694 CHECK_EXPECT(ShowObject
);
698 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
700 ok(0, "unexpected call\n");
704 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
706 ok(0, "unexpected call\n");
710 static const IOleClientSiteVtbl ClientSiteVtbl
= {
711 ClientSite_QueryInterface
,
714 ClientSite_SaveObject
,
715 ClientSite_GetMoniker
,
716 ClientSite_GetContainer
,
717 ClientSite_ShowObject
,
718 ClientSite_OnShowWindow
,
719 ClientSite_RequestNewObjectLayout
722 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
724 static HRESULT WINAPI
InPlaceUIWindow_QueryInterface(IOleInPlaceFrame
*iface
,
725 REFIID riid
, void **ppv
)
727 ok(0, "unexpected call\n");
728 return E_NOINTERFACE
;
731 static ULONG WINAPI
InPlaceUIWindow_AddRef(IOleInPlaceFrame
*iface
)
736 static ULONG WINAPI
InPlaceUIWindow_Release(IOleInPlaceFrame
*iface
)
741 static HRESULT WINAPI
InPlaceUIWindow_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
743 ok(0, "unexpected call\n");
747 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
749 CHECK_EXPECT(Frame_GetWindow
);
750 ok(phwnd
!= NULL
, "phwnd == NULL\n");
752 *phwnd
= container_hwnd
;
756 static HRESULT WINAPI
InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
758 ok(0, "unexpected call\n");
762 static HRESULT WINAPI
InPlaceUIWindow_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
764 ok(0, "unexpected call\n");
768 static HRESULT WINAPI
InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame
*iface
,
769 LPCBORDERWIDTHS pborderwidths
)
771 ok(0, "unexpected call\n");
775 static HRESULT WINAPI
InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame
*iface
,
776 LPCBORDERWIDTHS pborderwidths
)
778 ok(0, "unexpected call\n");
782 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
783 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
785 CHECK_EXPECT(UIWindow_SetActiveObject
);
786 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
787 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
791 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
792 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
794 CHECK_EXPECT(Frame_SetActiveObject
);
795 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
796 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
800 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
801 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
803 ok(0, "unexpected call\n");
807 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
808 HOLEMENU holemenu
, HWND hwndActiveObject
)
810 CHECK_EXPECT(SetMenu
);
811 ok(hmenuShared
== NULL
, "hmenuShared=%p\n", hmenuShared
);
812 ok(holemenu
== NULL
, "holemenu=%p\n", holemenu
);
813 ok(hwndActiveObject
== shell_embedding_hwnd
, "hwndActiveObject=%p, expected %p\n",
814 hwndActiveObject
, shell_embedding_hwnd
);
818 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
820 ok(0, "unexpected call\n");
824 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
826 CHECK_EXPECT2(SetStatusText
);
827 /* FIXME: Check pszStatusText */
831 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
834 CHECK_EXPECT(EnableModeless_TRUE
);
836 CHECK_EXPECT(EnableModeless_FALSE
);
840 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
842 ok(0, "unexpected call\n");
846 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
847 InPlaceUIWindow_QueryInterface
,
848 InPlaceUIWindow_AddRef
,
849 InPlaceUIWindow_Release
,
850 InPlaceUIWindow_GetWindow
,
851 InPlaceUIWindow_ContextSensitiveHelp
,
852 InPlaceUIWindow_GetBorder
,
853 InPlaceUIWindow_RequestBorderSpace
,
854 InPlaceUIWindow_SetBorderSpace
,
855 InPlaceUIWindow_SetActiveObject
,
858 static IOleInPlaceUIWindow InPlaceUIWindow
= { (IOleInPlaceUIWindowVtbl
*)&InPlaceUIWindowVtbl
};
860 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
861 InPlaceUIWindow_QueryInterface
,
862 InPlaceUIWindow_AddRef
,
863 InPlaceUIWindow_Release
,
864 InPlaceFrame_GetWindow
,
865 InPlaceUIWindow_ContextSensitiveHelp
,
866 InPlaceUIWindow_GetBorder
,
867 InPlaceUIWindow_RequestBorderSpace
,
868 InPlaceUIWindow_SetBorderSpace
,
869 InPlaceFrame_SetActiveObject
,
870 InPlaceFrame_InsertMenus
,
871 InPlaceFrame_SetMenu
,
872 InPlaceFrame_RemoveMenus
,
873 InPlaceFrame_SetStatusText
,
874 InPlaceFrame_EnableModeless
,
875 InPlaceFrame_TranslateAccelerator
878 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
880 static HRESULT WINAPI
InPlaceSite_QueryInterface(IOleInPlaceSiteEx
*iface
, REFIID riid
, void **ppv
)
882 return QueryInterface(riid
, ppv
);
885 static ULONG WINAPI
InPlaceSite_AddRef(IOleInPlaceSiteEx
*iface
)
890 static ULONG WINAPI
InPlaceSite_Release(IOleInPlaceSiteEx
*iface
)
895 static HRESULT WINAPI
InPlaceSite_GetWindow(IOleInPlaceSiteEx
*iface
, HWND
*phwnd
)
897 CHECK_EXPECT(Site_GetWindow
);
898 ok(phwnd
!= NULL
, "phwnd == NULL\n");
900 *phwnd
= container_hwnd
;
904 static HRESULT WINAPI
InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx
*iface
, BOOL fEnterMode
)
906 ok(0, "unexpected call\n");
910 static HRESULT WINAPI
InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx
*iface
)
912 CHECK_EXPECT(CanInPlaceActivate
);
916 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx
*iface
)
918 CHECK_EXPECT(OnInPlaceActivate
);
922 static HRESULT WINAPI
InPlaceSite_OnUIActivate(IOleInPlaceSiteEx
*iface
)
924 CHECK_EXPECT(OnUIActivate
);
928 static HRESULT WINAPI
InPlaceSite_GetWindowContext(IOleInPlaceSiteEx
*iface
,
929 IOleInPlaceFrame
**ppFrame
, IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
930 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
932 static const RECT pos_rect
= {2,1,1002,901};
933 static const RECT clip_rect
= {10,10,990,890};
935 CHECK_EXPECT(GetWindowContext
);
937 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
939 *ppFrame
= &InPlaceFrame
;
941 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
943 *ppDoc
= &InPlaceUIWindow
;
945 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
947 memcpy(lprcPosRect
, &pos_rect
, sizeof(RECT
));
949 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
951 memcpy(lprcClipRect
, &clip_rect
, sizeof(RECT
));
953 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
955 lpFrameInfo
->cb
= sizeof(*lpFrameInfo
);
956 lpFrameInfo
->fMDIApp
= FALSE
;
957 lpFrameInfo
->hwndFrame
= container_hwnd
;
958 lpFrameInfo
->haccel
= NULL
;
959 lpFrameInfo
->cAccelEntries
= 0;
965 static HRESULT WINAPI
InPlaceSite_Scroll(IOleInPlaceSiteEx
*iface
, SIZE scrollExtant
)
967 ok(0, "unexpected call\n");
971 static HRESULT WINAPI
InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx
*iface
, BOOL fUndoable
)
973 ok(0, "unexpected call\n");
977 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx
*iface
)
979 ok(0, "unexpected call\n");
983 static HRESULT WINAPI
InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx
*iface
)
985 ok(0, "unexpected call\n");
989 static HRESULT WINAPI
InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx
*iface
)
991 ok(0, "unexpected call\n");
995 static HRESULT WINAPI
InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx
*iface
, LPCRECT lprcPosRect
)
997 ok(0, "unexpected call\n");
1001 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx
*iface
,
1002 BOOL
*pNoRedraw
, DWORD dwFlags
)
1004 ok(0, "unexpected call\n");
1008 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx
*iface
,
1011 ok(0, "unexpected call\n");
1015 static HRESULT WINAPI
InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx
*iface
)
1017 ok(0, "unexpected call\n");
1021 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl
= {
1022 InPlaceSite_QueryInterface
,
1024 InPlaceSite_Release
,
1025 InPlaceSite_GetWindow
,
1026 InPlaceSite_ContextSensitiveHelp
,
1027 InPlaceSite_CanInPlaceActivate
,
1028 InPlaceSite_OnInPlaceActivate
,
1029 InPlaceSite_OnUIActivate
,
1030 InPlaceSite_GetWindowContext
,
1032 InPlaceSite_OnUIDeactivate
,
1033 InPlaceSite_OnInPlaceDeactivate
,
1034 InPlaceSite_DiscardUndoState
,
1035 InPlaceSite_DeactivateAndUndo
,
1036 InPlaceSite_OnPosRectChange
,
1037 InPlaceSite_OnInPlaceActivateEx
,
1038 InPlaceSite_OnInPlaceDeactivateEx
,
1039 InPlaceSite_RequestUIActivate
1042 static IOleInPlaceSiteEx InPlaceSite
= { &InPlaceSiteExVtbl
};
1044 static HRESULT WINAPI
DocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
1046 return QueryInterface(riid
, ppv
);
1049 static ULONG WINAPI
DocHostUIHandler_AddRef(IDocHostUIHandler2
*iface
)
1054 static ULONG WINAPI
DocHostUIHandler_Release(IDocHostUIHandler2
*iface
)
1059 static HRESULT WINAPI
DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2
*iface
, DWORD dwID
, POINT
*ppt
,
1060 IUnknown
*pcmdtReserved
, IDispatch
*pdicpReserved
)
1062 ok(0, "unexpected call %d %p %p %p\n", dwID
, ppt
, pcmdtReserved
, pdicpReserved
);
1066 static HRESULT WINAPI
DocHostUIHandler_GetHostInfo(IDocHostUIHandler2
*iface
, DOCHOSTUIINFO
*pInfo
)
1068 CHECK_EXPECT(GetHostInfo
);
1069 ok(pInfo
!= NULL
, "pInfo=NULL\n");
1071 ok(pInfo
->cbSize
== sizeof(DOCHOSTUIINFO
), "pInfo->cbSize=%u\n", pInfo
->cbSize
);
1072 ok(!pInfo
->dwFlags
, "pInfo->dwFlags=%08x, expected 0\n", pInfo
->dwFlags
);
1073 ok(!pInfo
->dwDoubleClick
, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo
->dwDoubleClick
);
1074 ok(!pInfo
->pchHostCss
, "pInfo->pchHostCss=%p, expected NULL\n", pInfo
->pchHostCss
);
1075 ok(!pInfo
->pchHostNS
, "pInfo->pchhostNS=%p, expected NULL\n", pInfo
->pchHostNS
);
1080 static HRESULT WINAPI
DocHostUIHandler_ShowUI(IDocHostUIHandler2
*iface
, DWORD dwID
,
1081 IOleInPlaceActiveObject
*pActiveObject
, IOleCommandTarget
*pCommandTarget
,
1082 IOleInPlaceFrame
*pFrame
, IOleInPlaceUIWindow
*pDoc
)
1084 ok(0, "unexpected call\n");
1088 static HRESULT WINAPI
DocHostUIHandler_HideUI(IDocHostUIHandler2
*iface
)
1090 ok(0, "unexpected call\n");
1094 static HRESULT WINAPI
DocHostUIHandler_UpdateUI(IDocHostUIHandler2
*iface
)
1096 CHECK_EXPECT(UpdateUI
);
1100 static HRESULT WINAPI
DocHostUIHandler_EnableModeless(IDocHostUIHandler2
*iface
, BOOL fEnable
)
1102 ok(0, "unexpected call\n");
1106 static HRESULT WINAPI
DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1108 ok(0, "unexpected call\n");
1112 static HRESULT WINAPI
DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1114 ok(0, "unexpected call\n");
1118 static HRESULT WINAPI
DocHostUIHandler_ResizeBorder(IDocHostUIHandler2
*iface
, LPCRECT prcBorder
,
1119 IOleInPlaceUIWindow
*pUIWindow
, BOOL fRameWindow
)
1121 ok(0, "unexpected call\n");
1125 static HRESULT WINAPI
DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2
*iface
, LPMSG lpMsg
,
1126 const GUID
*pguidCmdGroup
, DWORD nCmdID
)
1128 ok(0, "unexpected call\n");
1132 static HRESULT WINAPI
DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2
*iface
,
1133 LPOLESTR
*pchKey
, DWORD dw
)
1135 CHECK_EXPECT(GetOptionKeyPath
);
1136 ok(pchKey
!= NULL
, "pchKey==NULL\n");
1138 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
1139 ok(!dw
, "dw=%x\n", dw
);
1143 static HRESULT WINAPI
DocHostUIHandler_GetDropTarget(IDocHostUIHandler2
*iface
,
1144 IDropTarget
*pDropTarget
, IDropTarget
**ppDropTarget
)
1146 ok(0, "unexpected call\n");
1150 static HRESULT WINAPI
DocHostUIHandler_GetExternal(IDocHostUIHandler2
*iface
, IDispatch
**ppDispatch
)
1152 ok(0, "unexpected call\n");
1156 static HRESULT WINAPI
DocHostUIHandler_TranslateUrl(IDocHostUIHandler2
*iface
, DWORD dwTranslate
,
1157 OLECHAR
*pchURLIn
, OLECHAR
**ppchURLOut
)
1159 ok(0, "unexpected call\n");
1163 static HRESULT WINAPI
DocHostUIHandler_FilterDataObject(IDocHostUIHandler2
*iface
, IDataObject
*pDO
,
1164 IDataObject
**ppPORet
)
1166 ok(0, "unexpected call\n");
1170 static HRESULT WINAPI
DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2
*iface
,
1171 LPOLESTR
*pchKey
, DWORD dw
)
1173 CHECK_EXPECT(GetOverridesKeyPath
);
1174 ok(pchKey
!= NULL
, "pchKey==NULL\n");
1176 ok(*pchKey
== NULL
, "*pchKey=%p\n", *pchKey
);
1177 ok(!dw
, "dw=%x\n", dw
);
1181 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl
= {
1182 DocHostUIHandler_QueryInterface
,
1183 DocHostUIHandler_AddRef
,
1184 DocHostUIHandler_Release
,
1185 DocHostUIHandler_ShowContextMenu
,
1186 DocHostUIHandler_GetHostInfo
,
1187 DocHostUIHandler_ShowUI
,
1188 DocHostUIHandler_HideUI
,
1189 DocHostUIHandler_UpdateUI
,
1190 DocHostUIHandler_EnableModeless
,
1191 DocHostUIHandler_OnDocWindowActivate
,
1192 DocHostUIHandler_OnFrameWindowActivate
,
1193 DocHostUIHandler_ResizeBorder
,
1194 DocHostUIHandler_TranslateAccelerator
,
1195 DocHostUIHandler_GetOptionKeyPath
,
1196 DocHostUIHandler_GetDropTarget
,
1197 DocHostUIHandler_GetExternal
,
1198 DocHostUIHandler_TranslateUrl
,
1199 DocHostUIHandler_FilterDataObject
,
1200 DocHostUIHandler_GetOverrideKeyPath
1203 static IDocHostUIHandler2 DocHostUIHandler
= { &DocHostUIHandlerVtbl
};
1205 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
1209 if(IsEqualGUID(&IID_IUnknown
, riid
)
1210 || IsEqualGUID(&IID_IOleClientSite
, riid
))
1212 else if(IsEqualGUID(&IID_IOleWindow
, riid
)
1213 || IsEqualGUID(&IID_IOleInPlaceSite
, riid
)
1214 || IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
))
1215 *ppv
= &InPlaceSite
;
1216 else if(IsEqualGUID(&IID_IDocHostUIHandler
, riid
)
1217 || IsEqualGUID(&IID_IDocHostUIHandler2
, riid
))
1218 *ppv
= &DocHostUIHandler
;
1219 else if(IsEqualGUID(&IID_IDispatch
, riid
))
1225 return E_NOINTERFACE
;
1228 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
1230 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
1233 static HWND
create_container_window(void)
1235 static const WCHAR wszWebBrowserContainer
[] =
1236 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
1237 static WNDCLASSEXW wndclass
= {
1238 sizeof(WNDCLASSEXW
),
1241 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
1242 wszWebBrowserContainer
,
1246 RegisterClassExW(&wndclass
);
1247 return CreateWindowW(wszWebBrowserContainer
, wszWebBrowserContainer
,
1248 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, CW_USEDEFAULT
,
1249 CW_USEDEFAULT
, NULL
, NULL
, NULL
, NULL
);
1252 static void test_DoVerb(IUnknown
*unk
)
1255 RECT rect
= {0,0,1000,1000};
1258 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1259 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
1263 SET_EXPECT(CanInPlaceActivate
);
1264 SET_EXPECT(Site_GetWindow
);
1265 SET_EXPECT(OnInPlaceActivate
);
1266 SET_EXPECT(GetWindowContext
);
1267 SET_EXPECT(ShowObject
);
1268 SET_EXPECT(GetContainer
);
1269 SET_EXPECT(Frame_GetWindow
);
1270 SET_EXPECT(OnUIActivate
);
1271 SET_EXPECT(Frame_SetActiveObject
);
1272 SET_EXPECT(UIWindow_SetActiveObject
);
1273 SET_EXPECT(SetMenu
);
1275 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
1276 0, (HWND
)0xdeadbeef, &rect
);
1277 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
1279 CHECK_CALLED(CanInPlaceActivate
);
1280 CHECK_CALLED(Site_GetWindow
);
1281 CHECK_CALLED(OnInPlaceActivate
);
1282 CHECK_CALLED(GetWindowContext
);
1283 CHECK_CALLED(ShowObject
);
1284 CHECK_CALLED(GetContainer
);
1285 CHECK_CALLED(Frame_GetWindow
);
1286 CHECK_CALLED(OnUIActivate
);
1287 CHECK_CALLED(Frame_SetActiveObject
);
1288 CHECK_CALLED(UIWindow_SetActiveObject
);
1289 CHECK_CALLED(SetMenu
);
1291 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
1292 0, (HWND
)0xdeadbeef, &rect
);
1293 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
1295 IOleObject_Release(oleobj
);
1298 static void test_GetMiscStatus(IOleObject
*oleobj
)
1303 for(i
=0; i
<10; i
++) {
1305 hres
= IOleObject_GetMiscStatus(oleobj
, i
, &st
);
1306 ok(hres
== S_OK
, "GetMiscStatus failed: %08x\n", hres
);
1307 ok(st
== (OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
1308 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
),
1309 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
1310 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st
);
1314 static void test_SetHostNames(IOleObject
*oleobj
)
1318 static const WCHAR test_appW
[] = {'t','e','s','t',' ','a','p','p',0};
1320 hres
= IOleObject_SetHostNames(oleobj
, test_appW
, (void*)0xdeadbeef);
1321 ok(hres
== S_OK
, "SetHostNames failed: %08x\n", hres
);
1324 static void test_ClientSite(IUnknown
*unk
, IOleClientSite
*client
)
1327 IOleInPlaceObject
*inplace
;
1331 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1332 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08x\n", hres
);
1336 test_GetMiscStatus(oleobj
);
1337 test_SetHostNames(oleobj
);
1339 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObject
, (void**)&inplace
);
1340 ok(hres
== S_OK
, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres
);
1342 IOleObject_Release(oleobj
);
1346 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
1347 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
1348 ok((hwnd
== NULL
) ^ (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
1351 SET_EXPECT(GetContainer
);
1352 SET_EXPECT(Site_GetWindow
);
1353 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1354 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1356 SET_EXPECT(Invoke_DOWNLOADCOMPLETE
);
1357 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
1358 SET_EXPECT(Invoke_COMMANDSTATECHANGE
);
1361 hres
= IOleObject_SetClientSite(oleobj
, client
);
1362 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
1365 CHECK_CALLED(GetContainer
);
1366 CHECK_CALLED(Site_GetWindow
);
1367 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1368 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1370 todo_wine
CHECK_CALLED(Invoke_DOWNLOADCOMPLETE
);
1371 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
1372 todo_wine
CHECK_CALLED(Invoke_COMMANDSTATECHANGE
);
1375 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
1376 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
1377 ok((hwnd
== NULL
) == (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
1379 shell_embedding_hwnd
= hwnd
;
1381 test_SetHostNames(oleobj
);
1383 IOleInPlaceObject_Release(inplace
);
1384 IOleObject_Release(oleobj
);
1387 static void test_ClassInfo(IUnknown
*unk
)
1389 IProvideClassInfo2
*class_info
;
1393 hres
= IUnknown_QueryInterface(unk
, &IID_IProvideClassInfo2
, (void**)&class_info
);
1394 ok(hres
== S_OK
, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres
);
1398 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, &guid
);
1399 ok(hres
== S_OK
, "GetGUID failed: %08x\n", hres
);
1400 ok(IsEqualGUID(&DIID_DWebBrowserEvents2
, &guid
), "wrong guid\n");
1402 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, &guid
);
1403 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
1404 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
1406 hres
= IProvideClassInfo2_GetGUID(class_info
, 2, &guid
);
1407 ok(hres
== E_FAIL
, "GetGUID failed: %08x, expected E_FAIL\n", hres
);
1408 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
1410 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, NULL
);
1411 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
1413 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, NULL
);
1414 ok(hres
== E_POINTER
, "GetGUID failed: %08x, expected E_POINTER\n", hres
);
1416 IProvideClassInfo2_Release(class_info
);
1419 static void test_ie_funcs(IUnknown
*unk
)
1428 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
1429 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
1436 hres
= IWebBrowser2_get_HWND(wb
, &hwnd
);
1437 ok(hres
== E_FAIL
, "get_HWND failed: %08x, expected E_FAIL\n", hres
);
1438 ok(hwnd
== 0, "unexpected hwnd %lx\n", hwnd
);
1442 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1443 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1444 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1446 SET_EXPECT(Invoke_ONMENUBAR
);
1447 hres
= IWebBrowser2_put_MenuBar(wb
, (exvb
= VARIANT_FALSE
));
1448 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1449 CHECK_CALLED(Invoke_ONMENUBAR
);
1451 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1452 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1453 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1455 SET_EXPECT(Invoke_ONMENUBAR
);
1456 hres
= IWebBrowser2_put_MenuBar(wb
, (exvb
= 100));
1457 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1458 CHECK_CALLED(Invoke_ONMENUBAR
);
1460 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
1461 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1462 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1466 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1467 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1468 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1470 SET_EXPECT(Invoke_ONADDRESSBAR
);
1471 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= VARIANT_FALSE
));
1472 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1473 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1475 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1476 ok(hres
== S_OK
, "get_MenuBar failed: %08x\n", hres
);
1477 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1479 SET_EXPECT(Invoke_ONADDRESSBAR
);
1480 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= 100));
1481 ok(hres
== S_OK
, "put_AddressBar failed: %08x\n", hres
);
1482 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1484 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
1485 ok(hres
== S_OK
, "get_AddressBar failed: %08x\n", hres
);
1486 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1488 SET_EXPECT(Invoke_ONADDRESSBAR
);
1489 hres
= IWebBrowser2_put_AddressBar(wb
, (exvb
= VARIANT_TRUE
));
1490 ok(hres
== S_OK
, "put_MenuBar failed: %08x\n", hres
);
1491 CHECK_CALLED(Invoke_ONADDRESSBAR
);
1495 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1496 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1497 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1499 SET_EXPECT(Invoke_ONSTATUSBAR
);
1500 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= VARIANT_TRUE
));
1501 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1502 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1504 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1505 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1506 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1508 SET_EXPECT(Invoke_ONSTATUSBAR
);
1509 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= VARIANT_FALSE
));
1510 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1511 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1513 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1514 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1515 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1517 SET_EXPECT(Invoke_ONSTATUSBAR
);
1518 hres
= IWebBrowser2_put_StatusBar(wb
, (exvb
= 100));
1519 ok(hres
== S_OK
, "put_StatusBar failed: %08x\n", hres
);
1520 CHECK_CALLED(Invoke_ONSTATUSBAR
);
1522 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
1523 ok(hres
== S_OK
, "get_StatusBar failed: %08x\n", hres
);
1524 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1528 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1529 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1532 SET_EXPECT(Invoke_ONTOOLBAR
);
1533 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= VARIANT_FALSE
));
1534 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1535 CHECK_CALLED(Invoke_ONTOOLBAR
);
1537 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1538 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1539 ok(i
== VARIANT_FALSE
, "b=%x\n", i
);
1541 SET_EXPECT(Invoke_ONTOOLBAR
);
1542 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= 100));
1543 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1544 CHECK_CALLED(Invoke_ONTOOLBAR
);
1546 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
1547 ok(hres
== S_OK
, "get_ToolBar failed: %08x\n", hres
);
1550 SET_EXPECT(Invoke_ONTOOLBAR
);
1551 hres
= IWebBrowser2_put_ToolBar(wb
, (exvb
= VARIANT_TRUE
));
1552 ok(hres
== S_OK
, "put_ToolBar failed: %08x\n", hres
);
1553 CHECK_CALLED(Invoke_ONTOOLBAR
);
1557 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1558 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1559 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1561 SET_EXPECT(Invoke_ONFULLSCREEN
);
1562 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= VARIANT_TRUE
));
1563 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1564 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1566 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1567 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1568 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1570 SET_EXPECT(Invoke_ONFULLSCREEN
);
1571 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= 100));
1572 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1573 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1575 hres
= IWebBrowser2_get_FullScreen(wb
, &b
);
1576 ok(hres
== S_OK
, "get_FullScreen failed: %08x\n", hres
);
1577 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1579 SET_EXPECT(Invoke_ONFULLSCREEN
);
1580 hres
= IWebBrowser2_put_FullScreen(wb
, (exvb
= VARIANT_FALSE
));
1581 ok(hres
== S_OK
, "put_FullScreen failed: %08x\n", hres
);
1582 CHECK_CALLED(Invoke_ONFULLSCREEN
);
1586 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1587 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1588 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1590 SET_EXPECT(Invoke_ONTHEATERMODE
);
1591 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= VARIANT_TRUE
));
1592 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1593 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1595 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1596 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1597 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1599 SET_EXPECT(Invoke_ONTHEATERMODE
);
1600 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= 100));
1601 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1602 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1604 hres
= IWebBrowser2_get_TheaterMode(wb
, &b
);
1605 ok(hres
== S_OK
, "get_TheaterMode failed: %08x\n", hres
);
1606 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1608 SET_EXPECT(Invoke_ONTHEATERMODE
);
1609 hres
= IWebBrowser2_put_TheaterMode(wb
, (exvb
= VARIANT_FALSE
));
1610 ok(hres
== S_OK
, "put_TheaterMode failed: %08x\n", hres
);
1611 CHECK_CALLED(Invoke_ONTHEATERMODE
);
1616 hres
= IWebBrowser2_get_Resizable(wb
, &b
);
1617 ok(hres
== E_NOTIMPL
, "get_Resizable failed: %08x\n", hres
);
1618 ok(b
== 0x100, "b=%x\n", b
);
1620 SET_EXPECT(Invoke_WINDOWSETRESIZABLE
);
1621 hres
= IWebBrowser2_put_Resizable(wb
, (exvb
= VARIANT_TRUE
));
1622 ok(hres
== S_OK
, "put_Resizable failed: %08x\n", hres
);
1623 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE
);
1625 SET_EXPECT(Invoke_WINDOWSETRESIZABLE
);
1626 hres
= IWebBrowser2_put_Resizable(wb
, (exvb
= VARIANT_FALSE
));
1627 ok(hres
== S_OK
, "put_Resizable failed: %08x\n", hres
);
1628 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE
);
1630 hres
= IWebBrowser2_get_Resizable(wb
, &b
);
1631 ok(hres
== E_NOTIMPL
, "get_Resizable failed: %08x\n", hres
);
1632 ok(b
== 0x100, "b=%x\n", b
);
1637 hres
= IWebBrowser2_get_Application(wb
, &disp
);
1638 ok(hres
== S_OK
, "get_Application failed: %08x\n", hres
);
1639 ok(disp
== (void*)wb
, "disp=%p, expected %p\n", disp
, wb
);
1641 IDispatch_Release(disp
);
1643 hres
= IWebBrowser2_get_Application(wb
, NULL
);
1644 ok(hres
== E_POINTER
, "get_Application failed: %08x, expected E_POINTER\n", hres
);
1648 hres
= IWebBrowser2_Quit(wb
);
1649 ok(hres
== E_FAIL
, "Quit failed: %08x, expected E_FAIL\n", hres
);
1651 IWebBrowser2_Release(wb
);
1654 static void test_Silent(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1660 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1661 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1662 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1664 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1665 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1668 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1669 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1670 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1672 hres
= IWebBrowser2_put_Silent(wb
, 100);
1673 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1676 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1677 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1678 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1680 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_FALSE
);
1681 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1684 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1685 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1686 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1689 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
1690 ok(hres
== S_OK
, "set_Silent failed: %08x\n", hres
);
1692 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1695 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_SILENT
);
1696 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1699 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1702 hres
= IWebBrowser2_get_Silent(wb
, &b
);
1703 ok(hres
== S_OK
, "get_Silent failed: %08x\n", hres
);
1704 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1707 static void test_Offline(IWebBrowser2
*wb
, IOleControl
*control
, BOOL is_clientsite
)
1713 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1714 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1715 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1717 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1718 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1721 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1722 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1723 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1725 hres
= IWebBrowser2_put_Offline(wb
, 100);
1726 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1729 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1730 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1731 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
1733 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_FALSE
);
1734 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1737 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1738 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1739 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1742 hres
= IWebBrowser2_put_Offline(wb
, VARIANT_TRUE
);
1743 ok(hres
== S_OK
, "set_Offline failed: %08x\n", hres
);
1745 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1748 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
);
1749 ok(hres
== S_OK
, "OnAmbientPropertyChange failed %08x\n", hres
);
1752 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1755 hres
= IWebBrowser2_get_Offline(wb
, &b
);
1756 ok(hres
== S_OK
, "get_Offline failed: %08x\n", hres
);
1757 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
1760 static void test_wb_funcs(IUnknown
*unk
, BOOL is_clientsite
)
1763 IOleControl
*control
;
1766 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
1767 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08x\n", hres
);
1769 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1770 ok(hres
== S_OK
, "Could not get IOleControl interface: %08x\n", hres
);
1772 test_Silent(wb
, control
, is_clientsite
);
1773 test_Offline(wb
, control
, is_clientsite
);
1775 IWebBrowser_Release(wb
);
1776 IOleControl_Release(control
);
1779 static void test_GetControlInfo(IUnknown
*unk
)
1781 IOleControl
*control
;
1785 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
1786 ok(hres
== S_OK
, "Could not get IOleControl: %08x\n", hres
);
1790 hres
= IOleControl_GetControlInfo(control
, &info
);
1791 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1792 hres
= IOleControl_GetControlInfo(control
, NULL
);
1793 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres
);
1795 IOleControl_Release(control
);
1798 static void test_Extent(IUnknown
*unk
)
1804 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
1805 ok(hres
== S_OK
, "Could not get IOleObkect: %08x\n", hres
);
1809 size
.cx
= size
.cy
= 0xdeadbeef;
1810 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1811 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1812 ok(size
.cx
== 1323 && size
.cy
== 529, "size = {%d %d}\n", size
.cx
, size
.cy
);
1816 hres
= IOleObject_SetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1817 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1819 size
.cx
= size
.cy
= 0xdeadbeef;
1820 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1821 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1822 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
1824 size
.cx
= size
.cy
= 0xdeadbeef;
1825 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
1826 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1827 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%d %d}\n", size
.cx
, size
.cy
);
1831 hres
= IOleObject_SetExtent(oleobj
, 0, &size
);
1832 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1834 size
.cx
= size
.cy
= 0xdeadbeef;
1835 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
1836 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1837 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
1839 size
.cx
= size
.cy
= 0xdeadbeef;
1840 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
1841 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1842 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%d %d}\n", size
.cx
, size
.cy
);
1846 hres
= IOleObject_SetExtent(oleobj
, 0xdeadbeef, &size
);
1847 ok(hres
== S_OK
, "SetExtent failed: %08x\n", hres
);
1849 size
.cx
= size
.cy
= 0xdeadbeef;
1850 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
1851 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1852 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
1854 size
.cx
= size
.cy
= 0xdeadbeef;
1855 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
1856 ok(hres
== S_OK
, "GetExtent failed: %08x\n", hres
);
1857 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%d %d}\n", size
.cx
, size
.cy
);
1859 IOleObject_Release(oleobj
);
1862 static void test_ConnectionPoint(IUnknown
*unk
, BOOL init
)
1864 IConnectionPointContainer
*container
;
1865 IConnectionPoint
*point
;
1868 static DWORD dw
= 100;
1870 hres
= IUnknown_QueryInterface(unk
, &IID_IConnectionPointContainer
, (void**)&container
);
1871 ok(hres
== S_OK
, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres
);
1875 hres
= IConnectionPointContainer_FindConnectionPoint(container
, &DIID_DWebBrowserEvents2
, &point
);
1876 IConnectionPointContainer_Release(container
);
1877 ok(hres
== S_OK
, "FindConnectionPoint failed: %08x\n", hres
);
1882 hres
= IConnectionPoint_Advise(point
, (IUnknown
*)&WebBrowserEvents2
, &dw
);
1883 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
1884 ok(dw
== 1, "dw=%d, expected 1\n", dw
);
1886 hres
= IConnectionPoint_Unadvise(point
, dw
);
1887 ok(hres
== S_OK
, "Unadvise failed: %08x\n", hres
);
1890 IConnectionPoint_Release(point
);
1893 static void test_Navigate2(IUnknown
*unk
)
1895 IWebBrowser2
*webbrowser
;
1899 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&webbrowser
);
1900 ok(hres
== S_OK
, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres
);
1904 test_LocationURL(unk
, emptyW
);
1906 V_VT(&url
) = VT_BSTR
;
1907 V_BSTR(&url
) = SysAllocString(about_blankW
);
1909 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
1910 SET_EXPECT(Invoke_PROPERTYCHANGE
);
1911 SET_EXPECT(Invoke_BEFORENAVIGATE2
);
1912 SET_EXPECT(Invoke_DOWNLOADBEGIN
);
1913 SET_EXPECT(Exec_SETDOWNLOADSTATE_1
);
1914 SET_EXPECT(EnableModeless_FALSE
);
1915 SET_EXPECT(Invoke_STATUSTEXTCHANGE
);
1916 SET_EXPECT(SetStatusText
);
1917 SET_EXPECT(GetHostInfo
);
1918 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
1919 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
1920 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
1921 SET_EXPECT(GetOptionKeyPath
);
1922 SET_EXPECT(GetOverridesKeyPath
);
1923 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
1924 SET_EXPECT(Exec_SETPROGRESSMAX
);
1925 SET_EXPECT(Exec_SETPROGRESSPOS
);
1926 SET_EXPECT(Invoke_SETSECURELOCKICON
);
1927 SET_EXPECT(Invoke_FILEDOWNLOAD
);
1928 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
1929 SET_EXPECT(Invoke_COMMANDSTATECHANGE
);
1930 SET_EXPECT(EnableModeless_TRUE
);
1932 hres
= IWebBrowser2_Navigate2(webbrowser
, &url
, NULL
, NULL
, NULL
, NULL
);
1933 ok(hres
== S_OK
, "Navigate2 failed: %08x\n", hres
);
1935 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
1936 todo_wine
CHECK_CALLED(Invoke_PROPERTYCHANGE
);
1937 CHECK_CALLED(Invoke_BEFORENAVIGATE2
);
1938 todo_wine
CHECK_CALLED(Invoke_DOWNLOADBEGIN
);
1939 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_1
);
1940 CHECK_CALLED(EnableModeless_FALSE
);
1941 CHECK_CALLED(Invoke_STATUSTEXTCHANGE
);
1942 CHECK_CALLED(SetStatusText
);
1943 CHECK_CALLED(GetHostInfo
);
1944 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
1945 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
1946 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
1947 CHECK_CALLED(GetOptionKeyPath
);
1948 CHECK_CALLED(GetOverridesKeyPath
);
1949 todo_wine
CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
1950 todo_wine
CHECK_CALLED(Exec_SETPROGRESSMAX
);
1951 todo_wine
CHECK_CALLED(Exec_SETPROGRESSPOS
);
1952 todo_wine
CHECK_CALLED(Invoke_SETSECURELOCKICON
);
1953 todo_wine
CHECK_CALLED(Invoke_FILEDOWNLOAD
);
1954 todo_wine
CHECK_CALLED(Invoke_COMMANDSTATECHANGE
);
1955 todo_wine
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
1956 CHECK_CALLED(EnableModeless_TRUE
);
1959 IWebBrowser2_Release(webbrowser
);
1962 static void test_QueryInterface(IUnknown
*unk
)
1964 IQuickActivate
*qa
= (IQuickActivate
*)0xdeadbeef;
1965 IRunnableObject
*runnable
= (IRunnableObject
*)0xdeadbeef;
1966 IPerPropertyBrowsing
*propbrowse
= (void*)0xdeadbeef;
1967 IOleInPlaceSite
*inplace
= (void*)0xdeadbeef;
1968 IOleCache
*cache
= (void*)0xdeadbeef;
1969 IObjectWithSite
*site
= (void*)0xdeadbeef;
1972 hres
= IUnknown_QueryInterface(unk
, &IID_IQuickActivate
, (void**)&qa
);
1973 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1974 ok(qa
== NULL
, "qa=%p, ezpected NULL\n", qa
);
1976 hres
= IUnknown_QueryInterface(unk
, &IID_IRunnableObject
, (void**)&runnable
);
1977 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1978 ok(runnable
== NULL
, "runnable=%p, ezpected NULL\n", runnable
);
1980 hres
= IUnknown_QueryInterface(unk
, &IID_IPerPropertyBrowsing
, (void**)&propbrowse
);
1981 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1982 ok(propbrowse
== NULL
, "propbrowse=%p, ezpected NULL\n", runnable
);
1984 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCache
, (void**)&cache
);
1985 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1986 ok(cache
== NULL
, "cache=%p, ezpected NULL\n", runnable
);
1988 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceSite
, (void**)&inplace
);
1989 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1990 ok(inplace
== NULL
, "inplace=%p, ezpected NULL\n", runnable
);
1992 hres
= IUnknown_QueryInterface(unk
, &IID_IObjectWithSite
, (void**)&site
);
1993 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
1994 ok(site
== NULL
, "inplace=%p, ezpected NULL\n", runnable
);
1997 static void test_WebBrowser(void)
1999 IUnknown
*unk
= NULL
;
2003 hres
= CoCreateInstance(&CLSID_WebBrowser
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
2004 &IID_IUnknown
, (void**)&unk
);
2005 ok(hres
== S_OK
, "CoCreateInterface failed: %08x\n", hres
);
2009 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
2010 ok(hres
== S_OK
, "Could not get IWebBrowser2 iface: %08x\n", hres
);
2012 test_QueryInterface(unk
);
2013 test_ClassInfo(unk
);
2014 test_LocationURL(unk
, emptyW
);
2015 test_ConnectionPoint(unk
, TRUE
);
2016 test_ClientSite(unk
, &ClientSite
);
2018 test_wb_funcs(unk
, TRUE
);
2020 test_Navigate2(unk
);
2021 test_ClientSite(unk
, NULL
);
2023 test_GetControlInfo(unk
);
2024 test_wb_funcs(unk
, FALSE
);
2025 test_ConnectionPoint(unk
, FALSE
);
2027 IWebBrowser2_Release(wb
);
2028 ref
= IUnknown_Release(unk
);
2029 ok(ref
== 0, "ref=%d, expected 0\n", ref
);
2032 static void gecko_installer_workaround(BOOL disable
)
2037 static BOOL has_url
= FALSE
;
2038 static char url
[2048];
2040 if(!disable
&& !has_url
)
2043 res
= RegOpenKey(HKEY_CURRENT_USER
, "Software\\Wine\\MSHTML", &hkey
);
2044 if(res
!= ERROR_SUCCESS
)
2048 DWORD type
, size
= sizeof(url
);
2050 res
= RegQueryValueEx(hkey
, "GeckoUrl", NULL
, &type
, (PVOID
)url
, &size
);
2051 if(res
== ERROR_SUCCESS
&& type
== REG_SZ
)
2054 RegDeleteValue(hkey
, "GeckoUrl");
2056 RegSetValueEx(hkey
, "GeckoUrl", 0, REG_SZ
, (PVOID
)url
, lstrlenA(url
)+1);
2062 START_TEST(webbrowser
)
2064 gecko_installer_workaround(TRUE
);
2066 container_hwnd
= create_container_window();
2068 OleInitialize(NULL
);
2074 gecko_installer_workaround(FALSE
);