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