2 * Copyright 2005-2009 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <wine/test.h>
32 #include "docobjectservice.h"
41 #include "shdeprecated.h"
47 #include "mshtml_test.h"
49 DEFINE_GUID(GUID_NULL
,0,0,0,0,0,0,0,0,0,0,0);
50 DEFINE_GUID(IID_IProxyManager
,0x00000008,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
51 DEFINE_OLEGUID(CGID_DocHostCmdPriv
, 0x000214D4L
, 0, 0);
52 DEFINE_GUID(SID_SContainerDispatch
,0xb722be00,0x4e68,0x101b,0xa2,0xbc,0x00,0xaa,0x00,0x40,0x47,0x70);
54 #define DEFINE_EXPECT(func) \
55 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
57 #define SET_EXPECT(func) \
58 expect_ ## func = TRUE
60 #define SET_CALLED(func) \
61 called_ ## func = TRUE
63 #define CHECK_EXPECT2(func) \
65 ok(expect_ ##func, "unexpected call " #func "\n"); \
66 called_ ## func = TRUE; \
69 #define CHECK_EXPECT(func) \
71 CHECK_EXPECT2(func); \
72 expect_ ## func = FALSE; \
75 #define CHECK_CALLED(func) \
77 ok(called_ ## func, "expected " #func "\n"); \
78 expect_ ## func = called_ ## func = FALSE; \
81 #define CHECK_NOT_CALLED(func) \
83 ok(!called_ ## func, "unexpected " #func "\n"); \
84 expect_ ## func = called_ ## func = FALSE; \
87 #define CHECK_CALLED_BROKEN(func) \
89 ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
90 expect_ ## func = called_ ## func = FALSE; \
93 #define CLEAR_CALLED(func) \
94 expect_ ## func = called_ ## func = FALSE
97 static IOleDocumentView
*view
= NULL
;
98 static HWND container_hwnd
= NULL
, doc_hwnd
= NULL
, last_hwnd
= NULL
;
100 DEFINE_EXPECT(LockContainer
);
101 DEFINE_EXPECT(SetActiveObject
);
102 DEFINE_EXPECT(SetActiveObject_null
);
103 DEFINE_EXPECT(GetWindow
);
104 DEFINE_EXPECT(CanInPlaceActivate
);
105 DEFINE_EXPECT(OnInPlaceActivate
);
106 DEFINE_EXPECT(OnInPlaceActivateEx
);
107 DEFINE_EXPECT(OnUIActivate
);
108 DEFINE_EXPECT(GetWindowContext
);
109 DEFINE_EXPECT(OnUIDeactivate
);
110 DEFINE_EXPECT(OnInPlaceDeactivate
);
111 DEFINE_EXPECT(OnInPlaceDeactivateEx
);
112 DEFINE_EXPECT(GetContainer
);
113 DEFINE_EXPECT(ShowUI
);
114 DEFINE_EXPECT(ActivateMe
);
115 DEFINE_EXPECT(GetHostInfo
);
116 DEFINE_EXPECT(HideUI
);
117 DEFINE_EXPECT(GetOptionKeyPath
);
118 DEFINE_EXPECT(GetOverrideKeyPath
);
119 DEFINE_EXPECT(SetStatusText
);
120 DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT
);
121 DEFINE_EXPECT(QueryStatus_OPEN
);
122 DEFINE_EXPECT(QueryStatus_NEW
);
123 DEFINE_EXPECT(Exec_SETPROGRESSMAX
);
124 DEFINE_EXPECT(Exec_SETPROGRESSPOS
);
125 DEFINE_EXPECT(Exec_HTTPEQUIV_DONE
);
126 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0
);
127 DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1
);
128 DEFINE_EXPECT(Exec_ShellDocView_37
);
129 DEFINE_EXPECT(Exec_ShellDocView_63
);
130 DEFINE_EXPECT(Exec_ShellDocView_67
);
131 DEFINE_EXPECT(Exec_ShellDocView_84
);
132 DEFINE_EXPECT(Exec_ShellDocView_103
);
133 DEFINE_EXPECT(Exec_ShellDocView_105
);
134 DEFINE_EXPECT(Exec_ShellDocView_138
);
135 DEFINE_EXPECT(Exec_ShellDocView_140
);
136 DEFINE_EXPECT(Exec_DocHostCommandHandler_2300
);
137 DEFINE_EXPECT(Exec_UPDATECOMMANDS
);
138 DEFINE_EXPECT(Exec_SETTITLE
);
139 DEFINE_EXPECT(Exec_HTTPEQUIV
);
140 DEFINE_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
141 DEFINE_EXPECT(Exec_Explorer_38
);
142 DEFINE_EXPECT(Exec_Explorer_69
);
143 DEFINE_EXPECT(Exec_DOCCANNAVIGATE
);
144 DEFINE_EXPECT(Invoke_AMBIENT_USERMODE
);
145 DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL
);
146 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
147 DEFINE_EXPECT(Invoke_AMBIENT_SILENT
);
148 DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT
);
149 DEFINE_EXPECT(Invoke_AMBIENT_PALETTE
);
150 DEFINE_EXPECT(Invoke_OnReadyStateChange_Interactive
);
151 DEFINE_EXPECT(Invoke_OnReadyStateChange_Loading
);
152 DEFINE_EXPECT(Invoke_OnReadyStateChange_Complete
);
153 DEFINE_EXPECT(GetDropTarget
);
154 DEFINE_EXPECT(UpdateUI
);
155 DEFINE_EXPECT(Navigate
);
156 DEFINE_EXPECT(OnFrameWindowActivate
);
157 DEFINE_EXPECT(OnChanged_READYSTATE
);
158 DEFINE_EXPECT(OnChanged_1005
);
159 DEFINE_EXPECT(OnChanged_1012
);
160 DEFINE_EXPECT(OnChanged_1014
);
161 DEFINE_EXPECT(GetDisplayName
);
162 DEFINE_EXPECT(BindToStorage
);
163 DEFINE_EXPECT(IsSystemMoniker
);
164 DEFINE_EXPECT(GetBindResult
);
165 DEFINE_EXPECT(GetClassID
);
166 DEFINE_EXPECT(Abort
);
168 DEFINE_EXPECT(CreateInstance
);
169 DEFINE_EXPECT(Start
);
170 DEFINE_EXPECT(Terminate
);
171 DEFINE_EXPECT(Protocol_Read
);
172 DEFINE_EXPECT(LockRequest
);
173 DEFINE_EXPECT(UnlockRequest
);
174 DEFINE_EXPECT(OnFocus_TRUE
);
175 DEFINE_EXPECT(OnFocus_FALSE
);
176 DEFINE_EXPECT(RequestUIActivate
);
177 DEFINE_EXPECT(InPlaceFrame_SetBorderSpace
);
178 DEFINE_EXPECT(InPlaceUIWindow_SetActiveObject
);
179 DEFINE_EXPECT(GetExternal
);
180 DEFINE_EXPECT(EnableModeless_TRUE
);
181 DEFINE_EXPECT(EnableModeless_FALSE
);
182 DEFINE_EXPECT(Frame_EnableModeless_TRUE
);
183 DEFINE_EXPECT(Frame_EnableModeless_FALSE
);
184 DEFINE_EXPECT(Frame_GetWindow
);
185 DEFINE_EXPECT(TranslateUrl
);
186 DEFINE_EXPECT(Advise_Close
);
187 DEFINE_EXPECT(OnViewChange
);
188 DEFINE_EXPECT(EvaluateNewWindow
);
189 DEFINE_EXPECT(GetTravelLog
);
190 DEFINE_EXPECT(UpdateBackForwardState
);
191 DEFINE_EXPECT(FireBeforeNavigate2
);
192 DEFINE_EXPECT(FireNavigateComplete2
);
193 DEFINE_EXPECT(FireDocumentComplete
);
194 DEFINE_EXPECT(GetPendingUrl
);
195 DEFINE_EXPECT(ActiveElementChanged
);
196 DEFINE_EXPECT(IsErrorUrl
);
197 DEFINE_EXPECT(get_LocationURL
);
198 DEFINE_EXPECT(CountEntries
);
199 DEFINE_EXPECT(FindConnectionPoint
);
200 DEFINE_EXPECT(EnumConnections
);
201 DEFINE_EXPECT(EnumConnections_Next
);
202 DEFINE_EXPECT(WindowClosing
);
204 static IUnknown
*doc_unk
;
205 static IMoniker
*doc_mon
;
206 static BOOL expect_LockContainer_fLock
;
207 static BOOL expect_InPlaceUIWindow_SetActiveObject_active
= TRUE
;
208 static BOOL ipsex
, ipsw
;
209 static BOOL set_clientsite
, container_locked
;
210 static BOOL readystate_set_loading
= FALSE
, readystate_set_interactive
= FALSE
, load_from_stream
;
211 static BOOL editmode
= FALSE
, ignore_external_qi
;
212 static BOOL inplace_deactivated
, open_call
;
213 static BOOL complete
, loading_js
, loading_hash
, is_refresh
;
214 static DWORD status_code
= HTTP_STATUS_OK
;
215 static BOOL asynchronous_binding
= FALSE
;
216 static BOOL support_wbapp
, allow_new_window
;
217 static BOOL report_mime
;
218 static int stream_read
, protocol_read
;
219 static IStream
*history_stream
;
220 static enum load_state_t
{
229 static LPCOLESTR expect_status_text
= NULL
;
230 static const char *nav_url
, *nav_serv_url
, *prev_url
;
232 static const char html_page
[] =
234 "<head><link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\"></head>"
235 "<body><div>test</div></body>"
238 static const char css_data
[] = "body {color: red; margin: 0}";
240 static const WCHAR http_urlW
[] =
241 {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
243 static const WCHAR doc_url
[] = {'w','i','n','e','t','e','s','t',':','d','o','c',0};
245 #define DOCHOST_DOCCANNAVIGATE 0
246 #define WM_CONTINUE_BINDING (WM_APP+1)
248 static HRESULT
QueryInterface(REFIID riid
, void **ppv
);
249 static void test_MSHTML_QueryStatus(IHTMLDocument2
*,DWORD
);
251 #define test_readyState(u) _test_readyState(__LINE__,u)
252 static void _test_readyState(unsigned,IUnknown
*);
254 static const WCHAR wszTimesNewRoman
[] =
255 {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n',0};
256 static const WCHAR wszArial
[] =
257 {'A','r','i','a','l',0};
259 static const char *debugstr_guid(REFIID riid
)
266 sprintf(buf
, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
267 riid
->Data1
, riid
->Data2
, riid
->Data3
, riid
->Data4
[0],
268 riid
->Data4
[1], riid
->Data4
[2], riid
->Data4
[3], riid
->Data4
[4],
269 riid
->Data4
[5], riid
->Data4
[6], riid
->Data4
[7]);
274 static int strcmp_wa(LPCWSTR strw
, const char *stra
)
277 WideCharToMultiByte(CP_ACP
, 0, strw
, -1, buf
, sizeof(buf
), NULL
, NULL
);
278 return lstrcmpA(stra
, buf
);
281 static const WCHAR
*strstrW( const WCHAR
*str
, const WCHAR
*sub
)
285 const WCHAR
*p1
= str
, *p2
= sub
;
286 while (*p1
&& *p2
&& *p1
== *p2
) { p1
++; p2
++; }
287 if (!*p2
) return str
;
293 static BSTR
a2bstr(const char *str
)
298 len
= MultiByteToWideChar(CP_ACP
, 0, str
, -1, NULL
, 0);
299 ret
= SysAllocStringLen(NULL
, len
);
300 MultiByteToWideChar(CP_ACP
, 0, str
, -1, ret
, len
);
305 /* Returns true if the user interface is in English. Note that this does not
306 * presume of the formatting of dates, numbers, etc.
308 static BOOL
is_lang_english(void)
310 static HMODULE hkernel32
= NULL
;
311 static LANGID (WINAPI
*pGetThreadUILanguage
)(void) = NULL
;
312 static LANGID (WINAPI
*pGetUserDefaultUILanguage
)(void) = NULL
;
316 hkernel32
= GetModuleHandleA("kernel32.dll");
317 pGetThreadUILanguage
= (void*)GetProcAddress(hkernel32
, "GetThreadUILanguage");
318 pGetUserDefaultUILanguage
= (void*)GetProcAddress(hkernel32
, "GetUserDefaultUILanguage");
320 if (pGetThreadUILanguage
)
321 return PRIMARYLANGID(pGetThreadUILanguage()) == LANG_ENGLISH
;
322 if (pGetUserDefaultUILanguage
)
323 return PRIMARYLANGID(pGetUserDefaultUILanguage()) == LANG_ENGLISH
;
325 return PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH
;
328 static BOOL
iface_cmp(IUnknown
*iface1
, IUnknown
*iface2
)
330 IUnknown
*unk1
, *unk2
;
335 IUnknown_QueryInterface(iface1
, &IID_IUnknown
, (void**)&unk1
);
336 IUnknown_Release(unk1
);
337 IUnknown_QueryInterface(iface2
, &IID_IUnknown
, (void**)&unk2
);
338 IUnknown_Release(unk2
);
343 #define EXPECT_UPDATEUI 1
344 #define EXPECT_SETTITLE 2
346 static void test_timer(DWORD flags
)
348 BOOL
*b
= &called_Exec_SETTITLE
;
351 if(flags
& EXPECT_UPDATEUI
) {
352 SET_EXPECT(UpdateUI
);
353 SET_EXPECT(Exec_UPDATECOMMANDS
);
354 b
= &called_UpdateUI
;
356 if(flags
& EXPECT_SETTITLE
)
357 SET_EXPECT(Exec_SETTITLE
);
359 while(!*b
&& GetMessage(&msg
, doc_hwnd
, 0, 0)) {
360 TranslateMessage(&msg
);
361 DispatchMessage(&msg
);
364 if(flags
& EXPECT_UPDATEUI
) {
365 CHECK_CALLED(UpdateUI
);
366 CHECK_CALLED(Exec_UPDATECOMMANDS
);
368 if(flags
& EXPECT_SETTITLE
)
369 CHECK_CALLED(Exec_SETTITLE
);
372 static IMoniker Moniker
;
374 #define test_GetCurMoniker(u,m,v) _test_GetCurMoniker(__LINE__,u,m,v)
375 static void _test_GetCurMoniker(unsigned line
, IUnknown
*unk
, IMoniker
*exmon
, const char *exurl
)
378 IPersistMoniker
*permon
;
379 IMoniker
*mon
= (void*)0xdeadbeef;
380 BSTR doc_url
= (void*)0xdeadbeef;
387 hres
= IUnknown_QueryInterface(unk
, &IID_IPersistMoniker
, (void**)&permon
);
388 ok(hres
== S_OK
, "QueryInterface(IID_IPersistMoniker) failed: %08x\n", hres
);
392 hres
= IUnknown_QueryInterface(unk
, &IID_IHTMLDocument2
, (void**)&doc
);
393 ok(hres
== S_OK
, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres
);
395 hres
= IHTMLDocument2_get_URL(doc
, &doc_url
);
396 ok(hres
== S_OK
, "get_URL failed: %08x\n", hres
);
397 for(ptr
= doc_url
; *ptr
&& *ptr
!= '#'; ptr
++);
399 hres
= IPersistMoniker_GetCurMoniker(permon
, &mon
);
400 IPersistMoniker_Release(permon
);
404 BOOL exb
= expect_GetDisplayName
;
405 BOOL clb
= called_GetDisplayName
;
407 ok_(__FILE__
,line
)(hres
== S_OK
, "GetCurrentMoniker failed: %08x\n", hres
);
408 ok_(__FILE__
,line
)(mon
== exmon
, "mon(%p) != exmon(%p)\n", mon
, exmon
);
411 SET_EXPECT(GetDisplayName
);
412 hres
= IMoniker_GetDisplayName(mon
, NULL
, NULL
, &url
);
413 ok(hres
== S_OK
, "GetDisplayName failed: %08x\n", hres
);
415 CHECK_CALLED(GetDisplayName
);
416 expect_GetDisplayName
= exb
;
417 called_GetDisplayName
= clb
;
420 ok(!lstrcmpW(url
, doc_url
), "url %s != doc_url %s\n", wine_dbgstr_w(url
), wine_dbgstr_w(doc_url
));
422 ok(!strcmp_wa(url
, nav_serv_url
), "url = %s, expected %s\n", wine_dbgstr_w(url
), nav_serv_url
);
427 ok_(__FILE__
,line
)(hres
== S_OK
, "GetCurrentMoniker failed: %08x\n", hres
);
429 hres
= IMoniker_GetDisplayName(mon
, NULL
, NULL
, &url
);
430 ok(hres
== S_OK
, "GetDisplayName failed: %08x\n", hres
);
432 ok_(__FILE__
,line
)(!strcmp_wa(url
, exurl
), "unexpected url %s\n", wine_dbgstr_w(url
));
434 ok_(__FILE__
,line
)(!lstrcmpW(url
, doc_url
), "url %s != doc_url %s\n", wine_dbgstr_w(url
), wine_dbgstr_w(doc_url
));
438 ok_(__FILE__
,line
)(hres
== E_UNEXPECTED
,
439 "GetCurrentMoniker failed: %08x, expected E_UNEXPECTED\n", hres
);
440 ok_(__FILE__
,line
)(mon
== (IMoniker
*)0xdeadbeef, "mon=%p\n", mon
);
441 ok_(__FILE__
,line
)(!strcmp_wa(doc_url
, "about:blank"), "doc_url is not about:blank\n");
444 SysFreeString(doc_url
);
445 IHTMLDocument2_Release(doc
);
446 if(mon
&& mon
!= (void*)0xdeadbeef)
447 IMoniker_Release(mon
);
450 #define test_current_url(a,b) _test_current_url(__LINE__,a,b)
451 static void _test_current_url(unsigned line
, IUnknown
*unk
, const char *exurl
)
457 hres
= IUnknown_QueryInterface(unk
, &IID_IHTMLDocument2
, (void**)&doc
);
458 ok_(__FILE__
,line
)(hres
== S_OK
, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres
);
460 hres
= IHTMLDocument2_get_URL(doc
, &url
);
461 ok_(__FILE__
,line
)(hres
== S_OK
, "get_URL failed: %08x\n", hres
);
462 ok_(__FILE__
,line
)(!strcmp_wa(url
, exurl
), "Unexpected URL %s, expected %s\n", wine_dbgstr_w(url
), exurl
);
465 IHTMLDocument2_Release(doc
);
468 DEFINE_GUID(IID_External_unk
,0x30510406,0x98B5,0x11CF,0xBB,0x82,0x00,0xAA,0x00,0xBD,0xCE,0x0B);
470 static HRESULT WINAPI
External_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
474 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IDispatch
, riid
)) {
479 if(IsEqualGUID(&IID_IProxyManager
, riid
))
480 return E_NOINTERFACE
; /* TODO */
481 if(IsEqualGUID(&IID_IDispatchEx
, riid
))
482 return E_NOINTERFACE
; /* TODO */
483 if(IsEqualGUID(&IID_External_unk
, riid
))
484 return E_NOINTERFACE
; /* TODO */
486 if(!ignore_external_qi
)
487 ok(0, "unexpected riid: %s\n", debugstr_guid(riid
));
488 return E_NOINTERFACE
;
491 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
496 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
501 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
503 ok(0, "unexpected call\n");
507 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
510 ok(0, "unexpected call\n");
514 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
515 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
517 ok(0, "unexpected call\n");
521 static HRESULT WINAPI
External_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
522 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
523 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
525 ok(0, "unexpected call\n");
529 static const IDispatchVtbl ExternalVtbl
= {
530 External_QueryInterface
,
533 Dispatch_GetTypeInfoCount
,
534 Dispatch_GetTypeInfo
,
535 Dispatch_GetIDsOfNames
,
539 static IDispatch External
= { &ExternalVtbl
};
541 static HRESULT WINAPI
Protocol_QueryInterface(IInternetProtocol
*iface
, REFIID riid
, void **ppv
)
543 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IInternetProtocol
, riid
)) {
549 return E_NOINTERFACE
;
552 static ULONG WINAPI
Protocol_AddRef(IInternetProtocol
*iface
)
557 static ULONG WINAPI
Protocol_Release(IInternetProtocol
*iface
)
562 static HRESULT WINAPI
Protocol_Start(IInternetProtocol
*iface
, LPCWSTR szUrl
,
563 IInternetProtocolSink
*pOIProtSink
, IInternetBindInfo
*pOIBindInfo
,
564 DWORD grfPI
, HANDLE_PTR dwReserved
)
570 static const WCHAR wszTextCss
[] = {'t','e','x','t','/','c','s','s',0};
571 static const WCHAR empty_str
= {0};
575 ok(pOIProtSink
!= NULL
, "pOIProtSink == NULL\n");
576 ok(pOIBindInfo
!= NULL
, "pOIBindInfo == NULL\n");
577 ok(!grfPI
, "grfPI = %x\n", grfPI
);
578 ok(!dwReserved
, "dwReserved = %lx\n", dwReserved
);
580 memset(&bindinfo
, 0, sizeof(bindinfo
));
581 bindinfo
.cbSize
= sizeof(bindinfo
);
582 hres
= IInternetBindInfo_GetBindInfo(pOIBindInfo
, &bindf
, &bindinfo
);
583 ok(hres
== S_OK
, "GetBindInfo failed: %08x\n", hres
);
584 ok(bindf
== (BINDF_FROMURLMON
|BINDF_PULLDATA
|BINDF_NEEDFILE
|BINDF_ASYNCSTORAGE
|BINDF_ASYNCHRONOUS
),
585 "bindf = %x\n", bindf
);
587 ok(bindinfo
.cbSize
== sizeof(bindinfo
), "bindinfo.cbSize=%d\n", bindinfo
.cbSize
);
588 ok(bindinfo
.szExtraInfo
== NULL
, "bindinfo.szExtraInfo=%p\n", bindinfo
.szExtraInfo
);
589 /* TODO: test stgmedData */
590 ok(bindinfo
.grfBindInfoF
== 0, "bindinfo.grfBinfInfoF=%08x\n", bindinfo
.grfBindInfoF
);
591 ok(bindinfo
.dwBindVerb
== 0, "bindinfo.dwBindVerb=%d\n", bindinfo
.dwBindVerb
);
592 ok(bindinfo
.szCustomVerb
== 0, "bindinfo.szCustomVerb=%p\n", bindinfo
.szCustomVerb
);
593 ok(bindinfo
.cbstgmedData
== 0, "bindinfo.cbstgmedData=%d\n", bindinfo
.cbstgmedData
);
594 ok(bindinfo
.dwOptions
== 0x80000 ||
595 bindinfo
.dwOptions
== 0x4080000, /* win2k3 */
596 "bindinfo.dwOptions=%x\n", bindinfo
.dwOptions
);
597 ok(bindinfo
.dwOptionsFlags
== 0, "bindinfo.dwOptionsFlags=%d\n", bindinfo
.dwOptionsFlags
);
598 /* TODO: test dwCodePage */
599 /* TODO: test securityAttributes */
600 ok(IsEqualGUID(&IID_NULL
, &bindinfo
.iid
), "unexpected bindinfo.iid\n");
601 ok(bindinfo
.pUnk
== NULL
, "bindinfo.pUnk=%p\n", bindinfo
.pUnk
);
602 ok(bindinfo
.dwReserved
== 0, "bindinfo.dwReserved=%d\n", bindinfo
.dwReserved
);
604 hres
= IInternetProtocolSink_ReportProgress(pOIProtSink
,
605 BINDSTATUS_CACHEFILENAMEAVAILABLE
, &empty_str
);
606 ok(hres
== S_OK
, "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres
);
609 hres
= IInternetProtocolSink_ReportProgress(pOIProtSink
,
610 BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE
, wszTextCss
);
612 "ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE) failed: %08x\n", hres
);
615 hres
= IInternetProtocolSink_ReportData(pOIProtSink
,
616 BSCF_FIRSTDATANOTIFICATION
| BSCF_LASTDATANOTIFICATION
, 13, 13);
617 ok(hres
== S_OK
, "ReportData failed: %08x\n", hres
);
619 hres
= IInternetProtocolSink_ReportResult(pOIProtSink
, S_OK
, 0, NULL
);
620 ok(hres
== S_OK
, "ReportResult failed: %08x\n", hres
);
625 static HRESULT WINAPI
Protocol_Continue(IInternetProtocol
*iface
,
626 PROTOCOLDATA
*pProtocolData
)
628 ok(0, "unexpected call\n");
632 static HRESULT WINAPI
Protocol_Abort(IInternetProtocol
*iface
, HRESULT hrReason
,
635 ok(0, "unexpected call\n");
639 static HRESULT WINAPI
Protocol_Terminate(IInternetProtocol
*iface
, DWORD dwOptions
)
641 CHECK_EXPECT(Terminate
);
645 static HRESULT WINAPI
Protocol_Suspend(IInternetProtocol
*iface
)
647 ok(0, "unexpected call\n");
651 static HRESULT WINAPI
Protocol_Resume(IInternetProtocol
*iface
)
653 ok(0, "unexpected call\n");
657 static HRESULT WINAPI
Protocol_Read(IInternetProtocol
*iface
, void *pv
,
658 ULONG cb
, ULONG
*pcbRead
)
660 CHECK_EXPECT2(Protocol_Read
);
662 ok(pv
!= NULL
, "pv == NULL\n");
663 ok(cb
> sizeof(css_data
), "cb < sizeof(css_data)\n");
664 ok(pcbRead
!= NULL
, "pcbRead == NULL\n");
665 ok(!*pcbRead
|| *pcbRead
==sizeof(css_data
)-1, "*pcbRead=%d\n", *pcbRead
);
670 protocol_read
+= *pcbRead
= sizeof(css_data
)-1;
671 memcpy(pv
, css_data
, sizeof(css_data
)-1);
675 static HRESULT WINAPI
Protocol_Seek(IInternetProtocol
*iface
,
676 LARGE_INTEGER dlibMove
, DWORD dwOrigin
, ULARGE_INTEGER
*plibNewPosition
)
678 ok(0, "unexpected call\n");
682 static HRESULT WINAPI
Protocol_LockRequest(IInternetProtocol
*iface
, DWORD dwOptions
)
684 CHECK_EXPECT(LockRequest
);
688 static HRESULT WINAPI
Protocol_UnlockRequest(IInternetProtocol
*iface
)
690 CHECK_EXPECT(UnlockRequest
);
694 static const IInternetProtocolVtbl ProtocolVtbl
= {
695 Protocol_QueryInterface
,
706 Protocol_LockRequest
,
707 Protocol_UnlockRequest
710 static IInternetProtocol Protocol
= { &ProtocolVtbl
};
712 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFIID riid
, void **ppv
)
714 if(!IsEqualGUID(&IID_IInternetProtocolInfo
, riid
))
715 ok(0, "unexpected call\n");
716 return E_NOINTERFACE
;
719 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
724 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
729 static HRESULT WINAPI
ClassFactory_CreateInstance(IClassFactory
*iface
, IUnknown
*pOuter
,
730 REFIID riid
, void **ppv
)
732 if(IsEqualGUID(&IID_IInternetProtocolInfo
, riid
))
733 return E_NOINTERFACE
;
735 CHECK_EXPECT(CreateInstance
);
736 ok(ppv
!= NULL
, "ppv == NULL\n");
742 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL dolock
)
744 ok(0, "unexpected call\n");
748 static const IClassFactoryVtbl ClassFactoryVtbl
= {
749 ClassFactory_QueryInterface
,
751 ClassFactory_Release
,
752 ClassFactory_CreateInstance
,
753 ClassFactory_LockServer
756 static IClassFactory ClassFactory
= { &ClassFactoryVtbl
};
758 static HRESULT WINAPI
HlinkFrame_QueryInterface(IHlinkFrame
*iface
, REFIID riid
, void **ppv
)
760 ok(0, "unexpected call\n");
764 static ULONG WINAPI
HlinkFrame_AddRef(IHlinkFrame
*iface
)
769 static ULONG WINAPI
HlinkFrame_Release(IHlinkFrame
*iface
)
774 static HRESULT WINAPI
HlinkFrame_SetBrowseContext(IHlinkFrame
*iface
,
775 IHlinkBrowseContext
*pihlbc
)
777 ok(0, "unexpected call\n");
781 static HRESULT WINAPI
HlinkFrame_GetBrowseContext(IHlinkFrame
*iface
,
782 IHlinkBrowseContext
**ppihlbc
)
784 ok(0, "unexpected call\n");
788 static HRESULT WINAPI
HlinkFrame_Navigate(IHlinkFrame
*iface
, DWORD grfHLNF
, LPBC pbc
,
789 IBindStatusCallback
*pibsc
, IHlink
*pihlNavigate
)
793 CHECK_EXPECT(Navigate
);
795 ok(grfHLNF
== 0, "grfHLNF=%d, expected 0\n", grfHLNF
);
796 ok(pbc
!= NULL
, "pbc == NULL\n");
797 ok(pibsc
!= NULL
, "pubsc == NULL\n");
798 ok(pihlNavigate
!= NULL
, "puhlNavigate == NULL\n");
801 LPWSTR frame_name
= (LPWSTR
)0xdeadbeef;
802 LPWSTR location
= (LPWSTR
)0xdeadbeef;
804 IMoniker
*mon
= NULL
;
805 DWORD site_data
= 0xdeadbeef;
807 hres
= IHlink_GetTargetFrameName(pihlNavigate
, &frame_name
);
808 ok(hres
== S_FALSE
, "GetTargetFrameName failed: %08x\n", hres
);
809 ok(frame_name
== NULL
, "frame_name = %p\n", frame_name
);
811 hres
= IHlink_GetMonikerReference(pihlNavigate
, 1, &mon
, &location
);
812 ok(hres
== S_OK
, "GetMonikerReference failed: %08x\n", hres
);
813 ok(location
== NULL
, "location = %p\n", location
);
814 ok(mon
!= NULL
, "mon == NULL\n");
816 hres
= IMoniker_GetDisplayName(mon
, NULL
, NULL
, &location
);
817 ok(hres
== S_OK
, "GetDisplayName failed: %08x\n", hres
);
818 ok(!strcmp_wa(location
, nav_url
), "unexpected display name %s, expected %s\n", wine_dbgstr_w(location
), nav_url
);
819 CoTaskMemFree(location
);
820 IMoniker_Release(mon
);
822 hres
= IHlink_GetHlinkSite(pihlNavigate
, &site
, &site_data
);
823 ok(hres
== S_OK
, "GetHlinkSite failed: %08x\n", hres
);
824 ok(site
== NULL
, "site = %p\n, expected NULL\n", site
);
825 ok(site_data
== 0xdeadbeef, "site_data = %x\n", site_data
);
831 static HRESULT WINAPI
HlinkFrame_OnNavigate(IHlinkFrame
*iface
, DWORD grfHLNF
,
832 IMoniker
*pimkTarget
, LPCWSTR pwzLocation
, LPCWSTR pwzFriendlyName
, DWORD dwreserved
)
834 ok(0, "unexpected call\n");
838 static HRESULT WINAPI
HlinkFrame_UpdateHlink(IHlinkFrame
*iface
, ULONG uHLID
,
839 IMoniker
*pimkTarget
, LPCWSTR pwzLocation
, LPCWSTR pwzFriendlyName
)
841 ok(0, "unexpected call\n");
845 static const IHlinkFrameVtbl HlinkFrameVtbl
= {
846 HlinkFrame_QueryInterface
,
849 HlinkFrame_SetBrowseContext
,
850 HlinkFrame_GetBrowseContext
,
852 HlinkFrame_OnNavigate
,
853 HlinkFrame_UpdateHlink
856 static IHlinkFrame HlinkFrame
= { &HlinkFrameVtbl
};
858 static HRESULT WINAPI
NewWindowManager_QueryInterface(INewWindowManager
*iface
, REFIID riid
, void **ppv
)
860 ok(0, "unexpected call\n");
861 return E_NOINTERFACE
;
864 static ULONG WINAPI
NewWindowManager_AddRef(INewWindowManager
*iface
)
869 static ULONG WINAPI
NewWindowManager_Release(INewWindowManager
*iface
)
874 static HRESULT WINAPI
NewWindowManager_EvaluateNewWindow(INewWindowManager
*iface
, LPCWSTR pszUrl
,
875 LPCWSTR pszName
, LPCWSTR pszUrlContext
, LPCWSTR pszFeatures
, BOOL fReplace
, DWORD dwFlags
,
876 DWORD dwUserActionTime
)
878 CHECK_EXPECT(EvaluateNewWindow
);
880 ok(!strcmp_wa(pszUrl
, "about:blank"), "pszUrl = %s\n", wine_dbgstr_w(pszUrl
));
881 ok(!strcmp_wa(pszName
, "test"), "pszName = %s\n", wine_dbgstr_w(pszName
));
882 ok(!strcmp_wa(pszUrlContext
, prev_url
), "pszUrlContext = %s\n", wine_dbgstr_w(pszUrlContext
));
883 ok(!pszFeatures
, "pszFeatures = %s\n", wine_dbgstr_w(pszFeatures
));
884 ok(!fReplace
, "fReplace = %x\n", fReplace
);
885 ok(dwFlags
== (allow_new_window
? 0 : NWMF_FIRST
), "dwFlags = %x\n", dwFlags
);
886 ok(!dwUserActionTime
, "dwUserActionime = %d\n", dwUserActionTime
);
888 return allow_new_window
? S_OK
: E_FAIL
;
891 static const INewWindowManagerVtbl NewWindowManagerVtbl
= {
892 NewWindowManager_QueryInterface
,
893 NewWindowManager_AddRef
,
894 NewWindowManager_Release
,
895 NewWindowManager_EvaluateNewWindow
898 static INewWindowManager NewWindowManager
= { &NewWindowManagerVtbl
};
900 static HRESULT WINAPI
PropertyNotifySink_QueryInterface(IPropertyNotifySink
*iface
,
901 REFIID riid
, void**ppv
)
903 if(IsEqualGUID(&IID_IPropertyNotifySink
, riid
)) {
908 ok(0, "unexpected call\n");
909 return E_NOINTERFACE
;
912 static ULONG WINAPI
PropertyNotifySink_AddRef(IPropertyNotifySink
*iface
)
917 static ULONG WINAPI
PropertyNotifySink_Release(IPropertyNotifySink
*iface
)
922 static HRESULT WINAPI
PropertyNotifySink_OnChanged(IPropertyNotifySink
*iface
, DISPID dispID
)
925 case DISPID_READYSTATE
:
926 CHECK_EXPECT2(OnChanged_READYSTATE
);
928 if(!readystate_set_interactive
)
929 test_MSHTML_QueryStatus(NULL
, OLECMDF_SUPPORTED
930 | (editmode
&& (load_state
== LD_INTERACTIVE
|| load_state
== LD_COMPLETE
)
931 ? OLECMDF_ENABLED
: 0));
933 if(readystate_set_loading
) {
934 readystate_set_loading
= FALSE
;
935 load_state
= LD_LOADING
;
937 if(!editmode
|| load_state
!= LD_LOADING
|| !called_Exec_Explorer_69
)
938 test_readyState(NULL
);
941 CHECK_EXPECT2(OnChanged_1005
);
943 test_readyState(NULL
);
944 readystate_set_interactive
= (load_state
!= LD_INTERACTIVE
);
947 CHECK_EXPECT2(OnChanged_1012
);
950 CHECK_EXPECT2(OnChanged_1014
);
967 ok(0, "unexpected id %d\n", dispID
);
971 static HRESULT WINAPI
PropertyNotifySink_OnRequestEdit(IPropertyNotifySink
*iface
, DISPID dispID
)
973 ok(0, "unexpected call\n");
977 static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
= {
978 PropertyNotifySink_QueryInterface
,
979 PropertyNotifySink_AddRef
,
980 PropertyNotifySink_Release
,
981 PropertyNotifySink_OnChanged
,
982 PropertyNotifySink_OnRequestEdit
985 static IPropertyNotifySink PropertyNotifySink
= { &PropertyNotifySinkVtbl
};
987 static HRESULT WINAPI
Stream_QueryInterface(IStream
*iface
, REFIID riid
, void **ppv
)
989 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_ISequentialStream
, riid
) || IsEqualGUID(&IID_IStream
, riid
)) {
994 ok(0, "unexpected call %s\n", debugstr_guid(riid
));
996 return E_NOINTERFACE
;
999 static ULONG WINAPI
Stream_AddRef(IStream
*iface
)
1004 static ULONG WINAPI
Stream_Release(IStream
*iface
)
1009 static HRESULT WINAPI
Stream_Read(IStream
*iface
, void *pv
,
1010 ULONG cb
, ULONG
*pcbRead
)
1012 CHECK_EXPECT2(Read
);
1013 ok(pv
!= NULL
, "pv == NULL\n");
1014 ok(cb
> sizeof(html_page
), "cb = %d\n", cb
);
1015 ok(pcbRead
!= NULL
, "pcbRead == NULL\n");
1016 ok(!*pcbRead
, "*pcbRead = %d\n", *pcbRead
);
1021 memcpy(pv
, html_page
, sizeof(html_page
)-1);
1022 stream_read
+= *pcbRead
= sizeof(html_page
)-1;
1026 static HRESULT WINAPI
Stream_Write(IStream
*iface
, const void *pv
,
1027 ULONG cb
, ULONG
*pcbWritten
)
1029 ok(0, "unexpected call\n");
1033 static HRESULT WINAPI
Stream_Seek(IStream
*iface
, LARGE_INTEGER dlibMove
,
1034 DWORD dwOrigin
, ULARGE_INTEGER
*plibNewPosition
)
1036 ok(0, "unexpected call\n");
1040 static HRESULT WINAPI
Stream_SetSize(IStream
*iface
, ULARGE_INTEGER libNewSize
)
1042 ok(0, "unexpected call\n");
1046 static HRESULT WINAPI
Stream_CopyTo(IStream
*iface
, IStream
*pstm
,
1047 ULARGE_INTEGER cb
, ULARGE_INTEGER
*pcbRead
, ULARGE_INTEGER
*pcbWritten
)
1049 ok(0, "unexpected call\n");
1053 static HRESULT WINAPI
Stream_Commit(IStream
*iface
, DWORD grfCommitFlags
)
1055 ok(0, "unexpected call\n");
1059 static HRESULT WINAPI
Stream_Revert(IStream
*iface
)
1061 ok(0, "unexpected call\n");
1065 static HRESULT WINAPI
Stream_LockRegion(IStream
*iface
, ULARGE_INTEGER libOffset
,
1066 ULARGE_INTEGER cb
, DWORD dwLockType
)
1068 ok(0, "unexpected call\n");
1072 static HRESULT WINAPI
Stream_UnlockRegion(IStream
*iface
,
1073 ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
)
1075 ok(0, "unexpected call\n");
1079 static HRESULT WINAPI
Stream_Stat(IStream
*iface
, STATSTG
*pstatstg
,
1082 ok(0, "unexpected call\n");
1086 static HRESULT WINAPI
Stream_Clone(IStream
*iface
, IStream
**ppstm
)
1088 ok(0, "unexpected call\n");
1092 static const IStreamVtbl StreamVtbl
= {
1093 Stream_QueryInterface
,
1104 Stream_UnlockRegion
,
1109 static IStream Stream
= { &StreamVtbl
};
1111 static HRESULT WINAPI
WinInetHttpInfo_QueryInterface(
1112 IWinInetHttpInfo
* This
,
1116 ok(0, "unexpected call\n");
1117 return E_NOINTERFACE
;
1120 static ULONG WINAPI
WinInetHttpInfo_AddRef(
1121 IWinInetHttpInfo
* This
)
1126 static ULONG WINAPI
WinInetHttpInfo_Release(
1127 IWinInetHttpInfo
* This
)
1132 static HRESULT WINAPI
WinInetHttpInfo_QueryOption(
1133 IWinInetHttpInfo
* This
,
1138 return E_NOTIMPL
; /* TODO */
1141 static HRESULT WINAPI
WinInetHttpInfo_QueryInfo(
1142 IWinInetHttpInfo
* This
,
1149 ok(pdwReserved
== NULL
, "pdwReserved != NULL\n");
1151 if(dwOption
== (HTTP_QUERY_STATUS_CODE
|HTTP_QUERY_FLAG_NUMBER
)) {
1152 ok(pBuffer
!= NULL
, "pBuffer == NULL\n");
1153 ok(*pcbBuf
== sizeof(DWORD
), "*pcbBuf = %d\n", *pcbBuf
);
1154 ok(pdwFlags
== NULL
, "*pdwFlags != NULL\n");
1155 *((DWORD
*)pBuffer
) = status_code
;
1159 return E_NOTIMPL
; /* TODO */
1162 static const IWinInetHttpInfoVtbl WinInetHttpInfoVtbl
= {
1163 WinInetHttpInfo_QueryInterface
,
1164 WinInetHttpInfo_AddRef
,
1165 WinInetHttpInfo_Release
,
1166 WinInetHttpInfo_QueryOption
,
1167 WinInetHttpInfo_QueryInfo
1170 static IWinInetHttpInfo WinInetHttpInfo
= { &WinInetHttpInfoVtbl
};
1172 static HRESULT WINAPI
Binding_QueryInterface(IBinding
*iface
, REFIID riid
, void **ppv
)
1174 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1179 if(IsEqualGUID(&IID_IWinInetInfo
, riid
) || IsEqualGUID(&IID_IWinInetHttpInfo
, riid
)) {
1180 *ppv
= &WinInetHttpInfo
;
1184 ok(0, "unexpected call\n");
1185 return E_NOINTERFACE
;
1188 static ULONG WINAPI
Binding_AddRef(IBinding
*iface
)
1193 static ULONG WINAPI
Binding_Release(IBinding
*iface
)
1198 static HRESULT WINAPI
Binding_Abort(IBinding
*iface
)
1200 CHECK_EXPECT(Abort
);
1201 if(asynchronous_binding
)
1202 PeekMessage(NULL
, container_hwnd
, WM_CONTINUE_BINDING
, WM_CONTINUE_BINDING
, PM_REMOVE
);
1206 static HRESULT WINAPI
Binding_Suspend(IBinding
*iface
)
1208 ok(0, "unexpected call\n");
1212 static HRESULT WINAPI
Binding_Resume(IBinding
*iface
)
1214 ok(0, "unexpected call\n");
1218 static HRESULT WINAPI
Binding_SetPriority(IBinding
*iface
, LONG nPriority
)
1220 ok(0, "unexpected call\n");
1224 static HRESULT WINAPI
Binding_GetPriority(IBinding
*iface
, LONG
*pnPriority
)
1226 ok(0, "unexpected call\n");
1230 static HRESULT WINAPI
Binding_GetBindResult(IBinding
*iface
, CLSID
*pclsidProtocol
,
1231 DWORD
*pdwResult
, LPOLESTR
*pszResult
, DWORD
*pdwReserved
)
1233 CHECK_EXPECT(GetBindResult
);
1237 static const IBindingVtbl BindingVtbl
= {
1238 Binding_QueryInterface
,
1244 Binding_SetPriority
,
1245 Binding_GetPriority
,
1246 Binding_GetBindResult
1249 static IBinding Binding
= { &BindingVtbl
};
1251 DEFINE_GUID(IID_IMoniker_unk
,0xA158A630,0xED6F,0x45FB,0xB9,0x87,0xF6,0x86,0x76,0xF5,0x77,0x52);
1252 DEFINE_GUID(IID_IMoniker_unk2
, 0x79EAC9D3,0xBAF9,0x11CE,0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B);
1254 static HRESULT WINAPI
Moniker_QueryInterface(IMoniker
*iface
, REFIID riid
, void **ppv
)
1258 if(IsEqualGUID(&IID_IMoniker_unk
, riid
))
1259 return E_NOINTERFACE
; /* TODO */
1260 if(IsEqualGUID(&IID_IMoniker_unk2
, riid
))
1261 return E_NOINTERFACE
; /* TODO */
1263 ok(0, "unexpected riid: %s\n", debugstr_guid(riid
));
1264 return E_NOINTERFACE
;
1267 static ULONG WINAPI
Moniker_AddRef(IMoniker
*iface
)
1272 static ULONG WINAPI
Moniker_Release(IMoniker
*iface
)
1277 static HRESULT WINAPI
Moniker_GetClassID(IMoniker
*iface
, CLSID
*pClassID
)
1279 CHECK_EXPECT(GetClassID
);
1280 ok(IsEqualGUID(pClassID
, &IID_NULL
), "pClassID = %s\n", debugstr_guid(pClassID
));
1284 static HRESULT WINAPI
Moniker_IsDirty(IMoniker
*iface
)
1286 ok(0, "unexpected call\n");
1290 static HRESULT WINAPI
Moniker_Load(IMoniker
*iface
, IStream
*pStm
)
1292 ok(0, "unexpected call\n");
1296 static HRESULT WINAPI
Moniker_Save(IMoniker
*iface
, IStream
*pStm
, BOOL fClearDirty
)
1298 ok(0, "unexpected call\n");
1302 static HRESULT WINAPI
Moniker_GetSizeMax(IMoniker
*iface
, ULARGE_INTEGER
*pcbSize
)
1304 ok(0, "unexpected call\n");
1308 static HRESULT WINAPI
Moniker_BindToObject(IMoniker
*iface
, IBindCtx
*pcb
, IMoniker
*pmkToLeft
,
1309 REFIID riidResult
, void **ppvResult
)
1311 ok(0, "unexpected call\n");
1315 static void test_binding_ui(IUnknown
*unk
)
1317 IWindowForBindingUI
*binding_ui
;
1318 IServiceProvider
*serv_prov
;
1322 hres
= IUnknown_QueryInterface(unk
, &IID_IServiceProvider
, (void**)&serv_prov
);
1323 ok(hres
== S_OK
, "Could not get IServiceProvider: %08x\n", hres
);
1325 hres
= IServiceProvider_QueryService(serv_prov
, &IID_IWindowForBindingUI
, &IID_IWindowForBindingUI
,
1326 (void**)&binding_ui
);
1327 ok(hres
== S_OK
, "Could not get IWindowForBindingUI: %08x\n", hres
);
1329 hres
= IWindowForBindingUI_GetWindow(binding_ui
, &IID_IHttpSecurity
, &binding_hwnd
);
1330 ok(hres
== S_OK
, "GetWindow(IID_IHttpSecurity) failed: %08x\n", hres
);
1332 ok(binding_hwnd
== doc_hwnd
, "binding_hwnd != doc_hwnd\n");
1334 todo_wine
ok(binding_hwnd
!= NULL
, "binding_hwnd == NULL\n");
1336 hres
= IWindowForBindingUI_GetWindow(binding_ui
, &IID_IAuthenticate
, &binding_hwnd
);
1337 ok(hres
== S_OK
, "GetWindow(IID_IHttpSecurity) failed: %08x\n", hres
);
1339 ok(binding_hwnd
== doc_hwnd
, "binding_hwnd != doc_hwnd\n");
1341 todo_wine
ok(binding_hwnd
!= NULL
, "binding_hwnd == NULL\n");
1343 hres
= IWindowForBindingUI_GetWindow(binding_ui
, &IID_IWindowForBindingUI
, &binding_hwnd
);
1344 ok(hres
== S_OK
, "GetWindow(IID_IHttpSecurity) failed: %08x\n", hres
);
1346 ok(binding_hwnd
== doc_hwnd
, "binding_hwnd != doc_hwnd\n");
1348 todo_wine
ok(binding_hwnd
!= NULL
, "binding_hwnd == NULL\n");
1350 IWindowForBindingUI_Release(binding_ui
);
1351 IServiceProvider_Release(serv_prov
);
1354 static void continue_binding(IBindStatusCallback
*callback
)
1356 FORMATETC formatetc
= {0xc02d, NULL
, 1, -1, TYMED_ISTREAM
};
1357 STGMEDIUM stgmedium
;
1360 static const WCHAR wszTextHtml
[] = {'t','e','x','t','/','h','t','m','l',0};
1362 test_binding_ui((IUnknown
*)callback
);
1365 hres
= IBindStatusCallback_OnProgress(callback
, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE
,
1367 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres
);
1370 hres
= IBindStatusCallback_OnProgress(callback
, sizeof(html_page
)-1, sizeof(html_page
)-1,
1371 BINDSTATUS_BEGINDOWNLOADDATA
, doc_url
);
1372 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres
);
1373 if(status_code
!= HTTP_STATUS_OK
) {
1374 CHECK_CALLED_BROKEN(IsErrorUrl
);
1375 SET_EXPECT(IsErrorUrl
);
1379 stgmedium
.tymed
= TYMED_ISTREAM
;
1380 U(stgmedium
).pstm
= &Stream
;
1381 stgmedium
.pUnkForRelease
= (IUnknown
*)&Moniker
;
1382 hres
= IBindStatusCallback_OnDataAvailable(callback
,
1383 BSCF_FIRSTDATANOTIFICATION
|BSCF_LASTDATANOTIFICATION
,
1384 sizeof(html_page
)-1, &formatetc
, &stgmedium
);
1385 ok(hres
== S_OK
, "OnDataAvailable failed: %08x\n", hres
);
1388 hres
= IBindStatusCallback_OnProgress(callback
, sizeof(html_page
)-1, sizeof(html_page
)-1,
1389 BINDSTATUS_ENDDOWNLOADDATA
, NULL
);
1390 ok(hres
== S_OK
, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08x\n", hres
);
1392 SET_EXPECT(GetBindResult
);
1393 hres
= IBindStatusCallback_OnStopBinding(callback
, S_OK
, NULL
);
1394 ok(hres
== S_OK
, "OnStopBinding failed: %08x\n", hres
);
1395 CLEAR_CALLED(GetBindResult
); /* IE7 */
1397 IBindStatusCallback_Release(callback
);
1400 static HRESULT WINAPI
Moniker_BindToStorage(IMoniker
*iface
, IBindCtx
*pbc
, IMoniker
*pmkToLeft
,
1401 REFIID riid
, void **ppv
)
1403 IBindStatusCallback
*callback
= NULL
;
1408 static OLECHAR BSCBHolder
[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
1410 CHECK_EXPECT(BindToStorage
);
1412 load_state
= LD_LOADING
;
1414 ok(pbc
!= NULL
, "pbc == NULL\n");
1415 ok(pmkToLeft
== NULL
, "pmkToLeft=%p\n", pmkToLeft
);
1416 ok(IsEqualGUID(&IID_IStream
, riid
), "unexpected riid\n");
1417 ok(ppv
!= NULL
, "ppv == NULL\n");
1418 ok(*ppv
== NULL
, "*ppv=%p\n", *ppv
);
1420 hres
= IBindCtx_GetObjectParam(pbc
, BSCBHolder
, (IUnknown
**)&callback
);
1421 ok(hres
== S_OK
, "GetObjectParam failed: %08x\n", hres
);
1422 ok(callback
!= NULL
, "callback == NULL\n");
1424 memset(&bindinfo
, 0xf0, sizeof(bindinfo
));
1425 bindinfo
.cbSize
= sizeof(bindinfo
);
1427 hres
= IBindStatusCallback_GetBindInfo(callback
, &bindf
, &bindinfo
);
1428 ok(hres
== S_OK
, "GetBindInfo failed: %08x\n", hres
);
1429 ok((bindf
& ~BINDF_HYPERLINK
/* IE9 */) == (BINDF_PULLDATA
|BINDF_ASYNCSTORAGE
|BINDF_ASYNCHRONOUS
), "bindf = %08x\n", bindf
);
1430 ok(bindinfo
.cbSize
== sizeof(bindinfo
), "bindinfo.cbSize=%d\n", bindinfo
.cbSize
);
1431 ok(bindinfo
.szExtraInfo
== NULL
, "bindinfo.szExtraInfo=%p\n", bindinfo
.szExtraInfo
);
1432 /* TODO: test stgmedData */
1433 ok(bindinfo
.grfBindInfoF
== 0, "bindinfo.grfBinfInfoF=%08x\n", bindinfo
.grfBindInfoF
);
1434 ok(bindinfo
.dwBindVerb
== 0, "bindinfo.dwBindVerb=%d\n", bindinfo
.dwBindVerb
);
1435 ok(bindinfo
.szCustomVerb
== 0, "bindinfo.szCustomVerb=%p\n", bindinfo
.szCustomVerb
);
1436 ok(bindinfo
.cbstgmedData
== 0, "bindinfo.cbstgmedData=%d\n", bindinfo
.cbstgmedData
);
1437 ok(bindinfo
.dwOptions
== 0x80000 || bindinfo
.dwOptions
== 0x4080000,
1438 "bindinfo.dwOptions=%x\n", bindinfo
.dwOptions
);
1439 ok(bindinfo
.dwOptionsFlags
== 0, "bindinfo.dwOptionsFlags=%d\n", bindinfo
.dwOptionsFlags
);
1440 /* TODO: test dwCodePage */
1441 /* TODO: test securityAttributes */
1442 ok(IsEqualGUID(&IID_NULL
, &bindinfo
.iid
), "unexpected bindinfo.iid\n");
1443 ok(bindinfo
.pUnk
== NULL
, "bindinfo.pUnk=%p\n", bindinfo
.pUnk
);
1444 ok(bindinfo
.dwReserved
== 0, "bindinfo.dwReserved=%d\n", bindinfo
.dwReserved
);
1446 hres
= IBindStatusCallback_OnStartBinding(callback
, 0, &Binding
);
1447 ok(hres
== S_OK
, "OnStartBinding failed: %08x\n", hres
);
1449 if(asynchronous_binding
) {
1450 PostMessageW(container_hwnd
, WM_CONTINUE_BINDING
, (WPARAM
)callback
, 0);
1451 return MK_S_ASYNCHRONOUS
;
1454 continue_binding(callback
);
1458 static HRESULT WINAPI
Moniker_Reduce(IMoniker
*iface
, IBindCtx
*pbc
, DWORD dwReduceHowFar
,
1459 IMoniker
**ppmkToLeft
, IMoniker
**ppmkReduced
)
1461 ok(0, "unexpected call\n");
1465 static HRESULT WINAPI
Moniker_ComposeWith(IMoniker
*iface
, IMoniker
*pmkRight
,
1466 BOOL fOnlyIfNotGeneric
, IMoniker
**ppnkComposite
)
1468 ok(0, "unexpected call\n");
1472 static HRESULT WINAPI
Moniker_Enum(IMoniker
*iface
, BOOL fForwrd
, IEnumMoniker
**ppenumMoniker
)
1474 ok(0, "unexpected call\n");
1478 static HRESULT WINAPI
Moniker_IsEqual(IMoniker
*iface
, IMoniker
*pmkOtherMoniker
)
1480 ok(0, "unexpected call\n");
1484 static HRESULT WINAPI
Moniker_Hash(IMoniker
*iface
, DWORD
*pdwHash
)
1486 ok(0, "unexpected call\n");
1490 static HRESULT WINAPI
Moniker_IsRunning(IMoniker
*iface
, IBindCtx
*pbc
, IMoniker
*pmkToLeft
,
1491 IMoniker
*pmkNewlyRunning
)
1493 ok(0, "unexpected call\n");
1497 static HRESULT WINAPI
Moniker_GetTimeOfLastChange(IMoniker
*iface
, IBindCtx
*pbc
,
1498 IMoniker
*pmkToLeft
, FILETIME
*pFileTime
)
1500 ok(0, "unexpected call\n");
1504 static HRESULT WINAPI
Moniker_Inverse(IMoniker
*iface
, IMoniker
**ppmk
)
1506 ok(0, "unexpected call\n");
1510 static HRESULT WINAPI
Moniker_CommonPrefixWith(IMoniker
*iface
, IMoniker
*pmkOther
,
1511 IMoniker
**ppmkPrefix
)
1513 ok(0, "unexpected call\n");
1517 static HRESULT WINAPI
Moniker_RelativePathTo(IMoniker
*iface
, IMoniker
*pmkOther
,
1518 IMoniker
**pmkRelPath
)
1520 ok(0, "unexpected call\n");
1524 static HRESULT WINAPI
Moniker_GetDisplayName(IMoniker
*iface
, IBindCtx
*pbc
,
1525 IMoniker
*pmkToLeft
, LPOLESTR
*ppszDisplayName
)
1527 CHECK_EXPECT2(GetDisplayName
);
1529 /* ok(pbc != NULL, "pbc == NULL\n"); */
1530 ok(pmkToLeft
== NULL
, "pmkToLeft=%p\n", pmkToLeft
);
1531 ok(ppszDisplayName
!= NULL
, "ppszDisplayName == NULL\n");
1533 *ppszDisplayName
= CoTaskMemAlloc(sizeof(doc_url
));
1534 memcpy(*ppszDisplayName
, doc_url
, sizeof(doc_url
));
1539 static HRESULT WINAPI
Moniker_ParseDisplayName(IMoniker
*iface
, IBindCtx
*pbc
,
1540 IMoniker
*pmkToLeft
, LPOLESTR pszDisplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
1542 ok(0, "unexpected call\n");
1546 static HRESULT WINAPI
Moniker_IsSystemMoniker(IMoniker
*iface
, DWORD
*pdwMksys
)
1548 CHECK_EXPECT(IsSystemMoniker
);
1552 static const IMonikerVtbl MonikerVtbl
= {
1553 Moniker_QueryInterface
,
1561 Moniker_BindToObject
,
1562 Moniker_BindToStorage
,
1564 Moniker_ComposeWith
,
1569 Moniker_GetTimeOfLastChange
,
1571 Moniker_CommonPrefixWith
,
1572 Moniker_RelativePathTo
,
1573 Moniker_GetDisplayName
,
1574 Moniker_ParseDisplayName
,
1575 Moniker_IsSystemMoniker
1578 static IMoniker Moniker
= { &MonikerVtbl
};
1580 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
1582 return QueryInterface(riid
, ppv
);
1585 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
1590 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
1595 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
1596 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
1598 ok(0, "unexpected call\n");
1602 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
1603 IEnumUnknown
**ppenum
)
1605 ok(0, "unexpected call\n");
1609 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
1611 CHECK_EXPECT(LockContainer
);
1612 ok(expect_LockContainer_fLock
== fLock
, "fLock=%x, expected %x\n", fLock
, expect_LockContainer_fLock
);
1616 static const IOleContainerVtbl OleContainerVtbl
= {
1617 OleContainer_QueryInterface
,
1618 OleContainer_AddRef
,
1619 OleContainer_Release
,
1620 OleContainer_ParseDisplayName
,
1621 OleContainer_EnumObjects
,
1622 OleContainer_LockContainer
1625 static IOleContainer OleContainer
= { &OleContainerVtbl
};
1627 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
1629 return QueryInterface(riid
, ppv
);
1632 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
1637 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
1642 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
1644 ok(0, "unexpected call\n");
1648 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAssign
, DWORD dwWhichMoniker
,
1651 ok(0, "unexpected call\n");
1655 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
1657 CHECK_EXPECT(GetContainer
);
1658 ok(ppContainer
!= NULL
, "ppContainer = NULL\n");
1659 *ppContainer
= &OleContainer
;
1663 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
1665 ok(0, "unexpected call\n");
1669 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
1671 ok(0, "unexpected call\n");
1675 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
1677 ok(0, "unexpected call\n");
1681 static const IOleClientSiteVtbl ClientSiteVtbl
= {
1682 ClientSite_QueryInterface
,
1685 ClientSite_SaveObject
,
1686 ClientSite_GetMoniker
,
1687 ClientSite_GetContainer
,
1688 ClientSite_ShowObject
,
1689 ClientSite_OnShowWindow
,
1690 ClientSite_RequestNewObjectLayout
1693 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
1695 static HRESULT WINAPI
InPlaceFrame_QueryInterface(IOleInPlaceFrame
*iface
, REFIID riid
, void **ppv
)
1697 static const GUID undocumented_frame_iid
= {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
1699 if(!IsEqualGUID(&undocumented_frame_iid
, riid
))
1700 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
1703 return E_NOINTERFACE
;
1706 static ULONG WINAPI
InPlaceFrame_AddRef(IOleInPlaceFrame
*iface
)
1711 static ULONG WINAPI
InPlaceFrame_Release(IOleInPlaceFrame
*iface
)
1716 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
1718 CHECK_EXPECT(Frame_GetWindow
);
1722 static HRESULT WINAPI
InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
1724 ok(0, "unexpected call\n");
1728 static HRESULT WINAPI
InPlaceFrame_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
1730 ok(0, "unexpected call\n");
1734 static HRESULT WINAPI
InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame
*iface
,
1735 LPCBORDERWIDTHS pborderwidths
)
1737 ok(0, "unexpected call\n");
1741 static HRESULT WINAPI
InPlaceFrame_SetBorderSpace(IOleInPlaceFrame
*iface
,
1742 LPCBORDERWIDTHS pborderwidths
)
1744 CHECK_EXPECT(InPlaceFrame_SetBorderSpace
);
1748 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
1749 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
1751 static const WCHAR wszHTML_Document
[] =
1752 {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0};
1754 CHECK_EXPECT2(InPlaceUIWindow_SetActiveObject
);
1756 if(expect_InPlaceUIWindow_SetActiveObject_active
) {
1757 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
1758 if(pActiveObject
&& is_lang_english())
1759 ok(!lstrcmpW(wszHTML_Document
, pszObjName
), "%s != \"HTML Document\"\n", wine_dbgstr_w(pszObjName
));
1762 ok(pActiveObject
== NULL
, "pActiveObject=%p, expected NULL\n", pActiveObject
);
1763 ok(pszObjName
== NULL
, "pszObjName=%p, expected NULL\n", pszObjName
);
1765 expect_InPlaceUIWindow_SetActiveObject_active
= !expect_InPlaceUIWindow_SetActiveObject_active
;
1769 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
1770 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
1772 static const WCHAR wszHTML_Document
[] =
1773 {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0};
1776 CHECK_EXPECT2(SetActiveObject
);
1778 if(pActiveObject
&& is_lang_english())
1779 ok(!lstrcmpW(wszHTML_Document
, pszObjName
), "%s != \"HTML Document\"\n", wine_dbgstr_w(pszObjName
));
1781 CHECK_EXPECT(SetActiveObject_null
);
1783 ok(pActiveObject
== NULL
, "pActiveObject=%p, expected NULL\n", pActiveObject
);
1784 ok(pszObjName
== NULL
, "pszObjName=%p, expected NULL\n", pszObjName
);
1790 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
1791 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
1793 ok(0, "unexpected call\n");
1797 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
1798 HOLEMENU holemenu
, HWND hwndActiveObject
)
1800 ok(0, "unexpected call\n");
1804 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
1806 ok(0, "unexpected call\n");
1810 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
1812 CHECK_EXPECT2(SetStatusText
);
1813 if(!expect_status_text
)
1814 ok(pszStatusText
== NULL
, "pszStatusText=%p, expected NULL\n", pszStatusText
);
1818 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
1821 CHECK_EXPECT2(Frame_EnableModeless_TRUE
);
1823 CHECK_EXPECT2(Frame_EnableModeless_FALSE
);
1827 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
1829 ok(0, "unexpected call\n");
1833 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
1834 InPlaceFrame_QueryInterface
,
1835 InPlaceFrame_AddRef
,
1836 InPlaceFrame_Release
,
1837 InPlaceFrame_GetWindow
,
1838 InPlaceFrame_ContextSensitiveHelp
,
1839 InPlaceFrame_GetBorder
,
1840 InPlaceFrame_RequestBorderSpace
,
1841 InPlaceFrame_SetBorderSpace
,
1842 InPlaceFrame_SetActiveObject
,
1843 InPlaceFrame_InsertMenus
,
1844 InPlaceFrame_SetMenu
,
1845 InPlaceFrame_RemoveMenus
,
1846 InPlaceFrame_SetStatusText
,
1847 InPlaceFrame_EnableModeless
,
1848 InPlaceFrame_TranslateAccelerator
1851 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
1853 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
1854 InPlaceFrame_QueryInterface
,
1855 InPlaceFrame_AddRef
,
1856 InPlaceFrame_Release
,
1857 InPlaceFrame_GetWindow
,
1858 InPlaceFrame_ContextSensitiveHelp
,
1859 InPlaceFrame_GetBorder
,
1860 InPlaceFrame_RequestBorderSpace
,
1861 InPlaceFrame_SetBorderSpace
,
1862 InPlaceUIWindow_SetActiveObject
,
1865 static IOleInPlaceFrame InPlaceUIWindow
= { &InPlaceUIWindowVtbl
};
1867 static HRESULT WINAPI
InPlaceSiteWindowless_QueryInterface(IOleInPlaceSiteWindowless
*iface
, REFIID riid
, void **ppv
)
1869 return QueryInterface(riid
, ppv
);
1872 static ULONG WINAPI
InPlaceSiteWindowless_AddRef(IOleInPlaceSiteWindowless
*iface
)
1877 static ULONG WINAPI
InPlaceSiteWindowless_Release(IOleInPlaceSiteWindowless
*iface
)
1882 static HRESULT WINAPI
InPlaceSiteWindowless_GetWindow(
1883 IOleInPlaceSiteWindowless
*iface
, HWND
*phwnd
)
1885 IOleClientSite
*client_site
;
1886 IOleObject
*ole_obj
;
1889 CHECK_EXPECT2(GetWindow
);
1890 ok(phwnd
!= NULL
, "phwnd = NULL\n");
1891 *phwnd
= container_hwnd
;
1893 hres
= IUnknown_QueryInterface(doc_unk
, &IID_IOleObject
, (void**)&ole_obj
);
1894 ok(hres
== S_OK
, "Could not get IOleObject: %08x\n", hres
);
1896 hres
= IOleObject_GetClientSite(ole_obj
, &client_site
);
1897 IOleObject_Release(ole_obj
);
1898 ok(hres
== S_OK
, "GetClientSite failed: %08x\n", hres
);
1899 ok(client_site
== &ClientSite
, "client_site != ClientSite\n");
1900 IOleClientSite_Release(client_site
);
1905 static HRESULT WINAPI
InPlaceSiteWindowless_ContextSensitiveHelp(
1906 IOleInPlaceSiteWindowless
*iface
, BOOL fEnterMode
)
1908 ok(0, "unexpected call\n");
1912 static HRESULT WINAPI
InPlaceSiteWindowless_CanInPlaceActivate(
1913 IOleInPlaceSiteWindowless
*iface
)
1915 CHECK_EXPECT(CanInPlaceActivate
);
1919 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceActivate(
1920 IOleInPlaceSiteWindowless
*iface
)
1922 CHECK_EXPECT(OnInPlaceActivate
);
1923 inplace_deactivated
= FALSE
;
1927 static HRESULT WINAPI
InPlaceSiteWindowless_OnUIActivate(
1928 IOleInPlaceSiteWindowless
*iface
)
1930 CHECK_EXPECT(OnUIActivate
);
1934 static HRESULT WINAPI
InPlaceSiteWindowless_GetWindowContext(
1935 IOleInPlaceSiteWindowless
*iface
, IOleInPlaceFrame
**ppFrame
,
1936 IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
1937 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
1939 static const RECT rect
= {0,0,500,500};
1941 CHECK_EXPECT(GetWindowContext
);
1943 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
1945 *ppFrame
= &InPlaceFrame
;
1946 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
1948 *ppDoc
= (IOleInPlaceUIWindow
*)&InPlaceUIWindow
;
1949 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
1951 memcpy(lprcPosRect
, &rect
, sizeof(RECT
));
1952 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
1954 memcpy(lprcClipRect
, &rect
, sizeof(RECT
));
1955 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
1957 ok(lpFrameInfo
->cb
== sizeof(*lpFrameInfo
), "lpFrameInfo->cb = %u, expected %u\n", lpFrameInfo
->cb
, (unsigned)sizeof(*lpFrameInfo
));
1958 lpFrameInfo
->fMDIApp
= FALSE
;
1959 lpFrameInfo
->hwndFrame
= container_hwnd
;
1960 lpFrameInfo
->haccel
= NULL
;
1961 lpFrameInfo
->cAccelEntries
= 0;
1967 static HRESULT WINAPI
InPlaceSiteWindowless_Scroll(
1968 IOleInPlaceSiteWindowless
*iface
, SIZE scrollExtent
)
1970 ok(0, "unexpected call\n");
1974 static HRESULT WINAPI
InPlaceSiteWindowless_OnUIDeactivate(
1975 IOleInPlaceSiteWindowless
*iface
, BOOL fUndoable
)
1977 CHECK_EXPECT(OnUIDeactivate
);
1978 ok(!fUndoable
, "fUndoable = TRUE\n");
1982 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceDeactivate(
1983 IOleInPlaceSiteWindowless
*iface
)
1985 CHECK_EXPECT(OnInPlaceDeactivate
);
1986 inplace_deactivated
= TRUE
;
1990 static HRESULT WINAPI
InPlaceSiteWindowless_DiscardUndoState(
1991 IOleInPlaceSiteWindowless
*iface
)
1993 ok(0, "unexpected call\n");
1997 static HRESULT WINAPI
InPlaceSiteWindowless_DeactivateAndUndo(
1998 IOleInPlaceSiteWindowless
*iface
)
2000 ok(0, "unexpected call\n");
2004 static HRESULT WINAPI
InPlaceSiteWindowless_OnPosRectChange(
2005 IOleInPlaceSiteWindowless
*iface
, LPCRECT lprcPosRect
)
2007 ok(0, "unexpected call\n");
2011 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceActivateEx(
2012 IOleInPlaceSiteWindowless
*iface
, BOOL
*pfNoRedraw
, DWORD dwFlags
)
2014 CHECK_EXPECT(OnInPlaceActivateEx
);
2016 ok(pfNoRedraw
!= NULL
, "pfNoRedraw == NULL\n");
2017 ok(!*pfNoRedraw
, "*pfNoRedraw == TRUE\n");
2018 ok(dwFlags
== 0, "dwFlags = %08x\n", dwFlags
);
2023 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceDeactivateEx(
2024 IOleInPlaceSiteWindowless
*iface
, BOOL fNoRedraw
)
2026 CHECK_EXPECT(OnInPlaceDeactivateEx
);
2028 ok(fNoRedraw
, "fNoRedraw == FALSE\n");
2033 static HRESULT WINAPI
InPlaceSiteWindowless_RequestUIActivate(
2034 IOleInPlaceSiteWindowless
*iface
)
2036 CHECK_EXPECT2(RequestUIActivate
);
2040 static HRESULT WINAPI
InPlaceSiteWindowless_CanWindowlessActivate(
2041 IOleInPlaceSiteWindowless
*iface
)
2043 ok(0, "unexpected call\n");
2047 static HRESULT WINAPI
InPlaceSiteWindowless_GetCapture(
2048 IOleInPlaceSiteWindowless
*iface
)
2050 ok(0, "unexpected call\n");
2054 static HRESULT WINAPI
InPlaceSiteWindowless_SetCapture(
2055 IOleInPlaceSiteWindowless
*iface
, BOOL fCapture
)
2057 ok(0, "unexpected call\n");
2061 static HRESULT WINAPI
InPlaceSiteWindowless_GetFocus(
2062 IOleInPlaceSiteWindowless
*iface
)
2064 ok(0, "unexpected call\n");
2068 static HRESULT WINAPI
InPlaceSiteWindowless_SetFocus(
2069 IOleInPlaceSiteWindowless
*iface
, BOOL fFocus
)
2071 ok(0, "unexpected call\n");
2075 static HRESULT WINAPI
InPlaceSiteWindowless_GetDC(
2076 IOleInPlaceSiteWindowless
*iface
, LPCRECT pRect
,
2077 DWORD grfFlags
, HDC
*phDC
)
2079 ok(0, "unexpected call\n");
2083 static HRESULT WINAPI
InPlaceSiteWindowless_ReleaseDC(
2084 IOleInPlaceSiteWindowless
*iface
, HDC hDC
)
2086 ok(0, "unexpected call\n");
2090 static HRESULT WINAPI
InPlaceSiteWindowless_InvalidateRect(
2091 IOleInPlaceSiteWindowless
*iface
, LPCRECT pRect
, BOOL fErase
)
2093 ok(0, "unexpected call\n");
2097 static HRESULT WINAPI
InPlaceSiteWindowless_InvalidateRgn(
2098 IOleInPlaceSiteWindowless
*iface
, HRGN hRGN
, BOOL fErase
)
2100 ok(0, "unexpected call\n");
2104 static HRESULT WINAPI
InPlaceSiteWindowless_ScrollRect(
2105 IOleInPlaceSiteWindowless
*iface
, INT dx
, INT dy
,
2106 LPCRECT pRectScroll
, LPCRECT pRectClip
)
2108 ok(0, "unexpected call\n");
2112 static HRESULT WINAPI
InPlaceSiteWindowless_AdjustRect(
2113 IOleInPlaceSiteWindowless
*iface
, LPRECT prc
)
2115 ok(0, "unexpected call\n");
2119 static HRESULT WINAPI
InPlaceSiteWindowless_OnDefWindowMessage(
2120 IOleInPlaceSiteWindowless
*iface
, UINT msg
,
2121 WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
)
2123 ok(0, "unexpected call\n");
2127 static const IOleInPlaceSiteWindowlessVtbl InPlaceSiteWindowlessVtbl
= {
2128 InPlaceSiteWindowless_QueryInterface
,
2129 InPlaceSiteWindowless_AddRef
,
2130 InPlaceSiteWindowless_Release
,
2131 InPlaceSiteWindowless_GetWindow
,
2132 InPlaceSiteWindowless_ContextSensitiveHelp
,
2133 InPlaceSiteWindowless_CanInPlaceActivate
,
2134 InPlaceSiteWindowless_OnInPlaceActivate
,
2135 InPlaceSiteWindowless_OnUIActivate
,
2136 InPlaceSiteWindowless_GetWindowContext
,
2137 InPlaceSiteWindowless_Scroll
,
2138 InPlaceSiteWindowless_OnUIDeactivate
,
2139 InPlaceSiteWindowless_OnInPlaceDeactivate
,
2140 InPlaceSiteWindowless_DiscardUndoState
,
2141 InPlaceSiteWindowless_DeactivateAndUndo
,
2142 InPlaceSiteWindowless_OnPosRectChange
,
2143 InPlaceSiteWindowless_OnInPlaceActivateEx
,
2144 InPlaceSiteWindowless_OnInPlaceDeactivateEx
,
2145 InPlaceSiteWindowless_RequestUIActivate
,
2146 InPlaceSiteWindowless_CanWindowlessActivate
,
2147 InPlaceSiteWindowless_GetCapture
,
2148 InPlaceSiteWindowless_SetCapture
,
2149 InPlaceSiteWindowless_GetFocus
,
2150 InPlaceSiteWindowless_SetFocus
,
2151 InPlaceSiteWindowless_GetDC
,
2152 InPlaceSiteWindowless_ReleaseDC
,
2153 InPlaceSiteWindowless_InvalidateRect
,
2154 InPlaceSiteWindowless_InvalidateRgn
,
2155 InPlaceSiteWindowless_ScrollRect
,
2156 InPlaceSiteWindowless_AdjustRect
,
2157 InPlaceSiteWindowless_OnDefWindowMessage
2160 static IOleInPlaceSiteWindowless InPlaceSiteWindowless
= { &InPlaceSiteWindowlessVtbl
};
2162 static HRESULT WINAPI
DocumentSite_QueryInterface(IOleDocumentSite
*iface
, REFIID riid
, void **ppv
)
2164 return QueryInterface(riid
, ppv
);
2167 static ULONG WINAPI
DocumentSite_AddRef(IOleDocumentSite
*iface
)
2172 static ULONG WINAPI
DocumentSite_Release(IOleDocumentSite
*iface
)
2179 CallUIActivate_None
,
2180 CallUIActivate_ActivateMe
,
2181 CallUIActivate_AfterShow
,
2184 static BOOL call_UIActivate
= CallUIActivate_ActivateMe
;
2185 static HRESULT WINAPI
DocumentSite_ActivateMe(IOleDocumentSite
*iface
, IOleDocumentView
*pViewToActivate
)
2187 IOleDocument
*document
;
2190 CHECK_EXPECT(ActivateMe
);
2191 ok(pViewToActivate
!= NULL
, "pViewToActivate = NULL\n");
2193 hres
= IOleDocumentView_QueryInterface(pViewToActivate
, &IID_IOleDocument
, (void**)&document
);
2194 ok(hres
== S_OK
, "could not get IOleDocument: %08x\n", hres
);
2196 if(SUCCEEDED(hres
)) {
2197 hres
= IOleDocument_CreateView(document
, (IOleInPlaceSite
*)&InPlaceSiteWindowless
, NULL
, 0, &view
);
2198 ok(hres
== S_OK
, "CreateView failed: %08x\n", hres
);
2200 if(SUCCEEDED(hres
)) {
2201 IOleInPlaceActiveObject
*activeobj
= NULL
;
2202 IOleInPlaceSite
*inplacesite
= NULL
;
2203 HWND tmp_hwnd
= NULL
;
2204 static RECT rect
= {0,0,400,500};
2206 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
2207 ok(hres
== S_OK
, "GetInPlaceSite failed: %08x\n", hres
);
2208 ok(inplacesite
== (IOleInPlaceSite
*)&InPlaceSiteWindowless
, "inplacesite=%p, expected %p\n",
2209 inplacesite
, &InPlaceSiteWindowless
);
2211 hres
= IOleDocumentView_SetInPlaceSite(view
, (IOleInPlaceSite
*)&InPlaceSiteWindowless
);
2212 ok(hres
== S_OK
, "SetInPlaceSite failed: %08x\n", hres
);
2214 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
2215 ok(hres
== S_OK
, "GetInPlaceSite failed: %08x\n", hres
);
2216 ok(inplacesite
== (IOleInPlaceSite
*)&InPlaceSiteWindowless
, "inplacesite=%p, expected %p\n",
2217 inplacesite
, &InPlaceSiteWindowless
);
2219 hres
= IOleDocumentView_QueryInterface(view
, &IID_IOleInPlaceActiveObject
, (void**)&activeobj
);
2220 ok(hres
== S_OK
, "Could not get IOleInPlaceActiveObject: %08x\n", hres
);
2223 HWND hwnd
= (void*)0xdeadbeef;
2224 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &hwnd
);
2225 ok(hres
== E_FAIL
, "GetWindow returned %08x, expected E_FAIL\n", hres
);
2226 ok(hwnd
== NULL
, "hwnd=%p, expected NULL\n", hwnd
);
2229 if(call_UIActivate
== CallUIActivate_ActivateMe
) {
2230 SET_EXPECT(CanInPlaceActivate
);
2231 SET_EXPECT(GetWindowContext
);
2232 SET_EXPECT(GetWindow
);
2234 SET_EXPECT(OnInPlaceActivateEx
);
2236 SET_EXPECT(OnInPlaceActivate
);
2237 SET_EXPECT(SetStatusText
);
2238 SET_EXPECT(Exec_SETPROGRESSMAX
);
2239 SET_EXPECT(Exec_SETPROGRESSPOS
);
2240 SET_EXPECT(OnUIActivate
);
2241 SET_EXPECT(SetActiveObject
);
2243 expect_status_text
= NULL
;
2245 hres
= IOleDocumentView_UIActivate(view
, TRUE
);
2246 ok(hres
== S_OK
, "UIActivate failed: %08x\n", hres
);
2248 CHECK_CALLED(CanInPlaceActivate
);
2249 CHECK_CALLED(GetWindowContext
);
2250 CHECK_CALLED(GetWindow
);
2252 CHECK_CALLED(OnInPlaceActivateEx
);
2254 CHECK_CALLED(OnInPlaceActivate
);
2255 CHECK_CALLED(SetStatusText
);
2256 CHECK_CALLED(Exec_SETPROGRESSMAX
);
2257 CHECK_CALLED(Exec_SETPROGRESSPOS
);
2258 CHECK_CALLED(OnUIActivate
);
2259 CHECK_CALLED(SetActiveObject
);
2260 CHECK_CALLED(ShowUI
);
2263 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &doc_hwnd
);
2264 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
2265 ok(doc_hwnd
!= NULL
, "hwnd == NULL\n");
2267 ok(doc_hwnd
== last_hwnd
, "hwnd != last_hwnd\n");
2270 hres
= IOleDocumentView_UIActivate(view
, TRUE
);
2271 ok(hres
== S_OK
, "UIActivate failed: %08x\n", hres
);
2274 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &tmp_hwnd
);
2275 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
2276 ok(tmp_hwnd
== doc_hwnd
, "tmp_hwnd=%p, expected %p\n", tmp_hwnd
, doc_hwnd
);
2280 hres
= IOleDocumentView_SetRect(view
, &rect
);
2281 ok(hres
== S_OK
, "SetRect failed: %08x\n", hres
);
2283 if(call_UIActivate
== CallUIActivate_ActivateMe
) {
2284 hres
= IOleDocumentView_Show(view
, TRUE
);
2285 ok(hres
== S_OK
, "Show failed: %08x\n", hres
);
2287 SET_EXPECT(CanInPlaceActivate
);
2288 SET_EXPECT(GetWindowContext
);
2289 SET_EXPECT(GetWindow
);
2291 SET_EXPECT(OnInPlaceActivateEx
);
2293 SET_EXPECT(OnInPlaceActivate
);
2294 SET_EXPECT(SetStatusText
);
2295 SET_EXPECT(Exec_SETPROGRESSMAX
);
2296 SET_EXPECT(Exec_SETPROGRESSPOS
);
2297 SET_EXPECT(OnUIActivate
);
2298 expect_status_text
= (load_state
== LD_COMPLETE
? (LPCOLESTR
)0xdeadbeef : NULL
);
2300 hres
= IOleDocumentView_Show(view
, TRUE
);
2301 ok(hres
== S_OK
, "Show failed: %08x\n", hres
);
2303 CHECK_CALLED(CanInPlaceActivate
);
2304 CHECK_CALLED(GetWindowContext
);
2305 CHECK_CALLED(GetWindow
);
2307 CHECK_CALLED(OnInPlaceActivateEx
);
2309 CHECK_CALLED(OnInPlaceActivate
);
2310 CHECK_CALLED(SetStatusText
);
2311 CHECK_CALLED(Exec_SETPROGRESSMAX
);
2312 CHECK_CALLED(Exec_SETPROGRESSPOS
);
2315 hres
= IOleInPlaceActiveObject_GetWindow(activeobj
, &doc_hwnd
);
2316 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
2317 ok(doc_hwnd
!= NULL
, "doc_hwnd == NULL\n");
2319 ok(doc_hwnd
== last_hwnd
, "doc_hwnd != last_hwnd\n");
2323 test_timer(EXPECT_UPDATEUI
| ((load_state
== LD_LOADING
) ? EXPECT_SETTITLE
: 0));
2326 IOleInPlaceActiveObject_Release(activeobj
);
2329 IOleDocument_Release(document
);
2335 static const IOleDocumentSiteVtbl DocumentSiteVtbl
= {
2336 DocumentSite_QueryInterface
,
2337 DocumentSite_AddRef
,
2338 DocumentSite_Release
,
2339 DocumentSite_ActivateMe
2342 static IOleDocumentSite DocumentSite
= { &DocumentSiteVtbl
};
2344 static HRESULT WINAPI
OleControlSite_QueryInterface(IOleControlSite
*iface
, REFIID riid
, void **ppv
)
2346 return QueryInterface(riid
, ppv
);
2349 static ULONG WINAPI
OleControlSite_AddRef(IOleControlSite
*iface
)
2354 static ULONG WINAPI
OleControlSite_Release(IOleControlSite
*iface
)
2359 static HRESULT WINAPI
OleControlSite_OnControlInfoChanged(IOleControlSite
*iface
)
2361 ok(0, "unexpected call\n");
2365 static HRESULT WINAPI
OleControlSite_LockInPlaceActive(IOleControlSite
*iface
, BOOL fLock
)
2367 ok(0, "unexpected call\n");
2371 static HRESULT WINAPI
OleControlSite_GetExtendedControl(IOleControlSite
*iface
, IDispatch
**ppDisp
)
2373 ok(0, "unexpected call\n");
2377 static HRESULT WINAPI
OleControlSite_TransformCoords(IOleControlSite
*iface
, POINTL
*pPtHimetric
,
2378 POINTF
*pPtfContainer
, DWORD dwFlags
)
2380 ok(0, "unexpected call\n");
2384 static HRESULT WINAPI
OleControlSite_TranslateAccelerator(IOleControlSite
*iface
,
2385 MSG
*pMsg
, DWORD grfModifiers
)
2387 ok(0, "unexpected call\n");
2391 static HRESULT WINAPI
OleControlSite_OnFocus(IOleControlSite
*iface
, BOOL fGotFocus
)
2394 CHECK_EXPECT(OnFocus_TRUE
);
2396 CHECK_EXPECT2(OnFocus_FALSE
);
2400 static HRESULT WINAPI
OleControlSite_ShowPropertyFrame(IOleControlSite
*iface
)
2402 ok(0, "unexpected call\n");
2406 static const IOleControlSiteVtbl OleControlSiteVtbl
= {
2407 OleControlSite_QueryInterface
,
2408 OleControlSite_AddRef
,
2409 OleControlSite_Release
,
2410 OleControlSite_OnControlInfoChanged
,
2411 OleControlSite_LockInPlaceActive
,
2412 OleControlSite_GetExtendedControl
,
2413 OleControlSite_TransformCoords
,
2414 OleControlSite_TranslateAccelerator
,
2415 OleControlSite_OnFocus
,
2416 OleControlSite_ShowPropertyFrame
2419 static IOleControlSite OleControlSite
= { &OleControlSiteVtbl
};
2421 static IDocHostUIHandler2
*expect_uihandler_iface
;
2423 static HRESULT WINAPI
DocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
2425 return QueryInterface(riid
, ppv
);
2428 static ULONG WINAPI
DocHostUIHandler_AddRef(IDocHostUIHandler2
*iface
)
2433 static ULONG WINAPI
DocHostUIHandler_Release(IDocHostUIHandler2
*iface
)
2438 static HRESULT WINAPI
DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2
*iface
, DWORD dwID
, POINT
*ppt
,
2439 IUnknown
*pcmdtReserved
, IDispatch
*pdicpReserved
)
2441 ok(0, "unexpected call\n");
2442 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2446 static HRESULT WINAPI
DocHostUIHandler_GetHostInfo(IDocHostUIHandler2
*iface
, DOCHOSTUIINFO
*pInfo
)
2448 CHECK_EXPECT(GetHostInfo
);
2449 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2450 ok(pInfo
!= NULL
, "pInfo=NULL\n");
2452 ok(pInfo
->cbSize
== sizeof(DOCHOSTUIINFO
), "pInfo->cbSize=%u\n", pInfo
->cbSize
);
2453 ok(!pInfo
->dwFlags
, "pInfo->dwFlags=%08x, expected 0\n", pInfo
->dwFlags
);
2454 pInfo
->dwFlags
= DOCHOSTUIFLAG_DISABLE_HELP_MENU
| DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
2455 | DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY
| DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
2456 | DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION
;
2457 ok(!pInfo
->dwDoubleClick
, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo
->dwDoubleClick
);
2458 ok(!pInfo
->pchHostCss
, "pInfo->pchHostCss=%p, expected NULL\n", pInfo
->pchHostCss
);
2459 ok(!pInfo
->pchHostNS
, "pInfo->pchhostNS=%p, expected NULL\n", pInfo
->pchHostNS
);
2464 static HRESULT WINAPI
DocHostUIHandler_ShowUI(IDocHostUIHandler2
*iface
, DWORD dwID
,
2465 IOleInPlaceActiveObject
*pActiveObject
, IOleCommandTarget
*pCommandTarget
,
2466 IOleInPlaceFrame
*pFrame
, IOleInPlaceUIWindow
*pDoc
)
2468 CHECK_EXPECT(ShowUI
);
2469 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2472 ok(dwID
== DOCHOSTUITYPE_AUTHOR
, "dwID=%d, expected DOCHOSTUITYPE_AUTHOR\n", dwID
);
2474 ok(dwID
== DOCHOSTUITYPE_BROWSE
, "dwID=%d, expected DOCHOSTUITYPE_BROWSE\n", dwID
);
2475 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
2476 ok(pCommandTarget
!= NULL
, "pCommandTarget = NULL\n");
2477 ok(pFrame
== &InPlaceFrame
, "pFrame=%p, expected %p\n", pFrame
, &InPlaceFrame
);
2478 if (expect_InPlaceUIWindow_SetActiveObject_active
)
2479 ok(pDoc
== (IOleInPlaceUIWindow
*)&InPlaceUIWindow
, "pDoc=%p, expected %p\n", pDoc
, &InPlaceUIWindow
);
2481 ok(pDoc
== NULL
, "pDoc=%p, expected NULL\n", pDoc
);
2486 static HRESULT WINAPI
DocHostUIHandler_HideUI(IDocHostUIHandler2
*iface
)
2488 CHECK_EXPECT(HideUI
);
2489 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2493 static HRESULT WINAPI
DocHostUIHandler_UpdateUI(IDocHostUIHandler2
*iface
)
2495 CHECK_EXPECT(UpdateUI
);
2496 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2500 static HRESULT WINAPI
DocHostUIHandler_EnableModeless(IDocHostUIHandler2
*iface
, BOOL fEnable
)
2502 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2504 CHECK_EXPECT2(EnableModeless_TRUE
);
2506 CHECK_EXPECT2(EnableModeless_FALSE
);
2510 static HRESULT WINAPI
DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
2512 ok(0, "unexpected call\n");
2513 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2517 static BOOL expect_OnFrameWindowActivate_fActivate
;
2518 static HRESULT WINAPI
DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2
*iface
, BOOL fActivate
)
2520 CHECK_EXPECT2(OnFrameWindowActivate
);
2521 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2522 ok(fActivate
== expect_OnFrameWindowActivate_fActivate
, "fActivate=%x\n", fActivate
);
2526 static HRESULT WINAPI
DocHostUIHandler_ResizeBorder(IDocHostUIHandler2
*iface
, LPCRECT prcBorder
,
2527 IOleInPlaceUIWindow
*pUIWindow
, BOOL fRameWindow
)
2529 ok(0, "unexpected call\n");
2533 static HRESULT WINAPI
DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2
*iface
, LPMSG lpMsg
,
2534 const GUID
*pguidCmdGroup
, DWORD nCmdID
)
2536 ok(0, "unexpected call\n");
2537 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2541 static HRESULT WINAPI
DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2
*iface
,
2542 LPOLESTR
*pchKey
, DWORD dw
)
2544 CHECK_EXPECT(GetOptionKeyPath
);
2545 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2546 ok(pchKey
!= NULL
, "pchKey = NULL\n");
2547 ok(!dw
, "dw=%d, expected 0\n", dw
);
2549 ok(!*pchKey
, "*pchKey=%p, expected NULL\n", *pchKey
);
2553 static HRESULT WINAPI
DocHostUIHandler_GetDropTarget(IDocHostUIHandler2
*iface
,
2554 IDropTarget
*pDropTarget
, IDropTarget
**ppDropTarget
)
2556 CHECK_EXPECT(GetDropTarget
);
2557 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2562 static HRESULT WINAPI
DocHostUIHandler_GetExternal(IDocHostUIHandler2
*iface
, IDispatch
**ppDispatch
)
2564 CHECK_EXPECT(GetExternal
);
2565 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2566 *ppDispatch
= &External
;
2570 static HRESULT WINAPI
DocHostUIHandler_TranslateUrl(IDocHostUIHandler2
*iface
, DWORD dwTranslate
,
2571 OLECHAR
*pchURLIn
, OLECHAR
**ppchURLOut
)
2573 CHECK_EXPECT(TranslateUrl
);
2574 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2575 ok(!dwTranslate
, "dwTranslate = %x\n", dwTranslate
);
2577 ok(!strcmp_wa(pchURLIn
, nav_serv_url
), "pchURLIn = %s, expected %s\n", wine_dbgstr_w(pchURLIn
), nav_serv_url
);
2579 todo_wine
ok(!strcmp_wa(pchURLIn
, nav_serv_url
), "pchURLIn = %s, expected %s\n", wine_dbgstr_w(pchURLIn
), nav_serv_url
);
2580 ok(ppchURLOut
!= NULL
, "ppchURLOut == NULL\n");
2581 ok(!*ppchURLOut
, "*ppchURLOut = %p\n", *ppchURLOut
);
2586 static HRESULT WINAPI
DocHostUIHandler_FilterDataObject(IDocHostUIHandler2
*iface
, IDataObject
*pDO
,
2587 IDataObject
**ppPORet
)
2589 ok(0, "unexpected call\n");
2590 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2594 static HRESULT WINAPI
DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2
*iface
,
2595 LPOLESTR
*pchKey
, DWORD dw
)
2597 CHECK_EXPECT(GetOverrideKeyPath
);
2598 ok(iface
== expect_uihandler_iface
, "called on unexpected iface\n");
2599 ok(pchKey
!= NULL
, "pchKey = NULL\n");
2601 ok(!*pchKey
, "*pchKey=%p, expected NULL\n", *pchKey
);
2602 ok(!dw
, "dw=%d, xepected 0\n", dw
);
2606 static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl
= {
2607 DocHostUIHandler_QueryInterface
,
2608 DocHostUIHandler_AddRef
,
2609 DocHostUIHandler_Release
,
2610 DocHostUIHandler_ShowContextMenu
,
2611 DocHostUIHandler_GetHostInfo
,
2612 DocHostUIHandler_ShowUI
,
2613 DocHostUIHandler_HideUI
,
2614 DocHostUIHandler_UpdateUI
,
2615 DocHostUIHandler_EnableModeless
,
2616 DocHostUIHandler_OnDocWindowActivate
,
2617 DocHostUIHandler_OnFrameWindowActivate
,
2618 DocHostUIHandler_ResizeBorder
,
2619 DocHostUIHandler_TranslateAccelerator
,
2620 DocHostUIHandler_GetOptionKeyPath
,
2621 DocHostUIHandler_GetDropTarget
,
2622 DocHostUIHandler_GetExternal
,
2623 DocHostUIHandler_TranslateUrl
,
2624 DocHostUIHandler_FilterDataObject
,
2625 DocHostUIHandler_GetOverrideKeyPath
2628 static IDocHostUIHandler2 DocHostUIHandler
= { &DocHostUIHandlerVtbl
};
2630 static HRESULT WINAPI
CustomDocHostUIHandler_QueryInterface(IDocHostUIHandler2
*iface
, REFIID riid
, void **ppv
)
2632 if(IsEqualGUID(&IID_IDocHostUIHandler2
, riid
)) {
2637 if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
2638 return E_NOINTERFACE
;
2640 else if(IsEqualGUID(&IID_IDocHostShowUI
, riid
))
2641 return E_NOINTERFACE
; /* TODO */
2643 ok(0, "unexpected call %s\n", debugstr_guid(riid
));
2644 return E_NOINTERFACE
;
2647 static const IDocHostUIHandler2Vtbl CustomDocHostUIHandlerVtbl
= {
2648 CustomDocHostUIHandler_QueryInterface
,
2649 DocHostUIHandler_AddRef
,
2650 DocHostUIHandler_Release
,
2651 DocHostUIHandler_ShowContextMenu
,
2652 DocHostUIHandler_GetHostInfo
,
2653 DocHostUIHandler_ShowUI
,
2654 DocHostUIHandler_HideUI
,
2655 DocHostUIHandler_UpdateUI
,
2656 DocHostUIHandler_EnableModeless
,
2657 DocHostUIHandler_OnDocWindowActivate
,
2658 DocHostUIHandler_OnFrameWindowActivate
,
2659 DocHostUIHandler_ResizeBorder
,
2660 DocHostUIHandler_TranslateAccelerator
,
2661 DocHostUIHandler_GetOptionKeyPath
,
2662 DocHostUIHandler_GetDropTarget
,
2663 DocHostUIHandler_GetExternal
,
2664 DocHostUIHandler_TranslateUrl
,
2665 DocHostUIHandler_FilterDataObject
,
2666 DocHostUIHandler_GetOverrideKeyPath
2669 static IDocHostUIHandler2 CustomDocHostUIHandler
= { &CustomDocHostUIHandlerVtbl
};
2671 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
,
2672 REFIID riid
, void **ppv
)
2674 return QueryInterface(riid
, ppv
);
2677 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
2682 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
2687 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
2688 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
2690 ok(!pguidCmdGroup
, "pguidCmdGroup != MULL\n");
2691 ok(cCmds
== 1, "cCmds=%d, expected 1\n", cCmds
);
2692 ok(!pCmdText
, "pCmdText != NULL\n");
2694 switch(prgCmds
[0].cmdID
) {
2695 case OLECMDID_SETPROGRESSTEXT
:
2696 CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT
);
2697 prgCmds
[0].cmdf
= OLECMDF_ENABLED
;
2700 CHECK_EXPECT(QueryStatus_OPEN
);
2701 prgCmds
[0].cmdf
= 0;
2704 CHECK_EXPECT(QueryStatus_NEW
);
2705 prgCmds
[0].cmdf
= 0;
2708 ok(0, "unexpected command %d\n", prgCmds
[0].cmdID
);
2714 static void test_save_history(IUnknown
*unk
)
2716 IPersistHistory
*per_hist
;
2721 hres
= IUnknown_QueryInterface(unk
, &IID_IPersistHistory
, (void**)&per_hist
);
2722 ok(hres
== S_OK
, "Could not get IPersistHistory iface: %08x\n", hres
);
2724 hres
= CreateStreamOnHGlobal(NULL
, TRUE
, &stream
);
2725 ok(hres
== S_OK
, "CreateStreamOnHGlobal failed: %08x\n", hres
);
2727 hres
= IPersistHistory_SaveHistory(per_hist
, stream
);
2728 ok(hres
== S_OK
, "SaveHistory failed: %08x\n", hres
);
2729 IPersistHistory_Release(per_hist
);
2732 hres
= IStream_Seek(stream
, li
, STREAM_SEEK_SET
, NULL
);
2733 ok(hres
== S_OK
, "Stat failed: %08x\n", hres
);
2734 history_stream
= stream
;
2737 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
2738 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
2740 if(!pguidCmdGroup
) {
2741 test_readyState(NULL
);
2744 case OLECMDID_SETPROGRESSMAX
:
2745 CHECK_EXPECT2(Exec_SETPROGRESSMAX
);
2746 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2747 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2749 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
2750 if(load_state
== LD_NO
)
2751 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn
));
2753 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
2755 case OLECMDID_SETPROGRESSPOS
:
2756 CHECK_EXPECT2(Exec_SETPROGRESSPOS
);
2757 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2758 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2760 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
2761 if(load_state
== LD_NO
)
2762 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn
));
2764 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
2766 case OLECMDID_HTTPEQUIV_DONE
:
2767 CHECK_EXPECT(Exec_HTTPEQUIV_DONE
);
2768 ok(nCmdexecopt
== 0, "nCmdexecopts=%08x\n", nCmdexecopt
);
2769 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
2770 ok(pvaIn
== NULL
, "pvaIn=%p\n", pvaIn
);
2771 readystate_set_loading
= FALSE
;
2772 readystate_set_interactive
= FALSE
;
2773 load_state
= LD_COMPLETE
;
2775 case OLECMDID_SETDOWNLOADSTATE
:
2776 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2777 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
2778 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2779 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
2781 switch(V_I4(pvaIn
)) {
2783 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0
);
2785 load_state
= LD_INTERACTIVE
;
2788 CHECK_EXPECT(Exec_SETDOWNLOADSTATE_1
);
2789 readystate_set_interactive
= (load_state
!= LD_INTERACTIVE
);
2792 ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn
));
2796 case OLECMDID_UPDATECOMMANDS
:
2797 CHECK_EXPECT(Exec_UPDATECOMMANDS
);
2798 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2799 ok(pvaIn
== NULL
, "pvaIn=%p\n", pvaIn
);
2800 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
2802 case OLECMDID_SETTITLE
:
2803 CHECK_EXPECT2(Exec_SETTITLE
);
2804 ok(nCmdexecopt
== OLECMDEXECOPT_DONTPROMPTUSER
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2805 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2806 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
2807 ok(V_VT(pvaIn
) == VT_BSTR
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
2808 ok(V_BSTR(pvaIn
) != NULL
, "V_BSTR(pvaIn) == NULL\n"); /* TODO */
2810 case OLECMDID_HTTPEQUIV
:
2811 CHECK_EXPECT2(Exec_HTTPEQUIV
);
2812 ok(!nCmdexecopt
, "nCmdexecopts=%08x\n", nCmdexecopt
);
2813 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2814 ok(pvaOut
== NULL
, "pvaOut=%p\n", pvaOut
);
2815 ok(V_VT(pvaIn
) == VT_BSTR
, "V_VT(pvaIn)=%d\n", V_VT(pvaIn
));
2816 ok(V_BSTR(pvaIn
) != NULL
, "V_BSTR(pvaIn) = NULL\n");
2817 test_readyState(NULL
);
2819 case OLECMDID_UPDATETRAVELENTRY_DATARECOVERY
:
2821 return E_FAIL
; /* FIXME */
2823 ok(0, "unexpected command %d\n", nCmdID
);
2828 if(IsEqualGUID(&CGID_ShellDocView
, pguidCmdGroup
)) {
2829 if(nCmdID
!= 63 && (!is_refresh
|| nCmdID
!= 37))
2830 test_readyState(NULL
);
2831 ok(nCmdexecopt
== 0, "nCmdexecopts=%08x\n", nCmdexecopt
);
2835 CHECK_EXPECT2(Exec_ShellDocView_37
);
2837 if(is_refresh
&& load_state
== LD_COMPLETE
) {
2838 load_state
= LD_DOLOAD
;
2839 test_readyState(NULL
);
2840 }else if(is_refresh
&& load_state
== LD_DOLOAD
) {
2841 test_readyState(NULL
);
2842 load_state
= LD_LOADING
;
2845 test_GetCurMoniker(doc_unk
, NULL
, nav_serv_url
);
2846 else if(load_from_stream
)
2847 test_GetCurMoniker(doc_unk
, NULL
, "about:blank");
2849 test_GetCurMoniker(doc_unk
, doc_mon
, NULL
);
2852 ok(pvaOut
== NULL
, "pvaOut=%p, expected NULL\n", pvaOut
);
2853 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2855 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn
));
2856 ok(V_I4(pvaIn
) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn
));
2861 IHTMLPrivateWindow
*priv_window
;
2864 CHECK_EXPECT(Exec_ShellDocView_63
);
2865 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2866 ok(V_VT(pvaIn
) == VT_UNKNOWN
, "V_VT(pvaIn) = %d\n", V_VT(pvaIn
));
2867 ok(V_UNKNOWN(pvaIn
) != NULL
, "VPUNKNOWN(pvaIn) = NULL\n");
2868 ok(pvaOut
!= NULL
, "pvaOut == NULL\n");
2869 ok(V_VT(pvaOut
) == VT_EMPTY
, "V_VT(pvaOut) = %d\n", V_VT(pvaOut
));
2871 hres
= IUnknown_QueryInterface(V_UNKNOWN(pvaIn
), &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
2872 ok(hres
== S_OK
, "Could not get IHTMLPrivateWindow: %08x\n", hres
);
2874 IHTMLPrivateWindow_Release(priv_window
);
2876 load_state
= loading_js
? LD_COMPLETE
: LD_LOADING
;
2877 return S_OK
; /* TODO */
2881 CHECK_EXPECT(Exec_ShellDocView_67
);
2882 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2883 ok(V_VT(pvaIn
) == VT_BSTR
, "V_VT(pvaIn) = %d\n", V_VT(pvaIn
));
2884 ok(!strcmp_wa(V_BSTR(pvaIn
), nav_serv_url
), "V_BSTR(pvaIn) = %s, expected %s\n",
2885 wine_dbgstr_w(V_BSTR(pvaIn
)), nav_serv_url
);
2886 ok(pvaOut
!= NULL
, "pvaOut == NULL\n");
2887 ok(V_VT(pvaOut
) == VT_BOOL
, "V_VT(pvaOut) = %d\n", V_VT(pvaOut
));
2888 ok(V_BOOL(pvaOut
) == VARIANT_TRUE
, "V_BOOL(pvaOut) = %x\n", V_BOOL(pvaOut
));
2890 load_state
= LD_DOLOAD
;
2894 CHECK_EXPECT2(Exec_ShellDocView_84
);
2896 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
2897 ok(pvaOut
!= NULL
, "pvaOut == NULL\n");
2899 ok(V_VT(pvaOut
) == VT_EMPTY
, "V_VT(pvaOut)=%d\n", V_VT(pvaOut
));
2904 CHECK_EXPECT2(Exec_ShellDocView_103
);
2906 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
2907 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
2912 CHECK_EXPECT2(Exec_ShellDocView_105
);
2914 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2915 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
2920 CHECK_EXPECT2(Exec_ShellDocView_138
);
2921 ok(!pvaIn
, "pvaIn != NULL\n");
2922 ok(!pvaOut
, "pvaOut != NULL\n");
2926 CHECK_EXPECT2(Exec_ShellDocView_140
);
2928 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
2929 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
2933 case 143: /* TODO */
2934 case 144: /* TODO */
2938 ok(0, "unexpected command %d\n", nCmdID
);
2943 if(IsEqualGUID(&CGID_MSHTML
, pguidCmdGroup
)) {
2944 test_readyState(NULL
);
2945 ok(nCmdexecopt
== 0, "nCmdexecopts=%08x\n", nCmdexecopt
);
2948 case IDM_PARSECOMPLETE
:
2949 CHECK_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
2950 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
2951 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
2954 ok(0, "unexpected command %d\n", nCmdID
);
2958 if(IsEqualGUID(&CGID_DocHostCmdPriv
, pguidCmdGroup
)) {
2960 case DOCHOST_DOCCANNAVIGATE
:
2961 CHECK_EXPECT(Exec_DOCCANNAVIGATE
);
2963 test_readyState(NULL
);
2965 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2966 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
2967 ok(V_VT(pvaIn
) == VT_UNKNOWN
, "V_VT(pvaIn) != VT_UNKNOWN\n");
2968 /* FIXME: test V_UNKNOWN(pvaIn) == window */
2977 test_readyState(NULL
);
2979 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
2980 ok(pvaOut
!= NULL
|| broken(!pvaOut
), "pvaOut != NULL\n");
2981 ok(V_VT(pvaIn
) == VT_ARRAY
, "V_VT(pvaIn) = %d\n", V_VT(pvaIn
));
2983 ok(V_VT(pvaOut
) == VT_BOOL
, "V_VT(pvaOut) = %d\n", V_VT(pvaOut
));
2984 sa
= V_ARRAY(pvaIn
);
2986 dim
= SafeArrayGetDim(sa
);
2987 ok(dim
== 1, "dim = %d\n", dim
);
2988 hres
= SafeArrayGetLBound(sa
, 1, &ind
);
2989 ok(hres
== S_OK
, "SafeArrayGetLBound failed: %x\n", hres
);
2990 ok(ind
== 0, "Lower bound = %d\n", ind
);
2991 hres
= SafeArrayGetUBound(sa
, 1, &ind
);
2992 ok(hres
== S_OK
, "SafeArrayGetUBound failed: %x\n", hres
);
2993 ok(ind
== 7 || broken(ind
== 5), "Upper bound = %d\n", ind
);
2996 SafeArrayGetElement(sa
, &ind
, &var
);
2997 ok(V_VT(&var
) == VT_I4
, "Incorrect data type: %d\n", V_VT(&var
));
2998 ok(V_I4(&var
) == status_code
, "Incorrect error code: %d\n", V_I4(&var
));
3001 SafeArrayGetElement(sa
, &ind
, &var
);
3002 ok(V_VT(&var
) == VT_BSTR
, "Incorrect data type: %d\n", V_VT(&var
));
3003 ok(!strcmp_wa(V_BSTR(&var
), "winetest:doc"), "Page address: %s\n", wine_dbgstr_w(V_BSTR(&var
)));
3006 SafeArrayGetElement(sa
, &ind
, &var
);
3007 ok(V_VT(&var
) == VT_UNKNOWN
, "Incorrect data type: %d\n", V_VT(&var
));
3010 SafeArrayGetElement(sa
, &ind
, &var
);
3011 ok(V_VT(&var
) == VT_UNKNOWN
, "Incorrect data type: %d\n", V_VT(&var
));
3014 SafeArrayGetElement(sa
, &ind
, &var
);
3015 ok(V_VT(&var
) == VT_BOOL
, "Incorrect data type: %d\n", V_VT(&var
));
3016 ok(!V_BOOL(&var
), "Unknown value is incorrect\n");
3019 SafeArrayGetElement(sa
, &ind
, &var
);
3020 ok(V_VT(&var
) == VT_BOOL
, "Incorrect data type: %d\n", V_VT(&var
));
3021 ok(!V_BOOL(&var
), "Unknown value is incorrect\n");
3025 return E_FAIL
; /* TODO */
3029 if(IsEqualGUID(&CGID_Explorer
, pguidCmdGroup
)) {
3030 test_readyState(NULL
);
3031 ok(nCmdexecopt
== 0, "nCmdexecopts=%08x\n", nCmdexecopt
);
3035 CHECK_EXPECT2(Exec_Explorer_38
);
3036 ok(pvaIn
!= NULL
, "pvaIn == NULL\n");
3037 ok(V_VT(pvaIn
) == VT_I4
, "V_VT(pvaIn) = %d\n", V_VT(pvaIn
));
3038 ok(!V_I4(pvaIn
), "V_I4(pvaIn) = %d\n", V_I4(pvaIn
));
3039 ok(!pvaOut
, "pvaOut != NULL\n");
3041 test_current_url(doc_unk
, prev_url
);
3043 test_save_history(doc_unk
);
3047 CHECK_EXPECT2(Exec_Explorer_69
);
3048 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
3049 ok(pvaOut
!= NULL
, "pvaOut == NULL\n");
3051 case 109: /* TODO */
3054 ok(0, "unexpected cmd %d of CGID_Explorer\n", nCmdID
);
3059 if(IsEqualGUID(&CGID_DocHostCommandHandler
, pguidCmdGroup
)) {
3060 test_readyState(NULL
);
3063 case OLECMDID_PAGEACTIONBLOCKED
: /* win2k3 */
3064 SET_EXPECT(SetStatusText
);
3065 ok(pvaIn
== NULL
, "pvaIn != NULL\n");
3066 ok(pvaOut
== NULL
, "pvaOut != NULL\n");
3068 case OLECMDID_SHOWSCRIPTERROR
:
3072 CHECK_EXPECT(Exec_DocHostCommandHandler_2300
);
3075 ok(0, "unexpected command %d\n", nCmdID
);
3080 ok(0, "unexpected pguidCmdGroup: %s\n", debugstr_guid(pguidCmdGroup
));
3084 static IOleCommandTargetVtbl OleCommandTargetVtbl
= {
3085 OleCommandTarget_QueryInterface
,
3086 OleCommandTarget_AddRef
,
3087 OleCommandTarget_Release
,
3088 OleCommandTarget_QueryStatus
,
3089 OleCommandTarget_Exec
3092 static IOleCommandTarget OleCommandTarget
= { &OleCommandTargetVtbl
};
3094 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
3096 return QueryInterface(riid
, ppv
);
3099 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
3100 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
3101 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
3103 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
3104 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
3105 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
3106 ok(puArgErr
!= NULL
, "puArgErr == NULL\n");
3107 ok(V_VT(pVarResult
) == 0, "V_VT(pVarResult)=%d, expected 0\n", V_VT(pVarResult
));
3108 ok(wFlags
== DISPATCH_PROPERTYGET
, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags
);
3109 test_readyState(NULL
);
3111 switch(dispIdMember
) {
3112 case DISPID_AMBIENT_USERMODE
:
3113 CHECK_EXPECT2(Invoke_AMBIENT_USERMODE
);
3114 V_VT(pVarResult
) = VT_BOOL
;
3115 V_BOOL(pVarResult
) = VARIANT_TRUE
;
3117 case DISPID_AMBIENT_DLCONTROL
:
3118 CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL
);
3120 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
:
3121 CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
3123 case DISPID_AMBIENT_SILENT
:
3124 CHECK_EXPECT2(Invoke_AMBIENT_SILENT
);
3125 V_VT(pVarResult
) = VT_BOOL
;
3126 V_BOOL(pVarResult
) = VARIANT_FALSE
;
3128 case DISPID_AMBIENT_USERAGENT
:
3129 CHECK_EXPECT(Invoke_AMBIENT_USERAGENT
);
3131 case DISPID_AMBIENT_PALETTE
:
3132 CHECK_EXPECT(Invoke_AMBIENT_PALETTE
);
3136 ok(0, "unexpected dispid %d\n", dispIdMember
);
3140 static const IDispatchVtbl DispatchVtbl
= {
3141 Dispatch_QueryInterface
,
3144 Dispatch_GetTypeInfoCount
,
3145 Dispatch_GetTypeInfo
,
3146 Dispatch_GetIDsOfNames
,
3150 static IDispatch Dispatch
= { &DispatchVtbl
};
3152 static HRESULT WINAPI
EventDispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
3154 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IDispatch
, riid
)) {
3159 ok(0, "Unexpected call\n");
3160 return E_NOINTERFACE
;
3163 static HRESULT WINAPI
EventDispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
3164 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
3165 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
3168 IHTMLDocument2
*doc
;
3171 ok(IsEqualGUID(&IID_NULL
, riid
), "riid = %s\n", debugstr_guid(riid
));
3172 ok(pDispParams
!= NULL
, "pDispParams == NULL\n");
3173 ok(pExcepInfo
!= NULL
, "pExcepInfo == NULL\n");
3174 ok(puArgErr
!= NULL
, "puArgErr == NULL\n");
3175 ok(V_VT(pVarResult
) == 0, "V_VT(pVarResult) = %d\n", V_VT(pVarResult
));
3176 ok(wFlags
== DISPATCH_METHOD
, "wFlags = %d, expected DISPATCH_METHOD\n", wFlags
);
3178 hres
= IUnknown_QueryInterface(doc_unk
, &IID_IHTMLDocument2
, (void**)&doc
);
3179 ok(hres
== S_OK
, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres
);
3181 switch(dispIdMember
) {
3182 case DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE
:
3183 hres
= IHTMLDocument2_get_readyState(doc
, &state
);
3184 ok(hres
== S_OK
, "get_readyState failed: %08x\n", hres
);
3186 if(!strcmp_wa(state
, "interactive"))
3187 CHECK_EXPECT(Invoke_OnReadyStateChange_Interactive
);
3188 else if(!strcmp_wa(state
, "loading"))
3189 CHECK_EXPECT(Invoke_OnReadyStateChange_Loading
);
3190 else if(!strcmp_wa(state
, "complete")) {
3191 CHECK_EXPECT(Invoke_OnReadyStateChange_Complete
);
3194 ok(0, "Unexpected readyState: %s\n", wine_dbgstr_w(state
));
3196 SysFreeString(state
);
3198 case DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE
:
3209 break; /* FIXME: Handle these events. */
3211 ok(0, "Unexpected DISPID: %d\n", dispIdMember
);
3214 IHTMLDocument2_Release(doc
);
3218 static const IDispatchVtbl EventDispatchVtbl
= {
3219 EventDispatch_QueryInterface
,
3222 Dispatch_GetTypeInfoCount
,
3223 Dispatch_GetTypeInfo
,
3224 Dispatch_GetIDsOfNames
,
3225 EventDispatch_Invoke
3228 static IDispatch EventDispatch
= { &EventDispatchVtbl
};
3230 static HRESULT WINAPI
TravelLog_QueryInterface(ITravelLog
*iface
, REFIID riid
, void **ppv
)
3232 static const IID IID_IIETravelLog2
= {0xb67cefd2,0xe3f1,0x478a,{0x9b,0xfa,0xd8,0x93,0x70,0x37,0x5e,0x94}};
3234 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_ITravelLog
, riid
)) {
3239 if(!IsEqualGUID(&IID_IIETravelLog2
, riid
))
3240 ok(0, "unexpected call %s\n", debugstr_guid(riid
));
3243 return E_NOINTERFACE
;
3246 static ULONG WINAPI
TravelLog_AddRef(ITravelLog
*iface
)
3251 static ULONG WINAPI
TravelLog_Release(ITravelLog
*iface
)
3256 static HRESULT WINAPI
TravelLog_AddEntry(ITravelLog
*iface
, IUnknown
*punk
, BOOL fIsLocalAnchor
)
3258 ok(0, "unexpected call\n");
3262 static HRESULT WINAPI
TravelLog_UpdateEntry(ITravelLog
*iface
, IUnknown
*punk
, BOOL fIsLocalAnchor
)
3264 ok(0, "unexpected call\n");
3268 static HRESULT WINAPI
TravelLog_UpdateExternal(ITravelLog
*iface
, IUnknown
*punk
, IUnknown
*punkHLBrowseContext
)
3270 ok(0, "unexpected call\n");
3274 static HRESULT WINAPI
TravelLog_Travel(ITravelLog
*iface
, IUnknown
*punk
, int iOffset
)
3276 ok(0, "unexpected call\n");
3280 static HRESULT WINAPI
TravelLog_GetTravelEntry(ITravelLog
*iface
, IUnknown
*punk
, int iOffset
, ITravelEntry
**ppte
)
3282 ok(0, "unexpected call\n");
3286 static HRESULT WINAPI
TravelLog_FindTravelEntry(ITravelLog
*iface
, IUnknown
*punk
, LPCITEMIDLIST pidl
, ITravelEntry
**ppte
)
3288 ok(0, "unexpected call\n");
3292 static HRESULT WINAPI
TravelLog_GetTooltipText(ITravelLog
*iface
, IUnknown
*punk
, int iOffset
, int idsTemplate
,
3293 LPWSTR pwzText
, DWORD cchText
)
3295 ok(0, "unexpected call\n");
3299 static HRESULT WINAPI
TravelLog_InsertMenuEntries(ITravelLog
*iface
, IUnknown
*punk
, HMENU hmenu
, int nPos
,
3300 int idFirst
, int idLast
, DWORD dwFlags
)
3302 ok(0, "unexpected call\n");
3306 static HRESULT WINAPI
TravelLog_Clone(ITravelLog
*iface
, ITravelLog
**pptl
)
3308 ok(0, "unexpected call\n");
3312 static DWORD WINAPI
TravelLog_CountEntries(ITravelLog
*iface
, IUnknown
*punk
)
3314 CHECK_EXPECT(CountEntries
);
3318 static HRESULT WINAPI
TravelLog_Revert(ITravelLog
*iface
)
3320 ok(0, "unexpected call\n");
3324 static const ITravelLogVtbl TravelLogVtbl
= {
3325 TravelLog_QueryInterface
,
3329 TravelLog_UpdateEntry
,
3330 TravelLog_UpdateExternal
,
3332 TravelLog_GetTravelEntry
,
3333 TravelLog_FindTravelEntry
,
3334 TravelLog_GetTooltipText
,
3335 TravelLog_InsertMenuEntries
,
3337 TravelLog_CountEntries
,
3341 static ITravelLog TravelLog
= { &TravelLogVtbl
};
3343 static HRESULT
browserservice_qi(REFIID
,void**);
3345 static HRESULT WINAPI
DocObjectService_QueryInterface(IDocObjectService
* This
, REFIID riid
, void **ppv
)
3347 return browserservice_qi(riid
, ppv
);
3350 static ULONG WINAPI
DocObjectService_AddRef(
3351 IDocObjectService
* This
)
3356 static ULONG WINAPI
DocObjectService_Release(
3357 IDocObjectService
* This
)
3362 static HRESULT WINAPI
DocObjectService_FireBeforeNavigate2(IDocObjectService
*iface
, IDispatch
*pDispatch
,
3363 LPCWSTR lpszUrl
, DWORD dwFlags
, LPCWSTR lpszFrameName
, BYTE
*pPostData
, DWORD cbPostData
,
3364 LPCWSTR lpszHeaders
, BOOL fPlayNavSound
, BOOL
*pfCancel
)
3366 CHECK_EXPECT(FireBeforeNavigate2
);
3368 ok(!pDispatch
, "pDispatch = %p\n", pDispatch
);
3369 ok(!strcmp_wa(lpszUrl
, nav_url
), "lpszUrl = %s, expected %s\n", wine_dbgstr_w(lpszUrl
), nav_url
);
3370 ok(dwFlags
== 0x40 || !dwFlags
, "dwFlags = %x\n", dwFlags
);
3371 ok(!lpszFrameName
, "lpszFrameName = %s\n", wine_dbgstr_w(lpszFrameName
));
3372 ok(!pPostData
, "pPostData = %p\n", pPostData
);
3373 ok(!cbPostData
, "cbPostData = %d\n", cbPostData
);
3374 ok(!lpszHeaders
, "lpszHeaders = %s\n", wine_dbgstr_w(lpszHeaders
));
3375 ok(fPlayNavSound
, "fPlayNavSound = %x\n", fPlayNavSound
);
3376 ok(pfCancel
!= NULL
, "pfCancel = NULL\n");
3377 ok(!*pfCancel
, "*pfCancel = %x\n", *pfCancel
);
3382 static HRESULT WINAPI
DocObjectService_FireNavigateComplete2(
3383 IDocObjectService
* This
,
3384 IHTMLWindow2
*pHTMLWindow2
,
3387 CHECK_EXPECT(FireNavigateComplete2
);
3388 test_readyState(NULL
);
3391 ok(dwFlags
== 0x10 || broken(!dwFlags
), "dwFlags = %x, expected 0x10\n", dwFlags
);
3393 ok(!(dwFlags
&~1), "dwFlags = %x\n", dwFlags
);
3395 ok(pHTMLWindow2
!= NULL
, "pHTMLWindow2 = NULL\n");
3400 static HRESULT WINAPI
DocObjectService_FireDownloadBegin(
3401 IDocObjectService
* This
)
3403 ok(0, "unexpected call\n");
3407 static HRESULT WINAPI
DocObjectService_FireDownloadComplete(
3408 IDocObjectService
* This
)
3410 ok(0, "unexpected call\n");
3414 static HRESULT WINAPI
DocObjectService_FireDocumentComplete(
3415 IDocObjectService
* This
,
3416 IHTMLWindow2
*pHTMLWindow
,
3419 CHECK_EXPECT(FireDocumentComplete
);
3421 ok(pHTMLWindow
!= NULL
, "pHTMLWindow == NULL\n");
3422 ok(!dwFlags
, "dwFlags = %x\n", dwFlags
);
3427 static HRESULT WINAPI
DocObjectService_UpdateDesktopComponent(
3428 IDocObjectService
* This
,
3429 IHTMLWindow2
*pHTMLWindow
)
3431 ok(0, "unexpected call\n");
3435 static HRESULT WINAPI
DocObjectService_GetPendingUrl(
3436 IDocObjectService
* This
,
3437 BSTR
*pbstrPendingUrl
)
3439 CHECK_EXPECT(GetPendingUrl
);
3443 static HRESULT WINAPI
DocObjectService_ActiveElementChanged(
3444 IDocObjectService
* This
,
3445 IHTMLElement
*pHTMLElement
)
3447 CHECK_EXPECT2(ActiveElementChanged
);
3451 static HRESULT WINAPI
DocObjectService_GetUrlSearchComponent(
3452 IDocObjectService
* This
,
3455 ok(0, "unexpected call\n");
3459 static HRESULT WINAPI
DocObjectService_IsErrorUrl(
3460 IDocObjectService
* This
,
3464 CHECK_EXPECT(IsErrorUrl
);
3469 static IDocObjectServiceVtbl DocObjectServiceVtbl
= {
3470 DocObjectService_QueryInterface
,
3471 DocObjectService_AddRef
,
3472 DocObjectService_Release
,
3473 DocObjectService_FireBeforeNavigate2
,
3474 DocObjectService_FireNavigateComplete2
,
3475 DocObjectService_FireDownloadBegin
,
3476 DocObjectService_FireDownloadComplete
,
3477 DocObjectService_FireDocumentComplete
,
3478 DocObjectService_UpdateDesktopComponent
,
3479 DocObjectService_GetPendingUrl
,
3480 DocObjectService_ActiveElementChanged
,
3481 DocObjectService_GetUrlSearchComponent
,
3482 DocObjectService_IsErrorUrl
3485 static IDocObjectService DocObjectService
= { &DocObjectServiceVtbl
};
3487 static HRESULT WINAPI
ShellBrowser_QueryInterface(IShellBrowser
*iface
, REFIID riid
, void **ppv
)
3489 return browserservice_qi(riid
, ppv
);
3492 static ULONG WINAPI
ShellBrowser_AddRef(IShellBrowser
*iface
)
3497 static ULONG WINAPI
ShellBrowser_Release(IShellBrowser
*iface
)
3502 static HRESULT WINAPI
ShellBrowser_GetWindow(IShellBrowser
*iface
, HWND
*phwnd
)
3504 ok(0, "unexpected call\n");
3508 static HRESULT WINAPI
ShellBrowser_ContextSensitiveHelp(IShellBrowser
*iface
, BOOL fEnterMode
)
3510 ok(0, "unexpected call\n");
3514 static HRESULT WINAPI
ShellBrowser_InsertMenusSB(IShellBrowser
*iface
, HMENU hmenuShared
, LPOLEMENUGROUPWIDTHS lpMenuWidths
)
3516 ok(0, "unexpected call\n");
3520 static HRESULT WINAPI
ShellBrowser_SetMenuSB(IShellBrowser
*iface
, HMENU hmenuShared
, HOLEMENU holemenuReserved
,
3521 HWND hwndActiveObject
)
3523 ok(0, "unexpected call\n");
3527 static HRESULT WINAPI
ShellBrowser_RemoveMenusSB(IShellBrowser
*iface
, HMENU hmenuShared
)
3529 ok(0, "unexpected call\n");
3533 static HRESULT WINAPI
ShellBrowser_SetStatusTextSB(IShellBrowser
*iface
, LPCOLESTR pszStatusText
)
3535 ok(0, "unexpected call\n");
3539 static HRESULT WINAPI
ShellBrowser_EnableModelessSB(IShellBrowser
*iface
, BOOL fEnable
)
3541 ok(0, "unexpected call\n");
3545 static HRESULT WINAPI
ShellBrowser_TranslateAcceleratorSB(IShellBrowser
*iface
, MSG
*pmsg
, WORD wID
)
3547 ok(0, "unexpected call\n");
3551 static HRESULT WINAPI
ShellBrowser_BrowseObject(IShellBrowser
*iface
, LPCITEMIDLIST pidl
, UINT wFlags
)
3553 ok(0, "unexpected call\n");
3557 static HRESULT WINAPI
ShellBrowser_GetViewStateStream(IShellBrowser
*iface
, DWORD grfMode
, IStream
**ppStrm
)
3559 ok(0, "unexpected call\n");
3563 static HRESULT WINAPI
ShellBrowser_GetControlWindow(IShellBrowser
*iface
, UINT id
, HWND
*phwnd
)
3565 ok(0, "unexpected call\n");
3569 static HRESULT WINAPI
ShellBrowser_SendControlMsg(IShellBrowser
*iface
, UINT id
, UINT uMsg
, WPARAM wParam
,
3570 LPARAM lParam
, LRESULT
*pret
)
3572 ok(0, "unexpected call\n");
3576 static HRESULT WINAPI
ShellBrowser_QueryActiveShellView(IShellBrowser
*iface
, IShellView
**ppshv
)
3578 ok(0, "unexpected call\n");
3582 static HRESULT WINAPI
ShellBrowser_OnViewWindowActive(IShellBrowser
* iface
, IShellView
*pshv
)
3584 ok(0, "unexpected call\n");
3588 static HRESULT WINAPI
ShellBrowser_SetToolbarItems(IShellBrowser
*iface
, LPTBBUTTONSB lpButtons
,
3589 UINT nButtons
, UINT uFlags
)
3591 ok(0, "unexpected call\n");
3595 static const IShellBrowserVtbl ShellBrowserVtbl
= {
3596 ShellBrowser_QueryInterface
,
3597 ShellBrowser_AddRef
,
3598 ShellBrowser_Release
,
3599 ShellBrowser_GetWindow
,
3600 ShellBrowser_ContextSensitiveHelp
,
3601 ShellBrowser_InsertMenusSB
,
3602 ShellBrowser_SetMenuSB
,
3603 ShellBrowser_RemoveMenusSB
,
3604 ShellBrowser_SetStatusTextSB
,
3605 ShellBrowser_EnableModelessSB
,
3606 ShellBrowser_TranslateAcceleratorSB
,
3607 ShellBrowser_BrowseObject
,
3608 ShellBrowser_GetViewStateStream
,
3609 ShellBrowser_GetControlWindow
,
3610 ShellBrowser_SendControlMsg
,
3611 ShellBrowser_QueryActiveShellView
,
3612 ShellBrowser_OnViewWindowActive
,
3613 ShellBrowser_SetToolbarItems
3616 static IShellBrowser ShellBrowser
= { &ShellBrowserVtbl
};
3618 static HRESULT WINAPI
BrowserService_QueryInterface(IBrowserService
*iface
, REFIID riid
, void **ppv
)
3620 return browserservice_qi(riid
, ppv
);
3623 static ULONG WINAPI
BrowserService_AddRef(
3624 IBrowserService
* This
)
3629 static ULONG WINAPI
BrowserService_Release(
3630 IBrowserService
* This
)
3635 static HRESULT WINAPI
BrowserService_GetParentSite(
3636 IBrowserService
* This
,
3637 IOleInPlaceSite
**ppipsite
)
3639 ok(0, "unexpected call\n");
3643 static HRESULT WINAPI
BrowserService_SetTitle(
3644 IBrowserService
* This
,
3648 ok(0, "unexpected call\n");
3652 static HRESULT WINAPI
BrowserService_GetTitle(
3653 IBrowserService
* This
,
3658 ok(0, "unexpected call\n");
3662 static HRESULT WINAPI
BrowserService_GetOleObject(
3663 IBrowserService
* This
,
3664 IOleObject
**ppobjv
)
3666 ok(0, "unexpected call\n");
3670 static HRESULT WINAPI
BrowserService_GetTravelLog(IBrowserService
* This
, ITravelLog
**pptl
)
3672 CHECK_EXPECT(GetTravelLog
);
3674 ok(pptl
!= NULL
, "pptl = NULL\n");
3683 static HRESULT WINAPI
BrowserService_ShowControlWindow(
3684 IBrowserService
* This
,
3688 ok(0, "unexpected call\n");
3692 static HRESULT WINAPI
BrowserService_IsControlWindowShown(
3693 IBrowserService
* This
,
3697 ok(0, "unexpected call\n");
3701 static HRESULT WINAPI
BrowserService_IEGetDisplayName(
3702 IBrowserService
* This
,
3703 PCIDLIST_ABSOLUTE pidl
,
3707 ok(0, "unexpected call\n");
3711 static HRESULT WINAPI
BrowserService_IEParseDisplayName(
3712 IBrowserService
* This
,
3715 PIDLIST_ABSOLUTE
*ppidlOut
)
3717 ok(0, "unexpected call\n");
3721 static HRESULT WINAPI
BrowserService_DisplayParseError(
3722 IBrowserService
* This
,
3726 ok(0, "unexpected call\n");
3730 static HRESULT WINAPI
BrowserService_NavigateToPidl(
3731 IBrowserService
* This
,
3732 PCIDLIST_ABSOLUTE pidl
,
3735 ok(0, "unexpected call\n");
3739 static HRESULT WINAPI
BrowserService_SetNavigateState(
3740 IBrowserService
* This
,
3743 ok(0, "unexpected call\n");
3747 static HRESULT WINAPI
BrowserService_GetNavigateState(
3748 IBrowserService
* This
,
3751 ok(0, "unexpected call\n");
3755 static HRESULT WINAPI
BrowserService_NotifyRedirect(
3756 IBrowserService
* This
,
3758 PCIDLIST_ABSOLUTE pidl
,
3761 ok(0, "unexpected call\n");
3765 static HRESULT WINAPI
BrowserService_UpdateWindowList(
3766 IBrowserService
* This
)
3768 ok(0, "unexpected call\n");
3772 static HRESULT WINAPI
BrowserService_UpdateBackForwardState(
3773 IBrowserService
* This
)
3775 CHECK_EXPECT(UpdateBackForwardState
);
3779 static HRESULT WINAPI
BrowserService_SetFlags(
3780 IBrowserService
* This
,
3784 ok(0, "unexpected call\n");
3788 static HRESULT WINAPI
BrowserService_GetFlags(
3789 IBrowserService
* This
,
3792 ok(0, "unexpected call\n");
3796 static HRESULT WINAPI
BrowserService_CanNavigateNow(
3797 IBrowserService
* This
)
3799 ok(0, "unexpected call\n");
3803 static HRESULT WINAPI
BrowserService_GetPidl(
3804 IBrowserService
* This
,
3805 PIDLIST_ABSOLUTE
*ppidl
)
3807 ok(0, "unexpected call\n");
3811 static HRESULT WINAPI
BrowserService_SetReferrer(
3812 IBrowserService
* This
,
3813 PCIDLIST_ABSOLUTE pidl
)
3815 ok(0, "unexpected call\n");
3819 static DWORD WINAPI
BrowserService_GetBrowserIndex(
3820 IBrowserService
* This
)
3822 ok(0, "unexpected call\n");
3826 static HRESULT WINAPI
BrowserService_GetBrowserByIndex(
3827 IBrowserService
* This
,
3831 ok(0, "unexpected call\n");
3835 static HRESULT WINAPI
BrowserService_GetHistoryObject(
3836 IBrowserService
* This
,
3841 ok(0, "unexpected call\n");
3845 static HRESULT WINAPI
BrowserService_SetHistoryObject(
3846 IBrowserService
* This
,
3848 BOOL fIsLocalAnchor
)
3850 ok(0, "unexpected call\n");
3854 static HRESULT WINAPI
BrowserService_CacheOLEServer(
3855 IBrowserService
* This
,
3858 ok(0, "unexpected call\n");
3862 static HRESULT WINAPI
BrowserService_GetSetCodePage(
3863 IBrowserService
* This
,
3867 ok(0, "unexpected call\n");
3871 static HRESULT WINAPI
BrowserService_OnHttpEquiv(
3872 IBrowserService
* This
,
3876 VARIANT
*pvarargOut
)
3878 ok(0, "unexpected call\n");
3882 static HRESULT WINAPI
BrowserService_GetPalette(
3883 IBrowserService
* This
,
3886 ok(0, "unexpected call\n");
3890 static HRESULT WINAPI
BrowserService_RegisterWindow(
3891 IBrowserService
* This
,
3892 BOOL fForceRegister
,
3895 ok(0, "unexpected call\n");
3899 static IBrowserServiceVtbl BrowserServiceVtbl
= {
3900 BrowserService_QueryInterface
,
3901 BrowserService_AddRef
,
3902 BrowserService_Release
,
3903 BrowserService_GetParentSite
,
3904 BrowserService_SetTitle
,
3905 BrowserService_GetTitle
,
3906 BrowserService_GetOleObject
,
3907 BrowserService_GetTravelLog
,
3908 BrowserService_ShowControlWindow
,
3909 BrowserService_IsControlWindowShown
,
3910 BrowserService_IEGetDisplayName
,
3911 BrowserService_IEParseDisplayName
,
3912 BrowserService_DisplayParseError
,
3913 BrowserService_NavigateToPidl
,
3914 BrowserService_SetNavigateState
,
3915 BrowserService_GetNavigateState
,
3916 BrowserService_NotifyRedirect
,
3917 BrowserService_UpdateWindowList
,
3918 BrowserService_UpdateBackForwardState
,
3919 BrowserService_SetFlags
,
3920 BrowserService_GetFlags
,
3921 BrowserService_CanNavigateNow
,
3922 BrowserService_GetPidl
,
3923 BrowserService_SetReferrer
,
3924 BrowserService_GetBrowserIndex
,
3925 BrowserService_GetBrowserByIndex
,
3926 BrowserService_GetHistoryObject
,
3927 BrowserService_SetHistoryObject
,
3928 BrowserService_CacheOLEServer
,
3929 BrowserService_GetSetCodePage
,
3930 BrowserService_OnHttpEquiv
,
3931 BrowserService_GetPalette
,
3932 BrowserService_RegisterWindow
3935 static IBrowserService BrowserService
= { &BrowserServiceVtbl
};
3937 DEFINE_GUID(IID_ITabBrowserService
, 0x5E8FA523,0x83D4,0x4DBE,0x81,0x99,0x4C,0x18,0xE4,0x85,0x87,0x25);
3939 static HRESULT
browserservice_qi(REFIID riid
, void **ppv
)
3941 if(IsEqualGUID(&IID_IShellBrowser
, riid
)) {
3942 *ppv
= &ShellBrowser
;
3946 if(IsEqualGUID(&IID_IDocObjectService
, riid
)) {
3947 *ppv
= &DocObjectService
;
3951 if(IsEqualGUID(&IID_IBrowserService
, riid
)) {
3952 *ppv
= &BrowserService
;
3957 return E_NOINTERFACE
;
3960 static HRESULT WINAPI
WBE2Sink_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
3962 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IDispatch
, riid
)) {
3968 ok(0, "unexpected riid: %s\n", debugstr_guid(riid
));
3969 return E_NOINTERFACE
;
3972 static HRESULT WINAPI
WBE2Sink_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
3973 LCID lcid
, WORD wFlags
, DISPPARAMS
*pdp
, VARIANT
*pVarResult
,
3974 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
3976 ok(IsEqualGUID(&IID_NULL
, riid
), "riid != IID_NULL\n");
3977 ok(pdp
!= NULL
, "pDispParams == NULL\n");
3978 ok(pExcepInfo
== NULL
, "pExcepInfo=%p, expected NULL\n", pExcepInfo
);
3979 ok(puArgErr
== NULL
, "puArgErr != NULL\n");
3980 ok(pVarResult
== NULL
, "pVarResult != NULL\n");
3981 ok(wFlags
== DISPATCH_METHOD
, "wFlags=%08x, expected DISPATCH_METHOD\n", wFlags
);
3982 ok(!pdp
->cNamedArgs
, "pdp->cNamedArgs = %d\n", pdp
->cNamedArgs
);
3983 ok(!pdp
->rgdispidNamedArgs
, "rgdispidNamedArgs = %p\n", pdp
->rgdispidNamedArgs
);
3985 switch(dispIdMember
) {
3986 case DISPID_WINDOWCLOSING
: {
3987 VARIANT
*is_child
= pdp
->rgvarg
+1, *cancel
= pdp
->rgvarg
;
3989 CHECK_EXPECT(WindowClosing
);
3991 ok(pdp
->cArgs
== 2, "pdp->cArgs = %d\n", pdp
->cArgs
);
3992 ok(V_VT(is_child
) == VT_BOOL
, "V_VT(is_child) = %d\n", V_VT(is_child
));
3993 ok(!V_BOOL(is_child
), "V_BOOL(is_child) = %x\n", V_BOOL(is_child
));
3994 ok(V_VT(cancel
) == (VT_BYREF
|VT_BOOL
), "V_VT(cancel) = %d\n", V_VT(cancel
));
3995 ok(!*V_BOOLREF(cancel
), "*V_BOOLREF(cancel) = %x\n", *V_BOOLREF(cancel
));
3997 *V_BOOLREF(cancel
) = VARIANT_TRUE
;
4001 ok(0, "unexpected id %d\n", dispIdMember
);
4007 static const IDispatchVtbl WBE2SinkVtbl
= {
4008 WBE2Sink_QueryInterface
,
4011 Dispatch_GetTypeInfoCount
,
4012 Dispatch_GetTypeInfo
,
4013 Dispatch_GetIDsOfNames
,
4017 static IDispatch WBE2Sink
= { &WBE2SinkVtbl
};
4019 static HRESULT WINAPI
EnumConnections_QueryInterface(IEnumConnections
*iface
, REFIID riid
, LPVOID
*ppv
)
4021 ok(0, "unexpected call\n");
4022 return E_NOINTERFACE
;
4025 static ULONG WINAPI
EnumConnections_AddRef(IEnumConnections
*iface
)
4030 static ULONG WINAPI
EnumConnections_Release(IEnumConnections
*iface
)
4035 static BOOL next_called
;
4037 static HRESULT WINAPI
EnumConnections_Next(IEnumConnections
*iface
, ULONG cConnections
, CONNECTDATA
*rgcd
, ULONG
*pcFetched
)
4039 CHECK_EXPECT2(EnumConnections_Next
);
4041 ok(cConnections
== 1, "cConnections = %d\n", cConnections
);
4042 ok(pcFetched
!= NULL
, "pcFetched == NULL\n");
4050 rgcd
->pUnk
= (IUnknown
*)&WBE2Sink
;
4051 rgcd
->dwCookie
= 0xdeadbeef;
4056 static HRESULT WINAPI
EnumConnections_Skip(IEnumConnections
*iface
, ULONG ulConnections
)
4058 ok(0, "unexpected call\n");
4059 return E_NOINTERFACE
;
4062 static HRESULT WINAPI
EnumConnections_Reset(IEnumConnections
*iface
)
4064 ok(0, "unexpected call\n");
4065 return E_NOINTERFACE
;
4068 static HRESULT WINAPI
EnumConnections_Clone(IEnumConnections
*iface
, IEnumConnections
**ppEnum
)
4070 ok(0, "unexpected call\n");
4071 return E_NOINTERFACE
;
4074 static const IEnumConnectionsVtbl EnumConnectionsVtbl
= {
4075 EnumConnections_QueryInterface
,
4076 EnumConnections_AddRef
,
4077 EnumConnections_Release
,
4078 EnumConnections_Next
,
4079 EnumConnections_Skip
,
4080 EnumConnections_Reset
,
4081 EnumConnections_Clone
4084 static IEnumConnections EnumConnections
= { &EnumConnectionsVtbl
};
4086 static HRESULT WINAPI
ConnectionPoint_QueryInterface(IConnectionPoint
*iface
, REFIID riid
, LPVOID
*ppv
)
4088 ok(0, "unexpected call\n");
4089 return E_NOINTERFACE
;
4092 static ULONG WINAPI
ConnectionPoint_AddRef(IConnectionPoint
*iface
)
4097 static ULONG WINAPI
ConnectionPoint_Release(IConnectionPoint
*iface
)
4102 static HRESULT WINAPI
ConnectionPoint_GetConnectionInterface(IConnectionPoint
*iface
, IID
*pIID
)
4104 ok(0, "unexpected call\n");
4108 static HRESULT WINAPI
ConnectionPoint_GetConnectionPointContainer(IConnectionPoint
*iface
,
4109 IConnectionPointContainer
**ppCPC
)
4111 ok(0, "unexpected call\n");
4115 static HRESULT WINAPI
ConnectionPoint_Advise(IConnectionPoint
*iface
, IUnknown
*pUnkSink
, DWORD
*pdwCookie
)
4117 ok(0, "unexpected call\n");
4121 static HRESULT WINAPI
ConnectionPoint_Unadvise(IConnectionPoint
*iface
, DWORD dwCookie
)
4123 ok(0, "unexpected call\n");
4127 static HRESULT WINAPI
ConnectionPoint_EnumConnections(IConnectionPoint
*iface
, IEnumConnections
**ppEnum
)
4129 CHECK_EXPECT(EnumConnections
);
4131 *ppEnum
= &EnumConnections
;
4132 next_called
= FALSE
;
4136 static const IConnectionPointVtbl ConnectionPointVtbl
=
4138 ConnectionPoint_QueryInterface
,
4139 ConnectionPoint_AddRef
,
4140 ConnectionPoint_Release
,
4141 ConnectionPoint_GetConnectionInterface
,
4142 ConnectionPoint_GetConnectionPointContainer
,
4143 ConnectionPoint_Advise
,
4144 ConnectionPoint_Unadvise
,
4145 ConnectionPoint_EnumConnections
4148 static IConnectionPoint ConnectionPointWBE2
= { &ConnectionPointVtbl
};
4150 static HRESULT WINAPI
ConnectionPointContainer_QueryInterface(IConnectionPointContainer
*iface
,
4151 REFIID riid
, void **ppv
)
4153 ok(0, "unexpected call\n");
4154 return E_NOINTERFACE
;
4157 static ULONG WINAPI
ConnectionPointContainer_AddRef(IConnectionPointContainer
*iface
)
4162 static ULONG WINAPI
ConnectionPointContainer_Release(IConnectionPointContainer
*iface
)
4167 static HRESULT WINAPI
ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer
*iface
,
4168 IEnumConnectionPoints
**ppEnum
)
4170 ok(0, "unexpected call\n");
4174 static HRESULT WINAPI
ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer
*iface
,
4175 REFIID riid
, IConnectionPoint
**ppCP
)
4177 CHECK_EXPECT(FindConnectionPoint
);
4179 if(IsEqualGUID(riid
, &DIID_DWebBrowserEvents2
)) {
4180 *ppCP
= &ConnectionPointWBE2
;
4184 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
4188 static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl
= {
4189 ConnectionPointContainer_QueryInterface
,
4190 ConnectionPointContainer_AddRef
,
4191 ConnectionPointContainer_Release
,
4192 ConnectionPointContainer_EnumConnectionPoints
,
4193 ConnectionPointContainer_FindConnectionPoint
4196 static IConnectionPointContainer ConnectionPointContainer
= { &ConnectionPointContainerVtbl
};
4198 static HRESULT WINAPI
WebBrowser_QueryInterface(IWebBrowser2
*iface
, REFIID riid
, void **ppv
)
4202 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IWebBrowser
, riid
)
4203 || IsEqualGUID(&IID_IWebBrowserApp
, riid
) || IsEqualGUID(&IID_IWebBrowser2
, riid
)) {
4208 if(IsEqualGUID(riid
, &IID_IOleObject
))
4209 return E_NOINTERFACE
; /* TODO */
4211 if(IsEqualGUID(riid
, &IID_IConnectionPointContainer
)) {
4212 *ppv
= &ConnectionPointContainer
;
4216 ok(0, "unexpected call %s\n", debugstr_guid(riid
));
4217 return E_NOINTERFACE
;
4220 static ULONG WINAPI
WebBrowser_AddRef(IWebBrowser2
*iface
)
4225 static ULONG WINAPI
WebBrowser_Release(IWebBrowser2
*iface
)
4230 static HRESULT WINAPI
WebBrowser_GetTypeInfoCount(IWebBrowser2
*iface
, UINT
*pctinfo
)
4232 ok(0, "unexpected call\n");
4236 static HRESULT WINAPI
WebBrowser_GetTypeInfo(IWebBrowser2
*iface
, UINT iTInfo
, LCID lcid
,
4237 LPTYPEINFO
*ppTInfo
)
4239 ok(0, "unexpected call\n");
4243 static HRESULT WINAPI
WebBrowser_GetIDsOfNames(IWebBrowser2
*iface
, REFIID riid
,
4244 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
4246 ok(0, "unexpected call\n");
4250 static HRESULT WINAPI
WebBrowser_Invoke(IWebBrowser2
*iface
, DISPID dispIdMember
,
4251 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
4252 EXCEPINFO
*pExepInfo
, UINT
*puArgErr
)
4254 ok(0, "unexpected call\n");
4258 static HRESULT WINAPI
WebBrowser_GoBack(IWebBrowser2
*iface
)
4260 ok(0, "unexpected call\n");
4264 static HRESULT WINAPI
WebBrowser_GoForward(IWebBrowser2
*iface
)
4266 ok(0, "unexpected call\n");
4270 static HRESULT WINAPI
WebBrowser_GoHome(IWebBrowser2
*iface
)
4272 ok(0, "unexpected call\n");
4276 static HRESULT WINAPI
WebBrowser_GoSearch(IWebBrowser2
*iface
)
4278 ok(0, "unexpected call\n");
4282 static HRESULT WINAPI
WebBrowser_Navigate(IWebBrowser2
*iface
, BSTR szUrl
,
4283 VARIANT
*Flags
, VARIANT
*TargetFrameName
, VARIANT
*PostData
, VARIANT
*Headers
)
4285 ok(0, "unexpected call\n");
4289 static HRESULT WINAPI
WebBrowser_Refresh(IWebBrowser2
*iface
)
4291 ok(0, "unexpected call\n");
4295 static HRESULT WINAPI
WebBrowser_Refresh2(IWebBrowser2
*iface
, VARIANT
*Level
)
4297 ok(0, "unexpected call\n");
4301 static HRESULT WINAPI
WebBrowser_Stop(IWebBrowser2
*iface
)
4303 ok(0, "unexpected call\n");
4307 static HRESULT WINAPI
WebBrowser_get_Application(IWebBrowser2
*iface
, IDispatch
**ppDisp
)
4309 ok(0, "unexpected call\n");
4313 static HRESULT WINAPI
WebBrowser_get_Parent(IWebBrowser2
*iface
, IDispatch
**ppDisp
)
4315 ok(0, "unexpected call\n");
4319 static HRESULT WINAPI
WebBrowser_get_Container(IWebBrowser2
*iface
, IDispatch
**ppDisp
)
4321 ok(0, "unexpected call\n");
4325 static HRESULT WINAPI
WebBrowser_get_Document(IWebBrowser2
*iface
, IDispatch
**ppDisp
)
4327 ok(0, "unexpected call\n");
4331 static HRESULT WINAPI
WebBrowser_get_TopLevelContainer(IWebBrowser2
*iface
, VARIANT_BOOL
*pBool
)
4333 ok(0, "unexpected call\n");
4337 static HRESULT WINAPI
WebBrowser_get_Type(IWebBrowser2
*iface
, BSTR
*Type
)
4339 ok(0, "unexpected call\n");
4343 static HRESULT WINAPI
WebBrowser_get_Left(IWebBrowser2
*iface
, LONG
*pl
)
4345 ok(0, "unexpected call\n");
4349 static HRESULT WINAPI
WebBrowser_put_Left(IWebBrowser2
*iface
, LONG Left
)
4351 ok(0, "unexpected call\n");
4355 static HRESULT WINAPI
WebBrowser_get_Top(IWebBrowser2
*iface
, LONG
*pl
)
4357 ok(0, "unexpected call\n");
4361 static HRESULT WINAPI
WebBrowser_put_Top(IWebBrowser2
*iface
, LONG Top
)
4363 ok(0, "unexpected call\n");
4367 static HRESULT WINAPI
WebBrowser_get_Width(IWebBrowser2
*iface
, LONG
*pl
)
4369 ok(0, "unexpected call\n");
4373 static HRESULT WINAPI
WebBrowser_put_Width(IWebBrowser2
*iface
, LONG Width
)
4375 ok(0, "unexpected call\n");
4379 static HRESULT WINAPI
WebBrowser_get_Height(IWebBrowser2
*iface
, LONG
*pl
)
4381 ok(0, "unexpected call\n");
4385 static HRESULT WINAPI
WebBrowser_put_Height(IWebBrowser2
*iface
, LONG Height
)
4387 ok(0, "unexpected call\n");
4391 static HRESULT WINAPI
WebBrowser_get_LocationName(IWebBrowser2
*iface
, BSTR
*LocationName
)
4393 ok(0, "unexpected call\n");
4397 static HRESULT WINAPI
WebBrowser_get_LocationURL(IWebBrowser2
*iface
, BSTR
*LocationURL
)
4399 CHECK_EXPECT(get_LocationURL
);
4403 static HRESULT WINAPI
WebBrowser_get_Busy(IWebBrowser2
*iface
, VARIANT_BOOL
*pBool
)
4405 ok(0, "unexpected call\n");
4409 static HRESULT WINAPI
WebBrowser_Quit(IWebBrowser2
*iface
)
4411 ok(0, "unexpected call\n");
4415 static HRESULT WINAPI
WebBrowser_ClientToWindow(IWebBrowser2
*iface
, int *pcx
, int *pcy
)
4417 ok(0, "unexpected call\n");
4421 static HRESULT WINAPI
WebBrowser_PutProperty(IWebBrowser2
*iface
, BSTR szProperty
, VARIANT vtValue
)
4423 ok(0, "unexpected call\n");
4427 static HRESULT WINAPI
WebBrowser_GetProperty(IWebBrowser2
*iface
, BSTR szProperty
, VARIANT
*pvtValue
)
4429 ok(0, "unexpected call\n");
4433 static HRESULT WINAPI
WebBrowser_get_Name(IWebBrowser2
*iface
, BSTR
*Name
)
4435 ok(0, "unexpected call\n");
4439 static HRESULT WINAPI
WebBrowser_get_HWND(IWebBrowser2
*iface
, LONG
*pHWND
)
4441 ok(0, "unexpected call\n");
4445 static HRESULT WINAPI
WebBrowser_get_FullName(IWebBrowser2
*iface
, BSTR
*FullName
)
4447 ok(0, "unexpected call\n");
4451 static HRESULT WINAPI
WebBrowser_get_Path(IWebBrowser2
*iface
, BSTR
*Path
)
4453 ok(0, "unexpected call\n");
4457 static HRESULT WINAPI
WebBrowser_get_Visible(IWebBrowser2
*iface
, VARIANT_BOOL
*pBool
)
4459 ok(0, "unexpected call\n");
4463 static HRESULT WINAPI
WebBrowser_put_Visible(IWebBrowser2
*iface
, VARIANT_BOOL Value
)
4465 ok(0, "unexpected call\n");
4469 static HRESULT WINAPI
WebBrowser_get_StatusBar(IWebBrowser2
*iface
, VARIANT_BOOL
*pBool
)
4471 ok(0, "unexpected call\n");
4475 static HRESULT WINAPI
WebBrowser_put_StatusBar(IWebBrowser2
*iface
, VARIANT_BOOL Value
)
4477 ok(0, "unexpected call\n");
4481 static HRESULT WINAPI
WebBrowser_get_StatusText(IWebBrowser2
*iface
, BSTR
*StatusText
)
4483 ok(0, "unexpected call\n");
4487 static HRESULT WINAPI
WebBrowser_put_StatusText(IWebBrowser2
*iface
, BSTR StatusText
)
4489 ok(0, "unexpected call\n");
4493 static HRESULT WINAPI
WebBrowser_get_ToolBar(IWebBrowser2
*iface
, int *Value
)
4495 ok(0, "unexpected call\n");
4499 static HRESULT WINAPI
WebBrowser_put_ToolBar(IWebBrowser2
*iface
, int Value
)
4501 ok(0, "unexpected call\n");
4505 static HRESULT WINAPI
WebBrowser_get_MenuBar(IWebBrowser2
*iface
, VARIANT_BOOL
*Value
)
4507 ok(0, "unexpected call\n");
4511 static HRESULT WINAPI
WebBrowser_put_MenuBar(IWebBrowser2
*iface
, VARIANT_BOOL Value
)
4513 ok(0, "unexpected call\n");
4517 static HRESULT WINAPI
WebBrowser_get_FullScreen(IWebBrowser2
*iface
, VARIANT_BOOL
*pbFullScreen
)
4519 ok(0, "unexpected call\n");
4523 static HRESULT WINAPI
WebBrowser_put_FullScreen(IWebBrowser2
*iface
, VARIANT_BOOL bFullScreen
)
4525 ok(0, "unexpected call\n");
4529 static HRESULT WINAPI
WebBrowser_Navigate2(IWebBrowser2
*iface
, VARIANT
*URL
, VARIANT
*Flags
,
4530 VARIANT
*TargetFrameName
, VARIANT
*PostData
, VARIANT
*Headers
)
4532 ok(0, "unexpected call\n");
4536 static HRESULT WINAPI
WebBrowser_QueryStatusWB(IWebBrowser2
*iface
, OLECMDID cmdID
, OLECMDF
*pcmdf
)
4538 ok(0, "unexpected call\n");
4542 static HRESULT WINAPI
WebBrowser_ExecWB(IWebBrowser2
*iface
, OLECMDID cmdID
,
4543 OLECMDEXECOPT cmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
4545 ok(0, "unexpected call\n");
4549 static HRESULT WINAPI
WebBrowser_ShowBrowserBar(IWebBrowser2
*iface
, VARIANT
*pvaClsid
,
4550 VARIANT
*pvarShow
, VARIANT
*pvarSize
)
4552 ok(0, "unexpected call\n");
4556 static HRESULT WINAPI
WebBrowser_get_ReadyState(IWebBrowser2
*iface
, READYSTATE
*lpReadyState
)
4558 ok(0, "unexpected call\n");
4562 static HRESULT WINAPI
WebBrowser_get_Offline(IWebBrowser2
*iface
, VARIANT_BOOL
*pbOffline
)
4564 ok(0, "unexpected call\n");
4568 static HRESULT WINAPI
WebBrowser_put_Offline(IWebBrowser2
*iface
, VARIANT_BOOL bOffline
)
4570 ok(0, "unexpected call\n");
4574 static HRESULT WINAPI
WebBrowser_get_Silent(IWebBrowser2
*iface
, VARIANT_BOOL
*pbSilent
)
4576 ok(0, "unexpected call\n");
4580 static HRESULT WINAPI
WebBrowser_put_Silent(IWebBrowser2
*iface
, VARIANT_BOOL bSilent
)
4582 ok(0, "unexpected call\n");
4586 static HRESULT WINAPI
WebBrowser_get_RegisterAsBrowser(IWebBrowser2
*iface
,
4587 VARIANT_BOOL
*pbRegister
)
4589 ok(0, "unexpected call\n");
4593 static HRESULT WINAPI
WebBrowser_put_RegisterAsBrowser(IWebBrowser2
*iface
,
4594 VARIANT_BOOL bRegister
)
4596 ok(0, "unexpected call\n");
4600 static HRESULT WINAPI
WebBrowser_get_RegisterAsDropTarget(IWebBrowser2
*iface
,
4601 VARIANT_BOOL
*pbRegister
)
4603 ok(0, "unexpected call\n");
4607 static HRESULT WINAPI
WebBrowser_put_RegisterAsDropTarget(IWebBrowser2
*iface
,
4608 VARIANT_BOOL bRegister
)
4610 ok(0, "unexpected call\n");
4614 static HRESULT WINAPI
WebBrowser_get_TheaterMode(IWebBrowser2
*iface
, VARIANT_BOOL
*pbRegister
)
4616 ok(0, "unexpected call\n");
4620 static HRESULT WINAPI
WebBrowser_put_TheaterMode(IWebBrowser2
*iface
, VARIANT_BOOL bRegister
)
4622 ok(0, "unexpected call\n");
4626 static HRESULT WINAPI
WebBrowser_get_AddressBar(IWebBrowser2
*iface
, VARIANT_BOOL
*Value
)
4628 ok(0, "unexpected call\n");
4632 static HRESULT WINAPI
WebBrowser_put_AddressBar(IWebBrowser2
*iface
, VARIANT_BOOL Value
)
4634 ok(0, "unexpected call\n");
4638 static HRESULT WINAPI
WebBrowser_get_Resizable(IWebBrowser2
*iface
, VARIANT_BOOL
*Value
)
4640 ok(0, "unexpected call\n");
4644 static HRESULT WINAPI
WebBrowser_put_Resizable(IWebBrowser2
*iface
, VARIANT_BOOL Value
)
4646 ok(0, "unexpected call\n");
4650 static const IWebBrowser2Vtbl WebBrowser2Vtbl
=
4652 WebBrowser_QueryInterface
,
4655 WebBrowser_GetTypeInfoCount
,
4656 WebBrowser_GetTypeInfo
,
4657 WebBrowser_GetIDsOfNames
,
4660 WebBrowser_GoForward
,
4662 WebBrowser_GoSearch
,
4663 WebBrowser_Navigate
,
4665 WebBrowser_Refresh2
,
4667 WebBrowser_get_Application
,
4668 WebBrowser_get_Parent
,
4669 WebBrowser_get_Container
,
4670 WebBrowser_get_Document
,
4671 WebBrowser_get_TopLevelContainer
,
4672 WebBrowser_get_Type
,
4673 WebBrowser_get_Left
,
4674 WebBrowser_put_Left
,
4677 WebBrowser_get_Width
,
4678 WebBrowser_put_Width
,
4679 WebBrowser_get_Height
,
4680 WebBrowser_put_Height
,
4681 WebBrowser_get_LocationName
,
4682 WebBrowser_get_LocationURL
,
4683 WebBrowser_get_Busy
,
4685 WebBrowser_ClientToWindow
,
4686 WebBrowser_PutProperty
,
4687 WebBrowser_GetProperty
,
4688 WebBrowser_get_Name
,
4689 WebBrowser_get_HWND
,
4690 WebBrowser_get_FullName
,
4691 WebBrowser_get_Path
,
4692 WebBrowser_get_Visible
,
4693 WebBrowser_put_Visible
,
4694 WebBrowser_get_StatusBar
,
4695 WebBrowser_put_StatusBar
,
4696 WebBrowser_get_StatusText
,
4697 WebBrowser_put_StatusText
,
4698 WebBrowser_get_ToolBar
,
4699 WebBrowser_put_ToolBar
,
4700 WebBrowser_get_MenuBar
,
4701 WebBrowser_put_MenuBar
,
4702 WebBrowser_get_FullScreen
,
4703 WebBrowser_put_FullScreen
,
4704 WebBrowser_Navigate2
,
4705 WebBrowser_QueryStatusWB
,
4707 WebBrowser_ShowBrowserBar
,
4708 WebBrowser_get_ReadyState
,
4709 WebBrowser_get_Offline
,
4710 WebBrowser_put_Offline
,
4711 WebBrowser_get_Silent
,
4712 WebBrowser_put_Silent
,
4713 WebBrowser_get_RegisterAsBrowser
,
4714 WebBrowser_put_RegisterAsBrowser
,
4715 WebBrowser_get_RegisterAsDropTarget
,
4716 WebBrowser_put_RegisterAsDropTarget
,
4717 WebBrowser_get_TheaterMode
,
4718 WebBrowser_put_TheaterMode
,
4719 WebBrowser_get_AddressBar
,
4720 WebBrowser_put_AddressBar
,
4721 WebBrowser_get_Resizable
,
4722 WebBrowser_put_Resizable
4725 static IWebBrowser2 WebBrowser2
= { &WebBrowser2Vtbl
};
4727 static HRESULT WINAPI
ServiceProvider_QueryInterface(IServiceProvider
*iface
,
4728 REFIID riid
, void **ppv
)
4730 return QueryInterface(riid
, ppv
);
4733 static ULONG WINAPI
ServiceProvider_AddRef(IServiceProvider
*iface
)
4738 static ULONG WINAPI
ServiceProvider_Release(IServiceProvider
*iface
)
4743 static HRESULT WINAPI
ServiceProvider_QueryService(IServiceProvider
*iface
, REFGUID guidService
,
4744 REFIID riid
, void **ppv
)
4747 * Services used by HTMLDocument:
4750 * IInternetSecurityManager
4752 * {D5F78C80-5252-11CF-90FA-00AA0042106E}
4755 * {3050F312-98B5-11CF-BB82-00AA00BDCE0B}
4756 * {53A2D5B1-D2FC-11D0-84E0-006097C9987D}
4757 * {AD7F6C62-F6BD-11D2-959B-006097C553C8}
4759 * {6D12FE80-7911-11CF-9534-0000C05BAE0B}
4760 * IElementBehaviorFactory
4761 * {3050F429-98B5-11CF-BB82-00AA00BDCE0B}
4770 if(IsEqualGUID(&IID_IHlinkFrame
, guidService
)) {
4771 ok(IsEqualGUID(&IID_IHlinkFrame
, riid
), "unexpected riid\n");
4776 if(IsEqualGUID(&SID_SNewWindowManager
, guidService
)) {
4777 ok(IsEqualGUID(&IID_INewWindowManager
, riid
), "unexpected riid\n");
4778 *ppv
= &NewWindowManager
;
4782 if(IsEqualGUID(&IID_IShellBrowser
, guidService
)) {
4783 ok(IsEqualGUID(&IID_IBrowserService
, riid
), "unexpected riid\n");
4784 *ppv
= &BrowserService
;
4788 if(support_wbapp
&& IsEqualGUID(&IID_IWebBrowserApp
, guidService
)) {
4789 if(IsEqualGUID(riid
, &IID_IWebBrowser2
)) {
4790 *ppv
= &WebBrowser2
;
4793 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
4796 return E_NOINTERFACE
;
4799 static const IServiceProviderVtbl ServiceProviderVtbl
= {
4800 ServiceProvider_QueryInterface
,
4801 ServiceProvider_AddRef
,
4802 ServiceProvider_Release
,
4803 ServiceProvider_QueryService
4806 static IServiceProvider ServiceProvider
= { &ServiceProviderVtbl
};
4808 static HRESULT WINAPI
AdviseSink_QueryInterface(IAdviseSinkEx
*iface
,
4809 REFIID riid
, void **ppv
)
4811 return QueryInterface(riid
, ppv
);
4814 static ULONG WINAPI
AdviseSink_AddRef(IAdviseSinkEx
*iface
)
4819 static ULONG WINAPI
AdviseSink_Release(IAdviseSinkEx
*iface
)
4824 static void WINAPI
AdviseSink_OnDataChange(IAdviseSinkEx
*iface
,
4825 FORMATETC
*pFormatetc
, STGMEDIUM
*pStgmed
)
4827 ok(0, "unexpected call\n");
4830 static void WINAPI
AdviseSink_OnViewChange(IAdviseSinkEx
*iface
,
4831 DWORD dwAspect
, LONG lindex
)
4833 ok(0, "unexpected call\n");
4836 static void WINAPI
AdviseSink_OnRename(IAdviseSinkEx
*iface
, IMoniker
*pmk
)
4838 ok(0, "unexpected call\n");
4841 static void WINAPI
AdviseSink_OnSave(IAdviseSinkEx
*iface
)
4843 ok(0, "unexpected call\n");
4846 static void WINAPI
AdviseSink_OnClose(IAdviseSinkEx
*iface
)
4848 ok(0, "unexpected call\n");
4851 static void WINAPI
AdviseSinkEx_OnViewStatusChange(IAdviseSinkEx
*iface
, DWORD dwViewStatus
)
4853 ok(0, "unexpected call\n");
4856 static void WINAPI
ObjectAdviseSink_OnClose(IAdviseSinkEx
*iface
)
4858 CHECK_EXPECT(Advise_Close
);
4861 static const IAdviseSinkExVtbl AdviseSinkVtbl
= {
4862 AdviseSink_QueryInterface
,
4865 AdviseSink_OnDataChange
,
4866 AdviseSink_OnViewChange
,
4867 AdviseSink_OnRename
,
4869 ObjectAdviseSink_OnClose
,
4870 AdviseSinkEx_OnViewStatusChange
4873 static IAdviseSinkEx AdviseSink
= { &AdviseSinkVtbl
};
4875 static HRESULT WINAPI
ViewAdviseSink_QueryInterface(IAdviseSinkEx
*iface
,
4876 REFIID riid
, void **ppv
)
4878 if(IsEqualGUID(&IID_IAdviseSinkEx
, riid
)) {
4883 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
4885 return E_NOINTERFACE
;
4888 static void WINAPI
ViewAdviseSink_OnViewChange(IAdviseSinkEx
*iface
,
4889 DWORD dwAspect
, LONG lindex
)
4891 CHECK_EXPECT2(OnViewChange
);
4893 ok(dwAspect
== DVASPECT_CONTENT
, "dwAspect = %d\n", dwAspect
);
4894 ok(lindex
== -1, "lindex = %d\n", lindex
);
4897 static const IAdviseSinkExVtbl ViewAdviseSinkVtbl
= {
4898 ViewAdviseSink_QueryInterface
,
4901 AdviseSink_OnDataChange
,
4902 ViewAdviseSink_OnViewChange
,
4903 AdviseSink_OnRename
,
4906 AdviseSinkEx_OnViewStatusChange
4909 static IAdviseSinkEx ViewAdviseSink
= { &ViewAdviseSinkVtbl
};
4911 DEFINE_GUID(IID_unk1
, 0xD48A6EC6,0x6A4A,0x11CF,0x94,0xA7,0x44,0x45,0x53,0x54,0x00,0x00); /* HTMLWindow2 ? */
4912 DEFINE_GUID(IID_IThumbnailView
, 0x7BB0B520,0xB1A7,0x11D2,0xBB,0x23,0x00,0xC0,0x4F,0x79,0xAB,0xCD);
4913 DEFINE_GUID(IID_IRenMailEditor
, 0x000670BA,0x0000,0x0000,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
4914 DEFINE_GUID(IID_unk4
, 0x305104a6,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
4915 DEFINE_GUID(IID_IDocHostUIHandlerPriv
, 0xf0d241d1,0x5d0e,0x4e85,0xbc,0xb4,0xfa,0xd7,0xf7,0xc5,0x52,0x8c);
4917 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
4921 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IOleClientSite
, riid
))
4923 else if(IsEqualGUID(&IID_IOleDocumentSite
, riid
))
4924 *ppv
= &DocumentSite
;
4925 else if(IsEqualGUID(&IID_IDocHostUIHandler
, riid
) || IsEqualGUID(&IID_IDocHostUIHandler2
, riid
))
4926 *ppv
= &DocHostUIHandler
;
4927 else if(IsEqualGUID(&IID_IOleContainer
, riid
))
4928 *ppv
= &OleContainer
;
4929 else if(IsEqualGUID(&IID_IOleWindow
, riid
) || IsEqualGUID(&IID_IOleInPlaceSite
, riid
))
4930 *ppv
= &InPlaceSiteWindowless
;
4931 else if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
4932 *ppv
= &OleCommandTarget
;
4933 else if(IsEqualGUID(&IID_IDispatch
, riid
))
4935 else if(IsEqualGUID(&IID_IServiceProvider
, riid
))
4936 *ppv
= &ServiceProvider
;
4937 else if(IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
))
4938 *ppv
= ipsex
? &InPlaceSiteWindowless
: NULL
;
4939 else if(IsEqualGUID(&IID_IOleInPlaceSiteWindowless
, riid
))
4940 *ppv
= ipsw
? &InPlaceSiteWindowless
: NULL
;
4941 else if(IsEqualGUID(&IID_IOleControlSite
, riid
))
4942 *ppv
= &OleControlSite
;
4943 else if(IsEqualGUID(&IID_IDocHostShowUI
, riid
))
4944 return E_NOINTERFACE
; /* TODO */
4945 else if(IsEqualGUID(&IID_IProxyManager
, riid
))
4946 return E_NOINTERFACE
; /* ? */
4947 else if(IsEqualGUID(&IID_unk1
, riid
))
4948 return E_NOINTERFACE
; /* HTMLWindow2 ? */
4949 else if(IsEqualGUID(&IID_IThumbnailView
, riid
))
4950 return E_NOINTERFACE
; /* ? */
4951 else if(IsEqualGUID(&IID_IRenMailEditor
, riid
))
4952 return E_NOINTERFACE
; /* ? */
4953 else if(IsEqualGUID(&IID_unk4
, riid
))
4954 return E_NOINTERFACE
; /* ? */
4955 else if(IsEqualGUID(&IID_IDocHostUIHandlerPriv
, riid
))
4956 return E_NOINTERFACE
; /* ? */
4958 ok(0, "unexpected riid %s\n", debugstr_guid(riid
));
4962 return E_NOINTERFACE
;
4965 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
4967 if(msg
== WM_CONTINUE_BINDING
) {
4968 IBindStatusCallback
*callback
= (IBindStatusCallback
*)wParam
;
4969 continue_binding(callback
);
4972 return DefWindowProc(hwnd
, msg
, wParam
, lParam
);
4975 static void test_doscroll(IUnknown
*unk
)
4977 IHTMLDocument3
*doc
;
4978 IHTMLElement2
*elem2
;
4983 hres
= IUnknown_QueryInterface(unk
, &IID_IHTMLDocument3
, (void**)&doc
);
4984 ok(hres
== S_OK
, "Could not get IHTMLDocument3 iface: %08x\n", hres
);
4988 hres
= IHTMLDocument3_get_documentElement(doc
, &elem
);
4989 IHTMLDocument3_Release(doc
);
4990 ok(hres
== S_OK
, "get_documentElement failed: %08x\n", hres
);
4991 switch(load_state
) {
4995 ok(!elem
, "elem != NULL\n");
4998 case LD_INTERACTIVE
:
5000 ok(elem
!= NULL
, "elem == NULL\n");
5005 hres
= IHTMLElement_QueryInterface(elem
, &IID_IHTMLElement2
, (void**)&elem2
);
5006 IHTMLElement_Release(elem
);
5007 ok(hres
== S_OK
, "Could not get IHTMLElement2 iface: %08x\n", hres
);
5010 V_BSTR(&v
) = a2bstr("left");
5011 hres
= IHTMLElement2_doScroll(elem2
, v
);
5012 SysFreeString(V_BSTR(&v
));
5013 IHTMLElement2_Release(elem2
);
5015 if(inplace_deactivated
)
5016 ok(hres
== E_PENDING
, "doScroll failed: %08x\n", hres
);
5017 else if(load_state
== LD_COMPLETE
)
5018 ok(hres
== S_OK
, "doScroll failed: %08x\n", hres
);
5020 ok(hres
== E_PENDING
|| hres
== S_OK
, "doScroll failed: %08x\n", hres
);
5023 static void _test_readyState(unsigned line
, IUnknown
*unk
)
5025 IHTMLDocument2
*htmldoc
;
5026 DISPPARAMS dispparams
;
5032 static const LPCSTR expected_state
[] = {
5047 hres
= IUnknown_QueryInterface(unk
, &IID_IHTMLDocument2
, (void**)&htmldoc
);
5048 ok(hres
== S_OK
, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres
);
5052 hres
= IHTMLDocument2_get_readyState(htmldoc
, NULL
);
5053 ok(hres
== E_POINTER
, "get_readyState failed: %08x, expected\n", hres
);
5055 hres
= IHTMLDocument2_get_readyState(htmldoc
, &state
);
5056 ok(hres
== S_OK
, "get_ReadyState failed: %08x\n", hres
);
5058 if(!strcmp_wa(state
, "interactive") && load_state
== LD_LOADING
)
5059 load_state
= LD_INTERACTIVE
;
5062 (!strcmp_wa(state
, expected_state
[load_state
]), "unexpected state %s, expected %d\n",
5063 wine_dbgstr_w(state
), load_state
);
5064 SysFreeString(state
);
5066 hres
= IHTMLDocument2_get_body(htmldoc
, &elem
);
5067 ok_(__FILE__
,line
)(hres
== S_OK
, "get_body failed: %08x\n", hres
);
5069 IHTMLElement2
*elem2
;
5072 hres
= IHTMLElement_QueryInterface(elem
, &IID_IHTMLElement2
, (void**)&elem2
);
5073 IHTMLElement_Release(elem
);
5074 ok(hres
== S_OK
, "Could not get IHTMLElement2 iface: %08x\n", hres
);
5076 hres
= IHTMLElement2_get_readyState(elem2
, &var
);
5077 IHTMLElement2_Release(elem2
);
5078 ok(hres
== S_OK
, "get_readyState failed: %08x\n", hres
);
5079 ok(V_VT(&var
) == VT_BSTR
, "V_VT(state) = %d\n", V_VT(&var
));
5080 ok(!strcmp_wa(V_BSTR(&var
), "complete"), "unexpected body state %s\n", wine_dbgstr_w(V_BSTR(&var
)));
5083 ok_(__FILE__
,line
)(load_state
!= LD_COMPLETE
, "body is NULL in complete state\n");
5086 dispparams
.cArgs
= 0;
5087 dispparams
.cNamedArgs
= 0;
5088 dispparams
.rgdispidNamedArgs
= NULL
;
5089 dispparams
.rgvarg
= NULL
;
5093 hres
= IHTMLDocument2_Invoke(htmldoc
, DISPID_READYSTATE
, &IID_NULL
, 0, DISPATCH_PROPERTYGET
,
5094 &dispparams
, &out
, NULL
, NULL
);
5095 ok(hres
== S_OK
, "Invoke(DISPID_READYSTATE) failed: %08x\n", hres
);
5097 ok_(__FILE__
,line
) (V_VT(&out
) == VT_I4
, "V_VT(out)=%d\n", V_VT(&out
));
5098 ok_(__FILE__
,line
) (V_I4(&out
) == load_state
%5, "VT_I4(out)=%d, expected %d\n", V_I4(&out
), load_state
%5);
5100 test_doscroll((IUnknown
*)htmldoc
);
5102 IHTMLDocument2_Release(htmldoc
);
5105 static void test_ViewAdviseSink(IHTMLDocument2
*doc
)
5110 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IViewObject
, (void**)&view
);
5111 ok(hres
== S_OK
, "QueryInterface(IID_IViewObject) failed: %08x\n", hres
);
5113 hres
= IViewObject_SetAdvise(view
, DVASPECT_CONTENT
, ADVF_PRIMEFIRST
, (IAdviseSink
*)&ViewAdviseSink
);
5114 ok(hres
== S_OK
, "SetAdvise failed: %08x\n", hres
);
5116 IViewObject_Release(view
);
5119 static void test_ConnectionPoint(IConnectionPointContainer
*container
, REFIID riid
)
5121 IConnectionPointContainer
*tmp_container
= NULL
;
5122 IConnectionPoint
*cp
;
5127 hres
= IConnectionPointContainer_FindConnectionPoint(container
, riid
, &cp
);
5128 ok(hres
== S_OK
, "FindConnectionPoint failed: %08x\n", hres
);
5132 hres
= IConnectionPoint_GetConnectionInterface(cp
, &iid
);
5133 ok(hres
== S_OK
, "GetConnectionInterface failed: %08x\n", hres
);
5134 ok(IsEqualGUID(riid
, &iid
), "wrong iid\n");
5136 hres
= IConnectionPoint_GetConnectionInterface(cp
, NULL
);
5137 ok(hres
== E_POINTER
, "GetConnectionInterface failed: %08x, expected E_POINTER\n", hres
);
5139 hres
= IConnectionPoint_GetConnectionPointContainer(cp
, &tmp_container
);
5140 ok(hres
== S_OK
, "GetConnectionPointContainer failed: %08x\n", hres
);
5141 ok(tmp_container
== container
, "container != tmp_container\n");
5143 IConnectionPointContainer_Release(tmp_container
);
5145 hres
= IConnectionPoint_GetConnectionPointContainer(cp
, NULL
);
5146 ok(hres
== E_POINTER
, "GetConnectionPointContainer failed: %08x, expected E_POINTER\n", hres
);
5148 if(IsEqualGUID(&IID_IPropertyNotifySink
, riid
)) {
5149 hres
= IConnectionPoint_Advise(cp
, (IUnknown
*)&PropertyNotifySink
, &cookie
);
5150 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
5151 hres
= IConnectionPoint_Unadvise(cp
, cookie
);
5152 ok(hres
== S_OK
, "Unadvise failed: %08x\n", hres
);
5153 hres
= IConnectionPoint_Advise(cp
, (IUnknown
*)&PropertyNotifySink
, NULL
);
5154 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
5155 } else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
5156 hres
= IConnectionPoint_Advise(cp
, (IUnknown
*)&EventDispatch
, &cookie
);
5157 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
5160 IConnectionPoint_Release(cp
);
5163 static void test_ConnectionPointContainer(IHTMLDocument2
*doc
)
5165 IConnectionPointContainer
*container
;
5168 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IConnectionPointContainer
, (void**)&container
);
5169 ok(hres
== S_OK
, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres
);
5173 test_ConnectionPoint(container
, &IID_IDispatch
);
5174 test_ConnectionPoint(container
, &IID_IPropertyNotifySink
);
5175 test_ConnectionPoint(container
, &DIID_HTMLDocumentEvents
);
5176 test_ConnectionPoint(container
, &DIID_HTMLDocumentEvents2
);
5178 IConnectionPointContainer_Release(container
);
5181 static void set_custom_uihandler(IHTMLDocument2
*doc
, IDocHostUIHandler2
*uihandler
)
5183 ICustomDoc
*custom_doc
;
5186 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_ICustomDoc
, (void**)&custom_doc
);
5187 ok(hres
== S_OK
, "Could not get ICustomDoc iface: %08x\n", hres
);
5189 expect_uihandler_iface
= uihandler
;
5191 hres
= ICustomDoc_SetUIHandler(custom_doc
, (IDocHostUIHandler
*)uihandler
);
5192 ICustomDoc_Release(custom_doc
);
5193 ok(hres
== S_OK
, "SetUIHandler failed: %08x\n", hres
);
5196 static void test_Load(IPersistMoniker
*persist
, IMoniker
*mon
)
5200 WCHAR sz_html_clientsite_objectparam
[MAX_PATH
];
5202 lstrcpyW(sz_html_clientsite_objectparam
, SZ_HTML_CLIENTSITE_OBJECTPARAM
);
5204 test_readyState((IUnknown
*)persist
);
5208 CreateBindCtx(0, &bind
);
5209 IBindCtx_RegisterObjectParam(bind
, sz_html_clientsite_objectparam
,
5210 (IUnknown
*)&ClientSite
);
5213 SET_EXPECT(GetDisplayName
);
5214 if(!set_clientsite
) {
5215 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
5216 SET_EXPECT(GetHostInfo
);
5217 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
5218 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5219 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5220 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
5221 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
5222 SET_EXPECT(GetOptionKeyPath
);
5223 SET_EXPECT(GetOverrideKeyPath
);
5224 SET_EXPECT(GetWindow
);
5225 SET_EXPECT(Exec_DOCCANNAVIGATE
);
5226 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
5227 SET_EXPECT(Exec_SETPROGRESSMAX
);
5228 SET_EXPECT(Exec_SETPROGRESSPOS
);
5229 SET_EXPECT(Exec_ShellDocView_37
);
5231 if(!container_locked
) {
5232 SET_EXPECT(GetContainer
);
5233 SET_EXPECT(LockContainer
);
5235 SET_EXPECT(OnChanged_READYSTATE
);
5236 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
5237 SET_EXPECT(IsSystemMoniker
);
5239 SET_EXPECT(BindToStorage
);
5240 SET_EXPECT(SetActiveObject
);
5241 if(set_clientsite
) {
5242 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5243 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5244 SET_EXPECT(Exec_ShellDocView_37
);
5245 SET_EXPECT(IsErrorUrl
);
5247 SET_EXPECT(GetTravelLog
);
5249 SET_EXPECT(Exec_ShellDocView_84
);
5250 SET_EXPECT(GetPendingUrl
);
5251 load_state
= LD_DOLOAD
;
5252 expect_LockContainer_fLock
= TRUE
;
5253 readystate_set_loading
= TRUE
;
5255 hres
= IPersistMoniker_Load(persist
, FALSE
, mon
, bind
, 0x12);
5256 ok(hres
== S_OK
, "Load failed: %08x\n", hres
);
5259 CHECK_CALLED(GetDisplayName
);
5260 if(!set_clientsite
) {
5261 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
5262 CHECK_CALLED(GetHostInfo
);
5263 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
5264 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5265 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5266 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
5267 CLEAR_CALLED(Invoke_AMBIENT_PALETTE
); /* not called on IE9 */
5268 CLEAR_CALLED(GetOptionKeyPath
); /* not called on some IE9 */
5269 CHECK_CALLED(GetOverrideKeyPath
);
5270 CHECK_CALLED(GetWindow
);
5271 CHECK_CALLED(Exec_DOCCANNAVIGATE
);
5272 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
5273 CHECK_CALLED(Exec_SETPROGRESSMAX
);
5274 CHECK_CALLED(Exec_SETPROGRESSPOS
);
5275 CHECK_CALLED(Exec_ShellDocView_37
);
5277 if(!container_locked
) {
5278 CHECK_CALLED(GetContainer
);
5279 CHECK_CALLED(LockContainer
);
5280 container_locked
= TRUE
;
5282 CHECK_CALLED(OnChanged_READYSTATE
);
5283 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
5284 CLEAR_CALLED(IsSystemMoniker
); /* IE7 */
5286 CHECK_CALLED(BindToStorage
);
5287 CLEAR_CALLED(SetActiveObject
); /* FIXME */
5288 if(set_clientsite
) {
5289 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5290 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5291 CHECK_CALLED(Exec_ShellDocView_37
);
5292 todo_wine
CHECK_CALLED_BROKEN(IsErrorUrl
);
5294 CHECK_CALLED(GetTravelLog
);
5296 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
5297 todo_wine
CHECK_CALLED(GetPendingUrl
);
5299 set_clientsite
= container_locked
= TRUE
;
5301 test_GetCurMoniker((IUnknown
*)persist
, mon
, NULL
);
5303 IBindCtx_Release(bind
);
5305 test_readyState((IUnknown
*)persist
);
5308 #define DWL_VERBDONE 0x0001
5309 #define DWL_CSS 0x0002
5310 #define DWL_TRYCSS 0x0004
5311 #define DWL_HTTP 0x0008
5312 #define DWL_EMPTY 0x0010
5313 #define DWL_JAVASCRIPT 0x0020
5314 #define DWL_ONREADY_LOADING 0x0040
5315 #define DWL_EXPECT_HISTUPDATE 0x0080
5316 #define DWL_FROM_HISTORY 0x0100
5317 #define DWL_REFRESH 0x0200
5318 #define DWL_EX_GETHOSTINFO 0x0400
5320 static void test_download(DWORD flags
)
5322 const BOOL is_js
= (flags
& DWL_JAVASCRIPT
) != 0;
5327 b
= is_js
? &called_Exec_SETDOWNLOADSTATE_0
: &called_Exec_HTTPEQUIV_DONE
;
5328 is_refresh
= (flags
& DWL_REFRESH
) != 0;
5330 hwnd
= FindWindowA("Internet Explorer_Hidden", NULL
);
5331 ok(hwnd
!= NULL
, "Could not find hidden window\n");
5333 test_readyState(NULL
);
5335 if(flags
& DWL_REFRESH
) {
5336 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5337 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5339 if(flags
& (DWL_VERBDONE
|DWL_HTTP
))
5340 SET_EXPECT(Exec_SETPROGRESSMAX
);
5341 if(flags
& DWL_EX_GETHOSTINFO
)
5342 SET_EXPECT(GetHostInfo
);
5343 SET_EXPECT(SetStatusText
);
5344 if(!(flags
& DWL_EMPTY
))
5345 SET_EXPECT(Exec_SETDOWNLOADSTATE_1
);
5347 SET_EXPECT(GetExternal
);
5348 SET_EXPECT(OnViewChange
);
5349 SET_EXPECT(GetDropTarget
);
5350 if((flags
& DWL_TRYCSS
) && !(flags
& DWL_EMPTY
))
5351 SET_EXPECT(Exec_ShellDocView_84
);
5352 if(flags
& DWL_CSS
) {
5353 SET_EXPECT(CreateInstance
);
5355 SET_EXPECT(LockRequest
);
5356 SET_EXPECT(Terminate
);
5357 SET_EXPECT(Protocol_Read
);
5358 SET_EXPECT(UnlockRequest
);
5360 if(flags
& DWL_ONREADY_LOADING
)
5361 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
5362 if(!(flags
& (DWL_EMPTY
|DWL_JAVASCRIPT
)))
5363 SET_EXPECT(Invoke_OnReadyStateChange_Interactive
);
5365 SET_EXPECT(Invoke_OnReadyStateChange_Complete
);
5366 SET_EXPECT(Exec_Explorer_69
);
5367 SET_EXPECT(EnableModeless_TRUE
); /* IE7 */
5368 SET_EXPECT(Frame_EnableModeless_TRUE
); /* IE7 */
5369 SET_EXPECT(EnableModeless_FALSE
); /* IE7 */
5370 SET_EXPECT(Frame_EnableModeless_FALSE
); /* IE7 */
5371 if((nav_url
&& !is_js
) || (flags
& (DWL_CSS
|DWL_HTTP
)))
5372 SET_EXPECT(Exec_ShellDocView_37
);
5373 if(flags
& DWL_HTTP
) {
5374 if(!(flags
& DWL_FROM_HISTORY
))
5375 SET_EXPECT(OnChanged_1012
);
5376 SET_EXPECT(Exec_HTTPEQUIV
);
5377 SET_EXPECT(Exec_SETTITLE
);
5380 SET_EXPECT(OnChanged_1005
);
5381 SET_EXPECT(OnChanged_READYSTATE
);
5382 SET_EXPECT(Exec_SETPROGRESSPOS
);
5383 if(!(flags
& DWL_EMPTY
))
5384 SET_EXPECT(Exec_SETDOWNLOADSTATE_0
);
5385 SET_EXPECT(Exec_ShellDocView_103
);
5386 SET_EXPECT(Exec_ShellDocView_105
);
5387 SET_EXPECT(Exec_ShellDocView_140
);
5389 SET_EXPECT(Exec_MSHTML_PARSECOMPLETE
);
5390 if(support_wbapp
) /* Called on some Vista installations */
5391 SET_EXPECT(CountEntries
);
5392 SET_EXPECT(Exec_HTTPEQUIV_DONE
);
5394 SET_EXPECT(SetStatusText
);
5395 if(nav_url
|| support_wbapp
) {
5396 SET_EXPECT(UpdateUI
);
5397 SET_EXPECT(Exec_UPDATECOMMANDS
);
5398 SET_EXPECT(Exec_SETTITLE
);
5399 if(flags
& DWL_EXPECT_HISTUPDATE
)
5400 SET_EXPECT(Exec_Explorer_38
);
5401 SET_EXPECT(UpdateBackForwardState
);
5404 if(!editmode
&& !(flags
& DWL_REFRESH
)) {
5405 if(!(flags
& DWL_EMPTY
))
5406 SET_EXPECT(FireNavigateComplete2
);
5407 SET_EXPECT(FireDocumentComplete
);
5409 SET_EXPECT(ActiveElementChanged
);
5411 SET_EXPECT(IsErrorUrl
);
5412 expect_status_text
= (LPWSTR
)0xdeadbeef; /* TODO */
5414 while(!*b
&& GetMessage(&msg
, NULL
, 0, 0)) {
5415 TranslateMessage(&msg
);
5416 DispatchMessage(&msg
);
5419 if(flags
& DWL_REFRESH
) {
5420 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5421 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5423 if(flags
& DWL_VERBDONE
)
5424 CHECK_CALLED(Exec_SETPROGRESSMAX
);
5425 if(flags
& DWL_HTTP
)
5426 SET_CALLED(Exec_SETPROGRESSMAX
);
5427 if(flags
& DWL_EX_GETHOSTINFO
) {
5429 todo_wine
CHECK_CALLED(GetHostInfo
);
5431 CHECK_CALLED(GetHostInfo
);
5433 CHECK_CALLED(SetStatusText
);
5434 if(!(flags
& DWL_EMPTY
))
5435 CHECK_CALLED(Exec_SETDOWNLOADSTATE_1
);
5437 CHECK_CALLED(GetExternal
);
5438 CHECK_CALLED(OnViewChange
);
5439 CLEAR_CALLED(GetDropTarget
);
5440 if((flags
& DWL_TRYCSS
) && !(flags
& DWL_EMPTY
))
5441 todo_wine
CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
5442 if(flags
& DWL_CSS
) {
5443 CHECK_CALLED(CreateInstance
);
5444 CHECK_CALLED(Start
);
5445 CHECK_CALLED(LockRequest
);
5446 CHECK_CALLED(Terminate
);
5447 CHECK_CALLED(Protocol_Read
);
5448 CHECK_CALLED(UnlockRequest
);
5450 if(flags
& DWL_ONREADY_LOADING
)
5451 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
5452 if(!(flags
& (DWL_EMPTY
|DWL_JAVASCRIPT
)))
5453 CHECK_CALLED(Invoke_OnReadyStateChange_Interactive
);
5455 CHECK_CALLED(Invoke_OnReadyStateChange_Complete
);
5456 SET_CALLED(Exec_Explorer_69
);
5457 SET_CALLED(EnableModeless_TRUE
); /* IE7 */
5458 SET_CALLED(Frame_EnableModeless_TRUE
); /* IE7 */
5459 SET_CALLED(EnableModeless_FALSE
); /* IE7 */
5460 SET_CALLED(Frame_EnableModeless_FALSE
); /* IE7 */
5461 if(nav_url
&& !is_js
&& !(flags
& DWL_REFRESH
))
5462 todo_wine
CHECK_CALLED(Exec_ShellDocView_37
);
5463 else if(flags
& (DWL_CSS
|DWL_HTTP
))
5464 CLEAR_CALLED(Exec_ShellDocView_37
); /* Called by IE9 */
5465 if(flags
& DWL_HTTP
) {
5466 if(!(flags
& DWL_FROM_HISTORY
))
5467 todo_wine
CHECK_CALLED(OnChanged_1012
);
5468 todo_wine
CHECK_CALLED(Exec_HTTPEQUIV
);
5469 if(!(flags
& DWL_REFRESH
))
5470 todo_wine
CHECK_CALLED(Exec_SETTITLE
);
5472 CHECK_CALLED(Exec_SETTITLE
);
5475 CHECK_CALLED(OnChanged_1005
);
5476 CHECK_CALLED(OnChanged_READYSTATE
);
5477 CHECK_CALLED(Exec_SETPROGRESSPOS
);
5479 CLEAR_CALLED(OnChanged_READYSTATE
); /* sometimes called */
5480 todo_wine
CHECK_CALLED(Exec_SETPROGRESSPOS
);
5482 if(!(flags
& DWL_EMPTY
))
5483 CHECK_CALLED(Exec_SETDOWNLOADSTATE_0
);
5484 CLEAR_CALLED(Exec_ShellDocView_103
);
5485 CLEAR_CALLED(Exec_ShellDocView_105
);
5486 CLEAR_CALLED(Exec_ShellDocView_140
);
5488 CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE
);
5489 if(support_wbapp
) /* Called on some Vista installations */
5490 CLEAR_CALLED(CountEntries
);
5491 CHECK_CALLED(Exec_HTTPEQUIV_DONE
);
5493 SET_CALLED(SetStatusText
);
5494 if(nav_url
|| support_wbapp
) { /* avoiding race, FIXME: find better way */
5495 CLEAR_CALLED(UpdateUI
);
5496 CLEAR_CALLED(Exec_UPDATECOMMANDS
);
5497 CLEAR_CALLED(Exec_SETTITLE
);
5498 if(flags
& DWL_EXPECT_HISTUPDATE
)
5499 CHECK_CALLED(Exec_Explorer_38
);
5500 todo_wine
CHECK_CALLED_BROKEN(UpdateBackForwardState
);
5503 if(!editmode
&& !(flags
& DWL_REFRESH
)) {
5504 if(!(flags
& DWL_EMPTY
)) {
5506 CHECK_CALLED(FireNavigateComplete2
);
5508 todo_wine
CHECK_CALLED(FireNavigateComplete2
);
5510 CHECK_CALLED(FireDocumentComplete
);
5512 todo_wine
CHECK_CALLED(ActiveElementChanged
);
5514 todo_wine
CHECK_CALLED_BROKEN(IsErrorUrl
);
5516 load_state
= LD_COMPLETE
;
5518 test_readyState(NULL
);
5521 static void test_Persist(IHTMLDocument2
*doc
, IMoniker
*mon
)
5523 IPersistMoniker
*persist_mon
;
5524 IPersistFile
*persist_file
;
5528 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistFile
, (void**)&persist_file
);
5529 ok(hres
== S_OK
, "QueryInterface(IID_IPersist) failed: %08x\n", hres
);
5530 if(SUCCEEDED(hres
)) {
5531 hres
= IPersistFile_GetClassID(persist_file
, NULL
);
5532 ok(hres
== E_INVALIDARG
, "GetClassID returned: %08x, expected E_INVALIDARG\n", hres
);
5534 hres
= IPersistFile_GetClassID(persist_file
, &guid
);
5535 ok(hres
== S_OK
, "GetClassID failed: %08x\n", hres
);
5536 ok(IsEqualGUID(&CLSID_HTMLDocument
, &guid
), "guid != CLSID_HTMLDocument\n");
5538 IPersistFile_Release(persist_file
);
5541 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistMoniker
, (void**)&persist_mon
);
5542 ok(hres
== S_OK
, "QueryInterface(IID_IPersistMoniker) failed: %08x\n", hres
);
5543 if(SUCCEEDED(hres
)) {
5544 hres
= IPersistMoniker_GetClassID(persist_mon
, NULL
);
5545 ok(hres
== E_INVALIDARG
, "GetClassID returned: %08x, expected E_INVALIDARG\n", hres
);
5547 hres
= IPersistMoniker_GetClassID(persist_mon
, &guid
);
5548 ok(hres
== S_OK
, "GetClassID failed: %08x\n", hres
);
5549 ok(IsEqualGUID(&CLSID_HTMLDocument
, &guid
), "guid != CLSID_HTMLDocument\n");
5551 if(load_state
== LD_DOLOAD
)
5552 test_Load(persist_mon
, mon
);
5554 test_readyState((IUnknown
*)doc
);
5556 IPersistMoniker_Release(persist_mon
);
5560 static void test_put_href(IHTMLDocument2
*doc
, BOOL use_replace
, const char *href
, const char *new_nav_url
, BOOL is_js
,
5561 BOOL is_hash
, DWORD dwl_flags
)
5563 const char *prev_nav_url
= NULL
;
5564 IHTMLPrivateWindow
*priv_window
;
5565 IHTMLLocation
*location
;
5566 IHTMLWindow2
*window
;
5570 trace("put_href %s...\n", new_nav_url
);
5573 loading_hash
= is_hash
;
5576 hres
= IHTMLDocument2_get_location(doc
, &location
);
5577 ok(hres
== S_OK
, "get_location failed: %08x\n", hres
);
5578 ok(location
!= NULL
, "location == NULL\n");
5580 prev_url
= prev_nav_url
= nav_url
;
5581 nav_url
= new_nav_url
;
5583 nav_serv_url
= new_nav_url
;
5588 SET_EXPECT(TranslateUrl
);
5590 SET_EXPECT(FireBeforeNavigate2
);
5591 SET_EXPECT(Exec_ShellDocView_67
);
5593 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5594 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5595 SET_EXPECT(Exec_ShellDocView_63
);
5596 SET_EXPECT(Exec_ShellDocView_84
);
5598 SET_EXPECT(FireNavigateComplete2
);
5599 SET_EXPECT(FireDocumentComplete
);
5602 SET_EXPECT(Navigate
);
5605 hres
= IHTMLLocation_replace(location
, str
);
5606 ok(hres
== S_OK
, "put_href failed: %08x\n", hres
);
5608 hres
= IHTMLLocation_put_href(location
, str
);
5609 if(is_js
&& hres
== E_ACCESSDENIED
)
5610 win_skip("put_href: got E_ACCESSDENIED\n");
5612 ok(hres
== S_OK
, "put_href failed: %08x\n", hres
);
5616 CHECK_CALLED(TranslateUrl
);
5618 CHECK_CALLED(FireBeforeNavigate2
);
5619 CHECK_CALLED(Exec_ShellDocView_67
);
5621 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5622 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5623 CHECK_CALLED(Exec_ShellDocView_63
);
5624 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
5626 CHECK_CALLED(FireNavigateComplete2
);
5627 CHECK_CALLED(FireDocumentComplete
);
5630 CHECK_CALLED(Navigate
);
5633 CLEAR_CALLED(TranslateUrl
);
5635 CLEAR_CALLED(FireBeforeNavigate2
);
5636 SET_CALLED(Exec_ShellDocView_67
);
5638 CLEAR_CALLED(Invoke_AMBIENT_SILENT
);
5639 CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5640 CLEAR_CALLED(Exec_ShellDocView_63
);
5641 todo_wine
CLEAR_CALLED(Exec_ShellDocView_84
);
5643 CLEAR_CALLED(FireNavigateComplete2
);
5644 CLEAR_CALLED(FireDocumentComplete
);
5647 CLEAR_CALLED(Navigate
);
5651 IHTMLLocation_Release(location
);
5653 if(is_js
&& hres
== E_ACCESSDENIED
) {
5654 nav_url
= prev_nav_url
;
5658 hres
= IHTMLDocument2_get_parentWindow(doc
, &window
);
5659 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
5661 hres
= IHTMLWindow2_QueryInterface(window
, &IID_IHTMLPrivateWindow
, (void**)&priv_window
);
5662 IHTMLWindow2_Release(window
);
5663 ok(hres
== S_OK
, "QueryInterface(IID_IHTMLPrivateWindow) failed: %08x\n", hres
);
5665 if(!support_wbapp
) {
5668 readystate_set_loading
= TRUE
;
5669 SET_EXPECT(TranslateUrl
);
5670 SET_EXPECT(Exec_ShellDocView_67
);
5671 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5672 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5673 SET_EXPECT(Exec_ShellDocView_63
);
5674 SET_EXPECT(Exec_ShellDocView_84
);
5676 str
= a2bstr(nav_url
);
5678 V_VT(&vempty
) = VT_EMPTY
;
5679 hres
= IHTMLPrivateWindow_SuperNavigate(priv_window
, str
, str2
, NULL
, NULL
, &vempty
, &vempty
, 0);
5681 SysFreeString(str2
);
5682 ok(hres
== S_OK
, "SuperNavigate failed: %08x\n", hres
);
5684 CHECK_CALLED(TranslateUrl
);
5685 CHECK_CALLED(Exec_ShellDocView_67
);
5686 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5687 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5688 CHECK_CALLED(Exec_ShellDocView_63
);
5689 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
5693 test_GetCurMoniker(doc_unk
, doc_mon
, NULL
);
5698 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &str2
);
5699 ok(hres
== S_OK
, "GetAddressBarUrl failed: %08x\n", hres
);
5700 ok(!strcmp_wa(str2
, prev_nav_url
), "unexpected address bar url: %s, expected %s\n", wine_dbgstr_w(str2
), prev_nav_url
);
5701 SysFreeString(str2
);
5704 ignore_external_qi
= TRUE
;
5705 test_download(DWL_VERBDONE
| (is_js
? DWL_JAVASCRIPT
: DWL_ONREADY_LOADING
|DWL_EX_GETHOSTINFO
) | dwl_flags
);
5707 ignore_external_qi
= FALSE
;
5711 hres
= IHTMLPrivateWindow_GetAddressBarUrl(priv_window
, &str2
);
5712 ok(hres
== S_OK
, "GetAddressBarUrl failed: %08x\n", hres
);
5714 ok(!strcmp_wa(str2
, prev_nav_url
), "unexpected address bar url: %s\n", wine_dbgstr_w(str2
));
5716 ok(!strcmp_wa(str2
, nav_url
), "unexpected address bar url: %s\n", wine_dbgstr_w(str2
));
5717 SysFreeString(str2
);
5718 IHTMLPrivateWindow_Release(priv_window
);
5722 nav_url
= prev_nav_url
;
5725 static void test_load_history(IHTMLDocument2
*doc
)
5727 IPersistHistory
*per_hist
;
5730 trace("LoadHistory...\n");
5732 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistHistory
, (void**)&per_hist
);
5733 ok(hres
== S_OK
, "Could not get IPersistHistory iface: %08x\n", hres
);
5736 nav_url
= "http://www.winehq.org/#test";
5737 nav_serv_url
= "http://www.winehq.org/";
5739 SET_EXPECT(Exec_ShellDocView_138
);
5740 SET_EXPECT(Exec_ShellDocView_67
);
5741 SET_EXPECT(FireBeforeNavigate2
);
5742 SET_EXPECT(Invoke_AMBIENT_SILENT
);
5743 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5745 hres
= IPersistHistory_LoadHistory(per_hist
, history_stream
, NULL
);
5746 ok(hres
== S_OK
, "LoadHistory failed: %08x\n", hres
);
5748 CHECK_CALLED_BROKEN(Exec_ShellDocView_138
);
5749 CHECK_CALLED(Exec_ShellDocView_67
);
5750 CHECK_CALLED(FireBeforeNavigate2
);
5751 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
5752 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
5754 load_state
= LD_LOADING
;
5755 test_timer(EXPECT_UPDATEUI
|EXPECT_SETTITLE
);
5757 test_download(DWL_VERBDONE
|DWL_HTTP
|DWL_EXPECT_HISTUPDATE
|DWL_ONREADY_LOADING
|DWL_FROM_HISTORY
|DWL_EX_GETHOSTINFO
);
5759 IPersistHistory_Release(per_hist
);
5760 IStream_Release(history_stream
);
5761 history_stream
= NULL
;
5764 static void test_refresh(IHTMLDocument2
*doc
)
5766 IOleCommandTarget
*cmdtrg
;
5770 trace("Refresh...\n");
5772 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
5773 ok(hres
== S_OK
, "Could not get IOleCommandTarget iface: %08x\n", hres
);
5775 V_VT(&vin
) = VT_EMPTY
;
5776 V_VT(&vout
) = VT_EMPTY
;
5777 SET_EXPECT(Exec_DocHostCommandHandler_2300
);
5778 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_REFRESH
, OLECMDEXECOPT_PROMPTUSER
, &vin
, &vout
);
5779 ok(hres
== S_OK
, "Exec failed: %08x\n", hres
);
5780 ok(V_VT(&vout
) == VT_EMPTY
, "V_VT(vout) = %d\n", V_VT(&vout
));
5781 CHECK_CALLED(Exec_DocHostCommandHandler_2300
);
5783 IOleCommandTarget_Release(cmdtrg
);
5785 test_download(DWL_VERBDONE
|DWL_HTTP
|DWL_ONREADY_LOADING
|DWL_REFRESH
|DWL_EX_GETHOSTINFO
);
5788 static void test_open_window(IHTMLDocument2
*doc
, BOOL do_block
)
5790 IHTMLWindow2
*window
, *new_window
;
5794 allow_new_window
= !do_block
;
5796 hres
= IHTMLDocument2_get_parentWindow(doc
, &window
);
5797 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
5799 url
= a2bstr(nav_serv_url
= nav_url
= "about:blank");
5800 name
= a2bstr("test");
5801 new_window
= (void*)0xdeadbeef;
5807 SET_EXPECT(get_LocationURL
);
5808 SET_EXPECT(TranslateUrl
);
5809 SET_EXPECT(EvaluateNewWindow
);
5811 hres
= IHTMLWindow2_open(window
, url
, name
, NULL
, VARIANT_FALSE
, &new_window
);
5814 SysFreeString(name
);
5817 todo_wine
CHECK_CALLED_BROKEN(get_LocationURL
);
5819 CHECK_CALLED(TranslateUrl
);
5821 if(!called_EvaluateNewWindow
) {
5822 win_skip("INewWindowManager not supported\n");
5823 if(SUCCEEDED(hres
) && new_window
)
5824 IHTMLWindow2_Release(new_window
);
5825 IHTMLWindow2_Release(window
);
5828 CHECK_CALLED(EvaluateNewWindow
);
5830 ok(hres
== S_OK
, "open failed: %08x\n", hres
);
5833 ok(!new_window
, "new_window != NULL\n");
5835 ok(new_window
!= NULL
, "new_window == NULL\n");
5837 hres
= IHTMLWindow2_close(new_window
);
5838 ok(hres
== S_OK
, "close failed: %08x\n", hres
);
5841 IHTMLWindow2_Release(window
);
5844 static void test_window_close(IHTMLDocument2
*doc
)
5846 IHTMLWindow2
*window
;
5849 hres
= IHTMLDocument2_get_parentWindow(doc
, &window
);
5850 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
5852 SET_EXPECT(FindConnectionPoint
);
5853 SET_EXPECT(EnumConnections
);
5854 SET_EXPECT(EnumConnections_Next
);
5855 SET_EXPECT(WindowClosing
);
5857 hres
= IHTMLWindow2_close(window
);
5858 ok(hres
== S_OK
, "close failed: %08x\n", hres
);
5860 CHECK_CALLED(FindConnectionPoint
);
5861 CHECK_CALLED(EnumConnections
);
5862 CHECK_CALLED(EnumConnections_Next
);
5863 CHECK_CALLED(WindowClosing
);
5865 IHTMLWindow2_Release(window
);
5868 static void test_elem_from_point(IHTMLDocument2
*doc
)
5875 hres
= IHTMLDocument2_elementFromPoint(doc
, 3, 3, &elem
);
5876 ok(hres
== S_OK
, "elementFromPoint failed: %08x\n", hres
);
5877 ok(elem
!= NULL
, "elem == NULL\n");
5879 hres
= IHTMLElement_get_tagName(elem
, &tag
);
5880 IHTMLElement_Release(elem
);
5881 ok(hres
== S_OK
, "get_tagName failed: %08x\n", hres
);
5882 ok(!strcmp_wa(tag
, "DIV"), "tag = %s\n", wine_dbgstr_w(tag
));
5885 static void test_clear(IHTMLDocument2
*doc
)
5889 hres
= IHTMLDocument2_clear(doc
);
5890 ok(hres
== S_OK
, "clear failed: %08x\n", hres
);
5893 static const OLECMDF expect_cmds
[OLECMDID_GETPRINTTEMPLATE
+1] = {
5895 OLECMDF_SUPPORTED
, /* OLECMDID_OPEN */
5896 OLECMDF_SUPPORTED
, /* OLECMDID_NEW */
5897 OLECMDF_SUPPORTED
, /* OLECMDID_SAVE */
5898 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_SAVEAS */
5899 OLECMDF_SUPPORTED
, /* OLECMDID_SAVECOPYAS */
5900 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PRINT */
5901 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PRINTPREVIEW */
5902 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PAGESETUP */
5903 OLECMDF_SUPPORTED
, /* OLECMDID_SPELL */
5904 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_PROPERTIES */
5905 OLECMDF_SUPPORTED
, /* OLECMDID_CUT */
5906 OLECMDF_SUPPORTED
, /* OLECMDID_COPY */
5907 OLECMDF_SUPPORTED
, /* OLECMDID_PASTE */
5908 OLECMDF_SUPPORTED
, /* OLECMDID_PASTESPECIAL */
5909 OLECMDF_SUPPORTED
, /* OLECMDID_UNDO */
5910 OLECMDF_SUPPORTED
, /* OLECMDID_REDO */
5911 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_SELECTALL */
5912 OLECMDF_SUPPORTED
, /* OLECMDID_CLEARSELECTION */
5913 OLECMDF_SUPPORTED
, /* OLECMDID_ZOOM */
5914 OLECMDF_SUPPORTED
, /* OLECMDID_GETZOOMRANGE */
5916 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_REFRESH */
5917 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, /* OLECMDID_STOP */
5919 OLECMDF_SUPPORTED
, /* OLECMDID_STOPDOWNLOAD */
5921 OLECMDF_SUPPORTED
, /* OLECMDID_DELETE */
5923 OLECMDF_SUPPORTED
, /* OLECMDID_ENABLE_INTERACTION */
5924 OLECMDF_SUPPORTED
, /* OLECMDID_ONUNLOAD */
5926 OLECMDF_SUPPORTED
, /* OLECMDID_SHOWPAGESETUP */
5927 OLECMDF_SUPPORTED
, /* OLECMDID_SHOWPRINT */
5929 OLECMDF_SUPPORTED
, /* OLECMDID_CLOSE */
5931 OLECMDF_SUPPORTED
, /* OLECMDID_SETPRINTTEMPLATE */
5932 OLECMDF_SUPPORTED
/* OLECMDID_GETPRINTTEMPLATE */
5935 #define test_QueryStatus(u,cgid,cmdid,cmdf) _test_QueryStatus(__LINE__,u,cgid,cmdid,cmdf)
5936 static void _test_QueryStatus(unsigned line
, IUnknown
*unk
, REFIID cgid
, ULONG cmdid
, DWORD cmdf
)
5938 IOleCommandTarget
*cmdtrg
;
5939 OLECMD olecmd
= {cmdid
, 0};
5942 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
5943 ok_(__FILE__
,line
) (hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget failed: %08x\n", hres
);
5947 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, cgid
, 1, &olecmd
, NULL
);
5948 ok(hres
== S_OK
, "QueryStatus(%u) failed: %08x\n", cmdid
, hres
);
5950 IOleCommandTarget_Release(cmdtrg
);
5952 ok_(__FILE__
,line
) (olecmd
.cmdID
== cmdid
, "cmdID changed\n");
5953 ok_(__FILE__
,line
) (olecmd
.cmdf
== cmdf
, "(%u) cmdf=%08x, expected %08x\n", cmdid
, olecmd
.cmdf
, cmdf
);
5956 static void test_MSHTML_QueryStatus(IHTMLDocument2
*doc
, DWORD cmdf
)
5958 IUnknown
*unk
= doc
? (IUnknown
*)doc
: doc_unk
;
5960 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_FONTNAME
, cmdf
);
5961 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_FONTSIZE
, cmdf
);
5962 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_SELECTALL
, cmdf
|OLECMDF_ENABLED
);
5963 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_BOLD
, cmdf
);
5964 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_FORECOLOR
, cmdf
);
5965 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYCENTER
, cmdf
);
5966 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYLEFT
, cmdf
);
5967 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYRIGHT
, cmdf
);
5968 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_ITALIC
, cmdf
);
5969 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_UNDERLINE
, cmdf
);
5970 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_HORIZONTALLINE
, cmdf
);
5971 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_ORDERLIST
, cmdf
);
5972 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_UNORDERLIST
, cmdf
);
5973 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_INDENT
, cmdf
);
5974 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_OUTDENT
, cmdf
);
5975 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_DELETE
, cmdf
);
5978 static void test_OleCommandTarget(IHTMLDocument2
*doc
)
5980 IOleCommandTarget
*cmdtrg
;
5981 OLECMD cmds
[OLECMDID_GETPRINTTEMPLATE
];
5985 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
5986 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget failed: %08x\n", hres
);
5990 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
5991 cmds
[i
].cmdID
= i
+1;
5992 cmds
[i
].cmdf
= 0xf0f0;
5995 SET_EXPECT(QueryStatus_OPEN
);
5996 SET_EXPECT(QueryStatus_NEW
);
5997 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, sizeof(cmds
)/sizeof(cmds
[0]), cmds
, NULL
);
5998 ok(hres
== S_OK
, "QueryStatus failed: %08x\n", hres
);
5999 CHECK_CALLED(QueryStatus_OPEN
);
6000 CHECK_CALLED(QueryStatus_NEW
);
6002 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
6003 ok(cmds
[i
].cmdID
== i
+1, "cmds[%d].cmdID canged to %x\n", i
, cmds
[i
].cmdID
);
6004 if(i
+1 == OLECMDID_FIND
)
6006 ok(cmds
[i
].cmdf
== expect_cmds
[i
+1], "cmds[%d].cmdf=%x, expected %x\n",
6007 i
+1, cmds
[i
].cmdf
, expect_cmds
[i
+1]);
6010 ok(!cmds
[OLECMDID_FIND
-1].cmdf
|| cmds
[OLECMDID_FIND
-1].cmdf
== (OLECMDF_SUPPORTED
|OLECMDF_ENABLED
),
6011 "cmds[OLECMDID_FIND].cmdf=%x\n", cmds
[OLECMDID_FIND
-1].cmdf
);
6013 IOleCommandTarget_Release(cmdtrg
);
6016 static void test_OleCommandTarget_fail(IHTMLDocument2
*doc
)
6018 IOleCommandTarget
*cmdtrg
;
6023 {OLECMDID_OPEN
, 0xf0f0},
6024 {OLECMDID_GETPRINTTEMPLATE
+1, 0xf0f0}
6027 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
6028 ok(hres
== S_OK
, "QueryInterface(IIDIOleCommandTarget failed: %08x\n", hres
);
6032 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 0, NULL
, NULL
);
6033 ok(hres
== S_OK
, "QueryStatus failed: %08x\n", hres
);
6035 SET_EXPECT(QueryStatus_OPEN
);
6036 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 2, cmd
, NULL
);
6037 CHECK_CALLED(QueryStatus_OPEN
);
6039 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
6040 "QueryStatus failed: %08x, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
6041 ok(cmd
[1].cmdID
== OLECMDID_GETPRINTTEMPLATE
+1,
6042 "cmd[0].cmdID=%d, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd
[0].cmdID
);
6043 ok(cmd
[1].cmdf
== 0, "cmd[0].cmdf=%x, expected 0\n", cmd
[0].cmdf
);
6044 ok(cmd
[0].cmdf
== OLECMDF_SUPPORTED
,
6045 "cmd[1].cmdf=%x, expected OLECMDF_SUPPORTED\n", cmd
[1].cmdf
);
6047 hres
= IOleCommandTarget_QueryStatus(cmdtrg
, &IID_IHTMLDocument2
, 2, cmd
, NULL
);
6048 ok(hres
== OLECMDERR_E_UNKNOWNGROUP
,
6049 "QueryStatus failed: %08x, expected OLECMDERR_E_UNKNOWNGROUP\n", hres
);
6051 for(i
=0; i
<OLECMDID_GETPRINTTEMPLATE
; i
++) {
6052 if(!expect_cmds
[i
]) {
6053 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_UPDATECOMMANDS
,
6054 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6055 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
6056 "Exec failed: %08x, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
6060 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_GETPRINTTEMPLATE
+1,
6061 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6062 ok(hres
== OLECMDERR_E_NOTSUPPORTED
,
6063 "Exec failed: %08x, expected OLECMDERR_E_NOTSUPPORTED\n", hres
);
6065 IOleCommandTarget_Release(cmdtrg
);
6068 static void test_exec_onunload(IHTMLDocument2
*doc
)
6070 IOleCommandTarget
*cmdtrg
;
6074 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
6075 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget) failed: %08x\n", hres
);
6079 memset(&var
, 0x0a, sizeof(var
));
6080 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_ONUNLOAD
,
6081 OLECMDEXECOPT_DODEFAULT
, NULL
, &var
);
6082 ok(hres
== S_OK
, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08x\n", hres
);
6083 ok(V_VT(&var
) == VT_BOOL
, "V_VT(var)=%d, expected VT_BOOL\n", V_VT(&var
));
6084 ok(V_BOOL(&var
) == VARIANT_TRUE
, "V_BOOL(var)=%x, expected VARIANT_TRUE\n", V_BOOL(&var
));
6086 hres
= IOleCommandTarget_Exec(cmdtrg
, NULL
, OLECMDID_ONUNLOAD
,
6087 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6088 ok(hres
== S_OK
, "Exec(..., OLECMDID_ONUNLOAD, ...) failed: %08x\n", hres
);
6090 IOleCommandTarget_Release(cmdtrg
);
6093 static void test_exec_editmode(IUnknown
*unk
, BOOL loaded
)
6095 IOleCommandTarget
*cmdtrg
;
6098 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
6099 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget) failed: %08x\n", hres
);
6106 load_state
= LD_DOLOAD
;
6109 SET_EXPECT(GetClassID
);
6110 SET_EXPECT(SetStatusText
);
6111 SET_EXPECT(Exec_ShellDocView_37
);
6112 SET_EXPECT(GetHostInfo
);
6114 SET_EXPECT(GetDisplayName
);
6115 SET_EXPECT(Invoke_AMBIENT_SILENT
);
6116 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6117 SET_EXPECT(OnChanged_READYSTATE
);
6118 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
6119 SET_EXPECT(IsSystemMoniker
);
6120 SET_EXPECT(Exec_ShellDocView_84
);
6122 SET_EXPECT(BindToStorage
);
6123 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
6126 SET_EXPECT(InPlaceFrame_SetBorderSpace
);
6128 expect_status_text
= NULL
;
6129 readystate_set_loading
= TRUE
;
6131 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_MSHTML
, IDM_EDITMODE
,
6132 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6133 ok(hres
== S_OK
, "Exec failed: %08x\n", hres
);
6136 CHECK_CALLED(GetClassID
);
6137 CHECK_CALLED(SetStatusText
);
6138 CHECK_CALLED(Exec_ShellDocView_37
);
6139 CHECK_CALLED(GetHostInfo
);
6141 CHECK_CALLED(GetDisplayName
);
6142 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
6143 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6144 CHECK_CALLED(OnChanged_READYSTATE
);
6145 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
6146 CLEAR_CALLED(IsSystemMoniker
); /* IE7 */
6147 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
6149 CHECK_CALLED(BindToStorage
);
6150 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
6151 CHECK_CALLED(HideUI
);
6152 CHECK_CALLED(ShowUI
);
6153 CHECK_CALLED(InPlaceFrame_SetBorderSpace
);
6155 test_timer(EXPECT_UPDATEUI
|EXPECT_SETTITLE
);
6157 IOleCommandTarget_Release(cmdtrg
);
6159 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_MSHTML
, IDM_EDITMODE
,
6160 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6161 ok(hres
== S_OK
, "Exec failed: %08x\n", hres
);
6164 static void test_exec_fontname(IUnknown
*unk
, LPCWSTR name
, LPCWSTR exname
)
6166 IOleCommandTarget
*cmdtrg
;
6167 VARIANT
*in
= NULL
, _in
, *out
= NULL
, _out
;
6170 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
6171 ok(hres
== S_OK
, "QueryInterface(IIDIOleM=CommandTarget failed: %08x\n", hres
);
6178 V_BSTR(in
) = SysAllocString(name
);
6184 V_I4(out
) = 0xdeadbeef;
6187 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_MSHTML
, IDM_FONTNAME
, 0, in
, out
);
6188 ok(hres
== S_OK
, "Exec(IDM_FONTNAME) failed: %08x\n", hres
);
6194 ok(V_VT(out
) == VT_BSTR
, "V_VT(out) = %x\n", V_VT(out
));
6195 if(V_VT(out
) == VT_BSTR
) {
6197 ok(!lstrcmpW(V_BSTR(out
), name
? name
: exname
),
6198 "unexpected fontname %s\n", wine_dbgstr_w(name
));
6200 ok(V_BSTR(out
) == NULL
, "V_BSTR(out) != NULL\n");
6205 IOleCommandTarget_Release(cmdtrg
);
6208 static void test_exec_noargs(IUnknown
*unk
, DWORD cmdid
)
6210 IOleCommandTarget
*cmdtrg
;
6213 hres
= IUnknown_QueryInterface(unk
, &IID_IOleCommandTarget
, (void**)&cmdtrg
);
6214 ok(hres
== S_OK
, "QueryInterface(IID_IOleCommandTarget) failed: %08x\n", hres
);
6218 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_MSHTML
, cmdid
,
6219 OLECMDEXECOPT_DODEFAULT
, NULL
, NULL
);
6220 ok(hres
== S_OK
, "Exec failed: %08x\n", hres
);
6222 IOleCommandTarget_Release(cmdtrg
);
6225 static void test_IsDirty(IHTMLDocument2
*doc
, HRESULT exhres
)
6227 IPersistStreamInit
*perinit
;
6228 IPersistMoniker
*permon
;
6229 IPersistFile
*perfile
;
6232 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistStreamInit
, (void**)&perinit
);
6233 ok(hres
== S_OK
, "QueryInterface(IID_IPersistStreamInit failed: %08x\n", hres
);
6234 if(SUCCEEDED(hres
)) {
6235 hres
= IPersistStreamInit_IsDirty(perinit
);
6236 ok(hres
== exhres
, "IsDirty() = %08x, expected %08x\n", hres
, exhres
);
6237 IPersistStreamInit_Release(perinit
);
6240 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistMoniker
, (void**)&permon
);
6241 ok(hres
== S_OK
, "QueryInterface(IID_IPersistMoniker failed: %08x\n", hres
);
6242 if(SUCCEEDED(hres
)) {
6243 hres
= IPersistMoniker_IsDirty(permon
);
6244 ok(hres
== exhres
, "IsDirty() = %08x, expected %08x\n", hres
, exhres
);
6245 IPersistMoniker_Release(permon
);
6248 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistFile
, (void**)&perfile
);
6249 ok(hres
== S_OK
, "QueryInterface(IID_IPersistFile failed: %08x\n", hres
);
6250 if(SUCCEEDED(hres
)) {
6251 hres
= IPersistFile_IsDirty(perfile
);
6252 ok(hres
== exhres
, "IsDirty() = %08x, expected %08x\n", hres
, exhres
);
6253 IPersistFile_Release(perfile
);
6257 static HWND
create_container_window(void)
6259 static const WCHAR wszHTMLDocumentTest
[] =
6260 {'H','T','M','L','D','o','c','u','m','e','n','t','T','e','s','t',0};
6261 static WNDCLASSEXW wndclass
= {
6262 sizeof(WNDCLASSEXW
),
6265 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
6266 wszHTMLDocumentTest
,
6270 RegisterClassExW(&wndclass
);
6271 return CreateWindowW(wszHTMLDocumentTest
, wszHTMLDocumentTest
,
6272 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
,
6273 515, 530, NULL
, NULL
, NULL
, NULL
);
6276 static void test_DoVerb(IOleObject
*oleobj
)
6278 RECT rect
= {0,0,500,500};
6281 if(!container_locked
) {
6282 SET_EXPECT(GetContainer
);
6283 SET_EXPECT(LockContainer
);
6285 SET_EXPECT(ActivateMe
);
6286 expect_LockContainer_fLock
= TRUE
;
6288 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
, -1, container_hwnd
, &rect
);
6289 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
6291 if(!container_locked
) {
6292 CHECK_CALLED(GetContainer
);
6293 CHECK_CALLED(LockContainer
);
6294 container_locked
= TRUE
;
6296 CHECK_CALLED(ActivateMe
);
6299 #define CLIENTSITE_EXPECTPATH 0x00000001
6300 #define CLIENTSITE_SETNULL 0x00000002
6301 #define CLIENTSITE_DONTSET 0x00000004
6303 static void test_ClientSite(IOleObject
*oleobj
, DWORD flags
)
6305 IOleClientSite
*clientsite
;
6308 if(flags
& CLIENTSITE_SETNULL
) {
6309 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
6310 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
6312 ok(clientsite
== &ClientSite
, "clientsite=%p, expected %p\n", clientsite
, &ClientSite
);
6314 ok(!clientsite
, "clientsite != NULL\n");
6316 SET_EXPECT(GetOverrideKeyPath
);
6317 hres
= IOleObject_SetClientSite(oleobj
, NULL
);
6318 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
6319 CLEAR_CALLED(GetOverrideKeyPath
); /* IE9 sometimes calls it */
6321 set_clientsite
= FALSE
;
6324 if(flags
& CLIENTSITE_DONTSET
)
6327 if(!expect_uihandler_iface
)
6328 expect_uihandler_iface
= &DocHostUIHandler
;
6330 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
6331 ok(hres
== S_OK
, "GetClientSite failed: %08x\n", hres
);
6332 ok(clientsite
== (set_clientsite
? &ClientSite
: NULL
), "GetClientSite() = %p, expected %p\n",
6333 clientsite
, set_clientsite
? &ClientSite
: NULL
);
6335 if(!set_clientsite
) {
6336 if(expect_uihandler_iface
)
6337 SET_EXPECT(GetHostInfo
);
6338 if(flags
& CLIENTSITE_EXPECTPATH
) {
6339 SET_EXPECT(GetOptionKeyPath
);
6340 SET_EXPECT(GetOverrideKeyPath
);
6342 SET_EXPECT(GetWindow
);
6343 if(flags
& CLIENTSITE_EXPECTPATH
)
6344 SET_EXPECT(Exec_DOCCANNAVIGATE
);
6345 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
6346 SET_EXPECT(Exec_SETPROGRESSMAX
);
6347 SET_EXPECT(Exec_SETPROGRESSPOS
);
6348 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
6349 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
6350 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6351 SET_EXPECT(Invoke_AMBIENT_SILENT
);
6352 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
6353 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
6354 SET_EXPECT(GetOverrideKeyPath
);
6355 SET_EXPECT(GetTravelLog
);
6356 SET_EXPECT(Exec_ShellDocView_84
);
6358 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
6359 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
6361 if(expect_uihandler_iface
)
6362 CHECK_CALLED(GetHostInfo
);
6363 if(flags
& CLIENTSITE_EXPECTPATH
) {
6364 CLEAR_CALLED(GetOptionKeyPath
); /* not called on some IE9 */
6365 CHECK_CALLED(GetOverrideKeyPath
);
6367 CHECK_CALLED(GetWindow
);
6368 if(flags
& CLIENTSITE_EXPECTPATH
)
6369 CHECK_CALLED(Exec_DOCCANNAVIGATE
);
6370 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
6371 CHECK_CALLED(Exec_SETPROGRESSMAX
);
6372 CHECK_CALLED(Exec_SETPROGRESSPOS
);
6373 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
6374 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
6375 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6376 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
6377 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
6378 CLEAR_CALLED(Invoke_AMBIENT_PALETTE
); /* not called on IE9 */
6379 CLEAR_CALLED(GetOverrideKeyPath
); /* Called by IE9 */
6380 CHECK_CALLED(GetTravelLog
);
6381 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
6383 set_clientsite
= TRUE
;
6386 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
6387 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
6389 hres
= IOleObject_GetClientSite(oleobj
, &clientsite
);
6390 ok(hres
== S_OK
, "GetClientSite failed: %08x\n", hres
);
6391 ok(clientsite
== &ClientSite
, "GetClientSite() = %p, expected %p\n", clientsite
, &ClientSite
);
6394 static void test_OnAmbientPropertyChange(IHTMLDocument2
*doc
)
6396 IOleControl
*control
= NULL
;
6399 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleControl
, (void**)&control
);
6400 ok(hres
== S_OK
, "QueryInterface(IID_IOleControl failed: %08x\n", hres
);
6404 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
6405 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_USERMODE
);
6406 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6407 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
6409 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
6410 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_DLCONTROL
);
6411 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6412 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
6414 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
6415 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6416 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
);
6417 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6418 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
6419 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6421 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
6422 SET_EXPECT(Invoke_AMBIENT_SILENT
);
6423 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_SILENT
);
6424 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6425 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
6426 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
6428 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
6429 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_USERAGENT
);
6430 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6431 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
6433 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
6434 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_PALETTE
);
6435 ok(hres
== S_OK
, "OnAmbientChange failed: %08x\n", hres
);
6436 CLEAR_CALLED(Invoke_AMBIENT_PALETTE
); /* not called on IE9 */
6438 IOleControl_Release(control
);
6443 static void test_OnAmbientPropertyChange2(IHTMLDocument2
*doc
)
6445 IOleControl
*control
= NULL
;
6448 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleControl
, (void**)&control
);
6449 ok(hres
== S_OK
, "QueryInterface(IID_IOleControl failed: %08x\n", hres
);
6453 hres
= IOleControl_OnAmbientPropertyChange(control
, DISPID_AMBIENT_PALETTE
);
6454 ok(hres
== S_OK
, "OnAmbientPropertyChange failed: %08x\n", hres
);
6456 IOleControl_Release(control
);
6459 static void test_Close(IHTMLDocument2
*doc
, BOOL set_client
)
6461 IOleObject
*oleobj
= NULL
;
6464 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
6465 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08x\n", hres
);
6469 SET_EXPECT(GetContainer
);
6470 SET_EXPECT(LockContainer
);
6471 expect_LockContainer_fLock
= FALSE
;
6472 hres
= IOleObject_Close(oleobj
, OLECLOSE_NOSAVE
);
6473 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
6474 CHECK_CALLED(GetContainer
);
6475 CHECK_CALLED(LockContainer
);
6476 container_locked
= FALSE
;
6479 test_ClientSite(oleobj
, CLIENTSITE_SETNULL
|CLIENTSITE_DONTSET
);
6481 IOleObject_Release(oleobj
);
6484 static void test_Advise(IHTMLDocument2
*doc
)
6486 IOleObject
*oleobj
= NULL
;
6487 IEnumSTATDATA
*enum_advise
= (void*)0xdeadbeef;
6491 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
6492 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08x\n", hres
);
6496 hres
= IOleObject_Unadvise(oleobj
, 0);
6497 ok(hres
== OLE_E_NOCONNECTION
, "Unadvise returned: %08x\n", hres
);
6499 hres
= IOleObject_EnumAdvise(oleobj
, &enum_advise
);
6500 ok(hres
== S_OK
, "EnumAdvise returned: %08x\n", hres
);
6501 ok(enum_advise
== NULL
, "enum_advise != NULL\n");
6504 hres
= IOleObject_Advise(oleobj
, NULL
, &conn
);
6505 /* Old IE returns S_OK and sets conn to 1 */
6506 ok(hres
== E_INVALIDARG
|| hres
== S_OK
, "Advise returned: %08x\n", hres
);
6507 ok(conn
== 0 || conn
== 1, "conn = %d\n", conn
);
6509 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, NULL
);
6510 ok(hres
== E_INVALIDARG
, "Advise returned: %08x\n", hres
);
6512 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, &conn
);
6513 ok(hres
== S_OK
, "Advise returned: %08x\n", hres
);
6514 ok(conn
== 1, "conn = %d\n", conn
);
6516 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, &conn
);
6517 ok(hres
== S_OK
, "Advise returned: %08x\n", hres
);
6518 ok(conn
== 2, "conn = %d\n", conn
);
6520 hres
= IOleObject_Unadvise(oleobj
, 1);
6521 ok(hres
== S_OK
, "Unadvise returned: %08x\n", hres
);
6523 hres
= IOleObject_Unadvise(oleobj
, 1);
6524 ok(hres
== OLE_E_NOCONNECTION
, "Unadvise returned: %08x\n", hres
);
6526 hres
= IOleObject_Unadvise(oleobj
, 2);
6527 ok(hres
== S_OK
, "Unadvise returned: %08x\n", hres
);
6529 IOleObject_Release(oleobj
);
6532 static void test_OnFrameWindowActivate(IUnknown
*unk
)
6534 IOleInPlaceActiveObject
*inplaceact
;
6537 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceActiveObject
, (void**)&inplaceact
);
6538 ok(hres
== S_OK
, "QueryInterface(IID_IOleInPlaceActiveObject) failed: %08x\n", hres
);
6542 if(set_clientsite
) {
6543 expect_OnFrameWindowActivate_fActivate
= TRUE
;
6544 SET_EXPECT(OnFrameWindowActivate
);
6545 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
6546 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6547 CHECK_CALLED(OnFrameWindowActivate
);
6549 SET_EXPECT(OnFrameWindowActivate
);
6550 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
6551 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6552 CHECK_CALLED(OnFrameWindowActivate
);
6554 expect_OnFrameWindowActivate_fActivate
= FALSE
;
6555 SET_EXPECT(OnFrameWindowActivate
);
6556 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, FALSE
);
6557 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6558 CHECK_CALLED(OnFrameWindowActivate
);
6560 expect_OnFrameWindowActivate_fActivate
= TRUE
;
6561 SET_EXPECT(OnFrameWindowActivate
);
6562 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
6563 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6564 CHECK_CALLED(OnFrameWindowActivate
);
6566 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, FALSE
);
6567 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6569 hres
= IOleInPlaceActiveObject_OnFrameWindowActivate(inplaceact
, TRUE
);
6570 ok(hres
== S_OK
, "OnFrameWindowActivate failed: %08x\n", hres
);
6573 IOleInPlaceActiveObject_Release(inplaceact
);
6576 static void test_InPlaceDeactivate(IHTMLDocument2
*doc
, BOOL expect_call
)
6578 IOleInPlaceObjectWindowless
*windowlessobj
= NULL
;
6581 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleInPlaceObjectWindowless
,
6582 (void**)&windowlessobj
);
6583 ok(hres
== S_OK
, "QueryInterface(IID_IOleInPlaceObjectWindowless) failed: %08x\n", hres
);
6588 SET_EXPECT(SetStatusText
);
6589 SET_EXPECT(OnFocus_FALSE
);
6591 SET_EXPECT(OnInPlaceDeactivateEx
);
6593 SET_EXPECT(OnInPlaceDeactivate
);
6595 hres
= IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj
);
6596 ok(hres
== S_OK
, "InPlaceDeactivate failed: %08x\n", hres
);
6598 CLEAR_CALLED(SetStatusText
); /* Called by IE9 */
6599 CHECK_CALLED(OnFocus_FALSE
);
6601 CHECK_CALLED(OnInPlaceDeactivateEx
);
6603 CHECK_CALLED(OnInPlaceDeactivate
);
6606 IOleInPlaceObjectWindowless_Release(windowlessobj
);
6609 static void test_Activate(IHTMLDocument2
*doc
, DWORD flags
)
6611 IOleObject
*oleobj
= NULL
;
6612 IOleDocumentView
*docview
;
6616 last_hwnd
= doc_hwnd
;
6619 IOleDocumentView_Release(view
);
6622 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
6623 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08x\n", hres
);
6625 hres
= IOleObject_GetUserClassID(oleobj
, NULL
);
6626 ok(hres
== E_INVALIDARG
, "GetUserClassID returned: %08x, expected E_INVALIDARG\n", hres
);
6628 hres
= IOleObject_GetUserClassID(oleobj
, &guid
);
6629 ok(hres
== S_OK
, "GetUserClassID failed: %08x\n", hres
);
6630 ok(IsEqualGUID(&guid
, &CLSID_HTMLDocument
), "guid != CLSID_HTMLDocument\n");
6632 test_OnFrameWindowActivate((IUnknown
*)doc
);
6634 test_ClientSite(oleobj
, flags
);
6635 test_InPlaceDeactivate(doc
, FALSE
);
6636 test_DoVerb(oleobj
);
6638 if(call_UIActivate
== CallUIActivate_AfterShow
) {
6639 hres
= IOleObject_QueryInterface(oleobj
, &IID_IOleDocumentView
, (void **)&docview
);
6640 ok(hres
== S_OK
, "IOleObject_QueryInterface failed with error 0x%08x\n", hres
);
6642 SET_EXPECT(OnFocus_TRUE
);
6643 SET_EXPECT(SetActiveObject
);
6645 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
6646 SET_EXPECT(InPlaceFrame_SetBorderSpace
);
6647 expect_status_text
= NULL
;
6649 hres
= IOleDocumentView_UIActivate(docview
, TRUE
);
6650 ok(hres
== S_OK
, "IOleDocumentView_UIActivate failed with error 0x%08x\n", hres
);
6652 CHECK_CALLED(OnFocus_TRUE
);
6653 CHECK_CALLED(SetActiveObject
);
6654 CHECK_CALLED(ShowUI
);
6655 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
6656 CHECK_CALLED(InPlaceFrame_SetBorderSpace
);
6658 IOleDocumentView_Release(docview
);
6661 IOleObject_Release(oleobj
);
6663 test_OnFrameWindowActivate((IUnknown
*)doc
);
6666 static void test_Window(IHTMLDocument2
*doc
, BOOL expect_success
)
6668 IOleInPlaceActiveObject
*activeobject
= NULL
;
6672 hres
= IOleDocumentView_QueryInterface(view
, &IID_IOleInPlaceActiveObject
, (void**)&activeobject
);
6673 ok(hres
== S_OK
, "Could not get IOleInPlaceActiveObject interface: %08x\n", hres
);
6677 hres
= IOleInPlaceActiveObject_GetWindow(activeobject
, &tmp_hwnd
);
6679 if(expect_success
) {
6680 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
6681 ok(tmp_hwnd
== doc_hwnd
, "tmp_hwnd=%p, expected %p\n", tmp_hwnd
, doc_hwnd
);
6683 ok(hres
== E_FAIL
, "GetWindow returned %08x, expected E_FAIL\n", hres
);
6684 ok(IsWindow(doc_hwnd
), "hwnd is destroyed\n");
6687 IOleInPlaceActiveObject_Release(activeobject
);
6690 static void test_CloseView(void)
6692 IOleInPlaceSite
*inplacesite
= (IOleInPlaceSite
*)0xff00ff00;
6698 hres
= IOleDocumentView_Show(view
, FALSE
);
6699 ok(hres
== S_OK
, "Show failed: %08x\n", hres
);
6701 hres
= IOleDocumentView_CloseView(view
, 0);
6702 ok(hres
== S_OK
, "CloseView failed: %08x\n", hres
);
6704 hres
= IOleDocumentView_SetInPlaceSite(view
, NULL
);
6705 ok(hres
== S_OK
, "SetInPlaceSite failed: %08x\n", hres
);
6707 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
6708 ok(hres
== S_OK
, "SetInPlaceSite failed: %08x\n", hres
);
6709 ok(inplacesite
== NULL
, "inplacesite=%p, expected NULL\n", inplacesite
);
6712 static void test_UIDeactivate(void)
6716 if(call_UIActivate
== CallUIActivate_AfterShow
) {
6717 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
6719 if(call_UIActivate
!= CallUIActivate_None
) {
6720 SET_EXPECT(SetActiveObject_null
);
6722 SET_EXPECT(OnUIDeactivate
);
6725 hres
= IOleDocumentView_UIActivate(view
, FALSE
);
6726 ok(hres
== S_OK
, "UIActivate failed: %08x\n", hres
);
6728 if(call_UIActivate
!= CallUIActivate_None
) {
6729 CHECK_CALLED(SetActiveObject_null
);
6730 CHECK_CALLED(HideUI
);
6731 CHECK_CALLED(OnUIDeactivate
);
6733 if(call_UIActivate
== CallUIActivate_AfterShow
) {
6734 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
6738 static void test_Hide(void)
6745 hres
= IOleDocumentView_Show(view
, FALSE
);
6746 ok(hres
== S_OK
, "Show failed: %08x\n", hres
);
6749 static IHTMLDocument2
*create_document(void)
6751 IHTMLDocument2
*doc
;
6754 hres
= CoCreateInstance(&CLSID_HTMLDocument
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
6755 &IID_IHTMLDocument2
, (void**)&doc
);
6756 ok(hres
== S_OK
, "CoCreateInstance failed: %08x\n", hres
);
6763 static void release_document(IHTMLDocument2
*doc
)
6769 /* Some broken IEs don't like if the last released reference is IHTMLDocument2 iface.
6770 * To workaround it, we release it via IUnknown iface */
6771 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IUnknown
, (void**)&unk
);
6772 ok(hres
== S_OK
, "Could not get IUnknown iface: %08x\n", hres
);
6774 IHTMLDocument2_Release(doc
);
6775 ref
= IUnknown_Release(unk
);
6776 ok(!ref
, "ref = %d\n", ref
);
6779 static void test_Navigate(IHTMLDocument2
*doc
)
6781 IHlinkTarget
*hlink
;
6784 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IHlinkTarget
, (void**)&hlink
);
6785 ok(hres
== S_OK
, "QueryInterface(IID_IHlinkTarget) failed: %08x\n", hres
);
6787 SET_EXPECT(ActivateMe
);
6788 hres
= IHlinkTarget_Navigate(hlink
, 0, NULL
);
6789 ok(hres
== S_OK
, "Navigate failed: %08x\n", hres
);
6790 CHECK_CALLED(ActivateMe
);
6792 IHlinkTarget_Release(hlink
);
6795 static void test_external(IHTMLDocument2
*doc
, BOOL initialized
)
6797 IDispatch
*external
;
6798 IHTMLWindow2
*htmlwin
;
6801 hres
= IHTMLDocument2_get_parentWindow(doc
, &htmlwin
);
6802 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
6805 SET_EXPECT(GetExternal
);
6806 external
= (void*)0xdeadbeef;
6807 hres
= IHTMLWindow2_get_external(htmlwin
, &external
);
6809 ok(hres
== S_FALSE
|| hres
== S_OK
, "get_external failed: %08x\n", hres
);
6810 CHECK_CALLED(GetExternal
);
6811 ok(external
!= NULL
, "external == NULL\n");
6813 ok(hres
== S_OK
, "get_external failed: %08x\n", hres
);
6814 ok(external
== NULL
, "external != NULL\n");
6817 IHTMLWindow2_Release(htmlwin
);
6820 static void test_enum_objects(IOleContainer
*container
)
6822 IEnumUnknown
*enum_unknown
;
6823 IUnknown
*buf
[100] = {(void*)0xdeadbeef};
6827 enum_unknown
= NULL
;
6828 hres
= IOleContainer_EnumObjects(container
, OLECONTF_EMBEDDINGS
, &enum_unknown
);
6829 ok(hres
== S_OK
, "EnumObjects failed: %08x\n", hres
);
6830 ok(enum_unknown
!= NULL
, "enum_unknown == NULL\n");
6832 fetched
= 0xdeadbeef;
6833 hres
= IEnumUnknown_Next(enum_unknown
, sizeof(buf
)/sizeof(*buf
), buf
, &fetched
);
6834 ok(hres
== S_FALSE
, "Next returned %08x\n", hres
);
6835 ok(!fetched
, "fetched = %d\n", fetched
);
6836 ok(buf
[0] == (void*)0xdeadbeef, "buf[0] = %p\n", buf
[0]);
6838 fetched
= 0xdeadbeef;
6839 hres
= IEnumUnknown_Next(enum_unknown
, 1, buf
, &fetched
);
6840 ok(hres
== S_FALSE
, "Next returned %08x\n", hres
);
6841 ok(!fetched
, "fetched = %d\n", fetched
);
6843 hres
= IEnumUnknown_Next(enum_unknown
, 1, buf
, NULL
);
6844 ok(hres
== S_FALSE
, "Next returned %08x\n", hres
);
6846 IEnumUnknown_Release(enum_unknown
);
6849 static void test_target_container(IHTMLDocument2
*doc
)
6851 IOleContainer
*ole_container
, *doc_ole_container
;
6852 ITargetContainer
*target_container
;
6855 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_ITargetContainer
, (void**)&target_container
);
6856 ok(hres
== S_OK
, "Could not get ITargetContainer iface: %08x\n", hres
);
6858 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleContainer
, (void**)&doc_ole_container
);
6859 ok(hres
== S_OK
, "Could not get ITargetContainer iface: %08x\n", hres
);
6861 ole_container
= (void*)0xdeadbeef;
6862 hres
= ITargetContainer_GetFramesContainer(target_container
, &ole_container
);
6863 ok(hres
== S_OK
, "GetFramesContainer failed: %08x\n", hres
);
6864 ok(ole_container
!= NULL
, "ole_container == NULL\n");
6865 ok(iface_cmp((IUnknown
*)ole_container
, (IUnknown
*)doc_ole_container
), "ole_container != doc_ole_container\n");
6866 test_enum_objects(ole_container
);
6867 IOleContainer_Release(ole_container
);
6869 ITargetContainer_Release(target_container
);
6870 IOleContainer_Release(doc_ole_container
);
6873 static void test_travellog(IHTMLDocument2
*doc
)
6875 ITravelLogClient
*travellog_client
;
6876 IHTMLWindow2
*window
, *top_window
;
6881 hres
= IHTMLDocument2_get_parentWindow(doc
, &window
);
6882 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
6883 ok(window
!= NULL
, "window = NULL\n");
6885 hres
= IHTMLWindow2_get_top(window
, &top_window
);
6886 IHTMLWindow2_Release(window
);
6887 ok(hres
== S_OK
, "get_top failed: %08x\n", hres
);
6889 hres
= IHTMLWindow2_QueryInterface(top_window
, &IID_ITravelLogClient
, (void**)&travellog_client
);
6890 IHTMLWindow2_Release(top_window
);
6891 if(hres
== E_NOINTERFACE
) {
6892 win_skip("ITravelLogClient not supported\n");
6895 ok(hres
== S_OK
, "Could not get ITraveLogClient iface: %08x\n", hres
);
6897 unk
= (void*)0xdeadbeef;
6898 hres
= ITravelLogClient_FindWindowByIndex(travellog_client
, 0, &unk
);
6899 ok(hres
== E_FAIL
, "FindWindowByIndex failed: %08x\n", hres
);
6900 ok(!unk
, "unk != NULL\n");
6902 ITravelLogClient_Release(travellog_client
);
6905 static void test_StreamLoad(IHTMLDocument2
*doc
)
6907 IPersistStreamInit
*init
;
6910 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistStreamInit
, (void**)&init
);
6911 ok(hres
== S_OK
, "QueryInterface(IID_IPersistStreamInit) failed: %08x\n", hres
);
6915 SET_EXPECT(Invoke_AMBIENT_SILENT
);
6916 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6917 SET_EXPECT(Exec_ShellDocView_37
);
6918 SET_EXPECT(OnChanged_READYSTATE
);
6919 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
6921 SET_EXPECT(GetPendingUrl
);
6922 readystate_set_loading
= TRUE
;
6924 hres
= IPersistStreamInit_Load(init
, &Stream
);
6925 ok(hres
== S_OK
, "Load failed: %08x\n", hres
);
6927 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
6928 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6929 CHECK_CALLED(Exec_ShellDocView_37
);
6930 CHECK_CALLED(OnChanged_READYSTATE
);
6931 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
6933 todo_wine
CHECK_CALLED(GetPendingUrl
);
6935 test_timer(EXPECT_SETTITLE
);
6936 test_GetCurMoniker((IUnknown
*)doc
, NULL
, "about:blank");
6938 IPersistStreamInit_Release(init
);
6941 static void test_StreamInitNew(IHTMLDocument2
*doc
)
6943 IPersistStreamInit
*init
;
6946 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IPersistStreamInit
, (void**)&init
);
6947 ok(hres
== S_OK
, "QueryInterface(IID_IPersistStreamInit) failed: %08x\n", hres
);
6951 SET_EXPECT(Invoke_AMBIENT_SILENT
);
6952 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6953 SET_EXPECT(Exec_ShellDocView_37
);
6954 SET_EXPECT(OnChanged_READYSTATE
);
6955 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
6956 SET_EXPECT(GetPendingUrl
);
6957 readystate_set_loading
= TRUE
;
6959 hres
= IPersistStreamInit_InitNew(init
);
6960 ok(hres
== S_OK
, "Load failed: %08x\n", hres
);
6962 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
6963 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
6964 CHECK_CALLED(Exec_ShellDocView_37
);
6965 CHECK_CALLED(OnChanged_READYSTATE
);
6966 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
6967 todo_wine
CHECK_CALLED(GetPendingUrl
);
6969 test_timer(EXPECT_SETTITLE
);
6970 test_GetCurMoniker((IUnknown
*)doc
, NULL
, "about:blank");
6972 IPersistStreamInit_Release(init
);
6975 static void test_QueryInterface(IHTMLDocument2
*htmldoc
)
6977 IUnknown
*qi
, *doc
= (IUnknown
*)htmldoc
;
6980 static const IID IID_UndocumentedScriptIface
=
6981 {0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}};
6983 qi
= (void*)0xdeadbeef;
6984 hres
= IUnknown_QueryInterface(doc
, &IID_IRunnableObject
, (void**)&qi
);
6985 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
6986 ok(qi
== NULL
, "qirunnable=%p, expected NULL\n", qi
);
6988 qi
= (void*)0xdeadbeef;
6989 hres
= IUnknown_QueryInterface(doc
, &IID_IHTMLDOMNode
, (void**)&qi
);
6990 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
6991 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
6993 qi
= (void*)0xdeadbeef;
6994 hres
= IUnknown_QueryInterface(doc
, &IID_IHTMLDOMNode2
, (void**)&qi
);
6995 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
6996 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
6998 qi
= (void*)0xdeadbeef;
6999 hres
= IUnknown_QueryInterface(doc
, &IID_IPersistPropertyBag
, (void**)&qi
);
7000 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7001 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7003 qi
= (void*)0xdeadbeef;
7004 hres
= IUnknown_QueryInterface(doc
, &IID_UndocumentedScriptIface
, (void**)&qi
);
7005 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7006 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7008 qi
= (void*)0xdeadbeef;
7009 hres
= IUnknown_QueryInterface(doc
, &IID_IMarshal
, (void**)&qi
);
7010 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7011 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7013 qi
= (void*)0xdeadbeef;
7014 hres
= IUnknown_QueryInterface(doc
, &IID_IExternalConnection
, (void**)&qi
);
7015 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7016 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7018 qi
= (void*)0xdeadbeef;
7019 hres
= IUnknown_QueryInterface(doc
, &IID_IStdMarshalInfo
, (void**)&qi
);
7020 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7021 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7023 qi
= (void*)0xdeadbeef;
7024 hres
= IUnknown_QueryInterface(doc
, &IID_ITargetFrame
, (void**)&qi
);
7025 ok(hres
== E_NOINTERFACE
, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres
);
7026 ok(qi
== NULL
, "qi=%p, expected NULL\n", qi
);
7028 hres
= IUnknown_QueryInterface(doc
, &IID_IDispatch
, (void**)&qi
);
7029 ok(hres
== S_OK
, "Could not get IDispatch interface: %08x\n", hres
);
7030 ok(qi
!= (IUnknown
*)doc
, "disp == doc\n");
7031 IUnknown_Release(qi
);
7034 static void init_test(enum load_state_t ls
) {
7036 doc_hwnd
= last_hwnd
= NULL
;
7037 set_clientsite
= FALSE
;
7038 load_from_stream
= FALSE
;
7039 call_UIActivate
= CallUIActivate_None
;
7046 inplace_deactivated
= FALSE
;
7048 expect_uihandler_iface
= &DocHostUIHandler
;
7051 static void test_HTMLDocument(BOOL do_load
, BOOL mime
)
7053 IHTMLDocument2
*doc
;
7055 trace("Testing HTMLDocument (%s, %s)...\n", (do_load
? "load" : "no load"),
7056 (report_mime
? "mime" : "no mime"));
7058 init_test(do_load
? LD_DOLOAD
: LD_NO
);
7061 doc
= create_document();
7062 doc_unk
= (IUnknown
*)doc
;
7064 test_QueryInterface(doc
);
7066 test_IsDirty(doc
, S_FALSE
);
7067 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7068 test_external(doc
, FALSE
);
7069 test_ViewAdviseSink(doc
);
7070 test_ConnectionPointContainer(doc
);
7071 test_GetCurMoniker((IUnknown
*)doc
, NULL
, NULL
);
7072 test_Persist(doc
, &Moniker
);
7074 test_OnAmbientPropertyChange2(doc
);
7076 test_Activate(doc
, CLIENTSITE_EXPECTPATH
);
7079 set_custom_uihandler(doc
, &CustomDocHostUIHandler
);
7080 test_download(DWL_CSS
|DWL_TRYCSS
);
7081 test_GetCurMoniker((IUnknown
*)doc
, &Moniker
, NULL
);
7082 test_elem_from_point(doc
);
7085 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7086 test_OleCommandTarget_fail(doc
);
7087 test_OleCommandTarget(doc
);
7088 test_OnAmbientPropertyChange(doc
);
7089 test_Window(doc
, TRUE
);
7090 test_external(doc
, TRUE
);
7091 test_target_container(doc
);
7093 test_UIDeactivate();
7094 test_OleCommandTarget(doc
);
7095 test_Window(doc
, TRUE
);
7096 test_InPlaceDeactivate(doc
, TRUE
);
7098 /* Calling test_OleCommandTarget here causes Segmentation Fault with native
7099 * MSHTML. It doesn't with Wine. */
7101 test_Window(doc
, FALSE
);
7103 test_InPlaceDeactivate(doc
, FALSE
);
7105 test_Close(doc
, FALSE
);
7107 /* Activate HTMLDocument again */
7108 test_Activate(doc
, CLIENTSITE_SETNULL
);
7109 test_Window(doc
, TRUE
);
7110 test_OleCommandTarget(doc
);
7111 test_UIDeactivate();
7112 test_InPlaceDeactivate(doc
, TRUE
);
7113 test_Close(doc
, FALSE
);
7115 /* Activate HTMLDocument again, this time without UIActivate */
7116 call_UIActivate
= CallUIActivate_None
;
7117 test_Activate(doc
, CLIENTSITE_SETNULL
);
7118 test_Window(doc
, TRUE
);
7120 test_external(doc
, TRUE
);
7121 set_custom_uihandler(doc
, NULL
);
7122 test_external(doc
, FALSE
);
7124 test_UIDeactivate();
7125 test_InPlaceDeactivate(doc
, TRUE
);
7128 test_Close(doc
, TRUE
);
7129 test_OnAmbientPropertyChange2(doc
);
7130 test_GetCurMoniker((IUnknown
*)doc
, do_load
? &Moniker
: NULL
, NULL
);
7133 /* Activate HTMLDocument again, calling UIActivate after showing the window */
7134 call_UIActivate
= CallUIActivate_AfterShow
;
7135 test_Activate(doc
, 0);
7136 test_Window(doc
, TRUE
);
7137 test_OleCommandTarget(doc
);
7138 test_UIDeactivate();
7139 test_InPlaceDeactivate(doc
, TRUE
);
7140 test_Close(doc
, FALSE
);
7141 call_UIActivate
= CallUIActivate_None
;
7145 IOleDocumentView_Release(view
);
7148 ok(IsWindow(doc_hwnd
), "hwnd is destroyed\n");
7149 release_document(doc
);
7150 ok(!IsWindow(doc_hwnd
), "hwnd is not destroyed\n");
7153 static void test_HTMLDocument_hlink(DWORD status
)
7155 IHTMLDocument2
*doc
;
7157 trace("Testing HTMLDocument (hlink)...\n");
7159 init_test(LD_DOLOAD
);
7162 doc
= create_document();
7163 doc_unk
= (IUnknown
*)doc
;
7165 set_custom_uihandler(doc
, &CustomDocHostUIHandler
);
7166 test_ViewAdviseSink(doc
);
7167 test_ConnectionPointContainer(doc
);
7168 test_GetCurMoniker((IUnknown
*)doc
, NULL
, NULL
);
7169 test_Persist(doc
, &Moniker
);
7172 status_code
= status
;
7173 test_download(DWL_CSS
|DWL_TRYCSS
);
7174 status_code
= HTTP_STATUS_OK
;
7176 test_IsDirty(doc
, S_FALSE
);
7177 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7179 test_exec_onunload(doc
);
7180 test_Window(doc
, TRUE
);
7181 test_InPlaceDeactivate(doc
, TRUE
);
7182 test_Close(doc
, FALSE
);
7183 test_IsDirty(doc
, S_FALSE
);
7184 test_GetCurMoniker((IUnknown
*)doc
, &Moniker
, NULL
);
7186 test_GetCurMoniker((IUnknown
*)doc
, &Moniker
, NULL
);
7189 IOleDocumentView_Release(view
);
7192 release_document(doc
);
7195 static void test_cookies(IHTMLDocument2
*doc
)
7203 hres
= IHTMLDocument2_get_cookie(doc
, &str
);
7204 ok(hres
== S_OK
, "get_cookie failed: %08x\n", hres
);
7206 size
= sizeof(buf
)/sizeof(WCHAR
);
7207 b
= InternetGetCookieW(http_urlW
, NULL
, buf
, &size
);
7208 ok(b
, "InternetGetCookieW failed: %08x\n", GetLastError());
7209 ok(!lstrcmpW(buf
, str
), "cookie = %s, expected %s\n", wine_dbgstr_w(str
), wine_dbgstr_w(buf
));
7213 str
= a2bstr("test=testval");
7214 hres
= IHTMLDocument2_put_cookie(doc
, str
);
7215 ok(hres
== S_OK
, "put_cookie failed: %08x\n", hres
);
7218 hres
= IHTMLDocument2_get_cookie(doc
, &str2
);
7219 ok(hres
== S_OK
, "get_cookie failed: %08x\n", hres
);
7220 ok(str2
!= NULL
, "cookie = NULL\n");
7221 size
= sizeof(buf
)/sizeof(WCHAR
);
7222 b
= InternetGetCookieW(http_urlW
, NULL
, buf
, &size
);
7223 ok(b
, "InternetGetCookieW failed: %08x\n", GetLastError());
7224 ok(!lstrcmpW(buf
, str2
), "cookie = %s, expected %s\n", wine_dbgstr_w(str2
), wine_dbgstr_w(buf
));
7225 ok(strstrW(str2
, str
) != NULL
, "could not find %s in %s\n", wine_dbgstr_w(str
), wine_dbgstr_w(str2
));
7227 SysFreeString(str2
);
7229 str
= a2bstr("test=testval2");
7230 hres
= IHTMLDocument2_put_cookie(doc
, str
);
7231 ok(hres
== S_OK
, "put_cookie failed: %08x\n", hres
);
7234 hres
= IHTMLDocument2_get_cookie(doc
, &str2
);
7235 ok(hres
== S_OK
, "get_cookie failed: %08x\n", hres
);
7236 ok(str2
!= NULL
, "cookie = NULL\n");
7237 size
= sizeof(buf
)/sizeof(WCHAR
);
7238 b
= InternetGetCookieW(http_urlW
, NULL
, buf
, &size
);
7239 ok(b
, "InternetGetCookieW failed: %08x\n", GetLastError());
7240 ok(!lstrcmpW(buf
, str2
), "cookie = %s, expected %s\n", wine_dbgstr_w(str2
), wine_dbgstr_w(buf
));
7241 ok(strstrW(str2
, str
) != NULL
, "could not find %s in %s\n", wine_dbgstr_w(str
), wine_dbgstr_w(str2
));
7243 SysFreeString(str2
);
7246 static void test_HTMLDocument_http(BOOL with_wbapp
)
7249 IHTMLDocument2
*doc
;
7253 trace("Testing HTMLDocument (http%s)...\n", with_wbapp
? " with IWebBrowserApp" : "");
7255 support_wbapp
= with_wbapp
;
7257 if(!winetest_interactive
&& is_ie_hardened()) {
7258 win_skip("IE running in Enhanced Security Configuration\n");
7262 init_test(LD_DOLOAD
);
7265 doc
= create_document();
7266 doc_unk
= (IUnknown
*)doc
;
7268 hres
= CreateURLMoniker(NULL
, http_urlW
, &http_mon
);
7269 ok(hres
== S_OK
, "CreateURLMoniker failed: %08x\n", hres
);
7271 test_ViewAdviseSink(doc
);
7272 test_ConnectionPointContainer(doc
);
7273 test_GetCurMoniker((IUnknown
*)doc
, NULL
, NULL
);
7274 test_Persist(doc
, http_mon
);
7276 test_download(DWL_HTTP
);
7278 test_IsDirty(doc
, S_FALSE
);
7279 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7280 test_GetCurMoniker((IUnknown
*)doc
, http_mon
, NULL
);
7281 test_travellog(doc
);
7282 test_binding_ui((IUnknown
*)doc
);
7284 nav_url
= nav_serv_url
= "http://www.winehq.org/"; /* for valid prev nav_url */
7286 test_put_href(doc
, FALSE
, "#test", "http://www.winehq.org/#test", FALSE
, TRUE
, 0);
7287 test_travellog(doc
);
7290 test_put_href(doc
, FALSE
, NULL
, "javascript:external%20&&undefined", TRUE
, FALSE
, 0);
7291 test_put_href(doc
, FALSE
, NULL
, "about:blank", FALSE
, FALSE
, support_wbapp
? DWL_EXPECT_HISTUPDATE
: 0);
7292 test_put_href(doc
, TRUE
, NULL
, "about:replace", FALSE
, FALSE
, 0);
7294 test_load_history(doc
);
7295 test_put_href(doc
, FALSE
, NULL
, "about:blank", FALSE
, FALSE
, support_wbapp
? DWL_EXPECT_HISTUPDATE
: 0);
7298 prev_url
= nav_serv_url
;
7299 test_open_window(doc
, TRUE
);
7300 if(!support_wbapp
) /* FIXME */
7301 test_open_window(doc
, FALSE
);
7303 test_window_close(doc
);
7305 test_InPlaceDeactivate(doc
, TRUE
);
7306 test_Close(doc
, FALSE
);
7307 test_IsDirty(doc
, S_FALSE
);
7308 test_GetCurMoniker((IUnknown
*)doc
, NULL
, prev_url
);
7311 IOleDocumentView_Release(view
);
7314 release_document(doc
);
7316 ref
= IMoniker_Release(http_mon
);
7317 ok(!ref
, "ref=%d, expected 0\n", ref
);
7320 static void test_QueryService(IHTMLDocument2
*doc
, BOOL success
)
7322 IHTMLWindow2
*window
, *sp_window
;
7323 IServiceProvider
*sp
;
7327 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IServiceProvider
, (void**)&sp
);
7328 ok(hres
== S_OK
, "QueryService returned %08x\n", hres
);
7330 hres
= IServiceProvider_QueryService(sp
, &IID_IHlinkFrame
, &IID_IHlinkFrame
, (void**)&hf
);
7332 ok(hres
== E_NOINTERFACE
, "QueryService returned %08x, expected E_NOINTERFACE\n", hres
);
7333 IServiceProvider_Release(sp
);
7337 ok(hres
== S_OK
, "QueryService(IID_IHlinkFrame) failed: %08x\n", hres
);
7338 ok(hf
== &HlinkFrame
, "hf != HlinkFrame\n");
7339 IHlinkFrame_Release(hf
);
7341 IServiceProvider_Release(sp
);
7343 hres
= IHTMLDocument2_get_parentWindow(doc
, &window
);
7344 ok(hres
== S_OK
, "get_parentWindow failed: %08x\n", hres
);
7346 hres
= IHTMLWindow2_QueryInterface(window
, &IID_IServiceProvider
, (void**)&sp
);
7347 ok(hres
== S_OK
, "Could not get IServiceProvider iface: %08x\n", hres
);
7349 hres
= IServiceProvider_QueryService(sp
, &IID_IHTMLWindow2
, &IID_IHTMLWindow2
, (void**)&sp_window
);
7350 ok(hres
== S_OK
, "QueryService(IID_IHTMLWindow2) failed: %08x\n", hres
);
7351 /* FIXME: test returned window */
7352 IHTMLWindow2_Release(sp_window
);
7354 hres
= IServiceProvider_QueryService(sp
, &IID_IHlinkFrame
, &IID_IHlinkFrame
, (void**)&hf
);
7355 ok(hres
== S_OK
, "QueryService(IID_IHlinkFrame) failed: %08x\n", hres
);
7356 ok(hf
== &HlinkFrame
, "hf != HlinkFrame\n");
7357 IHlinkFrame_Release(hf
);
7359 IServiceProvider_Release(sp
);
7360 IHTMLWindow2_Release(window
);
7363 static void test_HTMLDocument_StreamLoad(void)
7365 IHTMLDocument2
*doc
;
7370 trace("Testing HTMLDocument (IPersistStreamInit)...\n");
7372 init_test(LD_DOLOAD
);
7373 load_from_stream
= TRUE
;
7375 doc
= create_document();
7376 doc_unk
= (IUnknown
*)doc
;
7378 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
7379 ok(hres
== S_OK
, "Could not get IOleObject: %08x\n", hres
);
7381 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, &conn
);
7382 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
7384 test_readyState((IUnknown
*)doc
);
7385 test_IsDirty(doc
, S_FALSE
);
7386 test_ViewAdviseSink(doc
);
7387 test_ConnectionPointContainer(doc
);
7388 test_QueryService(doc
, FALSE
);
7389 test_ClientSite(oleobj
, CLIENTSITE_EXPECTPATH
);
7390 test_QueryService(doc
, TRUE
);
7391 test_DoVerb(oleobj
);
7392 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7394 test_GetCurMoniker((IUnknown
*)doc
, NULL
, NULL
);
7395 test_StreamLoad(doc
);
7396 test_download(DWL_VERBDONE
|DWL_TRYCSS
);
7397 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7399 test_UIDeactivate();
7400 test_InPlaceDeactivate(doc
, TRUE
);
7401 SET_EXPECT(Advise_Close
);
7402 test_Close(doc
, TRUE
);
7403 CHECK_CALLED(Advise_Close
);
7404 test_external(doc
, FALSE
);
7405 test_IsDirty(doc
, S_FALSE
);
7407 set_custom_uihandler(doc
, &CustomDocHostUIHandler
);
7408 test_ClientSite(oleobj
, CLIENTSITE_SETNULL
);
7409 test_external(doc
, TRUE
);
7410 test_ClientSite(oleobj
, CLIENTSITE_SETNULL
|CLIENTSITE_DONTSET
);
7411 test_external(doc
, TRUE
);
7412 set_custom_uihandler(doc
, NULL
);
7413 test_ClientSite(oleobj
, CLIENTSITE_SETNULL
|CLIENTSITE_DONTSET
);
7415 IOleObject_Release(oleobj
);
7417 IOleDocumentView_Release(view
);
7421 release_document(doc
);
7424 static void test_HTMLDocument_StreamInitNew(void)
7426 IHTMLDocument2
*doc
;
7431 trace("Testing HTMLDocument (IPersistStreamInit::InitNew)...\n");
7433 init_test(LD_DOLOAD
);
7434 load_from_stream
= TRUE
;
7436 doc
= create_document();
7437 doc_unk
= (IUnknown
*)doc
;
7439 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
7440 ok(hres
== S_OK
, "Could not get IOleObject: %08x\n", hres
);
7442 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, &conn
);
7443 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
7445 test_readyState((IUnknown
*)doc
);
7446 test_IsDirty(doc
, S_FALSE
);
7447 test_ViewAdviseSink(doc
);
7448 test_ConnectionPointContainer(doc
);
7449 test_ClientSite(oleobj
, CLIENTSITE_EXPECTPATH
);
7450 test_DoVerb(oleobj
);
7451 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7453 IOleObject_Release(oleobj
);
7455 test_GetCurMoniker((IUnknown
*)doc
, NULL
, NULL
);
7456 test_StreamInitNew(doc
);
7458 SET_EXPECT(Invoke_OnReadyStateChange_Interactive
);
7459 test_download(DWL_VERBDONE
|DWL_TRYCSS
|DWL_EMPTY
);
7460 todo_wine
CHECK_NOT_CALLED(Invoke_OnReadyStateChange_Interactive
);
7462 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7464 test_UIDeactivate();
7465 test_InPlaceDeactivate(doc
, TRUE
);
7466 SET_EXPECT(Advise_Close
);
7467 test_Close(doc
, FALSE
);
7468 CHECK_CALLED(Advise_Close
);
7469 test_IsDirty(doc
, S_FALSE
);
7472 IOleDocumentView_Release(view
);
7476 release_document(doc
);
7479 static void test_edit_uiactivate(IOleObject
*oleobj
)
7481 IOleDocumentView
*docview
;
7484 hres
= IOleObject_QueryInterface(oleobj
, &IID_IOleDocumentView
, (void **)&docview
);
7485 ok(hres
== S_OK
, "IOleObject_QueryInterface failed with error 0x%08x\n", hres
);
7487 SET_EXPECT(OnFocus_TRUE
);
7488 SET_EXPECT(SetActiveObject
);
7490 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
7491 SET_EXPECT(InPlaceFrame_SetBorderSpace
);
7492 expect_status_text
= NULL
;
7494 hres
= IOleDocumentView_UIActivate(docview
, TRUE
);
7495 ok(hres
== S_OK
, "IOleDocumentView_UIActivate failed with error 0x%08x\n", hres
);
7497 CHECK_CALLED(OnFocus_TRUE
);
7498 CHECK_CALLED(SetActiveObject
);
7499 CHECK_CALLED(ShowUI
);
7500 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
7501 CHECK_CALLED(InPlaceFrame_SetBorderSpace
);
7503 IOleDocumentView_Release(docview
);
7506 static void test_editing_mode(BOOL do_load
, BOOL use_design_mode
)
7508 IHTMLDocument2
*doc
;
7514 trace("Testing HTMLDocument (edit%s%s)...\n", do_load
? " load" : "", use_design_mode
? " using designMode" : "");
7516 init_test(do_load
? LD_DOLOAD
: LD_NO
);
7517 call_UIActivate
= CallUIActivate_AfterShow
;
7519 doc
= create_document();
7520 unk
= doc_unk
= (IUnknown
*)doc
;
7522 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
7523 ok(hres
== S_OK
, "Could not get IOleObject: %08x\n", hres
);
7525 hres
= IOleObject_Advise(oleobj
, (IAdviseSink
*)&AdviseSink
, &conn
);
7526 ok(hres
== S_OK
, "Advise failed: %08x\n", hres
);
7528 test_readyState((IUnknown
*)doc
);
7529 test_ViewAdviseSink(doc
);
7530 test_ConnectionPointContainer(doc
);
7531 test_ClientSite(oleobj
, CLIENTSITE_EXPECTPATH
);
7532 test_DoVerb(oleobj
);
7533 test_edit_uiactivate(oleobj
);
7535 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7537 test_Persist(doc
, &Moniker
);
7538 stream_read
= protocol_read
= 0;
7540 if(!use_design_mode
) {
7541 test_exec_editmode(unk
, do_load
);
7542 test_UIDeactivate();
7543 call_UIActivate
= CallUIActivate_None
;
7547 SET_EXPECT(Exec_SETTITLE
);
7548 test_download(DWL_VERBDONE
|DWL_CSS
|DWL_TRYCSS
);
7549 CLEAR_CALLED(Exec_SETTITLE
);
7552 load_state
= LD_DOLOAD
;
7553 readystate_set_loading
= TRUE
;
7555 SET_EXPECT(OnChanged_1005
);
7556 SET_EXPECT(ActiveElementChanged
);
7557 SET_EXPECT(GetClassID
);
7558 SET_EXPECT(SetStatusText
);
7559 SET_EXPECT(Exec_ShellDocView_37
);
7560 SET_EXPECT(GetHostInfo
);
7561 SET_EXPECT(GetDisplayName
);
7562 SET_EXPECT(Invoke_AMBIENT_SILENT
);
7563 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
7564 SET_EXPECT(OnChanged_READYSTATE
);
7565 SET_EXPECT(Invoke_OnReadyStateChange_Loading
);
7566 SET_EXPECT(IsSystemMoniker
);
7567 SET_EXPECT(Exec_ShellDocView_84
);
7568 SET_EXPECT(BindToStorage
);
7569 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
7572 SET_EXPECT(InPlaceFrame_SetBorderSpace
);
7573 SET_EXPECT(OnChanged_1014
);
7576 hres
= IHTMLDocument2_put_designMode(doc
, on
);
7578 ok(hres
== S_OK
, "put_designMode failed: %08x\n", hres
);
7580 todo_wine
CHECK_CALLED(OnChanged_1005
);
7581 todo_wine
CHECK_CALLED(ActiveElementChanged
);
7582 CHECK_CALLED(GetClassID
);
7583 CHECK_CALLED(SetStatusText
);
7584 CHECK_CALLED(Exec_ShellDocView_37
);
7585 CHECK_CALLED(GetHostInfo
);
7586 CHECK_CALLED(GetDisplayName
);
7587 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
7588 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
7589 CHECK_CALLED(OnChanged_READYSTATE
);
7590 CHECK_CALLED(Invoke_OnReadyStateChange_Loading
);
7591 CLEAR_CALLED(IsSystemMoniker
); /* IE7 */
7592 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
7593 CHECK_CALLED(BindToStorage
);
7594 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
7595 CHECK_CALLED(HideUI
);
7596 CHECK_CALLED(ShowUI
);
7597 CHECK_CALLED(InPlaceFrame_SetBorderSpace
);
7598 CHECK_CALLED(OnChanged_1014
);
7600 test_timer(EXPECT_UPDATEUI
|EXPECT_SETTITLE
);
7603 IOleObject_Release(oleobj
);
7605 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
);
7606 test_download(DWL_VERBDONE
| DWL_EX_GETHOSTINFO
| (do_load
? DWL_CSS
|DWL_TRYCSS
: 0));
7608 SET_EXPECT(SetStatusText
); /* ignore race in native mshtml */
7609 test_timer(EXPECT_UPDATEUI
);
7610 CLEAR_CALLED(SetStatusText
);
7612 test_MSHTML_QueryStatus(doc
, OLECMDF_SUPPORTED
|OLECMDF_ENABLED
);
7615 test_exec_fontname(unk
, wszArial
, wszTimesNewRoman
);
7616 test_timer(EXPECT_UPDATEUI
);
7617 test_exec_fontname(unk
, NULL
, wszArial
);
7619 test_exec_noargs(unk
, IDM_JUSTIFYRIGHT
);
7620 test_timer(EXPECT_UPDATEUI
);
7621 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYRIGHT
,
7622 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
|OLECMDF_LATCHED
);
7624 test_exec_noargs(unk
, IDM_JUSTIFYCENTER
);
7625 test_timer(EXPECT_UPDATEUI
);
7626 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYRIGHT
,
7627 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
);
7628 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_JUSTIFYCENTER
,
7629 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
|OLECMDF_LATCHED
);
7631 test_exec_noargs(unk
, IDM_HORIZONTALLINE
);
7632 test_timer(EXPECT_UPDATEUI
);
7633 test_QueryStatus(unk
, &CGID_MSHTML
, IDM_HORIZONTALLINE
,
7634 OLECMDF_SUPPORTED
|OLECMDF_ENABLED
);
7637 test_UIDeactivate();
7638 test_InPlaceDeactivate(doc
, TRUE
);
7639 SET_EXPECT(Advise_Close
);
7640 test_Close(doc
, FALSE
);
7641 CHECK_CALLED(Advise_Close
);
7644 IOleDocumentView_Release(view
);
7648 release_document(doc
);
7651 static void test_UIActivate(BOOL do_load
, BOOL use_ipsex
, BOOL use_ipsw
)
7653 IHTMLDocument2
*doc
;
7655 IOleInPlaceSite
*inplacesite
;
7658 trace("Running OleDocumentView_UIActivate tests (%d %d %d)\n", do_load
, use_ipsex
, use_ipsw
);
7660 init_test(do_load
? LD_DOLOAD
: LD_NO
);
7662 doc
= create_document();
7663 doc_unk
= (IUnknown
*)doc
;
7668 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleObject
, (void**)&oleobj
);
7669 ok(hres
== S_OK
, "QueryInterface(IID_IOleObject) failed: %08x\n", hres
);
7671 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IOleDocumentView
, (void**)&view
);
7672 ok(hres
== S_OK
, "QueryInterface(IID_IOleDocumentView) failed: %08x\n", hres
);
7674 SET_EXPECT(Invoke_AMBIENT_USERMODE
);
7675 SET_EXPECT(GetHostInfo
);
7676 SET_EXPECT(Invoke_AMBIENT_DLCONTROL
);
7677 SET_EXPECT(Invoke_AMBIENT_SILENT
);
7678 SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
7679 SET_EXPECT(Invoke_AMBIENT_USERAGENT
);
7680 SET_EXPECT(Invoke_AMBIENT_PALETTE
);
7681 SET_EXPECT(GetOptionKeyPath
);
7682 SET_EXPECT(GetOverrideKeyPath
);
7683 SET_EXPECT(GetWindow
);
7684 SET_EXPECT(Exec_DOCCANNAVIGATE
);
7685 SET_EXPECT(QueryStatus_SETPROGRESSTEXT
);
7686 SET_EXPECT(Exec_SETPROGRESSMAX
);
7687 SET_EXPECT(Exec_SETPROGRESSPOS
);
7688 SET_EXPECT(GetTravelLog
);
7689 SET_EXPECT(Exec_ShellDocView_84
);
7691 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
7692 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
7693 set_clientsite
= TRUE
;
7695 CHECK_CALLED(Invoke_AMBIENT_USERMODE
);
7696 CHECK_CALLED(GetHostInfo
);
7697 CHECK_CALLED(Invoke_AMBIENT_DLCONTROL
);
7698 CHECK_CALLED(Invoke_AMBIENT_SILENT
);
7699 CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED
);
7700 CHECK_CALLED(Invoke_AMBIENT_USERAGENT
);
7701 CLEAR_CALLED(Invoke_AMBIENT_PALETTE
); /* not called on IE9 */
7702 CLEAR_CALLED(GetOptionKeyPath
); /* not called on some IE9 */
7703 CHECK_CALLED(GetOverrideKeyPath
);
7704 CHECK_CALLED(GetWindow
);
7705 CHECK_CALLED(Exec_DOCCANNAVIGATE
);
7706 CHECK_CALLED(QueryStatus_SETPROGRESSTEXT
);
7707 CHECK_CALLED(Exec_SETPROGRESSMAX
);
7708 CHECK_CALLED(Exec_SETPROGRESSPOS
);
7709 CHECK_CALLED(GetTravelLog
);
7710 CHECK_CALLED_BROKEN(Exec_ShellDocView_84
);
7712 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
7713 ok(hres
== S_OK
, "GetInPlaceSite failed: %08x\n", hres
);
7714 ok(inplacesite
== NULL
, "inplacesite = %p, expected NULL\n", inplacesite
);
7716 SET_EXPECT(GetContainer
);
7717 SET_EXPECT(LockContainer
);
7718 SET_EXPECT(CanInPlaceActivate
);
7719 SET_EXPECT(GetWindowContext
);
7720 SET_EXPECT(GetWindow
);
7722 SET_EXPECT(OnInPlaceActivateEx
);
7723 SET_EXPECT(RequestUIActivate
);
7726 SET_EXPECT(OnInPlaceActivate
);
7727 SET_EXPECT(OnUIActivate
);
7728 SET_EXPECT(SetStatusText
);
7729 SET_EXPECT(Exec_SETPROGRESSMAX
);
7730 SET_EXPECT(Exec_SETPROGRESSPOS
);
7732 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
7733 SET_EXPECT(InPlaceFrame_SetBorderSpace
);
7734 SET_EXPECT(OnFocus_TRUE
);
7735 SET_EXPECT(SetActiveObject
);
7736 expect_LockContainer_fLock
= TRUE
;
7738 hres
= IOleDocumentView_UIActivate(view
, TRUE
);
7739 ok(hres
== S_OK
, "UIActivate failed: %08x\n", hres
);
7741 CHECK_CALLED(GetContainer
);
7742 CHECK_CALLED(LockContainer
);
7743 CHECK_CALLED(CanInPlaceActivate
);
7744 CHECK_CALLED(GetWindowContext
);
7745 CHECK_CALLED(GetWindow
);
7747 CHECK_CALLED(OnInPlaceActivateEx
);
7748 SET_EXPECT(RequestUIActivate
);
7751 CHECK_CALLED(OnInPlaceActivate
);
7752 CHECK_CALLED(OnUIActivate
);
7753 CHECK_CALLED(SetStatusText
);
7754 CHECK_CALLED(Exec_SETPROGRESSMAX
);
7755 CHECK_CALLED(Exec_SETPROGRESSPOS
);
7756 CHECK_CALLED(ShowUI
);
7757 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
7758 CHECK_CALLED(InPlaceFrame_SetBorderSpace
);
7759 CHECK_CALLED(OnFocus_TRUE
);
7760 CHECK_CALLED(SetActiveObject
);
7761 container_locked
= TRUE
;
7763 SET_EXPECT(SetActiveObject_null
);
7764 SET_EXPECT(InPlaceUIWindow_SetActiveObject
);
7766 SET_EXPECT(OnUIDeactivate
);
7768 hres
= IOleDocumentView_UIActivate(view
, FALSE
);
7769 ok(hres
== S_OK
, "UIActivate failed: %08x\n", hres
);
7771 CHECK_CALLED(SetActiveObject_null
);
7772 CHECK_CALLED(InPlaceUIWindow_SetActiveObject
);
7773 CHECK_CALLED(HideUI
);
7774 CHECK_CALLED(OnUIDeactivate
);
7776 hres
= IOleDocumentView_GetInPlaceSite(view
, &inplacesite
);
7777 ok(hres
== S_OK
, "GetInPlaceSite failed: %08x\n", hres
);
7778 ok(inplacesite
!= NULL
, "inplacesite = NULL\n");
7779 IOleInPlaceSite_Release(inplacesite
);
7781 SET_EXPECT(SetStatusText
);
7782 SET_EXPECT(OnFocus_FALSE
);
7784 SET_EXPECT(OnInPlaceDeactivateEx
);
7786 SET_EXPECT(OnInPlaceDeactivate
);
7790 CLEAR_CALLED(SetStatusText
); /* Called by IE9 */
7791 CHECK_CALLED(OnFocus_FALSE
);
7793 CHECK_CALLED(OnInPlaceDeactivateEx
);
7795 CHECK_CALLED(OnInPlaceDeactivate
);
7797 test_Close(doc
, TRUE
);
7799 IOleObject_Release(oleobj
);
7800 IOleDocumentView_Release(view
);
7803 release_document(doc
);
7806 static void register_protocol(void)
7808 IInternetSession
*session
;
7811 static const WCHAR wsz_winetest
[] = {'w','i','n','e','t','e','s','t',0};
7813 hres
= CoInternetGetSession(0, &session
, 0);
7814 ok(hres
== S_OK
, "CoInternetGetSession failed: %08x\n", hres
);
7816 hres
= IInternetSession_RegisterNameSpace(session
, &ClassFactory
, &IID_NULL
,
7817 wsz_winetest
, 0, NULL
, 0);
7818 ok(hres
== S_OK
, "RegisterNameSpace failed: %08x\n", hres
);
7820 IInternetSession_Release(session
);
7823 static void test_HTMLDoc_ISupportErrorInfo(void)
7825 IHTMLDocument2
*doc
;
7827 ISupportErrorInfo
*sinfo
;
7829 doc
= create_document();
7831 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_ISupportErrorInfo
, (void**)&sinfo
);
7832 ok(hres
== S_OK
, "got %x\n", hres
);
7833 ok(sinfo
!= NULL
, "got %p\n", sinfo
);
7836 hres
= ISupportErrorInfo_InterfaceSupportsErrorInfo(sinfo
, &IID_IErrorInfo
);
7837 ok(hres
== S_FALSE
, "Expected S_OK, got %x\n", hres
);
7838 ISupportErrorInfo_Release(sinfo
);
7841 release_document(doc
);
7844 static BOOL
check_ie(void)
7846 IHTMLDocument2
*doc
;
7847 IHTMLDocument5
*doc5
;
7850 doc
= create_document();
7854 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IHTMLDocument5
, (void**)&doc5
);
7856 IHTMLDocument5_Release(doc5
);
7858 release_document(doc
);
7859 return SUCCEEDED(hres
);
7862 static void test_ServiceProvider(void)
7864 IHTMLDocument3
*doc3
, *doc3_2
;
7865 IServiceProvider
*provider
;
7866 IHTMLDocument2
*doc
, *doc2
;
7870 doc
= create_document();
7874 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IServiceProvider
, (void**)&provider
);
7875 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
7877 hres
= IServiceProvider_QueryService(provider
, &SID_SContainerDispatch
, &IID_IHTMLDocument2
, (void**)&doc2
);
7878 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
7879 ok(iface_cmp((IUnknown
*)doc2
, (IUnknown
*)doc
), "got wrong pointer\n");
7880 IHTMLDocument2_Release(doc2
);
7882 hres
= IServiceProvider_QueryService(provider
, &SID_SContainerDispatch
, &IID_IHTMLDocument3
, (void**)&doc3
);
7883 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
7884 ok(iface_cmp((IUnknown
*)doc3
, (IUnknown
*)doc
), "got wrong pointer\n");
7886 hres
= IHTMLDocument2_QueryInterface(doc
, &IID_IHTMLDocument3
, (void**)&doc3_2
);
7887 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
7888 ok(iface_cmp((IUnknown
*)doc3_2
, (IUnknown
*)doc
), "got wrong pointer\n");
7889 ok(iface_cmp((IUnknown
*)doc3_2
, (IUnknown
*)doc3
), "got wrong pointer\n");
7890 IHTMLDocument3_Release(doc3
);
7891 IHTMLDocument3_Release(doc3_2
);
7893 hres
= IServiceProvider_QueryService(provider
, &SID_SContainerDispatch
, &IID_IUnknown
, (void**)&unk
);
7894 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
7895 ok(iface_cmp((IUnknown
*)doc
, unk
), "got wrong pointer\n");
7897 IUnknown_Release(unk
);
7898 IServiceProvider_Release(provider
);
7899 release_document(doc
);
7908 win_skip("Too old IE\n");
7912 container_hwnd
= create_container_window();
7913 register_protocol();
7915 asynchronous_binding
= TRUE
;
7916 test_HTMLDocument_hlink(HTTP_STATUS_NOT_FOUND
);
7918 asynchronous_binding
= FALSE
;
7919 test_HTMLDocument_hlink(HTTP_STATUS_OK
);
7920 test_HTMLDocument(FALSE
, TRUE
);
7921 test_HTMLDocument(TRUE
, FALSE
);
7922 test_HTMLDocument(TRUE
, TRUE
);
7923 test_HTMLDocument_StreamLoad();
7924 test_HTMLDocument_StreamInitNew();
7925 test_editing_mode(FALSE
, FALSE
);
7926 test_editing_mode(TRUE
, FALSE
);
7927 test_editing_mode(TRUE
, TRUE
);
7928 test_HTMLDocument_http(FALSE
);
7929 test_HTMLDocument_http(TRUE
);
7930 test_UIActivate(FALSE
, FALSE
, FALSE
);
7931 test_UIActivate(FALSE
, TRUE
, FALSE
);
7932 test_UIActivate(FALSE
, TRUE
, TRUE
);
7933 test_UIActivate(TRUE
, FALSE
, FALSE
);
7934 test_UIActivate(TRUE
, TRUE
, FALSE
);
7935 test_UIActivate(TRUE
, TRUE
, TRUE
);
7936 test_HTMLDoc_ISupportErrorInfo();
7937 test_ServiceProvider();
7939 DestroyWindow(container_hwnd
);