>From d99d09542749614013225c74945f3b9d71fe75bb Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 23 Sep 2011 21:10:51 +1000
Subject: [PATCH] Add IHTMLCurrentStyle2/3/4 support
To: wine-patches <wine-patches@winehq.org>

---
 dlls/mshtml/htmlcurstyle.c |  425 +++++++++++++++++++++++++++++++++++++++++++-
 dlls/mshtml/tests/dom.c    |    3 +
 2 files changed, 426 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlcurstyle.c b/dlls/mshtml/htmlcurstyle.c
index 8bd1f16..3082bb0 100644
--- a/dlls/mshtml/htmlcurstyle.c
+++ b/dlls/mshtml/htmlcurstyle.c
@@ -34,7 +34,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
 struct HTMLCurrentStyle {
     DispatchEx dispex;
-    IHTMLCurrentStyle IHTMLCurrentStyle_iface;
+    IHTMLCurrentStyle  IHTMLCurrentStyle_iface;
+    IHTMLCurrentStyle2 IHTMLCurrentStyle2_iface;
+    IHTMLCurrentStyle3 IHTMLCurrentStyle3_iface;
+    IHTMLCurrentStyle4 IHTMLCurrentStyle4_iface;
 
     LONG ref;
 
@@ -46,6 +49,21 @@ static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle(IHTMLCurrentStyle *i
     return CONTAINING_RECORD(iface, HTMLCurrentStyle, IHTMLCurrentStyle_iface);
 }
 
+static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle2(IHTMLCurrentStyle2 *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLCurrentStyle, IHTMLCurrentStyle2_iface);
+}
+
+static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle3(IHTMLCurrentStyle3 *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLCurrentStyle, IHTMLCurrentStyle3_iface);
+}
+
+static inline HTMLCurrentStyle *impl_from_IHTMLCurrentStyle4(IHTMLCurrentStyle4 *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLCurrentStyle, IHTMLCurrentStyle4_iface);
+}
+
 static HRESULT WINAPI HTMLCurrentStyle_QueryInterface(IHTMLCurrentStyle *iface, REFIID riid, void **ppv)
 {
     HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
@@ -58,6 +76,15 @@ static HRESULT WINAPI HTMLCurrentStyle_QueryInterface(IHTMLCurrentStyle *iface,
     }else if(IsEqualGUID(&IID_IHTMLCurrentStyle, riid)) {
         TRACE("(%p)->(IID_IHTMLCurrentStyle %p)\n", This, ppv);
         *ppv = &This->IHTMLCurrentStyle_iface;
+    }else if(IsEqualGUID(&IID_IHTMLCurrentStyle2, riid)) {
+        TRACE("(%p)->(IID_IHTMLCurrentStyle2 %p)\n", This, ppv);
+        *ppv = &This->IHTMLCurrentStyle2_iface;
+    }else if(IsEqualGUID(&IID_IHTMLCurrentStyle3, riid)) {
+        TRACE("(%p)->(IID_IHTMLCurrentStyle3 %p)\n", This, ppv);
+        *ppv = &This->IHTMLCurrentStyle3_iface;
+    }else if(IsEqualGUID(&IID_IHTMLCurrentStyle4, riid)) {
+        TRACE("(%p)->(IID_IHTMLCurrentStyle4 %p)\n", This, ppv);
+        *ppv = &This->IHTMLCurrentStyle4_iface;
     }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
         return *ppv ? S_OK : E_NOINTERFACE;
     }
@@ -875,6 +902,397 @@ static const IHTMLCurrentStyleVtbl HTMLCurrentStyleVtbl = {
     HTMLCurrentStyle_get_textTransform
 };
 
+/* IHTMLCurrentStyle2 */
+static HRESULT WINAPI HTMLCurrentStyle2_QueryInterface(IHTMLCurrentStyle2 *iface, REFIID riid, void **ppv)
+{
+   HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+
+   return IHTMLCurrentStyle_QueryInterface(&This->IHTMLCurrentStyle_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLCurrentStyle2_AddRef(IHTMLCurrentStyle2 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);    
+
+    return IHTMLCurrentStyle_AddRef(&This->IHTMLCurrentStyle_iface);
+}
+
+static ULONG WINAPI HTMLCurrentStyle2_Release(IHTMLCurrentStyle2 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    return IHTMLCurrentStyle_Release(&This->IHTMLCurrentStyle_iface);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_GetTypeInfoCount(IHTMLCurrentStyle2 *iface, UINT *pctinfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_GetTypeInfo(IHTMLCurrentStyle2 *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_GetIDsOfNames(IHTMLCurrentStyle2 *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
+            lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_Invoke(IHTMLCurrentStyle2 *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
+            wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_layoutFlow(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_wordWrap(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_textUnderlinePosition(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_hasLayout(IHTMLCurrentStyle2 *iface, VARIANT_BOOL *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarBaseColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarFaceColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbar3dLightColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarShadowColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarHighlightColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarDarkShadowColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarArrowColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_scrollbarTrackColor(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_writingMode(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_zoom(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_filter(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_textAlignLast(IHTMLCurrentStyle2 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_textKashidaSpace(IHTMLCurrentStyle2 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle2_get_isBlock(IHTMLCurrentStyle2 *iface, VARIANT_BOOL *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle2(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IHTMLCurrentStyle2Vtbl HTMLCurrentStyle2Vtbl = {
+    HTMLCurrentStyle2_QueryInterface,
+    HTMLCurrentStyle2_AddRef,
+    HTMLCurrentStyle2_Release,
+    HTMLCurrentStyle2_GetTypeInfoCount,
+    HTMLCurrentStyle2_GetTypeInfo,
+    HTMLCurrentStyle2_GetIDsOfNames,
+    HTMLCurrentStyle2_Invoke,
+    HTMLCurrentStyle2_get_layoutFlow,
+    HTMLCurrentStyle2_get_wordWrap,
+    HTMLCurrentStyle2_get_textUnderlinePosition,
+    HTMLCurrentStyle2_get_hasLayout,
+    HTMLCurrentStyle2_get_scrollbarBaseColor,
+    HTMLCurrentStyle2_get_scrollbarFaceColor,
+    HTMLCurrentStyle2_get_scrollbar3dLightColor,
+    HTMLCurrentStyle2_get_scrollbarShadowColor,
+    HTMLCurrentStyle2_get_scrollbarHighlightColor,
+    HTMLCurrentStyle2_get_scrollbarDarkShadowColor,
+    HTMLCurrentStyle2_get_scrollbarArrowColor,
+    HTMLCurrentStyle2_get_scrollbarTrackColor,
+    HTMLCurrentStyle2_get_writingMode,
+    HTMLCurrentStyle2_get_zoom,
+    HTMLCurrentStyle2_get_filter,
+    HTMLCurrentStyle2_get_textAlignLast,
+    HTMLCurrentStyle2_get_textKashidaSpace,
+    HTMLCurrentStyle2_get_isBlock
+};
+
+/* IHTMLCurrentStyle3 */
+static HRESULT WINAPI HTMLCurrentStyle3_QueryInterface(IHTMLCurrentStyle3 *iface, REFIID riid, void **ppv)
+{
+   HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+
+   return IHTMLCurrentStyle_QueryInterface(&This->IHTMLCurrentStyle_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLCurrentStyle3_AddRef(IHTMLCurrentStyle3 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);    
+
+    return IHTMLCurrentStyle_AddRef(&This->IHTMLCurrentStyle_iface);
+}
+
+static ULONG WINAPI HTMLCurrentStyle3_Release(IHTMLCurrentStyle3 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    return IHTMLCurrentStyle_Release(&This->IHTMLCurrentStyle_iface);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_GetTypeInfoCount(IHTMLCurrentStyle3 *iface, UINT *pctinfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_GetTypeInfo(IHTMLCurrentStyle3 *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_GetIDsOfNames(IHTMLCurrentStyle3 *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
+            lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_Invoke(IHTMLCurrentStyle3 *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
+            wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_get_textOverflow(IHTMLCurrentStyle3 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_get_minHeight(IHTMLCurrentStyle3 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_get_wordSpacing(IHTMLCurrentStyle3 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle3_get_whiteSpace(IHTMLCurrentStyle3 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle3(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IHTMLCurrentStyle3Vtbl HTMLCurrentStyle3Vtbl = {
+    HTMLCurrentStyle3_QueryInterface,
+    HTMLCurrentStyle3_AddRef,
+    HTMLCurrentStyle3_Release,
+    HTMLCurrentStyle3_GetTypeInfoCount,
+    HTMLCurrentStyle3_GetTypeInfo,
+    HTMLCurrentStyle3_GetIDsOfNames,
+    HTMLCurrentStyle3_Invoke,
+    HTMLCurrentStyle3_get_textOverflow,
+    HTMLCurrentStyle3_get_minHeight,
+    HTMLCurrentStyle3_get_wordSpacing,
+    HTMLCurrentStyle3_get_whiteSpace
+};
+
+/* IHTMLCurrentStyle4 */
+static HRESULT WINAPI HTMLCurrentStyle4_QueryInterface(IHTMLCurrentStyle4 *iface, REFIID riid, void **ppv)
+{
+   HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+
+   return IHTMLCurrentStyle_QueryInterface(&This->IHTMLCurrentStyle_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLCurrentStyle4_AddRef(IHTMLCurrentStyle4 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+
+    return IHTMLCurrentStyle_AddRef(&This->IHTMLCurrentStyle_iface);
+}
+
+static ULONG WINAPI HTMLCurrentStyle4_Release(IHTMLCurrentStyle4 *iface)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    return IHTMLCurrentStyle_Release(&This->IHTMLCurrentStyle_iface);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_GetTypeInfoCount(IHTMLCurrentStyle4 *iface, UINT *pctinfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_GetTypeInfo(IHTMLCurrentStyle4 *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_GetIDsOfNames(IHTMLCurrentStyle4 *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
+            lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_Invoke(IHTMLCurrentStyle4 *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
+            wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_msInterpolationMode(IHTMLCurrentStyle4 *iface, BSTR *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_get_maxHeight(IHTMLCurrentStyle4 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_get_minWidth(IHTMLCurrentStyle4 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLCurrentStyle4_get_maxWidth(IHTMLCurrentStyle4 *iface, VARIANT *p)
+{
+    HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle4(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IHTMLCurrentStyle4Vtbl HTMLCurrentStyle4Vtbl = {
+    HTMLCurrentStyle4_QueryInterface,
+    HTMLCurrentStyle4_AddRef,
+    HTMLCurrentStyle4_Release,
+    HTMLCurrentStyle4_GetTypeInfoCount,
+    HTMLCurrentStyle4_GetTypeInfo,
+    HTMLCurrentStyle4_GetIDsOfNames,
+    HTMLCurrentStyle4_Invoke,
+    HTMLCurrentStyle4_msInterpolationMode,
+    HTMLCurrentStyle4_get_maxHeight,
+    HTMLCurrentStyle4_get_minWidth,
+    HTMLCurrentStyle4_get_maxWidth
+};
+
 static const tid_t HTMLCurrentStyle_iface_tids[] = {
     IHTMLCurrentStyle_tid,
     IHTMLCurrentStyle2_tid,
@@ -922,7 +1340,10 @@ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p)
         return E_OUTOFMEMORY;
     }
 
-    ret->IHTMLCurrentStyle_iface.lpVtbl = &HTMLCurrentStyleVtbl;
+    ret->IHTMLCurrentStyle_iface.lpVtbl  = &HTMLCurrentStyleVtbl;
+    ret->IHTMLCurrentStyle2_iface.lpVtbl = &HTMLCurrentStyle2Vtbl;
+    ret->IHTMLCurrentStyle3_iface.lpVtbl = &HTMLCurrentStyle3Vtbl;
+    ret->IHTMLCurrentStyle4_iface.lpVtbl = &HTMLCurrentStyle4Vtbl;
     ret->ref = 1;
     ret->nsstyle = nsstyle;
 
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index d02f5ec..25d462b 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -363,6 +363,9 @@ static const IID * const cstyle_iids[] = {
     &IID_IDispatch,
     &IID_IDispatchEx,
     &IID_IHTMLCurrentStyle,
+    &IID_IHTMLCurrentStyle2,
+    &IID_IHTMLCurrentStyle3,
+    &IID_IHTMLCurrentStyle4,
     NULL
 };
 
-- 
1.7.4.1

