Jacek Caban : mshtml: Add IHTMLRectCollection::item implementation.

Alexandre Julliard julliard at winehq.org
Mon Jun 29 14:59:21 CDT 2020


Module: wine
Branch: master
Commit: 4633304cde2aeeb363b303a238ccedeb366cce5d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4633304cde2aeeb363b303a238ccedeb366cce5d

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 29 16:49:57 2020 +0200

mshtml: Add IHTMLRectCollection::item implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlelem.c  | 30 ++++++++++++++++++++++++++++--
 dlls/mshtml/tests/dom.c | 14 ++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index a594337ead..6578ee7510 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -671,8 +671,34 @@ static HRESULT WINAPI HTMLRectCollection_get__newEnum(IHTMLRectCollection *iface
 static HRESULT WINAPI HTMLRectCollection_item(IHTMLRectCollection *iface, VARIANT *index, VARIANT *result)
 {
     HTMLRectCollection *This = impl_from_IHTMLRectCollection(iface);
-    FIXME("(%p)->(%s %p)\n", This, debugstr_variant(index), result);
-    return E_NOTIMPL;
+    nsIDOMClientRect *nsrect;
+    IHTMLRect *rect;
+    nsresult nsres;
+    HRESULT hres;
+
+    TRACE("(%p)->(%s %p)\n", This, debugstr_variant(index), result);
+
+    if(V_VT(index) != VT_I4 || V_I4(index) < 0) {
+        FIXME("Unsupported for %s index\n", debugstr_variant(index));
+        return E_NOTIMPL;
+    }
+
+    nsres = nsIDOMClientRectList_Item(This->rect_list, V_I4(index), &nsrect);
+    if(NS_FAILED(nsres))
+        return map_nsresult(nsres);
+    if(!nsrect) {
+        V_VT(result) = VT_NULL;
+        return S_OK;
+    }
+
+    hres = create_html_rect(nsrect, &rect);
+    nsIDOMClientRect_Release(nsrect);
+    if(FAILED(hres))
+        return hres;
+
+    V_VT(result) = VT_DISPATCH;
+    V_DISPATCH(result) = (IDispatch *)rect;
+    return S_OK;
 }
 
 static const IHTMLRectCollectionVtbl HTMLRectCollectionVtbl = {
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 89785123c6..3aee3dfb7b 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -5144,6 +5144,7 @@ static void test_elem_bounding_client_rect(IUnknown *unk)
     IHTMLRectCollection *rects;
     IHTMLRect *rect, *rect2;
     IHTMLElement2 *elem2;
+    VARIANT v, index;
     LONG l;
     HRESULT hres;
 
@@ -5185,6 +5186,19 @@ static void test_elem_bounding_client_rect(IUnknown *unk)
 
     test_disp((IUnknown*)rects, &IID_IHTMLRectCollection, NULL, L"[object]");
 
+    hres = IHTMLRectCollection_get_length(rects, &l);
+    ok(hres == S_OK, "get_length failed: %08x\n", hres);
+    ok(l == 1, "length = %u\n", l);
+
+    V_VT(&index) = VT_I4;
+    V_I4(&index) = 0;
+    V_VT(&v) = VT_ERROR;
+    hres = IHTMLRectCollection_item(rects, &index, &v);
+    ok(hres == S_OK, "item failed: %08x\n", hres);
+    ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
+    test_disp((IUnknown*)V_DISPATCH(&v), &IID_IHTMLRect, NULL, L"[object]");
+    VariantClear(&v);
+
     IHTMLRectCollection_Release(rects);
     IHTMLElement2_Release(elem2);
 }




More information about the wine-cvs mailing list