Piotr Caban : mshtml: Added Advise handling to OleObject_Close.

Alexandre Julliard julliard at winehq.org
Mon Dec 7 10:26:20 CST 2009


Module: wine
Branch: master
Commit: 24601ed1dbcace9bc35e1cec2fdc6795d953c7b6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=24601ed1dbcace9bc35e1cec2fdc6795d953c7b6

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Dec  7 14:54:05 2009 +0100

mshtml: Added Advise handling to OleObject_Close.

---

 dlls/mshtml/oleobj.c        |    3 +++
 dlls/mshtml/tests/htmldoc.c |   21 ++++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c
index 32f5f60..872d766 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 498cedc..aeeef31 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);




More information about the wine-cvs mailing list