ReactOS 0.4.17-dev-1071-gb2116d0
webbrowser.c
Go to the documentation of this file.
1/*
2 * Copyright 2006 Jacek Caban for CodeWeavers
3 *
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.
8 *
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.
13 *
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
17 */
18
19#define COBJMACROS
20#define CONST_VTABLE
21
22#include <wine/test.h>
23#include <stdarg.h>
24#include <stdio.h>
25
26#include "windef.h"
27#include "winbase.h"
28#include "initguid.h"
29#include "ole2.h"
30#include "exdisp.h"
31#include "htiframe.h"
32#include "htiface.h"
33#include "mshtmhst.h"
34#include "mshtmcid.h"
35#include "mshtml.h"
36#include "idispids.h"
37#include "olectl.h"
38#include "mshtmdid.h"
39#include "shobjidl.h"
40#include "shdeprecated.h"
41#include "shlguid.h"
42#include "exdispid.h"
43#include "mimeinfo.h"
44#include "hlink.h"
45#include "docobjectservice.h"
46
47DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
48DEFINE_GUID(outer_test_iid,0x06d4cd6c,0x18dd,0x11ea,0x8e,0x76,0xfc,0xaa,0x14,0x72,0x2d,0xac);
49DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0);
50DEFINE_GUID(IID_IProxyManager,0x00000008,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
51
52#define DEFINE_EXPECT(func) \
53 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
54
55#define SET_EXPECT(func) \
56 do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
57
58#define CHECK_EXPECT2(func) \
59 do { \
60 ok(expect_ ##func, "unexpected call " #func "\n"); \
61 called_ ## func = TRUE; \
62 }while(0)
63
64#define CHECK_EXPECT(func) \
65 do { \
66 CHECK_EXPECT2(func); \
67 expect_ ## func = FALSE; \
68 }while(0)
69
70#define CHECK_CALLED(func) \
71 do { \
72 ok(called_ ## func, "expected " #func "\n"); \
73 expect_ ## func = called_ ## func = FALSE; \
74 }while(0)
75
76#define CHECK_NOT_CALLED(func) \
77 do { \
78 ok(!called_ ## func, "unexpected " #func "\n"); \
79 expect_ ## func = called_ ## func = FALSE; \
80 }while(0)
81
82#define CLEAR_CALLED(func) \
83 expect_ ## func = called_ ## func = FALSE
84
85DEFINE_EXPECT(GetContainer);
86DEFINE_EXPECT(Site_GetWindow);
87DEFINE_EXPECT(ShowObject);
88DEFINE_EXPECT(CanInPlaceActivate);
89DEFINE_EXPECT(OnInPlaceActivate);
90DEFINE_EXPECT(OnUIActivate);
91DEFINE_EXPECT(GetWindowContext);
94DEFINE_EXPECT(UIWindow_SetActiveObject);
96DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
97DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
98DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
99DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
100DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
101DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
102DEFINE_EXPECT(Invoke_STATUSTEXTCHANGE);
103DEFINE_EXPECT(Invoke_PROPERTYCHANGE);
104DEFINE_EXPECT(Invoke_DOWNLOADBEGIN);
105DEFINE_EXPECT(Invoke_BEFORENAVIGATE2);
106DEFINE_EXPECT(Invoke_SETSECURELOCKICON);
107DEFINE_EXPECT(Invoke_FILEDOWNLOAD);
108DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
109DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
110DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
111DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
112DEFINE_EXPECT(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
113DEFINE_EXPECT(Invoke_DOWNLOADCOMPLETE);
114DEFINE_EXPECT(Invoke_ONMENUBAR);
115DEFINE_EXPECT(Invoke_ONADDRESSBAR);
116DEFINE_EXPECT(Invoke_ONSTATUSBAR);
117DEFINE_EXPECT(Invoke_ONTOOLBAR);
118DEFINE_EXPECT(Invoke_ONFULLSCREEN);
119DEFINE_EXPECT(Invoke_ONTHEATERMODE);
120DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE);
121DEFINE_EXPECT(Invoke_TITLECHANGE);
122DEFINE_EXPECT(Invoke_NAVIGATECOMPLETE2);
123DEFINE_EXPECT(Invoke_PROGRESSCHANGE);
124DEFINE_EXPECT(Invoke_DOCUMENTCOMPLETE);
125DEFINE_EXPECT(Invoke_WINDOWCLOSING);
126DEFINE_EXPECT(Invoke_SETPHISHINGFILTERSTATUS);
127DEFINE_EXPECT(EnableModeless_TRUE);
128DEFINE_EXPECT(EnableModeless_FALSE);
129DEFINE_EXPECT(GetHostInfo);
130DEFINE_EXPECT(GetOptionKeyPath);
131DEFINE_EXPECT(GetOverridesKeyPath);
132DEFINE_EXPECT(SetStatusText);
134DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0);
135DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
136DEFINE_EXPECT(Exec_SETPROGRESSMAX);
137DEFINE_EXPECT(Exec_SETPROGRESSPOS);
138DEFINE_EXPECT(Exec_UPDATECOMMANDS);
139DEFINE_EXPECT(Exec_SETTITLE);
140DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
141DEFINE_EXPECT(Exec_STOP);
142DEFINE_EXPECT(Exec_IDM_STOP);
143DEFINE_EXPECT(Exec_DocHostCommandHandler_2300);
144DEFINE_EXPECT(QueryStatus_STOP);
145DEFINE_EXPECT(QueryStatus_IDM_STOP);
146DEFINE_EXPECT(DocHost_EnableModeless_TRUE);
147DEFINE_EXPECT(DocHost_EnableModeless_FALSE);
148DEFINE_EXPECT(DocHost_TranslateAccelerator);
149DEFINE_EXPECT(GetDropTarget);
150DEFINE_EXPECT(TranslateUrl);
153DEFINE_EXPECT(OnUIDeactivate);
154DEFINE_EXPECT(OnInPlaceDeactivate);
155DEFINE_EXPECT(RequestUIActivate);
157DEFINE_EXPECT(OnFocus_TRUE);
158DEFINE_EXPECT(OnFocus_FALSE);
159DEFINE_EXPECT(GetExternal);
160DEFINE_EXPECT(outer_QI_test);
161DEFINE_EXPECT(Advise_OnClose);
162
164
165static IWebBrowser2 *wb;
166
172static const WCHAR *current_url;
175
177{
182
183static LONG (WINAPI *pSetQueryNetSessionCount)(DWORD);
184
185#define BUSY_FAIL 2
186
187#define DWL_EXPECT_BEFORE_NAVIGATE 0x01
188#define DWL_FROM_PUT_HREF 0x02
189#define DWL_FROM_GOBACK 0x04
190#define DWL_FROM_GOFORWARD 0x08
191#define DWL_HTTP 0x10
192#define DWL_REFRESH 0x20
193#define DWL_BACK_ENABLE 0x40
194
196
198
199/* Returns true if the user interface is in English. Note that this does not
200 * presume of the formatting of dates, numbers, etc.
201 */
203{
204 static HMODULE hkernel32 = NULL;
205 static LANGID (WINAPI *pGetThreadUILanguage)(void) = NULL;
206 static LANGID (WINAPI *pGetUserDefaultUILanguage)(void) = NULL;
207
208 if (!hkernel32)
209 {
210 hkernel32 = GetModuleHandleA("kernel32.dll");
211 pGetThreadUILanguage = (void*)GetProcAddress(hkernel32, "GetThreadUILanguage");
212 pGetUserDefaultUILanguage = (void*)GetProcAddress(hkernel32, "GetUserDefaultUILanguage");
213 }
214 if (pGetThreadUILanguage)
215 return PRIMARYLANGID(pGetThreadUILanguage()) == LANG_ENGLISH;
216 if (pGetUserDefaultUILanguage)
217 return PRIMARYLANGID(pGetUserDefaultUILanguage()) == LANG_ENGLISH;
218
220}
221
222static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
223{
224 IUnknown *unk1, *unk2;
225
226 if(iface1 == iface2)
227 return TRUE;
228
229 IUnknown_QueryInterface(iface1, &IID_IUnknown, (void**)&unk1);
230 IUnknown_Release(unk1);
231 IUnknown_QueryInterface(iface2, &IID_IUnknown, (void**)&unk2);
232 IUnknown_Release(unk2);
233
234 return unk1 == unk2;
235}
236
237#define create_webbrowser() _create_webbrowser(__LINE__)
238static IWebBrowser2 *_create_webbrowser(unsigned line)
239{
240 IWebBrowser2 *ret;
242
243 wb_version = 2;
244
245 hres = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
246 &IID_IWebBrowser2, (void**)&ret);
247 ok_(__FILE__,line)(hres == S_OK, "Creating WebBrowser object failed: %08lx\n", hres);
248 return ret;
249}
250
251#define test_LocationURL(a,b) _test_LocationURL(__LINE__,a,b)
252static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const WCHAR *exurl)
253{
254 BSTR url = (void*)0xdeadbeef;
256
257 hres = IWebBrowser2_get_LocationURL(wb, &url);
258 ok_(__FILE__,line) (hres == (*exurl ? S_OK : S_FALSE), "get_LocationURL failed: %08lx\n", hres);
259 if (SUCCEEDED(hres))
260 {
261 ok_(__FILE__,line) (!lstrcmpW(url, exurl), "unexpected URL: %s\n", wine_dbgstr_w(url));
263 }
264}
265
266#define test_LocationName(a,b) _test_LocationName(__LINE__,a,b)
267static void _test_LocationName(unsigned line, IWebBrowser2 *wb, const WCHAR *exname)
268{
269 BSTR name = (void*)0xdeadbeef;
271
272 hres = IWebBrowser2_get_LocationName(wb, &name);
273 ok_(__FILE__,line) (hres == (*exname ? S_OK : S_FALSE), "get_LocationName failed: %08lx\n", hres);
274 ok_(__FILE__,line) (!lstrcmpW(name, exname) || broken(is_http && !lstrcmpW(name, current_url)) /* Win10 2004 */,
275 "expected %s, got %s\n", wine_dbgstr_w(exname), wine_dbgstr_w(name));
277}
278
279#define test_ready_state(a,b) _test_ready_state(__LINE__,a,b)
280static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy)
281{
282 READYSTATE state;
283 VARIANT_BOOL busy;
285
286 hres = IWebBrowser2_get_ReadyState(wb, &state);
287 ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08lx\n", hres);
288 ok_(__FILE__,line)(state == exstate, "ReadyState = %d, expected %d\n", state, exstate);
289
290 hres = IWebBrowser2_get_Busy(wb, &busy);
291 if(expect_busy != BUSY_FAIL) {
292 ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08lx\n", hres);
293 ok_(__FILE__,line)(busy == expect_busy, "Busy = %x, expected %x for ready state %d\n",
294 busy, expect_busy, state);
295 }else {
297 ok_(__FILE__,line)(hres == E_FAIL, "get_ReadyState returned: %08lx\n", hres);
298 }
299}
300
301#define get_document(u) _get_document(__LINE__,u)
302static IHTMLDocument2 *_get_document(unsigned line, IWebBrowser2 *wb)
303{
304 IHTMLDocument2 *html_doc;
305 IDispatch *disp;
307
308 disp = NULL;
309 hres = IWebBrowser2_get_Document(wb, &disp);
310 ok_(__FILE__,line)(hres == S_OK, "get_Document failed: %08lx\n", hres);
311 ok_(__FILE__,line)(disp != NULL, "doc_disp == NULL\n");
312
313 hres = IDispatch_QueryInterface(disp, &IID_IHTMLDocument2, (void**)&html_doc);
314 ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLDocument iface: %08lx\n", hres);
315 ok(disp == (IDispatch*)html_doc, "disp != html_doc\n");
316 IDispatch_Release(disp);
317
318 return html_doc;
319}
320
321#define get_dochost(u) _get_dochost(__LINE__,u)
322static IOleClientSite *_get_dochost(unsigned line, IWebBrowser2 *unk)
323{
325 IHTMLDocument2 *doc;
326 IOleObject *oleobj;
328
329 doc = _get_document(line, unk);
330 hres = IHTMLDocument2_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj);
331 IHTMLDocument2_Release(doc);
332 ok_(__FILE__,line)(hres == S_OK, "Got 0x%08lx\n", hres);
333
334 hres = IOleObject_GetClientSite(oleobj, &client_site);
335 IOleObject_Release(oleobj);
336 ok_(__FILE__,line)(hres == S_OK, "Got 0x%08lx\n", hres);
337
338 return client_site;
339}
340
341static HRESULT QueryInterface(REFIID,void**);
342
344 REFIID riid, void **ppv)
345{
346 ok(0, "unexpected call\n");
347 return E_NOINTERFACE;
348}
349
351{
352 return 2;
353}
354
356{
357 return 1;
358}
359
361 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
362{
363 ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n");
364 ok(cCmds == 1, "cCmds=%ld, expected 1\n", cCmds);
365 ok(!pCmdText, "pCmdText != NULL\n");
366
367 switch(prgCmds[0].cmdID) {
368 case OLECMDID_STOP:
369 CHECK_EXPECT2(QueryStatus_STOP);
370 prgCmds[0].cmdf = OLECMDF_SUPPORTED;
371 return S_OK;
372 case OLECMDID_SETPROGRESSTEXT:
373 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
374 prgCmds[0].cmdf = OLECMDF_ENABLED;
375 return S_OK;
376 case IDM_STOP:
377 /* Note:
378 * IDM_STOP is a command specific to CGID_MSHTML (not an OLECMDID command).
379 * This command appears here for the ExecWB and QueryStatusWB tests in order
380 * to help demonstrate that these routines use a NULL pguidCmdGroup.
381 */
382 CHECK_EXPECT(QueryStatus_IDM_STOP);
383 prgCmds[0].cmdf = 0;
384 return S_OK;
385 default:
386 ok(0, "unexpected command %ld\n", prgCmds[0].cmdID);
387 }
388
389 return E_FAIL;
390}
391
392static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
393 DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
394{
395 if(!pguidCmdGroup) {
396 switch(nCmdID) {
397 case OLECMDID_SETPROGRESSMAX:
398 CHECK_EXPECT2(Exec_SETPROGRESSMAX);
399 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08lx\n", nCmdexecopt);
400 ok(pvaIn != NULL, "pvaIn == NULL\n");
401 if(pvaIn)
402 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
403 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
404 return S_OK;
405 case OLECMDID_SETPROGRESSPOS:
406 CHECK_EXPECT2(Exec_SETPROGRESSPOS);
407 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08lx\n", nCmdexecopt);
408 ok(pvaIn != NULL, "pvaIn == NULL\n");
409 if(pvaIn)
410 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
411 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
412 return S_OK;
413 case OLECMDID_SETDOWNLOADSTATE:
415 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER || !nCmdexecopt,
416 "nCmdexecopts=%08lx\n", nCmdexecopt);
417 else
418 ok(!nCmdexecopt, "nCmdexecopts=%08lx\n", nCmdexecopt);
419 ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut);
420 ok(pvaIn != NULL, "pvaIn == NULL\n");
421 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d\n", V_VT(pvaIn));
422 switch(V_I4(pvaIn)) {
423 case 0:
424 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_0);
425 break;
426 case 1:
427 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1);
428 break;
429 default:
430 ok(0, "unexpected V_I4(pvaIn)=%ld\n", V_I4(pvaIn));
431 }
432 return S_OK;
433 case OLECMDID_UPDATECOMMANDS:
434 CHECK_EXPECT2(Exec_UPDATECOMMANDS);
435 ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08lx\n", nCmdexecopt);
436 ok(!pvaIn, "pvaIn != NULL\n");
437 ok(!pvaOut, "pvaOut=%p, expected NULL\n", pvaOut);
438 return S_OK;
439 case OLECMDID_SETTITLE:
440 CHECK_EXPECT(Exec_SETTITLE);
441 /* TODO: test args */
442 return S_OK;
443 case OLECMDID_STOP:
444 CHECK_EXPECT(Exec_STOP);
445 return S_OK;
446 case IDM_STOP:
447 /* Note:
448 * IDM_STOP is a command specific to CGID_MSHTML (not an OLECMDID command).
449 * This command appears here for the ExecWB and QueryStatusWB tests in order
450 * to help demonstrate that these routines use a NULL pguidCmdGroup.
451 */
452 CHECK_EXPECT(Exec_IDM_STOP);
453 return OLECMDERR_E_NOTSUPPORTED;
454 case OLECMDID_UPDATETRAVELENTRY_DATARECOVERY:
455 case OLECMDID_PAGEAVAILABLE: /* TODO (IE11) */
456 return E_NOTIMPL;
457 case 6058: /* TODO */
458 return E_NOTIMPL;
459 default:
460 ok(0, "unexpected nCmdID %ld\n", nCmdID);
461 }
462 }else if(IsEqualGUID(&CGID_Explorer, pguidCmdGroup)) {
463 switch(nCmdID) {
464 case 20: /* TODO */
465 case 24: /* TODO */
466 case 25: /* IE5 */
467 case 37: /* TODO */
468 case 39: /* TODO */
469 case 66: /* TODO */
470 case 67: /* TODO */
471 case 69: /* TODO */
472 case 101: /* TODO (IE8) */
473 case 109: /* TODO (IE9) */
474 case 113: /* TODO (IE10) */
475 case 119: /* IE11 */
476 return E_FAIL;
477 default:
478 ok(0, "unexpected nCmdID %ld\n", nCmdID);
479 }
480 }else if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) {
481 switch(nCmdID) {
482 case 63: /* win10 */
483 case 105: /* TODO */
484 case 132: /* win10 */
485 case 133: /* IE11 */
486 case 134: /* TODO (IE10) */
487 case 135: /* IE11 */
488 case 136: /* TODO (IE10) */
489 case 137: /* win10 */
490 case 138: /* TODO */
491 case 140: /* TODO (Win7) */
492 case 144: /* TODO */
493 case 178: /* IE11 */
494 case 179: /* IE11 */
495 case 180: /* IE11 */
496 case 181: /* IE11 */
497 case 182: /* win10 */
498 return E_FAIL;
499 default:
500 ok(0, "unexpected nCmdID %ld\n", nCmdID);
501 }
502 }else if(IsEqualGUID(&CGID_DocHostCmdPriv, pguidCmdGroup)) {
503 switch(nCmdID) {
504 case 11: /* TODO */
505 break;
506 default:
507 ok(0, "unexpected nCmdID %ld of CGID_DocHostCmdPriv\n", nCmdID);
508 }
509 }else if(IsEqualGUID(&CGID_DocHostCommandHandler, pguidCmdGroup)) {
510 switch(nCmdID) {
511 case 6041: /* TODO */
512 break;
513 case 2300:
514 CHECK_EXPECT(Exec_DocHostCommandHandler_2300);
515 return E_NOTIMPL;
516 default:
517 ok(0, "unexpected nCmdID %ld of CGID_DocHostCommandHandler\n", nCmdID);
518 }
519 }else {
520 ok(0, "unexpected pguidCmdGroup %s\n", wine_dbgstr_guid(pguidCmdGroup));
521 }
522
523 return E_FAIL;
524}
525
526static IOleCommandTargetVtbl OleCommandTargetVtbl = {
532};
533
535
537{
538 if(IsEqualGUID(&IID_ITargetContainer, riid))
539 return E_NOINTERFACE; /* TODO */
540
541 if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
543 {
545 return S_OK;
546 }
547 else
548 return E_NOINTERFACE;
549 }
550
551 ok(0, "unexpected call\n");
552 return E_NOINTERFACE;
553}
554
556{
557 return 2;
558}
559
561{
562 return 1;
563}
564
566 LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
567{
568 ok(0, "unexpected call\n");
569 return E_NOTIMPL;
570}
571
573 IEnumUnknown **ppenum)
574{
575 ok(0, "unexpected call\n");
576 return E_NOTIMPL;
577}
578
580{
581 ok(0, "unexpected call\n");
582 return E_NOTIMPL;
583}
584
585static const IOleContainerVtbl OleContainerVtbl = {
592};
593
595
597{
598 return QueryInterface(riid, ppv);
599}
600
602{
603 return 2;
604}
605
607{
608 return 1;
609}
610
612{
613 ok(0, "unexpected call\n");
614 return E_NOTIMPL;
615}
616
618 ITypeInfo **ppTInfo)
619{
620 ok(0, "unexpected call\n");
621 return E_NOTIMPL;
622}
623
624static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
625 UINT cNames, LCID lcid, DISPID *rgDispId)
626{
627 ok(0, "unexpected call\n");
628 return E_NOTIMPL;
629}
630
632 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
633 EXCEPINFO *pExcepInfo, UINT *puArgErr)
634{
635 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
636 ok(pDispParams != NULL, "pDispParams == NULL\n");
637 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
638 ok(V_VT(pVarResult) == VT_EMPTY, "V_VT(pVarResult)=%d\n", V_VT(pVarResult));
639 ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
640 ok(pDispParams->rgvarg == NULL, "pDispParams->rgvarg = %p\n", pDispParams->rgvarg);
641 ok(pDispParams->rgdispidNamedArgs == NULL,
642 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
643 ok(pDispParams->cArgs == 0, "pDispParams->cArgs = %d\n", pDispParams->cArgs);
644 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
645
646 switch(dispIdMember) {
648 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
649 return E_FAIL;
651 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
652 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
653 return E_FAIL;
655 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
656 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
657 return E_FAIL;
659 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
660 ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
661 return E_FAIL;
663 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
664 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
665 V_VT(pVarResult) = VT_BOOL;
666 V_BOOL(pVarResult) = VARIANT_FALSE;
667 return S_OK;
669 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
670 ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
671 V_VT(pVarResult) = VT_BOOL;
672 V_BOOL(pVarResult) = VARIANT_FALSE;
673 return S_OK;
674 }
675
676 ok(0, "unexpected dispIdMember %ld\n", dispIdMember);
677 return E_NOTIMPL;
678}
679
680static IDispatchVtbl DispatchVtbl = {
688};
689
691
693{
694 *ppv = NULL;
695
696 if(IsEqualGUID(&DIID_DWebBrowserEvents2, riid) || IsEqualGUID(&IID_IDispatch, riid)) {
697 *ppv = iface;
698 return S_OK;
699 }
700
701 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
702 return E_NOINTERFACE;
703}
704
705#define test_invoke_bool(p,s) _test_invoke_bool(__LINE__,p,s)
706static void _test_invoke_bool(unsigned line, const DISPPARAMS *params, BOOL strict)
707{
708 ok_(__FILE__,line) (params->rgvarg != NULL, "rgvarg == NULL\n");
709 ok_(__FILE__,line) (params->cArgs == 1, "cArgs=%d, expected 1\n", params->cArgs);
710 ok_(__FILE__,line) (V_VT(params->rgvarg) == VT_BOOL, "V_VT(arg)=%d\n", V_VT(params->rgvarg));
711 if(strict)
712 ok_(__FILE__,line) (V_BOOL(params->rgvarg) == exvb, "V_VT(arg)=%x, expected %x\n",
713 V_BOOL(params->rgvarg), exvb);
714 else
715 ok_(__FILE__,line) (!V_BOOL(params->rgvarg) == !exvb, "V_VT(arg)=%x, expected %x\n",
716 V_BOOL(params->rgvarg), exvb);
717}
718
719static void test_OnBeforeNavigate(const VARIANT *disp, const VARIANT *url, const VARIANT *flags,
720 const VARIANT *frame, const VARIANT *post_data, const VARIANT *headers, const VARIANT *cancel)
721{
722 BSTR str;
723
724 ok(V_VT(disp) == VT_DISPATCH, "V_VT(disp)=%d, expected VT_DISPATCH\n", V_VT(disp));
725 ok(V_DISPATCH(disp) != NULL, "V_DISPATCH(disp) == NULL\n");
726 ok(V_DISPATCH(disp) == (IDispatch*)wb, "V_DISPATCH(disp)=%p, wb=%p\n", V_DISPATCH(disp), wb);
727
728 ok(V_VT(url) == (VT_BYREF|VT_VARIANT), "V_VT(url)=%x, expected VT_BYREF|VT_VARIANT\n", V_VT(url));
729 ok(V_VARIANTREF(url) != NULL, "V_VARIANTREF(url) == NULL)\n");
730 if(V_VARIANTREF(url)) {
731 ok(V_VT(V_VARIANTREF(url)) == VT_BSTR, "V_VT(V_VARIANTREF(url))=%d, expected VT_BSTR\n",
733 ok(V_BSTR(V_VARIANTREF(url)) != NULL, "V_BSTR(V_VARIANTREF(url)) == NULL\n");
734 ok(!lstrcmpW(V_BSTR(V_VARIANTREF(url)), current_url), "unexpected url %s, expected %s\n",
736 }
737
738 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
739 V_VT(flags));
740 ok(V_VT(flags) == (VT_BYREF|VT_VARIANT), "V_VT(flags)=%x, expected VT_BYREF|VT_VARIANT\n",
741 V_VT(flags));
742 ok(V_VARIANTREF(flags) != NULL, "V_VARIANTREF(flags) == NULL)\n");
743 if(V_VARIANTREF(flags)) {
744 int f;
745
746 ok(V_VT(V_VARIANTREF(flags)) == VT_I4, "V_VT(V_VARIANTREF(flags))=%d, expected VT_I4\n",
749 f &= ~0x100; /* IE11 sets this flag */
750 if(is_first_load)
751 ok(!f, "flags = %lx, expected 0\n", V_I4(V_VARIANTREF(flags)));
752 else
753 ok(!(f & ~0x40), "flags = %lx, expected 0x40 or 0\n", V_I4(V_VARIANTREF(flags)));
754 }
755
756 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
757 V_VT(frame));
758 ok(V_VT(frame) == (VT_BYREF|VT_VARIANT), "V_VT(frame)=%x, expected VT_BYREF|VT_VARIANT\n",
759 V_VT(frame));
760 ok(V_VARIANTREF(frame) != NULL, "V_VARIANTREF(frame) == NULL)\n");
761 if(V_VARIANTREF(frame)) {
762 ok(V_VT(V_VARIANTREF(frame)) == VT_BSTR, "V_VT(V_VARIANTREF(frame))=%d, expected VT_BSTR\n",
763 V_VT(V_VARIANTREF(frame)));
764 ok(V_BSTR(V_VARIANTREF(frame)) == NULL, "V_BSTR(V_VARIANTREF(frame)) = %p, expected NULL\n",
765 V_BSTR(V_VARIANTREF(frame)));
766 }
767
768 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
769 V_VT(post_data));
770 ok(V_VT(post_data) == (VT_BYREF|VT_VARIANT), "V_VT(post_data)=%x, expected VT_BYREF|VT_VARIANT\n",
771 V_VT(post_data));
772 ok(V_VARIANTREF(post_data) != NULL, "V_VARIANTREF(post_data) == NULL)\n");
775 "V_VT(V_VARIANTREF(post_data))=%d, expected VT_VARIANT|VT_BYREF\n",
778 "V_VARIANTREF(V_VARIANTREF(post_data)) == NULL\n");
781 "V_VT(V_VARIANTREF(V_VARIANTREF(post_data))) = %d, expected VT_EMPTY\n",
783
786
787 ok(sa->cDims == 1, "sa->cDims = %d, expected 1\n", sa->cDims);
788 ok(sa->fFeatures == 0, "sa->fFeatures = %d, expected 0\n", sa->fFeatures);
789 }
790 }
791 }
792
793 ok(V_VT(headers) == (VT_BYREF|VT_VARIANT), "V_VT(headers)=%x, expected VT_BYREF|VT_VARIANT\n",
794 V_VT(headers));
795 ok(V_VARIANTREF(headers) != NULL, "V_VARIANTREF(headers) == NULL)\n");
796 if(V_VARIANTREF(headers)) {
797 ok(V_VT(V_VARIANTREF(headers)) == VT_BSTR, "V_VT(V_VARIANTREF(headers))=%d, expected VT_BSTR\n",
800 ok(!str || !lstrcmpW(str, L"Referer: http://test.winehq.org/tests/hello.html\r\n"),
801 "V_BSTR(V_VARIANTREF(headers)) = %s, expected NULL\n", wine_dbgstr_w(str));
802 }
803
804 ok(V_VT(cancel) == (VT_BYREF|VT_BOOL), "V_VT(cancel)=%x, expected VT_BYREF|VT_BOOL\n",
805 V_VT(cancel));
806 ok(V_BOOLREF(cancel) != NULL, "V_BOOLREF(pDispParams->rgvarg[0] == NULL)\n");
807 if(V_BOOLREF(cancel))
808 ok(*V_BOOLREF(cancel) == VARIANT_FALSE, "*V_BOOLREF(cancel) = %x, expected VARIANT_FALSE\n",
809 *V_BOOLREF(cancel));
810}
811
812static void test_navigatecomplete2(DISPPARAMS *dp)
813{
814 VARIANT *v;
815
816 CHECK_EXPECT(Invoke_NAVIGATECOMPLETE2);
817
818 ok(dp->rgvarg != NULL, "rgvarg == NULL\n");
819 ok(dp->cArgs == 2, "cArgs=%d, expected 2\n", dp->cArgs);
820
821 ok(V_VT(dp->rgvarg) == (VT_BYREF|VT_VARIANT), "V_VT(dp->rgvarg) = %d\n", V_VT(dp->rgvarg));
822 v = V_VARIANTREF(dp->rgvarg);
823 ok(V_VT(v) == VT_BSTR, "V_VT(url) = %d\n", V_VT(v));
824 ok(!lstrcmpW(V_BSTR(v), current_url), "url=%s, expected %s\n", wine_dbgstr_w(V_BSTR(v)),
826
827 ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
828 ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
829
831 test_ready_state(READYSTATE_COMPLETE, VARIANT_TRUE);
832 else
833 test_ready_state(READYSTATE_LOADING, VARIANT_TRUE);
834}
835
836static void test_documentcomplete(DISPPARAMS *dp)
837{
838 VARIANT *v;
839
840 CHECK_EXPECT(Invoke_DOCUMENTCOMPLETE);
841
842 ok(dp->rgvarg != NULL, "rgvarg == NULL\n");
843 ok(dp->cArgs == 2, "cArgs=%d, expected 2\n", dp->cArgs);
844
845 ok(V_VT(dp->rgvarg) == (VT_BYREF|VT_VARIANT), "V_VT(dp->rgvarg) = %d\n", V_VT(dp->rgvarg));
846 v = V_VARIANTREF(dp->rgvarg);
847 ok(V_VT(v) == VT_BSTR, "V_VT(url) = %d\n", V_VT(v));
848 ok(!lstrcmpW(V_BSTR(v), current_url), "url=%s, expected %s\n", wine_dbgstr_w(V_BSTR(v)),
850
851 ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
852 ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
853
854 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
855}
856
858 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
859 EXCEPINFO *pExcepInfo, UINT *puArgErr)
860{
861 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
862 ok(pDispParams != NULL, "pDispParams == NULL\n");
863 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
864 ok(pVarResult == NULL, "pVarResult=%p\n", pVarResult);
865 ok(wFlags == DISPATCH_METHOD, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags);
866 ok(pDispParams->rgdispidNamedArgs == NULL,
867 "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
868 ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
869
870 switch(dispIdMember) {
872 CHECK_EXPECT2(Invoke_STATUSTEXTCHANGE);
873
874 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
875 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
876 ok(V_VT(pDispParams->rgvarg) == VT_BSTR, "V_VT(pDispParams->rgvarg)=%d, expected VT_BSTR\n",
877 V_VT(pDispParams->rgvarg));
878 ok(V_BSTR(pDispParams->rgvarg) != NULL, "V_BSTR(pDispParams->rgvarg) is NULL\n");
879 /* TODO: Check text */
880 break;
881
883 CHECK_EXPECT2(Invoke_PROPERTYCHANGE);
884
885 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
886 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
887 /* TODO: Check args */
888 break;
889
891 CHECK_EXPECT2(Invoke_DOWNLOADBEGIN);
892
893 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
894 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
896 test_ready_state(READYSTATE_COMPLETE, VARIANT_TRUE);
897 else if(!(dwl_flags & DWL_REFRESH)) /* todo_wine */
898 test_ready_state(READYSTATE_LOADING, VARIANT_TRUE);
899 break;
900
902 CHECK_EXPECT(Invoke_BEFORENAVIGATE2);
903
904 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
905 ok(pDispParams->cArgs == 7, "cArgs=%d, expected 7\n", pDispParams->cArgs);
906 test_OnBeforeNavigate(pDispParams->rgvarg+6, pDispParams->rgvarg+5, pDispParams->rgvarg+4,
907 pDispParams->rgvarg+3, pDispParams->rgvarg+2, pDispParams->rgvarg+1,
908 pDispParams->rgvarg);
910 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
911 else
912 test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
913 break;
914
916 CHECK_EXPECT2(Invoke_SETSECURELOCKICON);
917
918 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
919 ok(pDispParams->cArgs == 1, "cArgs=%d, expected 1\n", pDispParams->cArgs);
920 /* TODO: Check args */
921 break;
922
924 CHECK_EXPECT(Invoke_FILEDOWNLOAD);
925
926 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
927 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
928 /* TODO: Check args */
929 break;
930
932 ok(pDispParams->rgvarg != NULL, "rgvarg == NULL\n");
933 ok(pDispParams->cArgs == 2, "cArgs=%d, expected 2\n", pDispParams->cArgs);
934
935 ok(V_VT(pDispParams->rgvarg) == VT_BOOL, "V_VT(pDispParams->rgvarg) = %d\n", V_VT(pDispParams->rgvarg));
936 ok(V_VT(pDispParams->rgvarg+1) == VT_I4, "V_VT(pDispParams->rgvarg+1) = %d\n", V_VT(pDispParams->rgvarg+1));
937 ok(V_I4(pDispParams->rgvarg+1) == CSC_NAVIGATEFORWARD ||
938 V_I4(pDispParams->rgvarg+1) == CSC_NAVIGATEBACK ||
939 V_I4(pDispParams->rgvarg+1) == CSC_UPDATECOMMANDS,
940 "V_I4(pDispParams->rgvarg+1) = %lx\n", V_I4(pDispParams->rgvarg+1));
941
942 if (V_I4(pDispParams->rgvarg+1) == CSC_NAVIGATEFORWARD)
943 {
945 if(V_BOOL(pDispParams->rgvarg))
946 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
947 else
948 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
949 }
950 }
951 else if (V_I4(pDispParams->rgvarg+1) == CSC_NAVIGATEBACK)
952 {
954 if(V_BOOL(pDispParams->rgvarg))
955 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
956 else
957 CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
958 }
959 }
960 else if (V_I4(pDispParams->rgvarg+1) == CSC_UPDATECOMMANDS)
961 {
962 todo_wine CHECK_EXPECT2(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
963 set_update_commands_enable = V_BOOL(pDispParams->rgvarg);
964 }
965 break;
966
968 CHECK_EXPECT2(Invoke_DOWNLOADCOMPLETE);
969
970 ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
971 ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
973 test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
974 break;
975
976 case DISPID_ONMENUBAR:
977 CHECK_EXPECT(Invoke_ONMENUBAR);
978 test_invoke_bool(pDispParams, TRUE);
979 break;
980
982 CHECK_EXPECT(Invoke_ONADDRESSBAR);
983 test_invoke_bool(pDispParams, TRUE);
984 break;
985
987 CHECK_EXPECT(Invoke_ONSTATUSBAR);
988 test_invoke_bool(pDispParams, TRUE);
989 break;
990
991 case DISPID_ONTOOLBAR:
992 CHECK_EXPECT(Invoke_ONTOOLBAR);
993 test_invoke_bool(pDispParams, FALSE);
994 break;
995
997 CHECK_EXPECT(Invoke_ONFULLSCREEN);
998 test_invoke_bool(pDispParams, TRUE);
999 break;
1000
1002 CHECK_EXPECT(Invoke_ONTHEATERMODE);
1003 test_invoke_bool(pDispParams, TRUE);
1004 break;
1005
1007 CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE);
1008 test_invoke_bool(pDispParams, TRUE);
1009 break;
1010
1011 case DISPID_TITLECHANGE:
1012 CHECK_EXPECT2(Invoke_TITLECHANGE);
1013 /* FIXME */
1014 break;
1015
1017 test_navigatecomplete2(pDispParams);
1018 break;
1019
1021 CHECK_EXPECT2(Invoke_PROGRESSCHANGE);
1022 /* FIXME */
1023 break;
1024
1026 test_documentcomplete(pDispParams);
1027 break;
1028
1029 case DISPID_WINDOWCLOSING: {
1030 VARIANT *is_child = pDispParams->rgvarg+1, *cancel = pDispParams->rgvarg;
1031
1032 CHECK_EXPECT(Invoke_WINDOWCLOSING);
1033
1034 ok(pDispParams->cArgs == 2, "pdp->cArgs = %d\n", pDispParams->cArgs);
1035 ok(V_VT(is_child) == VT_BOOL, "V_VT(is_child) = %d\n", V_VT(is_child));
1036 ok(!V_BOOL(is_child), "V_BOOL(is_child) = %x\n", V_BOOL(is_child));
1037 ok(V_VT(cancel) == (VT_BYREF|VT_BOOL), "V_VT(cancel) = %d\n", V_VT(cancel));
1038 ok(!*V_BOOLREF(cancel), "*V_BOOLREF(cancel) = %x\n", *V_BOOLREF(cancel));
1039
1040 *V_BOOLREF(cancel) = VARIANT_TRUE;
1041 return S_OK;
1042 }
1043
1044 case DISPID_SETPHISHINGFILTERSTATUS: /* FIXME */
1045 CHECK_EXPECT2(Invoke_SETPHISHINGFILTERSTATUS);
1046 break;
1047
1048 case DISPID_BEFORESCRIPTEXECUTE: /* FIXME: IE10 */
1049 break;
1050
1052 break;
1053
1054 default:
1055 ok(0, "unexpected dispIdMember %ld\n", dispIdMember);
1056 }
1057
1058 return S_OK;
1059}
1060
1061static IDispatchVtbl WebBrowserEvents2Vtbl = {
1069};
1070
1072
1074{
1075 return QueryInterface(riid, ppv);
1076}
1077
1079{
1080 return 2;
1081}
1082
1084{
1085 return 1;
1086}
1087
1089{
1090 ok(0, "unexpected call\n");
1091 return E_NOTIMPL;
1092}
1093
1094static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign, DWORD dwWhichMoniker,
1095 IMoniker **ppmon)
1096{
1097 ok(0, "unexpected call\n");
1098 return E_NOTIMPL;
1099}
1100
1102{
1103 CHECK_EXPECT(GetContainer);
1104
1105 ok(ppContainer != NULL, "ppContainer == NULL\n");
1106 if(ppContainer)
1107 *ppContainer = &OleContainer;
1108
1109 return S_OK;
1110}
1111
1113{
1114 CHECK_EXPECT(ShowObject);
1115 return S_OK;
1116}
1117
1119{
1120 ok(0, "unexpected call\n");
1121 return E_NOTIMPL;
1122}
1123
1125{
1126 ok(0, "unexpected call\n");
1127 return E_NOTIMPL;
1128}
1129
1130static const IOleClientSiteVtbl ClientSiteVtbl = {
1140};
1141
1144
1146{
1147 *ppv = NULL;
1148 return E_NOINTERFACE;
1149}
1150
1152{
1153 return 2;
1154}
1155
1157{
1158 return 1;
1159}
1160
1162{
1163 ok(0, "unexpected call\n");
1164 return E_NOTIMPL;
1165}
1166
1168 BOOL fLock)
1169{
1170 ok(0, "unexpected call\n");
1171 return E_NOTIMPL;
1172}
1173
1175 IDispatch **ppDisp)
1176{
1177 ok(0, "unexpected call\n");
1178 return E_NOTIMPL;
1179}
1180
1182 POINTL *pPtlHimetric,
1183 POINTF *pPtfContainer,
1184 DWORD dwFlags)
1185{
1186 ok(0, "unexpected call\n");
1187 return E_NOTIMPL;
1188}
1189
1191 DWORD grfModifiers)
1192{
1195}
1196
1198{
1199 if(fGotFocus)
1200 CHECK_EXPECT2(OnFocus_TRUE);
1201 else
1202 CHECK_EXPECT2(OnFocus_FALSE);
1203 return E_NOTIMPL;
1204}
1205
1207{
1208 ok(0, "unexpected call\n");
1209 return E_NOTIMPL;
1210}
1211
1212static IOleControlSiteVtbl ControlSiteVtbl = {
1223};
1224
1226
1228 REFIID riid, void **ppv)
1229{
1230 ok(0, "unexpected call\n");
1231 return E_NOINTERFACE;
1232}
1233
1235{
1236 return 2;
1237}
1238
1240{
1241 return 1;
1242}
1243
1245{
1246 ok(0, "unexpected call\n");
1247 return E_NOTIMPL;
1248}
1249
1251{
1253 ok(phwnd != NULL, "phwnd == NULL\n");
1254 if(phwnd)
1255 *phwnd = container_hwnd;
1256 return S_OK;
1257}
1258
1260{
1261 ok(0, "unexpected call\n");
1262 return E_NOTIMPL;
1263}
1264
1266{
1267 ok(0, "unexpected call\n");
1268 return E_NOTIMPL;
1269}
1270
1272 LPCBORDERWIDTHS pborderwidths)
1273{
1274 ok(0, "unexpected call\n");
1275 return E_NOTIMPL;
1276}
1277
1279 LPCBORDERWIDTHS pborderwidths)
1280{
1281 ok(0, "unexpected call\n");
1282 return E_NOTIMPL;
1283}
1284
1286 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
1287{
1288 CHECK_EXPECT(UIWindow_SetActiveObject);
1289 if(!test_close && !test_hide) {
1290 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
1291 ok(!lstrcmpW(pszObjName, L"item"), "unexpected pszObjName\n");
1292 } else {
1293 ok(!pActiveObject, "pActiveObject != NULL\n");
1294 ok(!pszObjName, "pszObjName != NULL\n");
1295 }
1296 return S_OK;
1297}
1298
1300 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
1301{
1303 if(!test_close && !test_hide) {
1304 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
1305 ok(!lstrcmpW(pszObjName, L"item"), "unexpected pszObjName\n");
1306 } else {
1307 ok(!pActiveObject, "pActiveObject != NULL\n");
1308 ok(!pszObjName, "pszObjName != NULL\n");
1309 }
1310 return S_OK;
1311}
1312
1314 LPOLEMENUGROUPWIDTHS lpMenuWidths)
1315{
1316 ok(0, "unexpected call\n");
1317 return E_NOTIMPL;
1318}
1319
1321 HOLEMENU holemenu, HWND hwndActiveObject)
1322{
1324 ok(hmenuShared == NULL, "hmenuShared=%p\n", hmenuShared);
1325 ok(holemenu == NULL, "holemenu=%p\n", holemenu);
1326 ok(hwndActiveObject == shell_embedding_hwnd, "hwndActiveObject=%p, expected %p\n",
1327 hwndActiveObject, shell_embedding_hwnd);
1328 return S_OK;
1329}
1330
1332{
1333 ok(0, "unexpected call\n");
1334 return E_NOTIMPL;
1335}
1336
1337static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
1338{
1339 CHECK_EXPECT2(SetStatusText);
1340 /* FIXME: Check pszStatusText */
1341 return S_OK;
1342}
1343
1345{
1346 if(fEnable)
1347 CHECK_EXPECT2(EnableModeless_TRUE);
1348 else
1349 CHECK_EXPECT2(EnableModeless_FALSE);
1350 return S_OK;
1351}
1352
1354{
1355 ok(0, "unexpected call\n");
1356 return E_NOTIMPL;
1357}
1358
1359static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = {
1369};
1370
1371static IOleInPlaceUIWindow InPlaceUIWindow = { (IOleInPlaceUIWindowVtbl*)&InPlaceUIWindowVtbl };
1372
1373static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
1389};
1390
1392
1394{
1395 return QueryInterface(riid, ppv);
1396}
1397
1399{
1400 return 2;
1401}
1402
1404{
1405 return 1;
1406}
1407
1409{
1410 CHECK_EXPECT(Site_GetWindow);
1411 ok(phwnd != NULL, "phwnd == NULL\n");
1412 if(phwnd)
1413 *phwnd = container_hwnd;
1414 return S_OK;
1415}
1416
1418{
1419 ok(0, "unexpected call\n");
1420 return E_NOTIMPL;
1421}
1422
1424{
1425 CHECK_EXPECT(CanInPlaceActivate);
1426 return S_OK;
1427}
1428
1430{
1431 CHECK_EXPECT(OnInPlaceActivate);
1432 return S_OK;
1433}
1434
1436{
1437 CHECK_EXPECT(OnUIActivate);
1438 return S_OK;
1439}
1440
1442 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
1443 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
1444{
1445 static const RECT pos_rect = {2,1,1002,901};
1446 static const RECT clip_rect = {10,10,990,890};
1447
1448 CHECK_EXPECT(GetWindowContext);
1449
1450 ok(ppFrame != NULL, "ppFrame = NULL\n");
1451 if(ppFrame)
1452 *ppFrame = &InPlaceFrame;
1453
1454 ok(ppDoc != NULL, "ppDoc = NULL\n");
1455 if(ppDoc)
1456 *ppDoc = &InPlaceUIWindow;
1457
1458 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
1459 if(lprcPosRect)
1460 memcpy(lprcPosRect, &pos_rect, sizeof(RECT));
1461
1462 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
1463 if(lprcClipRect)
1464 memcpy(lprcClipRect, &clip_rect, sizeof(RECT));
1465
1466 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
1467 if(lpFrameInfo) {
1468 ok(lpFrameInfo->cb == sizeof(*lpFrameInfo), "lpFrameInfo->cb = %u, expected %u\n", lpFrameInfo->cb, (unsigned)sizeof(*lpFrameInfo));
1469 lpFrameInfo->fMDIApp = FALSE;
1470 lpFrameInfo->hwndFrame = container_hwnd;
1471 lpFrameInfo->haccel = NULL;
1472 lpFrameInfo->cAccelEntries = 0;
1473 }
1474
1475 return S_OK;
1476}
1477
1479{
1480 ok(0, "unexpected call\n");
1481 return E_NOTIMPL;
1482}
1483
1485{
1486 CHECK_EXPECT(OnUIDeactivate);
1487 ok(!fUndoable, "fUndoable should be FALSE\n");
1488 return S_OK;
1489}
1490
1492{
1493 CHECK_EXPECT(OnInPlaceDeactivate);
1494 return S_OK;
1495}
1496
1498{
1499 ok(0, "unexpected call\n");
1500 return E_NOTIMPL;
1501}
1502
1504{
1505 ok(0, "unexpected call\n");
1506 return E_NOTIMPL;
1507}
1508
1510{
1511 ok(0, "unexpected call\n");
1512 return E_NOTIMPL;
1513}
1514
1516 BOOL *pNoRedraw, DWORD dwFlags)
1517{
1518 ok(0, "unexpected call\n");
1519 return E_NOTIMPL;
1520}
1521
1523 BOOL fNoRedraw)
1524{
1525 ok(0, "unexpected call\n");
1526 return E_NOTIMPL;
1527}
1528
1530{
1531 CHECK_EXPECT2(RequestUIActivate);
1532 return S_OK;
1533}
1534
1535static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl = {
1554};
1555
1557
1559{
1560 return QueryInterface(riid, ppv);
1561}
1562
1564{
1565 return 2;
1566}
1567
1569{
1570 return 1;
1571}
1572
1574 IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
1575{
1576 ok(0, "unexpected call %ld %p %p %p\n", dwID, ppt, pcmdtReserved, pdicpReserved);
1577 return S_FALSE;
1578}
1579
1581{
1582 CHECK_EXPECT2(GetHostInfo);
1583 ok(pInfo != NULL, "pInfo=NULL\n");
1584 if(pInfo) {
1585 ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO) || broken(!pInfo->cbSize), "pInfo->cbSize=%lu\n", pInfo->cbSize);
1586 ok(!pInfo->dwFlags, "pInfo->dwFlags=%08lx, expected 0\n", pInfo->dwFlags);
1587 ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08lx, expected 0\n", pInfo->dwDoubleClick);
1588 ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
1589 ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
1590 }
1591 return E_FAIL;
1592}
1593
1595 IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
1597{
1598 CHECK_EXPECT(ShowUI);
1599 return E_NOTIMPL;
1600}
1601
1603{
1604 CHECK_EXPECT(HideUI);
1605 return E_NOTIMPL;
1606}
1607
1609{
1610 CHECK_EXPECT2(UpdateUI);
1611 return E_NOTIMPL;
1612}
1613
1615{
1616 if(fEnable)
1617 CHECK_EXPECT(DocHost_EnableModeless_TRUE);
1618 else
1619 CHECK_EXPECT(DocHost_EnableModeless_FALSE);
1620
1621 return S_OK;
1622}
1623
1625{
1626 ok(0, "unexpected call\n");
1627 return E_NOTIMPL;
1628}
1629
1631{
1632 ok(0, "unexpected call\n");
1633 return E_NOTIMPL;
1634}
1635
1637 IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
1638{
1639 ok(0, "unexpected call\n");
1640 return E_NOTIMPL;
1641}
1642
1644 const GUID *pguidCmdGroup, DWORD nCmdID)
1645{
1646 CHECK_EXPECT(DocHost_TranslateAccelerator);
1647 ok(pguidCmdGroup != NULL, "Got NULL pguidCmdGroup.\n");
1648 if(pguidCmdGroup)
1649 ok(IsEqualGUID(pguidCmdGroup, &CGID_MSHTML), "Unexpected pguidCmdGroup\n");
1650 ok(lpMsg != NULL, "Got NULL lpMsg.\n");
1652}
1653
1655 LPOLESTR *pchKey, DWORD dw)
1656{
1657 CHECK_EXPECT(GetOptionKeyPath);
1658 ok(pchKey != NULL, "pchKey==NULL\n");
1659 if(pchKey)
1660 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1661 ok(!dw, "dw=%lx\n", dw);
1662 return E_NOTIMPL;
1663}
1664
1666 IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
1667{
1668 CHECK_EXPECT(GetDropTarget);
1669 return E_NOTIMPL;
1670}
1671
1673{
1674 CHECK_EXPECT(GetExternal);
1675 *ppDispatch = NULL;
1676 return S_FALSE;
1677}
1678
1680 OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
1681{
1683 CHECK_EXPECT(TranslateUrl);
1684 return E_NOTIMPL;
1685}
1686
1688 IDataObject **ppPORet)
1689{
1690 ok(0, "unexpected call\n");
1691 return E_NOTIMPL;
1692}
1693
1695 LPOLESTR *pchKey, DWORD dw)
1696{
1697 CHECK_EXPECT(GetOverridesKeyPath);
1698 ok(pchKey != NULL, "pchKey==NULL\n");
1699 if(pchKey)
1700 ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
1701 ok(!dw, "dw=%lx\n", dw);
1702 return E_NOTIMPL;
1703}
1704
1705static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = {
1725};
1726
1728
1729
1731{
1732 return QueryInterface(riid, ppv);
1733}
1734
1736{
1737 return 2;
1738}
1739
1741{
1742 return 1;
1743}
1744
1746 REFGUID guidService, REFIID riid, void **ppv)
1747{
1748 *ppv = NULL;
1749
1751 return E_NOINTERFACE;
1752
1753 if (IsEqualGUID(&SID_STopLevelBrowser, guidService))
1754 trace("Service SID_STopLevelBrowser\n");
1755 else if (IsEqualGUID(&SID_SEditCommandTarget, guidService))
1756 trace("Service SID_SEditCommandTarget\n");
1757 else if (IsEqualGUID(&IID_ITargetFrame2, guidService))
1758 trace("Service IID_ITargetFrame2\n");
1759 else if (IsEqualGUID(&SID_SInternetSecurityManager, guidService))
1760 trace("Service SID_SInternetSecurityManager\n");
1761 else if (IsEqualGUID(&SID_SOleUndoManager, guidService))
1762 trace("Service SID_SOleUndoManager\n");
1763 else if (IsEqualGUID(&SID_IMimeInfo, guidService))
1764 trace("Service SID_IMimeInfo\n");
1765 else if (IsEqualGUID(&SID_STopWindow, guidService))
1766 trace("Service SID_STopWindow\n");
1767
1768 /* 30D02401-6A81-11D0-8274-00C04FD5AE38 Explorer Bar: Search */
1769 /* D1E7AFEC-6A2E-11D0-8C78-00C04FD918B4 no info */
1770 /* A9227C3C-7F8E-11D0-8CB0-00A0C92DBFE8 no info */
1771 /* 371EA634-DC5C-11D1-BA57-00C04FC2040E one reference to IVersionHost */
1772 /* 3050F429-98B5-11CF-BB82-00AA00BDCE0B IID_IElementBehaviorFactory */
1773 /* 6D12FE80-7911-11CF-9534-0000C05BAE0B SID_DefView */
1774 /* AD7F6C62-F6BD-11D2-959B-006097C553C8 no info */
1775 /* 53A2D5B1-D2FC-11D0-84E0-006097C9987D no info */
1776 /* 3050F312-98B5-11CF-BB82-00AA00BDCE0B HTMLFrameBaseClass */
1777 /* 639447BD-B2D3-44B9-9FB0-510F23CB45E4 no info */
1778 /* 20C46561-8491-11CF-960C-0080C7F4EE85 no info */
1779
1780 else
1781 trace("Service %s not supported\n", wine_dbgstr_guid(guidService));
1782
1783 return E_NOINTERFACE;
1784}
1785
1786
1787static const IServiceProviderVtbl ServiceProviderVtbl = {
1792};
1793
1795
1796
1798{
1799 *ppv = NULL;
1800
1803 *ppv = &ClientSite;
1806 || IsEqualGUID(&IID_IOleInPlaceSiteEx, riid))
1807 *ppv = &InPlaceSite;
1808 else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)
1809 || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
1811 else if(IsEqualGUID(&IID_IDispatch, riid))
1812 *ppv = &Dispatch;
1813 else if(IsEqualGUID(&IID_IServiceProvider, riid))
1814 *ppv = &ServiceProvider;
1815 else if(IsEqualGUID(&IID_IDocHostShowUI, riid))
1816 trace("interface IID_IDocHostShowUI\n");
1818 *ppv = &ControlSite;
1819 else if(IsEqualGUID(&IID_IOleCommandTarget, riid))
1820 trace("interface IID_IOleCommandTarget\n");
1821
1822 /* B6EA2050-048A-11D1-82B9-00C04FB9942E IAxWinHostWindow */
1823
1824 else
1825 {
1826 /* are there more interfaces, that a host can support? */
1827 trace("%s: interface not supported\n", wine_dbgstr_guid(riid));
1828 }
1829
1830 return (*ppv) ? S_OK : E_NOINTERFACE;
1831}
1832
1834{
1835 return DefWindowProcW(hwnd, msg, wParam, lParam);
1836}
1837
1839{
1840 static WNDCLASSEXW wndclass = {
1841 sizeof(WNDCLASSEXW),
1842 0,
1843 wnd_proc,
1844 0, 0, NULL, NULL, NULL, NULL, NULL,
1845 L"WebBrowserContainer",
1846 NULL
1847 };
1848
1849 RegisterClassExW(&wndclass);
1850 return CreateWindowW(L"WebBrowserContainer", L"WebBrowserContainer",
1851 WS_OVERLAPPEDWINDOW, 10, 10, 600, 600, NULL, NULL, NULL, NULL);
1852}
1853
1854static void test_DoVerb(IWebBrowser2 *unk)
1855{
1856 IOleObject *oleobj;
1857 RECT rect = {0,0,1000,1000};
1858 HRESULT hres;
1860
1861 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1862 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
1863 if(FAILED(hres))
1864 return;
1865
1866 hres = IOleObject_Advise(oleobj, &test_sink, &connection);
1867 ok(hres == S_OK, "Advise failed: %08lx\n", hres);
1868
1869 SET_EXPECT(CanInPlaceActivate);
1870 SET_EXPECT(Site_GetWindow);
1871 SET_EXPECT(OnInPlaceActivate);
1872 SET_EXPECT(GetWindowContext);
1873 SET_EXPECT(ShowObject);
1874 SET_EXPECT(GetContainer);
1876 SET_EXPECT(OnUIActivate);
1878 SET_EXPECT(UIWindow_SetActiveObject);
1880 SET_EXPECT(OnFocus_TRUE);
1881
1882 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1883 0, (HWND)0xdeadbeef, &rect);
1884 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
1885
1886 CHECK_CALLED(CanInPlaceActivate);
1887 CHECK_CALLED(Site_GetWindow);
1888 CHECK_CALLED(OnInPlaceActivate);
1889 CHECK_CALLED(GetWindowContext);
1890 CHECK_CALLED(ShowObject);
1891 CHECK_CALLED(GetContainer);
1893 CHECK_CALLED(OnUIActivate);
1895 CHECK_CALLED(UIWindow_SetActiveObject);
1897 CHECK_CALLED(OnFocus_TRUE);
1898
1899 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
1900 0, (HWND)0xdeadbeef, &rect);
1901 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
1902
1903 hres = IOleObject_Unadvise(oleobj, connection);
1904 ok(hres == S_OK, "Unadvise failed: %08lx\n", hres);
1905
1906 IOleObject_Release(oleobj);
1907}
1908
1909static void call_DoVerb(IWebBrowser2 *unk, LONG verb)
1910{
1911 IOleObject *oleobj;
1912 RECT rect = {60,60,600,600};
1913 HRESULT hres;
1914
1915 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1916 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
1917 if(FAILED(hres))
1918 return;
1919
1920 hres = IOleObject_DoVerb(oleobj, verb, NULL, &ClientSite,
1921 -1, container_hwnd, &rect);
1922 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
1923
1924 IOleObject_Release(oleobj);
1925}
1926
1927static HWND get_hwnd(IWebBrowser2 *unk)
1928{
1929 IOleInPlaceObject *inplace;
1930 HWND hwnd;
1931 HRESULT hres;
1932
1933 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
1934 ok(hres == S_OK, "QueryInterface(IID_OleInPlaceObject) failed: %08lx\n", hres);
1935
1936 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1937 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
1938
1939 IOleInPlaceObject_Release(inplace);
1940 return hwnd;
1941}
1942
1943static void test_GetMiscStatus(IOleObject *oleobj)
1944{
1945 DWORD st, i;
1946 HRESULT hres;
1947
1948 for(i=0; i<10; i++) {
1949 st = 0xdeadbeef;
1950 hres = IOleObject_GetMiscStatus(oleobj, i, &st);
1951 ok(hres == S_OK, "GetMiscStatus failed: %08lx\n", hres);
1954 "st=%08lx, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
1955 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st);
1956 }
1957}
1958
1959static void test_SetHostNames(IOleObject *oleobj)
1960{
1961 HRESULT hres;
1962
1963 hres = IOleObject_SetHostNames(oleobj, L"test app", (void*)0xdeadbeef);
1964 ok(hres == S_OK, "SetHostNames failed: %08lx\n", hres);
1965}
1966
1967static void test_ClientSite(IWebBrowser2 *unk, IOleClientSite *client, BOOL stop_download)
1968{
1969 IOleObject *oleobj;
1970 IOleInPlaceObject *inplace;
1971 DWORD session_count;
1972 HWND hwnd;
1973 HRESULT hres;
1974
1975 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1976 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
1977 if(FAILED(hres))
1978 return;
1979
1980 test_GetMiscStatus(oleobj);
1981 test_SetHostNames(oleobj);
1982
1983 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
1984 ok(hres == S_OK, "QueryInterface(IID_OleInPlaceObject) failed: %08lx\n", hres);
1985 if(FAILED(hres)) {
1986 IOleObject_Release(oleobj);
1987 return;
1988 }
1989
1990 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
1991 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
1992 ok((hwnd == NULL) ^ (client == NULL), "unexpected hwnd %p\n", hwnd);
1993
1994 if(client) {
1995 session_count = pSetQueryNetSessionCount(SESSION_QUERY);
1996
1997 SET_EXPECT(GetContainer);
1998 SET_EXPECT(Site_GetWindow);
1999 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2000 SET_EXPECT(Invoke_AMBIENT_SILENT);
2001 }else if(stop_download) {
2003 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
2004 SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
2005 }
2006
2007 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
2008 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
2009
2012 SET_EXPECT(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
2013 }else {
2014 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
2015 SET_EXPECT(Invoke_PROGRESSCHANGE);
2017 }
2018
2019 hres = IOleObject_SetClientSite(oleobj, client);
2020 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
2021
2022 if(client) {
2023 DWORD count = pSetQueryNetSessionCount(SESSION_QUERY);
2024 ok(count >= session_count + 1, "count = %lu expected %lu\n", count, session_count + 1);
2025
2026 CHECK_CALLED(GetContainer);
2027 CHECK_CALLED(Site_GetWindow);
2028 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2029 CHECK_CALLED(Invoke_AMBIENT_SILENT);
2030 }else if(stop_download) {
2032 todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
2033 todo_wine CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
2034 }
2035
2036 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
2037 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
2038
2039 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
2041 "got %d\n", set_update_commands_enable);
2042 }else {
2043 CLEAR_CALLED(Invoke_STATUSTEXTCHANGE); /* Called by IE9 */
2044 CLEAR_CALLED(Invoke_PROGRESSCHANGE);
2046 }
2047
2048 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
2049 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
2050 ok((hwnd == NULL) == (client == NULL), "unexpected hwnd %p\n", hwnd);
2051
2053
2054 test_SetHostNames(oleobj);
2055
2056 IOleInPlaceObject_Release(inplace);
2057 IOleObject_Release(oleobj);
2058}
2059
2060static void test_change_ClientSite(IWebBrowser2 *unk)
2061{
2062 BOOL old_use_container_olecmd = use_container_olecmd;
2063 IOleClientSite *doc_clientsite;
2064 IOleInPlaceObject *inplace;
2065 IOleCommandTarget *olecmd;
2066 IOleObject *oleobj;
2067 HRESULT hres;
2068 HWND hwnd;
2069
2070 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
2071 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
2072 if(FAILED(hres))
2073 return;
2074
2076
2077 SET_EXPECT(Site_GetWindow);
2078 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2079 SET_EXPECT(Invoke_AMBIENT_SILENT);
2080
2081 hres = IOleObject_SetClientSite(oleobj, &ClientSite2);
2082 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
2083 IOleObject_Release(oleobj);
2084
2085 CHECK_CALLED(Site_GetWindow);
2086 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2087 CHECK_CALLED(Invoke_AMBIENT_SILENT);
2088
2089 doc_clientsite = get_dochost(unk);
2090 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IOleCommandTarget, (void**)&olecmd);
2091 ok(hres == S_OK, "QueryInterface(IOleCommandTarget) failed: %08lx\n", hres);
2092 IOleClientSite_Release(doc_clientsite);
2093
2094 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleInPlaceObject, (void**)&inplace);
2095 ok(hres == S_OK, "QueryInterface(OleInPlaceObject) failed: %08lx\n", hres);
2096 hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
2097 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
2098 ok(hwnd == shell_embedding_hwnd, "unexpected hwnd %p\n", hwnd);
2099 IOleInPlaceObject_Release(inplace);
2100
2101 if(old_use_container_olecmd) {
2102 SET_EXPECT(Exec_UPDATECOMMANDS);
2103
2104 hres = IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_UPDATECOMMANDS,
2105 OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
2106 ok(hres == S_OK, "Exec(OLECMDID_UPDATECOMMAND) failed: %08lx\n", hres);
2107
2108 CHECK_CALLED(Exec_UPDATECOMMANDS);
2110 }
2111
2112 IOleCommandTarget_Release(olecmd);
2113}
2114
2115static void test_ClassInfo(IWebBrowser2 *unk)
2116{
2118 TYPEATTR *type_attr;
2120 GUID guid;
2121 HRESULT hres;
2122
2123 hres = IWebBrowser2_QueryInterface(unk, &IID_IProvideClassInfo2, (void**)&class_info);
2124 ok(hres == S_OK, "QueryInterface(IID_IProvideClassInfo) failed: %08lx\n", hres);
2125 if(FAILED(hres))
2126 return;
2127
2128 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid);
2129 ok(hres == S_OK, "GetGUID failed: %08lx\n", hres);
2130 ok(IsEqualGUID(wb_version > 1 ? &DIID_DWebBrowserEvents2 : &DIID_DWebBrowserEvents, &guid), "wrong guid\n");
2131
2132 hres = IProvideClassInfo2_GetGUID(class_info, 0, &guid);
2133 ok(hres == E_FAIL, "GetGUID failed: %08lx, expected E_FAIL\n", hres);
2134 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
2135
2136 hres = IProvideClassInfo2_GetGUID(class_info, 2, &guid);
2137 ok(hres == E_FAIL, "GetGUID failed: %08lx, expected E_FAIL\n", hres);
2138 ok(IsEqualGUID(&IID_NULL, &guid), "wrong guid\n");
2139
2140 hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, NULL);
2141 ok(hres == E_POINTER, "GetGUID failed: %08lx, expected E_POINTER\n", hres);
2142
2143 hres = IProvideClassInfo2_GetGUID(class_info, 0, NULL);
2144 ok(hres == E_POINTER, "GetGUID failed: %08lx, expected E_POINTER\n", hres);
2145
2146 typeinfo = NULL;
2147 hres = IProvideClassInfo2_GetClassInfo(class_info, &typeinfo);
2148 ok(hres == S_OK, "GetClassInfo failed: %08lx\n", hres);
2149 ok(typeinfo != NULL, "typeinfo == NULL\n");
2150
2151 hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
2152 ok(hres == S_OK, "GetTypeAtr failed: %08lx\n", hres);
2153
2154 ok(IsEqualGUID(&type_attr->guid, wb_version > 1 ? &CLSID_WebBrowser : &CLSID_WebBrowser_V1),
2155 "guid = %s\n", wine_dbgstr_guid(&type_attr->guid));
2156
2157 ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
2158 ITypeInfo_Release(typeinfo);
2159
2160 IProvideClassInfo2_Release(class_info);
2161}
2162
2163#define expect_oleverb(a,b) _expect_oleverb(__LINE__,a,b)
2164static void _expect_oleverb(unsigned line, const OLEVERB *verb, LONG exverb)
2165{
2166 ok_(__FILE__,line)(verb->lVerb == exverb, "verb->lVerb = %ld, expected %ld\n", verb->lVerb, exverb);
2167 ok_(__FILE__,line)(!verb->lpszVerbName, "verb->lpszVerbName = %s\n", wine_dbgstr_w(verb->lpszVerbName));
2168 ok_(__FILE__,line)(!verb->fuFlags, "verb->fuFlags = %lx\n", verb->fuFlags);
2169 ok_(__FILE__,line)(!verb->grfAttribs, "verb->grfAttribs = %lx\n", verb->grfAttribs);
2170}
2171
2172#define test_next_oleverb(a,b) _test_next_oleverb(__LINE__,a,b)
2173static void _test_next_oleverb(unsigned line, IEnumOLEVERB *enum_verbs, LONG exverb)
2174{
2175 ULONG fetched = 0xdeadbeef;
2176 OLEVERB verb;
2177 HRESULT hres;
2178
2179 fetched = 0xdeadbeef;
2180 memset(&verb, 0xa, sizeof(verb));
2181 hres = IEnumOLEVERB_Next(enum_verbs, 1, &verb, &fetched);
2182 ok_(__FILE__,line)(hres == S_OK, "Next failed: %08lx\n", hres);
2183 ok_(__FILE__,line)(!fetched, "fetched = %ld\n", fetched);
2184 _expect_oleverb(line, &verb, exverb);
2185}
2186
2187static void test_EnumVerbs(IWebBrowser2 *wb)
2188{
2189 IEnumOLEVERB *enum_verbs;
2190 IOleObject *oleobj;
2191 OLEVERB verbs[20];
2192 ULONG fetched;
2193 HRESULT hres;
2194
2195 hres = IWebBrowser2_QueryInterface(wb, &IID_IOleObject, (void**)&oleobj);
2196 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
2197
2198 hres = IOleObject_EnumVerbs(oleobj, &enum_verbs);
2199 IOleObject_Release(oleobj);
2200 ok(hres == S_OK, "EnumVerbs failed: %08lx\n", hres);
2201 ok(enum_verbs != NULL, "enum_verbs == NULL\n");
2202
2203 fetched = 0xdeadbeef;
2204 memset(verbs, 0xa, sizeof(verbs));
2205 verbs[1].lVerb = 0xdeadbeef;
2206 hres = IEnumOLEVERB_Next(enum_verbs, ARRAY_SIZE(verbs), verbs, &fetched);
2207 ok(hres == S_OK, "Next failed: %08lx\n", hres);
2208 ok(!fetched, "fetched = %ld\n", fetched);
2209 /* Although fetched==0, an element is returned. */
2211 /* The first argument is ignored and always one element is returned. */
2212 ok(verbs[1].lVerb == 0xdeadbeef, "verbs[1].lVerb = %lx\n", verbs[1].lVerb);
2213
2216 test_next_oleverb(enum_verbs, OLEIVERB_SHOW);
2217 test_next_oleverb(enum_verbs, OLEIVERB_HIDE);
2218
2219 /* There is anouther verb, returned correctly. */
2220 fetched = 0xdeadbeef;
2221 memset(verbs, 0xa, sizeof(verbs));
2222 verbs[0].lVerb = 0xdeadbeef;
2223 hres = IEnumOLEVERB_Next(enum_verbs, ARRAY_SIZE(verbs), verbs, &fetched);
2224 todo_wine ok(hres == S_OK, "Next failed: %08lx\n", hres);
2225 todo_wine ok(fetched == 1, "fetched = %ld\n", fetched);
2226 todo_wine ok(verbs[0].lVerb != 0xdeadbeef, "verbs[0].lVerb = %lx\n", verbs[0].lVerb);
2227
2228 hres = IEnumOLEVERB_Next(enum_verbs, ARRAY_SIZE(verbs), verbs, &fetched);
2229 ok(hres == S_FALSE, "Next failed: %08lx\n", hres);
2230 ok(!fetched, "fetched = %ld\n", fetched);
2231
2232 hres = IEnumOLEVERB_Reset(enum_verbs);
2233 ok(hres == S_OK, "Reset failed: %08lx\n", hres);
2234
2235 fetched = 0xdeadbeef;
2236 hres = IEnumOLEVERB_Next(enum_verbs, 1, verbs, &fetched);
2237 ok(hres == S_OK, "Next failed: %08lx\n", hres);
2238 ok(!fetched, "fetched = %ld\n", fetched);
2239
2240 hres = IEnumOLEVERB_Next(enum_verbs, 1, verbs, NULL);
2241 ok(hres == S_OK, "Next failed: %08lx\n", hres);
2242
2243 hres = IEnumOLEVERB_Skip(enum_verbs, 20);
2244 ok(hres == S_OK, "Reset failed: %08lx\n", hres);
2245
2246 fetched = 0xdeadbeef;
2247 hres = IEnumOLEVERB_Next(enum_verbs, 1, verbs, &fetched);
2248 ok(hres == S_OK, "Next failed: %08lx\n", hres);
2249 ok(!fetched, "fetched = %ld\n", fetched);
2250
2251 test_next_oleverb(enum_verbs, OLEIVERB_SHOW);
2252
2253 IEnumOLEVERB_Release(enum_verbs);
2254}
2255
2256static void test_Persist(IWebBrowser2 *wb, int version)
2257{
2258 IPersist *persist;
2259 GUID guid;
2260 HRESULT hr;
2261
2262 hr = IWebBrowser2_QueryInterface(wb, &IID_IPersist, (void **)&persist);
2263 ok(hr == S_OK, "QueryInterface(IID_IPersist) failed: %08lx\n", hr);
2264
2265 hr = IPersist_GetClassID(persist, &guid);
2266 ok(hr == S_OK, "GetClassID failed: %08lx\n", hr);
2267 if (version == 1)
2268 ok(IsEqualGUID(&guid, &CLSID_WebBrowser_V1), "got wrong CLSID: %s\n", wine_dbgstr_guid(&guid));
2269 else
2270 ok(IsEqualGUID(&guid, &CLSID_WebBrowser), "got wrong CLSID: %s\n", wine_dbgstr_guid(&guid));
2271
2272 IPersist_Release(persist);
2273}
2274
2275static void test_OleObject(IWebBrowser2 *wb, int version)
2276{
2277 IOleObject *oleobj;
2278 CLSID clsid;
2279 HRESULT hr;
2280
2281 hr = IWebBrowser2_QueryInterface(wb, &IID_IOleObject, (void **)&oleobj);
2282 ok(hr == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hr);
2283
2284 hr = IOleObject_GetUserClassID(oleobj, &clsid);
2285 ok(hr == S_OK, "GetUserClassID failed: %08lx\n", hr);
2286 if (version == 1)
2287 ok(IsEqualGUID(&clsid, &CLSID_WebBrowser_V1), "got wrong CLSID: %s\n", wine_dbgstr_guid(&clsid));
2288 else
2289 ok(IsEqualGUID(&clsid, &CLSID_WebBrowser), "got wrong CLSID: %s\n", wine_dbgstr_guid(&clsid));
2290
2291 IOleObject_Release(oleobj);
2292}
2293
2294static void test_ie_funcs(IWebBrowser2 *wb)
2295{
2296 IDispatch *disp;
2298 int i;
2300 HRESULT hres;
2301 BSTR sName;
2302
2303 /* HWND */
2304
2305 hwnd = 0xdeadbeef;
2306 hres = IWebBrowser2_get_HWND(wb, &hwnd);
2307 ok(hres == E_FAIL, "get_HWND failed: %08lx, expected E_FAIL\n", hres);
2308 ok(hwnd == 0, "unexpected hwnd %p\n", (PVOID)hwnd);
2309
2310 /* MenuBar */
2311
2312 hres = IWebBrowser2_get_MenuBar(wb, &b);
2313 ok(hres == S_OK, "get_MenuBar failed: %08lx\n", hres);
2314 ok(b == VARIANT_TRUE, "b=%x\n", b);
2315
2316 SET_EXPECT(Invoke_ONMENUBAR);
2317 hres = IWebBrowser2_put_MenuBar(wb, (exvb = VARIANT_FALSE));
2318 ok(hres == S_OK, "put_MenuBar failed: %08lx\n", hres);
2319 CHECK_CALLED(Invoke_ONMENUBAR);
2320
2321 hres = IWebBrowser2_get_MenuBar(wb, &b);
2322 ok(hres == S_OK, "get_MenuBar failed: %08lx\n", hres);
2323 ok(b == VARIANT_FALSE, "b=%x\n", b);
2324
2325 SET_EXPECT(Invoke_ONMENUBAR);
2326 hres = IWebBrowser2_put_MenuBar(wb, (exvb = 100));
2327 ok(hres == S_OK, "put_MenuBar failed: %08lx\n", hres);
2328 CHECK_CALLED(Invoke_ONMENUBAR);
2329
2330 hres = IWebBrowser2_get_MenuBar(wb, &b);
2331 ok(hres == S_OK, "get_MenuBar failed: %08lx\n", hres);
2332 ok(b == VARIANT_TRUE, "b=%x\n", b);
2333
2334 /* AddressBar */
2335
2336 hres = IWebBrowser2_get_AddressBar(wb, &b);
2337 ok(hres == S_OK, "get_AddressBar failed: %08lx\n", hres);
2338 ok(b == VARIANT_TRUE, "b=%x\n", b);
2339
2340 SET_EXPECT(Invoke_ONADDRESSBAR);
2341 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_FALSE));
2342 ok(hres == S_OK, "put_AddressBar failed: %08lx\n", hres);
2343 CHECK_CALLED(Invoke_ONADDRESSBAR);
2344
2345 hres = IWebBrowser2_get_AddressBar(wb, &b);
2346 ok(hres == S_OK, "get_MenuBar failed: %08lx\n", hres);
2347 ok(b == VARIANT_FALSE, "b=%x\n", b);
2348
2349 SET_EXPECT(Invoke_ONADDRESSBAR);
2350 hres = IWebBrowser2_put_AddressBar(wb, (exvb = 100));
2351 ok(hres == S_OK, "put_AddressBar failed: %08lx\n", hres);
2352 CHECK_CALLED(Invoke_ONADDRESSBAR);
2353
2354 hres = IWebBrowser2_get_AddressBar(wb, &b);
2355 ok(hres == S_OK, "get_AddressBar failed: %08lx\n", hres);
2356 ok(b == VARIANT_TRUE, "b=%x\n", b);
2357
2358 SET_EXPECT(Invoke_ONADDRESSBAR);
2359 hres = IWebBrowser2_put_AddressBar(wb, (exvb = VARIANT_TRUE));
2360 ok(hres == S_OK, "put_MenuBar failed: %08lx\n", hres);
2361 CHECK_CALLED(Invoke_ONADDRESSBAR);
2362
2363 /* StatusBar */
2364
2365 hres = IWebBrowser2_get_StatusBar(wb, &b);
2366 ok(hres == S_OK, "get_StatusBar failed: %08lx\n", hres);
2367 ok(b == VARIANT_TRUE, "b=%x\n", b);
2368
2369 SET_EXPECT(Invoke_ONSTATUSBAR);
2370 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_TRUE));
2371 ok(hres == S_OK, "put_StatusBar failed: %08lx\n", hres);
2372 CHECK_CALLED(Invoke_ONSTATUSBAR);
2373
2374 hres = IWebBrowser2_get_StatusBar(wb, &b);
2375 ok(hres == S_OK, "get_StatusBar failed: %08lx\n", hres);
2376 ok(b == VARIANT_TRUE, "b=%x\n", b);
2377
2378 SET_EXPECT(Invoke_ONSTATUSBAR);
2379 hres = IWebBrowser2_put_StatusBar(wb, (exvb = VARIANT_FALSE));
2380 ok(hres == S_OK, "put_StatusBar failed: %08lx\n", hres);
2381 CHECK_CALLED(Invoke_ONSTATUSBAR);
2382
2383 hres = IWebBrowser2_get_StatusBar(wb, &b);
2384 ok(hres == S_OK, "get_StatusBar failed: %08lx\n", hres);
2385 ok(b == VARIANT_FALSE, "b=%x\n", b);
2386
2387 SET_EXPECT(Invoke_ONSTATUSBAR);
2388 hres = IWebBrowser2_put_StatusBar(wb, (exvb = 100));
2389 ok(hres == S_OK, "put_StatusBar failed: %08lx\n", hres);
2390 CHECK_CALLED(Invoke_ONSTATUSBAR);
2391
2392 hres = IWebBrowser2_get_StatusBar(wb, &b);
2393 ok(hres == S_OK, "get_StatusBar failed: %08lx\n", hres);
2394 ok(b == VARIANT_TRUE, "b=%x\n", b);
2395
2396 /* ToolBar */
2397
2398 hres = IWebBrowser2_get_ToolBar(wb, &i);
2399 ok(hres == S_OK, "get_ToolBar failed: %08lx\n", hres);
2400 ok(i, "i=%x\n", i);
2401
2402 SET_EXPECT(Invoke_ONTOOLBAR);
2403 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_FALSE));
2404 ok(hres == S_OK, "put_ToolBar failed: %08lx\n", hres);
2405 CHECK_CALLED(Invoke_ONTOOLBAR);
2406
2407 hres = IWebBrowser2_get_ToolBar(wb, &i);
2408 ok(hres == S_OK, "get_ToolBar failed: %08lx\n", hres);
2409 ok(i == VARIANT_FALSE, "b=%x\n", i);
2410
2411 SET_EXPECT(Invoke_ONTOOLBAR);
2412 hres = IWebBrowser2_put_ToolBar(wb, (exvb = 100));
2413 ok(hres == S_OK, "put_ToolBar failed: %08lx\n", hres);
2414 CHECK_CALLED(Invoke_ONTOOLBAR);
2415
2416 hres = IWebBrowser2_get_ToolBar(wb, &i);
2417 ok(hres == S_OK, "get_ToolBar failed: %08lx\n", hres);
2418 ok(i, "i=%x\n", i);
2419
2420 SET_EXPECT(Invoke_ONTOOLBAR);
2421 hres = IWebBrowser2_put_ToolBar(wb, (exvb = VARIANT_TRUE));
2422 ok(hres == S_OK, "put_ToolBar failed: %08lx\n", hres);
2423 CHECK_CALLED(Invoke_ONTOOLBAR);
2424
2425 /* FullScreen */
2426
2427 hres = IWebBrowser2_get_FullScreen(wb, &b);
2428 ok(hres == S_OK, "get_FullScreen failed: %08lx\n", hres);
2429 ok(b == VARIANT_FALSE, "b=%x\n", b);
2430
2431 SET_EXPECT(Invoke_ONFULLSCREEN);
2432 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_TRUE));
2433 ok(hres == S_OK, "put_FullScreen failed: %08lx\n", hres);
2434 CHECK_CALLED(Invoke_ONFULLSCREEN);
2435
2436 hres = IWebBrowser2_get_FullScreen(wb, &b);
2437 ok(hres == S_OK, "get_FullScreen failed: %08lx\n", hres);
2438 ok(b == VARIANT_TRUE, "b=%x\n", b);
2439
2440 SET_EXPECT(Invoke_ONFULLSCREEN);
2441 hres = IWebBrowser2_put_FullScreen(wb, (exvb = 100));
2442 ok(hres == S_OK, "put_FullScreen failed: %08lx\n", hres);
2443 CHECK_CALLED(Invoke_ONFULLSCREEN);
2444
2445 hres = IWebBrowser2_get_FullScreen(wb, &b);
2446 ok(hres == S_OK, "get_FullScreen failed: %08lx\n", hres);
2447 ok(b == VARIANT_TRUE, "b=%x\n", b);
2448
2449 SET_EXPECT(Invoke_ONFULLSCREEN);
2450 hres = IWebBrowser2_put_FullScreen(wb, (exvb = VARIANT_FALSE));
2451 ok(hres == S_OK, "put_FullScreen failed: %08lx\n", hres);
2452 CHECK_CALLED(Invoke_ONFULLSCREEN);
2453
2454 /* TheaterMode */
2455
2456 hres = IWebBrowser2_get_TheaterMode(wb, &b);
2457 ok(hres == S_OK, "get_TheaterMode failed: %08lx\n", hres);
2458 ok(b == VARIANT_FALSE, "b=%x\n", b);
2459
2460 SET_EXPECT(Invoke_ONTHEATERMODE);
2461 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_TRUE));
2462 ok(hres == S_OK, "put_TheaterMode failed: %08lx\n", hres);
2463 CHECK_CALLED(Invoke_ONTHEATERMODE);
2464
2465 hres = IWebBrowser2_get_TheaterMode(wb, &b);
2466 ok(hres == S_OK, "get_TheaterMode failed: %08lx\n", hres);
2467 ok(b == VARIANT_TRUE, "b=%x\n", b);
2468
2469 SET_EXPECT(Invoke_ONTHEATERMODE);
2470 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = 100));
2471 ok(hres == S_OK, "put_TheaterMode failed: %08lx\n", hres);
2472 CHECK_CALLED(Invoke_ONTHEATERMODE);
2473
2474 hres = IWebBrowser2_get_TheaterMode(wb, &b);
2475 ok(hres == S_OK, "get_TheaterMode failed: %08lx\n", hres);
2476 ok(b == VARIANT_TRUE, "b=%x\n", b);
2477
2478 SET_EXPECT(Invoke_ONTHEATERMODE);
2479 hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_FALSE));
2480 ok(hres == S_OK, "put_TheaterMode failed: %08lx\n", hres);
2481 CHECK_CALLED(Invoke_ONTHEATERMODE);
2482
2483 /* Resizable */
2484
2485 b = 0x100;
2486 hres = IWebBrowser2_get_Resizable(wb, &b);
2487 ok(hres == E_NOTIMPL, "get_Resizable failed: %08lx\n", hres);
2488 ok(b == 0x100, "b=%x\n", b);
2489
2490 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
2491 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_TRUE));
2492 ok(hres == S_OK, "put_Resizable failed: %08lx\n", hres);
2493 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE);
2494
2495 SET_EXPECT(Invoke_WINDOWSETRESIZABLE);
2496 hres = IWebBrowser2_put_Resizable(wb, (exvb = VARIANT_FALSE));
2497 ok(hres == S_OK, "put_Resizable failed: %08lx\n", hres);
2498 CHECK_CALLED(Invoke_WINDOWSETRESIZABLE);
2499
2500 hres = IWebBrowser2_get_Resizable(wb, &b);
2501 ok(hres == E_NOTIMPL, "get_Resizable failed: %08lx\n", hres);
2502 ok(b == 0x100, "b=%x\n", b);
2503
2504 /* Application */
2505
2506 disp = NULL;
2507 hres = IWebBrowser2_get_Application(wb, &disp);
2508 ok(hres == S_OK, "get_Application failed: %08lx\n", hres);
2509 ok(disp == (void*)wb, "disp=%p, expected %p\n", disp, wb);
2510 if(disp)
2511 IDispatch_Release(disp);
2512
2513 hres = IWebBrowser2_get_Application(wb, NULL);
2514 ok(hres == E_POINTER, "get_Application failed: %08lx, expected E_POINTER\n", hres);
2515
2516 /* Name */
2517 hres = IWebBrowser2_get_Name(wb, &sName);
2518 ok(hres == S_OK, "getName failed: %08lx, expected S_OK\n", hres);
2519 if (is_lang_english())
2520 ok(!lstrcmpW(sName, L"Microsoft Web Browser Control"), "got '%s', expected 'Microsoft Web Browser Control'\n", wine_dbgstr_w(sName));
2521 else /* Non-English cannot be blank. */
2522 ok(sName!=NULL, "get_Name return a NULL string.\n");
2523 SysFreeString(sName);
2524
2525 /* RegisterAsDropTarget */
2526 hres = IWebBrowser2_get_RegisterAsDropTarget(wb, NULL);
2527 ok(hres == E_INVALIDARG, "get_RegisterAsDropTarget returned: %08lx\n", hres);
2528
2529 /* Quit */
2530
2531 hres = IWebBrowser2_Quit(wb);
2532 ok(hres == E_FAIL, "Quit failed: %08lx, expected E_FAIL\n", hres);
2533}
2534
2535static void test_Silent(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
2536{
2538 HRESULT hres;
2539
2540 b = 100;
2541 hres = IWebBrowser2_get_Silent(wb, &b);
2542 ok(hres == S_OK, "get_Silent failed: %08lx\n", hres);
2543 ok(b == VARIANT_FALSE, "b=%x\n", b);
2544
2545 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
2546 ok(hres == S_OK, "set_Silent failed: %08lx\n", hres);
2547
2548 b = 100;
2549 hres = IWebBrowser2_get_Silent(wb, &b);
2550 ok(hres == S_OK, "get_Silent failed: %08lx\n", hres);
2551 ok(b == VARIANT_TRUE, "b=%x\n", b);
2552
2553 hres = IWebBrowser2_put_Silent(wb, 100);
2554 ok(hres == S_OK, "set_Silent failed: %08lx\n", hres);
2555
2556 b = 100;
2557 hres = IWebBrowser2_get_Silent(wb, &b);
2558 ok(hres == S_OK, "get_Silent failed: %08lx\n", hres);
2559 ok(b == VARIANT_TRUE, "b=%x\n", b);
2560
2561 hres = IWebBrowser2_put_Silent(wb, VARIANT_FALSE);
2562 ok(hres == S_OK, "set_Silent failed: %08lx\n", hres);
2563
2564 b = 100;
2565 hres = IWebBrowser2_get_Silent(wb, &b);
2566 ok(hres == S_OK, "get_Silent failed: %08lx\n", hres);
2567 ok(b == VARIANT_FALSE, "b=%x\n", b);
2568
2569 if(is_clientsite) {
2570 hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
2571 ok(hres == S_OK, "set_Silent failed: %08lx\n", hres);
2572
2573 SET_EXPECT(Invoke_AMBIENT_SILENT);
2574 }
2575
2576 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
2577 ok(hres == S_OK, "OnAmbientPropertyChange failed %08lx\n", hres);
2578
2579 if(is_clientsite)
2580 CHECK_CALLED(Invoke_AMBIENT_SILENT);
2581
2582 b = 100;
2583 hres = IWebBrowser2_get_Silent(wb, &b);
2584 ok(hres == S_OK, "get_Silent failed: %08lx\n", hres);
2585 ok(b == VARIANT_FALSE, "b=%x\n", b);
2586}
2587
2588static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
2589{
2591 HRESULT hres;
2592
2593 b = 100;
2594 hres = IWebBrowser2_get_Offline(wb, &b);
2595 ok(hres == S_OK, "get_Offline failed: %08lx\n", hres);
2596 ok(b == VARIANT_FALSE, "b=%x\n", b);
2597
2598 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
2599 ok(hres == S_OK, "set_Offline failed: %08lx\n", hres);
2600
2601 b = 100;
2602 hres = IWebBrowser2_get_Offline(wb, &b);
2603 ok(hres == S_OK, "get_Offline failed: %08lx\n", hres);
2604 ok(b == VARIANT_TRUE, "b=%x\n", b);
2605
2606 hres = IWebBrowser2_put_Offline(wb, 100);
2607 ok(hres == S_OK, "set_Offline failed: %08lx\n", hres);
2608
2609 b = 100;
2610 hres = IWebBrowser2_get_Offline(wb, &b);
2611 ok(hres == S_OK, "get_Offline failed: %08lx\n", hres);
2612 ok(b == VARIANT_TRUE, "b=%x\n", b);
2613
2614 hres = IWebBrowser2_put_Offline(wb, VARIANT_FALSE);
2615 ok(hres == S_OK, "set_Offline failed: %08lx\n", hres);
2616
2617 b = 100;
2618 hres = IWebBrowser2_get_Offline(wb, &b);
2619 ok(hres == S_OK, "get_Offline failed: %08lx\n", hres);
2620 ok(b == VARIANT_FALSE, "b=%x\n", b);
2621
2622 if(is_clientsite) {
2623 hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
2624 ok(hres == S_OK, "set_Offline failed: %08lx\n", hres);
2625
2626 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2627 }
2628
2629 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
2630 ok(hres == S_OK, "OnAmbientPropertyChange failed %08lx\n", hres);
2631
2632 if(is_clientsite)
2633 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2634
2635 b = 100;
2636 hres = IWebBrowser2_get_Offline(wb, &b);
2637 ok(hres == S_OK, "get_Offline failed: %08lx\n", hres);
2638 ok(b == VARIANT_FALSE, "b=%x\n", b);
2639}
2640
2641static void test_ambient_unknown(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
2642{
2643 HRESULT hres;
2644
2645 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2646 SET_EXPECT(Invoke_AMBIENT_SILENT);
2647 SET_EXPECT(Invoke_AMBIENT_USERMODE);
2648 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
2649 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
2650 SET_EXPECT(Invoke_AMBIENT_PALETTE);
2651
2652 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_UNKNOWN);
2653 ok(hres == S_OK, "OnAmbientPropertyChange failed %08lx\n", hres);
2654
2655 CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2656 CHECK_EXPECT(Invoke_AMBIENT_SILENT);
2657 CHECK_EXPECT(Invoke_AMBIENT_USERMODE);
2658 CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
2659 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
2660 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
2661
2662 CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
2663 CLEAR_CALLED(Invoke_AMBIENT_SILENT);
2664 CLEAR_CALLED(Invoke_AMBIENT_USERMODE);
2665 CLEAR_CALLED(Invoke_AMBIENT_DLCONTROL);
2666 CLEAR_CALLED(Invoke_AMBIENT_USERAGENT);
2667 CLEAR_CALLED(Invoke_AMBIENT_PALETTE);
2668}
2669
2670static void test_wb_funcs(IWebBrowser2 *wb, BOOL is_clientsite)
2671{
2673 HRESULT hres;
2674
2675 hres = IWebBrowser2_QueryInterface(wb, &IID_IOleControl, (void**)&control);
2676 ok(hres == S_OK, "Could not get IOleControl interface: %08lx\n", hres);
2677
2678 test_Silent(wb, control, is_clientsite);
2679 test_Offline(wb, control, is_clientsite);
2680 test_ambient_unknown(wb, control, is_clientsite);
2681
2682 IOleControl_Release(control);
2683}
2684
2685static void test_GetControlInfo(IWebBrowser2 *unk)
2686{
2688 CONTROLINFO info;
2689 HRESULT hres;
2690
2691 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleControl, (void**)&control);
2692 ok(hres == S_OK, "Could not get IOleControl: %08lx\n", hres);
2693 if(FAILED(hres))
2694 return;
2695
2696 hres = IOleControl_GetControlInfo(control, &info);
2697 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08lx, expected E_NOTIMPL\n", hres);
2698 hres = IOleControl_GetControlInfo(control, NULL);
2699 ok(hres == E_NOTIMPL, "GetControlInfo failed: %08lx, expected E_NOTIMPL\n", hres);
2700
2701 IOleControl_Release(control);
2702}
2703
2704static void test_Extent(IWebBrowser2 *unk)
2705{
2706 IOleObject *oleobj;
2708 HRESULT hres;
2709 DWORD dpi_x;
2710 DWORD dpi_y;
2711 HDC hdc;
2712
2713 /* default aspect ratio is 96dpi / 96dpi */
2714 hdc = GetDC(0);
2715 dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
2716 dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
2717 ReleaseDC(0, hdc);
2718 if (dpi_x != 96 || dpi_y != 96)
2719 trace("dpi: %ld / %ld\n", dpi_y, dpi_y);
2720
2721 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
2722 ok(hres == S_OK, "Could not get IOleObject: %08lx\n", hres);
2723 if(FAILED(hres))
2724 return;
2725
2726 size.cx = size.cy = 0xdeadbeef;
2727 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2728 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2729 /* Default size is 50x20 pixels, in himetric units */
2730 expected.cx = MulDiv( 50, 2540, dpi_x );
2731 expected.cy = MulDiv( 20, 2540, dpi_y );
2732 ok(size.cx == expected.cx && size.cy == expected.cy, "size = {%ld %ld} (expected %ld %ld)\n",
2733 size.cx, size.cy, expected.cx, expected.cy );
2734
2735 size.cx = 800;
2736 size.cy = 700;
2737 hres = IOleObject_SetExtent(oleobj, DVASPECT_CONTENT, &size);
2738 ok(hres == S_OK, "SetExtent failed: %08lx\n", hres);
2739
2740 size.cx = size.cy = 0xdeadbeef;
2741 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2742 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2743 ok(size.cx == 800 && size.cy == 700, "size = {%ld %ld}\n", size.cx, size.cy);
2744
2745 size.cx = size.cy = 0xdeadbeef;
2746 hres = IOleObject_GetExtent(oleobj, 0, &size);
2747 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2748 ok(size.cx == 800 && size.cy == 700, "size = {%ld %ld}\n", size.cx, size.cy);
2749
2750 size.cx = 900;
2751 size.cy = 800;
2752 hres = IOleObject_SetExtent(oleobj, 0, &size);
2753 ok(hres == S_OK, "SetExtent failed: %08lx\n", hres);
2754
2755 size.cx = size.cy = 0xdeadbeef;
2756 hres = IOleObject_GetExtent(oleobj, 0, &size);
2757 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2758 ok(size.cx == 900 && size.cy == 800, "size = {%ld %ld}\n", size.cx, size.cy);
2759
2760 size.cx = size.cy = 0xdeadbeef;
2761 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
2762 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2763 ok(size.cx == 900 && size.cy == 800, "size = {%ld %ld}\n", size.cx, size.cy);
2764
2765 size.cx = 1000;
2766 size.cy = 900;
2767 hres = IOleObject_SetExtent(oleobj, 0xdeadbeef, &size);
2768 ok(hres == S_OK, "SetExtent failed: %08lx\n", hres);
2769
2770 size.cx = size.cy = 0xdeadbeef;
2771 hres = IOleObject_GetExtent(oleobj, 0xdeadbeef, &size);
2772 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2773 ok(size.cx == 1000 && size.cy == 900, "size = {%ld %ld}\n", size.cx, size.cy);
2774
2775 size.cx = size.cy = 0xdeadbeef;
2776 hres = IOleObject_GetExtent(oleobj, DVASPECT_CONTENT, &size);
2777 ok(hres == S_OK, "GetExtent failed: %08lx\n", hres);
2778 ok(size.cx == 1000 && size.cy == 900, "size = {%ld %ld}\n", size.cx, size.cy);
2779
2780 IOleObject_Release(oleobj);
2781}
2782
2783static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
2784{
2787 HRESULT hres;
2788
2789 static DWORD dw = 100;
2790
2791 hres = IWebBrowser2_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container);
2792 ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08lx\n", hres);
2793 if(FAILED(hres))
2794 return;
2795
2796 hres = IConnectionPointContainer_FindConnectionPoint(container, &DIID_DWebBrowserEvents2, &point);
2797 IConnectionPointContainer_Release(container);
2798 ok(hres == S_OK, "FindConnectionPoint failed: %08lx\n", hres);
2799 if(FAILED(hres))
2800 return;
2801
2802 if(init) {
2803 hres = IConnectionPoint_Advise(point, (IUnknown*)&WebBrowserEvents2, &dw);
2804 ok(hres == S_OK, "Advise failed: %08lx\n", hres);
2805 ok(dw == 1, "dw=%ld, expected 1\n", dw);
2806 }else {
2807 hres = IConnectionPoint_Unadvise(point, dw);
2808 ok(hres == S_OK, "Unadvise failed: %08lx\n", hres);
2809 }
2810
2811 IConnectionPoint_Release(point);
2812}
2813
2814static void test_Navigate2(IWebBrowser2 *webbrowser, const WCHAR *nav_url)
2815{
2816 const WCHAR *title = L"WineHQ - Run Windows applications on Linux, BSD, Solaris and Mac OS X";
2817 VARIANT url;
2818 BOOL is_file;
2819 HRESULT hres;
2820
2821 test_LocationURL(webbrowser, is_first_load ? L"" : current_url);
2822 test_LocationName(webbrowser, is_first_load ? L"" : (is_http ? title : current_url));
2823 test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE, VARIANT_FALSE);
2824
2825 is_http = !memcmp(nav_url, "http:", 5);
2826 V_VT(&url) = VT_BSTR;
2828
2829 if((is_file = !wcsnicmp(nav_url, L"file://", 7)))
2830 current_url = nav_url + 7;
2831
2832 if(is_first_load) {
2833 SET_EXPECT(Invoke_AMBIENT_USERMODE);
2834 SET_EXPECT(Invoke_PROPERTYCHANGE);
2835 SET_EXPECT(Invoke_BEFORENAVIGATE2);
2836 SET_EXPECT(Invoke_DOWNLOADBEGIN);
2837 if (use_container_olecmd) SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
2838 SET_EXPECT(EnableModeless_FALSE);
2839 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
2840 SET_EXPECT(SetStatusText);
2842 SET_EXPECT(GetHostInfo);
2843 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
2844 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
2845 SET_EXPECT(Invoke_AMBIENT_PALETTE);
2847 SET_EXPECT(GetOptionKeyPath);
2848 SET_EXPECT(GetOverridesKeyPath);
2849 }
2851 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
2852 SET_EXPECT(Exec_SETPROGRESSMAX);
2853 SET_EXPECT(Exec_SETPROGRESSPOS);
2854 }
2855 SET_EXPECT(Invoke_SETSECURELOCKICON);
2856 SET_EXPECT(Invoke_FILEDOWNLOAD);
2857 if (use_container_olecmd) SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
2858 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
2859 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
2860 SET_EXPECT(EnableModeless_TRUE);
2861 if (!use_container_olecmd) SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
2862 if (is_file) SET_EXPECT(Invoke_PROGRESSCHANGE);
2863 }
2864
2865 hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
2866 ok(hres == S_OK, "Navigate2 failed: %08lx\n", hres);
2867
2868 if(is_first_load) {
2869 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
2870 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
2871 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
2872 CHECK_CALLED(Invoke_DOWNLOADBEGIN);
2873 if (use_container_olecmd) todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
2874 CHECK_CALLED(EnableModeless_FALSE);
2875 CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
2876 CHECK_CALLED(SetStatusText);
2878 CHECK_CALLED(GetHostInfo);
2879 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
2880 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
2881 CLEAR_CALLED(Invoke_AMBIENT_PALETTE); /* Not called by IE9 */
2883 CLEAR_CALLED(GetOptionKeyPath);
2884 CHECK_CALLED(GetOverridesKeyPath);
2885 }
2887 todo_wine CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
2888 todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
2889 todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
2890 }
2891 todo_wine CHECK_CALLED(Invoke_SETSECURELOCKICON);
2892 todo_wine CHECK_CALLED(Invoke_FILEDOWNLOAD);
2893 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
2894 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
2895 if (use_container_olecmd) todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
2896 CHECK_CALLED(EnableModeless_TRUE);
2897 if (!use_container_olecmd) CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
2898 if (is_file) todo_wine CHECK_CALLED(Invoke_PROGRESSCHANGE);
2899 }
2900
2901 VariantClear(&url);
2902
2903 test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
2904}
2905
2906static void test_QueryStatusWB(IWebBrowser2 *webbrowser, BOOL has_document)
2907{
2908 HRESULT hres, success_state;
2909 OLECMDF success_flags;
2910 enum OLECMDF status;
2911
2912 /*
2913 * We can tell the difference between the custom container target and the built-in target
2914 * since the custom target returns OLECMDF_SUPPORTED instead of OLECMDF_ENABLED.
2915 */
2917 success_flags = OLECMDF_SUPPORTED;
2918 else
2919 success_flags = OLECMDF_ENABLED;
2920
2921 /* When no target is available (no document or custom target) an error is returned */
2922 if (has_document)
2923 success_state = S_OK;
2924 else
2925 success_state = E_UNEXPECTED;
2926
2927 /*
2928 * Test a safe operation that exists as both a high-numbered MSHTML id and an OLECMDID.
2929 * These tests show that QueryStatusWB uses a NULL pguidCmdGroup, since OLECMDID_STOP
2930 * is enabled and IDM_STOP is not.
2931 */
2932 status = 0xdeadbeef;
2933 if (use_container_olecmd) SET_EXPECT(QueryStatus_STOP);
2934 hres = IWebBrowser2_QueryStatusWB(webbrowser, OLECMDID_STOP, &status);
2935 ok(hres == success_state, "QueryStatusWB failed: %08lx %08lx\n", hres, success_state);
2936 todo_wine_if (!use_container_olecmd && has_document)
2937 ok((has_document && status == success_flags) || (!has_document && status == 0xdeadbeef),
2938 "OLECMDID_STOP not enabled/supported: %08x %08x\n", status, success_flags);
2939 status = 0xdeadbeef;
2940 if (use_container_olecmd) SET_EXPECT(QueryStatus_IDM_STOP);
2941 hres = IWebBrowser2_QueryStatusWB(webbrowser, IDM_STOP, &status);
2942 ok(hres == success_state, "QueryStatusWB failed: %08lx %08lx\n", hres, success_state);
2943 ok((has_document && status == 0) || (!has_document && status == 0xdeadbeef),
2944 "IDM_STOP is enabled/supported: %08x %d\n", status, has_document);
2945}
2946
2947static void test_ExecWB(IWebBrowser2 *webbrowser, BOOL has_document)
2948{
2949 HRESULT hres, olecmdid_state, idm_state;
2950
2951 /* When no target is available (no document or custom target) an error is returned */
2952 if (has_document)
2953 {
2954 olecmdid_state = S_OK;
2955 idm_state = OLECMDERR_E_NOTSUPPORTED;
2956 }
2957 else
2958 {
2959 olecmdid_state = E_UNEXPECTED;
2960 idm_state = E_UNEXPECTED;
2961 }
2962
2963 /*
2964 * Test a safe operation that exists as both a high-numbered MSHTML id and an OLECMDID.
2965 * These tests show that QueryStatusWB uses a NULL pguidCmdGroup, since OLECMDID_STOP
2966 * succeeds (S_OK) and IDM_STOP does not (OLECMDERR_E_NOTSUPPORTED).
2967 */
2969 SET_EXPECT(Exec_STOP);
2970 }else if(has_document) {
2971 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
2972 SET_EXPECT(SetStatusText);
2973 }
2974 hres = IWebBrowser2_ExecWB(webbrowser, OLECMDID_STOP, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0);
2975 if(!use_container_olecmd && has_document) {
2976 todo_wine ok(hres == olecmdid_state, "ExecWB failed: %08lx %08lx\n", hres, olecmdid_state);
2977 CLEAR_CALLED(Invoke_STATUSTEXTCHANGE); /* Called by IE9 */
2978 CLEAR_CALLED(SetStatusText); /* Called by IE9 */
2979 }else {
2980 ok(hres == olecmdid_state, "ExecWB failed: %08lx %08lx\n", hres, olecmdid_state);
2981 }
2983 SET_EXPECT(Exec_IDM_STOP);
2984 hres = IWebBrowser2_ExecWB(webbrowser, IDM_STOP, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0);
2985 ok(hres == idm_state, "ExecWB failed: %08lx %08lx\n", hres, idm_state);
2986}
2987
2989{
2990 BOOL *b = &called_Invoke_DOCUMENTCOMPLETE;
2991 MSG msg;
2992
2993 if(flags & DWL_REFRESH)
2994 b = use_container_olecmd ? &called_Exec_SETDOWNLOADSTATE_0 : &called_Invoke_DOWNLOADCOMPLETE;
2995 else if((flags & DWL_FROM_PUT_HREF) && !use_container_olecmd && 0)
2996 b = &called_Invoke_DOWNLOADCOMPLETE;
2997
2999 dwl_flags = flags;
3000
3002 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
3003 else
3004 test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
3005
3007 SET_EXPECT(Invoke_PROPERTYCHANGE);
3008
3010 SET_EXPECT(Invoke_BEFORENAVIGATE2);
3011 SET_EXPECT(TranslateUrl);
3012 }
3014 SET_EXPECT(Exec_SETPROGRESSMAX);
3015 SET_EXPECT(Exec_SETPROGRESSPOS);
3016 SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
3017 }else {
3018 SET_EXPECT(Invoke_DOWNLOADBEGIN);
3019 }
3020 SET_EXPECT(DocHost_EnableModeless_FALSE);
3021 SET_EXPECT(DocHost_EnableModeless_TRUE);
3022 SET_EXPECT(Invoke_SETSECURELOCKICON);
3023 SET_EXPECT(Invoke_SETPHISHINGFILTERSTATUS);
3024 SET_EXPECT(EnableModeless_FALSE);
3025
3026 if(!(flags & DWL_REFRESH)) {
3028 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3029 else
3030 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3032 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3033 else
3034 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3035 }
3036
3039 SET_EXPECT(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
3040
3041 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
3042 SET_EXPECT(Invoke_PROPERTYCHANGE);
3043 SET_EXPECT(SetStatusText);
3044 SET_EXPECT(EnableModeless_TRUE);
3045 if(!is_first_load)
3046 SET_EXPECT(GetHostInfo);
3048 SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
3049 else
3050 SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
3051 SET_EXPECT(Invoke_TITLECHANGE);
3052 if(!(flags & DWL_REFRESH))
3053 SET_EXPECT(Invoke_NAVIGATECOMPLETE2);
3054 if(is_first_load)
3055 SET_EXPECT(GetDropTarget);
3056 SET_EXPECT(Invoke_PROGRESSCHANGE);
3057 if(!(flags & DWL_REFRESH))
3058 SET_EXPECT(Invoke_DOCUMENTCOMPLETE);
3059
3060 if(flags & DWL_HTTP)
3061 SET_EXPECT(Exec_SETTITLE);
3062 SET_EXPECT(UpdateUI);
3064 SET_EXPECT(Exec_UPDATECOMMANDS);
3065 SET_EXPECT(QueryStatus_STOP);
3066 SET_EXPECT(GetOverridesKeyPath); /* Called randomly on some VMs. */
3067
3068 trace("Downloading...\n");
3069 while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
3072 }
3073
3075 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
3077 CLEAR_CALLED(Invoke_PROPERTYCHANGE); /* called by IE11 */
3078
3080 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
3081 CHECK_CALLED(TranslateUrl);
3082 }
3084 todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
3085 todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
3086 CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
3087 }else {
3088 SET_EXPECT(Invoke_DOWNLOADBEGIN);
3089 }
3090 CLEAR_CALLED(DocHost_EnableModeless_FALSE); /* IE 7 */
3091 CLEAR_CALLED(DocHost_EnableModeless_TRUE); /* IE 7 */
3092 todo_wine CHECK_CALLED(Invoke_SETSECURELOCKICON);
3093 CLEAR_CALLED(Invoke_SETPHISHINGFILTERSTATUS); /* IE 7 */
3094 if(is_first_load)
3095 todo_wine CHECK_CALLED(EnableModeless_FALSE);
3096 else
3097 CLEAR_CALLED(EnableModeless_FALSE); /* IE 8 */
3098
3099 if(!(flags & DWL_REFRESH)) {
3102 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3103 else
3104 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3105 }
3107 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3108 else
3109 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3110 }
3111 CLEAR_CALLED(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
3112 todo_wine CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
3113 todo_wine CHECK_CALLED(SetStatusText);
3114 if(is_first_load)
3115 todo_wine CHECK_CALLED(EnableModeless_TRUE);
3116 else
3117 CLEAR_CALLED(EnableModeless_FALSE); /* IE 8 */
3118 if(!is_first_load)
3119 todo_wine CHECK_CALLED(GetHostInfo);
3121 CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
3122 else
3123 CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
3124 todo_wine CHECK_CALLED(Invoke_TITLECHANGE);
3125 if(!(flags & DWL_REFRESH))
3126 CHECK_CALLED(Invoke_NAVIGATECOMPLETE2);
3127 if(is_first_load)
3128 todo_wine CHECK_CALLED(GetDropTarget);
3129 if(!(flags & DWL_REFRESH))
3130 CHECK_CALLED(Invoke_DOCUMENTCOMPLETE);
3131
3133
3134 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
3135
3136 while(use_container_olecmd && !called_Exec_UPDATECOMMANDS && GetMessageA(&msg, NULL, 0, 0)) {
3139 }
3140
3141 todo_wine CHECK_CALLED(Invoke_PROGRESSCHANGE);
3142 if(flags & DWL_HTTP)
3143 CLEAR_CALLED(Exec_SETTITLE); /* FIXME: make it more strict */
3145 CHECK_CALLED(UpdateUI);
3146 else
3147 CLEAR_CALLED(UpdateUI);
3149 CHECK_CALLED(Exec_UPDATECOMMANDS);
3150 CLEAR_CALLED(QueryStatus_STOP);
3151 CLEAR_CALLED(GetOverridesKeyPath);
3152}
3153
3154static void test_Refresh(IWebBrowser2 *webbrowser, BOOL use_refresh2)
3155{
3156 HRESULT hres;
3157
3158 trace("Refresh...\n");
3159
3161 SET_EXPECT(Exec_DocHostCommandHandler_2300);
3162
3163 if(use_refresh2) {
3164 VARIANT v;
3165
3166 V_VT(&v) = VT_I4;
3167 V_I4(&v) = REFRESH_NORMAL;
3168
3169 hres = IWebBrowser2_Refresh2(webbrowser, &v);
3170 ok(hres == S_OK, "Refresh failed: %08lx\n", hres);
3171 }else {
3172 hres = IWebBrowser2_Refresh(webbrowser);
3173 ok(hres == S_OK, "Refresh failed: %08lx\n", hres);
3174 }
3175
3177 CHECK_CALLED(Exec_DocHostCommandHandler_2300);
3178
3180}
3181
3182static void test_olecmd(IWebBrowser2 *unk, BOOL loaded)
3183{
3184 IOleCommandTarget *cmdtrg;
3185 OLECMD cmds[3];
3186 HRESULT hres;
3187
3188 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
3189 ok(hres == S_OK, "Could not get IOleCommandTarget iface: %08lx\n", hres);
3190 if(FAILED(hres))
3191 return;
3192
3193 cmds[0].cmdID = OLECMDID_SPELL;
3194 cmds[0].cmdf = 0xdeadbeef;
3195 cmds[1].cmdID = OLECMDID_REFRESH;
3196 cmds[1].cmdf = 0xdeadbeef;
3197 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmds, NULL);
3198 if(loaded) {
3199 ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres);
3200 ok(cmds[0].cmdf == OLECMDF_SUPPORTED, "OLECMDID_SPELL cmdf = %lx\n", cmds[0].cmdf);
3201 ok(cmds[1].cmdf == (OLECMDF_ENABLED|OLECMDF_SUPPORTED),
3202 "OLECMDID_REFRESH cmdf = %lx\n", cmds[1].cmdf);
3203 }else {
3204 ok(hres == 0x80040104, "QueryStatus failed: %08lx\n", hres);
3205 ok(cmds[0].cmdf == 0xdeadbeef, "OLECMDID_SPELL cmdf = %lx\n", cmds[0].cmdf);
3206 ok(cmds[1].cmdf == 0xdeadbeef, "OLECMDID_REFRESH cmdf = %lx\n", cmds[0].cmdf);
3207 }
3208
3209 IOleCommandTarget_Release(cmdtrg);
3210}
3211
3212static void test_IServiceProvider(IWebBrowser2 *unk)
3213{
3214 IServiceProvider *servprov = (void*)0xdeadbeef;
3215 IUnknown *iface;
3216 HRESULT hres;
3217
3218 hres = IWebBrowser2_QueryInterface(unk, &IID_IServiceProvider, (void**)&servprov);
3219 ok(hres == S_OK, "QueryInterface returned %08lx, expected S_OK\n", hres);
3220 if(FAILED(hres))
3221 return;
3222
3223 hres = IServiceProvider_QueryService(servprov, &SID_STopLevelBrowser, &IID_IBrowserService2, (LPVOID*)&iface);
3224 ok(hres == E_FAIL, "QueryService returned %08lx, expected E_FAIL\n", hres);
3225 ok(!iface, "QueryService returned %p, expected NULL\n", iface);
3226 if(hres == S_OK)
3227 IUnknown_Release(iface);
3228
3229 hres = IServiceProvider_QueryService(servprov, &SID_SHTMLWindow, &IID_IHTMLWindow2, (LPVOID*)&iface);
3230 ok(hres == S_OK, "QueryService returned %08lx, expected S_OK\n", hres);
3231 ok(iface != NULL, "QueryService returned NULL\n");
3232 if(hres == S_OK)
3233 IUnknown_Release(iface);
3234
3235 IServiceProvider_Release(servprov);
3236}
3237
3238static void test_put_href(IWebBrowser2 *unk, const WCHAR *url)
3239{
3240 IHTMLLocation *location;
3241 IHTMLDocument2 *doc;
3242 BSTR str;
3243 HRESULT hres;
3244
3245 trace("put_href(%s)...\n", wine_dbgstr_w(url));
3246
3247 doc = get_document(unk);
3248
3249 location = NULL;
3250 hres = IHTMLDocument2_get_location(doc, &location);
3251 IHTMLDocument2_Release(doc);
3252 ok(hres == S_OK, "get_location failed: %08lx\n", hres);
3253 ok(location != NULL, "location == NULL\n");
3254
3255 is_http = !wcsncmp(url, L"http:", 5);
3256
3257 SET_EXPECT(TranslateUrl);
3258 SET_EXPECT(Invoke_BEFORENAVIGATE2);
3259 SET_EXPECT(Invoke_PROPERTYCHANGE);
3260
3262
3265 hres = IHTMLLocation_put_href(location, str);
3266
3267 CHECK_CALLED(TranslateUrl);
3268 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
3269 if(!is_http)
3270 todo_wine CHECK_CALLED(Invoke_PROPERTYCHANGE);
3271
3272 IHTMLLocation_Release(location);
3274 ok(hres == S_OK, "put_href failed: %08lx\n", hres);
3275
3276 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
3277}
3278
3279static void test_go_back(IWebBrowser2 *wb, const WCHAR *back_url, int back_enable, int forward_enable, int forward_todo)
3280{
3281 HRESULT hres;
3282
3283 current_url = back_url;
3284
3285 SET_EXPECT(Invoke_BEFORENAVIGATE2);
3286
3287 if(back_enable)
3288 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3289 else
3290 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3291
3292 if(forward_enable)
3293 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3294 else
3295 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3296
3297 nav_forward_todo = forward_todo;
3298 SET_EXPECT(Invoke_PROPERTYCHANGE);
3299 hres = IWebBrowser2_GoBack(wb);
3300 ok(hres == S_OK, "GoBack failed: %08lx\n", hres);
3301 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
3303
3305 if(back_enable)
3306 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3307 else
3308 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3309 }
3310
3311 todo_wine_if(forward_todo) {
3312 if(forward_enable)
3313 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3314 else
3315 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3316 }
3317
3318 CLEAR_CALLED(Invoke_PROPERTYCHANGE); /* called by IE11 */
3319}
3320
3321static void test_go_forward(IWebBrowser2 *wb, const WCHAR *forward_url, int back_enable, int forward_enable)
3322{
3323 HRESULT hres;
3324
3325 current_url = forward_url;
3327
3328 SET_EXPECT(Invoke_BEFORENAVIGATE2);
3329
3330 if(back_enable)
3331 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3332 else
3333 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3334
3335 if(forward_enable)
3336 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3337 else
3338 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3339
3340 hres = IWebBrowser2_GoForward(wb);
3341 ok(hres == S_OK, "GoForward failed: %08lx\n", hres);
3342 CHECK_CALLED(Invoke_BEFORENAVIGATE2);
3343
3344 if(back_enable)
3345 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_TRUE);
3346 else
3347 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3348
3349 if(forward_enable)
3350 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_TRUE);
3351 else
3352 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3353}
3354
3355static void test_QueryInterface(IWebBrowser2 *wb)
3356{
3357 IQuickActivate *qa = (IQuickActivate*)0xdeadbeef;
3359 IPerPropertyBrowsing *propbrowse = (void*)0xdeadbeef;
3360 IOleInPlaceSite *inplace = (void*)0xdeadbeef;
3361 IOleCache *cache = (void*)0xdeadbeef;
3362 IObjectWithSite *site = (void*)0xdeadbeef;
3363 IViewObjectEx *viewex = (void*)0xdeadbeef;
3364 IOleLink *link = (void*)0xdeadbeef;
3365 IMarshal *marshal = (void*)0xdeadbeef;
3366 IUnknown *unk = (IUnknown*)wb;
3367 HRESULT hres;
3368
3369 hres = IUnknown_QueryInterface(unk, &IID_IQuickActivate, (void**)&qa);
3370 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3371 ok(qa == NULL, "qa=%p, expected NULL\n", qa);
3372
3373 hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&runnable);
3374 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3375 ok(runnable == NULL, "runnable=%p, expected NULL\n", runnable);
3376
3377 hres = IUnknown_QueryInterface(unk, &IID_IPerPropertyBrowsing, (void**)&propbrowse);
3378 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3379 ok(propbrowse == NULL, "propbrowse=%p, expected NULL\n", propbrowse);
3380
3381 hres = IUnknown_QueryInterface(unk, &IID_IOleCache, (void**)&cache);
3382 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3383 ok(cache == NULL, "cache=%p, expected NULL\n", cache);
3384
3385 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceSite, (void**)&inplace);
3386 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3387 ok(inplace == NULL, "inplace=%p, expected NULL\n", inplace);
3388
3389 hres = IUnknown_QueryInterface(unk, &IID_IObjectWithSite, (void**)&site);
3390 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3391 ok(site == NULL, "site=%p, expected NULL\n", site);
3392
3393 hres = IUnknown_QueryInterface(unk, &IID_IViewObjectEx, (void**)&viewex);
3394 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3395 ok(viewex == NULL, "viewex=%p, expected NULL\n", viewex);
3396
3397 hres = IUnknown_QueryInterface(unk, &IID_IOleLink, (void**)&link);
3398 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3399 ok(link == NULL, "link=%p, expected NULL\n", link);
3400
3401 hres = IUnknown_QueryInterface(unk, &IID_IMarshal, (void**)&marshal);
3402 ok(hres == E_NOINTERFACE, "QueryInterface returned %08lx, expected E_NOINTERFACE\n", hres);
3403 ok(marshal == NULL, "marshal=%p, expected NULL\n", marshal);
3404
3405}
3406
3407static void test_UIActivate(IWebBrowser2 *unk, BOOL activate)
3408{
3409 IOleDocumentView *docview;
3410 IHTMLDocument2 *doc;
3411 HRESULT hres;
3412
3413 doc = get_document(unk);
3414
3415 hres = IHTMLDocument2_QueryInterface(doc, &IID_IOleDocumentView, (void**)&docview);
3416 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3417 if(SUCCEEDED(hres)) {
3418 if(activate) {
3419 SET_EXPECT(RequestUIActivate);
3420 SET_EXPECT(ShowUI);
3421 SET_EXPECT(HideUI);
3422 SET_EXPECT(OnFocus_FALSE);
3423 }
3424
3425 hres = IOleDocumentView_UIActivate(docview, activate);
3426 todo_wine_if(activate)
3427 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3428
3429 if(activate) {
3430 todo_wine {
3431 CHECK_CALLED(RequestUIActivate);
3432 CHECK_CALLED(ShowUI);
3433 CHECK_CALLED(HideUI);
3434 CHECK_CALLED(OnFocus_FALSE);
3435 }
3436 }
3437
3438 IOleDocumentView_Release(docview);
3439 }
3440
3441 IHTMLDocument2_Release(doc);
3442}
3443
3444static void test_external(IWebBrowser2 *unk)
3445{
3446 IDocHostUIHandler2 *dochost;
3448 IDispatch *disp;
3449 HRESULT hres;
3450
3451 client = get_dochost(unk);
3452
3453 hres = IOleClientSite_QueryInterface(client, &IID_IDocHostUIHandler2, (void**)&dochost);
3454 ok(hres == S_OK, "Could not get IDocHostUIHandler2 iface: %08lx\n", hres);
3455 IOleClientSite_Release(client);
3456
3458 SET_EXPECT(GetExternal);
3459 disp = (void*)0xdeadbeef;
3460 hres = IDocHostUIHandler2_GetExternal(dochost, &disp);
3462 CHECK_CALLED(GetExternal);
3463 ok(hres == S_FALSE, "GetExternal failed: %08lx\n", hres);
3464 ok(!disp, "disp = %p\n", disp);
3465 }else {
3466 IShellUIHelper *uihelper;
3467
3468 ok(hres == S_OK, "GetExternal failed: %08lx\n", hres);
3469 ok(disp != NULL, "disp == NULL\n");
3470
3471 hres = IDispatch_QueryInterface(disp, &IID_IShellUIHelper, (void**)&uihelper);
3472 ok(hres == S_OK, "Could not get IShellUIHelper iface: %08lx\n", hres);
3473 IShellUIHelper_Release(uihelper);
3474 IDispatch_Release(disp);
3475 }
3476
3477 IDocHostUIHandler2_Release(dochost);
3478}
3479
3480static void test_htmlwindow_close(IWebBrowser2 *wb)
3481{
3483 IHTMLDocument2 *doc;
3484 HRESULT hres;
3485
3486 doc = get_document(wb);
3487
3488 hres = IHTMLDocument2_get_parentWindow(doc, &window);
3489 ok(hres == S_OK, "get_parentWindow failed: %08lx\n", hres);
3490 IHTMLDocument2_Release(doc);
3491
3492 SET_EXPECT(Invoke_WINDOWCLOSING);
3493
3494 hres = IHTMLWindow2_close(window);
3495 ok(hres == S_OK, "close failed: %08lx\n", hres);
3496
3497 CHECK_CALLED(Invoke_WINDOWCLOSING);
3498
3499 IHTMLWindow2_Release(window);
3500}
3501
3502static void test_TranslateAccelerator(IWebBrowser2 *unk)
3503{
3504 IOleClientSite *doc_clientsite;
3506 HRESULT hres;
3507 DWORD keycode;
3508 MSG msg_a = {
3510 0, 0, 0,
3511 GetTickCount(),
3512 {5, 5}
3513 };
3514
3515 test_Navigate2(unk, L"about:blank");
3516
3517 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao);
3518 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3519 if(SUCCEEDED(hres)) {
3520 /* One accelerator that should be handled by mshtml */
3521 msg_a.message = WM_KEYDOWN;
3522 msg_a.wParam = VK_F1;
3523 hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
3524 ok(hres == S_FALSE, "Got 0x%08lx (%04x::%02Ix)\n", hres, msg_a.message, msg_a.wParam);
3525
3526 /* And one that should not */
3527 msg_a.message = WM_KEYDOWN;
3528 msg_a.wParam = VK_F5;
3529 hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
3530 ok(hres == S_FALSE, "Got 0x%08lx (%04x::%02Ix)\n", hres, msg_a.message, msg_a.wParam);
3531
3532 IOleInPlaceActiveObject_Release(pao);
3533 }
3534
3535 test_UIActivate(unk, TRUE);
3536
3537 /* Test again after UIActivate */
3538 hres = IWebBrowser2_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao);
3539 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3540 if(SUCCEEDED(hres)) {
3541 /* One accelerator that should be handled by mshtml */
3542 msg_a.message = WM_KEYDOWN;
3543 msg_a.wParam = VK_F1;
3544 SET_EXPECT(DocHost_TranslateAccelerator);
3546 hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
3547 ok(hres == S_FALSE, "Got 0x%08lx (%04x::%02Ix)\n", hres, msg_a.message, msg_a.wParam);
3548 todo_wine CHECK_CALLED(DocHost_TranslateAccelerator);
3550
3551 /* And one that should not */
3552 msg_a.message = WM_KEYDOWN;
3553 msg_a.wParam = VK_F5;
3554 SET_EXPECT(DocHost_TranslateAccelerator);
3555 hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
3556 todo_wine ok(hres == S_OK, "Got 0x%08lx (%04x::%02Ix)\n", hres, msg_a.message, msg_a.wParam);
3557 todo_wine CHECK_CALLED(DocHost_TranslateAccelerator);
3558
3559 IOleInPlaceActiveObject_Release(pao);
3560 }
3561
3562 doc_clientsite = get_dochost(unk);
3563 if(doc_clientsite) {
3564 IDocHostUIHandler2 *dochost;
3565 IOleControlSite *doc_controlsite;
3566 IUnknown *unk_test;
3567
3568 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IOleInPlaceFrame, (void**)&unk_test);
3569 ok(hres == E_NOINTERFACE, "Got 0x%08lx\n", hres);
3570 if(SUCCEEDED(hres)) IUnknown_Release(unk_test);
3571
3572 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IDocHostShowUI, (void**)&unk_test);
3573 todo_wine ok(hres == S_OK, "Got 0x%08lx\n", hres);
3574 if(SUCCEEDED(hres)) IUnknown_Release(unk_test);
3575
3576 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IDocHostUIHandler, (void**)&unk_test);
3577 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3578 if(SUCCEEDED(hres)) IUnknown_Release(unk_test);
3579
3580 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IDocHostUIHandler2, (void**)&dochost);
3581 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3582 if(SUCCEEDED(hres)) {
3583 msg_a.message = WM_KEYDOWN;
3585 for(keycode = 0; keycode <= 0x100; keycode++) {
3586 msg_a.wParam = keycode;
3587 SET_EXPECT(DocHost_TranslateAccelerator);
3588 hres = IDocHostUIHandler2_TranslateAccelerator(dochost, &msg_a, &CGID_MSHTML, 1234);
3589 ok(hres == 0xdeadbeef, "Got 0x%08lx\n", hres);
3590 CHECK_CALLED(DocHost_TranslateAccelerator);
3591 }
3593
3594 SET_EXPECT(DocHost_TranslateAccelerator);
3595 hres = IDocHostUIHandler2_TranslateAccelerator(dochost, &msg_a, &CGID_MSHTML, 1234);
3596 ok(hres == E_NOTIMPL, "Got 0x%08lx\n", hres);
3597 CHECK_CALLED(DocHost_TranslateAccelerator);
3598
3599 IDocHostUIHandler2_Release(dochost);
3600 }
3601
3602 hres = IOleClientSite_QueryInterface(doc_clientsite, &IID_IOleControlSite, (void**)&doc_controlsite);
3603 ok(hres == S_OK, "Got 0x%08lx\n", hres);
3604 if(SUCCEEDED(hres)) {
3605 msg_a.message = WM_KEYDOWN;
3606 hr_site_TranslateAccelerator = 0xdeadbeef;
3607 for(keycode = 0; keycode < 0x100; keycode++) {
3608 msg_a.wParam = keycode;
3610 hres = IOleControlSite_TranslateAccelerator(doc_controlsite, &msg_a, 0);
3611 if(keycode == 0x9 || keycode == 0x75)
3612 todo_wine ok(hres == S_OK, "Got 0x%08lx (keycode: %04lx)\n", hres, keycode);
3613 else
3614 ok(hres == S_FALSE, "Got 0x%08lx (keycode: %04lx)\n", hres, keycode);
3615
3617 }
3618 msg_a.wParam = VK_LEFT;
3620 hres = IOleControlSite_TranslateAccelerator(doc_controlsite, &msg_a, 0);
3621 ok(hres == S_FALSE, "Got 0x%08lx (keycode: %04lx)\n", hres, keycode);
3623
3626 hres = IOleControlSite_TranslateAccelerator(doc_controlsite, &msg_a, 0);
3627 ok(hres == S_OK, "Got 0x%08lx (keycode: %04lx)\n", hres, keycode);
3629
3632 hres = IOleControlSite_TranslateAccelerator(doc_controlsite, &msg_a, 0);
3633 ok(hres == S_FALSE, "Got 0x%08lx (keycode: %04lx)\n", hres, keycode);
3635
3636 IOleControlSite_Release(doc_controlsite);
3637 }
3638
3639 IOleClientSite_Release(doc_clientsite);
3640 }
3641
3642 test_UIActivate(unk, FALSE);
3643}
3644
3645static void test_dochost_qs(IWebBrowser2 *webbrowser)
3646{
3648 IServiceProvider *serv_prov;
3649 IUnknown *service;
3650 HRESULT hres;
3651
3652 client_site = get_dochost(webbrowser);
3653 hres = IOleClientSite_QueryInterface(client_site, &IID_IServiceProvider, (void**)&serv_prov);
3654 IOleClientSite_Release(client_site);
3655 ok(hres == S_OK, "Could not get IServiceProvider iface: %08lx\n", hres);
3656
3657 hres = IServiceProvider_QueryService(serv_prov, &IID_IHlinkFrame, &IID_IHlinkFrame, (void**)&service);
3658 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3659 ok(iface_cmp(service, (IUnknown*)webbrowser), "service != unk\n");
3660 IUnknown_Release(service);
3661
3662 hres = IServiceProvider_QueryService(serv_prov, &IID_IWebBrowserApp, &IID_IHlinkFrame, (void**)&service);
3663 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3664 ok(iface_cmp(service, (IUnknown*)webbrowser), "service != unk\n");
3665 IUnknown_Release(service);
3666
3667 hres = IServiceProvider_QueryService(serv_prov, &IID_ITargetFrame, &IID_ITargetFrame, (void**)&service);
3668 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3669 ok(iface_cmp(service, (IUnknown*)webbrowser), "service != unk\n");
3670 IUnknown_Release(service);
3671
3672 hres = IServiceProvider_QueryService(serv_prov, &IID_IShellBrowser, &IID_IShellBrowser, (void**)&service);
3673 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3674 IUnknown_Release(service);
3675
3676 hres = IServiceProvider_QueryService(serv_prov, &IID_IShellBrowser, &IID_IBrowserService, (void**)&service);
3677 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3678 IUnknown_Release(service);
3679
3680 hres = IServiceProvider_QueryService(serv_prov, &IID_IShellBrowser, &IID_IDocObjectService, (void**)&service);
3681 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
3682 IUnknown_Release(service);
3683
3684 IServiceProvider_Release(serv_prov);
3685}
3686
3687static void test_Close(IWebBrowser2 *wb, BOOL do_download)
3688{
3689 IOleObject *oo;
3690 IOleClientSite *ocs;
3691 HRESULT hres;
3692
3693 hres = IWebBrowser2_QueryInterface(wb, &IID_IOleObject, (void**)&oo);
3694 ok(hres == S_OK, "QueryInterface failed: %08lx\n", hres);
3695 if(hres != S_OK)
3696 return;
3697
3698 test_close = TRUE;
3699
3701 SET_EXPECT(UIWindow_SetActiveObject);
3702 SET_EXPECT(OnUIDeactivate);
3703 SET_EXPECT(OnFocus_FALSE);
3704 SET_EXPECT(OnInPlaceDeactivate);
3705 SET_EXPECT(Invoke_STATUSTEXTCHANGE);
3706 if(!do_download) {
3707 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3708 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3709
3712 SET_EXPECT(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
3713
3715 SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
3716 }else {
3718 }
3719 SET_EXPECT(Advise_OnClose);
3720 hres = IOleObject_Close(oo, OLECLOSE_NOSAVE);
3721 ok(hres == S_OK, "OleObject_Close failed: %lx\n", hres);
3723 CHECK_CALLED(UIWindow_SetActiveObject);
3724 CHECK_CALLED(OnUIDeactivate);
3725 CHECK_CALLED(OnFocus_FALSE);
3726 CHECK_CALLED(OnInPlaceDeactivate);
3727 CLEAR_CALLED(Invoke_STATUSTEXTCHANGE); /* Called by IE9 */
3728 if(!do_download) {
3729 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3730 CHECK_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3731
3732 todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE_UPDATECOMMANDS);
3734 "got %d\n", set_update_commands_enable);
3735
3737 todo_wine CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
3738 }else {
3740 }
3741 CHECK_CALLED(Advise_OnClose);
3742
3743 hres = IOleObject_GetClientSite(oo, &ocs);
3744 ok(hres == S_OK, "hres = %lx\n", hres);
3745 ok(!ocs, "ocs != NULL\n");
3746
3747 SET_EXPECT(GetContainer);
3748 SET_EXPECT(Site_GetWindow);
3749 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
3750 SET_EXPECT(Invoke_AMBIENT_SILENT);
3751 hres = IOleObject_DoVerb(oo, OLEIVERB_HIDE, NULL, (IOleClientSite*)0xdeadbeef,
3752 0, (HWND)0xdeadbeef, NULL);
3753 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
3754 CHECK_CALLED(GetContainer);
3755 CHECK_CALLED(Site_GetWindow);
3756 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
3757 CHECK_CALLED(Invoke_AMBIENT_SILENT);
3758
3759 hres = IOleObject_GetClientSite(oo, &ocs);
3760 ok(hres == S_OK, "hres = %lx\n", hres);
3761 ok(ocs == &ClientSite, "ocs != &ClientSite\n");
3762 if(ocs)
3763 IOleClientSite_Release(ocs);
3764
3765 SET_EXPECT(OnFocus_FALSE);
3766 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3767 SET_EXPECT(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3768 SET_EXPECT(Advise_OnClose);
3769 hres = IOleObject_Close(oo, OLECLOSE_NOSAVE);
3770 ok(hres == S_OK, "OleObject_Close failed: %lx\n", hres);
3771 CHECK_NOT_CALLED(OnFocus_FALSE);
3772 todo_wine CHECK_NOT_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEBACK_FALSE);
3773 todo_wine CHECK_NOT_CALLED(Invoke_COMMANDSTATECHANGE_NAVIGATEFORWARD_FALSE);
3774 CHECK_CALLED(Advise_OnClose);
3775
3776 test_close = FALSE;
3777 IOleObject_Release(oo);
3778}
3779
3780static void test_Advise(IWebBrowser2 *wb)
3781{
3782 IOleObject *oleobj;
3784 DWORD connection[2];
3785 HRESULT hres;
3786
3787 hres = IWebBrowser2_QueryInterface(wb, &IID_IOleObject, (void **)&oleobj);
3788 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
3789
3790 hres = IOleObject_Unadvise(oleobj, 0);
3791 ok(hres == OLE_E_NOCONNECTION, "Unadvise returned: %08lx\n", hres);
3792
3793 data = (void *)0xdeadbeef;
3794 hres = IOleObject_EnumAdvise(oleobj, &data);
3795 ok(hres == E_NOTIMPL, "EnumAdvise returned: %08lx\n", hres);
3796 ok(data == NULL, "got data %p\n", data);
3797
3798 connection[0] = 0xdeadbeef;
3799 hres = IOleObject_Advise(oleobj, NULL, &connection[0]);
3800 ok(hres == E_INVALIDARG, "Advise returned: %08lx\n", hres);
3801 ok(connection[0] == 0, "got connection %lu\n", connection[0]);
3802
3803 hres = IOleObject_Advise(oleobj, &test_sink, NULL);
3804 ok(hres == E_INVALIDARG, "Advise returned: %08lx\n", hres);
3805
3806 connection[0] = 0xdeadbeef;
3807 hres = IOleObject_Advise(oleobj, &test_sink, &connection[0]);
3808 ok(hres == S_OK, "Advise returned: %08lx\n", hres);
3809 ok(connection[0] != 0xdeadbeef, "got connection %lu\n", connection[0]);
3810
3811 connection[1] = 0xdeadbeef;
3812 hres = IOleObject_Advise(oleobj, &test_sink, &connection[1]);
3813 ok(hres == S_OK, "Advise returned: %08lx\n", hres);
3814 ok(connection[1] == connection[0] + 1, "got connection %lu\n", connection[1]);
3815
3816 hres = IOleObject_Unadvise(oleobj, connection[1]);
3817 ok(hres == S_OK, "Unadvise returned: %08lx\n", hres);
3818
3819 hres = IOleObject_Unadvise(oleobj, connection[1]);
3820 ok(hres == OLE_E_NOCONNECTION, "Unadvise returned: %08lx\n", hres);
3821
3822 hres = IOleObject_Unadvise(oleobj, connection[0]);
3823 ok(hres == S_OK, "Unadvise returned: %08lx\n", hres);
3824
3825 IOleObject_Release(oleobj);
3826}
3827
3828#define TEST_DOWNLOAD 0x0001
3829#define TEST_NOOLECMD 0x0002
3830#define TEST_NODOCHOST 0x0004
3831
3832static void init_test(IWebBrowser2 *webbrowser, DWORD flags)
3833{
3834 wb = webbrowser;
3835
3838 dwl_flags = 0;
3841}
3842
3844{
3845 IWebBrowser2 *webbrowser;
3846 IOleObject *oleobj;
3847 HRESULT hres;
3849
3850 webbrowser = create_webbrowser();
3851 if(!webbrowser)
3852 return;
3853
3854 init_test(webbrowser, flags);
3855
3856 hres = IWebBrowser2_QueryInterface(webbrowser, &IID_IOleObject, (void **)&oleobj);
3857 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
3858
3859 hres = IOleObject_Advise(oleobj, &test_sink, &connection);
3860 ok(hres == S_OK, "Advise failed: %08lx\n", hres);
3861
3862 test_QueryStatusWB(webbrowser, FALSE);
3863 test_ExecWB(webbrowser, FALSE);
3864 test_QueryInterface(webbrowser);
3865 test_ready_state(READYSTATE_UNINITIALIZED, BUSY_FAIL);
3866 test_ClassInfo(webbrowser);
3867 test_EnumVerbs(webbrowser);
3868 test_LocationURL(webbrowser, L"");
3869 test_ConnectionPoint(webbrowser, TRUE);
3870
3871 test_ClientSite(webbrowser, &ClientSite, !do_download);
3872 test_Extent(webbrowser);
3873 test_wb_funcs(webbrowser, TRUE);
3874 test_DoVerb(webbrowser);
3875 test_olecmd(webbrowser, FALSE);
3876 test_Navigate2(webbrowser, L"about:blank");
3877 test_QueryStatusWB(webbrowser, TRUE);
3878 test_Persist(webbrowser, 2);
3879 test_OleObject(webbrowser, 2);
3880 test_Advise(webbrowser);
3881
3882 if(do_download) {
3883 IHTMLDocument2 *doc, *doc2;
3884
3885 test_download(0);
3886 test_olecmd(webbrowser, TRUE);
3887 doc = get_document(webbrowser);
3888
3889 test_put_href(webbrowser, L"about:test");
3891 doc2 = get_document(webbrowser);
3892 ok(doc == doc2, "doc != doc2\n");
3893 IHTMLDocument2_Release(doc2);
3894
3895 trace("Navigate2 repeated...\n");
3896 test_Navigate2(webbrowser, L"about:blank");
3898 doc2 = get_document(webbrowser);
3899 ok(doc == doc2, "doc != doc2\n");
3900 IHTMLDocument2_Release(doc2);
3901 IHTMLDocument2_Release(doc);
3902
3903 if(!do_close) {
3904 trace("Navigate2 http URL...\n");
3905 test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
3906 test_Navigate2(webbrowser, L"http://test.winehq.org/tests/hello.html");
3910
3911 test_Refresh(webbrowser, FALSE);
3912 test_Refresh(webbrowser, TRUE);
3913
3914 trace("put_href http URL...\n");
3915 test_put_href(webbrowser, L"http://test.winehq.org/tests/winehq_snapshot/");
3917
3918 trace("GoBack...\n");
3920 test_go_back(webbrowser, L"http://test.winehq.org/tests/hello.html", 0, 0, 1);
3923
3924 trace("GoForward...\n");
3925 test_go_forward(webbrowser, L"http://test.winehq.org/tests/winehq_snapshot/", -1, 0);
3927
3928 trace("GoBack...\n");
3930 test_go_back(webbrowser, L"http://test.winehq.org/tests/hello.html", 0, -1, 0);
3933
3934 trace("GoForward...\n");
3935 test_go_forward(webbrowser, L"http://test.winehq.org/tests/winehq_snapshot/", -1, 0);
3937 }else {
3938 trace("Navigate2 repeated with the same URL...\n");
3939 test_Navigate2(webbrowser, L"about:blank");
3941 }
3942
3943 test_EnumVerbs(webbrowser);
3944 test_TranslateAccelerator(webbrowser);
3945
3946 test_dochost_qs(webbrowser);
3947 }else {
3948 test_ExecWB(webbrowser, TRUE);
3949 }
3950
3951 test_external(webbrowser);
3952 test_htmlwindow_close(webbrowser);
3953
3954 if(do_close) {
3955 test_Close(webbrowser, do_download);
3956 }else {
3957 test_change_ClientSite(webbrowser);
3958 test_ClientSite(webbrowser, NULL, !do_download);
3959 }
3960 test_ie_funcs(webbrowser);
3961 test_GetControlInfo(webbrowser);
3962 test_wb_funcs(webbrowser, FALSE);
3963 test_ConnectionPoint(webbrowser, FALSE);
3964 test_IServiceProvider(webbrowser);
3965
3966 hres = IOleObject_Unadvise(oleobj, connection);
3967 ok(hres == S_OK, "Unadvise failed: %08lx\n", hres);
3968
3969 IOleObject_Release(oleobj);
3970
3971 ref = IWebBrowser2_Release(webbrowser);
3972 ok(ref == 0 || broken(do_download && !do_close), "ref=%ld, expected 0\n", ref);
3973}
3974
3975static void test_WebBrowserV1(void)
3976{
3977 IWebBrowser2 *wb;
3978 IOleObject *oleobj;
3980 HRESULT hres;
3981
3982 hres = CoCreateInstance(&CLSID_WebBrowser_V1, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
3983 &IID_IWebBrowser2, (void**)&wb);
3984 ok(hres == S_OK, "Could not get WebBrowserV1 instance: %08lx\n", hres);
3985
3986 init_test(wb, 0);
3987 wb_version = 1;
3988
3989 hres = IWebBrowser2_QueryInterface(wb, &IID_IOleObject, (void **)&oleobj);
3990 ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
3991
3992 hres = IOleObject_Advise(oleobj, &test_sink, &connection);
3993 ok(hres == S_OK, "Advise failed: %08lx\n", hres);
3994
3998 test_ready_state(READYSTATE_UNINITIALIZED, BUSY_FAIL);
4001 test_Persist(wb, 1);
4002 test_OleObject(wb, 1);
4003 test_Advise(wb);
4004
4005 hres = IOleObject_Unadvise(oleobj, connection);
4006 ok(hres == S_OK, "Unadvise failed: %08lx\n", hres);
4007
4008 IOleObject_Release(oleobj);
4009
4010 ref = IWebBrowser2_Release(wb);
4011 ok(ref == 0, "ref=%ld, expected 0\n", ref);
4012}
4013
4015{
4016 IWebBrowser2 *webbrowser;
4017 ULONG ref;
4018
4019 webbrowser = create_webbrowser();
4021
4022 test_ConnectionPoint(webbrowser, TRUE);
4023 test_ClientSite(webbrowser, &ClientSite, TRUE);
4024 test_DoVerb(webbrowser);
4025 test_Navigate2(webbrowser, L"about:blank");
4026
4027 /* Tests of interest */
4028 test_QueryStatusWB(webbrowser, TRUE);
4029 test_ExecWB(webbrowser, TRUE);
4030 test_external(webbrowser);
4031
4032 /* Cleanup stage */
4033 test_ClientSite(webbrowser, NULL, TRUE);
4034 test_ConnectionPoint(webbrowser, FALSE);
4035
4036 ref = IWebBrowser2_Release(webbrowser);
4037 ok(ref == 0, "ref=%ld, expected 0\n", ref);
4038}
4039
4040static void test_WebBrowser_DoVerb(void)
4041{
4042 IWebBrowser2 *webbrowser;
4043 RECT rect;
4044 HWND hwnd;
4045 ULONG ref;
4046 BOOL res;
4047 HRESULT hres;
4049
4050 webbrowser = create_webbrowser();
4051 init_test(webbrowser, 0);
4052
4053 test_ClientSite(webbrowser, &ClientSite, FALSE);
4054
4055 SET_EXPECT(CanInPlaceActivate);
4056 SET_EXPECT(Site_GetWindow);
4057 SET_EXPECT(OnInPlaceActivate);
4058 SET_EXPECT(GetWindowContext);
4059 SET_EXPECT(ShowObject);
4060 SET_EXPECT(GetContainer);
4063 CHECK_CALLED(CanInPlaceActivate);
4064 CHECK_CALLED(Site_GetWindow);
4065 CHECK_CALLED(OnInPlaceActivate);
4066 CHECK_CALLED(GetWindowContext);
4067 CHECK_CALLED(ShowObject);
4068 CHECK_CALLED(GetContainer);
4070
4071 hwnd = get_hwnd(webbrowser);
4072
4073 memset(&rect, 0xa, sizeof(rect));
4075 ok(res, "GetWindowRect failed: %lu\n", GetLastError());
4076
4077 SET_EXPECT(OnInPlaceDeactivate);
4078 call_DoVerb(webbrowser, OLEIVERB_HIDE);
4079 CHECK_CALLED(OnInPlaceDeactivate);
4080
4081 b = 0x100;
4082 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4083 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4084 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4085
4086 SET_EXPECT(CanInPlaceActivate);
4087 SET_EXPECT(Site_GetWindow);
4088 SET_EXPECT(OnInPlaceActivate);
4089 SET_EXPECT(GetWindowContext);
4090 SET_EXPECT(ShowObject);
4091 SET_EXPECT(GetContainer);
4093 SET_EXPECT(OnUIActivate);
4095 SET_EXPECT(UIWindow_SetActiveObject);
4097 SET_EXPECT(OnFocus_TRUE);
4098 call_DoVerb(webbrowser, OLEIVERB_SHOW);
4099 CHECK_CALLED(CanInPlaceActivate);
4100 CHECK_CALLED(Site_GetWindow);
4101 CHECK_CALLED(OnInPlaceActivate);
4102 CHECK_CALLED(GetWindowContext);
4103 CHECK_CALLED(ShowObject);
4104 CHECK_CALLED(GetContainer);
4106 CHECK_CALLED(OnUIActivate);
4108 CHECK_CALLED(UIWindow_SetActiveObject);
4110 CHECK_CALLED(OnFocus_TRUE);
4111
4112 b = 0x100;
4113 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4114 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4115 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4116
4117 call_DoVerb(webbrowser, OLEIVERB_SHOW);
4118 call_DoVerb(webbrowser, OLEIVERB_UIACTIVATE);
4119
4121 SET_EXPECT(UIWindow_SetActiveObject);
4122 SET_EXPECT(OnUIDeactivate);
4123 SET_EXPECT(OnFocus_FALSE);
4124 SET_EXPECT(OnInPlaceDeactivate);
4125 test_hide = TRUE;
4126 call_DoVerb(webbrowser, OLEIVERB_HIDE);
4127 test_hide = FALSE;
4129 CHECK_CALLED(UIWindow_SetActiveObject);
4130 CHECK_CALLED(OnUIDeactivate);
4131 CHECK_CALLED(OnFocus_FALSE);
4132 CHECK_CALLED(OnInPlaceDeactivate);
4133
4134 b = 0x100;
4135 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4136 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4137 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4138
4139 SET_EXPECT(CanInPlaceActivate);
4140 SET_EXPECT(Site_GetWindow);
4141 SET_EXPECT(OnInPlaceActivate);
4142 SET_EXPECT(GetWindowContext);
4143 SET_EXPECT(ShowObject);
4144 SET_EXPECT(GetContainer);
4146 SET_EXPECT(OnUIActivate);
4148 SET_EXPECT(UIWindow_SetActiveObject);
4150 SET_EXPECT(OnFocus_TRUE);
4151 call_DoVerb(webbrowser, OLEIVERB_SHOW);
4152 CHECK_CALLED(CanInPlaceActivate);
4153 CHECK_CALLED(Site_GetWindow);
4154 CHECK_CALLED(OnInPlaceActivate);
4155 CHECK_CALLED(GetWindowContext);
4156 CHECK_CALLED(ShowObject);
4157 CHECK_CALLED(GetContainer);
4159 CHECK_CALLED(OnUIActivate);
4161 CHECK_CALLED(UIWindow_SetActiveObject);
4163 CHECK_CALLED(OnFocus_TRUE);
4164
4165 b = 0x100;
4166 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4167 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4168 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4169
4171 SET_EXPECT(UIWindow_SetActiveObject);
4172 SET_EXPECT(OnUIDeactivate);
4173 SET_EXPECT(OnFocus_FALSE);
4174 SET_EXPECT(OnInPlaceDeactivate);
4175 test_hide = TRUE;
4176 call_DoVerb(webbrowser, OLEIVERB_HIDE);
4178 CHECK_CALLED(UIWindow_SetActiveObject);
4179 CHECK_CALLED(OnUIDeactivate);
4180 CHECK_CALLED(OnFocus_FALSE);
4181 CHECK_CALLED(OnInPlaceDeactivate);
4182
4183 call_DoVerb(webbrowser, OLEIVERB_HIDE);
4184 test_hide = FALSE;
4185
4186 b = 0x100;
4187 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4188 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4189 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4190
4191 SET_EXPECT(CanInPlaceActivate);
4192 SET_EXPECT(Site_GetWindow);
4193 SET_EXPECT(OnInPlaceActivate);
4194 SET_EXPECT(GetWindowContext);
4195 SET_EXPECT(ShowObject);
4196 SET_EXPECT(GetContainer);
4198 SET_EXPECT(OnUIActivate);
4200 SET_EXPECT(UIWindow_SetActiveObject);
4202 SET_EXPECT(OnFocus_TRUE);
4203 call_DoVerb(webbrowser, OLEIVERB_UIACTIVATE);
4204 CHECK_CALLED(CanInPlaceActivate);
4205 CHECK_CALLED(Site_GetWindow);
4206 CHECK_CALLED(OnInPlaceActivate);
4207 CHECK_CALLED(GetWindowContext);
4208 CHECK_CALLED(ShowObject);
4209 CHECK_CALLED(GetContainer);
4211 CHECK_CALLED(OnUIActivate);
4213 CHECK_CALLED(UIWindow_SetActiveObject);
4215 CHECK_CALLED(OnFocus_TRUE);
4216
4217 b = 0x100;
4218 hres = IWebBrowser2_get_Visible(webbrowser, &b);
4219 ok(hres == S_OK, "get_Visible failed: %08lx\n", hres);
4220 ok(b == VARIANT_TRUE, "Visible = %x\n", b);
4221
4222 call_DoVerb(webbrowser, OLEIVERB_SHOW);
4223
4224 test_ClientSite(webbrowser, NULL, FALSE);
4225
4226 ref = IWebBrowser2_Release(webbrowser);
4227 ok(ref == 0, "ref=%ld, expected 0\n", ref);
4228}
4229
4230
4231/* Check if Internet Explorer is configured to run in "Enhanced Security Configuration" (aka hardened mode) */
4232/* Note: this code is duplicated in dlls/mshtml/tests/mshtml_test.h and dlls/urlmon/tests/sec_mgr.c */
4234{
4235 HKEY zone_map;
4236 DWORD ie_harden, type, size;
4237
4238 ie_harden = 0;
4239 if(RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
4240 0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
4241 size = sizeof(DWORD);
4242 if (RegQueryValueExA(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
4243 type != REG_DWORD) {
4244 ie_harden = 0;
4245 }
4246 RegCloseKey(zone_map);
4247 }
4248
4249 return ie_harden != 0;
4250}
4251
4252static void test_FileProtocol(void)
4253{
4254 IWebBrowser2 *webbrowser;
4255 HANDLE file;
4256 ULONG ref;
4258 WCHAR file_url[MAX_PATH] = L"File://";
4259
4260 static const WCHAR test_file[] = L"wine_test.html";
4261
4264
4265 webbrowser = create_webbrowser();
4266 if(!webbrowser)
4267 return;
4268
4269 init_test(webbrowser, 0);
4270
4273 ok(0, "CreateFile failed\n");
4274 return;
4275 }
4277
4280
4281 test_ConnectionPoint(webbrowser, TRUE);
4282 test_ClientSite(webbrowser, &ClientSite, TRUE);
4283 test_DoVerb(webbrowser);
4284 test_Navigate2(webbrowser, file_url);
4285 test_ClientSite(webbrowser, NULL, TRUE);
4286
4287 ref = IWebBrowser2_Release(webbrowser);
4288 ok(ref == 0, "ref=%lu, expected 0\n", ref);
4289
4292}
4293
4295{
4297 *obj = iface;
4298 return S_OK;
4299 }
4300
4302 return E_NOINTERFACE;
4303
4304 ok(0, "unexpected call QI(%s)\n", wine_dbgstr_guid(riid));
4305 return E_NOINTERFACE;
4306}
4307
4309{
4310 return 2;
4311}
4312
4314{
4315 return 1;
4316}
4317
4318static void WINAPI sink_OnDataChange(IAdviseSink *iface, FORMATETC *format, STGMEDIUM *medium)
4319{
4320 trace("OnDataChange(%p, %p, %p)\n", iface, format, medium);
4321}
4322
4324{
4325 trace("OnViewChange(%p, %08lx, %ld)\n", iface, aspect, index);
4326}
4327
4329{
4330 trace("OnRename(%p, %p) \n", iface, moniker);
4331}
4332
4333static void WINAPI sink_OnSave(IAdviseSink *iface)
4334{
4335 trace("OnSave(%p)\n", iface);
4336}
4337
4339{
4340 trace("OnClose(%p)\n", iface);
4341 CHECK_EXPECT(Advise_OnClose);
4342}
4343
4344static const IAdviseSinkVtbl sink_vtbl =
4345{
4354};
4355
4356static IAdviseSink test_sink = { &sink_vtbl };
4357
4358static void test_SetAdvise(void)
4359{
4360 HRESULT hr;
4361 IWebBrowser2 *browser;
4364 IOleObject *oleobj;
4365 IDispatch *doc;
4366 DWORD aspects, flags;
4367
4368 if (!(browser = create_webbrowser())) return;
4369 init_test(browser, 0);
4370
4371 hr = IWebBrowser2_QueryInterface(browser, &IID_IViewObject2, (void **)&view);
4372 ok(hr == S_OK, "got %08lx\n", hr);
4373 if (FAILED(hr)) return;
4374
4375 aspects = flags = 0xdeadbeef;
4376 sink = (IAdviseSink *)0xdeadbeef;
4377 hr = IViewObject2_GetAdvise(view, &aspects, &flags, &sink);
4378 ok(hr == S_OK, "got %08lx\n", hr);
4379 ok(!aspects, "got %08lx\n", aspects);
4380 ok(!flags, "got %08lx\n", aspects);
4381 ok(sink == NULL, "got %p\n", sink);
4382
4383 hr = IViewObject2_SetAdvise(view, DVASPECT_CONTENT, 0, &test_sink);
4384 ok(hr == S_OK, "got %08lx\n", hr);
4385
4386 aspects = flags = 0xdeadbeef;
4387 sink = (IAdviseSink *)0xdeadbeef;
4388 hr = IViewObject2_GetAdvise(view, &aspects, &flags, &sink);
4389 ok(hr == S_OK, "got %08lx\n", hr);
4390 ok(aspects == DVASPECT_CONTENT, "got %08lx\n", aspects);
4391 ok(!flags, "got %08lx\n", aspects);
4392 ok(sink == &test_sink, "got %p\n", sink);
4393
4394 hr = IWebBrowser2_QueryInterface(browser, &IID_IOleObject, (void **)&oleobj);
4395 ok(hr == S_OK, "got %08lx\n", hr);
4396
4397 SET_EXPECT(GetContainer);
4398 SET_EXPECT(Site_GetWindow);
4399 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
4400 SET_EXPECT(Invoke_AMBIENT_SILENT);
4401 hr = IOleObject_SetClientSite(oleobj, &ClientSite);
4402 ok(hr == S_OK, "got %08lx\n", hr);
4403 CHECK_CALLED(GetContainer);
4404 CHECK_CALLED(Site_GetWindow);
4405 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
4406 CHECK_CALLED(Invoke_AMBIENT_SILENT);
4407
4408 sink = (IAdviseSink *)0xdeadbeef;
4409 hr = IViewObject2_GetAdvise(view, &aspects, &flags, &sink);
4410 ok(hr == S_OK, "got %08lx\n", hr);
4411 ok(sink == &test_sink, "got %p\n", sink);
4412
4413 hr = IOleObject_SetClientSite(oleobj, NULL);
4414 ok(hr == S_OK, "got %08lx\n", hr);
4415
4416 aspects = flags = 0xdeadbeef;
4417 sink = (IAdviseSink *)0xdeadbeef;
4418 hr = IViewObject2_GetAdvise(view, &aspects, &flags, &sink);
4419 ok(hr == S_OK, "got %08lx\n", hr);
4420 ok(sink == &test_sink, "got %p\n", sink);
4421
4422 hr = IViewObject2_SetAdvise(view, 0, 0, NULL);
4423 ok(hr == S_OK, "got %08lx\n", hr);
4424
4425 doc = (void*)0xdeadbeef;
4426 hr = IWebBrowser2_get_Document(browser, &doc);
4427 ok(hr == S_FALSE, "get_Document failed: %08lx\n", hr);
4428 ok(!doc, "doc = %p\n", doc);
4429
4430 IOleObject_Release(oleobj);
4431 IViewObject2_Release(view);
4432 IWebBrowser2_Release(browser);
4433}
4434
4436{
4437 LONG count, init_count, inc_count, dec_count;
4438
4439 init_count = pSetQueryNetSessionCount(SESSION_QUERY);
4440 trace("init_count %ld\n", init_count);
4441
4442 inc_count = pSetQueryNetSessionCount(SESSION_INCREMENT);
4443 ok(inc_count > init_count, "count = %ld\n", inc_count);
4444
4445 count = pSetQueryNetSessionCount(SESSION_QUERY);
4446 ok(count == inc_count, "count = %ld\n", count);
4447
4448 dec_count = pSetQueryNetSessionCount(SESSION_DECREMENT);
4449 ok(dec_count < inc_count, "count = %ld\n", dec_count);
4450
4451 count = pSetQueryNetSessionCount(SESSION_QUERY);
4452 ok(count == dec_count, "count = %ld\n", count);
4453}
4454
4456{
4458 CHECK_EXPECT(outer_QI_test);
4459 *ppv = (IUnknown*)0xdeadbeef;
4460 return S_OK;
4461 }
4462 ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
4463 return E_NOINTERFACE;
4464}
4465
4467{
4468 return 2;
4469}
4470
4472{
4473 return 1;
4474}
4475
4476static IUnknownVtbl outer_vtbl = {
4480};
4481
4482static void test_com_aggregation(void)
4483{
4484 HRESULT hr;
4486 IUnknown outer = { &outer_vtbl };
4487 IUnknown *unk = NULL;
4488 IWebBrowser *web_browser = NULL;
4489 IUnknown *unk2 = NULL;
4490
4491 hr = CoGetClassObject(&CLSID_WebBrowser, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void**)&class_factory);
4492 ok(hr == S_OK, "CoGetClassObject failed: %08lx\n", hr);
4493
4494 hr = IClassFactory_CreateInstance(class_factory, &outer, &IID_IUnknown, (void**)&unk);
4495 ok(hr == S_OK, "CreateInstance returned hr = %08lx\n", hr);
4496 ok(unk != NULL, "result NULL, hr = %08lx\n", hr);
4497
4498 hr = IUnknown_QueryInterface(unk, &IID_IWebBrowser, (void**)&web_browser);
4499 ok(hr == S_OK, "QI to IWebBrowser failed, hr=%08lx\n", hr);
4500
4501 SET_EXPECT(outer_QI_test);
4502 hr = IWebBrowser_QueryInterface(web_browser, &outer_test_iid, (void**)&unk2);
4503 CHECK_CALLED(outer_QI_test);
4504 ok(hr == S_OK, "Could not get test iface: %08lx\n", hr);
4505 ok(unk2 == (IUnknown*)0xdeadbeef, "unexpected unk2\n");
4506
4507 IWebBrowser_Release(web_browser);
4508 IUnknown_Release(unk);
4509 IClassFactory_Release(class_factory);
4510}
4511
4512START_TEST(webbrowser)
4513{
4514 HMODULE ieframe = LoadLibraryW(L"ieframe.dll");
4515
4516 pSetQueryNetSessionCount = (void*)GetProcAddress(ieframe, "SetQueryNetSessionCount");
4517
4519
4521
4523
4524 trace("Testing WebBrowser (no download)...\n");
4527
4528 if(!is_ie_hardened()) {
4529 trace("Testing WebBrowser...\n");
4531 trace("Testing WebBrowser(no olecmd)...\n");
4533 }else {
4534 win_skip("Skipping http tests in hardened mode\n");
4535 }
4536
4537 trace("Testing WebBrowser DoVerb\n");
4539 trace("Testing WebBrowser (with close)...\n");
4541 trace("Testing WebBrowser w/o container-based olecmd...\n");
4543 trace("Testing WebBrowserV1...\n");
4545 trace("Testing file protocol...\n");
4547 trace("Testing SetAdvise...\n");
4550
4552}
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
static int state
Definition: maze.c:121
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define ok_(x1, x2)
Definition: atltest.h:61
#define msg(x)
Definition: auth_time.c:54
COMMAND cmds[]
Definition: main.c:21
#define ARRAY_SIZE(A)
Definition: main.h:20
long SHANDLE_PTR
Definition: basetsd.h:71
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
Definition: registry.h:49
Verb verbs[]
Definition: certutil.cpp:21
const IID GCC8DECLSPEC_SELECTANY IID_IProxyManager
RECT rect
Definition: combotst.c:67
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
const WCHAR * link
Definition: db.cpp:998
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define ERROR_SUCCESS
Definition: deptool.c:10
static void test_QueryInterface(void)
Definition: dinput.c:266
_Check_return_ _In_ PQUERY_INTERFACE QueryInterface
Definition: dispmprt.h:1318
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDM_STOP
Definition: resource.h:22
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
Definition: combase.c:1925
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define CloseHandle
Definition: compat.h:739
#define wcsnicmp
Definition: compat.h:14
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
WCHAR OLECHAR
Definition: compat.h:2292
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
short VARIANT_BOOL
Definition: compat.h:2290
#define LoadLibraryW(x)
Definition: compat.h:747
@ VT_BSTR
Definition: compat.h:2303
@ VT_BYREF
Definition: compat.h:2342
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I4
Definition: compat.h:2298
@ VT_BOOL
Definition: compat.h:2306
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
static const WCHAR version[]
Definition: asmname.c:66
static HRESULT STDMETHODCALLTYPE Frame_GetWindow(IOleInPlaceFrame *iface, HWND *lphwnd)
Definition: webbrowser.c:474
static HRESULT STDMETHODCALLTYPE Frame_SetActiveObject(IOleInPlaceFrame *iface, IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
Definition: webbrowser.c:502
static const IDocHostUIHandlerVtbl DocHostUIHandlerVtbl
Definition: webbrowser.c:296
HINTERNET connection
Definition: port.c:65
static HRESULT WINAPI ControlSite_TranslateAccelerator(IOleControlSite *iface, MSG *pMsg, DWORD grfModifiers)
Definition: client.c:465
static const IServiceProviderVtbl ServiceProviderVtbl
Definition: webbrowser.c:1228
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2098
DWORD WINAPI GetLongPathNameW(IN LPCWSTR lpszShortPath, OUT LPWSTR lpszLongPath, IN DWORD cchBuffer)
Definition: path.c:1555
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
LANGID WINAPI GetUserDefaultLangID(void)
Definition: locale.c:1182
LCID lcid
Definition: locale.c:5660
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
Definition: sync.c:182
GUID guid
Definition: version.c:147
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:523
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:162
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
Definition: ole2.c:218
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
static void test_Advise(void)
Definition: ebrowser.c:1228
POINTL point
Definition: edittest.c:50
#define DISPID_ONSTATUSBAR
Definition: exdispid.h:50
#define DISPID_ONTOOLBAR
Definition: exdispid.h:48
#define DISPID_ONADDRESSBAR
Definition: exdispid.h:54
#define DISPID_WINDOWSETRESIZABLE
Definition: exdispid.h:55
#define DISPID_SETSECURELOCKICON
Definition: exdispid.h:62
#define DISPID_PRIVACYIMPACTEDSTATECHANGE
Definition: exdispid.h:65
#define DISPID_ONFULLSCREEN
Definition: exdispid.h:51
#define DISPID_BEFORENAVIGATE2
Definition: exdispid.h:43
#define DISPID_NAVIGATECOMPLETE2
Definition: exdispid.h:45
#define DISPID_FILEDOWNLOAD
Definition: exdispid.h:63
#define DISPID_ONMENUBAR
Definition: exdispid.h:49
#define DISPID_TITLECHANGE
Definition: exdispid.h:35
#define DISPID_COMMANDSTATECHANGE
Definition: exdispid.h:27
#define DISPID_DOWNLOADCOMPLETE
Definition: exdispid.h:26
#define DISPID_PROGRESSCHANGE
Definition: exdispid.h:30
#define DISPID_WINDOWCLOSING
Definition: exdispid.h:56
#define DISPID_DOWNLOADBEGIN
Definition: exdispid.h:28
#define DISPID_BEFORESCRIPTEXECUTE
Definition: exdispid.h:75
#define DISPID_STATUSTEXTCHANGE
Definition: exdispid.h:24
#define DISPID_DOCUMENTCOMPLETE
Definition: exdispid.h:52
#define DISPID_SETPHISHINGFILTERSTATUS
Definition: exdispid.h:68
#define DISPID_ONTHEATERMODE
Definition: exdispid.h:53
#define DISPID_PROPERTYCHANGE
Definition: exdispid.h:34
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLuint index
Definition: glext.h:6031
GLbitfield flags
Definition: glext.h:7161
GLfloat f
Definition: glext.h:7540
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
GLenum const GLfloat * params
Definition: glext.h:5645
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
Definition: idispids.h:25
#define DISPID_AMBIENT_SILENT
Definition: idispids.h:26
SessionOp
Definition: ieframe.h:381
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define f
Definition: ke_i.h:83
#define b
Definition: ke_i.h:79
#define wine_dbgstr_w
Definition: kernel32.h:34
#define location(file, line)
Definition: kmtest.h:18
#define GUID_NULL
Definition: ks.h:106
USHORT LANGID
Definition: mui.h:9
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define win_skip
Definition: minitest.h:67
int winetest_interactive
#define todo_wine_if(is_todo)
Definition: minitest.h:81
#define todo_wine
Definition: minitest.h:80
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define CREATE_NEW
Definition: disk.h:69
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
const IID IID_IObjectWithSite
static const WCHAR url[]
Definition: encode.c:1384
BOOL expected
Definition: store.c:2000
static HWND get_hwnd(void)
Definition: joystick.c:67
static HRESULT WINAPI IOleControlSite_fnOnControlInfoChanged(IOleControlSite *This)
Definition: webbrowser.c:1161
static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: webbrowser.c:1745
static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
Definition: webbrowser.c:1313
#define SET_EXPECT(func)
Definition: webbrowser.c:55
static void test_download(DWORD flags)
Definition: webbrowser.c:2988
static void test_EnumVerbs(IWebBrowser2 *wb)
Definition: webbrowser.c:2187
static IHTMLDocument2 * _get_document(unsigned line, IWebBrowser2 *wb)
Definition: webbrowser.c:302
static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
Definition: webbrowser.c:1373
static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
Definition: webbrowser.c:1614
static void test_IServiceProvider(IWebBrowser2 *unk)
Definition: webbrowser.c:3212
#define CLEAR_CALLED(func)
Definition: webbrowser.c:82
static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface, IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
Definition: webbrowser.c:1285
static HRESULT hr_dochost_TranslateAccelerator
Definition: webbrowser.c:170
static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
Definition: webbrowser.c:1594
static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
Definition: webbrowser.c:350
static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
Definition: webbrowser.c:1602
static void test_WebBrowserV1(void)
Definition: webbrowser.c:3975
static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
Definition: webbrowser.c:1124
static BOOL test_close
Definition: webbrowser.c:169
static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
Definition: webbrowser.c:1344
static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
Definition: webbrowser.c:1573
static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect)
Definition: webbrowser.c:1509
#define get_dochost(u)
Definition: webbrowser.c:321
static void test_put_href(IWebBrowser2 *unk, const WCHAR *url)
Definition: webbrowser.c:3238
static void test_ie_funcs(IWebBrowser2 *wb)
Definition: webbrowser.c:2294
static BOOL do_download
Definition: webbrowser.c:168
static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1435
static void test_GetMiscStatus(IOleObject *oleobj)
Definition: webbrowser.c:1943
static HRESULT WINAPI IOleControlSite_fnQueryInterface(IOleControlSite *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1145
static void test_olecmd(IWebBrowser2 *unk, BOOL loaded)
Definition: webbrowser.c:3182
static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
Definition: webbrowser.c:1740
static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
Definition: webbrowser.c:1608
static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1227
static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO, IDataObject **ppPORet)
Definition: webbrowser.c:1687
static void test_UIActivate(IWebBrowser2 *unk, BOOL activate)
Definition: webbrowser.c:3407
#define test_LocationName(a, b)
Definition: webbrowser.c:266
static IWebBrowser2 * _create_webbrowser(unsigned line)
Definition: webbrowser.c:238
static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
Definition: webbrowser.c:1568
static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
Definition: webbrowser.c:360
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
Definition: webbrowser.c:611
static void WINAPI sink_OnClose(IAdviseSink *iface)
Definition: webbrowser.c:4338
static IDispatchVtbl WebBrowserEvents2Vtbl
Definition: webbrowser.c:1061
static void test_SetAdvise(void)
Definition: webbrowser.c:4358
static IOleControlSite ControlSite
Definition: webbrowser.c:1225
static IWebBrowser2 * wb
Definition: webbrowser.c:165
static IOleInPlaceFrame InPlaceFrame
Definition: webbrowser.c:1391
static ULONG WINAPI outer_AddRef(IUnknown *iface)
Definition: webbrowser.c:4466
static IOleClientSite ClientSite
Definition: webbrowser.c:1142
static IOleControlSiteVtbl ControlSiteVtbl
Definition: webbrowser.c:1212
static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
Definition: webbrowser.c:1250
static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
Definition: webbrowser.c:1112
static const IOleContainerVtbl OleContainerVtbl
Definition: webbrowser.c:585
static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
Definition: webbrowser.c:222
static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
Definition: webbrowser.c:1078
static void _expect_oleverb(unsigned line, const OLEVERB *verb, LONG exverb)
Definition: webbrowser.c:2164
static void WINAPI sink_OnDataChange(IAdviseSink *iface, FORMATETC *format, STGMEDIUM *medium)
Definition: webbrowser.c:4318
static void _test_invoke_bool(unsigned line, const DISPPARAMS *params, BOOL strict)
Definition: webbrowser.c:706
#define test_LocationURL(a, b)
Definition: webbrowser.c:251
static void test_SetQueryNetSessionCount(void)
Definition: webbrowser.c:4435
static void test_go_back(IWebBrowser2 *wb, const WCHAR *back_url, int back_enable, int forward_enable, int forward_todo)
Definition: webbrowser.c:3279
static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
Definition: webbrowser.c:2588
static HWND shell_embedding_hwnd
Definition: webbrowser.c:167
static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1503
static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd)
Definition: webbrowser.c:1408
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
Definition: webbrowser.c:606
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: webbrowser.c:1833
static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable)
Definition: webbrowser.c:1484
static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
Definition: webbrowser.c:1636
static IOleInPlaceSiteEx InPlaceSite
Definition: webbrowser.c:1556
static IDispatch Dispatch
Definition: webbrowser.c:690
static HRESULT WINAPI IOleControlSite_fnShowPropertyFrame(IOleControlSite *This)
Definition: webbrowser.c:1206
static void test_Persist(IWebBrowser2 *wb, int version)
Definition: webbrowser.c:2256
static void _test_LocationName(unsigned line, IWebBrowser2 *wb, const WCHAR *exname)
Definition: webbrowser.c:267
#define DWL_FROM_PUT_HREF
Definition: webbrowser.c:188
static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: webbrowser.c:857
static void test_go_forward(IWebBrowser2 *wb, const WCHAR *forward_url, int back_enable, int forward_enable)
Definition: webbrowser.c:3321
static IServiceProvider ServiceProvider
Definition: webbrowser.c:1794
#define CHECK_EXPECT(func)
Definition: webbrowser.c:64
static const IAdviseSinkVtbl sink_vtbl
Definition: webbrowser.c:4344
static void test_navigatecomplete2(DISPPARAMS *dp)
Definition: webbrowser.c:812
static BOOL test_hide
Definition: webbrowser.c:169
static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceFrame *iface)
Definition: webbrowser.c:1239
static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
Definition: webbrowser.c:1244
#define test_invoke_bool(p, s)
Definition: webbrowser.c:705
static BOOL is_downloading
Definition: webbrowser.c:168
#define DEFINE_EXPECT(func)
Definition: webbrowser.c:52
static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
Definition: webbrowser.c:1083
static void test_change_ClientSite(IWebBrowser2 *unk)
Definition: webbrowser.c:2060
static BOOL is_lang_english(void)
Definition: webbrowser.c:202
static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
Definition: webbrowser.c:1643
static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
Definition: webbrowser.c:1672
static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
Definition: webbrowser.c:560
#define test_ready_state(a, b)
Definition: webbrowser.c:279
static void test_SetHostNames(IOleObject *oleobj)
Definition: webbrowser.c:1959
static BOOL use_container_olecmd
Definition: webbrowser.c:168
static HRESULT WINAPI InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1529
@ SESSION_DECREMENT
Definition: webbrowser.c:180
@ SESSION_INCREMENT
Definition: webbrowser.c:179
@ SESSION_QUERY
Definition: webbrowser.c:178
#define test_next_oleverb(a, b)
Definition: webbrowser.c:2172
static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
Definition: webbrowser.c:2783
static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
Definition: webbrowser.c:1563
static IOleContainer OleContainer
Definition: webbrowser.c:594
static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface, IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
Definition: webbrowser.c:1299
static HRESULT WINAPI IOleControlSite_fnTransformCoords(IOleControlSite *This, POINTL *pPtlHimetric, POINTF *pPtfContainer, DWORD dwFlags)
Definition: webbrowser.c:1181
static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: webbrowser.c:631
static void test_WebBrowser_slim_container(void)
Definition: webbrowser.c:4014
static void test_dochost_qs(IWebBrowser2 *webbrowser)
Definition: webbrowser.c:3645
static HRESULT hr_site_TranslateAccelerator
Definition: webbrowser.c:171
static BOOL use_container_dochostui
Definition: webbrowser.c:169
static ULONG WINAPI sink_AddRef(IAdviseSink *iface)
Definition: webbrowser.c:4308
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
Definition: webbrowser.c:1679
static void test_QueryStatusWB(IWebBrowser2 *webbrowser, BOOL has_document)
Definition: webbrowser.c:2906
static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode)
Definition: webbrowser.c:1417
static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:343
static void test_ambient_unknown(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
Definition: webbrowser.c:2641
static BOOL is_http
Definition: webbrowser.c:169
#define DWL_HTTP
Definition: webbrowser.c:191
#define get_document(u)
Definition: webbrowser.c:301
static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1393
static HRESULT WINAPI IOleControlSite_fnTranslateAccelerator(IOleControlSite *This, MSG *pMsg, DWORD grfModifiers)
Definition: webbrowser.c:1190
static IUnknownVtbl outer_vtbl
Definition: webbrowser.c:4476
static void test_Close(IWebBrowser2 *wb, BOOL do_download)
Definition: webbrowser.c:3687
#define create_webbrowser()
Definition: webbrowser.c:237
static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:4455
static IOleClientSite ClientSite2
Definition: webbrowser.c:1143
static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
Definition: webbrowser.c:1337
static BOOL is_first_load
Definition: webbrowser.c:168
#define CHECK_EXPECT2(func)
Definition: webbrowser.c:58
static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject)
Definition: webbrowser.c:1320
static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
Definition: webbrowser.c:1088
static IOleInPlaceUIWindow InPlaceUIWindow
Definition: webbrowser.c:1371
static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface, BOOL fNoRedraw)
Definition: webbrowser.c:1522
static DWORD dwl_flags
Definition: webbrowser.c:195
static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: webbrowser.c:617
static void test_FileProtocol(void)
Definition: webbrowser.c:4252
#define DWL_FROM_GOBACK
Definition: webbrowser.c:189
static void test_external(IWebBrowser2 *unk)
Definition: webbrowser.c:3444
static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame *iface, LPCBORDERWIDTHS pborderwidths)
Definition: webbrowser.c:1271
static HRESULT WINAPI IOleControlSite_fnOnFocus(IOleControlSite *This, BOOL fGotFocus)
Definition: webbrowser.c:1197
static void test_TranslateAccelerator(IWebBrowser2 *unk)
Definition: webbrowser.c:3502
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
Definition: webbrowser.c:601
static void test_ClientSite(IWebBrowser2 *unk, IOleClientSite *client, BOOL stop_download)
Definition: webbrowser.c:1967
static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
Definition: webbrowser.c:1259
static HRESULT WINAPI InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface, BOOL *pNoRedraw, DWORD dwFlags)
Definition: webbrowser.c:1515
static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
Definition: webbrowser.c:355
static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
Definition: webbrowser.c:1359
static HWND container_hwnd
Definition: webbrowser.c:167
static VARIANT_BOOL exvb
Definition: webbrowser.c:163
static void call_DoVerb(IWebBrowser2 *unk, LONG verb)
Definition: webbrowser.c:1909
static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: webbrowser.c:1630
static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags, IEnumUnknown **ppenum)
Definition: webbrowser.c:572
static void test_wb_funcs(IWebBrowser2 *wb, BOOL is_clientsite)
Definition: webbrowser.c:2670
#define DWL_EXPECT_BEFORE_NAVIGATE
Definition: webbrowser.c:187
static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1429
static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy)
Definition: webbrowser.c:280
static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
Definition: webbrowser.c:565
#define DWL_BACK_ENABLE
Definition: webbrowser.c:193
#define expect_oleverb(a, b)
Definition: webbrowser.c:2163
static int set_update_commands_enable
Definition: webbrowser.c:173
static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const WCHAR *exurl)
Definition: webbrowser.c:252
static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: webbrowser.c:1654
#define TEST_NOOLECMD
Definition: webbrowser.c:3829
static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface, IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
Definition: webbrowser.c:1441
static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
Definition: webbrowser.c:579
static HRESULT WINAPI IOleControlSite_fnLockInPlaceActive(IOleControlSite *This, BOOL fLock)
Definition: webbrowser.c:1167
#define CHECK_CALLED(func)
Definition: webbrowser.c:70
static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
Definition: webbrowser.c:1265
static void test_Navigate2(IWebBrowser2 *webbrowser, const WCHAR *nav_url)
Definition: webbrowser.c:2814
static IOleCommandTarget OleCommandTarget
Definition: webbrowser.c:534
static int wb_version
Definition: webbrowser.c:173
static ULONG WINAPI IOleControlSite_fnAddRef(IOleControlSite *iface)
Definition: webbrowser.c:1151
static void WINAPI sink_OnSave(IAdviseSink *iface)
Definition: webbrowser.c:4333
static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
Definition: webbrowser.c:1331
static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1497
static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: webbrowser.c:1694
static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:536
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:596
static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
Definition: webbrowser.c:1478
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: webbrowser.c:624
static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: webbrowser.c:392
static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
Definition: webbrowser.c:555
#define BUSY_FAIL
Definition: webbrowser.c:185
static void test_OnBeforeNavigate(const VARIANT *disp, const VARIANT *url, const VARIANT *flags, const VARIANT *frame, const VARIANT *post_data, const VARIANT *headers, const VARIANT *cancel)
Definition: webbrowser.c:719
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: webbrowser.c:1624
static void test_DoVerb(IWebBrowser2 *unk)
Definition: webbrowser.c:1854
static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1558
static BOOL nav_forward_todo
Definition: webbrowser.c:174
static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
Definition: webbrowser.c:1353
static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
Definition: webbrowser.c:1580
static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1073
static void test_documentcomplete(DISPPARAMS *dp)
Definition: webbrowser.c:836
static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmon)
Definition: webbrowser.c:1094
#define DWL_REFRESH
Definition: webbrowser.c:192
static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1491
static HRESULT WINAPI sink_QueryInterface(IAdviseSink *iface, REFIID riid, void **obj)
Definition: webbrowser.c:4294
static void test_htmlwindow_close(IWebBrowser2 *wb)
Definition: webbrowser.c:3480
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:1730
static void test_com_aggregation(void)
Definition: webbrowser.c:4482
static HWND create_container_window(void)
Definition: webbrowser.c:1838
static void test_Extent(IWebBrowser2 *unk)
Definition: webbrowser.c:2704
static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl
Definition: webbrowser.c:1535
static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
Definition: webbrowser.c:1118
static IDispatchVtbl DispatchVtbl
Definition: webbrowser.c:680
#define TEST_NODOCHOST
Definition: webbrowser.c:3830
static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface, IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
Definition: webbrowser.c:1665
static const IOleClientSiteVtbl ClientSiteVtbl
Definition: webbrowser.c:1130
static void test_ClassInfo(IWebBrowser2 *unk)
Definition: webbrowser.c:2115
static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
Definition: webbrowser.c:1735
static IAdviseSink test_sink
Definition: webbrowser.c:197
#define CHECK_NOT_CALLED(func)
Definition: webbrowser.c:76
static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1403
static void test_OleObject(IWebBrowser2 *wb, int version)
Definition: webbrowser.c:2275
static HRESULT WINAPI IOleControlSite_fnGetExtendedControl(IOleControlSite *This, IDispatch **ppDisp)
Definition: webbrowser.c:1174
static void WINAPI sink_OnRename(IAdviseSink *iface, IMoniker *moniker)
Definition: webbrowser.c:4328
static void WINAPI sink_OnViewChange(IAdviseSink *iface, DWORD aspect, LONG index)
Definition: webbrowser.c:4323
static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
Definition: webbrowser.c:1101
static int expect_update_commands_enable
Definition: webbrowser.c:173
static IOleClientSite * _get_dochost(unsigned line, IWebBrowser2 *unk)
Definition: webbrowser.c:322
static void test_Silent(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
Definition: webbrowser.c:2535
static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1423
static IOleCommandTargetVtbl OleCommandTargetVtbl
Definition: webbrowser.c:526
static IDispatch WebBrowserEvents2
Definition: webbrowser.c:1071
static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface)
Definition: webbrowser.c:1398
static void test_WebBrowser_DoVerb(void)
Definition: webbrowser.c:4040
static void test_WebBrowser(DWORD flags, BOOL do_close)
Definition: webbrowser.c:3843
static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceFrame *iface)
Definition: webbrowser.c:1234
static HRESULT WINAPI WebBrowserEvents2_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
Definition: webbrowser.c:692
static IDocHostUIHandler2 DocHostUIHandler
Definition: webbrowser.c:1727
static BOOL is_ie_hardened(void)
Definition: webbrowser.c:4233
static ULONG WINAPI IOleControlSite_fnRelease(IOleControlSite *iface)
Definition: webbrowser.c:1156
static void test_Refresh(IWebBrowser2 *webbrowser, BOOL use_refresh2)
Definition: webbrowser.c:3154
#define DWL_FROM_GOFORWARD
Definition: webbrowser.c:190
static void _test_next_oleverb(unsigned line, IEnumOLEVERB *enum_verbs, LONG exverb)
Definition: webbrowser.c:2173
static ULONG WINAPI sink_Release(IAdviseSink *iface)
Definition: webbrowser.c:4313
static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame *iface, LPCBORDERWIDTHS pborderwidths)
Definition: webbrowser.c:1278
static void test_GetControlInfo(IWebBrowser2 *unk)
Definition: webbrowser.c:2685
#define TEST_DOWNLOAD
Definition: webbrowser.c:3828
static const WCHAR * current_url
Definition: webbrowser.c:172
static void test_ExecWB(IWebBrowser2 *webbrowser, BOOL has_document)
Definition: webbrowser.c:2947
static ULONG WINAPI outer_Release(IUnknown *iface)
Definition: webbrowser.c:4471
static BOOL nav_back_todo
Definition: webbrowser.c:174
HRESULT hres
Definition: protocol.c:432
static const IID outer_test_iid
Definition: protocol.c:628
static HINSTANCE hkernel32
Definition: process.c:68
static IOleClientSite * client_site
Definition: activex.c:198
static IHTMLWindow2 * window
Definition: events.c:77
static const char * nav_url
Definition: htmldoc.c:217
static IActiveScriptSite * site
Definition: script.c:149
BOOL loaded
Definition: xmlview.c:54
IHTMLDocument2 * html_doc
Definition: xmlview.c:53
static int strict
Definition: error.c:55
static IUnknown * outer
Definition: compobj.c:82
static IRunnableObject * runnable
Definition: ole2.c:76
static IBackgroundCopyFile * test_file
Definition: file.c:36
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static VARIANTARG static DISPID
Definition: ordinal.c:49
static const CHAR post_data[]
Definition: protocol.c:222
static WCHAR file_url[INTERNET_MAX_URL_LENGTH]
Definition: url.c:194
static DWORD unk1
Definition: cursoricon.c:1804
const CLSID * clsid
Definition: msctf.cpp:50
#define DISPID_AMBIENT_DLCONTROL
Definition: mshtmdid.h:539
#define DISPID_AMBIENT_USERAGENT
Definition: mshtmdid.h:540
interface IHTMLWindow2 IHTMLWindow2
Definition: mshtmhst.idl:64
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
#define DWORD
Definition: nt_native.h:44
#define GENERIC_WRITE
Definition: nt_native.h:90
#define OLEIVERB_HIDE
Definition: ole2.h:41
#define OLEIVERB_UIACTIVATE
Definition: ole2.h:42
#define OLEIVERB_INPLACEACTIVATE
Definition: ole2.h:43
#define OLEIVERB_SHOW
Definition: ole2.h:39
#define OLEIVERB_PRIMARY
Definition: ole2.h:38
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_ARRAY(A)
Definition: oleauto.h:222
#define V_BOOLREF(A)
Definition: oleauto.h:225
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_VARIANTREF(A)
Definition: oleauto.h:283
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
OLECMDF cmdf
Definition: olecmd.c:716
#define DISPID_AMBIENT_USERMODE
Definition: olectl.h:405
#define DISPID_AMBIENT_PALETTE
Definition: olectl.h:415
const GUID IID_IOleInPlaceActiveObject
const GUID IID_IOleInPlaceSite
const GUID IID_IOleCache
const GUID IID_IConnectionPointContainer
const GUID IID_IOleInPlaceFrame
const GUID IID_IAdviseSink
const GUID IID_IOleWindow
const GUID IID_IViewObject2
const GUID IID_IOleControlSite
const GUID IID_IRunnableObject
const GUID IID_IProvideClassInfo2
const GUID IID_IOleClientSite
const GUID IID_IDispatch
const GUID IID_IOleInPlaceObject
const GUID IID_IOleLink
const GUID IID_IOleObject
const GUID IID_IOleControl
const GUID IID_IPerPropertyBrowsing
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
const GUID IID_IPersist
Definition: proxy.cpp:14
static char title[]
Definition: ps.c:92
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define DEFINE_OLEGUID(name, l, w1, w2)
Definition: guiddef.h:73
#define REFIID
Definition: guiddef.h:118
#define IID_NULL
Definition: guiddef.h:98
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define VK_F1
Definition: winuser.h:2291
#define VK_F5
Definition: winuser.h:2295
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
HDC WINAPI GetDC(_In_opt_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4470
#define VK_LEFT
Definition: winuser.h:2260
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
struct _WNDCLASSEXW WNDCLASSEXW
#define WM_KEYDOWN
Definition: winuser.h:1743
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
const WCHAR * str
static void do_close(SOCKET)
#define REG_DWORD
Definition: sdbapi.c:615
#define LANG_ENGLISH
Definition: nls.h:52
DWORD LCID
Definition: nls.h:13
#define PRIMARYLANGID(l)
Definition: nls.h:16
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:181
#define memset(x, y, z)
Definition: compat.h:39
@ OLEMISC_INSIDEOUT
Definition: actctx.c:89
@ OLEMISC_ACTIVATEWHENVISIBLE
Definition: actctx.c:90
@ OLEMISC_SETCLIENTSITEFIRST
Definition: actctx.c:99
@ OLEMISC_RECOMPOSEONRESIZE
Definition: actctx.c:82
@ OLEMISC_CANTLINKINSIDE
Definition: actctx.c:86
static FILE * client
Definition: client.c:37
vector< Header * > headers
Definition: sdkparse.cpp:39
static void init_test(void)
Definition: shlexec.c:2649
TCHAR file_path[MAX_PATH]
Definition: sndrec32.cpp:57
Definition: dcommon.idl:28
Definition: scsiwmi.h:51
Definition: cache.c:41
Definition: dialog.c:52
Definition: fci.c:123
Definition: parser.c:49
Definition: name.c:39
Definition: send.c:48
Definition: ps.c:97
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
unsigned char * LPBYTE
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:626
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define OLE_E_NOCONNECTION
Definition: winerror.h:3729
#define E_NOINTERFACE
Definition: winerror.h:3479
#define ERROR_FILE_EXISTS
Definition: winerror.h:287
#define E_UNEXPECTED
Definition: winerror.h:3528
#define E_POINTER
Definition: winerror.h:3480
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define LOGPIXELSY
Definition: wingdi.h:719
#define LOGPIXELSX
Definition: wingdi.h:718
#define HKEY_CURRENT_USER
Definition: winreg.h:11
static int init
Definition: wintirpc.c:33
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
Definition: wsk.h:188