Jacek Caban : mshtml: Add IHTMLDocument7::createElementNS implementation.

Alexandre Julliard julliard at winehq.org
Thu Mar 28 18:35:12 CDT 2019


Module: wine
Branch: master
Commit: 7858cc01b77da7c6b2e0db65dd751bb1e42faa7d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7858cc01b77da7c6b2e0db65dd751bb1e42faa7d

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar 28 15:55:46 2019 +0100

mshtml: Add IHTMLDocument7::createElementNS implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmldoc.c         | 35 +++++++++++++++++++++++++++++++++--
 dlls/mshtml/tests/elements.js | 20 ++++++++++++++++++++
 2 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 20d1c74..656acaf 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -3288,8 +3288,39 @@ static HRESULT WINAPI HTMLDocument7_getElementsByTagNameNS(IHTMLDocument7 *iface
 static HRESULT WINAPI HTMLDocument7_createElementNS(IHTMLDocument7 *iface, VARIANT *pvarNS, BSTR bstrTag, IHTMLElement **newElem)
 {
     HTMLDocument *This = impl_from_IHTMLDocument7(iface);
-    FIXME("(%p)->(%s %s %p)\n", This, debugstr_variant(pvarNS), debugstr_w(bstrTag), newElem);
-    return E_NOTIMPL;
+    nsIDOMElement *dom_element;
+    HTMLElement *element;
+    nsAString ns, tag;
+    nsresult nsres;
+    HRESULT hres;
+
+    TRACE("(%p)->(%s %s %p)\n", This, debugstr_variant(pvarNS), debugstr_w(bstrTag), newElem);
+
+    if(!This->doc_node->nsdoc) {
+        FIXME("NULL nsdoc\n");
+        return E_FAIL;
+    }
+
+    if(pvarNS && V_VT(pvarNS) != VT_NULL && V_VT(pvarNS) != VT_BSTR)
+        FIXME("Unsupported namespace %s\n", debugstr_variant(pvarNS));
+
+    nsAString_InitDepend(&ns, pvarNS && V_VT(pvarNS) == VT_BSTR ? V_BSTR(pvarNS) : NULL);
+    nsAString_InitDepend(&tag, bstrTag);
+    nsres = nsIDOMHTMLDocument_CreateElementNS(This->doc_node->nsdoc, &ns, &tag, &dom_element);
+    nsAString_Finish(&ns);
+    nsAString_Finish(&tag);
+    if(NS_FAILED(nsres)) {
+        WARN("CreateElementNS failed: %08x\n", nsres);
+        return map_nsresult(nsres);
+    }
+
+    hres = HTMLElement_Create(This->doc_node, (nsIDOMNode*)dom_element, FALSE, &element);
+    nsIDOMElement_Release(dom_element);
+    if(FAILED(hres))
+        return hres;
+
+    *newElem = &element->IHTMLElement_iface;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLDocument7_createAttributeNS(IHTMLDocument7 *iface, VARIANT *pvarNS,
diff --git a/dlls/mshtml/tests/elements.js b/dlls/mshtml/tests/elements.js
index 5077885..287ff35 100644
--- a/dlls/mshtml/tests/elements.js
+++ b/dlls/mshtml/tests/elements.js
@@ -168,6 +168,25 @@ function test_getElementsByClassName() {
     next_test();
 }
 
+function test_createElementNS() {
+    var svg_ns = "http://www.w3.org/2000/svg";
+    var elem;
+
+    elem = document.createElementNS(null, "test");
+    ok(elem.tagName === "test", "elem.tagName = " + elem.tagName);
+
+    elem = document.createElementNS(svg_ns, "test");
+    ok(elem.tagName === "test", "elem.tagName = " + elem.tagName);
+
+    elem = document.createElementNS(svg_ns, "svg");
+    ok(elem.tagName === "svg", "elem.tagName = " + elem.tagName);
+
+    elem = document.createElementNS("test", "svg");
+    ok(elem.tagName === "svg", "elem.tagName = " + elem.tagName);
+
+    next_test();
+}
+
 function test_query_selector() {
     document.body.innerHTML = '<div class="class1">'
         + '<div class="class1"></div>'
@@ -351,6 +370,7 @@ var tests = [
     test_textContent,
     test_ElementTraversal,
     test_getElementsByClassName,
+    test_createElementNS,
     test_head,
     test_iframe,
     test_anchor,




More information about the wine-cvs mailing list