diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 1cb18c152e3..d49a6ffc364 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -152,6 +152,7 @@ DEFINE_EXPECT(Frame_EnableModeless_FALSE); DEFINE_EXPECT(Frame_GetWindow); DEFINE_EXPECT(TranslateUrl); DEFINE_EXPECT(Advise_Close); +DEFINE_EXPECT(OnViewChange); static IUnknown *doc_unk; static IMoniker *doc_mon; @@ -2678,50 +2679,60 @@ static const IServiceProviderVtbl ServiceProviderVtbl = { static IServiceProvider ServiceProvider = { &ServiceProviderVtbl }; -static HRESULT WINAPI AdviseSink_QueryInterface(IAdviseSink *iface, +static HRESULT WINAPI AdviseSink_QueryInterface(IAdviseSinkEx *iface, REFIID riid, void **ppv) { return QueryInterface(riid, ppv); } -static ULONG WINAPI AdviseSink_AddRef(IAdviseSink *iface) +static ULONG WINAPI AdviseSink_AddRef(IAdviseSinkEx *iface) { return 2; } -static ULONG WINAPI AdviseSink_Release(IAdviseSink *iface) +static ULONG WINAPI AdviseSink_Release(IAdviseSinkEx *iface) { return 1; } -static void WINAPI AdviseSink_OnDataChange(IAdviseSink *iface, +static void WINAPI AdviseSink_OnDataChange(IAdviseSinkEx *iface, FORMATETC *pFormatetc, STGMEDIUM *pStgmed) { ok(0, "unexpected call\n"); } -static void WINAPI AdviseSink_OnViewChange(IAdviseSink *iface, +static void WINAPI AdviseSink_OnViewChange(IAdviseSinkEx *iface, DWORD dwAspect, LONG lindex) { ok(0, "unexpected call\n"); } -static void WINAPI AdviseSink_OnRename(IAdviseSink *iface, IMoniker *pmk) +static void WINAPI AdviseSink_OnRename(IAdviseSinkEx *iface, IMoniker *pmk) { ok(0, "unexpected call\n"); } -static void WINAPI AdviseSink_OnSave(IAdviseSink *iface) +static void WINAPI AdviseSink_OnSave(IAdviseSinkEx *iface) { ok(0, "unexpected call\n"); } -static void WINAPI AdviseSink_OnClose(IAdviseSink *iface) +static void WINAPI AdviseSink_OnClose(IAdviseSinkEx *iface) +{ + ok(0, "unexpected call\n"); +} + +static void WINAPI AdviseSinkEx_OnViewStatusChange(IAdviseSinkEx *iface, DWORD dwViewStatus) +{ + ok(0, "unexpected call\n"); +} + +static void WINAPI ObjectAdviseSink_OnClose(IAdviseSinkEx *iface) { CHECK_EXPECT(Advise_Close); } -static const IAdviseSinkVtbl AdviseSinkVtbl = { +static const IAdviseSinkExVtbl AdviseSinkVtbl = { AdviseSink_QueryInterface, AdviseSink_AddRef, AdviseSink_Release, @@ -2729,10 +2740,47 @@ static const IAdviseSinkVtbl AdviseSinkVtbl = { AdviseSink_OnViewChange, AdviseSink_OnRename, AdviseSink_OnSave, - AdviseSink_OnClose + ObjectAdviseSink_OnClose, + AdviseSinkEx_OnViewStatusChange }; -static IAdviseSink AdviseSink = { &AdviseSinkVtbl }; +static IAdviseSinkEx AdviseSink = { &AdviseSinkVtbl }; + +static HRESULT WINAPI ViewAdviseSink_QueryInterface(IAdviseSinkEx *iface, + REFIID riid, void **ppv) +{ + if(IsEqualGUID(&IID_IAdviseSinkEx, riid)) { + *ppv = iface; + return S_OK; + } + + ok(0, "unexpected riid %s\n", debugstr_guid(riid)); + *ppv = NULL; + return E_NOINTERFACE; +} + +static void WINAPI ViewAdviseSink_OnViewChange(IAdviseSinkEx *iface, + DWORD dwAspect, LONG lindex) +{ + CHECK_EXPECT2(OnViewChange); + + ok(dwAspect == DVASPECT_CONTENT, "dwAspect = %d\n", dwAspect); + ok(lindex == -1, "lindex = %d\n", lindex); +} + +static const IAdviseSinkExVtbl ViewAdviseSinkVtbl = { + ViewAdviseSink_QueryInterface, + AdviseSink_AddRef, + AdviseSink_Release, + AdviseSink_OnDataChange, + ViewAdviseSink_OnViewChange, + AdviseSink_OnRename, + AdviseSink_OnSave, + AdviseSink_OnClose, + AdviseSinkEx_OnViewStatusChange +}; + +static IAdviseSinkEx ViewAdviseSink = { &ViewAdviseSinkVtbl }; DEFINE_GUID(IID_unk1, 0xD48A6EC6,0x6A4A,0x11CF,0x94,0xA7,0x44,0x45,0x53,0x54,0x00,0x00); /* HTMLWindow2 ? */ DEFINE_GUID(IID_IThumbnailView, 0x7BB0B520,0xB1A7,0x11D2,0xBB,0x23,0x00,0xC0,0x4F,0x79,0xAB,0xCD); @@ -2919,6 +2967,20 @@ static void _test_readyState(unsigned line, IUnknown *unk) IHTMLDocument2_Release(htmldoc); } +static void test_ViewAdviseSink(IHTMLDocument2 *doc) +{ + IViewObject *view; + HRESULT hres; + + hres = IHTMLDocument2_QueryInterface(doc, &IID_IViewObject, (void**)&view); + ok(hres == S_OK, "QueryInterface(IID_IViewObject) failed: %08x\n", hres); + + hres = IViewObject_SetAdvise(view, DVASPECT_CONTENT, ADVF_PRIMEFIRST, (IAdviseSink*)&ViewAdviseSink); + ok(hres == S_OK, "SetAdvise failed: %08x\n", hres); + + IViewObject_Release(view); +} + static void test_ConnectionPoint(IConnectionPointContainer *container, REFIID riid) { IConnectionPointContainer *tmp_container = NULL; @@ -3100,6 +3162,7 @@ static void test_download(DWORD flags) SET_EXPECT(SetStatusText); if(!(flags & DWL_EMPTY)) SET_EXPECT(Exec_SETDOWNLOADSTATE_1); + SET_EXPECT(OnViewChange); SET_EXPECT(GetDropTarget); if(flags & DWL_TRYCSS) SET_EXPECT(Exec_ShellDocView_84); @@ -3148,6 +3211,7 @@ static void test_download(DWORD flags) CHECK_CALLED(SetStatusText); if(!(flags & DWL_EMPTY)) CHECK_CALLED(Exec_SETDOWNLOADSTATE_1); + CHECK_CALLED(OnViewChange); CHECK_CALLED(GetDropTarget); if(flags & DWL_TRYCSS) SET_CALLED(Exec_ShellDocView_84); @@ -3845,14 +3909,14 @@ static void test_Advise(IHTMLDocument2 *doc) ok(hres == E_INVALIDARG || hres == S_OK, "Advise returned: %08x\n", hres); ok(conn == 0 || conn == 1, "conn = %d\n", conn); - hres = IOleObject_Advise(oleobj, &AdviseSink, NULL); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, NULL); ok(hres == E_INVALIDARG, "Advise returned: %08x\n", hres); - hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, &conn); ok(hres == S_OK, "Advise returned: %08x\n", hres); ok(conn == 1, "conn = %d\n", conn); - hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, &conn); ok(hres == S_OK, "Advise returned: %08x\n", hres); ok(conn == 2, "conn = %d\n", conn); @@ -4281,6 +4345,7 @@ static void test_HTMLDocument(BOOL do_load) test_IsDirty(doc, S_FALSE); test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED); test_external(doc, FALSE); + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_GetCurMoniker((IUnknown*)doc, NULL, NULL); test_Persist(doc, &Moniker); @@ -4376,6 +4441,7 @@ static void test_HTMLDocument_hlink(void) return; doc_unk = (IUnknown*)doc; + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_GetCurMoniker((IUnknown*)doc, NULL, NULL); test_Persist(doc, &Moniker); @@ -4476,6 +4542,7 @@ static void test_HTMLDocument_http(void) hres = CreateURLMoniker(NULL, http_urlW, &http_mon); ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_GetCurMoniker((IUnknown*)doc, NULL, NULL); test_Persist(doc, http_mon); @@ -4551,11 +4618,12 @@ static void test_HTMLDocument_StreamLoad(void) hres = IUnknown_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); - hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, &conn); ok(hres == S_OK, "Advise failed: %08x\n", hres); test_readyState((IUnknown*)doc); test_IsDirty(doc, S_FALSE); + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_QueryService(doc, FALSE); test_ClientSite(oleobj, CLIENTSITE_EXPECTPATH); @@ -4608,11 +4676,12 @@ static void test_HTMLDocument_StreamInitNew(void) hres = IUnknown_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); - hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, &conn); ok(hres == S_OK, "Advise failed: %08x\n", hres); test_readyState((IUnknown*)doc); test_IsDirty(doc, S_FALSE); + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_ClientSite(oleobj, CLIENTSITE_EXPECTPATH); test_DoVerb(oleobj); @@ -4691,10 +4760,11 @@ static void test_editing_mode(BOOL do_load) hres = IUnknown_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); - hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + hres = IOleObject_Advise(oleobj, (IAdviseSink*)&AdviseSink, &conn); ok(hres == S_OK, "Advise failed: %08x\n", hres); test_readyState((IUnknown*)doc); + test_ViewAdviseSink(doc); test_ConnectionPointContainer(doc); test_ClientSite(oleobj, CLIENTSITE_EXPECTPATH); test_DoVerb(oleobj);