winemine: Change max number of mines to (cols-1)*(rows-1).
[wine.git] / dlls / shdocvw / tests / webbrowser.c
blob64c5bab2f6f817e16ec63b9449f133c24680592a
1 /*
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
19 #define COBJMACROS
20 #define CONST_VTABLE
22 #include <wine/test.h>
23 #include <stdarg.h>
24 #include <stdio.h>
26 #include "windef.h"
27 #include "winbase.h"
28 #include "initguid.h"
29 #include "ole2.h"
30 #include "exdisp.h"
31 #include "htiframe.h"
32 #include "mshtmhst.h"
33 #include "idispids.h"
34 #include "olectl.h"
35 #include "mshtmdid.h"
36 #include "shobjidl.h"
37 #include "shlguid.h"
38 #include "exdispid.h"
40 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
42 #define DEFINE_EXPECT(func) \
43 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
45 #define SET_EXPECT(func) \
46 expect_ ## func = TRUE
48 #define CHECK_EXPECT2(func) \
49 do { \
50 ok(expect_ ##func, "unexpected call " #func "\n"); \
51 called_ ## func = TRUE; \
52 }while(0)
54 #define CHECK_EXPECT(func) \
55 do { \
56 CHECK_EXPECT2(func); \
57 expect_ ## func = FALSE; \
58 }while(0)
60 #define CHECK_CALLED(func) \
61 do { \
62 ok(called_ ## func, "expected " #func "\n"); \
63 expect_ ## func = called_ ## func = FALSE; \
64 }while(0)
66 #define CHECK_CALLED_BROKEN(func) \
67 do { \
68 ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
69 expect_ ## func = called_ ## func = FALSE; \
70 }while(0)
72 #define CLEAR_CALLED(func) \
73 expect_ ## func = called_ ## func = FALSE
75 DEFINE_EXPECT(GetContainer);
76 DEFINE_EXPECT(Site_GetWindow);
77 DEFINE_EXPECT(ShowObject);
78 DEFINE_EXPECT(CanInPlaceActivate);
79 DEFINE_EXPECT(OnInPlaceActivate);
80 DEFINE_EXPECT(OnUIActivate);
81 DEFINE_EXPECT(GetWindowContext);
82 DEFINE_EXPECT(Frame_GetWindow);
83 DEFINE_EXPECT(Frame_SetActiveObject);
84 DEFINE_EXPECT(UIWindow_SetActiveObject);
85 DEFINE_EXPECT(SetMenu);
86 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
87 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
88 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
89 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
90 DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
91 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
92 DEFINE_EXPECT(Invoke_STATUSTEXTCHANGE);
93 DEFINE_EXPECT(Invoke_PROPERTYCHANGE);
94 DEFINE_EXPECT(Invoke_DOWNLOADBEGIN);
95 DEFINE_EXPECT(Invoke_BEFORENAVIGATE2);
96 DEFINE_EXPECT(Invoke_SETSECURELOCKICON);
97 DEFINE_EXPECT(Invoke_FILEDOWNLOAD);
98 DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE);
99 DEFINE_EXPECT(Invoke_DOWNLOADCOMPLETE);
100 DEFINE_EXPECT(Invoke_ONMENUBAR);
101 DEFINE_EXPECT(Invoke_ONADDRESSBAR);
102 DEFINE_EXPECT(Invoke_ONSTATUSBAR);
103 DEFINE_EXPECT(Invoke_ONTOOLBAR);
104 DEFINE_EXPECT(Invoke_ONFULLSCREEN);
105 DEFINE_EXPECT(Invoke_ONTHEATERMODE);
106 DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE);
107 DEFINE_EXPECT(EnableModeless_TRUE);
108 DEFINE_EXPECT(EnableModeless_FALSE);
109 DEFINE_EXPECT(GetHostInfo);
110 DEFINE_EXPECT(GetOptionKeyPath);
111 DEFINE_EXPECT(GetOverridesKeyPath);
112 DEFINE_EXPECT(SetStatusText);
113 DEFINE_EXPECT(UpdateUI);
114 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0);
115 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
116 DEFINE_EXPECT(Exec_SETPROGRESSMAX);
117 DEFINE_EXPECT(Exec_SETPROGRESSPOS);
118 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
120 static const WCHAR wszItem[] = {'i','t','e','m',0};
121 static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
122 static const WCHAR emptyW[] = {0};
124 static VARIANT_BOOL exvb;
125 static IWebBrowser2 *wb;
127 static HWND container_hwnd, shell_embedding_hwnd;
129 static const char *debugstr_w(LPCWSTR str)
131 static char buf[1024];
132 if(!str)
133 return "(null)";
134 WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
135 return buf;
138 static const char *debugstr_guid(REFIID riid)
140 static char buf[50];
142 sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
143 riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
144 riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
145 riid->Data4[5], riid->Data4[6], riid->Data4[7]);
147 return buf;
150 #define test_LocationURL(a,b) _test_LocationURL(__LINE__,a,b)
151 static void _test_LocationURL(unsigned line, IUnknown *unk, LPCWSTR exurl)
153 IWebBrowser2 *wb;
154 BSTR url = (void*)0xdeadbeef;
155 HRESULT hres;
157 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
158 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
159 if(FAILED(hres))
160 return;
162 hres = IWebBrowser2_get_LocationURL(wb, &url);
163 ok_(__FILE__,line) (hres == (*exurl ? S_OK : S_FALSE), "get_LocationURL failed: %08x\n", hres);
164 ok_(__FILE__,line) (!lstrcmpW(url, exurl), "unexpected URL: %s\n", debugstr_w(url));
166 SysFreeString(url);
167 IWebBrowser2_Release(wb);
170 static HRESULT QueryInterface(REFIID,void**);
172 static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface,
173 REFIID riid, void **ppv)
175 ok(0, "unexpected call\n");
176 return E_NOINTERFACE;
179 static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
181 return 2;
184 static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
186 return 1;
189 static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
190 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
192 ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n");
193 ok(cCmds == 1, "cCmds=%d, expected 1\n", cCmds);
194 ok(!pCmdText, "pCmdText != NULL\n");
196 switch(prgCmds[0].cmdID) {
197 case OLECMDID_SETPROGRESSTEXT:
198 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
199 prgCmds[0].cmdf = OLECMDF_ENABLED;
200 return S_OK;
201 default:
202 ok(0, "unexpected command %d\n", prgCmds[0].cmdID);
205 return E_FAIL;
208 static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
209 DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
211 if(!pguidCmdGroup) {
212 switch(nCmdID) {
213 case OLECMDID_SETPROGRESSMAX:
214 CHECK_EXPECT(Exec_SETPROGRESSMAX);
215 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
216 ok(pvaIn != NULL, "pvaIn == NULL\n");
217 if(pvaIn)
218 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
219 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
220 return S_OK;
221 case OLECMDID_SETPROGRESSPOS:
222 CHECK_EXPECT(Exec_SETPROGRESSPOS);
223 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
224 ok(pvaIn != NULL, "pvaIn == NULL\n");
225 if(pvaIn)
226 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
227 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
228 return S_OK;
229 case OLECMDID_SETDOWNLOADSTATE:
230 ok(!nCmdexecopt, "nCmdexecopts=%08x\n", nCmdexecopt);
231 ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut);
232 ok(pvaIn != NULL, "pvaIn == NULL\n");
233 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d\n", V_VT(pvaIn));
234 switch(V_I4(pvaIn)) {
235 case 0:
236 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0);
237 break;
238 case 1:
239 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1);
240 break;
241 default:
242 ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn));
244 return S_OK;
245 default:
246 ok(0, "unexpected nsCmdID %d\n", nCmdID);
248 }else if(IsEqualGUID(&CGID_Explorer, pguidCmdGroup)) {
249 switch(nCmdID) {
250 case 24:
251 return E_FAIL; /* TODO */
252 case 25:
253 return E_FAIL; /* IE5 */
254 case 66:
255 return E_FAIL; /* TODO */
256 default:
257 ok(0, "unexpected nCmdID %d\n", nCmdID);
259 }else {
260 ok(0, "unepected pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup));
263 return E_FAIL;
266 static IOleCommandTargetVtbl OleCommandTargetVtbl = {
267 OleCommandTarget_QueryInterface,
268 OleCommandTarget_AddRef,
269 OleCommandTarget_Release,
270 OleCommandTarget_QueryStatus,
271 OleCommandTarget_Exec
274 static IOleCommandTarget OleCommandTarget = { &OleCommandTargetVtbl };
276 static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
278 if(IsEqualGUID(&IID_ITargetContainer, riid))
279 return E_NOINTERFACE; /* TODO */
281 if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
282 *ppv = &OleCommandTarget;
283 return S_OK;
286 ok(0, "unexpected call\n");
287 return E_NOINTERFACE;
290 static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
292 return 2;
295 static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
297 return 1;
300 static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc,
301 LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut)
303 ok(0, "unexpected call\n");
304 return E_NOTIMPL;
307 static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags,
308 IEnumUnknown **ppenum)
310 ok(0, "unexpected call\n");
311 return E_NOTIMPL;
314 static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
316 ok(0, "unexpected call\n");
317 return E_NOTIMPL;
320 static const IOleContainerVtbl OleContainerVtbl = {
321 OleContainer_QueryInterface,
322 OleContainer_AddRef,
323 OleContainer_Release,
324 OleContainer_ParseDisplayName,
325 OleContainer_EnumObjects,
326 OleContainer_LockContainer
329 static IOleContainer OleContainer = { &OleContainerVtbl };
331 static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
333 return QueryInterface(riid, ppv);
336 static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
338 return 2;
341 static ULONG WINAPI Dispatch_Release(IDispatch *iface)
343 return 1;
346 static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
348 ok(0, "unexpected call\n");
349 return E_NOTIMPL;
352 static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
353 ITypeInfo **ppTInfo)
355 ok(0, "unexpected call\n");
356 return E_NOTIMPL;
359 static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
360 UINT cNames, LCID lcid, DISPID *rgDispId)
362 ok(0, "unexpected call\n");
363 return E_NOTIMPL;
366 static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
367 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
368 EXCEPINFO *pExcepInfo, UINT *puArgErr)
370 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
371 ok(pDispParams != NULL, "pDispParams == NULL\n");
372 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
373 ok(V_VT(pVarResult) == VT_EMPTY, "V_VT(pVarResult)=%d\n", V_VT(pVarResult));
374 ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
375 ok(pDispParams->rgvarg == NULL, "pDispParams->rgvarg = %p\n", pDispParams->rgvarg);
376 ok(pDispParams->rgdispidNamedArgs == NULL,
377 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
378 ok(pDispParams->cArgs == 0, "pDispParams->cArgs = %d\n", pDispParams->cArgs);
379 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
381 switch(dispIdMember) {
382 case DISPID_AMBIENT_USERMODE:
383 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
384 return E_FAIL;
385 case DISPID_AMBIENT_DLCONTROL:
386 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
387 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
388 return E_FAIL;
389 case DISPID_AMBIENT_USERAGENT:
390 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
391 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
392 return E_FAIL;
393 case DISPID_AMBIENT_PALETTE:
394 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
395 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
396 return E_FAIL;
397 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
398 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
399 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
400 V_VT(pVarResult) = VT_BOOL;
401 V_BOOL(pVarResult) = VARIANT_FALSE;
402 return S_OK;
403 case DISPID_AMBIENT_SILENT:
404 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
405 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
406 V_VT(pVarResult) = VT_BOOL;
407 V_BOOL(pVarResult) = VARIANT_FALSE;
408 return S_OK;
411 ok(0, "unexpected dispIdMember %d\n", dispIdMember);
412 return E_NOTIMPL;
415 static IDispatchVtbl DispatchVtbl = {
416 Dispatch_QueryInterface,
417 Dispatch_AddRef,
418 Dispatch_Release,
419 Dispatch_GetTypeInfoCount,
420 Dispatch_GetTypeInfo,
421 Dispatch_GetIDsOfNames,
422 Dispatch_Invoke
425 static IDispatch Dispatch = { &DispatchVtbl };
427 static HRESULT WINAPI WebBrowserEvents2_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
429 *ppv = NULL;
431 if(IsEqualGUID(&DIID_DWebBrowserEvents2, riid)) {
432 *ppv = iface;
433 return S_OK;
436 ok(0, "unexpected riid %s\n", debugstr_guid(riid));
437 return E_NOINTERFACE;
440 #define test_invoke_bool(p,s) _test_invoke_bool(__LINE__,p,s)
441 static void _test_invoke_bool(unsigned line, const DISPPARAMS *params, BOOL strict)
443 ok_(__FILE__,line) (params->rgvarg != NULL, "rgvarg == NULL\n");
444 ok_(__FILE__,line) (params->cArgs == 1, "cArgs=%d, expected 1\n", params->cArgs);
445 ok_(__FILE__,line) (V_VT(params->rgvarg) == VT_BOOL, "V_VT(arg)=%d\n", V_VT(params->rgvarg));
446 if(strict)
447 ok_(__FILE__,line) (V_BOOL(params->rgvarg) == exvb, "V_VT(arg)=%x, expected %x\n",
448 V_BOOL(params->rgvarg), exvb);
449 else
450 ok_(__FILE__,line) (!V_BOOL(params->rgvarg) == !exvb, "V_VT(arg)=%x, expected %x\n",
451 V_BOOL(params->rgvarg), exvb);
454 static void test_OnBeforeNavigate(const VARIANT *disp, const VARIANT *url, const VARIANT *flags,
455 const VARIANT *frame, const VARIANT *post_data, const VARIANT *headers, const VARIANT *cancel)
457 ok(V_VT(disp) == VT_DISPATCH, "V_VT(disp)=%d, expected VT_DISPATCH\n", V_VT(disp));
458 ok(V_DISPATCH(disp) != NULL, "V_DISPATCH(disp) == NULL\n");
459 ok(V_DISPATCH(disp) == (IDispatch*)wb, "V_DISPATCH(disp)=%p, wb=%p\n", V_DISPATCH(disp), wb);
461 ok(V_VT(url) == (VT_BYREF|VT_VARIANT), "V_VT(url)=%x, expected VT_BYREF|VT_VARIANT\n", V_VT(url));
462 ok(V_VARIANTREF(url) != NULL, "V_VARIANTREF(url) == NULL)\n");
463 if(V_VARIANTREF(url)) {
464 ok(V_VT(V_VARIANTREF(url)) == VT_BSTR, "V_VT(V_VARIANTREF(url))=%d, expected VT_BSTR\n",
465 V_VT(V_VARIANTREF(url)));
466 ok(V_BSTR(V_VARIANTREF(url)) != NULL, "V_BSTR(V_VARIANTREF(url)) == NULL\n");
467 ok(!lstrcmpW(V_BSTR(V_VARIANTREF(url)), about_blankW), "unexpected url %s\n",
468 debugstr_w(V_BSTR(V_VARIANTREF(url))));
471 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
472 V_VT(flags));
473 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
474 V_VT(flags));
475 ok(V_VARIANTREF(flags) != NULL, "V_VARIANTREF(flags) == NULL)\n");
476 if(V_VARIANTREF(flags)) {
477 ok(V_VT(V_VARIANTREF(flags)) == VT_I4, "V_VT(V_VARIANTREF(flags))=%d, expected VT_I4\n",
478 V_VT(V_VARIANTREF(flags)));
479 ok(V_I4(V_VARIANTREF(flags)) == 0, "V_I4(V_VARIANTREF(flags)) = %d, expected 0\n",
480 V_I4(V_VARIANTREF(flags)));
483 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
484 V_VT(frame));
485 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
486 V_VT(frame));
487 ok(V_VARIANTREF(frame) != NULL, "V_VARIANTREF(frame) == NULL)\n");
488 if(V_VARIANTREF(frame)) {
489 ok(V_VT(V_VARIANTREF(frame)) == VT_BSTR, "V_VT(V_VARIANTREF(frame))=%d, expected VT_BSTR\n",
490 V_VT(V_VARIANTREF(frame)));
491 ok(V_BSTR(V_VARIANTREF(frame)) == NULL, "V_BSTR(V_VARIANTREF(frame)) = %p, expected NULL\n",
492 V_BSTR(V_VARIANTREF(frame)));
495 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
496 V_VT(post_data));
497 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
498 V_VT(post_data));
499 ok(V_VARIANTREF(post_data) != NULL, "V_VARIANTREF(post_data) == NULL)\n");
500 if(V_VARIANTREF(post_data)) {
501 ok(V_VT(V_VARIANTREF(post_data)) == (VT_VARIANT|VT_BYREF),
502 "V_VT(V_VARIANTREF(post_data))=%d, expected VT_VARIANT|VT_BYREF\n",
503 V_VT(V_VARIANTREF(post_data)));
504 ok(V_VARIANTREF(V_VARIANTREF(post_data)) != NULL,
505 "V_VARIANTREF(V_VARIANTREF(post_data)) == NULL\n");
506 if(V_VARIANTREF(V_VARIANTREF(post_data))) {
507 ok(V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) == VT_EMPTY,
508 "V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) = %d, expected VT_EMPTY\n",
509 V_VT(V_VARIANTREF(V_VARIANTREF(post_data))));
511 if(V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) == (VT_UI1|VT_ARRAY)) {
512 const SAFEARRAY *sa = V_ARRAY(V_VARIANTREF(V_VARIANTREF(post_data)));
514 ok(sa->cDims == 1, "sa->cDims = %d, expected 1\n", sa->cDims);
515 ok(sa->fFeatures == 0, "sa->fFeatures = %d, expected 0\n", sa->fFeatures);
520 ok(V_VT(headers) == (VT_BYREF|VT_VARIANT), "V_VT(headers)=%x, expected VT_BYREF|VT_VARIANT\n",
521 V_VT(headers));
522 ok(V_VARIANTREF(headers) != NULL, "V_VARIANTREF(headers) == NULL)\n");
523 if(V_VARIANTREF(headers)) {
524 ok(V_VT(V_VARIANTREF(headers)) == VT_BSTR, "V_VT(V_VARIANTREF(headers))=%d, expected VT_BSTR\n",
525 V_VT(V_VARIANTREF(headers)));
526 ok(V_BSTR(V_VARIANTREF(headers)) == NULL, "V_BSTR(V_VARIANTREF(heders)) = %p, expected NULL\n",
527 V_BSTR(V_VARIANTREF(headers)));
530 ok(V_VT(cancel) == (VT_BYREF|VT_BOOL), "V_VT(cancel)=%x, expected VT_BYREF|VT_BOOL\n",
531 V_VT(cancel));
532 ok(V_BOOLREF(cancel) != NULL, "V_BOOLREF(pDispParams->rgvarg[0] == NULL)\n");
533 if(V_BOOLREF(cancel))
534 ok(*V_BOOLREF(cancel) == VARIANT_FALSE, "*V_BOOLREF(calcel) = %x, expected VARIANT_FALSE\n",
535 *V_BOOLREF(cancel));
538 static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
539 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
540 EXCEPINFO *pExcepInfo, UINT *puArgErr)
542 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
543 ok(pDispParams != NULL, "pDispParams == NULL\n");
544 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
545 ok(pVarResult == NULL, "pVarResult=%p\n", pVarResult);
546 ok(wFlags == DISPATCH_METHOD, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags);
547 ok(pDispParams->rgdispidNamedArgs == NULL,
548 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
549 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
551 switch(dispIdMember) {
552 case DISPID_STATUSTEXTCHANGE:
553 CHECK_EXPECT2(Invoke_STATUSTEXTCHANGE);
555 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
556 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
557 ok(V_VT(pDispParams->rgvarg) == VT_BSTR, "V_VT(pDispParams->rgvarg)=%d, expected VT_BSTR\n",
558 V_VT(pDispParams->rgvarg));
559 /* TODO: Check text */
560 break;
562 case DISPID_PROPERTYCHANGE:
563 CHECK_EXPECT2(Invoke_PROPERTYCHANGE);
565 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
566 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
567 /* TODO: Check args */
568 break;
570 case DISPID_DOWNLOADBEGIN:
571 CHECK_EXPECT(Invoke_DOWNLOADBEGIN);
573 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
574 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
575 break;
577 case DISPID_BEFORENAVIGATE2:
578 CHECK_EXPECT(Invoke_BEFORENAVIGATE2);
580 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
581 ok(pDispParams->cArgs == 7, "cArgs=%d, expected 7\n", pDispParams->cArgs);
582 test_OnBeforeNavigate(pDispParams->rgvarg+6, pDispParams->rgvarg+5, pDispParams->rgvarg+4,
583 pDispParams->rgvarg+3, pDispParams->rgvarg+2, pDispParams->rgvarg+1,
584 pDispParams->rgvarg);
585 break;
587 case DISPID_SETSECURELOCKICON:
588 CHECK_EXPECT2(Invoke_SETSECURELOCKICON);
590 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
591 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
592 /* TODO: Check args */
593 break;
595 case DISPID_FILEDOWNLOAD:
596 CHECK_EXPECT(Invoke_FILEDOWNLOAD);
598 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
599 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
600 /* TODO: Check args */
601 break;
603 case DISPID_COMMANDSTATECHANGE:
604 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE);
606 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
607 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
608 /* TODO: Check args */
609 break;
611 case DISPID_DOWNLOADCOMPLETE:
612 CHECK_EXPECT(Invoke_DOWNLOADCOMPLETE);
614 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
615 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
616 break;
618 case DISPID_ONMENUBAR:
619 CHECK_EXPECT(Invoke_ONMENUBAR);
620 test_invoke_bool(pDispParams, TRUE);
621 break;
623 case DISPID_ONADDRESSBAR:
624 CHECK_EXPECT(Invoke_ONADDRESSBAR);
625 test_invoke_bool(pDispParams, TRUE);
626 break;
628 case DISPID_ONSTATUSBAR:
629 CHECK_EXPECT(Invoke_ONSTATUSBAR);
630 test_invoke_bool(pDispParams, TRUE);
631 break;
633 case DISPID_ONTOOLBAR:
634 CHECK_EXPECT(Invoke_ONTOOLBAR);
635 test_invoke_bool(pDispParams, FALSE);
636 break;
638 case DISPID_ONFULLSCREEN:
639 CHECK_EXPECT(Invoke_ONFULLSCREEN);
640 test_invoke_bool(pDispParams, TRUE);
641 break;
643 case DISPID_ONTHEATERMODE:
644 CHECK_EXPECT(Invoke_ONTHEATERMODE);
645 test_invoke_bool(pDispParams, TRUE);
646 break;
648 case DISPID_WINDOWSETRESIZABLE:
649 CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE);
650 test_invoke_bool(pDispParams, TRUE);
651 break;
653 default:
654 ok(0, "unexpected dispIdMember %d\n", dispIdMember);
657 return S_OK;
660 static IDispatchVtbl WebBrowserEvents2Vtbl = {
661 WebBrowserEvents2_QueryInterface,
662 Dispatch_AddRef,
663 Dispatch_Release,
664 Dispatch_GetTypeInfoCount,
665 Dispatch_GetTypeInfo,
666 Dispatch_GetIDsOfNames,
667 WebBrowserEvents2_Invoke
670 static IDispatch WebBrowserEvents2 = { &WebBrowserEvents2Vtbl };
672 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
674 return QueryInterface(riid, ppv);
677 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
679 return 2;
682 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
684 return 1;
687 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
689 ok(0, "unexpected call\n");
690 return E_NOTIMPL;
693 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign, DWORD dwWhichMoniker,
694 IMoniker **ppmon)
696 ok(0, "unexpected call\n");
697 return E_NOTIMPL;
700 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
702 CHECK_EXPECT(GetContainer);
704 ok(ppContainer != NULL, "ppContainer == NULL\n");
705 if(ppContainer)
706 *ppContainer = &OleContainer;
708 return S_OK;
711 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
713 CHECK_EXPECT(ShowObject);
714 return S_OK;
717 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
719 ok(0, "unexpected call\n");
720 return E_NOTIMPL;
723 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
725 ok(0, "unexpected call\n");
726 return E_NOTIMPL;
729 static const IOleClientSiteVtbl ClientSiteVtbl = {
730 ClientSite_QueryInterface,
731 ClientSite_AddRef,
732 ClientSite_Release,
733 ClientSite_SaveObject,
734 ClientSite_GetMoniker,
735 ClientSite_GetContainer,
736 ClientSite_ShowObject,
737 ClientSite_OnShowWindow,
738 ClientSite_RequestNewObjectLayout
741 static IOleClientSite ClientSite = { &ClientSiteVtbl };
743 static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceFrame *iface,
744 REFIID riid, void **ppv)
746 ok(0, "unexpected call\n");
747 return E_NOINTERFACE;
750 static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceFrame *iface)
752 return 2;
755 static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceFrame *iface)
757 return 1;
760 static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
762 ok(0, "unexpected call\n");
763 return E_NOTIMPL;
766 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
768 CHECK_EXPECT(Frame_GetWindow);
769 ok(phwnd != NULL, "phwnd == NULL\n");
770 if(phwnd)
771 *phwnd = container_hwnd;
772 return S_OK;
775 static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
777 ok(0, "unexpected call\n");
778 return E_NOTIMPL;
781 static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
783 ok(0, "unexpected call\n");
784 return E_NOTIMPL;
787 static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame *iface,
788 LPCBORDERWIDTHS pborderwidths)
790 ok(0, "unexpected call\n");
791 return E_NOTIMPL;
794 static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame *iface,
795 LPCBORDERWIDTHS pborderwidths)
797 ok(0, "unexpected call\n");
798 return E_NOTIMPL;
801 static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface,
802 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
804 CHECK_EXPECT(UIWindow_SetActiveObject);
805 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
806 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
807 return S_OK;
810 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
811 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
813 CHECK_EXPECT(Frame_SetActiveObject);
814 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
815 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
816 return S_OK;
819 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
820 LPOLEMENUGROUPWIDTHS lpMenuWidths)
822 ok(0, "unexpected call\n");
823 return E_NOTIMPL;
826 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
827 HOLEMENU holemenu, HWND hwndActiveObject)
829 CHECK_EXPECT(SetMenu);
830 ok(hmenuShared == NULL, "hmenuShared=%p\n", hmenuShared);
831 ok(holemenu == NULL, "holemenu=%p\n", holemenu);
832 ok(hwndActiveObject == shell_embedding_hwnd, "hwndActiveObject=%p, expected %p\n",
833 hwndActiveObject, shell_embedding_hwnd);
834 return S_OK;
837 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
839 ok(0, "unexpected call\n");
840 return E_NOTIMPL;
843 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
845 CHECK_EXPECT2(SetStatusText);
846 /* FIXME: Check pszStatusText */
847 return S_OK;
850 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
852 if(fEnable)
853 CHECK_EXPECT(EnableModeless_TRUE);
854 else
855 CHECK_EXPECT(EnableModeless_FALSE);
856 return S_OK;
859 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
861 ok(0, "unexpected call\n");
862 return E_NOTIMPL;
865 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = {
866 InPlaceUIWindow_QueryInterface,
867 InPlaceUIWindow_AddRef,
868 InPlaceUIWindow_Release,
869 InPlaceUIWindow_GetWindow,
870 InPlaceUIWindow_ContextSensitiveHelp,
871 InPlaceUIWindow_GetBorder,
872 InPlaceUIWindow_RequestBorderSpace,
873 InPlaceUIWindow_SetBorderSpace,
874 InPlaceUIWindow_SetActiveObject,
877 static IOleInPlaceUIWindow InPlaceUIWindow = { (IOleInPlaceUIWindowVtbl*)&InPlaceUIWindowVtbl };
879 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
880 InPlaceUIWindow_QueryInterface,
881 InPlaceUIWindow_AddRef,
882 InPlaceUIWindow_Release,
883 InPlaceFrame_GetWindow,
884 InPlaceUIWindow_ContextSensitiveHelp,
885 InPlaceUIWindow_GetBorder,
886 InPlaceUIWindow_RequestBorderSpace,
887 InPlaceUIWindow_SetBorderSpace,
888 InPlaceFrame_SetActiveObject,
889 InPlaceFrame_InsertMenus,
890 InPlaceFrame_SetMenu,
891 InPlaceFrame_RemoveMenus,
892 InPlaceFrame_SetStatusText,
893 InPlaceFrame_EnableModeless,
894 InPlaceFrame_TranslateAccelerator
897 static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
899 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
901 return QueryInterface(riid, ppv);
904 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface)
906 return 2;
909 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface)
911 return 1;
914 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd)
916 CHECK_EXPECT(Site_GetWindow);
917 ok(phwnd != NULL, "phwnd == NULL\n");
918 if(phwnd)
919 *phwnd = container_hwnd;
920 return S_OK;
923 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode)
925 ok(0, "unexpected call\n");
926 return E_NOTIMPL;
929 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface)
931 CHECK_EXPECT(CanInPlaceActivate);
932 return S_OK;
935 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface)
937 CHECK_EXPECT(OnInPlaceActivate);
938 return S_OK;
941 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface)
943 CHECK_EXPECT(OnUIActivate);
944 return S_OK;
947 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface,
948 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
949 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
951 static const RECT pos_rect = {2,1,1002,901};
952 static const RECT clip_rect = {10,10,990,890};
954 CHECK_EXPECT(GetWindowContext);
956 ok(ppFrame != NULL, "ppFrame = NULL\n");
957 if(ppFrame)
958 *ppFrame = &InPlaceFrame;
960 ok(ppDoc != NULL, "ppDoc = NULL\n");
961 if(ppDoc)
962 *ppDoc = &InPlaceUIWindow;
964 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
965 if(lprcPosRect)
966 memcpy(lprcPosRect, &pos_rect, sizeof(RECT));
968 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
969 if(lprcClipRect)
970 memcpy(lprcClipRect, &clip_rect, sizeof(RECT));
972 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
973 if(lpFrameInfo) {
974 lpFrameInfo->cb = sizeof(*lpFrameInfo);
975 lpFrameInfo->fMDIApp = FALSE;
976 lpFrameInfo->hwndFrame = container_hwnd;
977 lpFrameInfo->haccel = NULL;
978 lpFrameInfo->cAccelEntries = 0;
981 return S_OK;
984 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
986 ok(0, "unexpected call\n");
987 return E_NOTIMPL;
990 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable)
992 ok(0, "unexpected call\n");
993 return E_NOTIMPL;
996 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface)
998 ok(0, "unexpected call\n");
999 return E_NOTIMPL;
1002 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface)
1004 ok(0, "unexpected call\n");
1005 return E_NOTIMPL;
1008 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface)
1010 ok(0, "unexpected call\n");
1011 return E_NOTIMPL;
1014 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect)
1016 ok(0, "unexpected call\n");
1017 return E_NOTIMPL;
1020 static HRESULT WINAPI InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface,
1021 BOOL *pNoRedraw, DWORD dwFlags)
1023 ok(0, "unexpected call\n");
1024 return E_NOTIMPL;
1027 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface,
1028 BOOL fNoRedraw)
1030 ok(0, "unexpected call\n");
1031 return E_NOTIMPL;
1034 static HRESULT WINAPI InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx *iface)
1036 ok(0, "unexpected call\n");
1037 return S_OK;
1040 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl = {
1041 InPlaceSite_QueryInterface,
1042 InPlaceSite_AddRef,
1043 InPlaceSite_Release,
1044 InPlaceSite_GetWindow,
1045 InPlaceSite_ContextSensitiveHelp,
1046 InPlaceSite_CanInPlaceActivate,
1047 InPlaceSite_OnInPlaceActivate,
1048 InPlaceSite_OnUIActivate,
1049 InPlaceSite_GetWindowContext,
1050 InPlaceSite_Scroll,
1051 InPlaceSite_OnUIDeactivate,
1052 InPlaceSite_OnInPlaceDeactivate,
1053 InPlaceSite_DiscardUndoState,
1054 InPlaceSite_DeactivateAndUndo,
1055 InPlaceSite_OnPosRectChange,
1056 InPlaceSite_OnInPlaceActivateEx,
1057 InPlaceSite_OnInPlaceDeactivateEx,
1058 InPlaceSite_RequestUIActivate
1061 static IOleInPlaceSiteEx InPlaceSite = { &InPlaceSiteExVtbl };
1063 static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
1065 return QueryInterface(riid, ppv);
1068 static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
1070 return 2;
1073 static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
1075 return 1;
1078 static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt,
1079 IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
1081 ok(0, "unexpected call %d %p %p %p\n", dwID, ppt, pcmdtReserved, pdicpReserved);
1082 return S_FALSE;
1085 static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
1087 CHECK_EXPECT2(GetHostInfo);
1088 ok(pInfo != NULL, "pInfo=NULL\n");
1089 if(pInfo) {
1090 ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO) || broken(!pInfo->cbSize), "pInfo->cbSize=%u\n", pInfo->cbSize);
1091 ok(!pInfo->dwFlags, "pInfo->dwFlags=%08x, expected 0\n", pInfo->dwFlags);
1092 ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo->dwDoubleClick);
1093 ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
1094 ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
1096 return E_FAIL;
1099 static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID,
1100 IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
1101 IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
1103 ok(0, "unexpected call\n");
1104 return E_NOTIMPL;
1107 static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
1109 ok(0, "unexpected call\n");
1110 return E_NOTIMPL;
1113 static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
1115 CHECK_EXPECT(UpdateUI);
1116 return E_NOTIMPL;
1119 static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
1121 ok(0, "unexpected call\n");
1122 return E_NOTIMPL;
1125 static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
1127 ok(0, "unexpected call\n");
1128 return E_NOTIMPL;
1131 static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
1133 ok(0, "unexpected call\n");
1134 return E_NOTIMPL;
1137 static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder,
1138 IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
1140 ok(0, "unexpected call\n");
1141 return E_NOTIMPL;
1144 static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg,
1145 const GUID *pguidCmdGroup, DWORD nCmdID)
1147 ok(0, "unexpected call\n");
1148 return E_NOTIMPL;
1151 static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface,
1152 LPOLESTR *pchKey, DWORD dw)
1154 CHECK_EXPECT(GetOptionKeyPath);
1155 ok(pchKey != NULL, "pchKey==NULL\n");
1156 if(pchKey)
1157 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1158 ok(!dw, "dw=%x\n", dw);
1159 return E_NOTIMPL;
1162 static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
1163 IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
1165 ok(0, "unexpected call\n");
1166 return E_NOTIMPL;
1169 static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
1171 ok(0, "unexpected call\n");
1172 return E_NOTIMPL;
1175 static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
1176 OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
1178 ok(0, "unexpected call\n");
1179 return E_NOTIMPL;
1182 static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
1183 IDataObject **ppPORet)
1185 ok(0, "unexpected call\n");
1186 return E_NOTIMPL;
1189 static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface,
1190 LPOLESTR *pchKey, DWORD dw)
1192 CHECK_EXPECT(GetOverridesKeyPath);
1193 ok(pchKey != NULL, "pchKey==NULL\n");
1194 if(pchKey)
1195 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1196 ok(!dw, "dw=%x\n", dw);
1197 return E_NOTIMPL;
1200 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = {
1201 DocHostUIHandler_QueryInterface,
1202 DocHostUIHandler_AddRef,
1203 DocHostUIHandler_Release,
1204 DocHostUIHandler_ShowContextMenu,
1205 DocHostUIHandler_GetHostInfo,
1206 DocHostUIHandler_ShowUI,
1207 DocHostUIHandler_HideUI,
1208 DocHostUIHandler_UpdateUI,
1209 DocHostUIHandler_EnableModeless,
1210 DocHostUIHandler_OnDocWindowActivate,
1211 DocHostUIHandler_OnFrameWindowActivate,
1212 DocHostUIHandler_ResizeBorder,
1213 DocHostUIHandler_TranslateAccelerator,
1214 DocHostUIHandler_GetOptionKeyPath,
1215 DocHostUIHandler_GetDropTarget,
1216 DocHostUIHandler_GetExternal,
1217 DocHostUIHandler_TranslateUrl,
1218 DocHostUIHandler_FilterDataObject,
1219 DocHostUIHandler_GetOverrideKeyPath
1222 static IDocHostUIHandler2 DocHostUIHandler = { &DocHostUIHandlerVtbl };
1224 static HRESULT QueryInterface(REFIID riid, void **ppv)
1226 *ppv = NULL;
1228 if(IsEqualGUID(&IID_IUnknown, riid)
1229 || IsEqualGUID(&IID_IOleClientSite, riid))
1230 *ppv = &ClientSite;
1231 else if(IsEqualGUID(&IID_IOleWindow, riid)
1232 || IsEqualGUID(&IID_IOleInPlaceSite, riid)
1233 || IsEqualGUID(&IID_IOleInPlaceSiteEx, riid))
1234 *ppv = &InPlaceSite;
1235 else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)
1236 || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
1237 *ppv = &DocHostUIHandler;
1238 else if(IsEqualGUID(&IID_IDispatch, riid))
1239 *ppv = &Dispatch;
1241 if(*ppv)
1242 return S_OK;
1244 return E_NOINTERFACE;
1247 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
1249 return DefWindowProcW(hwnd, msg, wParam, lParam);
1252 static HWND create_container_window(void)
1254 static const WCHAR wszWebBrowserContainer[] =
1255 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
1256 static WNDCLASSEXW wndclass = {
1257 sizeof(WNDCLASSEXW),
1259 wnd_proc,
1260 0, 0, NULL, NULL, NULL, NULL, NULL,
1261 wszWebBrowserContainer,
1262 NULL
1265 RegisterClassExW(&wndclass);
1266 return CreateWindowW(wszWebBrowserContainer, wszWebBrowserContainer,
1267 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
1268 CW_USEDEFAULT, NULL, NULL, NULL, NULL);
1271 static void test_DoVerb(IUnknown *unk)
1273 IOleObject *oleobj;
1274 RECT rect = {0,0,1000,1000};
1275 HRESULT hres;
1277 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1278 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
1279 if(FAILED(hres))
1280 return;
1282 SET_EXPECT(CanInPlaceActivate);
1283 SET_EXPECT(Site_GetWindow);
1284 SET_EXPECT(OnInPlaceActivate);
1285 SET_EXPECT(GetWindowContext);
1286 SET_EXPECT(ShowObject);
1287 SET_EXPECT(GetContainer);
1288 SET_EXPECT(Frame_GetWindow);
1289 SET_EXPECT(OnUIActivate);
1290 SET_EXPECT(Frame_SetActiveObject);
1291 SET_EXPECT(UIWindow_SetActiveObject);
1292 SET_EXPECT(SetMenu);
1294 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1295 0, (HWND)0xdeadbeef, &rect);
1296 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
1298 CHECK_CALLED(CanInPlaceActivate);
1299 CHECK_CALLED(Site_GetWindow);
1300 CHECK_CALLED(OnInPlaceActivate);
1301 CHECK_CALLED(GetWindowContext);
1302 CHECK_CALLED(ShowObject);
1303 CHECK_CALLED(GetContainer);
1304 CHECK_CALLED(Frame_GetWindow);
1305 CHECK_CALLED(OnUIActivate);
1306 CHECK_CALLED(Frame_SetActiveObject);
1307 CHECK_CALLED(UIWindow_SetActiveObject);
1308 CHECK_CALLED(SetMenu);
1310 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1311 0, (HWND)0xdeadbeef, &rect);
1312 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
1314 IOleObject_Release(oleobj);
1317 static void test_GetMiscStatus(IOleObject *oleobj)
1319 DWORD st, i;
1320 HRESULT hres;
1322 for(i=0; i<10; i++) {
1323 st = 0xdeadbeef;
1324 hres = IOleObject_GetMiscStatus(oleobj, i, &st);
1325 ok(hres == S_OK, "GetMiscStatus failed: %08x\n", hres);
1326 ok(st == (OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_INSIDEOUT
1327 |OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE),
1328 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
1329 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st);
1333 static void test_SetHostNames(IOleObject *oleobj)
1335 HRESULT hres;
1337 static const WCHAR test_appW[] = {'t','e','s','t',' ','a','p','p',0};
1339 hres = IOleObject_SetHostNames(oleobj, test_appW, (void*)0xdeadbeef);
1340 ok(hres == S_OK, "SetHostNames failed: %08x\n", hres);
1343 static void test_ClientSite(IUnknown *unk, IOleClientSite *client)
1345 IOleObject *oleobj;
1346 IOleInPlaceObject *inplace;
1347 HWND hwnd;
1348 HRESULT hres;
1350 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1351 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
1352 if(FAILED(hres))
1353 return;
1355 test_GetMiscStatus(oleobj);
1356 test_SetHostNames(oleobj);
1358 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
1359 ok(hres == S_OK, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres);
1360 if(FAILED(hres)) {
1361 IOleObject_Release(oleobj);
1362 return;
1365 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1366 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
1367 ok((hwnd == NULL) ^ (client == NULL), "unexpected hwnd %p\n", hwnd);
1369 if(client) {
1370 SET_EXPECT(GetContainer);
1371 SET_EXPECT(Site_GetWindow);
1372 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1373 SET_EXPECT(Invoke_AMBIENT_SILENT);
1374 }else {
1375 SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
1376 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
1377 SET_EXPECT(Invoke_COMMANDSTATECHANGE);
1380 hres = IOleObject_SetClientSite(oleobj, client);
1381 ok(hres == S_OK, "SetClientSite failed: %08x\n", hres);
1383 if(client) {
1384 CHECK_CALLED(GetContainer);
1385 CHECK_CALLED(Site_GetWindow);
1386 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1387 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1388 }else {
1389 todo_wine CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
1390 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
1391 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
1394 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1395 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
1396 ok((hwnd == NULL) == (client == NULL), "unexpected hwnd %p\n", hwnd);
1398 shell_embedding_hwnd = hwnd;
1400 test_SetHostNames(oleobj);
1402 IOleInPlaceObject_Release(inplace);
1403 IOleObject_Release(oleobj);
1406 static void test_ClassInfo(IUnknown *unk)
1408 IProvideClassInfo2 *class_info;
1409 GUID guid;
1410 HRESULT hres;
1412 hres = IUnknown_QueryInterface(unk, &IID_IProvideClassInfo2, (void**)&class_info);
1413 ok(hres == S_OK, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres);
1414 if(FAILED(hres))
1415 return;
1417 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid);
1418 ok(hres == S_OK, "GetGUID failed: %08x\n", hres);
1419 ok(IsEqualGUID(&DIID_DWebBrowserEvents2, &guid), "wrong guid\n");
1421 hres = IProvideClassInfo2_GetGUID(class_info, 0, &guid);
1422 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
1423 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
1425 hres = IProvideClassInfo2_GetGUID(class_info, 2, &guid);
1426 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
1427 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
1429 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, NULL);
1430 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
1432 hres = IProvideClassInfo2_GetGUID(class_info, 0, NULL);
1433 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
1435 IProvideClassInfo2_Release(class_info);
1438 static void test_ie_funcs(IUnknown *unk)
1440 IWebBrowser2 *wb;
1441 IDispatch *disp;
1442 VARIANT_BOOL b;
1443 int i;
1444 long hwnd;
1445 HRESULT hres;
1447 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
1448 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
1449 if(FAILED(hres))
1450 return;
1452 /* HWND */
1454 hwnd = 0xdeadbeef;
1455 hres = IWebBrowser2_get_HWND(wb, &hwnd);
1456 ok(hres == E_FAIL, "get_HWND failed: %08x, expected E_FAIL\n", hres);
1457 ok(hwnd == 0, "unexpected hwnd %lx\n", hwnd);
1459 /* MenuBar */
1461 hres = IWebBrowser2_get_MenuBar(wb, &b);
1462 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1463 ok(b == VARIANT_TRUE, "b=%x\n", b);
1465 SET_EXPECT(Invoke_ONMENUBAR);
1466 hres = IWebBrowser2_put_MenuBar(wb, (exvb = VARIANT_FALSE));
1467 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1468 CHECK_CALLED(Invoke_ONMENUBAR);
1470 hres = IWebBrowser2_get_MenuBar(wb, &b);
1471 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1472 ok(b == VARIANT_FALSE, "b=%x\n", b);
1474 SET_EXPECT(Invoke_ONMENUBAR);
1475 hres = IWebBrowser2_put_MenuBar(wb, (exvb = 100));
1476 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1477 CHECK_CALLED(Invoke_ONMENUBAR);
1479 hres = IWebBrowser2_get_MenuBar(wb, &b);
1480 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1481 ok(b == VARIANT_TRUE, "b=%x\n", b);
1483 /* AddressBar */
1485 hres = IWebBrowser2_get_AddressBar(wb, &b);
1486 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
1487 ok(b == VARIANT_TRUE, "b=%x\n", b);
1489 SET_EXPECT(Invoke_ONADDRESSBAR);
1490 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_FALSE));
1491 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
1492 CHECK_CALLED(Invoke_ONADDRESSBAR);
1494 hres = IWebBrowser2_get_AddressBar(wb, &b);
1495 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1496 ok(b == VARIANT_FALSE, "b=%x\n", b);
1498 SET_EXPECT(Invoke_ONADDRESSBAR);
1499 hres = IWebBrowser2_put_AddressBar(wb, (exvb = 100));
1500 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
1501 CHECK_CALLED(Invoke_ONADDRESSBAR);
1503 hres = IWebBrowser2_get_AddressBar(wb, &b);
1504 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
1505 ok(b == VARIANT_TRUE, "b=%x\n", b);
1507 SET_EXPECT(Invoke_ONADDRESSBAR);
1508 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_TRUE));
1509 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1510 CHECK_CALLED(Invoke_ONADDRESSBAR);
1512 /* StatusBar */
1514 hres = IWebBrowser2_get_StatusBar(wb, &b);
1515 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1516 ok(b == VARIANT_TRUE, "b=%x\n", b);
1518 SET_EXPECT(Invoke_ONSTATUSBAR);
1519 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_TRUE));
1520 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1521 CHECK_CALLED(Invoke_ONSTATUSBAR);
1523 hres = IWebBrowser2_get_StatusBar(wb, &b);
1524 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1525 ok(b == VARIANT_TRUE, "b=%x\n", b);
1527 SET_EXPECT(Invoke_ONSTATUSBAR);
1528 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_FALSE));
1529 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1530 CHECK_CALLED(Invoke_ONSTATUSBAR);
1532 hres = IWebBrowser2_get_StatusBar(wb, &b);
1533 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1534 ok(b == VARIANT_FALSE, "b=%x\n", b);
1536 SET_EXPECT(Invoke_ONSTATUSBAR);
1537 hres = IWebBrowser2_put_StatusBar(wb, (exvb = 100));
1538 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1539 CHECK_CALLED(Invoke_ONSTATUSBAR);
1541 hres = IWebBrowser2_get_StatusBar(wb, &b);
1542 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1543 ok(b == VARIANT_TRUE, "b=%x\n", b);
1545 /* ToolBar */
1547 hres = IWebBrowser2_get_ToolBar(wb, &i);
1548 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1549 ok(i, "i=%x\n", i);
1551 SET_EXPECT(Invoke_ONTOOLBAR);
1552 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_FALSE));
1553 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1554 CHECK_CALLED(Invoke_ONTOOLBAR);
1556 hres = IWebBrowser2_get_ToolBar(wb, &i);
1557 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1558 ok(i == VARIANT_FALSE, "b=%x\n", i);
1560 SET_EXPECT(Invoke_ONTOOLBAR);
1561 hres = IWebBrowser2_put_ToolBar(wb, (exvb = 100));
1562 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1563 CHECK_CALLED(Invoke_ONTOOLBAR);
1565 hres = IWebBrowser2_get_ToolBar(wb, &i);
1566 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1567 ok(i, "i=%x\n", i);
1569 SET_EXPECT(Invoke_ONTOOLBAR);
1570 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_TRUE));
1571 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1572 CHECK_CALLED(Invoke_ONTOOLBAR);
1574 /* FullScreen */
1576 hres = IWebBrowser2_get_FullScreen(wb, &b);
1577 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1578 ok(b == VARIANT_FALSE, "b=%x\n", b);
1580 SET_EXPECT(Invoke_ONFULLSCREEN);
1581 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_TRUE));
1582 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1583 CHECK_CALLED(Invoke_ONFULLSCREEN);
1585 hres = IWebBrowser2_get_FullScreen(wb, &b);
1586 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1587 ok(b == VARIANT_TRUE, "b=%x\n", b);
1589 SET_EXPECT(Invoke_ONFULLSCREEN);
1590 hres = IWebBrowser2_put_FullScreen(wb, (exvb = 100));
1591 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1592 CHECK_CALLED(Invoke_ONFULLSCREEN);
1594 hres = IWebBrowser2_get_FullScreen(wb, &b);
1595 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1596 ok(b == VARIANT_TRUE, "b=%x\n", b);
1598 SET_EXPECT(Invoke_ONFULLSCREEN);
1599 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_FALSE));
1600 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1601 CHECK_CALLED(Invoke_ONFULLSCREEN);
1603 /* TheaterMode */
1605 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1606 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1607 ok(b == VARIANT_FALSE, "b=%x\n", b);
1609 SET_EXPECT(Invoke_ONTHEATERMODE);
1610 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_TRUE));
1611 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1612 CHECK_CALLED(Invoke_ONTHEATERMODE);
1614 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1615 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1616 ok(b == VARIANT_TRUE, "b=%x\n", b);
1618 SET_EXPECT(Invoke_ONTHEATERMODE);
1619 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = 100));
1620 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1621 CHECK_CALLED(Invoke_ONTHEATERMODE);
1623 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1624 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1625 ok(b == VARIANT_TRUE, "b=%x\n", b);
1627 SET_EXPECT(Invoke_ONTHEATERMODE);
1628 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_FALSE));
1629 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1630 CHECK_CALLED(Invoke_ONTHEATERMODE);
1632 /* Resizable */
1634 b = 0x100;
1635 hres = IWebBrowser2_get_Resizable(wb, &b);
1636 ok(hres == E_NOTIMPL, "get_Resizable failed: %08x\n", hres);
1637 ok(b == 0x100, "b=%x\n", b);
1639 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
1640 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_TRUE));
1641 ok(hres == S_OK || broken(hres == E_NOTIMPL), "put_Resizable failed: %08x\n", hres);
1642 CHECK_CALLED_BROKEN(Invoke_WINDOWSETRESIZABLE);
1644 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
1645 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_FALSE));
1646 ok(hres == S_OK || broken(hres == E_NOTIMPL), "put_Resizable failed: %08x\n", hres);
1647 CHECK_CALLED_BROKEN(Invoke_WINDOWSETRESIZABLE);
1649 hres = IWebBrowser2_get_Resizable(wb, &b);
1650 ok(hres == E_NOTIMPL, "get_Resizable failed: %08x\n", hres);
1651 ok(b == 0x100, "b=%x\n", b);
1653 /* Application */
1655 disp = NULL;
1656 hres = IWebBrowser2_get_Application(wb, &disp);
1657 ok(hres == S_OK, "get_Application failed: %08x\n", hres);
1658 ok(disp == (void*)wb, "disp=%p, expected %p\n", disp, wb);
1659 if(disp)
1660 IDispatch_Release(disp);
1662 hres = IWebBrowser2_get_Application(wb, NULL);
1663 ok(hres == E_POINTER, "get_Application failed: %08x, expected E_POINTER\n", hres);
1665 /* Quit */
1667 hres = IWebBrowser2_Quit(wb);
1668 ok(hres == E_FAIL, "Quit failed: %08x, expected E_FAIL\n", hres);
1670 IWebBrowser2_Release(wb);
1673 static void test_Silent(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1675 VARIANT_BOOL b;
1676 HRESULT hres;
1678 b = 100;
1679 hres = IWebBrowser2_get_Silent(wb, &b);
1680 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1681 ok(b == VARIANT_FALSE, "b=%x\n", b);
1683 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
1684 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1686 b = 100;
1687 hres = IWebBrowser2_get_Silent(wb, &b);
1688 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1689 ok(b == VARIANT_TRUE, "b=%x\n", b);
1691 hres = IWebBrowser2_put_Silent(wb, 100);
1692 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1694 b = 100;
1695 hres = IWebBrowser2_get_Silent(wb, &b);
1696 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1697 ok(b == VARIANT_TRUE, "b=%x\n", b);
1699 hres = IWebBrowser2_put_Silent(wb, VARIANT_FALSE);
1700 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1702 b = 100;
1703 hres = IWebBrowser2_get_Silent(wb, &b);
1704 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1705 ok(b == VARIANT_FALSE, "b=%x\n", b);
1707 if(is_clientsite) {
1708 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
1709 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1711 SET_EXPECT(Invoke_AMBIENT_SILENT);
1714 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
1715 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1717 if(is_clientsite)
1718 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1720 b = 100;
1721 hres = IWebBrowser2_get_Silent(wb, &b);
1722 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1723 ok(b == VARIANT_FALSE, "b=%x\n", b);
1726 static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1728 VARIANT_BOOL b;
1729 HRESULT hres;
1731 b = 100;
1732 hres = IWebBrowser2_get_Offline(wb, &b);
1733 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1734 ok(b == VARIANT_FALSE, "b=%x\n", b);
1736 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
1737 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1739 b = 100;
1740 hres = IWebBrowser2_get_Offline(wb, &b);
1741 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1742 ok(b == VARIANT_TRUE, "b=%x\n", b);
1744 hres = IWebBrowser2_put_Offline(wb, 100);
1745 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1747 b = 100;
1748 hres = IWebBrowser2_get_Offline(wb, &b);
1749 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1750 ok(b == VARIANT_TRUE, "b=%x\n", b);
1752 hres = IWebBrowser2_put_Offline(wb, VARIANT_FALSE);
1753 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1755 b = 100;
1756 hres = IWebBrowser2_get_Offline(wb, &b);
1757 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1758 ok(b == VARIANT_FALSE, "b=%x\n", b);
1760 if(is_clientsite) {
1761 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
1762 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1764 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1767 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
1768 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1770 if(is_clientsite)
1771 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1773 b = 100;
1774 hres = IWebBrowser2_get_Offline(wb, &b);
1775 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1776 ok(b == VARIANT_FALSE, "b=%x\n", b);
1779 static void test_ambient_unknown(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1781 HRESULT hres;
1783 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1784 SET_EXPECT(Invoke_AMBIENT_SILENT);
1785 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1786 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1787 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1788 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1790 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_UNKNOWN);
1791 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1793 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1794 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
1795 CHECK_EXPECT(Invoke_AMBIENT_USERMODE);
1796 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
1797 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
1798 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
1800 CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1801 CLEAR_CALLED(Invoke_AMBIENT_SILENT);
1802 CLEAR_CALLED(Invoke_AMBIENT_USERMODE);
1803 CLEAR_CALLED(Invoke_AMBIENT_DLCONTROL);
1804 CLEAR_CALLED(Invoke_AMBIENT_USERAGENT);
1805 CLEAR_CALLED(Invoke_AMBIENT_PALETTE);
1808 static void test_wb_funcs(IUnknown *unk, BOOL is_clientsite)
1810 IWebBrowser2 *wb;
1811 IOleControl *control;
1812 HRESULT hres;
1814 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
1815 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
1817 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1818 ok(hres == S_OK, "Could not get IOleControl interface: %08x\n", hres);
1820 test_Silent(wb, control, is_clientsite);
1821 test_Offline(wb, control, is_clientsite);
1822 test_ambient_unknown(wb, control, is_clientsite);
1824 IWebBrowser_Release(wb);
1825 IOleControl_Release(control);
1828 static void test_GetControlInfo(IUnknown *unk)
1830 IOleControl *control;
1831 CONTROLINFO info;
1832 HRESULT hres;
1834 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1835 ok(hres == S_OK, "Could not get IOleControl: %08x\n", hres);
1836 if(FAILED(hres))
1837 return;
1839 hres = IOleControl_GetControlInfo(control, &info);
1840 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
1841 hres = IOleControl_GetControlInfo(control, NULL);
1842 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
1844 IOleControl_Release(control);
1847 static void test_Extent(IUnknown *unk)
1849 IOleObject *oleobj;
1850 SIZE size, expected;
1851 HRESULT hres;
1852 DWORD dpi_x;
1853 DWORD dpi_y;
1854 HDC hdc;
1856 /* default aspect ratio is 96dpi / 96dpi */
1857 hdc = GetDC(0);
1858 dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
1859 dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
1860 ReleaseDC(0, hdc);
1861 if (dpi_x != 96 || dpi_y != 96)
1862 trace("dpi: %d / %d\n", dpi_y, dpi_y);
1864 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1865 ok(hres == S_OK, "Could not get IOleObkect: %08x\n", hres);
1866 if(FAILED(hres))
1867 return;
1869 size.cx = size.cy = 0xdeadbeef;
1870 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
1871 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1872 /* Default size is 50x20 pixels, in himetric units */
1873 expected.cx = MulDiv( 50, 2540, dpi_x );
1874 expected.cy = MulDiv( 20, 2540, dpi_y );
1875 ok(size.cx == expected.cx && size.cy == expected.cy, "size = {%d %d} (expected %d %d)\n",
1876 size.cx, size.cy, expected.cx, expected.cy );
1878 size.cx = 800;
1879 size.cy = 700;
1880 hres = IOleObject_SetExtent(oleobj, DVASPECT_CONTENT, &size);
1881 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
1883 size.cx = size.cy = 0xdeadbeef;
1884 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
1885 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1886 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
1888 size.cx = size.cy = 0xdeadbeef;
1889 hres = IOleObject_GetExtent(oleobj, 0, &size);
1890 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1891 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
1893 size.cx = 900;
1894 size.cy = 800;
1895 hres = IOleObject_SetExtent(oleobj, 0, &size);
1896 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
1898 size.cx = size.cy = 0xdeadbeef;
1899 hres = IOleObject_GetExtent(oleobj, 0, &size);
1900 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1901 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
1903 size.cx = size.cy = 0xdeadbeef;
1904 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
1905 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1906 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
1908 size.cx = 1000;
1909 size.cy = 900;
1910 hres = IOleObject_SetExtent(oleobj, 0xdeadbeef, &size);
1911 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
1913 size.cx = size.cy = 0xdeadbeef;
1914 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
1915 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1916 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
1918 size.cx = size.cy = 0xdeadbeef;
1919 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
1920 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
1921 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
1923 IOleObject_Release(oleobj);
1926 static void test_ConnectionPoint(IUnknown *unk, BOOL init)
1928 IConnectionPointContainer *container;
1929 IConnectionPoint *point;
1930 HRESULT hres;
1932 static DWORD dw = 100;
1934 hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container);
1935 ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres);
1936 if(FAILED(hres))
1937 return;
1939 hres = IConnectionPointContainer_FindConnectionPoint(container, &DIID_DWebBrowserEvents2, &point);
1940 IConnectionPointContainer_Release(container);
1941 ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres);
1942 if(FAILED(hres))
1943 return;
1945 if(init) {
1946 hres = IConnectionPoint_Advise(point, (IUnknown*)&WebBrowserEvents2, &dw);
1947 ok(hres == S_OK, "Advise failed: %08x\n", hres);
1948 ok(dw == 1, "dw=%d, expected 1\n", dw);
1949 }else {
1950 hres = IConnectionPoint_Unadvise(point, dw);
1951 ok(hres == S_OK, "Unadvise failed: %08x\n", hres);
1954 IConnectionPoint_Release(point);
1957 static void test_Navigate2(IUnknown *unk)
1959 IWebBrowser2 *webbrowser;
1960 VARIANT url;
1961 HRESULT hres;
1963 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&webbrowser);
1964 ok(hres == S_OK, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres);
1965 if(FAILED(hres))
1966 return;
1968 test_LocationURL(unk, emptyW);
1970 V_VT(&url) = VT_BSTR;
1971 V_BSTR(&url) = SysAllocString(about_blankW);
1973 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1974 SET_EXPECT(Invoke_PROPERTYCHANGE);
1975 SET_EXPECT(Invoke_BEFORENAVIGATE2);
1976 SET_EXPECT(Invoke_DOWNLOADBEGIN);
1977 SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
1978 SET_EXPECT(EnableModeless_FALSE);
1979 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
1980 SET_EXPECT(SetStatusText);
1981 SET_EXPECT(GetHostInfo);
1982 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1983 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1984 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1985 SET_EXPECT(GetOptionKeyPath);
1986 SET_EXPECT(GetOverridesKeyPath);
1987 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
1988 SET_EXPECT(Exec_SETPROGRESSMAX);
1989 SET_EXPECT(Exec_SETPROGRESSPOS);
1990 SET_EXPECT(Invoke_SETSECURELOCKICON);
1991 SET_EXPECT(Invoke_FILEDOWNLOAD);
1992 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
1993 SET_EXPECT(Invoke_COMMANDSTATECHANGE);
1994 SET_EXPECT(EnableModeless_TRUE);
1996 hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
1997 ok(hres == S_OK, "Navigate2 failed: %08x\n", hres);
1999 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
2000 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
2001 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
2002 todo_wine CHECK_CALLED(Invoke_DOWNLOADBEGIN);
2003 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
2004 CHECK_CALLED(EnableModeless_FALSE);
2005 CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
2006 CHECK_CALLED(SetStatusText);
2007 CHECK_CALLED(GetHostInfo);
2008 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
2009 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
2010 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
2011 CHECK_CALLED(GetOptionKeyPath);
2012 CHECK_CALLED_BROKEN(GetOverridesKeyPath);
2013 todo_wine CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
2014 todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
2015 todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
2016 todo_wine CHECK_CALLED_BROKEN(Invoke_SETSECURELOCKICON);
2017 todo_wine CHECK_CALLED_BROKEN(Invoke_FILEDOWNLOAD);
2018 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
2019 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
2020 CHECK_CALLED(EnableModeless_TRUE);
2022 VariantClear(&url);
2023 IWebBrowser2_Release(webbrowser);
2026 static void test_IServiceProvider(IUnknown *unk)
2028 IServiceProvider *servprov = (void*)0xdeadbeef;
2029 HRESULT hres;
2030 IUnknown *ret = NULL;
2031 static const IID IID_IBrowserService2 =
2032 {0x68BD21CC,0x438B,0x11d2,{0xA5,0x60,0x00,0xA0,0xC,0x2D,0xBF,0xE8}};
2034 hres = IUnknown_QueryInterface(unk, &IID_IServiceProvider, (void**)&servprov);
2035 ok(hres == S_OK, "QueryInterface returned %08x, expected S_OK\n", hres);
2036 if(FAILED(hres))
2037 return;
2039 hres = IServiceProvider_QueryService(servprov, &SID_STopLevelBrowser, &IID_IBrowserService2, (LPVOID*)&ret);
2040 ok(hres == E_FAIL, "QueryService returned %08x, expected E_FAIL\n", hres);
2041 ok(ret == NULL, "ret returned %p, expected NULL\n", ret);
2042 if(hres == S_OK)
2044 IUnknown_Release(ret);
2047 IServiceProvider_Release(servprov);
2050 static void test_QueryInterface(IUnknown *unk)
2052 IQuickActivate *qa = (IQuickActivate*)0xdeadbeef;
2053 IRunnableObject *runnable = (IRunnableObject*)0xdeadbeef;
2054 IPerPropertyBrowsing *propbrowse = (void*)0xdeadbeef;
2055 IOleInPlaceSite *inplace = (void*)0xdeadbeef;
2056 IOleCache *cache = (void*)0xdeadbeef;
2057 IObjectWithSite *site = (void*)0xdeadbeef;
2058 IViewObjectEx *viewex = (void*)0xdeadbeef;
2059 HRESULT hres;
2061 hres = IUnknown_QueryInterface(unk, &IID_IQuickActivate, (void**)&qa);
2062 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2063 ok(qa == NULL, "qa=%p, expected NULL\n", qa);
2065 hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&runnable);
2066 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2067 ok(runnable == NULL, "runnable=%p, expected NULL\n", runnable);
2069 hres = IUnknown_QueryInterface(unk, &IID_IPerPropertyBrowsing, (void**)&propbrowse);
2070 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2071 ok(propbrowse == NULL, "propbrowse=%p, expected NULL\n", propbrowse);
2073 hres = IUnknown_QueryInterface(unk, &IID_IOleCache, (void**)&cache);
2074 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2075 ok(cache == NULL, "cache=%p, expected NULL\n", cache);
2077 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceSite, (void**)&inplace);
2078 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2079 ok(inplace == NULL, "inplace=%p, expected NULL\n", inplace);
2081 hres = IUnknown_QueryInterface(unk, &IID_IObjectWithSite, (void**)&site);
2082 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2083 ok(site == NULL, "site=%p, expected NULL\n", site);
2085 hres = IUnknown_QueryInterface(unk, &IID_IViewObjectEx, (void**)&viewex);
2086 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2087 ok(viewex == NULL, "viewex=%p, expected NULL\n", viewex);
2091 static void test_WebBrowser(void)
2093 IUnknown *unk = NULL;
2094 ULONG ref;
2095 HRESULT hres;
2097 hres = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
2098 &IID_IUnknown, (void**)&unk);
2099 ok(hres == S_OK, "CoCreateInterface failed: %08x\n", hres);
2100 if(FAILED(hres))
2101 return;
2103 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
2104 ok(hres == S_OK, "Could not get IWebBrowser2 iface: %08x\n", hres);
2106 test_QueryInterface(unk);
2107 test_ClassInfo(unk);
2108 test_LocationURL(unk, emptyW);
2109 test_ConnectionPoint(unk, TRUE);
2110 test_ClientSite(unk, &ClientSite);
2111 test_Extent(unk);
2112 test_wb_funcs(unk, TRUE);
2113 test_DoVerb(unk);
2114 test_Navigate2(unk);
2115 test_ClientSite(unk, NULL);
2116 test_ie_funcs(unk);
2117 test_GetControlInfo(unk);
2118 test_wb_funcs(unk, FALSE);
2119 test_ConnectionPoint(unk, FALSE);
2120 test_IServiceProvider(unk);
2122 IWebBrowser2_Release(wb);
2123 ref = IUnknown_Release(unk);
2124 ok(ref == 0, "ref=%d, expected 0\n", ref);
2127 static void gecko_installer_workaround(BOOL disable)
2129 HKEY hkey;
2130 DWORD res;
2132 static BOOL has_url = FALSE;
2133 static char url[2048];
2135 if(!disable && !has_url)
2136 return;
2138 res = RegOpenKey(HKEY_CURRENT_USER, "Software\\Wine\\MSHTML", &hkey);
2139 if(res != ERROR_SUCCESS)
2140 return;
2142 if(disable) {
2143 DWORD type, size = sizeof(url);
2145 res = RegQueryValueEx(hkey, "GeckoUrl", NULL, &type, (PVOID)url, &size);
2146 if(res == ERROR_SUCCESS && type == REG_SZ)
2147 has_url = TRUE;
2149 RegDeleteValue(hkey, "GeckoUrl");
2150 }else {
2151 RegSetValueEx(hkey, "GeckoUrl", 0, REG_SZ, (PVOID)url, lstrlenA(url)+1);
2154 RegCloseKey(hkey);
2157 START_TEST(webbrowser)
2159 gecko_installer_workaround(TRUE);
2161 container_hwnd = create_container_window();
2163 OleInitialize(NULL);
2165 test_WebBrowser();
2167 OleUninitialize();
2169 gecko_installer_workaround(FALSE);