Jacek Caban : mshtml: Added HTMLTextAreaElement::get_form implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 15 11:37:25 CDT 2014


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Oct 15 11:43:20 2014 +0200

mshtml: Added HTMLTextAreaElement::get_form implementation.

---

 dlls/mshtml/htmltextarea.c | 30 ++++++++++++++++++++++++++++--
 dlls/mshtml/tests/dom.c    | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c
index 9fb8453..f756e08 100644
--- a/dlls/mshtml/htmltextarea.c
+++ b/dlls/mshtml/htmltextarea.c
@@ -196,8 +196,34 @@ static HRESULT WINAPI HTMLTextAreaElement_get_disabled(IHTMLTextAreaElement *ifa
 static HRESULT WINAPI HTMLTextAreaElement_get_form(IHTMLTextAreaElement *iface, IHTMLFormElement **p)
 {
     HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsIDOMHTMLFormElement *nsform;
+    nsIDOMNode *nsnode;
+    HTMLDOMNode *node;
+    nsresult nsres;
+    HRESULT hres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMHTMLTextAreaElement_GetForm(This->nstextarea, &nsform);
+    assert(nsres == NS_OK);
+
+    if(!nsform) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&nsnode);
+    nsIDOMHTMLFormElement_Release(nsform);
+    assert(nsres == NS_OK);
+
+    hres = get_node(This->element.node.doc, nsnode, TRUE, &node);
+    nsIDOMNode_Release(nsnode);
+    if(FAILED(hres))
+        return hres;
+
+    hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLFormElement, (void**)p);
+    IHTMLDOMNode_Release(&node->IHTMLDOMNode_iface);
+    return hres;
 }
 
 static HRESULT WINAPI HTMLTextAreaElement_put_defaultValue(IHTMLTextAreaElement *iface, BSTR v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index e1e18dc..5dc9a8f 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -1672,6 +1672,20 @@ static void _test_textarea_type(unsigned line, IUnknown *unk)
     SysFreeString(type);
 }
 
+#define get_textarea_form(t) _get_textarea_form(__LINE__,t)
+static IHTMLFormElement *_get_textarea_form(unsigned line, IUnknown *unk)
+{
+    IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
+    IHTMLFormElement *form;
+    HRESULT hres;
+
+    hres = IHTMLTextAreaElement_get_form(textarea, &form);
+    IHTMLTextAreaElement_Release(textarea);
+    ok_(__FILE__,line)(hres == S_OK, "get_type failed: %08x\n", hres);
+
+    return form;
+}
+
 #define test_comment_text(c,t) _test_comment_text(__LINE__,c,t)
 static void _test_comment_text(unsigned line, IUnknown *unk, const char *extext)
 {
@@ -7807,12 +7821,35 @@ static void test_elems2(IHTMLDocument2 *doc)
     test_elem_set_innerhtml((IUnknown*)div, "<textarea id=\"ta\"></textarea>");
     elem = get_elem_by_id(doc, "ta", TRUE);
     if(elem) {
+        IHTMLFormElement *form;
+
         test_textarea_value((IUnknown*)elem, NULL);
         test_textarea_put_value((IUnknown*)elem, "test");
         test_textarea_readonly((IUnknown*)elem, VARIANT_FALSE);
         test_textarea_put_readonly((IUnknown*)elem, VARIANT_TRUE);
         test_textarea_put_readonly((IUnknown*)elem, VARIANT_FALSE);
         test_textarea_type((IUnknown*)elem);
+
+        form = get_textarea_form((IUnknown*)elem);
+        ok(!form, "form = %p\n", form);
+
+        IHTMLElement_Release(elem);
+    }
+
+    test_elem_set_innerhtml((IUnknown*)div, "<form id=\"fid\"><textarea id=\"ta\"></textarea></form>");
+    elem = get_elem_by_id(doc, "ta", TRUE);
+    if(elem) {
+        IHTMLFormElement *form;
+
+        elem2 = get_elem_by_id(doc, "fid", TRUE);
+        ok(elem2 != NULL, "elem2 == NULL\n");
+
+        form = get_textarea_form((IUnknown*)elem);
+        ok(form != NULL, "form = NULL\n");
+        ok(iface_cmp((IUnknown*)form, (IUnknown*)elem2), "form != elem2\n");
+
+        IHTMLFormElement_Release(form);
+        IHTMLElement_Release(elem2);
         IHTMLElement_Release(elem);
     }
 




More information about the wine-cvs mailing list