Alistair Leslie-Hughes : shdocvw: OnAmbientPropertyChange should refresh all properties with a DISPID_UNKNOWN .

Alexandre Julliard julliard at winehq.org
Tue Feb 3 09:13:35 CST 2009


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

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Tue Feb  3 20:41:16 2009 +1100

shdocvw: OnAmbientPropertyChange should refresh all properties with a DISPID_UNKNOWN.

---

 dlls/shdocvw/oleobject.c        |    5 +++++
 dlls/shdocvw/tests/webbrowser.c |   26 ++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c
index 198ff2a..cd5e605 100644
--- a/dlls/shdocvw/oleobject.c
+++ b/dlls/shdocvw/oleobject.c
@@ -718,6 +718,11 @@ static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DIS
     TRACE("(%p)->(%d)\n", This, dispID);
 
     switch(dispID) {
+    case DISPID_UNKNOWN:
+        /* Unknown means multiple properties changed, so check them all. */
+        on_offlineconnected_change(This);
+        on_silent_change(This);
+        return S_OK;
     case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
         return on_offlineconnected_change(This);
     case DISPID_AMBIENT_SILENT:
diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index 5b04119..27cd353 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -1773,6 +1773,31 @@ static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clients
     ok(b == VARIANT_FALSE, "b=%x\n", b);
 }
 
+static void test_ambient_unknown(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
+{
+    HRESULT hres;
+
+    SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+    SET_EXPECT(Invoke_AMBIENT_SILENT);
+    SET_EXPECT(Invoke_AMBIENT_USERMODE);
+    SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
+    SET_EXPECT(Invoke_AMBIENT_USERAGENT);
+    SET_EXPECT(Invoke_AMBIENT_PALETTE);
+
+    hres = IOleControl_OnAmbientPropertyChange(control, DISPID_UNKNOWN);
+    ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
+
+    if(is_clientsite)
+    {
+        CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+        CHECK_CALLED(Invoke_AMBIENT_SILENT);
+        todo_wine CHECK_CALLED(Invoke_AMBIENT_USERMODE);
+        todo_wine CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
+        todo_wine CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
+        todo_wine CHECK_CALLED(Invoke_AMBIENT_PALETTE);
+    }
+}
+
 static void test_wb_funcs(IUnknown *unk, BOOL is_clientsite)
 {
     IWebBrowser2 *wb;
@@ -1787,6 +1812,7 @@ static void test_wb_funcs(IUnknown *unk, BOOL is_clientsite)
 
     test_Silent(wb, control, is_clientsite);
     test_Offline(wb, control, is_clientsite);
+    test_ambient_unknown(wb, control, is_clientsite);
 
     IWebBrowser_Release(wb);
     IOleControl_Release(control);




More information about the wine-cvs mailing list