Jacek Caban : mshtml: Added get_firstChild implementation.

Alexandre Julliard julliard at winehq.org
Thu Apr 24 15:56:45 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Apr 24 18:24:59 2008 +0200

mshtml: Added get_firstChild implementation.

---

 dlls/mshtml/htmlnode.c  |   15 +++++++++++++--
 dlls/mshtml/tests/dom.c |   25 +++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 9ee4513..b315e9d 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -246,8 +246,19 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeValue(IHTMLDOMNode *iface, VARIANT *p)
 static HRESULT WINAPI HTMLDOMNode_get_firstChild(IHTMLDOMNode *iface, IHTMLDOMNode **p)
 {
     HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsIDOMNode *nschild = NULL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsIDOMNode_GetFirstChild(This->nsnode, &nschild);
+    if(nschild) {
+        *p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE));
+        IHTMLDOMNode_AddRef(*p);
+    }else {
+        *p = NULL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLDOMNode_get_lastChild(IHTMLDOMNode *iface, IHTMLDOMNode **p)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 83dc38f..1ad24dc 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -738,6 +738,23 @@ static void _test_elem_collection(unsigned line, IHTMLElementCollection *col,
     ok_(__FILE__,line) (disp == NULL, "disp != NULL\n");
 }
 
+#define get_first_child(n) _get_first_child(__LINE__,n)
+static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
+{
+    IHTMLDOMNode *node, *child = NULL;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
+    if(FAILED(hres))
+        return NULL;
+
+    hres = IHTMLDOMNode_get_firstChild(node, &child);
+    ok_(__FILE__,line) (hres == S_OK, "get_firstChild failed: %08x\n", hres);
+
+    return child;
+}
+
 static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
         const elem_type_t *elem_types, long len)
 {
@@ -1379,6 +1396,7 @@ static void test_elems(IHTMLDocument2 *doc)
 {
     IHTMLElementCollection *col;
     IHTMLElement *elem;
+    IHTMLDOMNode *node;
     IDispatch *disp;
     HRESULT hres;
 
@@ -1451,6 +1469,13 @@ static void test_elems(IHTMLDocument2 *doc)
 
         test_select_elem(select);
 
+        node = get_first_child((IUnknown*)select);
+        ok(node != NULL, "node == NULL\n");
+        if(node) {
+            test_elem_type((IUnknown*)node, ET_OPTION);
+            IHTMLDOMNode_Release(node);
+        }
+
         IHTMLSelectElement_Release(select);
         IHTMLElement_Release(elem);
     }




More information about the wine-cvs mailing list