Jacek Caban : mshtml: Add IElementSelector::querySelector implementation.
Alexandre Julliard
julliard at winehq.org
Thu Mar 28 18:35:12 CDT 2019
Module: wine
Branch: master
Commit: 394347945c44f18e37f70f1d7825e2adca332048
URL: https://source.winehq.org/git/wine.git/?a=commit;h=394347945c44f18e37f70f1d7825e2adca332048
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Mar 28 15:56:06 2019 +0100
mshtml: Add IElementSelector::querySelector implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlelem.c | 35 +++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/elements.js | 6 ++++++
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index da7b6cf..c628a18 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -5182,8 +5182,39 @@ static HRESULT WINAPI ElementSelector_Invoke(IElementSelector *iface, DISPID dis
static HRESULT WINAPI ElementSelector_querySelector(IElementSelector *iface, BSTR v, IHTMLElement **pel)
{
HTMLElement *This = impl_from_IElementSelector(iface);
- FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), pel);
- return E_NOTIMPL;
+ nsIDOMElement *nselem;
+ HTMLElement *elem;
+ nsAString nsstr;
+ nsresult nsres;
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel);
+
+ if(!This->dom_element) {
+ FIXME("comment element\n");
+ return E_NOTIMPL;
+ }
+
+ nsAString_InitDepend(&nsstr, v);
+ nsres = nsIDOMElement_QuerySelector(This->dom_element, &nsstr, &nselem);
+ nsAString_Finish(&nsstr);
+ if(NS_FAILED(nsres)) {
+ ERR("QuerySelector failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ if(!nselem) {
+ *pel = NULL;
+ return S_OK;
+ }
+
+ hres = get_element(nselem, &elem);
+ nsIDOMElement_Release(nselem);
+ if(FAILED(hres))
+ return hres;
+
+ *pel = &elem->IHTMLElement_iface;
+ return S_OK;
}
static HRESULT WINAPI ElementSelector_querySelectorAll(IElementSelector *iface, BSTR v, IHTMLDOMChildrenCollection **pel)
diff --git a/dlls/mshtml/tests/elements.js b/dlls/mshtml/tests/elements.js
index 7bf5c24..9645c0b 100644
--- a/dlls/mshtml/tests/elements.js
+++ b/dlls/mshtml/tests/elements.js
@@ -200,12 +200,18 @@ function test_query_selector() {
var e = document.querySelector("nomatch");
ok(e === null, "e = " + e);
+ e = document.body.querySelector("nomatch");
+ ok(e === null, "e = " + e);
e = document.querySelector(".class1");
ok(e.tagName === "DIV", "e.tagName = " + e.tagName);
+ e = document.body.querySelector(".class1");
+ ok(e.tagName === "DIV", "e.tagName = " + e.tagName);
e = document.querySelector("a");
ok(e.tagName === "A", "e.tagName = " + e.tagName);
+ e = document.body.querySelector("a");
+ ok(e.tagName === "A", "e.tagName = " + e.tagName);
next_test();
}
More information about the wine-cvs
mailing list