diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 70b87583d25..0aad4912b0d 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1341,8 +1341,25 @@ static HRESULT WINAPI HTMLDOMNode3_isSameNode(IHTMLDOMNode3 *iface, IHTMLDOMNode static HRESULT WINAPI HTMLDOMNode3_compareDocumentPosition(IHTMLDOMNode3 *iface, IHTMLDOMNode *otherNode, USHORT *flags) { HTMLDOMNode *This = impl_from_IHTMLDOMNode3(iface); - FIXME("(%p)->()\n", This); - return E_NOTIMPL; + HTMLDOMNode *other; + UINT16 position; + nsresult nsres; + + TRACE("(%p)->()\n", This); + + other = get_node_obj(otherNode); + if(!other) + return E_INVALIDARG; + + nsres = nsIDOMNode_CompareDocumentPosition(This->nsnode, other->nsnode, &position); + IHTMLDOMNode_Release(&other->IHTMLDOMNode_iface); + if(NS_FAILED(nsres)) { + ERR("failed: %08x\n", nsres); + return E_FAIL; + } + + *flags = position; + return S_OK; } static HRESULT WINAPI HTMLDOMNode3_isSupported(IHTMLDOMNode3 *iface, BSTR feature, VARIANT version, VARIANT_BOOL *pfisSupported) diff --git a/dlls/mshtml/tests/elements.js b/dlls/mshtml/tests/elements.js index 3912e9a8197..6e193ee5543 100644 --- a/dlls/mshtml/tests/elements.js +++ b/dlls/mshtml/tests/elements.js @@ -148,11 +148,36 @@ function test_query_selector() { next_test(); } +function test_compare_position() { + document.body.innerHTML = '