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>
37 DEFINE_SHLGUID(CGID_Undocumented
, 0x000214D4L
, 0, 0);
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) \
47 ok(expect_ ##func, "unexpected call " #func "\n"); \
48 expect_ ## func = FALSE; \
49 called_ ## func = TRUE; \
52 #define CHECK_EXPECT2(func) \
54 ok(expect_ ##func, "unexpected call " #func "\n"); \
55 called_ ## func = TRUE; \
58 #define CHECK_CALLED(func) \
60 ok(called_ ## func, "expected " #func "\n"); \
61 expect_ ## func = called_ ## func = FALSE; \
64 static IOleDocumentView
*view
= NULL
;
65 static HWND container_hwnd
= NULL
, hwnd
= NULL
, last_hwnd
= NULL
;
67 DEFINE_EXPECT(LockContainer
);
68 DEFINE_EXPECT(SetActiveObject
);
69 DEFINE_EXPECT(GetWindow
);
70 DEFINE_EXPECT(CanInPlaceActivate
);
71 DEFINE_EXPECT(OnInPlaceActivate
);
72 DEFINE_EXPECT(OnUIActivate
);
73 DEFINE_EXPECT(GetWindowContext
);
74 DEFINE_EXPECT(OnUIDeactivate
);
75 DEFINE_EXPECT(OnInPlaceDeactivate
);
76 DEFINE_EXPECT(GetContainer
);
77 DEFINE_EXPECT(ShowUI
);
78 DEFINE_EXPECT(ActivateMe
);
79 DEFINE_EXPECT(GetHostInfo
);
80 DEFINE_EXPECT(HideUI
);
81 DEFINE_EXPECT(GetOptionKeyPath
);
82 DEFINE_EXPECT(GetOverrideKeyPath
);
83 DEFINE_EXPECT(SetStatusText
);
84 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT
);
85 DEFINE_EXPECT(QueryStatus_OPEN
);
86 DEFINE_EXPECT(QueryStatus_NEW
);
87 DEFINE_EXPECT(Exec_SETPROGRESSMAX
);
88 DEFINE_EXPECT(Exec_SETPROGRESSPOS
);
89 DEFINE_EXPECT(Exec_HTTPEQUIV_DONE
);
90 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0
);
91 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1
);
92 DEFINE_EXPECT(Exec_ShellDocView_37
);
93 DEFINE_EXPECT(Exec_UPDATECOMMANDS
);
94 DEFINE_EXPECT(Exec_SETTITLE
);
95 DEFINE_EXPECT(Exec_HTTPEQUIV
);
96 DEFINE_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
97 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE
);
98 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL
);
99 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
100 DEFINE_EXPECT(Invoke_AMBIENT_SILENT
);
101 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT
);
102 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE
);
103 DEFINE_EXPECT(GetDropTarget
);
104 DEFINE_EXPECT(UpdateUI
);
105 DEFINE_EXPECT(Navigate
);
106 DEFINE_EXPECT(OnFrameWindowActivate
);
107 DEFINE_EXPECT(OnChanged_READYSTATE
);
108 DEFINE_EXPECT(OnChanged_1005
);
109 DEFINE_EXPECT(GetDisplayName
);
110 DEFINE_EXPECT(BindToStorage
);
111 DEFINE_EXPECT(Abort
);
113 static BOOL expect_LockContainer_fLock
;
114 static BOOL expect_SetActiveObject_active
;
115 static BOOL set_clientsite
= FALSE
, container_locked
= FALSE
;
116 static BOOL readystate_set_loading
= FALSE
;
117 static enum load_state_t
{
125 static LPCOLESTR expect_status_text
= NULL
;
127 static HRESULT
QueryInterface(REFIID riid
, void **ppv
);
128 static void test_readyState(IUnknown
*);
130 static HRESULT WINAPI
HlinkFrame_QueryInterface(IHlinkFrame
*iface
, REFIID riid
, void **ppv
)
132 ok(0, "unexpected call\n");
136 static ULONG WINAPI
HlinkFrame_AddRef(IHlinkFrame
*iface
)
141 static ULONG WINAPI
HlinkFrame_Release(IHlinkFrame
*iface
)
146 static HRESULT WINAPI
HlinkFrame_SetBrowseContext(IHlinkFrame
*iface
,
147 IHlinkBrowseContext
*pihlbc
)
149 ok(0, "unexpected call\n");
153 static HRESULT WINAPI
HlinkFrame_GetBrowseContext(IHlinkFrame
*iface
,
154 IHlinkBrowseContext
**ppihlbc
)
156 ok(0, "unexpected call\n");
160 static HRESULT WINAPI
HlinkFrame_Navigate(IHlinkFrame
*iface
, DWORD grfHLNF
, LPBC pbc
,
161 IBindStatusCallback
*pibsc
, IHlink
*pihlNavigate
)
165 CHECK_EXPECT(Navigate
);
167 ok(grfHLNF
== 0, "grfHLNF=%ld, expected 0\n", grfHLNF
);
168 ok(pbc
!= NULL
, "pbc == NULL\n");
169 ok(pibsc
!= NULL
, "pubsc == NULL\n");
170 ok(pihlNavigate
!= NULL
, "puhlNavigate == NULL\n");
173 LPWSTR frame_name
= (LPWSTR
)0xdeadbeef;
174 LPWSTR location
= (LPWSTR
)0xdeadbeef;
176 IMoniker
*mon
= NULL
;
177 DWORD site_data
= 0xdeadbeef;
179 hres
= IHlink_GetTargetFrameName(pihlNavigate
, &frame_name
);
180 ok(hres
== S_FALSE
, "GetTargetFrameName failed: %08lx\n", hres
);
181 ok(frame_name
== NULL
, "frame_name = %p\n", frame_name
);
183 hres
= IHlink_GetMonikerReference(pihlNavigate
, 1, &mon
, &location
);
184 ok(hres
== S_OK
, "GetMonikerReference failed: %08lx\n", hres
);
185 ok(location
== NULL
, "location = %p\n", location
);
186 ok(mon
!= NULL
, "mon == NULL\n");
188 hres
= IHlink_GetHlinkSite(pihlNavigate
, &site
, &site_data
);
189 ok(hres
== S_OK
, "GetHlinkSite failed: %08lx\n", hres
);
190 ok(site
== NULL
, "site = %p\n, expected NULL\n", site
);
191 ok(site_data
== 0xdeadbeef, "site_data = %lx\n", site_data
);
197 static HRESULT WINAPI
HlinkFrame_OnNavigate(IHlinkFrame
*iface
, DWORD grfHLNF
,
198 IMoniker
*pimkTarget
, LPCWSTR pwzLocation
, LPCWSTR pwzFriendlyName
, DWORD dwreserved
)
200 ok(0, "unexpected call\n");
204 static HRESULT WINAPI
HlinkFrame_UpdateHlink(IHlinkFrame
*iface
, ULONG uHLID
,
205 IMoniker
*pimkTarget
, LPCWSTR pwzLocation
, LPCWSTR pwzFriendlyName
)
207 ok(0, "unexpected call\n");
211 static const IHlinkFrameVtbl HlinkFrameVtbl
= {
212 HlinkFrame_QueryInterface
,
215 HlinkFrame_SetBrowseContext
,
216 HlinkFrame_GetBrowseContext
,
218 HlinkFrame_OnNavigate
,
219 HlinkFrame_UpdateHlink
222 static IHlinkFrame HlinkFrame
= { &HlinkFrameVtbl
};
224 static HRESULT WINAPI
PropertyNotifySink_QueryInterface(IPropertyNotifySink
*iface
,
225 REFIID riid
, void**ppv
)
227 if(IsEqualGUID(&IID_IPropertyNotifySink
, riid
)) {
232 ok(0, "unexpected call\n");
233 return E_NOINTERFACE
;
236 static ULONG WINAPI
PropertyNotifySink_AddRef(IPropertyNotifySink
*iface
)
241 static ULONG WINAPI
PropertyNotifySink_Release(IPropertyNotifySink
*iface
)
246 static HRESULT WINAPI
PropertyNotifySink_OnChanged(IPropertyNotifySink
*iface
, DISPID dispID
)
249 case DISPID_READYSTATE
:
250 CHECK_EXPECT2(OnChanged_READYSTATE
);
251 if(readystate_set_loading
) {
252 readystate_set_loading
= FALSE
;
253 load_state
= LD_LOADING
;
255 test_readyState(NULL
);
258 CHECK_EXPECT(OnChanged_1005
);
259 test_readyState(NULL
);
260 load_state
= LD_INTERACTIVE
;
264 ok(0, "unexpected id %ld\n", dispID
);
268 static HRESULT WINAPI
PropertyNotifySink_OnRequestEdit(IPropertyNotifySink
*iface
, DISPID dispID
)
270 ok(0, "unexpected call\n");
274 static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
= {
275 PropertyNotifySink_QueryInterface
,
276 PropertyNotifySink_AddRef
,
277 PropertyNotifySink_Release
,
278 PropertyNotifySink_OnChanged
,
279 PropertyNotifySink_OnRequestEdit
282 static IPropertyNotifySink PropertyNotifySink
= { &PropertyNotifySinkVtbl
};
284 static HRESULT WINAPI
Binding_QueryInterface(IBinding
*iface
, REFIID riid
, void **ppv
)
286 if(IsEqualGUID(&IID_IWinInetHttpInfo
, riid
))
287 return E_NOINTERFACE
; /* TODO */
289 if(IsEqualGUID(&IID_IWinInetInfo
, riid
))
290 return E_NOINTERFACE
; /* TODO */
292 ok(0, "unexpected call\n");
293 return E_NOINTERFACE
;
296 static ULONG WINAPI
Binding_AddRef(IBinding
*iface
)
301 static ULONG WINAPI
Binding_Release(IBinding
*iface
)
306 static HRESULT WINAPI
Binding_Abort(IBinding
*iface
)
312 static HRESULT WINAPI
Binding_Suspend(IBinding
*iface
)
314 ok(0, "unexpected call\n");
318 static HRESULT WINAPI
Binding_Resume(IBinding
*iface
)
320 ok(0, "unexpected call\n");
324 static HRESULT WINAPI
Binding_SetPriority(IBinding
*iface
, LONG nPriority
)
326 ok(0, "unexpected call\n");
330 static HRESULT WINAPI
Binding_GetPriority(IBinding
*iface
, LONG
*pnPriority
)
332 ok(0, "unexpected call\n");
336 static HRESULT WINAPI
Binding_GetBindResult(IBinding
*iface
, CLSID
*pclsidProtocol
,
337 DWORD
*pdwResult
, LPOLESTR
*pszResult
, DWORD
*pdwReserved
)
339 ok(0, "unexpected call\n");
343 static const IBindingVtbl BindingVtbl
= {
344 Binding_QueryInterface
,
352 Binding_GetBindResult
355 static IBinding Binding
= { &BindingVtbl
};
357 static HRESULT WINAPI
Moniker_QueryInterface(IMoniker
*iface
, REFIID riid
, void **ppv
)
359 ok(0, "unexpected call\n");
360 return E_NOINTERFACE
;
363 static ULONG WINAPI
Moniker_AddRef(IMoniker
*iface
)
368 static ULONG WINAPI
Moniker_Release(IMoniker
*iface
)
373 static HRESULT WINAPI
Moniker_GetClassID(IMoniker
*iface
, CLSID
*pClassID
)
375 ok(0, "unexpected call\n");
379 static HRESULT WINAPI
Moniker_IsDirty(IMoniker
*iface
)
381 ok(0, "unexpected call\n");
385 static HRESULT WINAPI
Moniker_Load(IMoniker
*iface
, IStream
*pStm
)
387 ok(0, "unexpected call\n");
391 static HRESULT WINAPI
Moniker_Save(IMoniker
*iface
, IStream
*pStm
, BOOL fClearDirty
)
393 ok(0, "unexpected call\n");
397 static HRESULT WINAPI
Moniker_GetSizeMax(IMoniker
*iface
, ULARGE_INTEGER
*pcbSize
)
399 ok(0, "unexpected call\n");
403 static HRESULT WINAPI
Moniker_BindToObject(IMoniker
*iface
, IBindCtx
*pcb
, IMoniker
*pmkToLeft
,
404 REFIID riidResult
, void **ppvResult
)
406 ok(0, "unexpected call\n");
410 static HRESULT WINAPI
Moniker_BindToStorage(IMoniker
*iface
, IBindCtx
*pbc
, IMoniker
*pmkToLeft
,
411 REFIID riid
, void **ppv
)
413 IBindStatusCallback
*callback
= NULL
;
414 FORMATETC formatetc
= {0xc02d, NULL
, 1, -1, TYMED_ISTREAM
};
417 DWORD bindf
, written
=0;
421 static OLECHAR BSCBHolder
[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
422 static const WCHAR wszTextHtml
[] = {'t','e','x','t','/','h','t','m','l',0};
423 static const char html_page
[] = "<html><body>test</body></html>";
425 CHECK_EXPECT(BindToStorage
);
427 ok(pbc
!= NULL
, "pbc == NULL\n");
428 ok(pmkToLeft
== NULL
, "pmkToLeft=%p\n", pmkToLeft
);
429 ok(IsEqualGUID(&IID_IStream
, riid
), "unexpected riid\n");
430 ok(ppv
!= NULL
, "ppv == NULL\n");
431 ok(*ppv
== NULL
, "*ppv=%p\n", *ppv
);
433 hres
= IBindCtx_GetObjectParam(pbc
, BSCBHolder
, (IUnknown
**)&callback
);
434 ok(hres
== S_OK
, "GetObjectParam failed: %08lx\n", hres
);
435 ok(callback
!= NULL
, "callback == NULL\n");
437 memset(&bindinfo
, 0xf0, sizeof(bindinfo
));
438 bindinfo
.cbSize
= sizeof(bindinfo
);
440 hres
= IBindStatusCallback_GetBindInfo(callback
, &bindf
, &bindinfo
);
441 ok(hres
== S_OK
, "GetBindInfo failed: %08lx\n", hres
);
442 ok(bindf
== (BINDF_PULLDATA
|BINDF_ASYNCSTORAGE
|BINDF_ASYNCHRONOUS
), "bindf = %08lx\n", bindf
);
443 ok(bindinfo
.cbSize
== sizeof(bindinfo
), "bindinfo.cbSize=%ld\n", bindinfo
.cbSize
);
444 ok(bindinfo
.szExtraInfo
== NULL
, "bindinfo.szExtraInfo=%p\n", bindinfo
.szExtraInfo
);
445 /* TODO: test stgmedData */
446 ok(bindinfo
.grfBindInfoF
== 0, "bindinfo.grfBinfInfoF=%08lx\n", bindinfo
.grfBindInfoF
);
447 ok(bindinfo
.dwBindVerb
== 0, "bindinfo.dwBindVerb=%ld\n", bindinfo
.dwBindVerb
);
448 ok(bindinfo
.szCustomVerb
== 0, "bindinfo.szCustomVerb=%p\n", bindinfo
.szCustomVerb
);
449 ok(bindinfo
.cbStgmedData
== 0, "bindinfo.cbStgmedData=%ld\n", bindinfo
.cbStgmedData
);
450 ok(bindinfo
.dwOptions
== 0x80000, "bindinfo.dwOptions=%lx\n", bindinfo
.dwOptions
);
451 ok(bindinfo
.dwOptionsFlags
== 0, "bindinfo.dwOptionsFlags=%ld\n", bindinfo
.dwOptionsFlags
);
452 /* TODO: test dwCodePage */
453 /* TODO: test securityAttributes */
454 ok(IsEqualGUID(&IID_NULL
, &bindinfo
.iid
), "unexepected bindinfo.iid\n");
455 ok(bindinfo
.pUnk
== NULL
, "bindinfo.pUnk=%p\n", bindinfo
.pUnk
);
456 ok(bindinfo
.dwReserved
== 0, "bindinfo.dwReserved=%ld\n", bindinfo
.dwReserved
);
458 hres
= IBindStatusCallback_OnStartBinding(callback
, 0, &Binding
);
459 ok(hres
== S_OK
, "OnStartBinding failed: %08lx\n", hres
);
461 hres
= IBindStatusCallback_OnProgress(callback
, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE
,
463 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08lx\n", hres
);
465 hres
= IBindStatusCallback_OnProgress(callback
, 0, 0, BINDSTATUS_BEGINDOWNLOADDATA
,
467 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08lx\n", hres
);
469 CreateStreamOnHGlobal(0, TRUE
, &stream
);
470 IStream_Write(stream
, html_page
, sizeof(html_page
)-1, &written
);
472 stgmedium
.tymed
= TYMED_ISTREAM
;
473 U(stgmedium
).pstm
= stream
;
474 stgmedium
.pUnkForRelease
= (IUnknown
*)iface
;
475 hres
= IBindStatusCallback_OnDataAvailable(callback
,
476 BSCF_FIRSTDATANOTIFICATION
|BSCF_LASTDATANOTIFICATION
,
477 100, &formatetc
, &stgmedium
);
478 ok(hres
== S_OK
, "OnDataAvailable failed: %08lx\n", hres
);
479 IStream_Release(stream
);
481 hres
= IBindStatusCallback_OnProgress(callback
, sizeof(html_page
)-1, sizeof(html_page
)-1,
482 BINDSTATUS_ENDDOWNLOADDATA
, NULL
);
483 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08lx\n", hres
);
485 hres
= IBindStatusCallback_OnStopBinding(callback
, S_OK
, NULL
);
486 ok(hres
== S_OK
, "OnStopBinding failed: %08lx\n", hres
);
488 IBindStatusCallback_Release(callback
);
493 static HRESULT WINAPI
Moniker_Reduce(IMoniker
*iface
, IBindCtx
*pbc
, DWORD dwReduceHowFar
,
494 IMoniker
**ppmkToLeft
, IMoniker
**ppmkReduced
)
496 ok(0, "unexpected call\n");
500 static HRESULT WINAPI
Moniker_ComposeWith(IMoniker
*iface
, IMoniker
*pmkRight
,
501 BOOL fOnlyIfNotGeneric
, IMoniker
**ppnkComposite
)
503 ok(0, "unexpected call\n");
507 static HRESULT WINAPI
Moniker_Enum(IMoniker
*iface
, BOOL fForwrd
, IEnumMoniker
**ppenumMoniker
)
509 ok(0, "unexpected call\n");
513 static HRESULT WINAPI
Moniker_IsEqual(IMoniker
*iface
, IMoniker
*pmkOtherMoniker
)
515 ok(0, "unexpected call\n");
519 static HRESULT WINAPI
Moniker_Hash(IMoniker
*iface
, DWORD
*pdwHash
)
521 ok(0, "unexpected call\n");
525 static HRESULT WINAPI
Moniker_IsRunning(IMoniker
*iface
, IBindCtx
*pbc
, IMoniker
*pmkToLeft
,
526 IMoniker
*pmkNewlyRunning
)
528 ok(0, "unexpected call\n");
532 static HRESULT WINAPI
Moniker_GetTimeOfLastChange(IMoniker
*iface
, IBindCtx
*pbc
,
533 IMoniker
*pmkToLeft
, FILETIME
*pFileTime
)
535 ok(0, "unexpected call\n");
539 static HRESULT WINAPI
Moniker_Inverse(IMoniker
*iface
, IMoniker
**ppmk
)
541 ok(0, "unexpected call\n");
545 static HRESULT WINAPI
Moniker_CommonPrefixWith(IMoniker
*iface
, IMoniker
*pmkOther
,
546 IMoniker
**ppmkPrefix
)
548 ok(0, "unexpected call\n");
552 static HRESULT WINAPI
Moniker_RelativePathTo(IMoniker
*iface
, IMoniker
*pmkOther
,
553 IMoniker
**pmkRelPath
)
555 ok(0, "unexpected call\n");
559 static HRESULT WINAPI
Moniker_GetDisplayName(IMoniker
*iface
, IBindCtx
*pbc
,
560 IMoniker
*pmkToLeft
, LPOLESTR
*ppszDisplayName
)
562 static const WCHAR winetest_test
[] =
563 {'w','i','n','e','t','e','s','t',':','t','e','s','t',0};
565 CHECK_EXPECT2(GetDisplayName
);
567 /* ok(pbc != NULL, "pbc == NULL\n"); */
568 ok(pmkToLeft
== NULL
, "pmkToLeft=%p\n", pmkToLeft
);
569 ok(ppszDisplayName
!= NULL
, "ppszDisplayName == NULL\n");
570 ok(*ppszDisplayName
== NULL
, "*ppszDisplayName=%p\n", *ppszDisplayName
);
572 *ppszDisplayName
= CoTaskMemAlloc(sizeof(winetest_test
));
573 memcpy(*ppszDisplayName
, winetest_test
, sizeof(winetest_test
));
578 static HRESULT WINAPI
Moniker_ParseDisplayName(IMoniker
*iface
, IBindCtx
*pbc
,
579 IMoniker
*pmkToLeft
, LPOLESTR pszDisplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
581 ok(0, "unexpected call\n");
585 static HRESULT WINAPI
Moniker_IsSystemMoniker(IMoniker
*iface
, DWORD
*pdwMksys
)
587 ok(0, "unexpected call\n");
591 static const IMonikerVtbl MonikerVtbl
= {
592 Moniker_QueryInterface
,
600 Moniker_BindToObject
,
601 Moniker_BindToStorage
,
608 Moniker_GetTimeOfLastChange
,
610 Moniker_CommonPrefixWith
,
611 Moniker_RelativePathTo
,
612 Moniker_GetDisplayName
,
613 Moniker_ParseDisplayName
,
614 Moniker_IsSystemMoniker
617 static IMoniker Moniker
= { &MonikerVtbl
};
619 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
621 return QueryInterface(riid
, ppv
);
624 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
629 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
634 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
635 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
637 ok(0, "unexpected call\n");
641 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
642 IEnumUnknown
**ppenum
)
644 ok(0, "unexpected call\n");
648 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
650 CHECK_EXPECT(LockContainer
);
651 ok(expect_LockContainer_fLock
== fLock
, "fLock=%x, expected %x\n", fLock
, expect_LockContainer_fLock
);
655 static const IOleContainerVtbl OleContainerVtbl
= {
656 OleContainer_QueryInterface
,
658 OleContainer_Release
,
659 OleContainer_ParseDisplayName
,
660 OleContainer_EnumObjects
,
661 OleContainer_LockContainer
664 static IOleContainer OleContainer
= { &OleContainerVtbl
};
666 static HRESULT WINAPI
InPlaceFrame_QueryInterface(IOleInPlaceFrame
*iface
, REFIID riid
, void **ppv
)
668 return QueryInterface(riid
, ppv
);
671 static ULONG WINAPI
InPlaceFrame_AddRef(IOleInPlaceFrame
*iface
)
676 static ULONG WINAPI
InPlaceFrame_Release(IOleInPlaceFrame
*iface
)
681 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
683 ok(0, "unexpected call\n");
687 static HRESULT WINAPI
InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
689 ok(0, "unexpected call\n");
693 static HRESULT WINAPI
InPlaceFrame_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
695 ok(0, "unexpected call\n");
699 static HRESULT WINAPI
InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame
*iface
,
700 LPCBORDERWIDTHS pborderwidths
)
702 ok(0, "unexpected call\n");
706 static HRESULT WINAPI
InPlaceFrame_SetBorderSpace(IOleInPlaceFrame
*iface
,
707 LPCBORDERWIDTHS pborderwidths
)
709 ok(0, "unexpected call\n");
713 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
714 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
716 static const WCHAR wszHTML_Document
[] =
717 {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0};
719 CHECK_EXPECT2(SetActiveObject
);
721 if(expect_SetActiveObject_active
) {
722 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
723 if(pActiveObject
&& PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH
)
724 ok(!lstrcmpW(wszHTML_Document
, pszObjName
), "pszObjName != \"HTML Document\"\n");
726 ok(pActiveObject
== NULL
, "pActiveObject=%p, expected NULL\n", pActiveObject
);
727 ok(pszObjName
== NULL
, "pszObjName=%p, expected NULL\n", pszObjName
);
733 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
734 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
736 ok(0, "unexpected call\n");
740 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
741 HOLEMENU holemenu
, HWND hwndActiveObject
)
743 ok(0, "unexpected call\n");
747 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
749 ok(0, "unexpected call\n");
753 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
755 CHECK_EXPECT2(SetStatusText
);
756 if(!expect_status_text
)
757 ok(pszStatusText
== NULL
, "pszStatusText=%p, expected NULL\n", pszStatusText
);
761 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
763 ok(0, "unexpected call\n");
767 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
769 ok(0, "unexpected call\n");
773 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
774 InPlaceFrame_QueryInterface
,
776 InPlaceFrame_Release
,
777 InPlaceFrame_GetWindow
,
778 InPlaceFrame_ContextSensitiveHelp
,
779 InPlaceFrame_GetBorder
,
780 InPlaceFrame_RequestBorderSpace
,
781 InPlaceFrame_SetBorderSpace
,
782 InPlaceFrame_SetActiveObject
,
783 InPlaceFrame_InsertMenus
,
784 InPlaceFrame_SetMenu
,
785 InPlaceFrame_RemoveMenus
,
786 InPlaceFrame_SetStatusText
,
787 InPlaceFrame_EnableModeless
,
788 InPlaceFrame_TranslateAccelerator
791 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
793 static HRESULT WINAPI
InPlaceSite_QueryInterface(IOleInPlaceSite
*iface
, REFIID riid
, void **ppv
)
795 return QueryInterface(riid
, ppv
);
798 static ULONG WINAPI
InPlaceSite_AddRef(IOleInPlaceSite
*iface
)
803 static ULONG WINAPI
InPlaceSite_Release(IOleInPlaceSite
*iface
)
808 static HRESULT WINAPI
InPlaceSite_GetWindow(IOleInPlaceSite
*iface
, HWND
*phwnd
)
810 CHECK_EXPECT(GetWindow
);
811 ok(phwnd
!= NULL
, "phwnd = NULL\n");
812 *phwnd
= container_hwnd
;
816 static HRESULT WINAPI
InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite
*iface
, BOOL fEnterMode
)
818 ok(0, "unexpected call\n");
822 static HRESULT WINAPI
InPlaceSite_CanInPlaceActivate(IOleInPlaceSite
*iface
)
824 CHECK_EXPECT(CanInPlaceActivate
);
828 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivate(IOleInPlaceSite
*iface
)
830 CHECK_EXPECT(OnInPlaceActivate
);
834 static HRESULT WINAPI
InPlaceSite_OnUIActivate(IOleInPlaceSite
*iface
)
836 CHECK_EXPECT(OnUIActivate
);
840 static HRESULT WINAPI
InPlaceSite_GetWindowContext(IOleInPlaceSite
*iface
,
841 IOleInPlaceFrame
**ppFrame
, IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
842 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
844 static const RECT rect
= {0,0,500,500};
846 CHECK_EXPECT(GetWindowContext
);
848 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
850 *ppFrame
= &InPlaceFrame
;
851 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
854 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
856 memcpy(lprcPosRect
, &rect
, sizeof(RECT
));
857 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
859 memcpy(lprcClipRect
, &rect
, sizeof(RECT
));
860 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
862 lpFrameInfo
->cb
= sizeof(*lpFrameInfo
);
863 lpFrameInfo
->fMDIApp
= FALSE
;
864 lpFrameInfo
->hwndFrame
= container_hwnd
;
865 lpFrameInfo
->haccel
= NULL
;
866 lpFrameInfo
->cAccelEntries
= 0;
872 static HRESULT WINAPI
InPlaceSite_Scroll(IOleInPlaceSite
*iface
, SIZE scrollExtant
)
874 ok(0, "unexpected call\n");
878 static HRESULT WINAPI
InPlaceSite_OnUIDeactivate(IOleInPlaceSite
*iface
, BOOL fUndoable
)
880 CHECK_EXPECT(OnUIDeactivate
);
881 ok(!fUndoable
, "fUndoable = TRUE\n");
885 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite
*iface
)
887 CHECK_EXPECT(OnInPlaceDeactivate
);
891 static HRESULT WINAPI
InPlaceSite_DiscardUndoState(IOleInPlaceSite
*iface
)
893 ok(0, "unexpected call\n");
897 static HRESULT WINAPI
InPlaceSite_DeactivateAndUndo(IOleInPlaceSite
*iface
)
899 ok(0, "unexpected call\n");
903 static HRESULT WINAPI
InPlaceSite_OnPosRectChange(IOleInPlaceSite
*iface
, LPCRECT lprcPosRect
)
905 ok(0, "unexpected call\n");
909 static const IOleInPlaceSiteVtbl InPlaceSiteVtbl
= {
910 InPlaceSite_QueryInterface
,
913 InPlaceSite_GetWindow
,
914 InPlaceSite_ContextSensitiveHelp
,
915 InPlaceSite_CanInPlaceActivate
,
916 InPlaceSite_OnInPlaceActivate
,
917 InPlaceSite_OnUIActivate
,
918 InPlaceSite_GetWindowContext
,
920 InPlaceSite_OnUIDeactivate
,
921 InPlaceSite_OnInPlaceDeactivate
,
922 InPlaceSite_DiscardUndoState
,
923 InPlaceSite_DeactivateAndUndo
,
924 InPlaceSite_OnPosRectChange
927 static IOleInPlaceSite InPlaceSite
= { &InPlaceSiteVtbl
};
929 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
931 return QueryInterface(riid
, ppv
);
934 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
939 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
944 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
946 ok(0, "unexpected call\n");
950 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAsign
, DWORD dwWhichMoniker
,
953 ok(0, "unexpected call\n");
957 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
959 CHECK_EXPECT(GetContainer
);
960 ok(ppContainer
!= NULL
, "ppContainer = NULL\n");
961 *ppContainer
= &OleContainer
;
965 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
967 ok(0, "unexpected call\n");
971 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
973 ok(0, "unexpected call\n");
977 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
979 ok(0, "unexpected call\n");
983 static const IOleClientSiteVtbl ClientSiteVtbl
= {
984 ClientSite_QueryInterface
,
987 ClientSite_SaveObject
,
988 ClientSite_GetMoniker
,
989 ClientSite_GetContainer
,
990 ClientSite_ShowObject
,
991 ClientSite_OnShowWindow
,
992 ClientSite_RequestNewObjectLayout
995 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
997 static HRESULT WINAPI
DocumentSite_QueryInterface(IOleDocumentSite
*iface
, REFIID riid
, void **ppv
)
999 return QueryInterface(riid
, ppv
);
1002 static ULONG WINAPI
DocumentSite_AddRef(IOleDocumentSite
*iface
)
1007 static ULONG WINAPI
DocumentSite_Release(IOleDocumentSite
*iface
)
1012 static BOOL call_UIActivate
= TRUE
;
1013 static HRESULT WINAPI
DocumentSite_ActivateMe(IOleDocumentSite
*iface
, IOleDocumentView
*pViewToActivate
)
1015 IOleDocument
*document
;
1018 CHECK_EXPECT(ActivateMe
);
1019 ok(pViewToActivate
!= NULL
, "pViewToActivate = NULL\n");
1021 hres
= IOleDocumentView_QueryInterface(pViewToActivate
, &IID_IOleDocument
, (void**)&document
);
1022 ok(hres
== S_OK
, "could not get IOleDocument: %08lx\n", hres
);
1024 if(SUCCEEDED(hres
)) {
1025 hres
= IOleDocument_CreateView(document
, &InPlaceSite
, NULL
, 0, &view
);
1026 ok(hres
== S_OK
, "CreateView failed: %08lx\n", hres
);
1028 if(SUCCEEDED(hres
)) {
1029 IOleInPlaceActiveObject
*activeobj
= NULL
;
1030 IOleInPlaceSite
*inplacesite
= NULL
;
1031 HWND tmp_hwnd
= NULL
;
1032 static RECT rect
= {0,0,400,500};
1034 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
1035 ok(hres
== S_OK
, "GetInPlaceSite failed: %08lx\n", hres
);
1036 ok(inplacesite
== &InPlaceSite
, "inplacesite=%p, expected %p\n",
1037 inplacesite
, &InPlaceSite
);
1039 hres
= IOleDocumentView_SetInPlaceSite(view
, &InPlaceSite
);
1040 ok(hres
== S_OK
, "SetInPlaceSite failed: %08lx\n", hres
);
1042 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
1043 ok(hres
== S_OK
, "GetInPlaceSite failed: %08lx\n", hres
);
1044 ok(inplacesite
== &InPlaceSite
, "inplacesite=%p, expected %p\n",
1045 inplacesite
, &InPlaceSite
);
1047 hres
= IOleDocumentView_QueryInterface(view
, &IID_IOleInPlaceActiveObject
, (void**)&activeobj
);
1048 ok(hres
== S_OK
, "Could not get IOleInPlaceActiveObject: %08lx\n", hres
);
1051 IOleInPlaceActiveObject_GetWindow(activeobj
, &hwnd
);
1052 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
1053 ok(hwnd
== NULL
, "hwnd=%p, expeted NULL\n", hwnd
);
1056 if(call_UIActivate
) {
1057 SET_EXPECT(CanInPlaceActivate
);
1058 SET_EXPECT(GetWindowContext
);
1059 SET_EXPECT(GetWindow
);
1060 SET_EXPECT(OnInPlaceActivate
);
1061 SET_EXPECT(SetStatusText
);
1062 SET_EXPECT(Exec_SETPROGRESSMAX
);
1063 SET_EXPECT(Exec_SETPROGRESSPOS
);
1064 SET_EXPECT(OnUIActivate
);
1065 SET_EXPECT(SetActiveObject
);
1067 expect_SetActiveObject_active
= TRUE
;
1068 expect_status_text
= NULL
;
1070 hres
= IOleDocumentView_UIActivate(view
, TRUE
);
1073 trace("UIActivate failed: %08lx\n", hres
);
1076 ok(hres
== S_OK
, "UIActivate failed: %08lx\n", hres
);
1078 CHECK_CALLED(CanInPlaceActivate
);
1079 CHECK_CALLED(GetWindowContext
);
1080 CHECK_CALLED(GetWindow
);
1081 CHECK_CALLED(OnInPlaceActivate
);
1082 CHECK_CALLED(SetStatusText
);
1083 CHECK_CALLED(Exec_SETPROGRESSMAX
);
1084 CHECK_CALLED(Exec_SETPROGRESSPOS
);
1085 CHECK_CALLED(OnUIActivate
);
1086 CHECK_CALLED(SetActiveObject
);
1087 CHECK_CALLED(ShowUI
);
1090 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &hwnd
);
1091 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
1092 ok(hwnd
!= NULL
, "hwnd == NULL\n");
1094 ok(hwnd
== last_hwnd
, "hwnd != last_hwnd\n");
1097 hres
= IOleDocumentView_UIActivate(view
, TRUE
);
1098 ok(hres
== S_OK
, "UIActivate failed: %08lx\n", hres
);
1101 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &tmp_hwnd
);
1102 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
1103 ok(tmp_hwnd
== hwnd
, "tmp_hwnd=%p, expected %p\n", tmp_hwnd
, hwnd
);
1107 hres
= IOleDocumentView_SetRect(view
, &rect
);
1108 ok(hres
== S_OK
, "SetRect failed: %08lx\n", hres
);
1110 if(call_UIActivate
) {
1111 hres
= IOleDocumentView_Show(view
, TRUE
);
1112 ok(hres
== S_OK
, "Show failed: %08lx\n", hres
);
1114 SET_EXPECT(CanInPlaceActivate
);
1115 SET_EXPECT(GetWindowContext
);
1116 SET_EXPECT(GetWindow
);
1117 SET_EXPECT(OnInPlaceActivate
);
1118 SET_EXPECT(SetStatusText
);
1119 SET_EXPECT(Exec_SETPROGRESSMAX
);
1120 SET_EXPECT(Exec_SETPROGRESSPOS
);
1121 SET_EXPECT(OnUIActivate
);
1122 expect_status_text
= (load_state
== LD_COMPLETE
? (LPCOLESTR
)0xdeadbeef : NULL
);
1124 hres
= IOleDocumentView_Show(view
, TRUE
);
1125 ok(hres
== S_OK
, "Show failed: %08lx\n", hres
);
1127 CHECK_CALLED(CanInPlaceActivate
);
1128 CHECK_CALLED(GetWindowContext
);
1129 CHECK_CALLED(GetWindow
);
1130 CHECK_CALLED(OnInPlaceActivate
);
1131 CHECK_CALLED(SetStatusText
);
1132 CHECK_CALLED(Exec_SETPROGRESSMAX
);
1133 CHECK_CALLED(Exec_SETPROGRESSPOS
);
1136 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &hwnd
);
1137 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
1138 ok(hwnd
!= NULL
, "hwnd == NULL\n");
1140 ok(hwnd
== last_hwnd
, "hwnd != last_hwnd\n");
1145 IOleInPlaceActiveObject_Release(activeobj
);
1148 IOleDocument_Release(document
);
1154 static const IOleDocumentSiteVtbl DocumentSiteVtbl
= {
1155 DocumentSite_QueryInterface
,
1156 DocumentSite_AddRef
,
1157 DocumentSite_Release
,
1158 DocumentSite_ActivateMe
1161 static IOleDocumentSite DocumentSite
= { &DocumentSiteVtbl
};
1163 static HRESULT WINAPI
DocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
1165 return QueryInterface(riid
, ppv
);
1168 static ULONG WINAPI
DocHostUIHandler_AddRef(IDocHostUIHandler2
*iface
)
1173 static ULONG WINAPI
DocHostUIHandler_Release(IDocHostUIHandler2
*iface
)
1178 static HRESULT WINAPI
DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2
*iface
, DWORD dwID
, POINT
*ppt
,
1179 IUnknown
*pcmdtReserved
, IDispatch
*pdicpReserved
)
1181 ok(0, "unexpected call\n");
1185 static HRESULT WINAPI
DocHostUIHandler_GetHostInfo(IDocHostUIHandler2
*iface
, DOCHOSTUIINFO
*pInfo
)
1187 CHECK_EXPECT(GetHostInfo
);
1188 ok(pInfo
!= NULL
, "pInfo=NULL\n");
1190 ok(pInfo
->cbSize
== sizeof(DOCHOSTUIINFO
), "pInfo->cbSize=%lu\n", pInfo
->cbSize
);
1191 ok(!pInfo
->dwFlags
, "pInfo->dwFlags=%08lx, expected 0\n", pInfo
->dwFlags
);
1192 pInfo
->dwFlags
= DOCHOSTUIFLAG_DISABLE_HELP_MENU
| DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
1193 | DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY
| DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
1194 | DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION
;
1195 ok(!pInfo
->dwDoubleClick
, "pInfo->dwDoubleClick=%08lx, expected 0\n", pInfo
->dwDoubleClick
);
1196 ok(!pInfo
->pchHostCss
, "pInfo->pchHostCss=%p, expected NULL\n", pInfo
->pchHostCss
);
1197 ok(!pInfo
->pchHostNS
, "pInfo->pchhostNS=%p, expected NULL\n", pInfo
->pchHostNS
);
1202 static HRESULT WINAPI
DocHostUIHandler_ShowUI(IDocHostUIHandler2
*iface
, DWORD dwID
,
1203 IOleInPlaceActiveObject
*pActiveObject
, IOleCommandTarget
*pCommandTarget
,
1204 IOleInPlaceFrame
*pFrame
, IOleInPlaceUIWindow
*pDoc
)
1206 CHECK_EXPECT(ShowUI
);
1208 ok(dwID
== DOCHOSTUITYPE_BROWSE
, "dwID=%ld, expected DOCHOSTUITYPE_BROWSE\n", dwID
);
1209 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
1210 ok(pCommandTarget
!= NULL
, "pCommandTarget = NULL\n");
1211 ok(pFrame
== &InPlaceFrame
, "pFrame=%p, expected %p\n", pFrame
, &InPlaceFrame
);
1212 ok(pDoc
== NULL
, "pDoc=%p, expected NULL\n", pDoc
);
1217 static HRESULT WINAPI
DocHostUIHandler_HideUI(IDocHostUIHandler2
*iface
)
1219 CHECK_EXPECT(HideUI
);
1223 static HRESULT WINAPI
DocHostUIHandler_UpdateUI(IDocHostUIHandler2
*iface
)
1225 CHECK_EXPECT(UpdateUI
);
1229 static HRESULT WINAPI
DocHostUIHandler_EnableModeless(IDocHostUIHandler2
*iface
, BOOL fEnable
)
1231 ok(0, "unexpected call\n");
1235 static HRESULT WINAPI
DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1237 ok(0, "unexpected call\n");
1241 static BOOL expect_OnFrameWindowActivate_fActivate
;
1242 static HRESULT WINAPI
DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
1244 CHECK_EXPECT2(OnFrameWindowActivate
);
1245 ok(fActivate
== expect_OnFrameWindowActivate_fActivate
, "fActivate=%x\n", fActivate
);
1249 static HRESULT WINAPI
DocHostUIHandler_ResizeBorder(IDocHostUIHandler2
*iface
, LPCRECT prcBorder
,
1250 IOleInPlaceUIWindow
*pUIWindow
, BOOL fRameWindow
)
1252 ok(0, "unexpected call\n");
1256 static HRESULT WINAPI
DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2
*iface
, LPMSG lpMsg
,
1257 const GUID
*pguidCmdGroup
, DWORD nCmdID
)
1259 ok(0, "unexpected call\n");
1263 static HRESULT WINAPI
DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2
*iface
,
1264 LPOLESTR
*pchKey
, DWORD dw
)
1266 CHECK_EXPECT(GetOptionKeyPath
);
1267 ok(pchKey
!= NULL
, "pchKey = NULL\n");
1268 ok(!dw
, "dw=%ld, expected 0\n", dw
);
1270 ok(!*pchKey
, "*pchKey=%p, expected NULL\n", *pchKey
);
1274 static HRESULT WINAPI
DocHostUIHandler_GetDropTarget(IDocHostUIHandler2
*iface
,
1275 IDropTarget
*pDropTarget
, IDropTarget
**ppDropTarget
)
1277 CHECK_EXPECT(GetDropTarget
);
1282 static HRESULT WINAPI
DocHostUIHandler_GetExternal(IDocHostUIHandler2
*iface
, IDispatch
**ppDispatch
)
1284 ok(0, "unexpected call\n");
1288 static HRESULT WINAPI
DocHostUIHandler_TranslateUrl(IDocHostUIHandler2
*iface
, DWORD dwTranslate
,
1289 OLECHAR
*pchURLIn
, OLECHAR
**ppchURLOut
)
1291 ok(0, "unexpected call\n");
1295 static HRESULT WINAPI
DocHostUIHandler_FilterDataObject(IDocHostUIHandler2
*iface
, IDataObject
*pDO
,
1296 IDataObject
**ppPORet
)
1298 ok(0, "unexpected call\n");
1302 static HRESULT WINAPI
DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2
*iface
,
1303 LPOLESTR
*pchKey
, DWORD dw
)
1305 CHECK_EXPECT(GetOverrideKeyPath
);
1306 ok(pchKey
!= NULL
, "pchKey = NULL\n");
1308 ok(!*pchKey
, "*pchKey=%p, expected NULL\n", *pchKey
);
1309 ok(!dw
, "dw=%ld, xepected 0\n", dw
);
1313 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl
= {
1314 DocHostUIHandler_QueryInterface
,
1315 DocHostUIHandler_AddRef
,
1316 DocHostUIHandler_Release
,
1317 DocHostUIHandler_ShowContextMenu
,
1318 DocHostUIHandler_GetHostInfo
,
1319 DocHostUIHandler_ShowUI
,
1320 DocHostUIHandler_HideUI
,
1321 DocHostUIHandler_UpdateUI
,
1322 DocHostUIHandler_EnableModeless
,
1323 DocHostUIHandler_OnDocWindowActivate
,
1324 DocHostUIHandler_OnFrameWindowActivate
,
1325 DocHostUIHandler_ResizeBorder
,
1326 DocHostUIHandler_TranslateAccelerator
,
1327 DocHostUIHandler_GetOptionKeyPath
,
1328 DocHostUIHandler_GetDropTarget
,
1329 DocHostUIHandler_GetExternal
,
1330 DocHostUIHandler_TranslateUrl
,
1331 DocHostUIHandler_FilterDataObject
,
1332 DocHostUIHandler_GetOverrideKeyPath
1335 static IDocHostUIHandler2 DocHostUIHandler
= { &DocHostUIHandlerVtbl
};
1337 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
1338 REFIID riid
, void **ppv
)
1340 return QueryInterface(riid
, ppv
);
1343 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
1348 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
1353 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
1354 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
1356 ok(!pguidCmdGroup
, "pguidCmdGroup != MULL\n");
1357 ok(cCmds
== 1, "cCmds=%ld, expected 1\n", cCmds
);
1358 ok(!pCmdText
, "pCmdText != NULL\n");
1360 switch(prgCmds
[0].cmdID
) {
1361 case OLECMDID_SETPROGRESSTEXT
:
1362 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT
);
1363 prgCmds
[0].cmdf
= OLECMDF_ENABLED
;
1366 CHECK_EXPECT(QueryStatus_OPEN
);
1367 prgCmds
[0].cmdf
= 0;
1370 CHECK_EXPECT(QueryStatus_NEW
);
1371 prgCmds
[0].cmdf
= 0;
1374 ok(0, "unexpected command %ld\n", prgCmds
[0].cmdID
);
1380 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
1381 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
1383 test_readyState(NULL
);
1385 if(!pguidCmdGroup
) {
1387 case OLECMDID_SETPROGRESSMAX
:
1388 CHECK_EXPECT2(Exec_SETPROGRESSMAX
);
1389 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1390 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
1392 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
1393 if(load_state
== LD_NO
)
1394 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn
));
1396 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
1398 case OLECMDID_SETPROGRESSPOS
:
1399 CHECK_EXPECT2(Exec_SETPROGRESSPOS
);
1400 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1401 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
1403 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
1404 if(load_state
== LD_NO
)
1405 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn
));
1407 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
1409 case OLECMDID_HTTPEQUIV_DONE
:
1410 CHECK_EXPECT(Exec_HTTPEQUIV_DONE
);
1411 ok(nCmdexecopt
== 0, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1412 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
1413 ok(pvaIn
== NULL
, "pvaIn=%p\n", pvaIn
);
1414 load_state
= LD_COMPLETE
;
1416 case OLECMDID_SETDOWNLOADSTATE
:
1417 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1418 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
1419 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
1420 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
1422 switch(V_I4(pvaIn
)) {
1424 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0
);
1425 load_state
= LD_INTERACTIVE
;
1428 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_1
);
1431 ok(0, "unexpevted V_I4(pvaIn)=%ld\n", V_I4(pvaIn
));
1435 case OLECMDID_UPDATECOMMANDS
:
1436 CHECK_EXPECT(Exec_UPDATECOMMANDS
);
1437 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1438 ok(pvaIn
== NULL
, "pvaIn=%p\n", pvaIn
);
1439 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
1441 case OLECMDID_SETTITLE
:
1442 CHECK_EXPECT2(Exec_SETTITLE
);
1443 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1444 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
1445 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
1446 ok(V_VT(pvaIn
) == VT_BSTR
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
1447 ok(V_BSTR(pvaIn
) != NULL
, "V_BSTR(pvaIn) == NULL\n"); /* TODO */
1449 case OLECMDID_HTTPEQUIV
:
1450 CHECK_EXPECT2(Exec_HTTPEQUIV
);
1451 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1455 ok(0, "unexpected command %ld\n", nCmdID
);
1460 if(IsEqualGUID(&CGID_ShellDocView
, pguidCmdGroup
)) {
1461 ok(nCmdexecopt
== 0, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1465 CHECK_EXPECT2(Exec_ShellDocView_37
);
1466 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
1467 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
1469 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
1470 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn
));
1474 ok(0, "unexpected command %ld\n", nCmdID
);
1479 if(IsEqualGUID(&CGID_MSHTML
, pguidCmdGroup
)) {
1480 ok(nCmdexecopt
== 0, "nCmdexecopts=%08lx\n", nCmdexecopt
);
1483 case IDM_PARSECOMPLETE
:
1484 CHECK_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
1485 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
1486 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
1489 ok(0, "unexpected command %ld\n", nCmdID
);
1493 if(IsEqualGUID(&CGID_Undocumented
, pguidCmdGroup
))
1494 return E_FAIL
; /* TODO */
1496 ok(0, "unexpected call\n");
1500 static IOleCommandTargetVtbl OleCommandTargetVtbl
= {
1501 OleCommandTarget_QueryInterface
,
1502 OleCommandTarget_AddRef
,
1503 OleCommandTarget_Release
,
1504 OleCommandTarget_QueryStatus
,
1505 OleCommandTarget_Exec
1508 static IOleCommandTarget OleCommandTarget
= { &OleCommandTargetVtbl
};
1510 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
1512 return QueryInterface(riid
, ppv
);
1515 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
1520 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
1525 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
1527 ok(0, "unexpected call\n");
1531 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
1532 ITypeInfo
**ppTInfo
)
1534 ok(0, "unexpected call\n");
1538 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
1539 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
1541 ok(0, "unexpected call\n");
1545 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
1546 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
1547 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1549 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
1550 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
1551 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
1552 ok(puArgErr
!= NULL
, "puArgErr == NULL\n");
1553 ok(V_VT(pVarResult
) == 0, "V_VT(pVarResult)=%d, expected 0\n", V_VT(pVarResult
));
1554 ok(wFlags
== DISPATCH_PROPERTYGET
, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags
);
1555 test_readyState(NULL
);
1557 switch(dispIdMember
) {
1558 case DISPID_AMBIENT_USERMODE
:
1559 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE
);
1560 V_VT(pVarResult
) = VT_BOOL
;
1561 V_BOOL(pVarResult
) = VARIANT_TRUE
;
1563 case DISPID_AMBIENT_DLCONTROL
:
1564 CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL
);
1566 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
:
1567 CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1569 case DISPID_AMBIENT_SILENT
:
1570 CHECK_EXPECT2(Invoke_AMBIENT_SILENT
);
1571 V_VT(pVarResult
) = VT_BOOL
;
1572 V_BOOL(pVarResult
) = VARIANT_FALSE
;
1574 case DISPID_AMBIENT_USERAGENT
:
1575 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
1577 case DISPID_AMBIENT_PALETTE
:
1578 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
1582 ok(0, "unexpected dispid %ld\n", dispIdMember
);
1586 static IDispatchVtbl DispatchVtbl
= {
1587 Dispatch_QueryInterface
,
1590 Dispatch_GetTypeInfoCount
,
1591 Dispatch_GetTypeInfo
,
1592 Dispatch_GetIDsOfNames
,
1596 static IDispatch Dispatch
= { &DispatchVtbl
};
1598 static HRESULT WINAPI
ServiceProvider_QueryInterface(IServiceProvider
*iface
,
1599 REFIID riid
, void **ppv
)
1601 return QueryInterface(riid
, ppv
);
1604 static ULONG WINAPI
ServiceProvider_AddRef(IServiceProvider
*iface
)
1609 static ULONG WINAPI
ServiceProvider_Release(IServiceProvider
*iface
)
1614 static HRESULT WINAPI
ServiceProvider_QueryService(IServiceProvider
*iface
, REFGUID guidService
,
1615 REFIID riid
, void **ppv
)
1618 * Services used by HTMLDocument:
1621 * IInternetSecurityManager
1623 * {D5F78C80-5252-11CF-90FA-00AA0042106E}
1626 * {3050F312-98B5-11CF-BB82-00AA00BDCE0B}
1627 * {53A2D5B1-D2FC-11D0-84E0-006097C9987D}
1628 * {AD7F6C62-F6BD-11D2-959B-006097C553C8}
1630 * {6D12FE80-7911-11CF-9534-0000C05BAE0B}
1631 * IElementBehaviorFactory
1632 * {3050F429-98B5-11CF-BB82-00AA00BDCE0B}
1642 if(IsEqualGUID(&IID_IHlinkFrame
, guidService
)) {
1643 ok(IsEqualGUID(&IID_IHlinkFrame
, riid
), "unexpected riid\n");
1648 return E_NOINTERFACE
;
1651 static const IServiceProviderVtbl ServiceProviderVtbl
= {
1652 ServiceProvider_QueryInterface
,
1653 ServiceProvider_AddRef
,
1654 ServiceProvider_Release
,
1655 ServiceProvider_QueryService
1658 static IServiceProvider ServiceProvider
= { &ServiceProviderVtbl
};
1660 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
1664 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IOleClientSite
, riid
))
1666 else if(IsEqualGUID(&IID_IOleDocumentSite
, riid
))
1667 *ppv
= &DocumentSite
;
1668 else if(IsEqualGUID(&IID_IDocHostUIHandler
, riid
) || IsEqualGUID(&IID_IDocHostUIHandler2
, riid
))
1669 *ppv
= &DocHostUIHandler
;
1670 else if(IsEqualGUID(&IID_IOleContainer
, riid
))
1671 *ppv
= &OleContainer
;
1672 else if(IsEqualGUID(&IID_IOleWindow
, riid
) || IsEqualGUID(&IID_IOleInPlaceSite
, riid
))
1673 *ppv
= &InPlaceSite
;
1674 else if(IsEqualGUID(&IID_IOleInPlaceUIWindow
, riid
) || IsEqualGUID(&IID_IOleInPlaceFrame
, riid
))
1675 *ppv
= &InPlaceFrame
;
1676 else if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
1677 *ppv
= &OleCommandTarget
;
1678 else if(IsEqualGUID(&IID_IDispatch
, riid
))
1680 else if(IsEqualGUID(&IID_IServiceProvider
, riid
))
1681 *ppv
= &ServiceProvider
;
1685 * {D48A6EC6-6A4A-11CF-94A7-444553540000}
1686 * {7BB0B520-B1A7-11D2-BB23-00C04F79ABCD}
1687 * {000670BA-0000-0000-C000-000000000046}
1692 return E_NOINTERFACE
;
1695 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
1697 return DefWindowProc(hwnd
, msg
, wParam
, lParam
);
1700 static void test_readyState(IUnknown
*unk
)
1702 IHTMLDocument2
*htmldoc
;
1706 static IUnknown
*_unk
;
1708 static const WCHAR wszUninitialized
[] = {'u','n','i','n','i','t','i','a','l','i','z','e','d',0};
1709 static const WCHAR wszLoading
[] = {'l','o','a','d','i','n','g',0};
1710 static const WCHAR wszInteractive
[] = {'i','n','t','e','r','a','c','t','i','v','e',0};
1711 static const WCHAR wszComplete
[] = {'c','o','m','p','l','e','t','e',0};
1713 static const LPCWSTR expected_state
[] = {
1721 if(!unk
) unk
= _unk
;
1724 hres
= IUnknown_QueryInterface(unk
, &IID_IHTMLDocument2
, (void**)&htmldoc
);
1725 ok(hres
== S_OK
, "QueryInterface(IID_IHTMLDocument2) failed: %08lx\n", hres
);
1729 hres
= IHTMLDocument2_get_readyState(htmldoc
, NULL
);
1730 ok(hres
== E_POINTER
, "get_readyState failed: %08lx, expected \n", hres
);
1732 hres
= IHTMLDocument2_get_readyState(htmldoc
, &state
);
1733 ok(hres
== S_OK
, "get_ReadyState failed: %08lx\n", hres
);
1734 ok(!lstrcmpW(state
, expected_state
[load_state
]), "unexpected state, expected %d\n", load_state
);
1736 IHTMLDocument_Release(htmldoc
);
1739 static void test_ConnectionPoint(IConnectionPointContainer
*container
, REFIID riid
)
1741 IConnectionPointContainer
*tmp_container
= NULL
;
1742 IConnectionPoint
*cp
;
1746 hres
= IConnectionPointContainer_FindConnectionPoint(container
, riid
, &cp
);
1747 ok(hres
== S_OK
, "FindConnectionPoint failed: %08lx\n", hres
);
1751 hres
= IConnectionPoint_GetConnectionInterface(cp
, &iid
);
1752 ok(hres
== S_OK
, "GetConnectionInterface failed: %08lx\n", hres
);
1753 ok(IsEqualGUID(riid
, &iid
), "wrong iid\n");
1755 hres
= IConnectionPoint_GetConnectionInterface(cp
, NULL
);
1756 ok(hres
== E_POINTER
, "GetConnectionInterface failed: %08lx, expected E_POINTER\n", hres
);
1758 hres
= IConnectionPoint_GetConnectionPointContainer(cp
, &tmp_container
);
1759 ok(hres
== S_OK
, "GetConnectionPointContainer failed: %08lx\n", hres
);
1760 ok(tmp_container
== container
, "container != tmp_container\n");
1762 IConnectionPointContainer_Release(tmp_container
);
1764 hres
= IConnectionPoint_GetConnectionPointContainer(cp
, NULL
);
1765 ok(hres
== E_POINTER
, "GetConnectionPointContainer failed: %08lx, expected E_POINTER\n", hres
);
1767 if(IsEqualGUID(&IID_IPropertyNotifySink
, riid
)) {
1770 hres
= IConnectionPoint_Advise(cp
, (IUnknown
*)&PropertyNotifySink
, &cookie
);
1771 ok(hres
== S_OK
, "Advise failed: %08lx\n", hres
);
1774 IConnectionPoint_Release(cp
);
1777 static void test_ConnectionPointContainer(IUnknown
*unk
)
1779 IConnectionPointContainer
*container
;
1782 hres
= IUnknown_QueryInterface(unk
, &IID_IConnectionPointContainer
, (void**)&container
);
1783 ok(hres
== S_OK
, "QueryInterface(IID_IConnectionPointContainer) failed: %08lx\n", hres
);
1787 test_ConnectionPoint(container
, &IID_IPropertyNotifySink
);
1788 test_ConnectionPoint(container
, &DIID_HTMLDocumentEvents
);
1789 test_ConnectionPoint(container
, &DIID_HTMLDocumentEvents2
);
1791 IConnectionPointContainer_Release(container
);
1794 static void test_Load(IPersistMoniker
*persist
)
1799 test_readyState((IUnknown
*)persist
);
1801 CreateBindCtx(0, &bind
);
1802 IBindCtx_RegisterObjectParam(bind
, (LPOLESTR
)SZ_HTML_CLIENTSITE_OBJECTPARAM
,
1803 (IUnknown
*)&ClientSite
);
1805 SET_EXPECT(GetDisplayName
);
1806 SET_EXPECT(GetHostInfo
);
1807 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
1808 SET_EXPECT(Invoke_AMBIENT_SILENT
);
1809 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
1810 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1811 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
1812 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
1813 SET_EXPECT(GetOptionKeyPath
);
1814 SET_EXPECT(GetOverrideKeyPath
);
1815 SET_EXPECT(GetWindow
);
1816 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
1817 SET_EXPECT(Exec_SETPROGRESSMAX
);
1818 SET_EXPECT(Exec_SETPROGRESSPOS
);
1819 SET_EXPECT(Exec_ShellDocView_37
);
1820 SET_EXPECT(OnChanged_READYSTATE
);
1821 SET_EXPECT(BindToStorage
);
1822 SET_EXPECT(GetContainer
);
1823 SET_EXPECT(LockContainer
);
1824 expect_LockContainer_fLock
= TRUE
;
1825 readystate_set_loading
= TRUE
;
1827 hres
= IPersistMoniker_Load(persist
, FALSE
, &Moniker
, bind
, 0x12);
1828 ok(hres
== S_OK
, "Load failed: %08lx\n", hres
);
1830 CHECK_CALLED(GetDisplayName
);
1831 CHECK_CALLED(GetHostInfo
);
1832 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
1833 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
1834 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
1835 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
1836 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
1837 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
1838 CHECK_CALLED(GetOptionKeyPath
);
1839 CHECK_CALLED(GetOverrideKeyPath
);
1840 CHECK_CALLED(GetWindow
);
1841 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
1842 CHECK_CALLED(Exec_SETPROGRESSMAX
);
1843 CHECK_CALLED(Exec_SETPROGRESSPOS
);
1844 CHECK_CALLED(Exec_ShellDocView_37
);
1845 CHECK_CALLED(OnChanged_READYSTATE
);
1846 CHECK_CALLED(BindToStorage
);
1847 CHECK_CALLED(GetContainer
);
1848 CHECK_CALLED(LockContainer
);
1850 set_clientsite
= container_locked
= TRUE
;
1852 IBindCtx_Release(bind
);
1854 test_readyState((IUnknown
*)persist
);
1857 static void test_download(void)
1862 hwnd
= FindWindowA("Internet Explorer_Hidden", NULL
);
1863 ok(hwnd
!= NULL
, "Could not find hidden window\n");
1865 test_readyState(NULL
);
1867 SET_EXPECT(SetStatusText
);
1868 SET_EXPECT(Exec_SETDOWNLOADSTATE_1
);
1869 SET_EXPECT(GetDropTarget
);
1870 SET_EXPECT(OnChanged_1005
);
1871 SET_EXPECT(OnChanged_READYSTATE
);
1872 SET_EXPECT(Exec_SETPROGRESSPOS
);
1873 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
1874 SET_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
1875 SET_EXPECT(Exec_HTTPEQUIV_DONE
);
1876 SET_EXPECT(Exec_SETTITLE
);
1877 expect_status_text
= (LPWSTR
)0xdeadbeef; /* TODO */
1879 while(!called_Exec_HTTPEQUIV_DONE
&& GetMessage(&msg
, hwnd
, 0, 0)) {
1880 TranslateMessage(&msg
);
1881 DispatchMessage(&msg
);
1884 CHECK_CALLED(SetStatusText
);
1885 CHECK_CALLED(Exec_SETDOWNLOADSTATE_1
);
1886 CHECK_CALLED(GetDropTarget
);
1887 CHECK_CALLED(OnChanged_1005
);
1888 CHECK_CALLED(OnChanged_READYSTATE
);
1889 CHECK_CALLED(Exec_SETPROGRESSPOS
);
1890 CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
1891 CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE
);
1892 CHECK_CALLED(Exec_HTTPEQUIV_DONE
);
1893 CHECK_CALLED(Exec_SETTITLE
);
1895 load_state
= LD_COMPLETE
;
1897 test_readyState(NULL
);
1900 static void test_Persist(IUnknown
*unk
)
1902 IPersistMoniker
*persist_mon
;
1903 IPersistFile
*persist_file
;
1907 hres
= IUnknown_QueryInterface(unk
, &IID_IPersistFile
, (void**)&persist_file
);
1908 ok(hres
== S_OK
, "QueryInterface(IID_IPersist) failed: %08lx\n", hres
);
1909 if(SUCCEEDED(hres
)) {
1910 hres
= IPersist_GetClassID(persist_file
, NULL
);
1911 ok(hres
== E_INVALIDARG
, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres
);
1913 hres
= IPersist_GetClassID(persist_file
, &guid
);
1914 ok(hres
== S_OK
, "GetClassID failed: %08lx\n", hres
);
1915 ok(IsEqualGUID(&CLSID_HTMLDocument
, &guid
), "guid != CLSID_HTMLDocument\n");
1917 IPersist_Release(persist_file
);
1920 hres
= IUnknown_QueryInterface(unk
, &IID_IPersistMoniker
, (void**)&persist_mon
);
1921 ok(hres
== S_OK
, "QueryInterface(IID_IPersistMoniker) failed: %08lx\n", hres
);
1922 if(SUCCEEDED(hres
)) {
1923 hres
= IPersistMoniker_GetClassID(persist_mon
, NULL
);
1924 ok(hres
== E_INVALIDARG
, "GetClassID returned: %08lx, expected E_INVALIDARG\n", hres
);
1926 hres
= IPersistMoniker_GetClassID(persist_mon
, &guid
);
1927 ok(hres
== S_OK
, "GetClassID failed: %08lx\n", hres
);
1928 ok(IsEqualGUID(&CLSID_HTMLDocument
, &guid
), "guid != CLSID_HTMLDocument\n");
1930 if(load_state
== LD_DOLOAD
)
1931 test_Load(persist_mon
);
1933 test_readyState(unk
);
1935 IPersistMoniker_Release(persist_mon
);
1939 static const OLECMDF expect_cmds
[OLECMDID_GETPRINTTEMPLATE
+1] = {
1941 OLECMDF_SUPPORTED
, /* OLECMDID_OPEN */
1942 OLECMDF_SUPPORTED
, /* OLECMDID_NEW */
1943 OLECMDF_SUPPORTED
, /* OLECMDID_SAVE */
1944 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_SAVEAS */
1945 OLECMDF_SUPPORTED
, /* OLECMDID_SAVECOPYAS */
1946 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PRINT */
1947 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PRINTPREVIEW */
1948 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PAGESETUP */
1949 OLECMDF_SUPPORTED
, /* OLECMDID_SPELL */
1950 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PROPERTIES */
1951 OLECMDF_SUPPORTED
, /* OLECMDID_CUT */
1952 OLECMDF_SUPPORTED
, /* OLECMDID_COPY */
1953 OLECMDF_SUPPORTED
, /* OLECMDID_PASTE */
1954 OLECMDF_SUPPORTED
, /* OLECMDID_PASTESPECIAL */
1955 OLECMDF_SUPPORTED
, /* OLECMDID_UNDO */
1956 OLECMDF_SUPPORTED
, /* OLECMDID_REDO */
1957 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_SELECTALL */
1958 OLECMDF_SUPPORTED
, /* OLECMDID_CLEARSELECTION */
1959 OLECMDF_SUPPORTED
, /* OLECMDID_ZOOM */
1960 OLECMDF_SUPPORTED
, /* OLECMDID_GETZOOMRANGE */
1962 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_REFRESH */
1963 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_STOP */
1965 OLECMDF_SUPPORTED
, /* OLECMDID_STOPDOWNLOAD */
1967 OLECMDF_SUPPORTED
, /* OLECMDID_DELETE */
1969 OLECMDF_SUPPORTED
, /* OLECMDID_ENABLE_INTERACTION */
1970 OLECMDF_SUPPORTED
, /* OLECMDID_ONUNLOAD */
1972 OLECMDF_SUPPORTED
, /* OLECMDID_SHOWPAGESETUP */
1973 OLECMDF_SUPPORTED
, /* OLECMDID_SHOWPRINT */
1975 OLECMDF_SUPPORTED
, /* OLECMDID_CLOSE */
1977 OLECMDF_SUPPORTED
, /* OLECMDID_SETPRINTTEMPLATE */
1978 OLECMDF_SUPPORTED
/* OLECMDID_GETPRINTTEMPLATE */
1981 static void test_OleCommandTarget(IUnknown
*unk
)
1983 IOleCommandTarget
*cmdtrg
;
1984 OLECMD cmds
[OLECMDID_GETPRINTTEMPLATE
];
1988 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
1989 ok(hres
== S_OK
, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres
);
1993 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
1994 cmds
[i
].cmdID
= i
+1;
1995 cmds
[i
].cmdf
= 0xf0f0;
1998 SET_EXPECT(QueryStatus_OPEN
);
1999 SET_EXPECT(QueryStatus_NEW
);
2000 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, sizeof(cmds
)/sizeof(cmds
[0]), cmds
, NULL
);
2001 ok(hres
== S_OK
, "QueryStatus failed: %08lx\n", hres
);
2002 CHECK_CALLED(QueryStatus_OPEN
);
2003 CHECK_CALLED(QueryStatus_NEW
);
2005 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
2006 ok(cmds
[i
].cmdID
== i
+1, "cmds[%d].cmdID canged to %lx\n", i
, cmds
[i
].cmdID
);
2007 ok(cmds
[i
].cmdf
== expect_cmds
[i
+1], "cmds[%d].cmdf=%lx, expected %x\n",
2008 i
+1, cmds
[i
].cmdf
, expect_cmds
[i
+1]);
2011 IOleCommandTarget_Release(cmdtrg
);
2014 static void test_OleCommandTarget_fail(IUnknown
*unk
)
2016 IOleCommandTarget
*cmdtrg
;
2021 {OLECMDID_OPEN
, 0xf0f0},
2022 {OLECMDID_GETPRINTTEMPLATE
+1, 0xf0f0}
2025 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
2026 ok(hres
== S_OK
, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres
);
2030 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 0, NULL
, NULL
);
2031 ok(hres
== S_OK
, "QueryStatus failed: %08lx\n", hres
);
2033 SET_EXPECT(QueryStatus_OPEN
);
2034 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 2, cmd
, NULL
);
2035 CHECK_CALLED(QueryStatus_OPEN
);
2037 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
2038 "QueryStatus failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
2039 ok(cmd
[1].cmdID
== OLECMDID_GETPRINTTEMPLATE
+1,
2040 "cmd[0].cmdID=%ld, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd
[0].cmdID
);
2041 ok(cmd
[1].cmdf
== 0, "cmd[0].cmdf=%lx, expected 0\n", cmd
[0].cmdf
);
2042 ok(cmd
[0].cmdf
== OLECMDF_SUPPORTED
,
2043 "cmd[1].cmdf=%lx, expected OLECMDF_SUPPORTED\n", cmd
[1].cmdf
);
2045 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, &IID_IHTMLDocument2
, 2, cmd
, NULL
);
2046 ok(hres
== OLECMDERR_E_UNKNOWNGROUP
,
2047 "QueryStatus failed: %08lx, expected OLECMDERR_E_UNKNOWNGROUP\n", hres
);
2049 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
2050 if(!expect_cmds
[i
]) {
2051 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_UPDATECOMMANDS
,
2052 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
2053 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
2054 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
2058 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_GETPRINTTEMPLATE
+1,
2059 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
2060 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
2061 "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
2063 IOleCommandTarget_Release(cmdtrg
);
2066 static void test_exec_onunload(IUnknown
*unk
)
2068 IOleCommandTarget
*cmdtrg
;
2072 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
2073 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget) failed: %08lx\n", hres
);
2077 memset(&var
, 0x0a, sizeof(var
));
2078 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_ONUNLOAD
,
2079 OLECMDEXECOPT_DODEFAULT
, NULL
, &var
);
2080 ok(hres
== S_OK
, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres
);
2081 ok(V_VT(&var
) == VT_BOOL
, "V_VT(var)=%d, expected VT_BOOL\n", V_VT(&var
));
2082 ok(V_BOOL(&var
) == VARIANT_TRUE
, "V_BOOL(var)=%x, expected VARIANT_TRUE\n", V_BOOL(&var
));
2084 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_ONUNLOAD
,
2085 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
2086 ok(hres
== S_OK
, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08lx\n", hres
);
2088 IOleCommandTarget_Release(cmdtrg
);
2091 static void test_exec_editmode(IUnknown
*unk
)
2093 IOleCommandTarget
*cmdtrg
;
2096 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
2097 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget) failed: %08lx\n", hres
);
2101 SET_EXPECT(SetStatusText
);
2102 SET_EXPECT(Exec_ShellDocView_37
);
2103 SET_EXPECT(GetHostInfo
);
2104 SET_EXPECT(Invoke_AMBIENT_SILENT
);
2105 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2106 SET_EXPECT(OnChanged_READYSTATE
);
2107 expect_status_text
= NULL
;
2108 readystate_set_loading
= TRUE
;
2110 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_MSHTML
, IDM_EDITMODE
,
2111 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
2112 ok(hres
== S_OK
, "Exec failed: %08lx\n", hres
);
2114 CHECK_CALLED(SetStatusText
);
2115 CHECK_CALLED(Exec_ShellDocView_37
);
2116 CHECK_CALLED(GetHostInfo
);
2117 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
2118 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2119 CHECK_CALLED(OnChanged_READYSTATE
);
2121 IOleCommandTarget_Release(cmdtrg
);
2124 static HWND
create_container_window(void)
2126 static const WCHAR wszHTMLDocumentTest
[] =
2127 {'H','T','M','L','D','o','c','u','m','e','n','t','T','e','s','t',0};
2128 static WNDCLASSEXW wndclass
= {
2129 sizeof(WNDCLASSEXW
),
2132 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
2133 wszHTMLDocumentTest
,
2137 RegisterClassExW(&wndclass
);
2138 return CreateWindowW(wszHTMLDocumentTest
, wszHTMLDocumentTest
,
2139 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, CW_USEDEFAULT
,
2140 CW_USEDEFAULT
, NULL
, NULL
, NULL
, NULL
);
2143 static HRESULT
test_DoVerb(IOleObject
*oleobj
)
2145 RECT rect
= {0,0,500,500};
2148 if(!container_locked
) {
2149 SET_EXPECT(GetContainer
);
2150 SET_EXPECT(LockContainer
);
2152 SET_EXPECT(ActivateMe
);
2153 expect_LockContainer_fLock
= TRUE
;
2155 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
, -1, container_hwnd
, &rect
);
2158 ok(hres
== S_OK
, "DoVerb failed: %08lx\n", hres
);
2160 if(!container_locked
) {
2161 CHECK_CALLED(GetContainer
);
2162 CHECK_CALLED(LockContainer
);
2163 container_locked
= TRUE
;
2165 CHECK_CALLED(ActivateMe
);
2170 #define CLIENTSITE_EXPECTPATH 0x00000001
2171 #define CLIENTSITE_SETNULL 0x00000002
2172 #define CLIENTSITE_DONTSET 0x00000004
2174 static void test_ClientSite(IOleObject
*oleobj
, DWORD flags
)
2176 IOleClientSite
*clientsite
;
2179 if(flags
& CLIENTSITE_SETNULL
) {
2180 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
2181 ok(clientsite
== &ClientSite
, "clientsite=%p, expected %p\n", clientsite
, &ClientSite
);
2183 hres
= IOleObject_SetClientSite(oleobj
, NULL
);
2184 ok(hres
== S_OK
, "SetClientSite failed: %08lx\n", hres
);
2186 set_clientsite
= FALSE
;
2189 if(flags
& CLIENTSITE_DONTSET
)
2192 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
2193 ok(hres
== S_OK
, "GetClientSite failed: %08lx\n", hres
);
2194 ok(clientsite
== (set_clientsite
? &ClientSite
: NULL
), "GetClientSite() = %p, expected %p\n",
2195 clientsite
, set_clientsite
? &ClientSite
: NULL
);
2197 if(!set_clientsite
) {
2198 SET_EXPECT(GetHostInfo
);
2199 if(flags
& CLIENTSITE_EXPECTPATH
) {
2200 SET_EXPECT(GetOptionKeyPath
);
2201 SET_EXPECT(GetOverrideKeyPath
);
2203 SET_EXPECT(GetWindow
);
2204 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
2205 SET_EXPECT(Exec_SETPROGRESSMAX
);
2206 SET_EXPECT(Exec_SETPROGRESSPOS
);
2207 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
2208 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
2209 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2210 SET_EXPECT(Invoke_AMBIENT_SILENT
);
2211 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
2212 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
2214 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
2215 ok(hres
== S_OK
, "SetClientSite failed: %08lx\n", hres
);
2217 CHECK_CALLED(GetHostInfo
);
2218 if(flags
& CLIENTSITE_EXPECTPATH
) {
2219 CHECK_CALLED(GetOptionKeyPath
);
2220 CHECK_CALLED(GetOverrideKeyPath
);
2222 CHECK_CALLED(GetWindow
);
2223 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
2224 CHECK_CALLED(Exec_SETPROGRESSMAX
);
2225 CHECK_CALLED(Exec_SETPROGRESSPOS
);
2226 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
2227 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
2228 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2229 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
2230 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
2231 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
2233 set_clientsite
= TRUE
;
2236 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
2237 ok(hres
== S_OK
, "SetClientSite failed: %08lx\n", hres
);
2239 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
2240 ok(hres
== S_OK
, "GetClientSite failed: %08lx\n", hres
);
2241 ok(clientsite
== &ClientSite
, "GetClientSite() = %p, expected %p\n", clientsite
, &ClientSite
);
2244 static void test_OnAmbientPropertyChange(IUnknown
*unk
)
2246 IOleControl
*control
= NULL
;
2249 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
2250 ok(hres
== S_OK
, "QueryInterface(IID_IOleControl failed: %08lx\n", hres
);
2254 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
2255 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_USERMODE
);
2256 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2257 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
2259 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
2260 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_DLCONTROL
);
2261 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2262 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
2264 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
2265 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2266 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
);
2267 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2268 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
2269 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
2271 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
2272 SET_EXPECT(Invoke_AMBIENT_SILENT
);
2273 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_SILENT
);
2274 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2275 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
2276 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
2278 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
2279 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_USERAGENT
);
2280 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2281 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
2283 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
2284 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_PALETTE
);
2285 ok(hres
== S_OK
, "OnAmbientChange failed: %08lx\n", hres
);
2286 CHECK_CALLED(Invoke_AMBIENT_PALETTE
);
2288 IOleControl_Release(control
);
2293 static void test_OnAmbientPropertyChange2(IUnknown
*unk
)
2295 IOleControl
*control
= NULL
;
2298 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
2299 ok(hres
== S_OK
, "QueryInterface(IID_IOleControl failed: %08lx\n", hres
);
2303 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_PALETTE
);
2304 ok(hres
== S_OK
, "OnAmbientPropertyChange failed: %08lx\n", hres
);
2306 IOleControl_Release(control
);
2309 static void test_Close(IUnknown
*unk
, BOOL set_client
)
2311 IOleObject
*oleobj
= NULL
;
2314 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
2315 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres
);
2319 SET_EXPECT(GetContainer
);
2320 SET_EXPECT(LockContainer
);
2321 expect_LockContainer_fLock
= FALSE
;
2322 hres
= IOleObject_Close(oleobj
, OLECLOSE_NOSAVE
);
2323 ok(hres
== S_OK
, "Close failed: %08lx\n", hres
);
2324 CHECK_CALLED(GetContainer
);
2325 CHECK_CALLED(LockContainer
);
2326 container_locked
= FALSE
;
2329 test_ClientSite(oleobj
, CLIENTSITE_SETNULL
|CLIENTSITE_DONTSET
);
2331 IOleObject_Release(oleobj
);
2334 static void test_OnFrameWindowActivate(IUnknown
*unk
)
2336 IOleInPlaceActiveObject
*inplaceact
;
2339 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceActiveObject
, (void**)&inplaceact
);
2340 ok(hres
== S_OK
, "QueryInterface(IID_IOleInPlaceActiveObject) failed: %08lx\n", hres
);
2344 if(set_clientsite
) {
2345 expect_OnFrameWindowActivate_fActivate
= TRUE
;
2346 SET_EXPECT(OnFrameWindowActivate
);
2347 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
2348 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2349 CHECK_CALLED(OnFrameWindowActivate
);
2351 SET_EXPECT(OnFrameWindowActivate
);
2352 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
2353 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2354 CHECK_CALLED(OnFrameWindowActivate
);
2356 expect_OnFrameWindowActivate_fActivate
= FALSE
;
2357 SET_EXPECT(OnFrameWindowActivate
);
2358 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, FALSE
);
2359 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2360 CHECK_CALLED(OnFrameWindowActivate
);
2362 expect_OnFrameWindowActivate_fActivate
= TRUE
;
2363 SET_EXPECT(OnFrameWindowActivate
);
2364 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
2365 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2366 CHECK_CALLED(OnFrameWindowActivate
);
2368 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, FALSE
);
2369 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2371 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
2372 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08lx\n", hres
);
2375 IOleInPlaceActiveObject_Release(inplaceact
);
2378 static void test_InPlaceDeactivate(IUnknown
*unk
, BOOL expect_call
)
2380 IOleInPlaceObjectWindowless
*windowlessobj
= NULL
;
2383 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObjectWindowless
,
2384 (void**)&windowlessobj
);
2385 ok(hres
== S_OK
, "QueryInterface(IID_IOleInPlaceObjectWindowless) failed: %08lx\n", hres
);
2389 if(expect_call
) SET_EXPECT(OnInPlaceDeactivate
);
2390 hres
= IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj
);
2391 ok(hres
== S_OK
, "InPlaceDeactivate failed: %08lx\n", hres
);
2392 if(expect_call
) CHECK_CALLED(OnInPlaceDeactivate
);
2394 IOleInPlaceObjectWindowless_Release(windowlessobj
);
2397 static HRESULT
test_Activate(IUnknown
*unk
, DWORD flags
)
2399 IOleObject
*oleobj
= NULL
;
2406 IOleDocumentView_Release(view
);
2409 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
2410 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres
);
2414 hres
= IOleObject_GetUserClassID(oleobj
, NULL
);
2415 ok(hres
== E_INVALIDARG
, "GetUserClassID returned: %08lx, expected E_INVALIDARG\n", hres
);
2417 hres
= IOleObject_GetUserClassID(oleobj
, &guid
);
2418 ok(hres
== S_OK
, "GetUserClassID failed: %08lx\n", hres
);
2419 ok(IsEqualGUID(&guid
, &CLSID_HTMLDocument
), "guid != CLSID_HTMLDocument\n");
2421 test_OnFrameWindowActivate(unk
);
2423 test_ClientSite(oleobj
, flags
);
2424 test_InPlaceDeactivate(unk
, FALSE
);
2426 hres
= test_DoVerb(oleobj
);
2428 IOleObject_Release(oleobj
);
2430 test_OnFrameWindowActivate(unk
);
2435 static void test_Window(IUnknown
*unk
, BOOL expect_success
)
2437 IOleInPlaceActiveObject
*activeobject
= NULL
;
2441 hres
= IOleDocumentView_QueryInterface(view
, &IID_IOleInPlaceActiveObject
, (void**)&activeobject
);
2442 ok(hres
== S_OK
, "Could not get IOleInPlaceActiveObject interface: %08lx\n", hres
);
2446 hres
= IOleInPlaceActiveObject_GetWindow(activeobject
, &tmp_hwnd
);
2448 if(expect_success
) {
2449 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
2450 ok(tmp_hwnd
== hwnd
, "tmp_hwnd=%p, expected %p\n", tmp_hwnd
, hwnd
);
2452 ok(hres
== E_FAIL
, "GetWindow returned %08lx, expected E_FAIL\n", hres
);
2453 ok(IsWindow(hwnd
), "hwnd is destroyed\n");
2456 IOleInPlaceActiveObject_Release(activeobject
);
2459 static void test_CloseView(void)
2461 IOleInPlaceSite
*inplacesite
= (IOleInPlaceSite
*)0xff00ff00;
2467 hres
= IOleDocumentView_Show(view
, FALSE
);
2468 ok(hres
== S_OK
, "Show failed: %08lx\n", hres
);
2470 hres
= IOleDocumentView_CloseView(view
, 0);
2471 ok(hres
== S_OK
, "CloseView failed: %08lx\n", hres
);
2473 hres
= IOleDocumentView_SetInPlaceSite(view
, NULL
);
2474 ok(hres
== S_OK
, "SetInPlaceSite failed: %08lx\n", hres
);
2476 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
2477 ok(hres
== S_OK
, "SetInPlaceSite failed: %08lx\n", hres
);
2478 ok(inplacesite
== NULL
, "inplacesite=%p, expected NULL\n", inplacesite
);
2481 static void test_UIDeactivate(void)
2485 if(call_UIActivate
) {
2486 SET_EXPECT(SetActiveObject
);
2488 SET_EXPECT(OnUIDeactivate
);
2491 expect_SetActiveObject_active
= FALSE
;
2492 hres
= IOleDocumentView_UIActivate(view
, FALSE
);
2493 ok(hres
== S_OK
, "UIActivate failed: %08lx\n", hres
);
2495 if(call_UIActivate
) {
2496 CHECK_CALLED(SetActiveObject
);
2497 CHECK_CALLED(HideUI
);
2498 CHECK_CALLED(OnUIDeactivate
);
2502 static void test_Hide(void)
2509 hres
= IOleDocumentView_Show(view
, FALSE
);
2510 ok(hres
== S_OK
, "Show failed: %08lx\n", hres
);
2513 static HRESULT
create_document(IUnknown
**unk
)
2515 HRESULT hres
= CoCreateInstance(&CLSID_HTMLDocument
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
2516 &IID_IUnknown
, (void**)unk
);
2517 ok(hres
== S_OK
, "CoCreateInstance failed: %08lx\n", hres
);
2521 static void test_Navigate(IUnknown
*unk
)
2523 IHlinkTarget
*hlink
;
2526 hres
= IUnknown_QueryInterface(unk
, &IID_IHlinkTarget
, (void**)&hlink
);
2527 ok(hres
== S_OK
, "QueryInterface(IID_IHlinkTarget) failed: %08lx\n", hres
);
2529 SET_EXPECT(ActivateMe
);
2530 hres
= IHlinkTarget_Navigate(hlink
, 0, NULL
);
2531 ok(hres
== S_OK
, "Navigate failed: %08lx\n", hres
);
2532 CHECK_CALLED(ActivateMe
);
2534 IHlinkTarget_Release(hlink
);
2537 static void init_test(enum load_state_t ls
) {
2538 hwnd
= last_hwnd
= NULL
;
2539 set_clientsite
= FALSE
;
2540 call_UIActivate
= FALSE
;
2544 static void test_HTMLDocument(enum load_state_t ls
)
2550 trace("Testing HTMLDocument (%s)...\n", (ls
== LD_DOLOAD
? " load" : "no load"));
2554 hres
= create_document(&unk
);
2558 test_ConnectionPointContainer(unk
);
2560 if(load_state
== LD_NO
)
2561 test_OnAmbientPropertyChange2(unk
);
2563 hres
= test_Activate(unk
, CLIENTSITE_EXPECTPATH
);
2565 IUnknown_Release(unk
);
2569 if(load_state
== LD_LOADING
)
2572 test_OleCommandTarget_fail(unk
);
2573 test_OleCommandTarget(unk
);
2574 test_OnAmbientPropertyChange(unk
);
2575 test_Window(unk
, TRUE
);
2576 test_UIDeactivate();
2577 test_OleCommandTarget(unk
);
2578 test_Window(unk
, TRUE
);
2579 test_InPlaceDeactivate(unk
, TRUE
);
2581 /* Calling test_OleCommandTarget here couses Segmentation Fault with native
2582 * MSHTML. It doesn't with Wine. */
2584 test_Window(unk
, FALSE
);
2586 test_InPlaceDeactivate(unk
, FALSE
);
2588 test_Close(unk
, FALSE
);
2590 /* Activate HTMLDocument again */
2591 test_Activate(unk
, CLIENTSITE_SETNULL
);
2592 test_Window(unk
, TRUE
);
2593 test_OleCommandTarget(unk
);
2594 test_UIDeactivate();
2595 test_InPlaceDeactivate(unk
, TRUE
);
2596 test_Close(unk
, FALSE
);
2598 /* Activate HTMLDocument again, this time without UIActivate */
2599 call_UIActivate
= FALSE
;
2600 test_Activate(unk
, CLIENTSITE_SETNULL
);
2601 test_Window(unk
, TRUE
);
2602 test_UIDeactivate();
2603 test_InPlaceDeactivate(unk
, TRUE
);
2606 test_Close(unk
, TRUE
);
2607 test_OnAmbientPropertyChange2(unk
);
2610 IOleDocumentView_Release(view
);
2613 ok(IsWindow(hwnd
), "hwnd is destroyed\n");
2615 ref
= IUnknown_Release(unk
);
2616 ok(ref
== 0, "ref=%ld, expected 0\n", ref
);
2618 ok(!IsWindow(hwnd
), "hwnd is not destroyed\n");
2621 static void test_HTMLDocument_hlink(void)
2627 trace("Testing HTMLDocument (hlink)...\n");
2629 init_test(LD_DOLOAD
);
2631 hres
= create_document(&unk
);
2635 test_ConnectionPointContainer(unk
);
2641 test_exec_onunload(unk
);
2642 test_Window(unk
, TRUE
);
2643 test_InPlaceDeactivate(unk
, TRUE
);
2644 test_Close(unk
, FALSE
);
2647 IOleDocumentView_Release(view
);
2650 ref
= IUnknown_Release(unk
);
2651 ok(ref
== 0, "ref=%ld, expected 0\n", ref
);
2654 static void test_editing_mode(void)
2661 trace("Testing HTMLDocument (edit)...\n");
2663 init_test(LD_DOLOAD
);
2665 hres
= create_document(&unk
);
2669 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
2670 ok(hres
== S_OK
, "Could not get IOleObject: %08lx\n", hres
);
2672 test_readyState(unk
);
2673 test_ConnectionPointContainer(unk
);
2674 test_ClientSite(oleobj
, CLIENTSITE_EXPECTPATH
);
2675 test_DoVerb(oleobj
);
2677 IOleObject_Release(oleobj
);
2679 test_exec_editmode(unk
);
2681 test_UIDeactivate();
2682 test_InPlaceDeactivate(unk
, TRUE
);
2683 test_Close(unk
, FALSE
);
2686 IOleDocumentView_Release(view
);
2690 ref
= IUnknown_Release(unk
);
2691 ok(ref
== 0, "ref=%ld, expected 0\n", ref
);
2694 static void gecko_installer_workaround(BOOL disable
)
2699 static BOOL has_url
= FALSE
;
2700 static char url
[2048];
2702 if(!disable
&& !has_url
)
2705 res
= RegOpenKey(HKEY_CURRENT_USER
, "Software\\Wine\\MSHTML", &hkey
);
2706 if(res
!= ERROR_SUCCESS
)
2710 DWORD type
, size
= sizeof(url
);
2712 res
= RegQueryValueEx(hkey
, "GeckoUrl", NULL
, &type
, (PVOID
)url
, &size
);
2713 if(res
== ERROR_SUCCESS
&& type
== REG_SZ
)
2716 RegDeleteValue(hkey
, "GeckoUrl");
2718 RegSetValueEx(hkey
, "GeckoUrl", 0, REG_SZ
, (PVOID
)url
, lstrlenA(url
)+1);
2726 gecko_installer_workaround(TRUE
);
2729 container_hwnd
= create_container_window();
2731 test_HTMLDocument(LD_NO
);
2732 test_HTMLDocument(LD_DOLOAD
);
2733 test_HTMLDocument_hlink();
2734 test_editing_mode();
2736 DestroyWindow(container_hwnd
);
2739 gecko_installer_workaround(FALSE
);