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