Jacek Caban : mshtml: Use proper document node for createElement called on document fragment.

Alexandre Julliard julliard at winehq.org
Tue Jul 24 14:39:41 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 24 15:55:41 2012 +0200

mshtml: Use proper document node for createElement called on document fragment.

---

 dlls/mshtml/htmldoc.c   |   10 ++++++++--
 dlls/mshtml/tests/dom.c |   10 +++++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index f9e11ce..57d0b31 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1022,17 +1022,23 @@ static HRESULT WINAPI HTMLDocument_createElement(IHTMLDocument2 *iface, BSTR eTa
                                                  IHTMLElement **newElem)
 {
     HTMLDocument *This = impl_from_IHTMLDocument2(iface);
+    HTMLDocumentNode *doc_node;
     nsIDOMHTMLElement *nselem;
     HTMLElement *elem;
     HRESULT hres;
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_w(eTag), newElem);
 
-    hres = create_nselem(This->doc_node, eTag, &nselem);
+    /* Use owner doc if called on document fragment */
+    doc_node = This->doc_node;
+    if(!doc_node->nsdoc)
+        doc_node = doc_node->node.doc;
+
+    hres = create_nselem(doc_node, eTag, &nselem);
     if(FAILED(hres))
         return hres;
 
-    hres = HTMLElement_Create(This->doc_node, (nsIDOMNode*)nselem, TRUE, &elem);
+    hres = HTMLElement_Create(doc_node, (nsIDOMNode*)nselem, TRUE, &elem);
     nsIDOMHTMLElement_Release(nselem);
     if(FAILED(hres))
         return hres;
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 8907a98..1a1732f 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -6246,10 +6246,10 @@ static IHTMLDocument2 *create_docfrag(IHTMLDocument2 *doc)
 
 static void test_docfrag(IHTMLDocument2 *doc)
 {
+    IHTMLDocument2 *frag, *owner_doc, *doc_node;
     IHTMLElement *div, *body, *br;
     IHTMLElementCollection *col;
     IHTMLLocation *location;
-    IHTMLDocument2 *frag;
     HRESULT hres;
 
     static const elem_type_t all_types[] = {
@@ -6288,6 +6288,14 @@ static void test_docfrag(IHTMLDocument2 *doc)
     test_elem_collection((IUnknown*)col, all_types, sizeof(all_types)/sizeof(all_types[0]));
     IHTMLElementCollection_Release(col);
 
+    div = test_create_elem(frag, "div");
+    owner_doc = get_owner_doc((IUnknown*)div);
+    doc_node = get_doc_node(doc);
+    ok(iface_cmp((IUnknown*)owner_doc, (IUnknown*)doc_node), "owner_doc != doc_node\n");
+    IHTMLDocument2_Release(doc_node);
+    IHTMLDocument2_Release(owner_doc);
+    IHTMLElement_Release(div);
+
     IHTMLDocument2_Release(frag);
 }
 




More information about the wine-cvs mailing list