Jacek Caban : mshtml: Added IHTMLDocument6::getElementById implementation.
Alexandre Julliard
julliard at winehq.org
Thu Aug 24 14:18:25 CDT 2017
Module: wine
Branch: master
Commit: f84d1f0aac98fce5746fb550b9397fbd16fa202d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f84d1f0aac98fce5746fb550b9397fbd16fa202d
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Aug 24 12:29:09 2017 +0200
mshtml: Added IHTMLDocument6::getElementById implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmldoc.c | 40 ++++++++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/dom.c | 24 ++++++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index a8d104e..8d48e18 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -3142,8 +3142,44 @@ static HRESULT WINAPI HTMLDocument6_getElementById(IHTMLDocument6 *iface,
BSTR bstrId, IHTMLElement2 **p)
{
HTMLDocument *This = impl_from_IHTMLDocument6(iface);
- FIXME("(%p)->(%s %p)\n", This, debugstr_w(bstrId), p);
- return E_NOTIMPL;
+ nsIDOMElement *nselem;
+ HTMLElement *elem;
+ nsAString nsstr;
+ nsresult nsres;
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrId), p);
+
+ /*
+ * Unlike IHTMLDocument3 implementation, this is standard compliant and does
+ * not search for name attributes, so we may simply let Gecko do the right thing.
+ */
+
+ if(!This->doc_node->nsdoc) {
+ FIXME("Not a document\n");
+ return E_FAIL;
+ }
+
+ nsAString_InitDepend(&nsstr, bstrId);
+ nsres = nsIDOMHTMLDocument_GetElementById(This->doc_node->nsdoc, &nsstr, &nselem);
+ nsAString_Finish(&nsstr);
+ if(NS_FAILED(nsres)) {
+ ERR("GetElementById failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ if(!nselem) {
+ *p = NULL;
+ return S_OK;
+ }
+
+ hres = get_elem(This->doc_node, nselem, &elem);
+ nsIDOMElement_Release(nselem);
+ if(FAILED(hres))
+ return hres;
+
+ *p = &elem->IHTMLElement2_iface;
+ return S_OK;
}
static HRESULT WINAPI HTMLDocument6_updateSettings(IHTMLDocument6 *iface)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index c6053a6..a3a3bfe 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -9857,6 +9857,7 @@ static void test_frameset(IHTMLDocument2 *doc)
{
IHTMLWindow2 *window;
IHTMLFramesCollection2 *frames;
+ IHTMLDocument6 *doc6;
IHTMLElement *elem;
HRESULT hres;
@@ -9887,6 +9888,29 @@ static void test_frameset(IHTMLDocument2 *doc)
elem = get_doc_elem_by_id(doc, "nm1");
test_elem_id((IUnknown*)elem, "fr1");
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument6, (void**)&doc6);
+ if(SUCCEEDED(hres)) {
+ IHTMLElement2 *elem2;
+ BSTR str;
+
+ str = a2bstr("nm1");
+ hres = IHTMLDocument6_getElementById(doc6, str, &elem2);
+ ok(hres == S_OK, "getElementById failed: %08x\n", hres);
+ ok(!elem2, "elem = %p\n", elem2);
+ SysFreeString(str);
+
+ str = a2bstr("fr1");
+ hres = IHTMLDocument6_getElementById(doc6, str, &elem2);
+ ok(hres == S_OK, "getElementById failed: %08x\n", hres);
+ ok(elem2 != NULL, "elem2 is NULL\n");
+ test_elem_id((IUnknown*)elem2, "fr1");
+ SysFreeString(str);
+
+ IHTMLDocument6_Release(doc6);
+ }else {
+ win_skip("IHTMLDocument6 not supported\n");
+ }
+
test_framebase((IUnknown*)elem);
test_framebase_name(elem, "nm1");
test_framebase_put_name(elem, "frame name");
More information about the wine-cvs
mailing list