From 24601ed1dbcace9bc35e1cec2fdc6795d953c7b6 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Mon, 7 Dec 2009 14:54:05 +0100 Subject: [PATCH] mshtml: Added Advise handling to OleObject_Close. --- dlls/mshtml/oleobj.c | 3 +++ dlls/mshtml/tests/htmldoc.c | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index 32f5f606456..872d766489d 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -250,6 +250,9 @@ static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption) IOleInPlaceObjectWindowless_InPlaceDeactivate(INPLACEWIN(This)); HTMLDocument_LockContainer(This->doc_obj, FALSE); + + if(This->advise_holder) + IOleAdviseHolder_SendOnClose(This->advise_holder); return S_OK; } diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 498cedc542d..aeeef312699 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -150,6 +150,7 @@ DEFINE_EXPECT(Frame_EnableModeless_TRUE); DEFINE_EXPECT(Frame_EnableModeless_FALSE); DEFINE_EXPECT(Frame_GetWindow); DEFINE_EXPECT(TranslateUrl); +DEFINE_EXPECT(Advise_Close); static IUnknown *doc_unk; static IMoniker *doc_mon; @@ -2589,7 +2590,7 @@ static void WINAPI AdviseSink_OnSave(IAdviseSink *iface) static void WINAPI AdviseSink_OnClose(IAdviseSink *iface) { - ok(0, "unexpected call\n"); + CHECK_EXPECT(Advise_Close); } static const IAdviseSinkVtbl AdviseSinkVtbl = { @@ -4395,6 +4396,7 @@ static void test_HTMLDocument_StreamLoad(void) { IOleObject *oleobj; IUnknown *unk; + DWORD conn; HRESULT hres; ULONG ref; @@ -4411,6 +4413,9 @@ static void test_HTMLDocument_StreamLoad(void) hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); + hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + ok(hres == S_OK, "Advise failed: %08x\n", hres); + test_readyState(unk); test_IsDirty(unk, S_FALSE); test_ConnectionPointContainer(unk); @@ -4427,7 +4432,9 @@ static void test_HTMLDocument_StreamLoad(void) test_UIDeactivate(); test_InPlaceDeactivate(unk, TRUE); + SET_EXPECT(Advise_Close); test_Close(unk, FALSE); + CHECK_CALLED(Advise_Close); test_IsDirty(unk, S_FALSE); if(view) { @@ -4444,6 +4451,7 @@ static void test_HTMLDocument_StreamInitNew(void) { IOleObject *oleobj; IUnknown *unk; + DWORD conn; HRESULT hres; ULONG ref; @@ -4460,6 +4468,9 @@ static void test_HTMLDocument_StreamInitNew(void) hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); + hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + ok(hres == S_OK, "Advise failed: %08x\n", hres); + test_readyState(unk); test_IsDirty(unk, S_FALSE); test_ConnectionPointContainer(unk); @@ -4476,7 +4487,9 @@ static void test_HTMLDocument_StreamInitNew(void) test_UIDeactivate(); test_InPlaceDeactivate(unk, TRUE); + SET_EXPECT(Advise_Close); test_Close(unk, FALSE); + CHECK_CALLED(Advise_Close); test_IsDirty(unk, S_FALSE); if(view) { @@ -4520,6 +4533,7 @@ static void test_editing_mode(BOOL do_load) { IUnknown *unk; IOleObject *oleobj; + DWORD conn; HRESULT hres; ULONG ref; @@ -4536,6 +4550,9 @@ static void test_editing_mode(BOOL do_load) hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); ok(hres == S_OK, "Could not get IOleObject: %08x\n", hres); + hres = IOleObject_Advise(oleobj, &AdviseSink, &conn); + ok(hres == S_OK, "Advise failed: %08x\n", hres); + test_readyState(unk); test_ConnectionPointContainer(unk); test_ClientSite(oleobj, CLIENTSITE_EXPECTPATH); @@ -4586,7 +4603,9 @@ static void test_editing_mode(BOOL do_load) test_UIDeactivate(); test_InPlaceDeactivate(unk, TRUE); + SET_EXPECT(Advise_Close); test_Close(unk, FALSE); + CHECK_CALLED(Advise_Close); if(view) { IOleDocumentView_Release(view);