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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <wine/test.h>
36 DEFINE_SHLGUID(CGID_Undocumented, 0x000214D4L, 0, 0);
37 DEFINE_GUID(CGID_MSHTML, 0xDE4BA900,0x59CA,0x11CF,0x95,0x92, 0x44,0x45,0x53,0x54,0x00,0x00);
39 #define DEFINE_EXPECT(func) \
40 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
42 #define SET_EXPECT(func) \
43 expect_ ## func = TRUE
45 #define CHECK_EXPECT(func) \
46 ok(expect_ ##func, "unexpected call\n"); \
47 expect_ ## func = FALSE; \
48 called_ ## func = TRUE
50 #define CHECK_EXPECT2(func) \
51 ok(expect_ ##func, "unexpected call\n"); \
52 called_ ## func = TRUE
54 #define CHECK_CALLED(func) \
55 ok(called_ ## func, "expected " #func "\n"); \
56 expect_ ## func = called_ ## func = FALSE
58 static IOleDocumentView *view = NULL;
59 static HWND container_hwnd = NULL, hwnd = NULL, last_hwnd = NULL;
61 DEFINE_EXPECT(LockContainer);
62 DEFINE_EXPECT(SetActiveObject);
63 DEFINE_EXPECT(GetWindow);
64 DEFINE_EXPECT(CanInPlaceActivate);
65 DEFINE_EXPECT(OnInPlaceActivate);
66 DEFINE_EXPECT(OnUIActivate);
67 DEFINE_EXPECT(GetWindowContext);
68 DEFINE_EXPECT(OnUIDeactivate);
69 DEFINE_EXPECT(OnInPlaceDeactivate);
70 DEFINE_EXPECT(GetContainer);
71 DEFINE_EXPECT(ShowUI);
72 DEFINE_EXPECT(ActivateMe);
73 DEFINE_EXPECT(GetHostInfo);
74 DEFINE_EXPECT(HideUI);
75 DEFINE_EXPECT(GetOptionKeyPath);
76 DEFINE_EXPECT(GetOverrideKeyPath);
77 DEFINE_EXPECT(SetStatusText);
78 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
79 DEFINE_EXPECT(QueryStatus_OPEN);
80 DEFINE_EXPECT(QueryStatus_NEW);
81 DEFINE_EXPECT(Exec_SETPROGRESSMAX);
82 DEFINE_EXPECT(Exec_SETPROGRESSPOS);
83 DEFINE_EXPECT(Exec_HTTPEQUIV_DONE);
84 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE);
85 DEFINE_EXPECT(Exec_ShellDocView_37);
86 DEFINE_EXPECT(Exec_UPDATECOMMANDS);
87 DEFINE_EXPECT(Exec_SETTITLE);
88 DEFINE_EXPECT(Exec_HTTPEQUIV);
89 DEFINE_EXPECT(Exec_MSHTML_2315);
90 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
91 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
92 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
93 DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
94 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
95 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
96 DEFINE_EXPECT(GetDropTarget);
97 DEFINE_EXPECT(UpdateUI);
99 static BOOL expect_LockContainer_fLock;
100 static BOOL expect_SetActiveObject_active;
101 static BOOL set_clientsite = FALSE, container_locked = FALSE;
109 static LPCOLESTR expect_status_text = NULL;
111 static HRESULT QueryInterface(REFIID riid, void **ppv);
113 static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
115 return QueryInterface(riid, ppv);
118 static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
123 static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
128 static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc,
129 LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut)
131 ok(0, "unexpected call\n");
135 static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags,
136 IEnumUnknown **ppenum)
138 ok(0, "unexpected call\n");
142 static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
144 CHECK_EXPECT(LockContainer);
145 ok(expect_LockContainer_fLock == fLock, "fLock=%x, expected %x\n", fLock, expect_LockContainer_fLock);
149 static const IOleContainerVtbl OleContainerVtbl = {
150 OleContainer_QueryInterface,
152 OleContainer_Release,
153 OleContainer_ParseDisplayName,
154 OleContainer_EnumObjects,
155 OleContainer_LockContainer
158 static IOleContainer OleContainer = { &OleContainerVtbl };
160 static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, void **ppv)
162 return QueryInterface(riid, ppv);
165 static ULONG WINAPI InPlaceFrame_AddRef(IOleInPlaceFrame *iface)
170 static ULONG WINAPI InPlaceFrame_Release(IOleInPlaceFrame *iface)
175 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
177 ok(0, "unexpected call\n");
181 static HRESULT WINAPI InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
183 ok(0, "unexpected call\n");
187 static HRESULT WINAPI InPlaceFrame_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
189 ok(0, "unexpected call\n");
193 static HRESULT WINAPI InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame *iface,
194 LPCBORDERWIDTHS pborderwidths)
196 ok(0, "unexpected call\n");
200 static HRESULT WINAPI InPlaceFrame_SetBorderSpace(IOleInPlaceFrame *iface,
201 LPCBORDERWIDTHS pborderwidths)
203 ok(0, "unexpected call\n");
207 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
208 IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
210 static const WCHAR wszHTML_Document[] =
211 {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0};
213 CHECK_EXPECT2(SetActiveObject);
215 if(expect_SetActiveObject_active) {
216 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
217 if(pActiveObject && PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH)
218 ok(!lstrcmpW(wszHTML_Document, pszObjName), "pszObjName != \"HTML Document\"\n");
220 ok(pActiveObject == NULL, "pActiveObject=%p, expected NULL\n", pActiveObject);
221 ok(pszObjName == NULL, "pszObjName=%p, expected NULL\n", pszObjName);
227 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
228 LPOLEMENUGROUPWIDTHS lpMenuWidths)
230 ok(0, "unexpected call\n");
234 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
235 HOLEMENU holemenu, HWND hwndActiveObject)
237 ok(0, "unexpected call\n");
241 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
243 ok(0, "unexpected call\n");
247 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
249 CHECK_EXPECT2(SetStatusText);
250 if(!expect_status_text)
251 ok(pszStatusText == NULL, "pszStatusText=%p, expected NULL\n", pszStatusText);
255 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
257 ok(0, "unexpected call\n");
261 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
263 ok(0, "unexpected call\n");
267 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
268 InPlaceFrame_QueryInterface,
270 InPlaceFrame_Release,
271 InPlaceFrame_GetWindow,
272 InPlaceFrame_ContextSensitiveHelp,
273 InPlaceFrame_GetBorder,
274 InPlaceFrame_RequestBorderSpace,
275 InPlaceFrame_SetBorderSpace,
276 InPlaceFrame_SetActiveObject,
277 InPlaceFrame_InsertMenus,
278 InPlaceFrame_SetMenu,
279 InPlaceFrame_RemoveMenus,
280 InPlaceFrame_SetStatusText,
281 InPlaceFrame_EnableModeless,
282 InPlaceFrame_TranslateAccelerator
285 static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
287 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSite *iface, REFIID riid, void **ppv)
289 return QueryInterface(riid, ppv);
292 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface)
297 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSite *iface)
302 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd)
304 CHECK_EXPECT(GetWindow);
305 ok(phwnd != NULL, "phwnd = NULL\n");
306 *phwnd = container_hwnd;
310 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite *iface, BOOL fEnterMode)
312 ok(0, "unexpected call\n");
316 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSite *iface)
318 CHECK_EXPECT(CanInPlaceActivate);
322 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSite *iface)
324 CHECK_EXPECT(OnInPlaceActivate);
328 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSite *iface)
330 CHECK_EXPECT(OnUIActivate);
334 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface,
335 IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
336 LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
338 static const RECT rect = {0,0,500,500};
340 CHECK_EXPECT(GetWindowContext);
342 ok(ppFrame != NULL, "ppFrame = NULL\n");
344 *ppFrame = &InPlaceFrame;
345 ok(ppDoc != NULL, "ppDoc = NULL\n");
348 ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
350 memcpy(lprcPosRect, &rect, sizeof(RECT));
351 ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
353 memcpy(lprcClipRect, &rect, sizeof(RECT));
354 ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
356 lpFrameInfo->cb = sizeof(*lpFrameInfo);
357 lpFrameInfo->fMDIApp = FALSE;
358 lpFrameInfo->hwndFrame = container_hwnd;
359 lpFrameInfo->haccel = NULL;
360 lpFrameInfo->cAccelEntries = 0;
366 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSite *iface, SIZE scrollExtant)
368 ok(0, "unexpected call\n");
372 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSite *iface, BOOL fUndoable)
374 CHECK_EXPECT(OnUIDeactivate);
375 ok(!fUndoable, "fUndoable = TRUE\n");
379 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite *iface)
381 CHECK_EXPECT(OnInPlaceDeactivate);
385 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSite *iface)
387 ok(0, "unexpected call\n");
391 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSite *iface)
393 ok(0, "unexpected call\n");
397 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSite *iface, LPCRECT lprcPosRect)
399 ok(0, "unexpected call\n");
403 static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = {
404 InPlaceSite_QueryInterface,
407 InPlaceSite_GetWindow,
408 InPlaceSite_ContextSensitiveHelp,
409 InPlaceSite_CanInPlaceActivate,
410 InPlaceSite_OnInPlaceActivate,
411 InPlaceSite_OnUIActivate,
412 InPlaceSite_GetWindowContext,
414 InPlaceSite_OnUIDeactivate,
415 InPlaceSite_OnInPlaceDeactivate,
416 InPlaceSite_DiscardUndoState,
417 InPlaceSite_DeactivateAndUndo,
418 InPlaceSite_OnPosRectChange
421 static IOleInPlaceSite InPlaceSite = { &InPlaceSiteVtbl };
423 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
425 return QueryInterface(riid, ppv);
428 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
433 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
438 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
440 ok(0, "unexpected call\n");
444 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAsign, DWORD dwWhichMoniker,
447 ok(0, "unexpected call\n");
451 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
453 CHECK_EXPECT(GetContainer);
454 ok(ppContainer != NULL, "ppContainer = NULL\n");
455 *ppContainer = &OleContainer;
459 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
461 ok(0, "unexpected call\n");
465 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
467 ok(0, "unexpected call\n");
471 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
473 ok(0, "unexpected call\n");
477 static const IOleClientSiteVtbl ClientSiteVtbl = {
478 ClientSite_QueryInterface,
481 ClientSite_SaveObject,
482 ClientSite_GetMoniker,
483 ClientSite_GetContainer,
484 ClientSite_ShowObject,
485 ClientSite_OnShowWindow,
486 ClientSite_RequestNewObjectLayout
489 static IOleClientSite ClientSite = { &ClientSiteVtbl };
491 static HRESULT WINAPI DocumentSite_QueryInterface(IOleDocumentSite *iface, REFIID riid, void **ppv)
493 return QueryInterface(riid, ppv);
496 static ULONG WINAPI DocumentSite_AddRef(IOleDocumentSite *iface)
501 static ULONG WINAPI DocumentSite_Release(IOleDocumentSite *iface)
506 static BOOL call_UIActivate = TRUE;
507 static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocumentView *pViewToActivate)
509 IOleDocument *document;
512 CHECK_EXPECT(ActivateMe);
513 ok(pViewToActivate != NULL, "pViewToActivate = NULL\n");
515 hres = IOleDocumentView_QueryInterface(pViewToActivate, &IID_IOleDocument, (void**)&document);
516 ok(hres == S_OK, "could not get IOleDocument: %08lx\n", hres);
518 if(SUCCEEDED(hres)) {
519 hres = IOleDocument_CreateView(document, &InPlaceSite, NULL, 0, &view);
520 ok(hres == S_OK, "CreateView failed: %08lx\n", hres);
522 if(SUCCEEDED(hres)) {
523 IOleInPlaceActiveObject *activeobj = NULL;
524 IOleInPlaceSite *inplacesite = NULL;
525 HWND tmp_hwnd = NULL;
526 static RECT rect = {0,0,400,500};
528 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
529 ok(hres == S_OK, "GetInPlaceSite failed: %08lx\n", hres);
530 ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
531 inplacesite, &InPlaceSite);
533 hres = IOleDocumentView_SetInPlaceSite(view, &InPlaceSite);
534 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
536 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
537 ok(hres == S_OK, "GetInPlaceSite failed: %08lx\n", hres);
538 ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n",
539 inplacesite, &InPlaceSite);
541 hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobj);
542 ok(hres == S_OK, "Could not get IOleInPlaceActiveObject: %08lx\n", hres);
545 IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
546 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
547 ok(hwnd == NULL, "hwnd=%p, expeted NULL\n", hwnd);
550 if(call_UIActivate) {
551 SET_EXPECT(CanInPlaceActivate);
552 SET_EXPECT(GetWindowContext);
553 SET_EXPECT(GetWindow);
554 SET_EXPECT(OnInPlaceActivate);
555 SET_EXPECT(SetStatusText);
556 SET_EXPECT(Exec_SETPROGRESSMAX);
557 SET_EXPECT(Exec_SETPROGRESSPOS);
558 SET_EXPECT(OnUIActivate);
559 SET_EXPECT(SetActiveObject);
561 expect_SetActiveObject_active = TRUE;
562 expect_status_text = NULL;
564 hres = IOleDocumentView_UIActivate(view, TRUE);
567 trace("UIActivate failed: %08lx\n", hres);
570 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
572 CHECK_CALLED(CanInPlaceActivate);
573 CHECK_CALLED(GetWindowContext);
574 CHECK_CALLED(GetWindow);
575 CHECK_CALLED(OnInPlaceActivate);
576 CHECK_CALLED(SetStatusText);
577 CHECK_CALLED(Exec_SETPROGRESSMAX);
578 CHECK_CALLED(Exec_SETPROGRESSPOS);
579 CHECK_CALLED(OnUIActivate);
580 CHECK_CALLED(SetActiveObject);
581 CHECK_CALLED(ShowUI);
584 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
585 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
586 ok(hwnd != NULL, "hwnd == NULL\n");
588 ok(hwnd == last_hwnd, "hwnd != last_hwnd\n");
591 hres = IOleDocumentView_UIActivate(view, TRUE);
592 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
595 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &tmp_hwnd);
596 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
597 ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd);
601 hres = IOleDocumentView_SetRect(view, &rect);
602 ok(hres == S_OK, "SetRect failed: %08lx\n", hres);
604 if(call_UIActivate) {
605 hres = IOleDocumentView_Show(view, TRUE);
606 ok(hres == S_OK, "Show failed: %08lx\n", hres);
608 SET_EXPECT(CanInPlaceActivate);
609 SET_EXPECT(GetWindowContext);
610 SET_EXPECT(GetWindow);
611 SET_EXPECT(OnInPlaceActivate);
612 SET_EXPECT(SetStatusText);
613 SET_EXPECT(Exec_SETPROGRESSMAX);
614 SET_EXPECT(Exec_SETPROGRESSPOS);
615 SET_EXPECT(OnUIActivate);
616 expect_status_text = (load_state == LD_LOADED ? (LPCOLESTR)0xdeadbeef : NULL);
618 hres = IOleDocumentView_Show(view, TRUE);
619 ok(hres == S_OK, "Show failed: %08lx\n", hres);
621 CHECK_CALLED(CanInPlaceActivate);
622 CHECK_CALLED(GetWindowContext);
623 CHECK_CALLED(GetWindow);
624 CHECK_CALLED(OnInPlaceActivate);
625 CHECK_CALLED(SetStatusText);
626 CHECK_CALLED(Exec_SETPROGRESSMAX);
627 CHECK_CALLED(Exec_SETPROGRESSPOS);
630 hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd);
631 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
632 ok(hwnd != NULL, "hwnd == NULL\n");
634 ok(hwnd == last_hwnd, "hwnd != last_hwnd\n");
639 IOleInPlaceActiveObject_Release(activeobj);
642 IOleDocument_Release(document);
648 static const IOleDocumentSiteVtbl DocumentSiteVtbl = {
649 DocumentSite_QueryInterface,
651 DocumentSite_Release,
652 DocumentSite_ActivateMe
655 static IOleDocumentSite DocumentSite = { &DocumentSiteVtbl };
657 static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
659 return QueryInterface(riid, ppv);
662 static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
667 static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
672 static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt,
673 IUnknown *pcmdtReserved, IDispatch *pdicpReserved)
675 ok(0, "unexpected call\n");
679 static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
681 CHECK_EXPECT(GetHostInfo);
682 ok(pInfo != NULL, "pInfo=NULL\n");
684 ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO), "pInfo->cbSize=%lu, expected %u\n",
685 pInfo->cbSize, sizeof(DOCHOSTUIINFO));
686 ok(!pInfo->dwFlags, "pInfo->dwFlags=%08lx, expected 0\n", pInfo->dwFlags);
687 pInfo->dwFlags = DOCHOSTUIFLAG_DISABLE_HELP_MENU | DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
688 | DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY | DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
689 | DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION;
690 ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08lx, expected 0\n", pInfo->dwDoubleClick);
691 ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
692 ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
697 static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID,
698 IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
699 IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
701 CHECK_EXPECT(ShowUI);
703 ok(dwID == 0, "dwID=%ld, expected 0\n", dwID);
704 ok(pActiveObject != NULL, "pActiveObject = NULL\n");
705 ok(pCommandTarget != NULL, "pCommandTarget = NULL\n");
706 ok(pFrame == &InPlaceFrame, "pFrame=%p, expected %p\n", pFrame, &InPlaceFrame);
707 ok(pDoc == NULL, "pDoc=%p, expected NULL\n", pDoc);
712 static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
714 CHECK_EXPECT(HideUI);
718 static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
720 CHECK_EXPECT(UpdateUI);
724 static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
726 ok(0, "unexpected call\n");
730 static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
732 ok(0, "unexpected call\n");
736 static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
738 ok(0, "unexpected call\n");
742 static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder,
743 IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
745 ok(0, "unexpected call\n");
749 static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg,
750 const GUID *pguidCmdGroup, DWORD nCmdID)
752 ok(0, "unexpected call\n");
756 static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface,
757 LPOLESTR *pchKey, DWORD dw)
759 CHECK_EXPECT(GetOptionKeyPath);
760 ok(pchKey != NULL, "pchKey = NULL\n");
761 ok(!dw, "dw=%ld, expected 0\n", dw);
763 ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey);
767 static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
768 IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
770 CHECK_EXPECT(GetDropTarget);
775 static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
777 ok(0, "unexpected call\n");
781 static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate,
782 OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
784 ok(0, "unexpected call\n");
788 static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO,
789 IDataObject **ppPORet)
791 ok(0, "unexpected call\n");
795 static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface,
796 LPOLESTR *pchKey, DWORD dw)
798 CHECK_EXPECT(GetOverrideKeyPath);
799 ok(pchKey != NULL, "pchKey = NULL\n");
801 ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey);
802 ok(!dw, "dw=%ld, xepected 0\n", dw);
806 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = {
807 DocHostUIHandler_QueryInterface,
808 DocHostUIHandler_AddRef,
809 DocHostUIHandler_Release,
810 DocHostUIHandler_ShowContextMenu,
811 DocHostUIHandler_GetHostInfo,
812 DocHostUIHandler_ShowUI,
813 DocHostUIHandler_HideUI,
814 DocHostUIHandler_UpdateUI,
815 DocHostUIHandler_EnableModeless,
816 DocHostUIHandler_OnDocWindowActivate,
817 DocHostUIHandler_OnFrameWindowActivate,
818 DocHostUIHandler_ResizeBorder,
819 DocHostUIHandler_TranslateAccelerator,
820 DocHostUIHandler_GetOptionKeyPath,
821 DocHostUIHandler_GetDropTarget,
822 DocHostUIHandler_GetExternal,
823 DocHostUIHandler_TranslateUrl,
824 DocHostUIHandler_FilterDataObject,
825 DocHostUIHandler_GetOverrideKeyPath
828 static IDocHostUIHandler2 DocHostUIHandler = { &DocHostUIHandlerVtbl };
830 static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface,
831 REFIID riid, void **ppv)
833 return QueryInterface(riid, ppv);
836 static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
841 static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
846 static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
847 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
849 ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n");
850 ok(cCmds == 1, "cCmds=%ld, expected 1\n", cCmds);
851 ok(!pCmdText, "pCmdText != NULL\n");
853 switch(prgCmds[0].cmdID) {
854 case OLECMDID_SETPROGRESSTEXT:
855 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
856 prgCmds[0].cmdf = OLECMDF_ENABLED;
859 CHECK_EXPECT(QueryStatus_OPEN);
863 CHECK_EXPECT(QueryStatus_NEW);
867 ok(0, "unexpected command %ld\n", prgCmds[0].cmdID);
873 static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
874 DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
878 case OLECMDID_SETPROGRESSMAX:
879 CHECK_EXPECT2(Exec_SETPROGRESSMAX);
880 ok(pvaIn != NULL, "pvaIn == NULL\n");
882 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
883 if(load_state == LD_NO)
884 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
886 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
888 case OLECMDID_SETPROGRESSPOS:
889 CHECK_EXPECT2(Exec_SETPROGRESSPOS);
890 ok(pvaIn != NULL, "pvaIn == NULL\n");
892 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
893 if(load_state == LD_NO)
894 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
896 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
898 case OLECMDID_HTTPEQUIV_DONE:
899 CHECK_EXPECT(Exec_HTTPEQUIV_DONE);
902 case OLECMDID_SETDOWNLOADSTATE:
903 CHECK_EXPECT2(Exec_SETDOWNLOADSTATE);
906 case OLECMDID_UPDATECOMMANDS:
907 CHECK_EXPECT(Exec_UPDATECOMMANDS);
910 case OLECMDID_SETTITLE:
911 CHECK_EXPECT2(Exec_SETTITLE);
914 case OLECMDID_HTTPEQUIV:
915 CHECK_EXPECT2(Exec_HTTPEQUIV);
919 ok(0, "unexpected command %ld\n", nCmdID);
924 if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) {
927 CHECK_EXPECT(Exec_ShellDocView_37);
928 ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
929 ok(pvaIn != NULL, "pvaIn == NULL\n");
931 ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
932 ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
936 ok(0, "unexpected command %ld\n", nCmdID);
941 if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
944 CHECK_EXPECT(Exec_MSHTML_2315);
948 ok(0, "unexpected command %ld\n", nCmdID);
952 if(IsEqualGUID(&CGID_Undocumented, pguidCmdGroup))
953 return E_FAIL; /* TODO */
955 ok(0, "unexpected call\n");
959 static IOleCommandTargetVtbl OleCommandTargetVtbl = {
960 OleCommandTarget_QueryInterface,
961 OleCommandTarget_AddRef,
962 OleCommandTarget_Release,
963 OleCommandTarget_QueryStatus,
964 OleCommandTarget_Exec
967 static IOleCommandTarget OleCommandTarget = { &OleCommandTargetVtbl };
969 static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
971 return QueryInterface(riid, ppv);
974 static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
979 static ULONG WINAPI Dispatch_Release(IDispatch *iface)
984 static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
986 ok(0, "unexpected call\n");
990 static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
993 ok(0, "unexpected call\n");
997 static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
998 UINT cNames, LCID lcid, DISPID *rgDispId)
1000 ok(0, "unexpected call\n");
1004 static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
1005 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
1006 EXCEPINFO *pExcepInfo, UINT *puArgErr)
1008 ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
1009 ok(pDispParams != NULL, "pDispParams == NULL\n");
1010 ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
1011 ok(puArgErr != NULL, "puArgErr == NULL\n");
1012 ok(V_VT(pVarResult) == 0, "V_VT(pVarResult)=%d, expected 0\n", V_VT(pVarResult));
1013 ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
1015 switch(dispIdMember) {
1016 case DISPID_AMBIENT_USERMODE:
1017 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
1018 V_VT(pVarResult) = VT_BOOL;
1019 V_BOOL(pVarResult) = VARIANT_TRUE;
1021 case DISPID_AMBIENT_DLCONTROL:
1022 CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL);
1024 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
1025 CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1027 case DISPID_AMBIENT_SILENT:
1028 CHECK_EXPECT2(Invoke_AMBIENT_SILENT);
1029 V_VT(pVarResult) = VT_BOOL;
1030 V_BOOL(pVarResult) = VARIANT_FALSE;
1032 case DISPID_AMBIENT_USERAGENT:
1033 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
1035 case DISPID_AMBIENT_PALETTE:
1036 CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
1040 ok(0, "unexpected dispid %ld\n", dispIdMember);
1044 static IDispatchVtbl DispatchVtbl = {
1045 Dispatch_QueryInterface,
1048 Dispatch_GetTypeInfoCount,
1049 Dispatch_GetTypeInfo,
1050 Dispatch_GetIDsOfNames,
1054 static IDispatch Dispatch = { &DispatchVtbl };
1056 static HRESULT QueryInterface(REFIID riid, void **ppv)
1060 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IOleClientSite, riid))
1062 else if(IsEqualGUID(&IID_IOleDocumentSite, riid))
1063 *ppv = &DocumentSite;
1064 else if(IsEqualGUID(&IID_IDocHostUIHandler, riid) || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
1065 *ppv = &DocHostUIHandler;
1066 else if(IsEqualGUID(&IID_IOleContainer, riid))
1067 *ppv = &OleContainer;
1068 else if(IsEqualGUID(&IID_IOleWindow, riid) || IsEqualGUID(&IID_IOleInPlaceSite, riid))
1069 *ppv = &InPlaceSite;
1070 else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid) || IsEqualGUID(&IID_IOleInPlaceFrame, riid))
1071 *ppv = &InPlaceFrame;
1072 else if(IsEqualGUID(&IID_IOleCommandTarget , riid))
1073 *ppv = &OleCommandTarget;
1074 else if(IsEqualGUID(&IID_IDispatch, riid))
1080 * {D48A6EC6-6A4A-11CF-94A7-444553540000}
1081 * {7BB0B520-B1A7-11D2-BB23-00C04F79ABCD}
1082 * {000670BA-0000-0000-C000-000000000046}
1087 return E_NOINTERFACE;
1090 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
1092 return DefWindowProc(hwnd, msg, wParam, lParam);
1095 static void test_Load(IPersistMoniker *persist)
1101 static WCHAR wszClientSiteParam[] = {'{','d','4','d','b','6','8','5','0','-',
1102 '5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a',
1103 '0','c','9','0','a','9','0','a','c','}',0};
1104 static const WCHAR wszWineHQ[] =
1105 {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/',0};
1107 hres = CreateURLMoniker(NULL, wszWineHQ, &mon);
1108 ok(hres == S_OK, "CreateURLMoniker failed: %08lx\n", hres);
1112 CreateBindCtx(0, &bind);
1113 IBindCtx_RegisterObjectParam(bind, wszClientSiteParam, (IUnknown*)&ClientSite);
1115 SET_EXPECT(GetHostInfo);
1116 SET_EXPECT(GetOptionKeyPath);
1117 SET_EXPECT(GetOverrideKeyPath);
1118 SET_EXPECT(GetWindow);
1119 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
1120 SET_EXPECT(Exec_SETPROGRESSMAX);
1121 SET_EXPECT(Exec_SETPROGRESSPOS);
1122 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1123 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1124 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1125 SET_EXPECT(Invoke_AMBIENT_SILENT);
1126 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1127 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1128 SET_EXPECT(GetContainer);
1129 SET_EXPECT(LockContainer);
1130 SET_EXPECT(Exec_ShellDocView_37);
1131 expect_LockContainer_fLock = TRUE;
1133 hres = IPersistMoniker_Load(persist, FALSE, mon, bind, 0x12);
1135 ok(hres == S_OK, "Load failed: %08lx\n", hres);
1138 CHECK_CALLED(GetHostInfo);
1139 CHECK_CALLED(GetOptionKeyPath);
1140 CHECK_CALLED(GetOverrideKeyPath);
1141 CHECK_CALLED(GetWindow);
1142 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
1143 CHECK_CALLED(Exec_SETPROGRESSMAX);
1144 CHECK_CALLED(Exec_SETPROGRESSPOS);
1145 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1146 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1147 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1148 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1149 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1150 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1151 CHECK_CALLED(GetContainer);
1152 CHECK_CALLED(LockContainer);
1153 CHECK_CALLED(Exec_ShellDocView_37);
1155 set_clientsite = container_locked = TRUE;
1157 IBindCtx_Release(bind);
1158 IMoniker_Release(mon);
1161 #ifdef DOWNLOAD_TEST
1163 static void test_download(void)
1167 load_state = LD_LOADING;
1169 SET_EXPECT(Exec_SETDOWNLOADSTATE);
1170 SET_EXPECT(GetDropTarget);
1171 SET_EXPECT(SetStatusText);
1172 SET_EXPECT(UpdateUI);
1173 SET_EXPECT(Exec_UPDATECOMMANDS);
1174 SET_EXPECT(Exec_SETTITLE);
1175 SET_EXPECT(Exec_HTTPEQUIV);
1176 SET_EXPECT(Exec_SETPROGRESSMAX);
1177 SET_EXPECT(Exec_SETPROGRESSPOS);
1178 SET_EXPECT(Exec_MSHTML_2315);
1179 SET_EXPECT(Exec_HTTPEQUIV_DONE);
1180 expect_status_text = (LPCOLESTR)0xdeadbeef; /* TODO */
1182 while(!called_Exec_HTTPEQUIV_DONE && GetMessage(&msg, NULL, 0, 0)) {
1183 TranslateMessage(&msg);
1184 DispatchMessage(&msg);
1187 CHECK_CALLED(Exec_SETDOWNLOADSTATE);
1188 CHECK_CALLED(GetDropTarget);
1189 CHECK_CALLED(SetStatusText);
1190 CHECK_CALLED(UpdateUI);
1191 CHECK_CALLED(Exec_UPDATECOMMANDS);
1192 CHECK_CALLED(Exec_SETTITLE);
1193 CHECK_CALLED(Exec_HTTPEQUIV);
1194 CHECK_CALLED(Exec_SETPROGRESSMAX);
1195 CHECK_CALLED(Exec_SETPROGRESSPOS);
1196 CHECK_CALLED(Exec_MSHTML_2315);
1197 CHECK_CALLED(Exec_HTTPEQUIV_DONE);
1199 load_state = LD_LOADED;
1204 static void test_Persist(IUnknown *unk)
1206 IPersistMoniker *persist_mon;
1207 IPersistFile *persist_file;
1211 hres = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&persist_file);
1212 ok(hres == S_OK, "QueryInterface(IID_IPersist) failed: %08lx\n", hres);
1213 if(SUCCEEDED(hres)) {
1214 hres = IPersist_GetClassID(persist_file, NULL);
1215 ok(hres == E_INVALIDARG, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1217 hres = IPersist_GetClassID(persist_file, &guid);
1218 ok(hres == S_OK, "GetClassID failed: %08lx\n", hres);
1219 ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n");
1221 IPersist_Release(persist_file);
1224 hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&persist_mon);
1225 ok(hres == S_OK, "QueryInterface(IID_IPersistMoniker) failed: %08lx\n", hres);
1226 if(SUCCEEDED(hres)) {
1227 hres = IPersistMoniker_GetClassID(persist_mon, NULL);
1228 ok(hres == E_INVALIDARG, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1230 hres = IPersistMoniker_GetClassID(persist_mon, &guid);
1231 ok(hres == S_OK, "GetClassID failed: %08lx\n", hres);
1232 ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n");
1234 if(load_state == LD_DOLOAD)
1235 test_Load(persist_mon);
1237 IPersistMoniker_Release(persist_mon);
1241 static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
1243 OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
1244 OLECMDF_SUPPORTED, /* OLECMDID_NEW */
1245 OLECMDF_SUPPORTED, /* OLECMDID_SAVE */
1246 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SAVEAS */
1247 OLECMDF_SUPPORTED, /* OLECMDID_SAVECOPYAS */
1248 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINT */
1249 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINTPREVIEW */
1250 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PAGESETUP */
1251 OLECMDF_SUPPORTED, /* OLECMDID_SPELL */
1252 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PROPERTIES */
1253 OLECMDF_SUPPORTED, /* OLECMDID_CUT */
1254 OLECMDF_SUPPORTED, /* OLECMDID_COPY */
1255 OLECMDF_SUPPORTED, /* OLECMDID_PASTE */
1256 OLECMDF_SUPPORTED, /* OLECMDID_PASTESPECIAL */
1257 OLECMDF_SUPPORTED, /* OLECMDID_UNDO */
1258 OLECMDF_SUPPORTED, /* OLECMDID_REDO */
1259 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SELECTALL */
1260 OLECMDF_SUPPORTED, /* OLECMDID_CLEARSELECTION */
1261 OLECMDF_SUPPORTED, /* OLECMDID_ZOOM */
1262 OLECMDF_SUPPORTED, /* OLECMDID_GETZOOMRANGE */
1264 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_REFRESH */
1265 OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_STOP */
1267 OLECMDF_SUPPORTED, /* OLECMDID_STOPDOWNLOAD */
1269 OLECMDF_SUPPORTED, /* OLECMDID_DELETE */
1271 OLECMDF_SUPPORTED, /* OLECMDID_ENABLE_INTERACTION */
1272 OLECMDF_SUPPORTED, /* OLECMDID_ONUNLOAD */
1274 OLECMDF_SUPPORTED, /* OLECMDID_SHOWPAGESETUP */
1275 OLECMDF_SUPPORTED, /* OLECMDID_SHOWPRINT */
1277 OLECMDF_SUPPORTED, /* OLECMDID_CLOSE */
1279 OLECMDF_SUPPORTED, /* OLECMDID_SETPRINTTEMPLATE */
1280 OLECMDF_SUPPORTED /* OLECMDID_GETPRINTTEMPLATE */
1283 static void test_OleCommandTarget(IUnknown *unk)
1285 IOleCommandTarget *cmdtrg;
1286 OLECMD cmds[OLECMDID_GETPRINTTEMPLATE];
1290 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1291 ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres);
1295 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1296 cmds[i].cmdID = i+1;
1297 cmds[i].cmdf = 0xf0f0;
1300 SET_EXPECT(QueryStatus_OPEN);
1301 SET_EXPECT(QueryStatus_NEW);
1302 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, sizeof(cmds)/sizeof(cmds[0]), cmds, NULL);
1303 ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres);
1304 CHECK_CALLED(QueryStatus_OPEN);
1305 CHECK_CALLED(QueryStatus_NEW);
1307 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1308 ok(cmds[i].cmdID == i+1, "cmds[%d].cmdID canged to %lx\n", i, cmds[i].cmdID);
1309 ok(cmds[i].cmdf == expect_cmds[i+1], "cmds[%d].cmdf=%lx, expected %x\n",
1310 i+1, cmds[i].cmdf, expect_cmds[i+1]);
1313 IOleCommandTarget_Release(cmdtrg);
1316 static void test_OleCommandTarget_fail(IUnknown *unk)
1318 IOleCommandTarget *cmdtrg;
1323 {OLECMDID_OPEN, 0xf0f0},
1324 {OLECMDID_GETPRINTTEMPLATE+1, 0xf0f0}
1327 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1328 ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres);
1332 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 0, NULL, NULL);
1333 ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres);
1335 SET_EXPECT(QueryStatus_OPEN);
1336 hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmd, NULL);
1337 CHECK_CALLED(QueryStatus_OPEN);
1339 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1340 "QueryStatus failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1341 ok(cmd[1].cmdID == OLECMDID_GETPRINTTEMPLATE+1,
1342 "cmd[0].cmdID=%ld, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd[0].cmdID);
1343 ok(cmd[1].cmdf == 0, "cmd[0].cmdf=%lx, expected 0\n", cmd[0].cmdf);
1344 ok(cmd[0].cmdf == OLECMDF_SUPPORTED,
1345 "cmd[1].cmdf=%lx, expected OLECMDF_SUPPORTED\n", cmd[1].cmdf);
1347 hres = IOleCommandTarget_QueryStatus(cmdtrg, &IID_IHTMLDocument2, 2, cmd, NULL);
1348 ok(hres == OLECMDERR_E_UNKNOWNGROUP,
1349 "QueryStatus failed: %08lx, expected OLECMDERR_E_UNKNOWNGROUP\n", hres);
1351 for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
1352 if(!expect_cmds[i]) {
1353 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_UPDATECOMMANDS,
1354 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1355 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1356 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1360 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_GETPRINTTEMPLATE+1,
1361 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1362 ok(hres == OLECMDERR_E_NOTSUPPORTED,
1363 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres);
1365 IOleCommandTarget_Release(cmdtrg);
1368 static void test_exec_onunload(IUnknown *unk)
1370 IOleCommandTarget *cmdtrg;
1374 hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
1375 ok(hres == S_OK, "QueryInterface(IID_IOleCommandTarget) failed: %08lx\n", hres);
1379 memset(&var, 0x0a, sizeof(var));
1380 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_ONUNLOAD,
1381 OLECMDEXECOPT_DODEFAULT, NULL, &var);
1382 ok(hres == S_OK, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres);
1383 ok(V_VT(&var) == VT_BOOL, "V_VT(var)=%d, expected VT_BOOL\n", V_VT(&var));
1384 ok(V_BOOL(&var) == VARIANT_TRUE, "V_BOOL(var)=%x, expected VARIANT_TRUE\n", V_BOOL(&var));
1386 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_ONUNLOAD,
1387 OLECMDEXECOPT_DODEFAULT, NULL, NULL);
1388 ok(hres == S_OK, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres);
1390 IOleCommandTarget_Release(cmdtrg);
1393 static HWND create_container_window(void)
1395 static const WCHAR wszHTMLDocumentTest[] =
1396 {'H','T','M','L','D','o','c','u','m','e','n','t','T','e','s','t',0};
1397 static WNDCLASSEXW wndclass = {
1398 sizeof(WNDCLASSEXW),
1401 0, 0, NULL, NULL, NULL, NULL, NULL,
1402 wszHTMLDocumentTest,
1406 RegisterClassExW(&wndclass);
1407 return CreateWindowW(wszHTMLDocumentTest, wszHTMLDocumentTest,
1408 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
1409 CW_USEDEFAULT, NULL, NULL, NULL, NULL);
1412 static HRESULT test_DoVerb(IOleObject *oleobj)
1414 RECT rect = {0,0,500,500};
1417 if(!container_locked) {
1418 SET_EXPECT(GetContainer);
1419 SET_EXPECT(LockContainer);
1421 SET_EXPECT(ActivateMe);
1422 expect_LockContainer_fLock = TRUE;
1424 hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect);
1427 ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
1429 if(!container_locked) {
1430 CHECK_CALLED(GetContainer);
1431 CHECK_CALLED(LockContainer);
1432 container_locked = TRUE;
1434 CHECK_CALLED(ActivateMe);
1439 #define CLIENTSITE_EXPECTPATH 0x00000001
1440 #define CLIENTSITE_SETNULL 0x00000002
1441 #define CLIENTSITE_DONTSET 0x00000004
1443 static void test_ClientSite(IOleObject *oleobj, DWORD flags)
1445 IOleClientSite *clientsite;
1448 if(flags & CLIENTSITE_SETNULL) {
1449 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1450 ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite);
1452 hres = IOleObject_SetClientSite(oleobj, NULL);
1453 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1455 set_clientsite = FALSE;
1458 if(flags & CLIENTSITE_DONTSET)
1461 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1462 ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
1463 ok(clientsite == (set_clientsite ? &ClientSite : NULL), "GetClientSite() = %p, expected %p\n",
1464 clientsite, set_clientsite ? &ClientSite : NULL);
1466 if(!set_clientsite) {
1467 SET_EXPECT(GetHostInfo);
1468 if(flags & CLIENTSITE_EXPECTPATH) {
1469 SET_EXPECT(GetOptionKeyPath);
1470 SET_EXPECT(GetOverrideKeyPath);
1472 SET_EXPECT(GetWindow);
1473 SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
1474 SET_EXPECT(Exec_SETPROGRESSMAX);
1475 SET_EXPECT(Exec_SETPROGRESSPOS);
1476 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1477 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1478 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1479 SET_EXPECT(Invoke_AMBIENT_SILENT);
1480 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1481 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1483 hres = IOleObject_SetClientSite(oleobj, &ClientSite);
1484 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1486 CHECK_CALLED(GetHostInfo);
1487 if(flags & CLIENTSITE_EXPECTPATH) {
1488 CHECK_CALLED(GetOptionKeyPath);
1489 CHECK_CALLED(GetOverrideKeyPath);
1491 CHECK_CALLED(GetWindow);
1492 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
1493 CHECK_CALLED(Exec_SETPROGRESSMAX);
1494 CHECK_CALLED(Exec_SETPROGRESSPOS);
1495 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1496 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1497 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1498 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1499 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1500 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1502 set_clientsite = TRUE;
1505 hres = IOleObject_SetClientSite(oleobj, &ClientSite);
1506 ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
1508 hres = IOleObject_GetClientSite(oleobj, &clientsite);
1509 ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
1510 ok(clientsite == &ClientSite, "GetClientSite() = %p, expected %p\n", clientsite, &ClientSite);
1513 static void test_OnAmbientPropertyChange(IUnknown *unk)
1515 IOleControl *control = NULL;
1518 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1519 ok(hres == S_OK, "QueryInterface(IID_IOleControl failed: %08lx\n", hres);
1523 SET_EXPECT(Invoke_AMBIENT_USERMODE);
1524 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_USERMODE);
1525 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1526 CHECK_CALLED(Invoke_AMBIENT_USERMODE);
1528 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1529 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_DLCONTROL);
1530 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1531 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1533 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1534 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1535 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
1536 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1537 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1538 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
1540 SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
1541 SET_EXPECT(Invoke_AMBIENT_SILENT);
1542 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
1543 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1544 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
1545 CHECK_CALLED(Invoke_AMBIENT_SILENT);
1547 SET_EXPECT(Invoke_AMBIENT_USERAGENT);
1548 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_USERAGENT);
1549 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1550 CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
1552 SET_EXPECT(Invoke_AMBIENT_PALETTE);
1553 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_PALETTE);
1554 ok(hres == S_OK, "OnAmbientChange failed: %08lx\n", hres);
1555 CHECK_CALLED(Invoke_AMBIENT_PALETTE);
1557 IOleControl_Release(control);
1562 static void test_OnAmbientPropertyChange2(IUnknown *unk)
1564 IOleControl *control = NULL;
1567 hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
1568 ok(hres == S_OK, "QueryInterface(IID_IOleControl failed: %08lx\n", hres);
1572 hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_PALETTE);
1573 ok(hres == S_OK, "OnAmbientPropertyChange failed: %08lx\n", hres);
1575 IOleControl_Release(control);
1578 static void test_Close(IUnknown *unk, BOOL set_client)
1580 IOleObject *oleobj = NULL;
1583 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1584 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
1588 SET_EXPECT(GetContainer);
1589 SET_EXPECT(LockContainer);
1590 expect_LockContainer_fLock = FALSE;
1591 hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE);
1592 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1593 CHECK_CALLED(GetContainer);
1594 CHECK_CALLED(LockContainer);
1595 container_locked = FALSE;
1598 test_ClientSite(oleobj, CLIENTSITE_SETNULL|CLIENTSITE_DONTSET);
1600 IOleObject_Release(oleobj);
1603 static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call)
1605 IOleInPlaceObjectWindowless *windowlessobj = NULL;
1608 hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObjectWindowless,
1609 (void**)&windowlessobj);
1610 ok(hres == S_OK, "QueryInterface(IID_IOleInPlaceObjectWindowless) failed: %08lx\n", hres);
1614 if(expect_call) SET_EXPECT(OnInPlaceDeactivate);
1615 hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj);
1616 ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres);
1617 if(expect_call) CHECK_CALLED(OnInPlaceDeactivate);
1619 IOleInPlaceObjectWindowless_Release(windowlessobj);
1622 static HRESULT test_Activate(IUnknown *unk, DWORD flags)
1624 IOleObject *oleobj = NULL;
1631 IOleDocumentView_Release(view);
1634 hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
1635 ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres);
1639 hres = IOleObject_GetUserClassID(oleobj, NULL);
1640 ok(hres == E_INVALIDARG, "GetUserClassID returned: %08lx, expected E_INVALIDARG\n", hres);
1642 hres = IOleObject_GetUserClassID(oleobj, &guid);
1643 ok(hres == S_OK, "GetUserClassID failed: %08lx\n", hres);
1644 ok(IsEqualGUID(&guid, &CLSID_HTMLDocument), "guid != CLSID_HTMLDocument\n");
1646 test_ClientSite(oleobj, flags);
1647 test_InPlaceDeactivate(unk, FALSE);
1649 hres = test_DoVerb(oleobj);
1651 IOleObject_Release(oleobj);
1655 static void test_Window(IUnknown *unk, BOOL expect_success)
1657 IOleInPlaceActiveObject *activeobject = NULL;
1661 hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobject);
1662 ok(hres == S_OK, "Could not get IOleInPlaceActiveObject interface: %08lx\n", hres);
1666 hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd);
1668 if(expect_success) {
1669 ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
1670 ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd);
1672 ok(hres == E_FAIL, "GetWindow returned %08lx, expected E_FAIL\n", hres);
1673 ok(IsWindow(hwnd), "hwnd is destroyed\n");
1676 IOleInPlaceActiveObject_Release(activeobject);
1679 static void test_CloseView(void)
1681 IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00;
1687 hres = IOleDocumentView_Show(view, FALSE);
1688 ok(hres == S_OK, "Show failed: %08lx\n", hres);
1690 hres = IOleDocumentView_CloseView(view, 0);
1691 ok(hres == S_OK, "CloseView failed: %08lx\n", hres);
1693 hres = IOleDocumentView_SetInPlaceSite(view, NULL);
1694 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
1696 hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite);
1697 ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
1698 ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite);
1701 static void test_UIDeactivate(void)
1705 if(call_UIActivate) {
1706 SET_EXPECT(SetActiveObject);
1708 SET_EXPECT(OnUIDeactivate);
1711 expect_SetActiveObject_active = FALSE;
1712 hres = IOleDocumentView_UIActivate(view, FALSE);
1713 ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
1715 if(call_UIActivate) {
1716 CHECK_CALLED(SetActiveObject);
1717 CHECK_CALLED(HideUI);
1718 CHECK_CALLED(OnUIDeactivate);
1722 static void test_Hide(void)
1729 hres = IOleDocumentView_Show(view, FALSE);
1730 ok(hres == S_OK, "Show failed: %08lx\n", hres);
1733 static HRESULT create_document(IUnknown **unk)
1735 HRESULT hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
1736 &IID_IUnknown, (void**)unk);
1737 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
1741 static void test_Navigate(IUnknown *unk)
1743 IHlinkTarget *hlink;
1746 hres = IUnknown_QueryInterface(unk, &IID_IHlinkTarget, (void**)&hlink);
1747 ok(hres == S_OK, "QueryInterface(IID_IHlinkTarget) failed: %08lx\n", hres);
1749 SET_EXPECT(ActivateMe);
1750 hres = IHlinkTarget_Navigate(hlink, 0, NULL);
1751 ok(hres == S_OK, "Navigate failed: %08lx\n", hres);
1752 CHECK_CALLED(ActivateMe);
1754 IHlinkTarget_Release(hlink);
1757 static void test_HTMLDocument(void)
1763 hwnd = last_hwnd = NULL;
1765 hres = create_document(&unk);
1770 if(load_state == LD_NO)
1771 test_OnAmbientPropertyChange2(unk);
1773 hres = test_Activate(unk, CLIENTSITE_EXPECTPATH);
1775 IUnknown_Release(unk);
1779 #ifdef DOWNLOAD_TEST
1780 if(load_state == LD_DOLOAD)
1784 test_OleCommandTarget_fail(unk);
1785 test_OleCommandTarget(unk);
1786 test_OnAmbientPropertyChange(unk);
1787 test_Window(unk, TRUE);
1788 test_UIDeactivate();
1789 test_OleCommandTarget(unk);
1790 test_Window(unk, TRUE);
1791 test_InPlaceDeactivate(unk, TRUE);
1793 /* Calling test_OleCommandTarget here couses Segmentation Fault with native
1794 * MSHTML. It doesn't with Wine. */
1796 test_Window(unk, FALSE);
1798 test_InPlaceDeactivate(unk, FALSE);
1800 test_Close(unk, FALSE);
1802 /* Activate HTMLDocument again */
1803 test_Activate(unk, CLIENTSITE_SETNULL);
1804 test_Window(unk, TRUE);
1805 test_OleCommandTarget(unk);
1806 test_UIDeactivate();
1807 test_InPlaceDeactivate(unk, TRUE);
1808 test_Close(unk, FALSE);
1810 /* Activate HTMLDocument again, this time without UIActivate */
1811 call_UIActivate = FALSE;
1812 test_Activate(unk, CLIENTSITE_SETNULL);
1813 test_Window(unk, TRUE);
1814 test_UIDeactivate();
1815 test_InPlaceDeactivate(unk, TRUE);
1818 test_Close(unk, TRUE);
1819 test_OnAmbientPropertyChange2(unk);
1822 IOleDocumentView_Release(view);
1825 ok(IsWindow(hwnd), "hwnd is destroyed\n");
1827 ref = IUnknown_Release(unk);
1828 ok(ref == 0, "ref=%ld, expected 0\n", ref);
1830 ok(!IsWindow(hwnd), "hwnd is not destroyed\n");
1834 static void test_HTMLDocument_hlink(void)
1840 hwnd = last_hwnd = NULL;
1842 hres = create_document(&unk);
1849 #ifdef DOWNLOAD_TEST
1853 test_exec_onunload(unk);
1854 test_Window(unk, TRUE);
1855 test_InPlaceDeactivate(unk, TRUE);
1856 test_Close(unk, FALSE);
1859 IOleDocumentView_Release(view);
1862 ref = IUnknown_Release(unk);
1863 ok(ref == 0, "ref=%ld, expected 0\n", ref);
1869 container_hwnd = create_container_window();
1872 test_HTMLDocument();
1873 load_state = LD_DOLOAD;
1874 test_HTMLDocument();
1875 load_state = LD_DOLOAD;
1876 test_HTMLDocument_hlink();
1878 DestroyWindow(container_hwnd);