Jacek Caban : mshtml: Return NULL ownerDocument for document node.

Alexandre Julliard julliard at winehq.org
Tue Nov 3 15:37:18 CST 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Nov  1 19:24:03 2009 +0100

mshtml: Return NULL ownerDocument for document node.

---

 dlls/mshtml/htmlnode.c  |    9 +++++++--
 dlls/mshtml/tests/dom.c |   24 +++++++++++++++---------
 2 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 597108f..b8cecf0 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -836,8 +836,13 @@ static HRESULT WINAPI HTMLDOMNode2_get_ownerDocument(IHTMLDOMNode2 *iface, IDisp
 
     TRACE("(%p)->(%p)\n", This, p);
 
-    *p = (IDispatch*)HTMLDOC(&This->doc->basedoc);
-    IDispatch_AddRef(*p);
+    /* FIXME: Better check for document node */
+    if(This == &This->doc->node) {
+        *p = NULL;
+    }else {
+        *p = (IDispatch*)HTMLDOC(&This->doc->basedoc);
+        IDispatch_AddRef(*p);
+    }
     return S_OK;
 }
 
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 97ad221..2559fdc 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -652,17 +652,18 @@ static IHTMLDocument2 *_get_owner_doc(unsigned line, IUnknown *unk)
 {
     IHTMLDOMNode2 *node = _get_node2_iface(line, unk);
     IDispatch *disp = (void*)0xdeadbeef;
-    IHTMLDocument2 *doc;
+    IHTMLDocument2 *doc = NULL;
     HRESULT hres;
 
     hres = IHTMLDOMNode2_get_ownerDocument(node, &disp);
     IHTMLDOMNode2_Release(node);
     ok_(__FILE__,line)(hres == S_OK, "get_ownerDocument failed: %08x\n", hres);
-    ok_(__FILE__,line)(disp != NULL, "disp = NULL\n");
 
-    hres = IDispatch_QueryInterface(disp, &IID_IHTMLDocument2, (void**)&doc);
-    IDispatch_Release(disp);
-    ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLDocument2 iface: %08x\n", hres);
+    if(disp) {
+        hres = IDispatch_QueryInterface(disp, &IID_IHTMLDocument2, (void**)&doc);
+        IDispatch_Release(disp);
+        ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLDocument2 iface: %08x\n", hres);
+    }
 
     return doc;
 }
@@ -940,8 +941,7 @@ static void test_get_set_attr(IHTMLDocument2 *doc)
     hres = IHTMLElement_getAttribute(elem, bstr, 0, &val);
     ok(hres == S_OK, "getAttribute failed: %08x\n", hres);
     ok(V_VT(&val) == VT_BOOL, "variant type should have been VT_BOOL (0x%x), was: 0x%x\n", VT_BOOL, V_VT(&val));
-    ok(V_BOOL(&val) == VARIANT_TRUE, "variant value should have been VARIANT_TRUE (0x%x), was %d\n",
-       VARIANT_TRUE, V_BOOL(&val));
+    ok(V_BOOL(&val) == VARIANT_TRUE, "variant value should have been VARIANT_TRUE (0x%x), was %d\n", VARIANT_TRUE, V_BOOL(&val));
     VariantClear(&val);
     SysFreeString(bstr);
 
@@ -4417,9 +4417,12 @@ static void test_doc_elem(IHTMLDocument2 *doc)
     doc_node = get_doc_node(doc);
     owner_doc = get_owner_doc((IUnknown*)elem);
     ok(iface_cmp((IUnknown *)doc_node, (IUnknown *)owner_doc), "doc_node != owner_doc\n");
-    IHTMLDocument2_Release(doc_node);
     IHTMLDocument2_Release(owner_doc);
 
+    owner_doc = get_owner_doc((IUnknown*)doc_node);
+    ok(!owner_doc, "owner_doc = %p\n", owner_doc);
+    IHTMLDocument2_Release(doc_node);
+
     test_elem_client_rect((IUnknown*)elem);
 
     IHTMLElement_Release(elem);
@@ -4781,8 +4784,8 @@ static void doc_write(IHTMLDocument2 *doc, BOOL ln, const char *text)
 
 static void test_iframe_elem(IHTMLElement *elem)
 {
+    IHTMLDocument2 *content_doc, *owner_doc;
     IHTMLElementCollection *col;
-    IHTMLDocument2 *content_doc;
     IHTMLWindow2 *content_window;
     IHTMLFrameBase2 *base2;
     IDispatch *disp;
@@ -4837,6 +4840,9 @@ static void test_iframe_elem(IHTMLElement *elem)
     hres = IHTMLDocument2_close(content_doc);
     ok(hres == S_OK, "close failed: %08x\n", hres);
 
+    owner_doc = get_owner_doc((IUnknown*)content_doc);
+    ok(!owner_doc, "owner_doc = %p\n", owner_doc);
+
     IHTMLDocument2_Release(content_doc);
 }
 




More information about the wine-cvs mailing list