Jacek Caban : mshtml: Fixed tests on IE8 and change Wine behavior to IE8.

Alexandre Julliard julliard at winehq.org
Tue Jun 23 10:02:46 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 22 19:25:58 2009 +0200

mshtml: Fixed tests on IE8 and change Wine behavior to IE8.

---

 dlls/mshtml/dispex.c         |    2 ++
 dlls/mshtml/htmllocation.c   |    2 +-
 dlls/mshtml/mshtml_private.h |    2 ++
 dlls/mshtml/omnavigator.c    |    2 +-
 dlls/mshtml/tests/dom.c      |   36 ++++++++++++++++++++++++++++++------
 5 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 0d0422c..3dd11b1 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -77,6 +77,8 @@ static REFIID tid_ids[] = {
     &DIID_DispHTMLIFrame,
     &DIID_DispHTMLImg,
     &DIID_DispHTMLInputElement,
+    &DIID_DispHTMLLocation,
+    &DIID_DispHTMLNavigator,
     &DIID_DispHTMLOptionElement,
     &DIID_DispHTMLSelectElement,
     &DIID_DispHTMLStyle,
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index c671073..35f042a 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.c
@@ -293,7 +293,7 @@ static const tid_t HTMLLocation_iface_tids[] = {
 };
 static dispex_static_data_t HTMLLocation_dispex = {
     NULL,
-    IHTMLLocation_tid,
+    DispHTMLLocation_tid,
     NULL,
     HTMLLocation_iface_tids
 };
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index ebb63bb..6ab70f2 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -74,6 +74,8 @@ typedef enum {
     DispHTMLIFrame_tid,
     DispHTMLImg_tid,
     DispHTMLInputElement_tid,
+    DispHTMLLocation_tid,
+    DispHTMLNavigator_tid,
     DispHTMLOptionElement_tid,
     DispHTMLSelectElement_tid,
     DispHTMLStyle_tid,
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c
index a3eed8b..e86537f 100644
--- a/dlls/mshtml/omnavigator.c
+++ b/dlls/mshtml/omnavigator.c
@@ -329,7 +329,7 @@ static const tid_t OmNavigator_iface_tids[] = {
 };
 static dispex_static_data_t OmNavigator_dispex = {
     NULL,
-    IOmNavigator_tid,
+    DispHTMLNavigator_tid,
     NULL,
     OmNavigator_iface_tids
 };
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 92b379b..cb25926 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -438,18 +438,19 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
     }
 }
 
-#define test_disp(u,id) _test_disp(__LINE__,u,id)
-static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
+#define test_get_dispid(u,id) _test_disp(__LINE__,u,id)
+static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
 {
     IDispatchEx *dispex;
     ITypeInfo *typeinfo;
+    BOOL ret = FALSE;
     UINT ticnt;
     HRESULT hres;
 
     hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex);
     ok_(__FILE__,line) (hres == S_OK, "Could not get IDispatch: %08x\n", hres);
     if(FAILED(hres))
-        return;
+        return FALSE;
 
     ticnt = 0xdeadbeef;
     hres = IDispatchEx_GetTypeInfoCount(dispex, &ticnt);
@@ -464,13 +465,36 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
 
         hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
         ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
-        ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n", dbgstr_guid(&type_attr->guid));
+        if(hres == S_OK) {
+            *iid = type_attr->guid;
+            ret = TRUE;
+        }
 
         ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
         ITypeInfo_Release(typeinfo);
     }
 
     IDispatchEx_Release(dispex);
+    return ret;
+}
+
+#define test_disp(u,id) _test_disp(__LINE__,u,id)
+static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
+{
+    IID iid;
+
+    if(_test_get_dispid(line, unk, &iid))
+        ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
+}
+
+#define test_disp2(u,id,id2) _test_disp2(__LINE__,u,id,id2)
+static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID *diid2)
+{
+    IID iid;
+
+    if(_test_get_dispid(line, unk, &iid))
+        ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
+                "unexpected guid %s\n", dbgstr_guid(&iid));
 }
 
 #define get_elem_iface(u) _get_elem_iface(__LINE__,u)
@@ -2366,7 +2390,7 @@ static void test_location(IHTMLDocument2 *doc)
     IHTMLLocation_Release(location2);
 
     test_ifaces((IUnknown*)location, location_iids);
-    test_disp((IUnknown*)location, &IID_IHTMLLocation);
+    test_disp2((IUnknown*)location, &DIID_DispHTMLLocation, &IID_IHTMLLocation);
 
     ref = IHTMLLocation_Release(location);
     ok(!ref, "location chould be destroyed here\n");
@@ -2388,7 +2412,7 @@ static void test_navigator(IHTMLDocument2 *doc)
     hres = IHTMLWindow2_get_navigator(window, &navigator);
     ok(hres == S_OK, "get_navigator failed: %08x\n", hres);
     ok(navigator != NULL, "navigator == NULL\n");
-    test_disp((IUnknown*)navigator, &IID_IOmNavigator);
+    test_disp2((IUnknown*)navigator, &DIID_DispHTMLNavigator, &IID_IOmNavigator);
 
     hres = IHTMLWindow2_get_navigator(window, &navigator2);
     ok(hres == S_OK, "get_navigator failed: %08x\n", hres);




More information about the wine-cvs mailing list