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);