Jacek Caban : mshtml: Added IHTMLFrameBase:: marginWidth property implementation.
Alexandre Julliard
julliard at winehq.org
Wed Oct 24 13:39:41 CDT 2012
Module: wine
Branch: master
Commit: 81cdfc61fd6527d1640e871586f064d9dee6b38b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=81cdfc61fd6527d1640e871586f064d9dee6b38b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Oct 24 12:41:01 2012 +0200
mshtml: Added IHTMLFrameBase::marginWidth property implementation.
---
dlls/mshtml/htmlframebase.c | 61 ++++++++++++++++++++++++++++++++++++++++---
dlls/mshtml/tests/dom.c | 34 ++++++++++++++++++++++++
2 files changed, 91 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c
index 5431187..a11adca 100644
--- a/dlls/mshtml/htmlframebase.c
+++ b/dlls/mshtml/htmlframebase.c
@@ -273,15 +273,68 @@ static HRESULT WINAPI HTMLFrameBase_get_frameSpacing(IHTMLFrameBase *iface, VARI
static HRESULT WINAPI HTMLFrameBase_put_marginWidth(IHTMLFrameBase *iface, VARIANT v)
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
- return E_NOTIMPL;
+ nsAString nsstr;
+ nsresult nsres;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
+
+ if(V_VT(&v) != VT_BSTR) {
+ FIXME("unsupported %s\n", debugstr_variant(&v));
+ return E_NOTIMPL;
+ }
+
+ nsAString_InitDepend(&nsstr, V_BSTR(&v));
+ if(This->nsframe)
+ nsres = nsIDOMHTMLFrameElement_SetMarginWidth(This->nsframe, &nsstr);
+ else
+ nsres = nsIDOMHTMLIFrameElement_SetMarginWidth(This->nsiframe, &nsstr);
+ nsAString_Finish(&nsstr);
+ return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL;
}
static HRESULT WINAPI HTMLFrameBase_get_marginWidth(IHTMLFrameBase *iface, VARIANT *p)
{
HTMLFrameBase *This = impl_from_IHTMLFrameBase(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsAString nsstr;
+ nsresult nsres;
+ HRESULT hres = S_OK;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ nsAString_Init(&nsstr, NULL);
+ if(This->nsframe)
+ nsres = nsIDOMHTMLFrameElement_GetMarginWidth(This->nsframe, &nsstr);
+ else
+ nsres = nsIDOMHTMLIFrameElement_GetMarginWidth(This->nsiframe, &nsstr);
+ if(NS_SUCCEEDED(nsres)) {
+ const PRUnichar *str, *end;
+
+ nsAString_GetData(&nsstr, &str);
+
+ if(*str) {
+ BSTR ret;
+
+ end = strstrW(str, pxW);
+ if(!end)
+ end = str+strlenW(str);
+ ret = SysAllocStringLen(str, end-str);
+ if(ret) {
+ V_VT(p) = VT_BSTR;
+ V_BSTR(p) = ret;
+ }else {
+ hres = E_OUTOFMEMORY;
+ }
+ }else {
+ V_VT(p) = VT_BSTR;
+ V_BSTR(p) = NULL;
+ }
+ }else {
+ ERR("GetMarginWidth failed: %08x\n", nsres);
+ hres = E_FAIL;
+ }
+
+ nsAString_Finish(&nsstr);
+ return hres;
}
static HRESULT WINAPI HTMLFrameBase_put_marginHeight(IHTMLFrameBase *iface, VARIANT v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index f3dcc29..26567d2 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -4476,6 +4476,36 @@ static void _set_framebase_marginheight(unsigned line, IHTMLFrameBase *framebase
ok_(__FILE__,line)(hres == S_OK, "put_marginHeight failed: %08x\n", hres);
VariantClear(&v);
}
+
+#define test_framebase_marginwidth(a,b) _test_framebase_marginwidth(__LINE__,a,b)
+static void _test_framebase_marginwidth(unsigned line, IHTMLFrameBase *framebase, const char *exval)
+{
+ VARIANT v;
+ HRESULT hres;
+
+ hres = IHTMLFrameBase_get_marginWidth(framebase, &v);
+ ok_(__FILE__,line)(hres == S_OK, "get_marginWidth failed: %08x\n", hres);
+ ok_(__FILE__,line)(V_VT(&v) == VT_BSTR, "V_VT(marginWidth) = %d\n", V_VT(&v));
+ if(exval)
+ ok_(__FILE__,line)(!strcmp_wa(V_BSTR(&v), exval), "marginWidth = %s, expected %s\n", wine_dbgstr_w(V_BSTR(&v)), exval);
+ else
+ ok_(__FILE__,line)(!V_BSTR(&v), "marginWidth = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+}
+
+#define set_framebase_marginwidth(a,b) _set_framebase_marginwidth(__LINE__,a,b)
+static void _set_framebase_marginwidth(unsigned line, IHTMLFrameBase *framebase, const char *val)
+{
+ VARIANT v;
+ HRESULT hres;
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr(val);
+ hres = IHTMLFrameBase_put_marginWidth(framebase, v);
+ ok_(__FILE__,line)(hres == S_OK, "put_marginWidth failed: %08x\n", hres);
+ VariantClear(&v);
+}
+
static void test_framebase(IUnknown *unk)
{
IHTMLFrameBase *fbase;
@@ -4529,6 +4559,10 @@ static void test_framebase(IUnknown *unk)
set_framebase_marginheight(fbase, "1px");
test_framebase_marginheight(fbase, "1");
+ test_framebase_marginwidth(fbase, NULL);
+ set_framebase_marginwidth(fbase, "2px");
+ test_framebase_marginwidth(fbase, "2");
+
IHTMLFrameBase_Release(fbase);
}
More information about the wine-cvs
mailing list