2 * Copyright 2005 Jacek Caban
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <wine/test.h>
36 DEFINE_SHLGUID(CGID_Undocumented, 0x000214D4L, 0, 0);
38 #define DEFINE_EXPECT(func) \
39 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
41 #define SET_EXPECT(func) \
42 expect_ ## func = TRUE
44 #define CHECK_EXPECT(func) \
46 ok(expect_ ##func, "unexpected call " #func "\n"); \
47 expect_ ## func = FALSE; \
48 called_ ## func = TRUE; \
51 #define CHECK_EXPECT2(func) \
53 ok(expect_ ##func, "unexpected call " #func "\n"); \
54 called_ ## func = TRUE; \
57 #define CHECK_CALLED(func) \
59 ok(called_ ## func, "expected " #func "\n"); \
60 expect_ ## func = called_ ## func = FALSE; \
63 static IOleDocumentView *view = NULL;
64 static HWND container_hwnd = NULL, hwnd = NULL, last_hwnd = NULL;
66 DEFINE_EXPECT(LockContainer);
67 DEFINE_EXPECT(SetActiveObject);
68 DEFINE_EXPECT(GetWindow);
69 DEFINE_EXPECT(CanInPlaceActivate);
70 DEFINE_EXPECT(OnInPlaceActivate);
71 DEFINE_EXPECT(OnUIActivate);
72 DEFINE_EXPECT(GetWindowContext);
73 DEFINE_EXPECT(OnUIDeactivate);
74 DEFINE_EXPECT(OnInPlaceDeactivate);
75 DEFINE_EXPECT(GetContainer);
76 DEFINE_EXPECT(ShowUI);
77 DEFINE_EXPECT(ActivateMe);
78 DEFINE_EXPECT(GetHostInfo);
79 DEFINE_EXPECT(HideUI);
80 DEFINE_EXPECT(GetOptionKeyPath);
81 DEFINE_EXPECT(GetOverrideKeyPath);
82 DEFINE_EXPECT(SetStatusText);
83 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
84 DEFINE_EXPECT(QueryStatus_OPEN);
85 DEFINE_EXPECT(QueryStatus_NEW);
86 DEFINE_EXPECT(Exec_SETPROGRESSMAX);
87 DEFINE_EXPECT(Exec_SETPROGRESSPOS);
88 DEFINE_EXPECT(Exec_HTTPEQUIV_DONE);
89 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE);
90 DEFINE_EXPECT(Exec_ShellDocView_37);
91 DEFINE_EXPECT(Exec_UPDATECOMMANDS);
92 DEFINE_EXPECT(Exec_SETTITLE);
93 DEFINE_EXPECT(Exec_HTTPEQUIV);
94 DEFINE_EXPECT(Exec_MSHTML_2315);
95 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
96 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
97 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
98 DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
99 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
100 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
101 DEFINE_EXPECT(GetDropTarget);
102 DEFINE_EXPECT(UpdateUI);
103 DEFINE_EXPECT(Navigate);
104 DEFINE_EXPECT(OnFrameWindowActivate);
106 static BOOL expect_LockContainer_fLock;
107 static BOOL expect_SetActiveObject_active;
108 static BOOL set_clientsite = FALSE, container_locked = FALSE;
116 static LPCOLESTR expect_status_text = NULL;
118 static HRESULT QueryInterface(REFIID riid, void **ppv);
120 static HRESULT WINAPI HlinkFrame_QueryInterface(IHlinkFrame *iface, REFIID riid, void **ppv)
122 ok(0, "unexpected call\n");
126 static ULONG WINAPI HlinkFrame_AddRef(IHlinkFrame *iface)
131 static ULONG WINAPI HlinkFrame_Release(IHlinkFrame *iface)
136 static HRESULT WINAPI HlinkFrame_SetBrowseContext(IHlinkFrame *iface,
137 IHlinkBrowseContext *pihlbc)
139 ok(0, "unexpected call\n");
143 static HRESULT WINAPI HlinkFrame_GetBrowseContext(IHlinkFrame *iface,
144 IHlinkBrowseContext **ppihlbc)
146 ok(0, "unexpected call\n");
150 static HRESULT WINAPI HlinkFrame_Navigate(IHlinkFrame *iface, DWORD grfHLNF, LPBC pbc,
151 IBindStatusCallback *pibsc, IHlink *pihlNavigate)
155 CHECK_EXPECT(Navigate);
157 ok(grfHLNF == 0, "grfHLNF=%ld, expected 0\n", grfHLNF);
158 ok(pbc != NULL, "pbc == NULL\n");
159 ok(pibsc != NULL, "pubsc == NULL\n");
160 ok(pihlNavigate != NULL, "puhlNavigate == NULL\n");
163 LPWSTR frame_name = (LPWSTR)0xdeadbeef;
164 LPWSTR location = (LPWSTR)0xdeadbeef;
166 IMoniker *mon = NULL;
167 DWORD site_data = 0xdeadbeef;
169 hres = IHlink_GetTargetFrameName(pihlNavigate, &frame_name);
170 ok(hres == S_FALSE, "GetTargetFrameName failed: %08lx\n", hres);
171 ok(frame_name == NULL, "frame_name = %p\n", frame_name);
173 hres = IHlink_GetMonikerReference(pihlNavigate, 1, &mon, &location);
174 ok(hres == S_OK, "GetMonikerReference failed: %08lx\n", hres);
175 ok(location == NULL, "location = %p\n", location);
176 ok(mon != NULL, "mon == NULL\n");
178 hres = IHlink_GetHlinkSite(pihlNavigate, &site, &site_data);
179 ok(hres == S_OK, "GetHlinkSite failed: %08lx\n", hres);
180 ok(site == NULL, "site = %p\n, expected NULL\n", site);
181 ok(site_data == 0xdeadbeef, "site_data = %lx\n", site_data);
187 static HRESULT WINAPI HlinkFrame_OnNavigate(IHlinkFrame *iface, DWORD grfHLNF,
188 IMoniker *pimkTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, DWORD dwreserved)
190 ok(0, "unexpected call\n");
194 static HRESULT WINAPI HlinkFrame_UpdateHlink(IHlinkFrame *iface, ULONG uHLID,
195 IMoniker *pimkTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName)
197 ok(0, "unexpected call\n");
201 static const IHlinkFrameVtbl HlinkFrameVtbl = {
202 HlinkFrame_QueryInterface,
205 HlinkFrame_SetBrowseContext,
206 HlinkFrame_GetBrowseContext,
208 HlinkFrame_OnNavigate,
209 HlinkFrame_UpdateHlink
212 static IHlinkFrame HlinkFrame = { &HlinkFrameVtbl };
214 static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
216 return QueryInterface(riid, ppv);
219 static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
224 static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
229 static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc,
230 LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut)
232 ok(0, "unexpected call\n");
236 static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags,
237 IEnumUnknown **ppenum)
239 ok(0, "unexpected call\n");
243 static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
245 CHECK_EXPECT(LockContainer);
246 ok(expect_LockContainer_fLock == fLock, "fLock=%x, expected %x\n", fLock, expect_LockContainer_fLock);
250 static const IOleContainerVtbl OleContainerVtbl = {
251 OleContainer_QueryInterface,
253 OleContainer_Release,
254 OleContainer_ParseDisplayName,
255 OleContainer_EnumObjects,
256 OleContainer_LockContainer
259 static IOleContainer OleContainer = { &OleContainerVtbl };
261 static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, void **ppv)
263 return QueryInterface(riid, ppv);
266 static ULONG WINAPI InPlaceFrame_AddRef(IOleInPlaceFrame *iface)
271 static ULONG WINAPI InPlaceFrame_Release(IOleInPlaceFrame *iface)
276 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
278 ok(0, "unexpected call\n");
282 static HRESULT WINAPI InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
284 ok(0, "unexpected call\n");
288 static HRESULT WINAPI InPlaceFrame_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
290 ok(0, "unexpected call\n");
294 static HRESULT WINAPI InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame *iface,
295 LPCBORDERWIDTHS pborderwidths)
297 ok(0, "unexpected call\n");
301 static HRESULT WINAPI InPlaceFrame_SetBorderSpace(IOleInPlaceFrame *iface,
302 LPCBORDERWIDTHS pborderwidths)
304 ok(0, "unexpected call\n");
308 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
309 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
311 static const WCHAR wszHTML_Document[] =
312 {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0};
314 CHECK_EXPECT2(SetActiveObject);
316 if(expect_SetActiveObject_active) {
317 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
318 if(pActiveObject && PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH)
319 ok(!lstrcmpW(wszHTML_Document, pszObjName), "pszObjName != \"HTML Document\"\n");
321 ok(pActiveObject == NULL, "pActiveObject=%p, expected NULL\n", pActiveObject);
322 ok(pszObjName == NULL, "pszObjName=%p, expected NULL\n", pszObjName);
328 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
329 LPOLEMENUGROUPWIDTHS lpMenuWidths)
331 ok(0, "unexpected call\n");
335 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
336 HOLEMENU holemenu, HWND hwndActiveObject)
338 ok(0, "unexpected call\n");
342 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
344 ok(0, "unexpected call\n");
348 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
350 CHECK_EXPECT2(SetStatusText);
351 if(!expect_status_text)
352 ok(pszStatusText == NULL, "pszStatusText=%p, expected NULL\n", pszStatusText);
356 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
358 ok(0, "unexpected call\n");
362 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
364 ok(0, "unexpected call\n");
368 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
369 InPlaceFrame_QueryInterface,
371 InPlaceFrame_Release,
372 InPlaceFrame_GetWindow,
373 InPlaceFrame_ContextSensitiveHelp,
374 InPlaceFrame_GetBorder,
375 InPlaceFrame_RequestBorderSpace,
376 InPlaceFrame_SetBorderSpace,
377 InPlaceFrame_SetActiveObject,
378 InPlaceFrame_InsertMenus,
379 InPlaceFrame_SetMenu,
380 InPlaceFrame_RemoveMenus,
381 InPlaceFrame_SetStatusText,
382 InPlaceFrame_EnableModeless,
383 InPlaceFrame_TranslateAccelerator
386 static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
388 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSite *iface, REFIID riid, void **ppv)
390 return QueryInterface(riid, ppv);
393 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface)
398 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSite *iface)
403 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd)
405 CHECK_EXPECT(GetWindow);
406 ok(phwnd != NULL, "phwnd = NULL\n");
407 *phwnd = container_hwnd;
411 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite *iface, BOOL fEnterMode)
413 ok(0, "unexpected call\n");
417 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSite *iface)
419 CHECK_EXPECT(CanInPlaceActivate);
423 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSite *iface)
425 CHECK_EXPECT(OnInPlaceActivate);
429 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSite *iface)
431 CHECK_EXPECT(OnUIActivate);
435 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface,
436 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
437 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
439 static const RECT rect = {0,0,500,500};
441 CHECK_EXPECT(GetWindowContext);
443 ok(ppFrame != NULL, "ppFrame = NULL\n");
445 *ppFrame = &InPlaceFrame;
446 ok(ppDoc != NULL, "ppDoc = NULL\n");
449 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
451 memcpy(lprcPosRect, &rect, sizeof(RECT));
452 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
454 memcpy(lprcClipRect, &rect, sizeof(RECT));
455 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
457 lpFrameInfo->cb = sizeof(*lpFrameInfo);
458 lpFrameInfo->fMDIApp = FALSE;
459 lpFrameInfo->hwndFrame = container_hwnd;
460 lpFrameInfo->haccel = NULL;
461 lpFrameInfo->cAccelEntries = 0;
467 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSite *iface, SIZE scrollExtant)
469 ok(0, "unexpected call\n");
473 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSite *iface, BOOL fUndoable)
475 CHECK_EXPECT(OnUIDeactivate);
476 ok(!fUndoable, "fUndoable = TRUE\n");
480 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite *iface)
482 CHECK_EXPECT(OnInPlaceDeactivate);
486 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSite *iface)
488 ok(0, "unexpected call\n");
492 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSite *iface)
494 ok(0, "unexpected call\n");
498 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSite *iface, LPCRECT lprcPosRect)
500 ok(0, "unexpected call\n");
504 static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = {
505 InPlaceSite_QueryInterface,
508 InPlaceSite_GetWindow,
509 InPlaceSite_ContextSensitiveHelp,
510 InPlaceSite_CanInPlaceActivate,
511 InPlaceSite_OnInPlaceActivate,
512 InPlaceSite_OnUIActivate,
513 InPlaceSite_GetWindowContext,
515 InPlaceSite_OnUIDeactivate,
516 InPlaceSite_OnInPlaceDeactivate,
517 InPlaceSite_DiscardUndoState,
518 InPlaceSite_DeactivateAndUndo,
519 InPlaceSite_OnPosRectChange
522 static IOleInPlaceSite InPlaceSite = { &InPlaceSiteVtbl };
524 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
526 return QueryInterface(riid, ppv);
529 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
534 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
539 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
541 ok(0, "unexpected call\n");
545 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAsign, DWORD dwWhichMoniker,
548 ok(0, "unexpected call\n");
552 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
554 CHECK_EXPECT(GetContainer);
555 ok(ppContainer != NULL, "ppContainer = NULL\n");
556 *ppContainer = &OleContainer;
560 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
562 ok(0, "unexpected call\n");
566 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
568 ok(0, "unexpected call\n");
572 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
574 ok(0, "unexpected call\n");
578 static const IOleClientSiteVtbl ClientSiteVtbl = {
579 ClientSite_QueryInterface,
582 ClientSite_SaveObject,
583 ClientSite_GetMoniker,
584 ClientSite_GetContainer,
585 ClientSite_ShowObject,
586 ClientSite_OnShowWindow,
587 ClientSite_RequestNewObjectLayout
590 static IOleClientSite ClientSite = { &ClientSiteVtbl };
592 static HRESULT WINAPI DocumentSite_QueryInterface(IOleDocumentSite *iface, REFIID riid, void **ppv)
594 return QueryInterface(riid, ppv);
597 static ULONG WINAPI DocumentSite_AddRef(IOleDocumentSite *iface)
602 static ULONG WINAPI DocumentSite_Release(IOleDocumentSite *iface)
607 static BOOL call_UIActivate = TRUE;
608 static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocumentView *pViewToActivate)
610 IOleDocument *document;
613 CHECK_EXPECT(ActivateMe);
614 ok(pViewToActivate != NULL, "pViewToActivate = NULL\n");
616 hres = IOleDocumentView_QueryInterface(pViewToActivate, &IID_IOleDocument, (void**)&document);
617 ok(hres == S_OK, "could not get IOleDocument: %08lx\n", hres);
619 if(SUCCEEDED(hres)) {
620 hres = IOleDocument_CreateView(document, &InPlaceSite, NULL, 0, &view);
621 ok(hres == S_OK, "CreateView failed: %08lx\n", hres);
623 if(SUCCEEDED(hres)) {
624 IOleInPlaceActiveObject *activeobj = NULL;
625 IOleInPlaceSite *inplacesite = NULL;
626 HWND tmp_hwnd = NULL;
627 static RECT rect = {0,0,400,500};
629 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
630 ok(hres == S_OK, "GetInPlaceSite failed: %08lx\n", hres);
631 ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
632 inplacesite, &InPlaceSite);
634 hres = IOleDocumentView_SetInPlaceSite(view, &InPlaceSite);
635 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
637 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
638 ok(hres == S_OK, "GetInPlaceSite failed: %08lx\n", hres);
639 ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
640 inplacesite, &InPlaceSite);
642 hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobj);
643 ok(hres == S_OK, "Could not get IOleInPlaceActiveObject: %08lx\n", hres);
646 IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
647 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
648 ok(hwnd == NULL, "hwnd=%p, expeted NULL\n", hwnd);
651 if(call_UIActivate) {
652 SET_EXPECT(CanInPlaceActivate);
653 SET_EXPECT(GetWindowContext);
654 SET_EXPECT(GetWindow);
655 SET_EXPECT(OnInPlaceActivate);
656 SET_EXPECT(SetStatusText);
657 SET_EXPECT(Exec_SETPROGRESSMAX);
658 SET_EXPECT(Exec_SETPROGRESSPOS);
659 SET_EXPECT(OnUIActivate);
660 SET_EXPECT(SetActiveObject);
662 expect_SetActiveObject_active = TRUE;
663 expect_status_text = NULL;
665 hres = IOleDocumentView_UIActivate(view, TRUE);
668 trace("UIActivate failed: %08lx\n", hres);
671 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
673 CHECK_CALLED(CanInPlaceActivate);
674 CHECK_CALLED(GetWindowContext);
675 CHECK_CALLED(GetWindow);
676 CHECK_CALLED(OnInPlaceActivate);
677 CHECK_CALLED(SetStatusText);
678 CHECK_CALLED(Exec_SETPROGRESSMAX);
679 CHECK_CALLED(Exec_SETPROGRESSPOS);
680 CHECK_CALLED(OnUIActivate);
681 CHECK_CALLED(SetActiveObject);
682 CHECK_CALLED(ShowUI);
685 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
686 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
687 ok(hwnd != NULL, "hwnd == NULL\n");
689 ok(hwnd == last_hwnd, "hwnd != last_hwnd\n");
692 hres = IOleDocumentView_UIActivate(view, TRUE);
693 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
696 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &tmp_hwnd);
697 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
698 ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd);
702 hres = IOleDocumentView_SetRect(view, &rect);
703 ok(hres == S_OK, "SetRect failed: %08lx\n", hres);
705 if(call_UIActivate) {
706 hres = IOleDocumentView_Show(view, TRUE);
707 ok(hres == S_OK, "Show failed: %08lx\n", hres);
709 SET_EXPECT(CanInPlaceActivate);
710 SET_EXPECT(GetWindowContext);
711 SET_EXPECT(GetWindow);
712 SET_EXPECT(OnInPlaceActivate);
713 SET_EXPECT(SetStatusText);
714 SET_EXPECT(Exec_SETPROGRESSMAX);
715 SET_EXPECT(Exec_SETPROGRESSPOS);
716 SET_EXPECT(OnUIActivate);
717 expect_status_text = (load_state == LD_LOADED ? (LPCOLESTR)0xdeadbeef : NULL);
719 hres = IOleDocumentView_Show(view, TRUE);
720 ok(hres == S_OK, "Show failed: %08lx\n", hres);
722 CHECK_CALLED(CanInPlaceActivate);
723 CHECK_CALLED(GetWindowContext);
724 CHECK_CALLED(GetWindow);
725 CHECK_CALLED(OnInPlaceActivate);
726 CHECK_CALLED(SetStatusText);
727 CHECK_CALLED(Exec_SETPROGRESSMAX);
728 CHECK_CALLED(Exec_SETPROGRESSPOS);
731 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
732 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
733 ok(hwnd != NULL, "hwnd == NULL\n");
735 ok(hwnd == last_hwnd, "hwnd != last_hwnd\n");
740 IOleInPlaceActiveObject_Release(activeobj);
743 IOleDocument_Release(document);
749 static const IOleDocumentSiteVtbl DocumentSiteVtbl = {
750 DocumentSite_QueryInterface,
752 DocumentSite_Release,
753 DocumentSite_ActivateMe
756 static IOleDocumentSite DocumentSite = { &DocumentSiteVtbl };
758 static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
760 return QueryInterface(riid, ppv);
763 static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
768 static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
773 static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt,
774 IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
776 ok(0, "unexpected call\n");
780 static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
782 CHECK_EXPECT(GetHostInfo);
783 ok(pInfo != NULL, "pInfo=NULL\n");
785 ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO), "pInfo->cbSize=%lu\n", pInfo->cbSize);
786 ok(!pInfo->dwFlags, "pInfo->dwFlags=%08lx, expected 0\n", pInfo->dwFlags);
787 pInfo->dwFlags = DOCHOSTUIFLAG_DISABLE_HELP_MENU | DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
788 | DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY | DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
789 | DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION;
790 ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08lx, expected 0\n", pInfo->dwDoubleClick);
791 ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
792 ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
797 static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID,
798 IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
799 IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
801 CHECK_EXPECT(ShowUI);
803 ok(dwID == 0, "dwID=%ld, expected 0\n", dwID);
804 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
805 ok(pCommandTarget != NULL, "pCommandTarget = NULL\n");
806 ok(pFrame == &InPlaceFrame, "pFrame=%p, expected %p\n", pFrame, &InPlaceFrame);
807 ok(pDoc == NULL, "pDoc=%p, expected NULL\n", pDoc);
812 static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
814 CHECK_EXPECT(HideUI);
818 static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
820 CHECK_EXPECT(UpdateUI);
824 static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
826 ok(0, "unexpected call\n");
830 static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
832 ok(0, "unexpected call\n");
836 static BOOL expect_OnFrameWindowActivate_fActivate;
837 static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
839 CHECK_EXPECT2(OnFrameWindowActivate);
840 ok(fActivate == expect_OnFrameWindowActivate_fActivate, "fActivate=%x\n", fActivate);
844 static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder,
845 IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
847 ok(0, "unexpected call\n");
851 static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg,
852 const GUID *pguidCmdGroup, DWORD nCmdID)
854 ok(0, "unexpected call\n");
858 static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface,
859 LPOLESTR *pchKey, DWORD dw)
861 CHECK_EXPECT(GetOptionKeyPath);
862 ok(pchKey != NULL, "pchKey = NULL\n");
863 ok(!dw, "dw=%ld, expected 0\n", dw);
865 ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey);
869 static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
870 IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
872 CHECK_EXPECT(GetDropTarget);
877 static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
879 ok(0, "unexpected call\n");
883 static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
884 OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
886 ok(0, "unexpected call\n");
890 static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
891 IDataObject **ppPORet)
893 ok(0, "unexpected call\n");
897 static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface,
898 LPOLESTR *pchKey, DWORD dw)
900 CHECK_EXPECT(GetOverrideKeyPath);
901 ok(pchKey != NULL, "pchKey = NULL\n");
903 ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey);
904 ok(!dw, "dw=%ld, xepected 0\n", dw);
908 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = {
909 DocHostUIHandler_QueryInterface,
910 DocHostUIHandler_AddRef,
911 DocHostUIHandler_Release,
912 DocHostUIHandler_ShowContextMenu,
913 DocHostUIHandler_GetHostInfo,
914 DocHostUIHandler_ShowUI,
915 DocHostUIHandler_HideUI,
916 DocHostUIHandler_UpdateUI,
917 DocHostUIHandler_EnableModeless,
918 DocHostUIHandler_OnDocWindowActivate,
919 DocHostUIHandler_OnFrameWindowActivate,
920 DocHostUIHandler_ResizeBorder,
921 DocHostUIHandler_TranslateAccelerator,
922 DocHostUIHandler_GetOptionKeyPath,
923 DocHostUIHandler_GetDropTarget,
924 DocHostUIHandler_GetExternal,
925 DocHostUIHandler_TranslateUrl,
926 DocHostUIHandler_FilterDataObject,
927 DocHostUIHandler_GetOverrideKeyPath
930 static IDocHostUIHandler2 DocHostUIHandler = { &DocHostUIHandlerVtbl };
932 static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface,
933 REFIID riid, void **ppv)
935 return QueryInterface(riid, ppv);
938 static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
943 static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
948 static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
949 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
951 ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n");
952 ok(cCmds == 1, "cCmds=%ld, expected 1\n", cCmds);
953 ok(!pCmdText, "pCmdText != NULL\n");
955 switch(prgCmds[0].cmdID) {
956 case OLECMDID_SETPROGRESSTEXT:
957 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
958 prgCmds[0].cmdf = OLECMDF_ENABLED;
961 CHECK_EXPECT(QueryStatus_OPEN);
965 CHECK_EXPECT(QueryStatus_NEW);
969 ok(0, "unexpected command %ld\n", prgCmds[0].cmdID);
975 static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
976 DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
980 case OLECMDID_SETPROGRESSMAX:
981 CHECK_EXPECT2(Exec_SETPROGRESSMAX);
982 ok(pvaIn != NULL, "pvaIn == NULL\n");
984 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
985 if(load_state == LD_NO)
986 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
988 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
990 case OLECMDID_SETPROGRESSPOS:
991 CHECK_EXPECT2(Exec_SETPROGRESSPOS);
992 ok(pvaIn != NULL, "pvaIn == NULL\n");
994 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
995 if(load_state == LD_NO)
996 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
998 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
1000 case OLECMDID_HTTPEQUIV_DONE:
1001 CHECK_EXPECT(Exec_HTTPEQUIV_DONE);
1004 case OLECMDID_SETDOWNLOADSTATE:
1005 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE);
1008 case OLECMDID_UPDATECOMMANDS:
1009 CHECK_EXPECT(Exec_UPDATECOMMANDS);
1012 case OLECMDID_SETTITLE:
1013 CHECK_EXPECT2(Exec_SETTITLE);
1016 case OLECMDID_HTTPEQUIV:
1017 CHECK_EXPECT2(Exec_HTTPEQUIV);
1021 ok(0, "unexpected command %ld\n", nCmdID);
1026 if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) {
1029 CHECK_EXPECT(Exec_ShellDocView_37);
1030 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
1031 ok(pvaIn != NULL, "pvaIn == NULL\n");
1033 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
1034 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
1038 ok(0, "unexpected command %ld\n", nCmdID);
1043 if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
1046 CHECK_EXPECT(Exec_MSHTML_2315);
1050 ok(0, "unexpected command %ld\n", nCmdID);
1054 if(IsEqualGUID(&CGID_Undocumented, pguidCmdGroup))
1055 return E_FAIL; /* TODO */
1057 ok(0, "unexpected call\n");
1061 static IOleCommandTargetVtbl OleCommandTargetVtbl = {
1062 OleCommandTarget_QueryInterface,
1063 OleCommandTarget_AddRef,
1064 OleCommandTarget_Release,
1065 OleCommandTarget_QueryStatus,
1066 OleCommandTarget_Exec
1069 static IOleCommandTarget OleCommandTarget = { &OleCommandTargetVtbl };
1071 static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
1073 return QueryInterface(riid, ppv);
1076 static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
1081 static ULONG WINAPI Dispatch_Release(IDispatch *iface)
1086 static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
1088 ok(0, "unexpected call\n");
1092 static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
1093 ITypeInfo **ppTInfo)
1095 ok(0, "unexpected call\n");
1099 static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
1100 UINT cNames, LCID lcid, DISPID *rgDispId)
1102 ok(0, "unexpected call\n");
1106 static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
1107 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
1108 EXCEPINFO *pExcepInfo, UINT *puArgErr)
1110 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
1111 ok(pDispParams != NULL, "pDispParams == NULL\n");
1112 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
1113 ok(puArgErr != NULL, "puArgErr == NULL\n");
1114 ok(V_VT(pVarResult) == 0, "V_VT(pVarResult)=%d, expected 0\n", V_VT(pVarResult));
1115 ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
1117 switch(dispIdMember) {
1118 case DISPID_AMBIENT_USERMODE:
1119 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
1120 V_VT(pVarResult) = VT_BOOL;
1121 V_BOOL(pVarResult) = VARIANT_TRUE;
1123 case DISPID_AMBIENT_DLCONTROL:
1124 CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL);
1126 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
1127 CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1129 case DISPID_AMBIENT_SILENT:
1130 CHECK_EXPECT2(Invoke_AMBIENT_SILENT);
1131 V_VT(pVarResult) = VT_BOOL;
1132 V_BOOL(pVarResult) = VARIANT_FALSE;
1134 case DISPID_AMBIENT_USERAGENT:
1135 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
1137 case DISPID_AMBIENT_PALETTE:
1138 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
1142 ok(0, "unexpected dispid %ld\n", dispIdMember);
1146 static IDispatchVtbl DispatchVtbl = {
1147 Dispatch_QueryInterface,
1150 Dispatch_GetTypeInfoCount,
1151 Dispatch_GetTypeInfo,
1152 Dispatch_GetIDsOfNames,
1156 static IDispatch Dispatch = { &DispatchVtbl };
1158 static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface,
1159 REFIID riid, void **ppv)
1161 return QueryInterface(riid, ppv);
1164 static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
1169 static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
1174 static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService,
1175 REFIID riid, void **ppv)
1178 * Services used by HTMLDocument:
1181 * IInternetSecurityManager
1183 * {D5F78C80-5252-11CF-90FA-00AA0042106E}
1186 * {3050F312-98B5-11CF-BB82-00AA00BDCE0B}
1187 * {53A2D5B1-D2FC-11D0-84E0-006097C9987D}
1188 * {AD7F6C62-F6BD-11D2-959B-006097C553C8}
1190 * {6D12FE80-7911-11CF-9534-0000C05BAE0B}
1191 * IElementBehaviorFactory
1192 * {3050F429-98B5-11CF-BB82-00AA00BDCE0B}
1202 if(IsEqualGUID(&IID_IHlinkFrame, guidService)) {
1203 ok(IsEqualGUID(&IID_IHlinkFrame, riid), "unexpected riid\n");
1208 return E_NOINTERFACE;
1211 static const IServiceProviderVtbl ServiceProviderVtbl = {
1212 ServiceProvider_QueryInterface,
1213 ServiceProvider_AddRef,
1214 ServiceProvider_Release,
1215 ServiceProvider_QueryService
1218 static IServiceProvider ServiceProvider = { &ServiceProviderVtbl };
1220 static HRESULT QueryInterface(REFIID riid, void **ppv)
1224 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IOleClientSite, riid))
1226 else if(IsEqualGUID(&IID_IOleDocumentSite, riid))
1227 *ppv = &DocumentSite;
1228 else if(IsEqualGUID(&IID_IDocHostUIHandler, riid) || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
1229 *ppv = &DocHostUIHandler;
1230 else if(IsEqualGUID(&IID_IOleContainer, riid))
1231 *ppv = &OleContainer;
1232 else if(IsEqualGUID(&IID_IOleWindow, riid) || IsEqualGUID(&IID_IOleInPlaceSite, riid))
1233 *ppv = &InPlaceSite;
1234 else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid) || IsEqualGUID(&IID_IOleInPlaceFrame, riid))
1235 *ppv = &InPlaceFrame;
1236 else if(IsEqualGUID(&IID_IOleCommandTarget , riid))
1237 *ppv = &OleCommandTarget;
1238 else if(IsEqualGUID(&IID_IDispatch, riid))
1240 else if(IsEqualGUID(&IID_IServiceProvider, riid))
1241 *ppv = &ServiceProvider;
1245 * {D48A6EC6-6A4A-11CF-94A7-444553540000}
1246 * {7BB0B520-B1A7-11D2-BB23-00C04F79ABCD}
1247 * {000670BA-0000-0000-C000-000000000046}
1252 return E_NOINTERFACE;
1255 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
1257 return DefWindowProc(hwnd, msg, wParam, lParam);
1260 static void test_ConnectionPoint(IConnectionPointContainer *container, REFIID riid)
1262 IConnectionPointContainer *tmp_container = NULL;
1263 IConnectionPoint *cp;
1267 hres = IConnectionPointContainer_FindConnectionPoint(container, riid, &cp);
1268 ok(hres == S_OK, "FindConnectionPoint failed: %08lx\n", hres);
1272 hres = IConnectionPoint_GetConnectionInterface(cp, &iid);
1273 ok(hres == S_OK, "GetConnectionInterface failed: %08lx\n", hres);
1274 ok(IsEqualGUID(riid, &iid), "wrong iid\n");
1276 hres = IConnectionPoint_GetConnectionInterface(cp, NULL);
1277 ok(hres == E_POINTER, "GetConnectionInterface failed: %08lx, expected E_POINTER\n", hres);
1279 hres = IConnectionPoint_GetConnectionPointContainer(cp, &tmp_container);
1280 ok(hres == S_OK, "GetConnectionPointContainer failed: %08lx\n", hres);
1281 ok(tmp_container == container, "container != tmp_container\n");
1283 IConnectionPointContainer_Release(tmp_container);
1285 hres = IConnectionPoint_GetConnectionPointContainer(cp, NULL);
1286 ok(hres == E_POINTER, "GetConnectionPointContainer failed: %08lx, expected E_POINTER\n", hres);
1288 IConnectionPoint_Release(cp);
1291 static void test_ConnectionPointContainer(IUnknown *unk)
1293 IConnectionPointContainer *container;
1296 hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container);
1297 ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08lx\n", hres);
1301 test_ConnectionPoint(container, &IID_IPropertyNotifySink);
1302 test_ConnectionPoint(container, &DIID_HTMLDocumentEvents);
1303 test_ConnectionPoint(container, &DIID_HTMLDocumentEvents2);
1305 IConnectionPointContainer_Release(container);
1308 static void test_Load(IPersistMoniker *persist)
1314 static const WCHAR wszWineHQ[] =
1315 {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/',0};
1317 hres = CreateURLMoniker(NULL, wszWineHQ, &mon);
1318 ok(hres == S_OK, "CreateURLMoniker failed: %08lx\n", hres);
1322 CreateBindCtx(0, &bind);
1323 IBindCtx_RegisterObjectParam(bind, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM,
1324 (IUnknown*)&ClientSite);
1326 SET_EXPECT(GetHostInfo);
1327 SET_EXPECT(GetOptionKeyPath);
1328 SET_EXPECT(GetOverrideKeyPath);
1329 SET_EXPECT(GetWindow);
1330 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
1331 SET_EXPECT(Exec_SETPROGRESSMAX);
1332 SET_EXPECT(Exec_SETPROGRESSPOS);
1333 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1334 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1335 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1336 SET_EXPECT(Invoke_AMBIENT_SILENT);
1337 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1338 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1339 SET_EXPECT(GetContainer);
1340 SET_EXPECT(LockContainer);
1341 SET_EXPECT(Exec_ShellDocView_37);
1342 expect_LockContainer_fLock = TRUE;
1344 hres = IPersistMoniker_Load(persist, FALSE, mon, bind, 0x12);
1346 ok(hres == S_OK, "Load failed: %08lx\n", hres);
1349 CHECK_CALLED(GetHostInfo);
1350 CHECK_CALLED(GetOptionKeyPath);
1351 CHECK_CALLED(GetOverrideKeyPath);
1352 CHECK_CALLED(GetWindow);
1353 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
1354 CHECK_CALLED(Exec_SETPROGRESSMAX);
1355 CHECK_CALLED(Exec_SETPROGRESSPOS);
1356 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1357 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1358 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1359 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1360 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1361 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1362 CHECK_CALLED(GetContainer);
1363 CHECK_CALLED(LockContainer);
1364 CHECK_CALLED(Exec_ShellDocView_37);
1366 set_clientsite = container_locked = TRUE;
1368 IBindCtx_Release(bind);
1369 IMoniker_Release(mon);
1372 #ifdef DOWNLOAD_TEST
1374 static void test_download(void)
1378 load_state = LD_LOADING;
1380 SET_EXPECT(Exec_SETDOWNLOADSTATE);
1381 SET_EXPECT(GetDropTarget);
1382 SET_EXPECT(SetStatusText);
1383 SET_EXPECT(UpdateUI);
1384 SET_EXPECT(Exec_UPDATECOMMANDS);
1385 SET_EXPECT(Exec_SETTITLE);
1386 SET_EXPECT(Exec_HTTPEQUIV);
1387 SET_EXPECT(Exec_SETPROGRESSMAX);
1388 SET_EXPECT(Exec_SETPROGRESSPOS);
1389 SET_EXPECT(Exec_MSHTML_2315);
1390 SET_EXPECT(Exec_HTTPEQUIV_DONE);
1391 expect_status_text = (LPCOLESTR)0xdeadbeef; /* TODO */
1393 while(!called_Exec_HTTPEQUIV_DONE && GetMessage(&msg, NULL, 0, 0)) {
1394 TranslateMessage(&msg);
1395 DispatchMessage(&msg);
1398 CHECK_CALLED(Exec_SETDOWNLOADSTATE);
1399 CHECK_CALLED(GetDropTarget);
1400 CHECK_CALLED(SetStatusText);
1401 CHECK_CALLED(UpdateUI);
1402 CHECK_CALLED(Exec_UPDATECOMMANDS);
1403 CHECK_CALLED(Exec_SETTITLE);
1404 CHECK_CALLED(Exec_HTTPEQUIV);
1405 CHECK_CALLED(Exec_SETPROGRESSMAX);
1406 CHECK_CALLED(Exec_SETPROGRESSPOS);
1407 CHECK_CALLED(Exec_MSHTML_2315);
1408 CHECK_CALLED(Exec_HTTPEQUIV_DONE);
1410 load_state = LD_LOADED;
1415 static void test_Persist(IUnknown *unk)
1417 IPersistMoniker *persist_mon;
1418 IPersistFile *persist_file;
1422 hres = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&persist_file);
1423 ok(hres == S_OK, "QueryInterface(IID_IPersist) failed: %08lx\n", hres);
1424 if(SUCCEEDED(hres)) {
1425 hres = IPersist_GetClassID(persist_file, NULL);
1426 ok(hres == E_INVALIDARG, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1428 hres = IPersist_GetClassID(persist_file, &guid);
1429 ok(hres == S_OK, "GetClassID failed: %08lx\n", hres);
1430 ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n");
1432 IPersist_Release(persist_file);
1435 hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&persist_mon);
1436 ok(hres == S_OK, "QueryInterface(IID_IPersistMoniker) failed: %08lx\n", hres);
1437 if(SUCCEEDED(hres)) {
1438 hres = IPersistMoniker_GetClassID(persist_mon, NULL);
1439 ok(hres == E_INVALIDARG, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1441 hres = IPersistMoniker_GetClassID(persist_mon, &guid);
1442 ok(hres == S_OK, "GetClassID failed: %08lx\n", hres);
1443 ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n");
1445 if(load_state == LD_DOLOAD)
1446 test_Load(persist_mon);
1448 IPersistMoniker_Release(persist_mon);
1452 static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
1454 OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
1455 OLECMDF_SUPPORTED, /* OLECMDID_NEW */
1456 OLECMDF_SUPPORTED, /* OLECMDID_SAVE */
1457 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SAVEAS */
1458 OLECMDF_SUPPORTED, /* OLECMDID_SAVECOPYAS */
1459 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINT */
1460 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINTPREVIEW */
1461 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PAGESETUP */
1462 OLECMDF_SUPPORTED, /* OLECMDID_SPELL */
1463 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PROPERTIES */
1464 OLECMDF_SUPPORTED, /* OLECMDID_CUT */
1465 OLECMDF_SUPPORTED, /* OLECMDID_COPY */
1466 OLECMDF_SUPPORTED, /* OLECMDID_PASTE */
1467 OLECMDF_SUPPORTED, /* OLECMDID_PASTESPECIAL */
1468 OLECMDF_SUPPORTED, /* OLECMDID_UNDO */
1469 OLECMDF_SUPPORTED, /* OLECMDID_REDO */
1470 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SELECTALL */
1471 OLECMDF_SUPPORTED, /* OLECMDID_CLEARSELECTION */
1472 OLECMDF_SUPPORTED, /* OLECMDID_ZOOM */
1473 OLECMDF_SUPPORTED, /* OLECMDID_GETZOOMRANGE */
1475 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_REFRESH */
1476 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_STOP */
1478 OLECMDF_SUPPORTED, /* OLECMDID_STOPDOWNLOAD */
1480 OLECMDF_SUPPORTED, /* OLECMDID_DELETE */
1482 OLECMDF_SUPPORTED, /* OLECMDID_ENABLE_INTERACTION */
1483 OLECMDF_SUPPORTED, /* OLECMDID_ONUNLOAD */
1485 OLECMDF_SUPPORTED, /* OLECMDID_SHOWPAGESETUP */
1486 OLECMDF_SUPPORTED, /* OLECMDID_SHOWPRINT */
1488 OLECMDF_SUPPORTED, /* OLECMDID_CLOSE */
1490 OLECMDF_SUPPORTED, /* OLECMDID_SETPRINTTEMPLATE */
1491 OLECMDF_SUPPORTED /* OLECMDID_GETPRINTTEMPLATE */
1494 static void test_OleCommandTarget(IUnknown *unk)
1496 IOleCommandTarget *cmdtrg;
1497 OLECMD cmds[OLECMDID_GETPRINTTEMPLATE];
1501 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1502 ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres);
1506 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1507 cmds[i].cmdID = i+1;
1508 cmds[i].cmdf = 0xf0f0;
1511 SET_EXPECT(QueryStatus_OPEN);
1512 SET_EXPECT(QueryStatus_NEW);
1513 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, sizeof(cmds)/sizeof(cmds[0]), cmds, NULL);
1514 ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres);
1515 CHECK_CALLED(QueryStatus_OPEN);
1516 CHECK_CALLED(QueryStatus_NEW);
1518 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1519 ok(cmds[i].cmdID == i+1, "cmds[%d].cmdID canged to %lx\n", i, cmds[i].cmdID);
1520 ok(cmds[i].cmdf == expect_cmds[i+1], "cmds[%d].cmdf=%lx, expected %x\n",
1521 i+1, cmds[i].cmdf, expect_cmds[i+1]);
1524 IOleCommandTarget_Release(cmdtrg);
1527 static void test_OleCommandTarget_fail(IUnknown *unk)
1529 IOleCommandTarget *cmdtrg;
1534 {OLECMDID_OPEN, 0xf0f0},
1535 {OLECMDID_GETPRINTTEMPLATE+1, 0xf0f0}
1538 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1539 ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres);
1543 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 0, NULL, NULL);
1544 ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres);
1546 SET_EXPECT(QueryStatus_OPEN);
1547 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmd, NULL);
1548 CHECK_CALLED(QueryStatus_OPEN);
1550 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1551 "QueryStatus failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1552 ok(cmd[1].cmdID == OLECMDID_GETPRINTTEMPLATE+1,
1553 "cmd[0].cmdID=%ld, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd[0].cmdID);
1554 ok(cmd[1].cmdf == 0, "cmd[0].cmdf=%lx, expected 0\n", cmd[0].cmdf);
1555 ok(cmd[0].cmdf == OLECMDF_SUPPORTED,
1556 "cmd[1].cmdf=%lx, expected OLECMDF_SUPPORTED\n", cmd[1].cmdf);
1558 hres = IOleCommandTarget_QueryStatus(cmdtrg, &IID_IHTMLDocument2, 2, cmd, NULL);
1559 ok(hres == OLECMDERR_E_UNKNOWNGROUP,
1560 "QueryStatus failed: %08lx, expected OLECMDERR_E_UNKNOWNGROUP\n", hres);
1562 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1563 if(!expect_cmds[i]) {
1564 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_UPDATECOMMANDS,
1565 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1566 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1567 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1571 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_GETPRINTTEMPLATE+1,
1572 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1573 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1574 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1576 IOleCommandTarget_Release(cmdtrg);
1579 static void test_exec_onunload(IUnknown *unk)
1581 IOleCommandTarget *cmdtrg;
1585 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1586 ok(hres == S_OK, "QueryInterface(IID_IOleCommandTarget) failed: %08lx\n", hres);
1590 memset(&var, 0x0a, sizeof(var));
1591 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_ONUNLOAD,
1592 OLECMDEXECOPT_DODEFAULT, NULL, &var);
1593 ok(hres == S_OK, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres);
1594 ok(V_VT(&var) == VT_BOOL, "V_VT(var)=%d, expected VT_BOOL\n", V_VT(&var));
1595 ok(V_BOOL(&var) == VARIANT_TRUE, "V_BOOL(var)=%x, expected VARIANT_TRUE\n", V_BOOL(&var));
1597 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_ONUNLOAD,
1598 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1599 ok(hres == S_OK, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres);
1601 IOleCommandTarget_Release(cmdtrg);
1604 static HWND create_container_window(void)
1606 static const WCHAR wszHTMLDocumentTest[] =
1607 {'H','T','M','L','D','o','c','u','m','e','n','t','T','e','s','t',0};
1608 static WNDCLASSEXW wndclass = {
1609 sizeof(WNDCLASSEXW),
1612 0, 0, NULL, NULL, NULL, NULL, NULL,
1613 wszHTMLDocumentTest,
1617 RegisterClassExW(&wndclass);
1618 return CreateWindowW(wszHTMLDocumentTest, wszHTMLDocumentTest,
1619 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
1620 CW_USEDEFAULT, NULL, NULL, NULL, NULL);
1623 static HRESULT test_DoVerb(IOleObject *oleobj)
1625 RECT rect = {0,0,500,500};
1628 if(!container_locked) {
1629 SET_EXPECT(GetContainer);
1630 SET_EXPECT(LockContainer);
1632 SET_EXPECT(ActivateMe);
1633 expect_LockContainer_fLock = TRUE;
1635 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect);
1638 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
1640 if(!container_locked) {
1641 CHECK_CALLED(GetContainer);
1642 CHECK_CALLED(LockContainer);
1643 container_locked = TRUE;
1645 CHECK_CALLED(ActivateMe);
1650 #define CLIENTSITE_EXPECTPATH 0x00000001
1651 #define CLIENTSITE_SETNULL 0x00000002
1652 #define CLIENTSITE_DONTSET 0x00000004
1654 static void test_ClientSite(IOleObject *oleobj, DWORD flags)
1656 IOleClientSite *clientsite;
1659 if(flags & CLIENTSITE_SETNULL) {
1660 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1661 ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite);
1663 hres = IOleObject_SetClientSite(oleobj, NULL);
1664 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1666 set_clientsite = FALSE;
1669 if(flags & CLIENTSITE_DONTSET)
1672 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1673 ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
1674 ok(clientsite == (set_clientsite ? &ClientSite : NULL), "GetClientSite() = %p, expected %p\n",
1675 clientsite, set_clientsite ? &ClientSite : NULL);
1677 if(!set_clientsite) {
1678 SET_EXPECT(GetHostInfo);
1679 if(flags & CLIENTSITE_EXPECTPATH) {
1680 SET_EXPECT(GetOptionKeyPath);
1681 SET_EXPECT(GetOverrideKeyPath);
1683 SET_EXPECT(GetWindow);
1684 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
1685 SET_EXPECT(Exec_SETPROGRESSMAX);
1686 SET_EXPECT(Exec_SETPROGRESSPOS);
1687 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1688 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1689 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1690 SET_EXPECT(Invoke_AMBIENT_SILENT);
1691 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1692 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1694 hres = IOleObject_SetClientSite(oleobj, &ClientSite);
1695 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1697 CHECK_CALLED(GetHostInfo);
1698 if(flags & CLIENTSITE_EXPECTPATH) {
1699 CHECK_CALLED(GetOptionKeyPath);
1700 CHECK_CALLED(GetOverrideKeyPath);
1702 CHECK_CALLED(GetWindow);
1703 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
1704 CHECK_CALLED(Exec_SETPROGRESSMAX);
1705 CHECK_CALLED(Exec_SETPROGRESSPOS);
1706 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1707 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1708 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1709 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1710 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1711 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1713 set_clientsite = TRUE;
1716 hres = IOleObject_SetClientSite(oleobj, &ClientSite);
1717 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1719 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1720 ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
1721 ok(clientsite == &ClientSite, "GetClientSite() = %p, expected %p\n", clientsite, &ClientSite);
1724 static void test_OnAmbientPropertyChange(IUnknown *unk)
1726 IOleControl *control = NULL;
1729 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1730 ok(hres == S_OK, "QueryInterface(IID_IOleControl failed: %08lx\n", hres);
1734 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1735 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_USERMODE);
1736 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1737 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1739 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1740 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_DLCONTROL);
1741 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1742 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1744 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1745 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1746 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
1747 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1748 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1749 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1751 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1752 SET_EXPECT(Invoke_AMBIENT_SILENT);
1753 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
1754 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1755 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1756 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1758 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1759 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_USERAGENT);
1760 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1761 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1763 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1764 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_PALETTE);
1765 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1766 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1768 IOleControl_Release(control);
1773 static void test_OnAmbientPropertyChange2(IUnknown *unk)
1775 IOleControl *control = NULL;
1778 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1779 ok(hres == S_OK, "QueryInterface(IID_IOleControl failed: %08lx\n", hres);
1783 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_PALETTE);
1784 ok(hres == S_OK, "OnAmbientPropertyChange failed: %08lx\n", hres);
1786 IOleControl_Release(control);
1789 static void test_Close(IUnknown *unk, BOOL set_client)
1791 IOleObject *oleobj = NULL;
1794 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1795 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
1799 SET_EXPECT(GetContainer);
1800 SET_EXPECT(LockContainer);
1801 expect_LockContainer_fLock = FALSE;
1802 hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE);
1803 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1804 CHECK_CALLED(GetContainer);
1805 CHECK_CALLED(LockContainer);
1806 container_locked = FALSE;
1809 test_ClientSite(oleobj, CLIENTSITE_SETNULL|CLIENTSITE_DONTSET);
1811 IOleObject_Release(oleobj);
1814 static void test_OnFrameWindowActivate(IUnknown *unk)
1816 IOleInPlaceActiveObject *inplaceact;
1819 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&inplaceact);
1820 ok(hres == S_OK, "QueryInterface(IID_IOleInPlaceActiveObject) failed: %08lx\n", hres);
1824 if(set_clientsite) {
1825 expect_OnFrameWindowActivate_fActivate = TRUE;
1826 SET_EXPECT(OnFrameWindowActivate);
1827 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, TRUE);
1828 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1829 CHECK_CALLED(OnFrameWindowActivate);
1831 SET_EXPECT(OnFrameWindowActivate);
1832 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, TRUE);
1833 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1834 CHECK_CALLED(OnFrameWindowActivate);
1836 expect_OnFrameWindowActivate_fActivate = FALSE;
1837 SET_EXPECT(OnFrameWindowActivate);
1838 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, FALSE);
1839 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1840 CHECK_CALLED(OnFrameWindowActivate);
1842 expect_OnFrameWindowActivate_fActivate = TRUE;
1843 SET_EXPECT(OnFrameWindowActivate);
1844 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, TRUE);
1845 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1846 CHECK_CALLED(OnFrameWindowActivate);
1848 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, FALSE);
1849 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1851 hres = IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact, TRUE);
1852 ok(hres == S_OK, "OnFrameWindowActivate failed: %08lx\n", hres);
1855 IOleInPlaceActiveObject_Release(inplaceact);
1858 static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call)
1860 IOleInPlaceObjectWindowless *windowlessobj = NULL;
1863 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObjectWindowless,
1864 (void**)&windowlessobj);
1865 ok(hres == S_OK, "QueryInterface(IID_IOleInPlaceObjectWindowless) failed: %08lx\n", hres);
1869 if(expect_call) SET_EXPECT(OnInPlaceDeactivate);
1870 hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj);
1871 ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres);
1872 if(expect_call) CHECK_CALLED(OnInPlaceDeactivate);
1874 IOleInPlaceObjectWindowless_Release(windowlessobj);
1877 static HRESULT test_Activate(IUnknown *unk, DWORD flags)
1879 IOleObject *oleobj = NULL;
1886 IOleDocumentView_Release(view);
1889 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1890 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
1894 hres = IOleObject_GetUserClassID(oleobj, NULL);
1895 ok(hres == E_INVALIDARG, "GetUserClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1897 hres = IOleObject_GetUserClassID(oleobj, &guid);
1898 ok(hres == S_OK, "GetUserClassID failed: %08lx\n", hres);
1899 ok(IsEqualGUID(&guid, &CLSID_HTMLDocument), "guid != CLSID_HTMLDocument\n");
1901 test_OnFrameWindowActivate(unk);
1903 test_ClientSite(oleobj, flags);
1904 test_InPlaceDeactivate(unk, FALSE);
1906 hres = test_DoVerb(oleobj);
1908 IOleObject_Release(oleobj);
1910 test_OnFrameWindowActivate(unk);
1915 static void test_Window(IUnknown *unk, BOOL expect_success)
1917 IOleInPlaceActiveObject *activeobject = NULL;
1921 hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobject);
1922 ok(hres == S_OK, "Could not get IOleInPlaceActiveObject interface: %08lx\n", hres);
1926 hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd);
1928 if(expect_success) {
1929 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
1930 ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd);
1932 ok(hres == E_FAIL, "GetWindow returned %08lx, expected E_FAIL\n", hres);
1933 ok(IsWindow(hwnd), "hwnd is destroyed\n");
1936 IOleInPlaceActiveObject_Release(activeobject);
1939 static void test_CloseView(void)
1941 IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00;
1947 hres = IOleDocumentView_Show(view, FALSE);
1948 ok(hres == S_OK, "Show failed: %08lx\n", hres);
1950 hres = IOleDocumentView_CloseView(view, 0);
1951 ok(hres == S_OK, "CloseView failed: %08lx\n", hres);
1953 hres = IOleDocumentView_SetInPlaceSite(view, NULL);
1954 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
1956 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
1957 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
1958 ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite);
1961 static void test_UIDeactivate(void)
1965 if(call_UIActivate) {
1966 SET_EXPECT(SetActiveObject);
1968 SET_EXPECT(OnUIDeactivate);
1971 expect_SetActiveObject_active = FALSE;
1972 hres = IOleDocumentView_UIActivate(view, FALSE);
1973 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
1975 if(call_UIActivate) {
1976 CHECK_CALLED(SetActiveObject);
1977 CHECK_CALLED(HideUI);
1978 CHECK_CALLED(OnUIDeactivate);
1982 static void test_Hide(void)
1989 hres = IOleDocumentView_Show(view, FALSE);
1990 ok(hres == S_OK, "Show failed: %08lx\n", hres);
1993 static HRESULT create_document(IUnknown **unk)
1995 HRESULT hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
1996 &IID_IUnknown, (void**)unk);
1997 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
2001 static void test_Navigate(IUnknown *unk)
2003 IHlinkTarget *hlink;
2006 hres = IUnknown_QueryInterface(unk, &IID_IHlinkTarget, (void**)&hlink);
2007 ok(hres == S_OK, "QueryInterface(IID_IHlinkTarget) failed: %08lx\n", hres);
2009 SET_EXPECT(ActivateMe);
2010 hres = IHlinkTarget_Navigate(hlink, 0, NULL);
2011 ok(hres == S_OK, "Navigate failed: %08lx\n", hres);
2012 CHECK_CALLED(ActivateMe);
2014 IHlinkTarget_Release(hlink);
2017 static void test_HTMLDocument(void)
2023 hwnd = last_hwnd = NULL;
2025 hres = create_document(&unk);
2029 test_ConnectionPointContainer(unk);
2031 if(load_state == LD_NO)
2032 test_OnAmbientPropertyChange2(unk);
2034 hres = test_Activate(unk, CLIENTSITE_EXPECTPATH);
2036 IUnknown_Release(unk);
2040 #ifdef DOWNLOAD_TEST
2041 if(load_state == LD_DOLOAD)
2045 test_OleCommandTarget_fail(unk);
2046 test_OleCommandTarget(unk);
2047 test_OnAmbientPropertyChange(unk);
2048 test_Window(unk, TRUE);
2049 test_UIDeactivate();
2050 test_OleCommandTarget(unk);
2051 test_Window(unk, TRUE);
2052 test_InPlaceDeactivate(unk, TRUE);
2054 /* Calling test_OleCommandTarget here couses Segmentation Fault with native
2055 * MSHTML. It doesn't with Wine. */
2057 test_Window(unk, FALSE);
2059 test_InPlaceDeactivate(unk, FALSE);
2061 test_Close(unk, FALSE);
2063 /* Activate HTMLDocument again */
2064 test_Activate(unk, CLIENTSITE_SETNULL);
2065 test_Window(unk, TRUE);
2066 test_OleCommandTarget(unk);
2067 test_UIDeactivate();
2068 test_InPlaceDeactivate(unk, TRUE);
2069 test_Close(unk, FALSE);
2071 /* Activate HTMLDocument again, this time without UIActivate */
2072 call_UIActivate = FALSE;
2073 test_Activate(unk, CLIENTSITE_SETNULL);
2074 test_Window(unk, TRUE);
2075 test_UIDeactivate();
2076 test_InPlaceDeactivate(unk, TRUE);
2079 test_Close(unk, TRUE);
2080 test_OnAmbientPropertyChange2(unk);
2083 IOleDocumentView_Release(view);
2086 ok(IsWindow(hwnd), "hwnd is destroyed\n");
2088 ref = IUnknown_Release(unk);
2089 ok(ref == 0, "ref=%ld, expected 0\n", ref);
2091 ok(!IsWindow(hwnd), "hwnd is not destroyed\n");
2095 static void test_HTMLDocument_hlink(void)
2101 hwnd = last_hwnd = NULL;
2103 hres = create_document(&unk);
2110 #ifdef DOWNLOAD_TEST
2114 test_exec_onunload(unk);
2115 test_Window(unk, TRUE);
2116 test_InPlaceDeactivate(unk, TRUE);
2117 test_Close(unk, FALSE);
2120 IOleDocumentView_Release(view);
2123 ref = IUnknown_Release(unk);
2124 ok(ref == 0, "ref=%ld, expected 0\n", ref);
2127 static void gecko_installer_workaround(BOOL disable)
2132 static BOOL has_url = FALSE;
2133 static char url[2048];
2135 if(!disable && !has_url)
2138 res = RegOpenKey(HKEY_CURRENT_USER, "Software\\Wine\\MSHTML", &hkey);
2139 if(res != ERROR_SUCCESS)
2143 DWORD type, size = sizeof(url);
2145 res = RegQueryValueEx(hkey, "GeckoUrl", NULL, &type, (PVOID)url, &size);
2146 if(res == ERROR_SUCCESS && type == REG_SZ)
2149 RegDeleteValue(hkey, "GeckoUrl");
2151 RegSetValueEx(hkey, "GeckoUrl", 0, REG_SZ, (PVOID)url, lstrlenA(url)+1);
2159 gecko_installer_workaround(TRUE);
2162 container_hwnd = create_container_window();
2165 test_HTMLDocument();
2166 load_state = LD_DOLOAD;
2167 test_HTMLDocument();
2168 load_state = LD_DOLOAD;
2169 test_HTMLDocument_hlink();
2171 DestroyWindow(container_hwnd);
2174 gecko_installer_workaround(FALSE);