Module: wine Branch: master Commit: 3c7415f715108d30164e280e08a4683f974e5034 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c7415f715108d30164e280e08...
Author: Piotr Caban piotr@codeweavers.com Date: Tue Jul 25 17:57:20 2017 +0200
mshtml: Add IElementTraversal::get_firstElementChild implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlelem.c | 21 +++++++++++++++++++-- dlls/mshtml/tests/elements.js | 17 ++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index ae31d1d..927541b 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -4953,8 +4953,25 @@ static HRESULT WINAPI ElementTraversal_Invoke(IElementTraversal *iface, DISPID d static HRESULT WINAPI ElementTraversal_get_firstElementChild(IElementTraversal *iface, IHTMLElement **p) { HTMLElement *This = impl_from_IElementTraversal(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMElement *nselem = NULL; + HTMLElement *elem; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, p); + + nsIDOMHTMLElement_GetFirstElementChild(This->nselem, &nselem); + if(!nselem) { + *p = NULL; + return S_OK; + } + + hres = get_elem(This->node.doc, nselem, &elem); + nsIDOMElement_Release(nselem); + if(FAILED(hres)) + return hres; + + *p = &elem->IHTMLElement_iface; + return S_OK; }
static HRESULT WINAPI ElementTraversal_get_lastElementChild(IElementTraversal *iface, IHTMLElement **p) diff --git a/dlls/mshtml/tests/elements.js b/dlls/mshtml/tests/elements.js index 4167e32..b7db0bc 100644 --- a/dlls/mshtml/tests/elements.js +++ b/dlls/mshtml/tests/elements.js @@ -80,7 +80,22 @@ function test_textContent() { next_test(); }
+function test_ElementTraversal() { + var div = document.createElement("div"); + div.innerHTML = "abc<b>bold</b><script>/* */<script><div>text</div>def"; + ok(div.firstElementChild.outerHTML === "<b>bold</b>", + "div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML); + + div.innerHTML = "abc"; + ok(div.firstElementChild === null, "div.firstElementChild = " + div.firstElementChild); + + ok(!("firstElementChild" in document), "firstElementChild found in document"); + + next_test(); +} + var tests = [ test_input_selection, - test_textContent + test_textContent, + test_ElementTraversal ];