2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <wine/test.h>
43 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
44 DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0);
46 #define DEFINE_EXPECT(func) \
47 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
49 #define SET_EXPECT(func) \
50 expect_ ## func = TRUE
52 #define CHECK_EXPECT2(func) \
54 ok(expect_ ##func, "unexpected call " #func "\n"); \
55 called_ ## func = TRUE; \
58 #define CHECK_EXPECT(func) \
60 CHECK_EXPECT2(func); \
61 expect_ ## func = FALSE; \
64 #define CHECK_CALLED(func) \
66 ok(called_ ## func, "expected " #func "\n"); \
67 expect_ ## func = called_ ## func = FALSE; \
70 #define CLEAR_CALLED(func) \
71 expect_ ## func = called_ ## func = FALSE
73 DEFINE_EXPECT(GetContainer);
74 DEFINE_EXPECT(Site_GetWindow);
75 DEFINE_EXPECT(ShowObject);
76 DEFINE_EXPECT(CanInPlaceActivate);
77 DEFINE_EXPECT(OnInPlaceActivate);
78 DEFINE_EXPECT(OnUIActivate);
79 DEFINE_EXPECT(GetWindowContext);
80 DEFINE_EXPECT(Frame_GetWindow);
81 DEFINE_EXPECT(Frame_SetActiveObject);
82 DEFINE_EXPECT(UIWindow_SetActiveObject);
83 DEFINE_EXPECT(SetMenu);
84 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
85 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
86 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
87 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
88 DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
89 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
90 DEFINE_EXPECT(Invoke_STATUSTEXTCHANGE);
91 DEFINE_EXPECT(Invoke_PROPERTYCHANGE);
92 DEFINE_EXPECT(Invoke_DOWNLOADBEGIN);
93 DEFINE_EXPECT(Invoke_BEFORENAVIGATE2);
94 DEFINE_EXPECT(Invoke_SETSECURELOCKICON);
95 DEFINE_EXPECT(Invoke_FILEDOWNLOAD);
96 DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE);
97 DEFINE_EXPECT(Invoke_DOWNLOADCOMPLETE);
98 DEFINE_EXPECT(Invoke_ONMENUBAR);
99 DEFINE_EXPECT(Invoke_ONADDRESSBAR);
100 DEFINE_EXPECT(Invoke_ONSTATUSBAR);
101 DEFINE_EXPECT(Invoke_ONTOOLBAR);
102 DEFINE_EXPECT(Invoke_ONFULLSCREEN);
103 DEFINE_EXPECT(Invoke_ONTHEATERMODE);
104 DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE);
105 DEFINE_EXPECT(Invoke_TITLECHANGE);
106 DEFINE_EXPECT(Invoke_NAVIGATECOMPLETE2);
107 DEFINE_EXPECT(Invoke_PROGRESSCHANGE);
108 DEFINE_EXPECT(Invoke_DOCUMENTCOMPLETE);
109 DEFINE_EXPECT(Invoke_282);
110 DEFINE_EXPECT(EnableModeless_TRUE);
111 DEFINE_EXPECT(EnableModeless_FALSE);
112 DEFINE_EXPECT(GetHostInfo);
113 DEFINE_EXPECT(GetOptionKeyPath);
114 DEFINE_EXPECT(GetOverridesKeyPath);
115 DEFINE_EXPECT(SetStatusText);
116 DEFINE_EXPECT(UpdateUI);
117 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0);
118 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
119 DEFINE_EXPECT(Exec_SETPROGRESSMAX);
120 DEFINE_EXPECT(Exec_SETPROGRESSPOS);
121 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
122 DEFINE_EXPECT(QueryStatus_STOP);
123 DEFINE_EXPECT(DocHost_EnableModeless_TRUE);
124 DEFINE_EXPECT(DocHost_EnableModeless_FALSE);
125 DEFINE_EXPECT(GetDropTarget);
126 DEFINE_EXPECT(TranslateUrl);
128 static const WCHAR wszItem[] = {'i','t','e','m',0};
129 static const WCHAR emptyW[] = {0};
131 static VARIANT_BOOL exvb;
132 static IWebBrowser2 *wb;
134 static HWND container_hwnd, shell_embedding_hwnd;
135 static BOOL is_downloading, is_first_load;
136 static const char *current_url;
138 #define DWL_EXPECT_BEFORE_NAVIGATE 0x01
139 #define DWL_FROM_PUT_HREF 0x02
141 static DWORD dwl_flags;
143 static int strcmp_wa(LPCWSTR strw, const char *stra)
146 WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
147 return lstrcmpA(stra, buf);
150 static const char *debugstr_guid(REFIID riid)
154 sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
155 riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
156 riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
157 riid->Data4[5], riid->Data4[6], riid->Data4[7]);
162 static BSTR a2bstr(const char *str)
167 len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
168 ret = SysAllocStringLen(NULL, len);
169 MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
174 #define test_LocationURL(a,b) _test_LocationURL(__LINE__,a,b)
175 static void _test_LocationURL(unsigned line, IUnknown *unk, const char *exurl)
178 BSTR url = (void*)0xdeadbeef;
181 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
182 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
186 hres = IWebBrowser2_get_LocationURL(wb, &url);
187 ok_(__FILE__,line) (hres == (*exurl ? S_OK : S_FALSE), "get_LocationURL failed: %08x\n", hres);
188 ok_(__FILE__,line) (!strcmp_wa(url, exurl), "unexpected URL: %s\n", wine_dbgstr_w(url));
191 IWebBrowser2_Release(wb);
194 #define test_ready_state(ex) _test_ready_state(__LINE__,ex);
195 static void _test_ready_state(unsigned line, READYSTATE exstate)
200 hres = IWebBrowser2_get_ReadyState(wb, &state);
201 ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08x\n", hres);
202 ok_(__FILE__,line)(state == exstate, "ReadyState = %d, expected %d\n", state, exstate);
205 static HRESULT QueryInterface(REFIID,void**);
207 static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface,
208 REFIID riid, void **ppv)
210 ok(0, "unexpected call\n");
211 return E_NOINTERFACE;
214 static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
219 static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
224 static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
225 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
227 ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n");
228 ok(cCmds == 1, "cCmds=%d, expected 1\n", cCmds);
229 ok(!pCmdText, "pCmdText != NULL\n");
231 switch(prgCmds[0].cmdID) {
233 CHECK_EXPECT2(QueryStatus_STOP);
234 prgCmds[0].cmdf = OLECMDF_SUPPORTED;
236 case OLECMDID_SETPROGRESSTEXT:
237 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
238 prgCmds[0].cmdf = OLECMDF_ENABLED;
241 ok(0, "unexpected command %d\n", prgCmds[0].cmdID);
247 static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
248 DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
252 case OLECMDID_SETPROGRESSMAX:
253 CHECK_EXPECT2(Exec_SETPROGRESSMAX);
254 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
255 ok(pvaIn != NULL, "pvaIn == NULL\n");
257 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
258 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
260 case OLECMDID_SETPROGRESSPOS:
261 CHECK_EXPECT2(Exec_SETPROGRESSPOS);
262 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
263 ok(pvaIn != NULL, "pvaIn == NULL\n");
265 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
266 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
268 case OLECMDID_SETDOWNLOADSTATE:
270 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER || !nCmdexecopt,
271 "nCmdexecopts=%08x\n", nCmdexecopt);
273 ok(!nCmdexecopt, "nCmdexecopts=%08x\n", nCmdexecopt);
274 ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut);
275 ok(pvaIn != NULL, "pvaIn == NULL\n");
276 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d\n", V_VT(pvaIn));
277 switch(V_I4(pvaIn)) {
279 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_0);
282 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1);
285 ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn));
289 ok(0, "unexpected nsCmdID %d\n", nCmdID);
291 }else if(IsEqualGUID(&CGID_Explorer, pguidCmdGroup)) {
300 case 101: /* TODO (IE8) */
303 ok(0, "unexpected nCmdID %d\n", nCmdID);
305 }else if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) {
308 case 140: /* TODO (Win7) */
311 ok(0, "unexpected nCmdID %d\n", nCmdID);
313 }else if(IsEqualGUID(&CGID_DocHostCmdPriv, pguidCmdGroup)) {
318 ok(0, "unexpected nCmdID %d of CGID_DocHostCmdPriv\n", nCmdID);
321 ok(0, "unexpected pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup));
327 static IOleCommandTargetVtbl OleCommandTargetVtbl = {
328 OleCommandTarget_QueryInterface,
329 OleCommandTarget_AddRef,
330 OleCommandTarget_Release,
331 OleCommandTarget_QueryStatus,
332 OleCommandTarget_Exec
335 static IOleCommandTarget OleCommandTarget = { &OleCommandTargetVtbl };
337 static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
339 if(IsEqualGUID(&IID_ITargetContainer, riid))
340 return E_NOINTERFACE; /* TODO */
342 if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
343 *ppv = &OleCommandTarget;
347 ok(0, "unexpected call\n");
348 return E_NOINTERFACE;
351 static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
356 static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
361 static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc,
362 LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut)
364 ok(0, "unexpected call\n");
368 static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags,
369 IEnumUnknown **ppenum)
371 ok(0, "unexpected call\n");
375 static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
377 ok(0, "unexpected call\n");
381 static const IOleContainerVtbl OleContainerVtbl = {
382 OleContainer_QueryInterface,
384 OleContainer_Release,
385 OleContainer_ParseDisplayName,
386 OleContainer_EnumObjects,
387 OleContainer_LockContainer
390 static IOleContainer OleContainer = { &OleContainerVtbl };
392 static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
394 return QueryInterface(riid, ppv);
397 static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
402 static ULONG WINAPI Dispatch_Release(IDispatch *iface)
407 static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
409 ok(0, "unexpected call\n");
413 static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
416 ok(0, "unexpected call\n");
420 static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
421 UINT cNames, LCID lcid, DISPID *rgDispId)
423 ok(0, "unexpected call\n");
427 static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
428 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
429 EXCEPINFO *pExcepInfo, UINT *puArgErr)
431 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
432 ok(pDispParams != NULL, "pDispParams == NULL\n");
433 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
434 ok(V_VT(pVarResult) == VT_EMPTY, "V_VT(pVarResult)=%d\n", V_VT(pVarResult));
435 ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
436 ok(pDispParams->rgvarg == NULL, "pDispParams->rgvarg = %p\n", pDispParams->rgvarg);
437 ok(pDispParams->rgdispidNamedArgs == NULL,
438 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
439 ok(pDispParams->cArgs == 0, "pDispParams->cArgs = %d\n", pDispParams->cArgs);
440 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
442 switch(dispIdMember) {
443 case DISPID_AMBIENT_USERMODE:
444 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
446 case DISPID_AMBIENT_DLCONTROL:
447 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
448 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
450 case DISPID_AMBIENT_USERAGENT:
451 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
452 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
454 case DISPID_AMBIENT_PALETTE:
455 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
456 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
458 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
459 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
460 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
461 V_VT(pVarResult) = VT_BOOL;
462 V_BOOL(pVarResult) = VARIANT_FALSE;
464 case DISPID_AMBIENT_SILENT:
465 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
466 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
467 V_VT(pVarResult) = VT_BOOL;
468 V_BOOL(pVarResult) = VARIANT_FALSE;
472 ok(0, "unexpected dispIdMember %d\n", dispIdMember);
476 static IDispatchVtbl DispatchVtbl = {
477 Dispatch_QueryInterface,
480 Dispatch_GetTypeInfoCount,
481 Dispatch_GetTypeInfo,
482 Dispatch_GetIDsOfNames,
486 static IDispatch Dispatch = { &DispatchVtbl };
488 static HRESULT WINAPI WebBrowserEvents2_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
492 if(IsEqualGUID(&DIID_DWebBrowserEvents2, riid)) {
497 ok(0, "unexpected riid %s\n", debugstr_guid(riid));
498 return E_NOINTERFACE;
501 #define test_invoke_bool(p,s) _test_invoke_bool(__LINE__,p,s)
502 static void _test_invoke_bool(unsigned line, const DISPPARAMS *params, BOOL strict)
504 ok_(__FILE__,line) (params->rgvarg != NULL, "rgvarg == NULL\n");
505 ok_(__FILE__,line) (params->cArgs == 1, "cArgs=%d, expected 1\n", params->cArgs);
506 ok_(__FILE__,line) (V_VT(params->rgvarg) == VT_BOOL, "V_VT(arg)=%d\n", V_VT(params->rgvarg));
508 ok_(__FILE__,line) (V_BOOL(params->rgvarg) == exvb, "V_VT(arg)=%x, expected %x\n",
509 V_BOOL(params->rgvarg), exvb);
511 ok_(__FILE__,line) (!V_BOOL(params->rgvarg) == !exvb, "V_VT(arg)=%x, expected %x\n",
512 V_BOOL(params->rgvarg), exvb);
515 static void test_OnBeforeNavigate(const VARIANT *disp, const VARIANT *url, const VARIANT *flags,
516 const VARIANT *frame, const VARIANT *post_data, const VARIANT *headers, const VARIANT *cancel)
518 ok(V_VT(disp) == VT_DISPATCH, "V_VT(disp)=%d, expected VT_DISPATCH\n", V_VT(disp));
519 ok(V_DISPATCH(disp) != NULL, "V_DISPATCH(disp) == NULL\n");
520 ok(V_DISPATCH(disp) == (IDispatch*)wb, "V_DISPATCH(disp)=%p, wb=%p\n", V_DISPATCH(disp), wb);
522 ok(V_VT(url) == (VT_BYREF|VT_VARIANT), "V_VT(url)=%x, expected VT_BYREF|VT_VARIANT\n", V_VT(url));
523 ok(V_VARIANTREF(url) != NULL, "V_VARIANTREF(url) == NULL)\n");
524 if(V_VARIANTREF(url)) {
525 ok(V_VT(V_VARIANTREF(url)) == VT_BSTR, "V_VT(V_VARIANTREF(url))=%d, expected VT_BSTR\n",
526 V_VT(V_VARIANTREF(url)));
527 ok(V_BSTR(V_VARIANTREF(url)) != NULL, "V_BSTR(V_VARIANTREF(url)) == NULL\n");
528 ok(!strcmp_wa(V_BSTR(V_VARIANTREF(url)), current_url), "unexpected url %s, expected %s\n",
529 wine_dbgstr_w(V_BSTR(V_VARIANTREF(url))), current_url);
532 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
534 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
536 ok(V_VARIANTREF(flags) != NULL, "V_VARIANTREF(flags) == NULL)\n");
537 if(V_VARIANTREF(flags)) {
538 ok(V_VT(V_VARIANTREF(flags)) == VT_I4, "V_VT(V_VARIANTREF(flags))=%d, expected VT_I4\n",
539 V_VT(V_VARIANTREF(flags)));
541 ok(V_I4(V_VARIANTREF(flags)) == 0, "V_I4(V_VARIANTREF(flags)) = %x, expected 0\n",
542 V_I4(V_VARIANTREF(flags)));
544 ok((V_I4(V_VARIANTREF(flags)) & ~0x40) == 0, "V_I4(V_VARIANTREF(flags)) = %x, expected 0x40 or 0\n",
545 V_I4(V_VARIANTREF(flags)));
549 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
551 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
553 ok(V_VARIANTREF(frame) != NULL, "V_VARIANTREF(frame) == NULL)\n");
554 if(V_VARIANTREF(frame)) {
555 ok(V_VT(V_VARIANTREF(frame)) == VT_BSTR, "V_VT(V_VARIANTREF(frame))=%d, expected VT_BSTR\n",
556 V_VT(V_VARIANTREF(frame)));
557 ok(V_BSTR(V_VARIANTREF(frame)) == NULL, "V_BSTR(V_VARIANTREF(frame)) = %p, expected NULL\n",
558 V_BSTR(V_VARIANTREF(frame)));
561 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
563 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
565 ok(V_VARIANTREF(post_data) != NULL, "V_VARIANTREF(post_data) == NULL)\n");
566 if(V_VARIANTREF(post_data)) {
567 ok(V_VT(V_VARIANTREF(post_data)) == (VT_VARIANT|VT_BYREF),
568 "V_VT(V_VARIANTREF(post_data))=%d, expected VT_VARIANT|VT_BYREF\n",
569 V_VT(V_VARIANTREF(post_data)));
570 ok(V_VARIANTREF(V_VARIANTREF(post_data)) != NULL,
571 "V_VARIANTREF(V_VARIANTREF(post_data)) == NULL\n");
572 if(V_VARIANTREF(V_VARIANTREF(post_data))) {
573 ok(V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) == VT_EMPTY,
574 "V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) = %d, expected VT_EMPTY\n",
575 V_VT(V_VARIANTREF(V_VARIANTREF(post_data))));
577 if(V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) == (VT_UI1|VT_ARRAY)) {
578 const SAFEARRAY *sa = V_ARRAY(V_VARIANTREF(V_VARIANTREF(post_data)));
580 ok(sa->cDims == 1, "sa->cDims = %d, expected 1\n", sa->cDims);
581 ok(sa->fFeatures == 0, "sa->fFeatures = %d, expected 0\n", sa->fFeatures);
586 ok(V_VT(headers) == (VT_BYREF|VT_VARIANT), "V_VT(headers)=%x, expected VT_BYREF|VT_VARIANT\n",
588 ok(V_VARIANTREF(headers) != NULL, "V_VARIANTREF(headers) == NULL)\n");
589 if(V_VARIANTREF(headers)) {
590 ok(V_VT(V_VARIANTREF(headers)) == VT_BSTR, "V_VT(V_VARIANTREF(headers))=%d, expected VT_BSTR\n",
591 V_VT(V_VARIANTREF(headers)));
592 ok(V_BSTR(V_VARIANTREF(headers)) == NULL, "V_BSTR(V_VARIANTREF(heders)) = %p, expected NULL\n",
593 V_BSTR(V_VARIANTREF(headers)));
596 ok(V_VT(cancel) == (VT_BYREF|VT_BOOL), "V_VT(cancel)=%x, expected VT_BYREF|VT_BOOL\n",
598 ok(V_BOOLREF(cancel) != NULL, "V_BOOLREF(pDispParams->rgvarg[0] == NULL)\n");
599 if(V_BOOLREF(cancel))
600 ok(*V_BOOLREF(cancel) == VARIANT_FALSE, "*V_BOOLREF(calcel) = %x, expected VARIANT_FALSE\n",
604 static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
605 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
606 EXCEPINFO *pExcepInfo, UINT *puArgErr)
608 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
609 ok(pDispParams != NULL, "pDispParams == NULL\n");
610 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
611 ok(pVarResult == NULL, "pVarResult=%p\n", pVarResult);
612 ok(wFlags == DISPATCH_METHOD, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags);
613 ok(pDispParams->rgdispidNamedArgs == NULL,
614 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
615 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
617 switch(dispIdMember) {
618 case DISPID_STATUSTEXTCHANGE:
619 CHECK_EXPECT2(Invoke_STATUSTEXTCHANGE);
621 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
622 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
623 ok(V_VT(pDispParams->rgvarg) == VT_BSTR, "V_VT(pDispParams->rgvarg)=%d, expected VT_BSTR\n",
624 V_VT(pDispParams->rgvarg));
625 /* TODO: Check text */
628 case DISPID_PROPERTYCHANGE:
629 CHECK_EXPECT2(Invoke_PROPERTYCHANGE);
631 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
632 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
633 /* TODO: Check args */
636 case DISPID_DOWNLOADBEGIN:
637 CHECK_EXPECT(Invoke_DOWNLOADBEGIN);
639 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
640 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
641 test_ready_state(READYSTATE_LOADING);
644 case DISPID_BEFORENAVIGATE2:
645 CHECK_EXPECT(Invoke_BEFORENAVIGATE2);
647 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
648 ok(pDispParams->cArgs == 7, "cArgs=%d, expected 7\n", pDispParams->cArgs);
649 test_OnBeforeNavigate(pDispParams->rgvarg+6, pDispParams->rgvarg+5, pDispParams->rgvarg+4,
650 pDispParams->rgvarg+3, pDispParams->rgvarg+2, pDispParams->rgvarg+1,
651 pDispParams->rgvarg);
652 test_ready_state((dwl_flags & DWL_FROM_PUT_HREF) ? READYSTATE_COMPLETE : READYSTATE_LOADING);
655 case DISPID_SETSECURELOCKICON:
656 CHECK_EXPECT2(Invoke_SETSECURELOCKICON);
658 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
659 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
660 /* TODO: Check args */
663 case DISPID_FILEDOWNLOAD:
664 CHECK_EXPECT(Invoke_FILEDOWNLOAD);
666 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
667 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
668 /* TODO: Check args */
671 case DISPID_COMMANDSTATECHANGE:
672 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE);
674 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
675 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
676 /* TODO: Check args */
679 case DISPID_DOWNLOADCOMPLETE:
680 CHECK_EXPECT(Invoke_DOWNLOADCOMPLETE);
682 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
683 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
684 test_ready_state(READYSTATE_LOADING);
687 case DISPID_ONMENUBAR:
688 CHECK_EXPECT(Invoke_ONMENUBAR);
689 test_invoke_bool(pDispParams, TRUE);
692 case DISPID_ONADDRESSBAR:
693 CHECK_EXPECT(Invoke_ONADDRESSBAR);
694 test_invoke_bool(pDispParams, TRUE);
697 case DISPID_ONSTATUSBAR:
698 CHECK_EXPECT(Invoke_ONSTATUSBAR);
699 test_invoke_bool(pDispParams, TRUE);
702 case DISPID_ONTOOLBAR:
703 CHECK_EXPECT(Invoke_ONTOOLBAR);
704 test_invoke_bool(pDispParams, FALSE);
707 case DISPID_ONFULLSCREEN:
708 CHECK_EXPECT(Invoke_ONFULLSCREEN);
709 test_invoke_bool(pDispParams, TRUE);
712 case DISPID_ONTHEATERMODE:
713 CHECK_EXPECT(Invoke_ONTHEATERMODE);
714 test_invoke_bool(pDispParams, TRUE);
717 case DISPID_WINDOWSETRESIZABLE:
718 CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE);
719 test_invoke_bool(pDispParams, TRUE);
722 case DISPID_TITLECHANGE:
723 CHECK_EXPECT2(Invoke_TITLECHANGE);
727 case DISPID_NAVIGATECOMPLETE2:
728 CHECK_EXPECT(Invoke_NAVIGATECOMPLETE2);
730 test_ready_state((dwl_flags & DWL_FROM_PUT_HREF) ? READYSTATE_COMPLETE : READYSTATE_LOADING);
733 case DISPID_PROGRESSCHANGE:
734 CHECK_EXPECT(Invoke_PROGRESSCHANGE);
738 case DISPID_DOCUMENTCOMPLETE:
739 CHECK_EXPECT(Invoke_DOCUMENTCOMPLETE);
741 test_ready_state(READYSTATE_COMPLETE);
744 case 282: /* FIXME */
745 CHECK_EXPECT2(Invoke_282);
749 ok(0, "unexpected dispIdMember %d\n", dispIdMember);
755 static IDispatchVtbl WebBrowserEvents2Vtbl = {
756 WebBrowserEvents2_QueryInterface,
759 Dispatch_GetTypeInfoCount,
760 Dispatch_GetTypeInfo,
761 Dispatch_GetIDsOfNames,
762 WebBrowserEvents2_Invoke
765 static IDispatch WebBrowserEvents2 = { &WebBrowserEvents2Vtbl };
767 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
769 return QueryInterface(riid, ppv);
772 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
777 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
782 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
784 ok(0, "unexpected call\n");
788 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign, DWORD dwWhichMoniker,
791 ok(0, "unexpected call\n");
795 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
797 CHECK_EXPECT(GetContainer);
799 ok(ppContainer != NULL, "ppContainer == NULL\n");
801 *ppContainer = &OleContainer;
806 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
808 CHECK_EXPECT(ShowObject);
812 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
814 ok(0, "unexpected call\n");
818 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
820 ok(0, "unexpected call\n");
824 static const IOleClientSiteVtbl ClientSiteVtbl = {
825 ClientSite_QueryInterface,
828 ClientSite_SaveObject,
829 ClientSite_GetMoniker,
830 ClientSite_GetContainer,
831 ClientSite_ShowObject,
832 ClientSite_OnShowWindow,
833 ClientSite_RequestNewObjectLayout
836 static IOleClientSite ClientSite = { &ClientSiteVtbl };
838 static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceFrame *iface,
839 REFIID riid, void **ppv)
841 ok(0, "unexpected call\n");
842 return E_NOINTERFACE;
845 static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceFrame *iface)
850 static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceFrame *iface)
855 static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
857 ok(0, "unexpected call\n");
861 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
863 CHECK_EXPECT(Frame_GetWindow);
864 ok(phwnd != NULL, "phwnd == NULL\n");
866 *phwnd = container_hwnd;
870 static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
872 ok(0, "unexpected call\n");
876 static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
878 ok(0, "unexpected call\n");
882 static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame *iface,
883 LPCBORDERWIDTHS pborderwidths)
885 ok(0, "unexpected call\n");
889 static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame *iface,
890 LPCBORDERWIDTHS pborderwidths)
892 ok(0, "unexpected call\n");
896 static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface,
897 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
899 CHECK_EXPECT(UIWindow_SetActiveObject);
900 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
901 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
905 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
906 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
908 CHECK_EXPECT(Frame_SetActiveObject);
909 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
910 ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
914 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
915 LPOLEMENUGROUPWIDTHS lpMenuWidths)
917 ok(0, "unexpected call\n");
921 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
922 HOLEMENU holemenu, HWND hwndActiveObject)
924 CHECK_EXPECT(SetMenu);
925 ok(hmenuShared == NULL, "hmenuShared=%p\n", hmenuShared);
926 ok(holemenu == NULL, "holemenu=%p\n", holemenu);
927 ok(hwndActiveObject == shell_embedding_hwnd, "hwndActiveObject=%p, expected %p\n",
928 hwndActiveObject, shell_embedding_hwnd);
932 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
934 ok(0, "unexpected call\n");
938 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
940 CHECK_EXPECT2(SetStatusText);
941 /* FIXME: Check pszStatusText */
945 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
948 CHECK_EXPECT2(EnableModeless_TRUE);
950 CHECK_EXPECT2(EnableModeless_FALSE);
954 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
956 ok(0, "unexpected call\n");
960 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = {
961 InPlaceUIWindow_QueryInterface,
962 InPlaceUIWindow_AddRef,
963 InPlaceUIWindow_Release,
964 InPlaceUIWindow_GetWindow,
965 InPlaceUIWindow_ContextSensitiveHelp,
966 InPlaceUIWindow_GetBorder,
967 InPlaceUIWindow_RequestBorderSpace,
968 InPlaceUIWindow_SetBorderSpace,
969 InPlaceUIWindow_SetActiveObject,
972 static IOleInPlaceUIWindow InPlaceUIWindow = { (IOleInPlaceUIWindowVtbl*)&InPlaceUIWindowVtbl };
974 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
975 InPlaceUIWindow_QueryInterface,
976 InPlaceUIWindow_AddRef,
977 InPlaceUIWindow_Release,
978 InPlaceFrame_GetWindow,
979 InPlaceUIWindow_ContextSensitiveHelp,
980 InPlaceUIWindow_GetBorder,
981 InPlaceUIWindow_RequestBorderSpace,
982 InPlaceUIWindow_SetBorderSpace,
983 InPlaceFrame_SetActiveObject,
984 InPlaceFrame_InsertMenus,
985 InPlaceFrame_SetMenu,
986 InPlaceFrame_RemoveMenus,
987 InPlaceFrame_SetStatusText,
988 InPlaceFrame_EnableModeless,
989 InPlaceFrame_TranslateAccelerator
992 static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
994 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
996 return QueryInterface(riid, ppv);
999 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface)
1004 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface)
1009 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd)
1011 CHECK_EXPECT(Site_GetWindow);
1012 ok(phwnd != NULL, "phwnd == NULL\n");
1014 *phwnd = container_hwnd;
1018 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode)
1020 ok(0, "unexpected call\n");
1024 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface)
1026 CHECK_EXPECT(CanInPlaceActivate);
1030 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface)
1032 CHECK_EXPECT(OnInPlaceActivate);
1036 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface)
1038 CHECK_EXPECT(OnUIActivate);
1042 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface,
1043 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
1044 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
1046 static const RECT pos_rect = {2,1,1002,901};
1047 static const RECT clip_rect = {10,10,990,890};
1049 CHECK_EXPECT(GetWindowContext);
1051 ok(ppFrame != NULL, "ppFrame = NULL\n");
1053 *ppFrame = &InPlaceFrame;
1055 ok(ppDoc != NULL, "ppDoc = NULL\n");
1057 *ppDoc = &InPlaceUIWindow;
1059 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
1061 memcpy(lprcPosRect, &pos_rect, sizeof(RECT));
1063 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
1065 memcpy(lprcClipRect, &clip_rect, sizeof(RECT));
1067 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
1069 lpFrameInfo->cb = sizeof(*lpFrameInfo);
1070 lpFrameInfo->fMDIApp = FALSE;
1071 lpFrameInfo->hwndFrame = container_hwnd;
1072 lpFrameInfo->haccel = NULL;
1073 lpFrameInfo->cAccelEntries = 0;
1079 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
1081 ok(0, "unexpected call\n");
1085 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable)
1087 ok(0, "unexpected call\n");
1091 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface)
1093 ok(0, "unexpected call\n");
1097 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface)
1099 ok(0, "unexpected call\n");
1103 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface)
1105 ok(0, "unexpected call\n");
1109 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect)
1111 ok(0, "unexpected call\n");
1115 static HRESULT WINAPI InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface,
1116 BOOL *pNoRedraw, DWORD dwFlags)
1118 ok(0, "unexpected call\n");
1122 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface,
1125 ok(0, "unexpected call\n");
1129 static HRESULT WINAPI InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx *iface)
1131 ok(0, "unexpected call\n");
1135 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl = {
1136 InPlaceSite_QueryInterface,
1138 InPlaceSite_Release,
1139 InPlaceSite_GetWindow,
1140 InPlaceSite_ContextSensitiveHelp,
1141 InPlaceSite_CanInPlaceActivate,
1142 InPlaceSite_OnInPlaceActivate,
1143 InPlaceSite_OnUIActivate,
1144 InPlaceSite_GetWindowContext,
1146 InPlaceSite_OnUIDeactivate,
1147 InPlaceSite_OnInPlaceDeactivate,
1148 InPlaceSite_DiscardUndoState,
1149 InPlaceSite_DeactivateAndUndo,
1150 InPlaceSite_OnPosRectChange,
1151 InPlaceSite_OnInPlaceActivateEx,
1152 InPlaceSite_OnInPlaceDeactivateEx,
1153 InPlaceSite_RequestUIActivate
1156 static IOleInPlaceSiteEx InPlaceSite = { &InPlaceSiteExVtbl };
1158 static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
1160 return QueryInterface(riid, ppv);
1163 static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
1168 static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
1173 static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt,
1174 IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
1176 ok(0, "unexpected call %d %p %p %p\n", dwID, ppt, pcmdtReserved, pdicpReserved);
1180 static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
1182 CHECK_EXPECT2(GetHostInfo);
1183 ok(pInfo != NULL, "pInfo=NULL\n");
1185 ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO) || broken(!pInfo->cbSize), "pInfo->cbSize=%u\n", pInfo->cbSize);
1186 ok(!pInfo->dwFlags, "pInfo->dwFlags=%08x, expected 0\n", pInfo->dwFlags);
1187 ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo->dwDoubleClick);
1188 ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
1189 ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
1194 static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID,
1195 IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
1196 IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
1198 ok(0, "unexpected call\n");
1202 static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
1204 ok(0, "unexpected call\n");
1208 static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
1210 CHECK_EXPECT(UpdateUI);
1214 static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
1217 CHECK_EXPECT(DocHost_EnableModeless_TRUE);
1219 CHECK_EXPECT(DocHost_EnableModeless_FALSE);
1224 static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
1226 ok(0, "unexpected call\n");
1230 static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
1232 ok(0, "unexpected call\n");
1236 static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder,
1237 IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
1239 ok(0, "unexpected call\n");
1243 static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg,
1244 const GUID *pguidCmdGroup, DWORD nCmdID)
1246 ok(0, "unexpected call\n");
1250 static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface,
1251 LPOLESTR *pchKey, DWORD dw)
1253 CHECK_EXPECT(GetOptionKeyPath);
1254 ok(pchKey != NULL, "pchKey==NULL\n");
1256 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1257 ok(!dw, "dw=%x\n", dw);
1261 static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
1262 IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
1264 CHECK_EXPECT(GetDropTarget);
1268 static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
1270 ok(0, "unexpected call\n");
1274 static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
1275 OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
1277 if(is_downloading && !(dwl_flags & DWL_EXPECT_BEFORE_NAVIGATE))
1278 todo_wine CHECK_EXPECT(TranslateUrl);
1280 CHECK_EXPECT(TranslateUrl);
1284 static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
1285 IDataObject **ppPORet)
1287 ok(0, "unexpected call\n");
1291 static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface,
1292 LPOLESTR *pchKey, DWORD dw)
1294 CHECK_EXPECT(GetOverridesKeyPath);
1295 ok(pchKey != NULL, "pchKey==NULL\n");
1297 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1298 ok(!dw, "dw=%x\n", dw);
1302 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = {
1303 DocHostUIHandler_QueryInterface,
1304 DocHostUIHandler_AddRef,
1305 DocHostUIHandler_Release,
1306 DocHostUIHandler_ShowContextMenu,
1307 DocHostUIHandler_GetHostInfo,
1308 DocHostUIHandler_ShowUI,
1309 DocHostUIHandler_HideUI,
1310 DocHostUIHandler_UpdateUI,
1311 DocHostUIHandler_EnableModeless,
1312 DocHostUIHandler_OnDocWindowActivate,
1313 DocHostUIHandler_OnFrameWindowActivate,
1314 DocHostUIHandler_ResizeBorder,
1315 DocHostUIHandler_TranslateAccelerator,
1316 DocHostUIHandler_GetOptionKeyPath,
1317 DocHostUIHandler_GetDropTarget,
1318 DocHostUIHandler_GetExternal,
1319 DocHostUIHandler_TranslateUrl,
1320 DocHostUIHandler_FilterDataObject,
1321 DocHostUIHandler_GetOverrideKeyPath
1324 static IDocHostUIHandler2 DocHostUIHandler = { &DocHostUIHandlerVtbl };
1327 static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
1329 return QueryInterface(riid, ppv);
1332 static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
1337 static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
1342 static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface,
1343 REFGUID guidService, REFIID riid, void **ppv)
1347 if(!winetest_interactive)
1348 return E_NOINTERFACE;
1350 if (IsEqualGUID(&SID_STopLevelBrowser, guidService))
1351 trace("Service SID_STopLevelBrowser\n");
1352 else if (IsEqualGUID(&SID_SEditCommandTarget, guidService))
1353 trace("Service SID_SEditCommandTarget\n");
1354 else if (IsEqualGUID(&IID_ITargetFrame2, guidService))
1355 trace("Service IID_ITargetFrame2\n");
1356 else if (IsEqualGUID(&SID_SInternetSecurityManager, guidService))
1357 trace("Service SID_SInternetSecurityManager\n");
1358 else if (IsEqualGUID(&SID_SOleUndoManager, guidService))
1359 trace("Service SID_SOleUndoManager\n");
1360 else if (IsEqualGUID(&SID_IMimeInfo, guidService))
1361 trace("Service SID_IMimeInfo\n");
1362 else if (IsEqualGUID(&SID_STopWindow, guidService))
1363 trace("Service SID_STopWindow\n");
1365 /* 30D02401-6A81-11D0-8274-00C04FD5AE38 Explorer Bar: Search */
1366 /* D1E7AFEC-6A2E-11D0-8C78-00C04FD918B4 no info */
1367 /* A9227C3C-7F8E-11D0-8CB0-00A0C92DBFE8 no info */
1368 /* 371EA634-DC5C-11D1-BA57-00C04FC2040E one reference to IVersionHost */
1369 /* 3050F429-98B5-11CF-BB82-00AA00BDCE0B IID_IElementBehaviorFactory */
1370 /* 6D12FE80-7911-11CF-9534-0000C05BAE0B SID_DefView */
1371 /* AD7F6C62-F6BD-11D2-959B-006097C553C8 no info */
1372 /* 53A2D5B1-D2FC-11D0-84E0-006097C9987D no info */
1373 /* 3050F312-98B5-11CF-BB82-00AA00BDCE0B HTMLFrameBaseClass */
1374 /* 639447BD-B2D3-44B9-9FB0-510F23CB45E4 no info */
1375 /* 20C46561-8491-11CF-960C-0080C7F4EE85 no info */
1378 trace("Service %s not supported\n", debugstr_guid(guidService));
1380 return E_NOINTERFACE;
1384 static const IServiceProviderVtbl ServiceProviderVtbl = {
1385 ServiceProvider_QueryInterface,
1386 ServiceProvider_AddRef,
1387 ServiceProvider_Release,
1388 ServiceProvider_QueryService
1391 static IServiceProvider ServiceProvider = { &ServiceProviderVtbl };
1394 static HRESULT QueryInterface(REFIID riid, void **ppv)
1398 if(IsEqualGUID(&IID_IUnknown, riid)
1399 || IsEqualGUID(&IID_IOleClientSite, riid))
1401 else if(IsEqualGUID(&IID_IOleWindow, riid)
1402 || IsEqualGUID(&IID_IOleInPlaceSite, riid)
1403 || IsEqualGUID(&IID_IOleInPlaceSiteEx, riid))
1404 *ppv = &InPlaceSite;
1405 else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)
1406 || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
1407 *ppv = &DocHostUIHandler;
1408 else if(IsEqualGUID(&IID_IDispatch, riid))
1410 else if(IsEqualGUID(&IID_IServiceProvider, riid))
1411 *ppv = &ServiceProvider;
1412 else if(IsEqualGUID(&IID_IDocHostShowUI, riid))
1413 trace("interface IID_IDocHostShowUI\n");
1414 else if(IsEqualGUID(&IID_IOleControlSite, riid))
1415 trace("interface IID_IOleControlSite\n");
1416 else if(IsEqualGUID(&IID_IOleCommandTarget, riid))
1417 trace("interface IID_IOleCommandTarget\n");
1419 /* B6EA2050-048A-11D1-82B9-00C04FB9942E IAxWinHostWindow */
1423 /* are there more interfaces, that a host can support? */
1424 trace("%s: interface not supported\n", debugstr_guid(riid));
1427 return (*ppv) ? S_OK : E_NOINTERFACE;
1430 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
1432 return DefWindowProcW(hwnd, msg, wParam, lParam);
1435 static HWND create_container_window(void)
1437 static const WCHAR wszWebBrowserContainer[] =
1438 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
1439 static WNDCLASSEXW wndclass = {
1440 sizeof(WNDCLASSEXW),
1443 0, 0, NULL, NULL, NULL, NULL, NULL,
1444 wszWebBrowserContainer,
1448 RegisterClassExW(&wndclass);
1449 return CreateWindowW(wszWebBrowserContainer, wszWebBrowserContainer,
1450 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
1451 CW_USEDEFAULT, NULL, NULL, NULL, NULL);
1454 static void test_DoVerb(IUnknown *unk)
1457 RECT rect = {0,0,1000,1000};
1460 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1461 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
1465 SET_EXPECT(CanInPlaceActivate);
1466 SET_EXPECT(Site_GetWindow);
1467 SET_EXPECT(OnInPlaceActivate);
1468 SET_EXPECT(GetWindowContext);
1469 SET_EXPECT(ShowObject);
1470 SET_EXPECT(GetContainer);
1471 SET_EXPECT(Frame_GetWindow);
1472 SET_EXPECT(OnUIActivate);
1473 SET_EXPECT(Frame_SetActiveObject);
1474 SET_EXPECT(UIWindow_SetActiveObject);
1475 SET_EXPECT(SetMenu);
1477 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1478 0, (HWND)0xdeadbeef, &rect);
1479 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
1481 CHECK_CALLED(CanInPlaceActivate);
1482 CHECK_CALLED(Site_GetWindow);
1483 CHECK_CALLED(OnInPlaceActivate);
1484 CHECK_CALLED(GetWindowContext);
1485 CHECK_CALLED(ShowObject);
1486 CHECK_CALLED(GetContainer);
1487 CHECK_CALLED(Frame_GetWindow);
1488 CHECK_CALLED(OnUIActivate);
1489 CHECK_CALLED(Frame_SetActiveObject);
1490 CHECK_CALLED(UIWindow_SetActiveObject);
1491 CHECK_CALLED(SetMenu);
1493 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1494 0, (HWND)0xdeadbeef, &rect);
1495 ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
1497 IOleObject_Release(oleobj);
1500 static void test_GetMiscStatus(IOleObject *oleobj)
1505 for(i=0; i<10; i++) {
1507 hres = IOleObject_GetMiscStatus(oleobj, i, &st);
1508 ok(hres == S_OK, "GetMiscStatus failed: %08x\n", hres);
1509 ok(st == (OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_INSIDEOUT
1510 |OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE),
1511 "st=%08x, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
1512 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st);
1516 static void test_SetHostNames(IOleObject *oleobj)
1520 static const WCHAR test_appW[] = {'t','e','s','t',' ','a','p','p',0};
1522 hres = IOleObject_SetHostNames(oleobj, test_appW, (void*)0xdeadbeef);
1523 ok(hres == S_OK, "SetHostNames failed: %08x\n", hres);
1526 static void test_ClientSite(IUnknown *unk, IOleClientSite *client, BOOL stop_download)
1529 IOleInPlaceObject *inplace;
1533 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1534 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08x\n", hres);
1538 test_GetMiscStatus(oleobj);
1539 test_SetHostNames(oleobj);
1541 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
1542 ok(hres == S_OK, "QueryInterface(IID_OleInPlaceObject) failed: %08x\n", hres);
1544 IOleObject_Release(oleobj);
1548 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1549 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
1550 ok((hwnd == NULL) ^ (client == NULL), "unexpected hwnd %p\n", hwnd);
1553 SET_EXPECT(GetContainer);
1554 SET_EXPECT(Site_GetWindow);
1555 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1556 SET_EXPECT(Invoke_AMBIENT_SILENT);
1557 }else if(stop_download) {
1558 SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
1559 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
1560 SET_EXPECT(Invoke_COMMANDSTATECHANGE);
1563 hres = IOleObject_SetClientSite(oleobj, client);
1564 ok(hres == S_OK, "SetClientSite failed: %08x\n", hres);
1567 CHECK_CALLED(GetContainer);
1568 CHECK_CALLED(Site_GetWindow);
1569 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1570 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1571 }else if(stop_download) {
1572 todo_wine CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
1573 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
1574 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
1577 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1578 ok(hres == S_OK, "GetWindow failed: %08x\n", hres);
1579 ok((hwnd == NULL) == (client == NULL), "unexpected hwnd %p\n", hwnd);
1581 shell_embedding_hwnd = hwnd;
1583 test_SetHostNames(oleobj);
1585 IOleInPlaceObject_Release(inplace);
1586 IOleObject_Release(oleobj);
1589 static void test_ClassInfo(IUnknown *unk)
1591 IProvideClassInfo2 *class_info;
1595 hres = IUnknown_QueryInterface(unk, &IID_IProvideClassInfo2, (void**)&class_info);
1596 ok(hres == S_OK, "QueryInterface(IID_IProvideClassInfo) failed: %08x\n", hres);
1600 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid);
1601 ok(hres == S_OK, "GetGUID failed: %08x\n", hres);
1602 ok(IsEqualGUID(&DIID_DWebBrowserEvents2, &guid), "wrong guid\n");
1604 hres = IProvideClassInfo2_GetGUID(class_info, 0, &guid);
1605 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
1606 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
1608 hres = IProvideClassInfo2_GetGUID(class_info, 2, &guid);
1609 ok(hres == E_FAIL, "GetGUID failed: %08x, expected E_FAIL\n", hres);
1610 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
1612 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, NULL);
1613 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
1615 hres = IProvideClassInfo2_GetGUID(class_info, 0, NULL);
1616 ok(hres == E_POINTER, "GetGUID failed: %08x, expected E_POINTER\n", hres);
1618 IProvideClassInfo2_Release(class_info);
1621 static void test_ie_funcs(IUnknown *unk)
1631 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
1632 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
1639 hres = IWebBrowser2_get_HWND(wb, &hwnd);
1640 ok(hres == E_FAIL, "get_HWND failed: %08x, expected E_FAIL\n", hres);
1641 ok(hwnd == 0, "unexpected hwnd %x\n", hwnd);
1645 hres = IWebBrowser2_get_MenuBar(wb, &b);
1646 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1647 ok(b == VARIANT_TRUE, "b=%x\n", b);
1649 SET_EXPECT(Invoke_ONMENUBAR);
1650 hres = IWebBrowser2_put_MenuBar(wb, (exvb = VARIANT_FALSE));
1651 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1652 CHECK_CALLED(Invoke_ONMENUBAR);
1654 hres = IWebBrowser2_get_MenuBar(wb, &b);
1655 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1656 ok(b == VARIANT_FALSE, "b=%x\n", b);
1658 SET_EXPECT(Invoke_ONMENUBAR);
1659 hres = IWebBrowser2_put_MenuBar(wb, (exvb = 100));
1660 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1661 CHECK_CALLED(Invoke_ONMENUBAR);
1663 hres = IWebBrowser2_get_MenuBar(wb, &b);
1664 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1665 ok(b == VARIANT_TRUE, "b=%x\n", b);
1669 hres = IWebBrowser2_get_AddressBar(wb, &b);
1670 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
1671 ok(b == VARIANT_TRUE, "b=%x\n", b);
1673 SET_EXPECT(Invoke_ONADDRESSBAR);
1674 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_FALSE));
1675 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
1676 CHECK_CALLED(Invoke_ONADDRESSBAR);
1678 hres = IWebBrowser2_get_AddressBar(wb, &b);
1679 ok(hres == S_OK, "get_MenuBar failed: %08x\n", hres);
1680 ok(b == VARIANT_FALSE, "b=%x\n", b);
1682 SET_EXPECT(Invoke_ONADDRESSBAR);
1683 hres = IWebBrowser2_put_AddressBar(wb, (exvb = 100));
1684 ok(hres == S_OK, "put_AddressBar failed: %08x\n", hres);
1685 CHECK_CALLED(Invoke_ONADDRESSBAR);
1687 hres = IWebBrowser2_get_AddressBar(wb, &b);
1688 ok(hres == S_OK, "get_AddressBar failed: %08x\n", hres);
1689 ok(b == VARIANT_TRUE, "b=%x\n", b);
1691 SET_EXPECT(Invoke_ONADDRESSBAR);
1692 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_TRUE));
1693 ok(hres == S_OK, "put_MenuBar failed: %08x\n", hres);
1694 CHECK_CALLED(Invoke_ONADDRESSBAR);
1698 hres = IWebBrowser2_get_StatusBar(wb, &b);
1699 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1700 ok(b == VARIANT_TRUE, "b=%x\n", b);
1702 SET_EXPECT(Invoke_ONSTATUSBAR);
1703 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_TRUE));
1704 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1705 CHECK_CALLED(Invoke_ONSTATUSBAR);
1707 hres = IWebBrowser2_get_StatusBar(wb, &b);
1708 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1709 ok(b == VARIANT_TRUE, "b=%x\n", b);
1711 SET_EXPECT(Invoke_ONSTATUSBAR);
1712 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_FALSE));
1713 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1714 CHECK_CALLED(Invoke_ONSTATUSBAR);
1716 hres = IWebBrowser2_get_StatusBar(wb, &b);
1717 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1718 ok(b == VARIANT_FALSE, "b=%x\n", b);
1720 SET_EXPECT(Invoke_ONSTATUSBAR);
1721 hres = IWebBrowser2_put_StatusBar(wb, (exvb = 100));
1722 ok(hres == S_OK, "put_StatusBar failed: %08x\n", hres);
1723 CHECK_CALLED(Invoke_ONSTATUSBAR);
1725 hres = IWebBrowser2_get_StatusBar(wb, &b);
1726 ok(hres == S_OK, "get_StatusBar failed: %08x\n", hres);
1727 ok(b == VARIANT_TRUE, "b=%x\n", b);
1731 hres = IWebBrowser2_get_ToolBar(wb, &i);
1732 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1735 SET_EXPECT(Invoke_ONTOOLBAR);
1736 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_FALSE));
1737 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1738 CHECK_CALLED(Invoke_ONTOOLBAR);
1740 hres = IWebBrowser2_get_ToolBar(wb, &i);
1741 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1742 ok(i == VARIANT_FALSE, "b=%x\n", i);
1744 SET_EXPECT(Invoke_ONTOOLBAR);
1745 hres = IWebBrowser2_put_ToolBar(wb, (exvb = 100));
1746 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1747 CHECK_CALLED(Invoke_ONTOOLBAR);
1749 hres = IWebBrowser2_get_ToolBar(wb, &i);
1750 ok(hres == S_OK, "get_ToolBar failed: %08x\n", hres);
1753 SET_EXPECT(Invoke_ONTOOLBAR);
1754 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_TRUE));
1755 ok(hres == S_OK, "put_ToolBar failed: %08x\n", hres);
1756 CHECK_CALLED(Invoke_ONTOOLBAR);
1760 hres = IWebBrowser2_get_FullScreen(wb, &b);
1761 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1762 ok(b == VARIANT_FALSE, "b=%x\n", b);
1764 SET_EXPECT(Invoke_ONFULLSCREEN);
1765 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_TRUE));
1766 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1767 CHECK_CALLED(Invoke_ONFULLSCREEN);
1769 hres = IWebBrowser2_get_FullScreen(wb, &b);
1770 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1771 ok(b == VARIANT_TRUE, "b=%x\n", b);
1773 SET_EXPECT(Invoke_ONFULLSCREEN);
1774 hres = IWebBrowser2_put_FullScreen(wb, (exvb = 100));
1775 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1776 CHECK_CALLED(Invoke_ONFULLSCREEN);
1778 hres = IWebBrowser2_get_FullScreen(wb, &b);
1779 ok(hres == S_OK, "get_FullScreen failed: %08x\n", hres);
1780 ok(b == VARIANT_TRUE, "b=%x\n", b);
1782 SET_EXPECT(Invoke_ONFULLSCREEN);
1783 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_FALSE));
1784 ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
1785 CHECK_CALLED(Invoke_ONFULLSCREEN);
1789 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1790 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1791 ok(b == VARIANT_FALSE, "b=%x\n", b);
1793 SET_EXPECT(Invoke_ONTHEATERMODE);
1794 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_TRUE));
1795 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1796 CHECK_CALLED(Invoke_ONTHEATERMODE);
1798 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1799 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1800 ok(b == VARIANT_TRUE, "b=%x\n", b);
1802 SET_EXPECT(Invoke_ONTHEATERMODE);
1803 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = 100));
1804 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1805 CHECK_CALLED(Invoke_ONTHEATERMODE);
1807 hres = IWebBrowser2_get_TheaterMode(wb, &b);
1808 ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
1809 ok(b == VARIANT_TRUE, "b=%x\n", b);
1811 SET_EXPECT(Invoke_ONTHEATERMODE);
1812 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_FALSE));
1813 ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
1814 CHECK_CALLED(Invoke_ONTHEATERMODE);
1819 hres = IWebBrowser2_get_Resizable(wb, &b);
1820 ok(hres == E_NOTIMPL, "get_Resizable failed: %08x\n", hres);
1821 ok(b == 0x100, "b=%x\n", b);
1823 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
1824 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_TRUE));
1825 ok(hres == S_OK, "put_Resizable failed: %08x\n", hres);
1826 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE);
1828 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
1829 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_FALSE));
1830 ok(hres == S_OK, "put_Resizable failed: %08x\n", hres);
1831 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE);
1833 hres = IWebBrowser2_get_Resizable(wb, &b);
1834 ok(hres == E_NOTIMPL, "get_Resizable failed: %08x\n", hres);
1835 ok(b == 0x100, "b=%x\n", b);
1840 hres = IWebBrowser2_get_Application(wb, &disp);
1841 ok(hres == S_OK, "get_Application failed: %08x\n", hres);
1842 ok(disp == (void*)wb, "disp=%p, expected %p\n", disp, wb);
1844 IDispatch_Release(disp);
1846 hres = IWebBrowser2_get_Application(wb, NULL);
1847 ok(hres == E_POINTER, "get_Application failed: %08x, expected E_POINTER\n", hres);
1850 hres = IWebBrowser2_get_Name(wb, &sName);
1851 ok(hres == S_OK, "getName failed: %08x, expected S_OK\n", hres);
1852 if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) == LANG_ENGLISH)
1853 ok(!strcmp_wa(sName, "Microsoft Web Browser Control"), "got '%s', expected 'Microsoft Web Browser Control'\n", wine_dbgstr_w(sName));
1854 else /* Non-English cannot be blank. */
1855 ok(sName!=NULL, "get_Name return a NULL string.\n");
1856 SysFreeString(sName);
1860 hres = IWebBrowser2_Quit(wb);
1861 ok(hres == E_FAIL, "Quit failed: %08x, expected E_FAIL\n", hres);
1863 IWebBrowser2_Release(wb);
1866 static void test_Silent(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1872 hres = IWebBrowser2_get_Silent(wb, &b);
1873 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1874 ok(b == VARIANT_FALSE, "b=%x\n", b);
1876 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
1877 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1880 hres = IWebBrowser2_get_Silent(wb, &b);
1881 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1882 ok(b == VARIANT_TRUE, "b=%x\n", b);
1884 hres = IWebBrowser2_put_Silent(wb, 100);
1885 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1888 hres = IWebBrowser2_get_Silent(wb, &b);
1889 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1890 ok(b == VARIANT_TRUE, "b=%x\n", b);
1892 hres = IWebBrowser2_put_Silent(wb, VARIANT_FALSE);
1893 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1896 hres = IWebBrowser2_get_Silent(wb, &b);
1897 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1898 ok(b == VARIANT_FALSE, "b=%x\n", b);
1901 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
1902 ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
1904 SET_EXPECT(Invoke_AMBIENT_SILENT);
1907 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
1908 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1911 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1914 hres = IWebBrowser2_get_Silent(wb, &b);
1915 ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
1916 ok(b == VARIANT_FALSE, "b=%x\n", b);
1919 static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1925 hres = IWebBrowser2_get_Offline(wb, &b);
1926 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1927 ok(b == VARIANT_FALSE, "b=%x\n", b);
1929 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
1930 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1933 hres = IWebBrowser2_get_Offline(wb, &b);
1934 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1935 ok(b == VARIANT_TRUE, "b=%x\n", b);
1937 hres = IWebBrowser2_put_Offline(wb, 100);
1938 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1941 hres = IWebBrowser2_get_Offline(wb, &b);
1942 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1943 ok(b == VARIANT_TRUE, "b=%x\n", b);
1945 hres = IWebBrowser2_put_Offline(wb, VARIANT_FALSE);
1946 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1949 hres = IWebBrowser2_get_Offline(wb, &b);
1950 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1951 ok(b == VARIANT_FALSE, "b=%x\n", b);
1954 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
1955 ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
1957 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1960 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
1961 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1964 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1967 hres = IWebBrowser2_get_Offline(wb, &b);
1968 ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
1969 ok(b == VARIANT_FALSE, "b=%x\n", b);
1972 static void test_ambient_unknown(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
1976 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1977 SET_EXPECT(Invoke_AMBIENT_SILENT);
1978 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1979 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1980 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1981 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1983 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_UNKNOWN);
1984 ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
1986 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1987 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
1988 CHECK_EXPECT(Invoke_AMBIENT_USERMODE);
1989 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
1990 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
1991 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
1993 CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1994 CLEAR_CALLED(Invoke_AMBIENT_SILENT);
1995 CLEAR_CALLED(Invoke_AMBIENT_USERMODE);
1996 CLEAR_CALLED(Invoke_AMBIENT_DLCONTROL);
1997 CLEAR_CALLED(Invoke_AMBIENT_USERAGENT);
1998 CLEAR_CALLED(Invoke_AMBIENT_PALETTE);
2001 static void test_wb_funcs(IUnknown *unk, BOOL is_clientsite)
2004 IOleControl *control;
2007 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
2008 ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
2010 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
2011 ok(hres == S_OK, "Could not get IOleControl interface: %08x\n", hres);
2013 test_Silent(wb, control, is_clientsite);
2014 test_Offline(wb, control, is_clientsite);
2015 test_ambient_unknown(wb, control, is_clientsite);
2017 IWebBrowser_Release(wb);
2018 IOleControl_Release(control);
2021 static void test_GetControlInfo(IUnknown *unk)
2023 IOleControl *control;
2027 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
2028 ok(hres == S_OK, "Could not get IOleControl: %08x\n", hres);
2032 hres = IOleControl_GetControlInfo(control, &info);
2033 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
2034 hres = IOleControl_GetControlInfo(control, NULL);
2035 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08x, exxpected E_NOTIMPL\n", hres);
2037 IOleControl_Release(control);
2040 static void test_Extent(IUnknown *unk)
2043 SIZE size, expected;
2049 /* default aspect ratio is 96dpi / 96dpi */
2051 dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
2052 dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
2054 if (dpi_x != 96 || dpi_y != 96)
2055 trace("dpi: %d / %d\n", dpi_y, dpi_y);
2057 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
2058 ok(hres == S_OK, "Could not get IOleObkect: %08x\n", hres);
2062 size.cx = size.cy = 0xdeadbeef;
2063 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2064 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2065 /* Default size is 50x20 pixels, in himetric units */
2066 expected.cx = MulDiv( 50, 2540, dpi_x );
2067 expected.cy = MulDiv( 20, 2540, dpi_y );
2068 ok(size.cx == expected.cx && size.cy == expected.cy, "size = {%d %d} (expected %d %d)\n",
2069 size.cx, size.cy, expected.cx, expected.cy );
2073 hres = IOleObject_SetExtent(oleobj, DVASPECT_CONTENT, &size);
2074 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
2076 size.cx = size.cy = 0xdeadbeef;
2077 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2078 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2079 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
2081 size.cx = size.cy = 0xdeadbeef;
2082 hres = IOleObject_GetExtent(oleobj, 0, &size);
2083 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2084 ok(size.cx == 800 && size.cy == 700, "size = {%d %d}\n", size.cx, size.cy);
2088 hres = IOleObject_SetExtent(oleobj, 0, &size);
2089 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
2091 size.cx = size.cy = 0xdeadbeef;
2092 hres = IOleObject_GetExtent(oleobj, 0, &size);
2093 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2094 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
2096 size.cx = size.cy = 0xdeadbeef;
2097 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
2098 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2099 ok(size.cx == 900 && size.cy == 800, "size = {%d %d}\n", size.cx, size.cy);
2103 hres = IOleObject_SetExtent(oleobj, 0xdeadbeef, &size);
2104 ok(hres == S_OK, "SetExtent failed: %08x\n", hres);
2106 size.cx = size.cy = 0xdeadbeef;
2107 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
2108 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2109 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
2111 size.cx = size.cy = 0xdeadbeef;
2112 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2113 ok(hres == S_OK, "GetExtent failed: %08x\n", hres);
2114 ok(size.cx == 1000 && size.cy == 900, "size = {%d %d}\n", size.cx, size.cy);
2116 IOleObject_Release(oleobj);
2119 static void test_ConnectionPoint(IUnknown *unk, BOOL init)
2121 IConnectionPointContainer *container;
2122 IConnectionPoint *point;
2125 static DWORD dw = 100;
2127 hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container);
2128 ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres);
2132 hres = IConnectionPointContainer_FindConnectionPoint(container, &DIID_DWebBrowserEvents2, &point);
2133 IConnectionPointContainer_Release(container);
2134 ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres);
2139 hres = IConnectionPoint_Advise(point, (IUnknown*)&WebBrowserEvents2, &dw);
2140 ok(hres == S_OK, "Advise failed: %08x\n", hres);
2141 ok(dw == 1, "dw=%d, expected 1\n", dw);
2143 hres = IConnectionPoint_Unadvise(point, dw);
2144 ok(hres == S_OK, "Unadvise failed: %08x\n", hres);
2147 IConnectionPoint_Release(point);
2150 static void test_Navigate2(IUnknown *unk)
2152 IWebBrowser2 *webbrowser;
2156 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&webbrowser);
2157 ok(hres == S_OK, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres);
2161 test_LocationURL(unk, is_first_load ? "" : current_url);
2162 test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE);
2164 V_VT(&url) = VT_BSTR;
2165 V_BSTR(&url) = a2bstr("about:blank");
2166 current_url = "about:blank";
2169 SET_EXPECT(Invoke_AMBIENT_USERMODE);
2170 SET_EXPECT(Invoke_PROPERTYCHANGE);
2171 SET_EXPECT(Invoke_BEFORENAVIGATE2);
2172 SET_EXPECT(Invoke_DOWNLOADBEGIN);
2173 SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
2174 SET_EXPECT(EnableModeless_FALSE);
2175 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
2176 SET_EXPECT(SetStatusText);
2177 SET_EXPECT(GetHostInfo);
2178 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
2179 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
2180 SET_EXPECT(Invoke_AMBIENT_PALETTE);
2181 SET_EXPECT(GetOptionKeyPath);
2182 SET_EXPECT(GetOverridesKeyPath);
2183 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
2184 SET_EXPECT(Exec_SETPROGRESSMAX);
2185 SET_EXPECT(Exec_SETPROGRESSPOS);
2186 SET_EXPECT(Invoke_SETSECURELOCKICON);
2187 SET_EXPECT(Invoke_FILEDOWNLOAD);
2188 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
2189 SET_EXPECT(Invoke_COMMANDSTATECHANGE);
2190 SET_EXPECT(EnableModeless_TRUE);
2193 hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
2194 ok(hres == S_OK, "Navigate2 failed: %08x\n", hres);
2197 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
2198 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
2199 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
2200 todo_wine CHECK_CALLED(Invoke_DOWNLOADBEGIN);
2201 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
2202 CHECK_CALLED(EnableModeless_FALSE);
2203 CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
2204 CHECK_CALLED(SetStatusText);
2205 CHECK_CALLED(GetHostInfo);
2206 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
2207 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
2208 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
2209 CHECK_CALLED(GetOptionKeyPath);
2210 CHECK_CALLED(GetOverridesKeyPath);
2211 todo_wine CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
2212 todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
2213 todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
2214 todo_wine CHECK_CALLED(Invoke_SETSECURELOCKICON);
2215 todo_wine CHECK_CALLED(Invoke_FILEDOWNLOAD);
2216 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
2217 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
2218 CHECK_CALLED(EnableModeless_TRUE);
2222 IWebBrowser2_Release(webbrowser);
2224 test_ready_state(READYSTATE_LOADING);
2227 static void test_download(DWORD flags)
2231 is_downloading = TRUE;
2234 test_ready_state((flags & DWL_FROM_PUT_HREF) ? READYSTATE_COMPLETE : READYSTATE_LOADING);
2236 if(flags & DWL_EXPECT_BEFORE_NAVIGATE) {
2237 SET_EXPECT(Invoke_PROPERTYCHANGE);
2238 SET_EXPECT(Invoke_BEFORENAVIGATE2);
2239 SET_EXPECT(TranslateUrl);
2241 SET_EXPECT(Exec_SETPROGRESSMAX);
2242 SET_EXPECT(Exec_SETPROGRESSPOS);
2243 SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
2244 SET_EXPECT(DocHost_EnableModeless_FALSE);
2245 SET_EXPECT(DocHost_EnableModeless_TRUE);
2246 SET_EXPECT(Invoke_SETSECURELOCKICON);
2247 SET_EXPECT(Invoke_282);
2248 SET_EXPECT(EnableModeless_FALSE);
2249 SET_EXPECT(Invoke_COMMANDSTATECHANGE);
2250 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
2251 SET_EXPECT(SetStatusText);
2252 SET_EXPECT(EnableModeless_TRUE);
2254 SET_EXPECT(QueryStatus_STOP);
2256 SET_EXPECT(GetHostInfo);
2257 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
2258 SET_EXPECT(Invoke_TITLECHANGE);
2259 SET_EXPECT(Invoke_NAVIGATECOMPLETE2);
2261 SET_EXPECT(GetDropTarget);
2262 SET_EXPECT(Invoke_PROGRESSCHANGE);
2263 SET_EXPECT(Invoke_DOCUMENTCOMPLETE);
2264 while(!called_Invoke_DOCUMENTCOMPLETE && GetMessage(&msg, NULL, 0, 0)) {
2265 TranslateMessage(&msg);
2266 DispatchMessage(&msg);
2269 if(flags & DWL_EXPECT_BEFORE_NAVIGATE) {
2270 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
2271 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
2272 CHECK_CALLED(TranslateUrl);
2274 todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
2275 todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
2276 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
2277 CLEAR_CALLED(DocHost_EnableModeless_FALSE); /* IE 7 */
2278 CLEAR_CALLED(DocHost_EnableModeless_TRUE); /* IE 7 */
2279 todo_wine CHECK_CALLED(Invoke_SETSECURELOCKICON);
2280 CLEAR_CALLED(Invoke_282); /* IE 7 */
2282 todo_wine CHECK_CALLED(EnableModeless_FALSE);
2284 CLEAR_CALLED(EnableModeless_FALSE); /* IE 8 */
2285 CLEAR_CALLED(Invoke_COMMANDSTATECHANGE);
2286 todo_wine CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
2287 todo_wine CHECK_CALLED(SetStatusText);
2289 todo_wine CHECK_CALLED(EnableModeless_TRUE);
2291 CLEAR_CALLED(EnableModeless_FALSE); /* IE 8 */
2293 todo_wine CHECK_CALLED(QueryStatus_STOP);
2295 todo_wine CHECK_CALLED(GetHostInfo);
2296 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
2297 todo_wine CHECK_CALLED(Invoke_TITLECHANGE);
2298 CHECK_CALLED(Invoke_NAVIGATECOMPLETE2);
2300 todo_wine CHECK_CALLED(GetDropTarget);
2301 todo_wine CHECK_CALLED(Invoke_PROGRESSCHANGE);
2302 CHECK_CALLED(Invoke_DOCUMENTCOMPLETE);
2304 is_downloading = FALSE;
2306 test_ready_state(READYSTATE_COMPLETE);
2309 static void test_olecmd(IUnknown *unk, BOOL loaded)
2311 IOleCommandTarget *cmdtrg;
2315 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
2316 ok(hres == S_OK, "Could not get IOleCommandTarget iface: %08x\n", hres);
2320 cmds[0].cmdID = OLECMDID_SPELL;
2321 cmds[0].cmdf = 0xdeadbeef;
2322 cmds[1].cmdID = OLECMDID_REFRESH;
2323 cmds[1].cmdf = 0xdeadbeef;
2324 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmds, NULL);
2326 ok(hres == S_OK, "QueryStatus failed: %08x\n", hres);
2327 ok(cmds[0].cmdf == OLECMDF_SUPPORTED, "OLECMDID_SPELL cmdf = %x\n", cmds[0].cmdf);
2328 ok(cmds[1].cmdf == (OLECMDF_ENABLED|OLECMDF_SUPPORTED),
2329 "OLECMDID_REFRESH cmdf = %x\n", cmds[1].cmdf);
2331 ok(hres == 0x80040104, "QueryStatus failed: %08x\n", hres);
2332 ok(cmds[0].cmdf == 0xdeadbeef, "OLECMDID_SPELL cmdf = %x\n", cmds[0].cmdf);
2333 ok(cmds[1].cmdf == 0xdeadbeef, "OLECMDID_REFRESH cmdf = %x\n", cmds[0].cmdf);
2336 IOleCommandTarget_Release(cmdtrg);
2339 static void test_IServiceProvider(IUnknown *unk)
2341 IServiceProvider *servprov = (void*)0xdeadbeef;
2343 IUnknown *ret = NULL;
2344 static const IID IID_IBrowserService2 =
2345 {0x68BD21CC,0x438B,0x11d2,{0xA5,0x60,0x00,0xA0,0xC,0x2D,0xBF,0xE8}};
2347 hres = IUnknown_QueryInterface(unk, &IID_IServiceProvider, (void**)&servprov);
2348 ok(hres == S_OK, "QueryInterface returned %08x, expected S_OK\n", hres);
2352 hres = IServiceProvider_QueryService(servprov, &SID_STopLevelBrowser, &IID_IBrowserService2, (LPVOID*)&ret);
2353 ok(hres == E_FAIL, "QueryService returned %08x, expected E_FAIL\n", hres);
2354 ok(ret == NULL, "ret returned %p, expected NULL\n", ret);
2357 IUnknown_Release(ret);
2360 IServiceProvider_Release(servprov);
2363 #define get_document(u) _get_document(__LINE__,u)
2364 static IDispatch *_get_document(unsigned line, IUnknown *unk)
2366 IHTMLDocument2 *html_doc;
2371 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
2372 ok_(__FILE__,line)(hres == S_OK, "QueryInterface(IID_IWebBrowser2) failed: %08x\n", hres);
2375 hres = IWebBrowser2_get_Document(wb, &disp);
2376 IWebBrowser2_Release(wb);
2377 ok_(__FILE__,line)(hres == S_OK, "get_Document failed: %08x\n", hres);
2378 ok_(__FILE__,line)(disp != NULL, "doc_disp == NULL\n");
2380 hres = IDispatch_QueryInterface(disp, &IID_IHTMLDocument2, (void**)&html_doc);
2381 ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLDocument iface: %08x\n", hres);
2382 ok(disp == (IDispatch*)html_doc, "disp != html_doc\n");
2383 IHTMLDocument_Release(html_doc);
2388 static void test_put_href(IUnknown *unk)
2390 IHTMLLocation *location;
2391 IHTMLDocument2 *doc;
2392 IDispatch *doc_disp;
2396 doc_disp = get_document(unk);
2398 hres = IDispatch_QueryInterface(doc_disp, &IID_IHTMLDocument2, (void**)&doc);
2399 IDispatch_Release(doc_disp);
2400 ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument2 failed: %08x\n", hres);
2403 hres = IHTMLDocument2_get_location(doc, &location);
2404 IHTMLDocument2_Release(doc);
2405 ok(hres == S_OK, "get_location failed: %08x\n", hres);
2406 ok(location != NULL, "location == NULL\n");
2408 SET_EXPECT(TranslateUrl);
2409 SET_EXPECT(Invoke_BEFORENAVIGATE2);
2410 SET_EXPECT(Invoke_PROPERTYCHANGE);
2412 dwl_flags = DWL_FROM_PUT_HREF;
2414 str = a2bstr("about:test");
2415 current_url = "about:test";
2416 is_first_load = FALSE;
2417 hres = IHTMLLocation_put_href(location, str);
2419 CHECK_CALLED(TranslateUrl);
2420 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
2421 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
2423 IHTMLLocation_Release(location);
2425 ok(hres == S_OK, "put_href failed: %08x\n", hres);
2427 test_ready_state(READYSTATE_COMPLETE);
2430 static void test_QueryInterface(IUnknown *unk)
2432 IQuickActivate *qa = (IQuickActivate*)0xdeadbeef;
2433 IRunnableObject *runnable = (IRunnableObject*)0xdeadbeef;
2434 IPerPropertyBrowsing *propbrowse = (void*)0xdeadbeef;
2435 IOleInPlaceSite *inplace = (void*)0xdeadbeef;
2436 IOleCache *cache = (void*)0xdeadbeef;
2437 IObjectWithSite *site = (void*)0xdeadbeef;
2438 IViewObjectEx *viewex = (void*)0xdeadbeef;
2439 IOleLink *link = (void*)0xdeadbeef;
2440 IMarshal *marshal = (void*)0xdeadbeef;
2441 IStdMarshalInfo *marshalinfo = (void*)0xdeadbeef;
2444 hres = IUnknown_QueryInterface(unk, &IID_IQuickActivate, (void**)&qa);
2445 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2446 ok(qa == NULL, "qa=%p, expected NULL\n", qa);
2448 hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&runnable);
2449 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2450 ok(runnable == NULL, "runnable=%p, expected NULL\n", runnable);
2452 hres = IUnknown_QueryInterface(unk, &IID_IPerPropertyBrowsing, (void**)&propbrowse);
2453 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2454 ok(propbrowse == NULL, "propbrowse=%p, expected NULL\n", propbrowse);
2456 hres = IUnknown_QueryInterface(unk, &IID_IOleCache, (void**)&cache);
2457 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2458 ok(cache == NULL, "cache=%p, expected NULL\n", cache);
2460 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceSite, (void**)&inplace);
2461 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2462 ok(inplace == NULL, "inplace=%p, expected NULL\n", inplace);
2464 hres = IUnknown_QueryInterface(unk, &IID_IObjectWithSite, (void**)&site);
2465 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2466 ok(site == NULL, "site=%p, expected NULL\n", site);
2468 hres = IUnknown_QueryInterface(unk, &IID_IViewObjectEx, (void**)&viewex);
2469 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2470 ok(viewex == NULL, "viewex=%p, expected NULL\n", viewex);
2472 hres = IUnknown_QueryInterface(unk, &IID_IOleLink, (void**)&link);
2473 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2474 ok(link == NULL, "link=%p, expected NULL\n", link);
2476 hres = IUnknown_QueryInterface(unk, &IID_IMarshal, (void**)&marshal);
2477 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2478 ok(marshal == NULL, "marshal=%p, expected NULL\n", marshal);
2480 hres = IUnknown_QueryInterface(unk, &IID_IStdMarshalInfo, (void**)&marshalinfo);
2481 ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
2482 ok(marshalinfo == NULL, "marshalinfo=%p, expected NULL\n", marshalinfo);
2486 static void test_WebBrowser(BOOL do_download)
2488 IUnknown *unk = NULL;
2492 hres = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
2493 &IID_IUnknown, (void**)&unk);
2495 win_skip("Could not create WebBrowser, probably too old IE\n");
2499 is_downloading = FALSE;
2500 is_first_load = TRUE;
2502 hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
2503 ok(hres == S_OK, "Could not get IWebBrowser2 iface: %08x\n", hres);
2505 hres = IWebBrowser2_put_Resizable(wb, VARIANT_TRUE);
2506 if(hres == E_NOTIMPL) {
2507 win_skip("put_Resizable returned E_NOTIMPL, assuming IE <6\n");
2508 IWebBrowser_Release(wb);
2509 IUnknown_Release(unk);
2513 test_QueryInterface(unk);
2514 test_ready_state(READYSTATE_UNINITIALIZED);
2515 test_ClassInfo(unk);
2516 test_LocationURL(unk, "");
2517 test_ConnectionPoint(unk, TRUE);
2518 test_ClientSite(unk, &ClientSite, !do_download);
2520 test_wb_funcs(unk, TRUE);
2522 test_olecmd(unk, FALSE);
2523 test_Navigate2(unk);
2526 IDispatch *doc, *doc2;
2529 test_olecmd(unk, TRUE);
2530 doc = get_document(unk);
2533 test_download(DWL_FROM_PUT_HREF);
2534 doc2 = get_document(unk);
2535 ok(doc == doc2, "doc != doc2\n");
2536 IDispatch_Release(doc2);
2538 test_Navigate2(unk);
2539 test_download(DWL_EXPECT_BEFORE_NAVIGATE);
2540 doc2 = get_document(unk);
2541 ok(doc == doc2, "doc != doc2\n");
2542 IDispatch_Release(doc2);
2543 IDispatch_Release(doc2);
2546 test_ClientSite(unk, NULL, !do_download);
2548 test_GetControlInfo(unk);
2549 test_wb_funcs(unk, FALSE);
2550 test_ConnectionPoint(unk, FALSE);
2551 test_IServiceProvider(unk);
2553 IWebBrowser2_Release(wb);
2554 ref = IUnknown_Release(unk);
2555 ok(ref == 0, "ref=%d, expected 0\n", ref);
2558 START_TEST(webbrowser)
2560 container_hwnd = create_container_window();
2562 OleInitialize(NULL);
2564 trace("Testing WebBrowser (no download)...\n");
2565 test_WebBrowser(FALSE);
2566 trace("Testing WebBrowser...\n");
2567 test_WebBrowser(TRUE);