diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c
index d3fb71dae72..9108cc4ca8b 100644
--- a/dlls/mshtml/htmlstyleelem.c
+++ b/dlls/mshtml/htmlstyleelem.c
@@ -37,6 +37,7 @@ struct HTMLStyleElement {
HTMLElement element;
IHTMLStyleElement IHTMLStyleElement_iface;
+ IHTMLStyleElement2 IHTMLStyleElement2_iface;
nsIDOMHTMLStyleElement *nsstyle;
IHTMLStyleSheet *style_sheet;
@@ -282,6 +283,82 @@ static const IHTMLStyleElementVtbl HTMLStyleElementVtbl = {
HTMLStyleElement_get_media
};
+static inline HTMLStyleElement *impl_from_IHTMLStyleElement2(IHTMLStyleElement2 *iface)
+{
+ return CONTAINING_RECORD(iface, HTMLStyleElement, IHTMLStyleElement2_iface);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_QueryInterface(IHTMLStyleElement2 *iface,
+ REFIID riid, void **ppv)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+
+ return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLStyleElement2_AddRef(IHTMLStyleElement2 *iface)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+
+ return IHTMLDOMNode_AddRef(&This->element.node.IHTMLDOMNode_iface);
+}
+
+static ULONG WINAPI HTMLStyleElement2_Release(IHTMLStyleElement2 *iface)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+
+ return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_GetTypeInfoCount(IHTMLStyleElement2 *iface, UINT *pctinfo)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+ return IDispatchEx_GetTypeInfoCount(&This->element.node.event_target.dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_GetTypeInfo(IHTMLStyleElement2 *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+ return IDispatchEx_GetTypeInfo(&This->element.node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid,
+ ppTInfo);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_GetIDsOfNames(IHTMLStyleElement2 *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+ return IDispatchEx_GetIDsOfNames(&This->element.node.event_target.dispex.IDispatchEx_iface, riid, rgszNames,
+ cNames, lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_Invoke(IHTMLStyleElement2 *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+ VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+ return IDispatchEx_Invoke(&This->element.node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid,
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLStyleElement2_get_sheet(IHTMLStyleElement2 *iface, IHTMLStyleSheet **p)
+{
+ HTMLStyleElement *This = impl_from_IHTMLStyleElement2(iface);
+ TRACE("(%p)->(%p)\n", This, p);
+ return IHTMLStyleElement_get_styleSheet(&This->IHTMLStyleElement_iface, p);
+}
+
+static const IHTMLStyleElement2Vtbl HTMLStyleElement2Vtbl = {
+ HTMLStyleElement2_QueryInterface,
+ HTMLStyleElement2_AddRef,
+ HTMLStyleElement2_Release,
+ HTMLStyleElement2_GetTypeInfoCount,
+ HTMLStyleElement2_GetTypeInfo,
+ HTMLStyleElement2_GetIDsOfNames,
+ HTMLStyleElement2_Invoke,
+ HTMLStyleElement2_get_sheet
+};
+
static inline HTMLStyleElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface)
{
return CONTAINING_RECORD(iface, HTMLStyleElement, element.node);
@@ -300,6 +377,9 @@ static HRESULT HTMLStyleElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
}else if(IsEqualGUID(&IID_IHTMLStyleElement, riid)) {
TRACE("(%p)->(IID_IHTMLStyleElement %p)\n", This, ppv);
*ppv = &This->IHTMLStyleElement_iface;
+ }else if(IsEqualGUID(&IID_IHTMLStyleElement2, riid)) {
+ TRACE("(%p)->(IID_IHTMLStyleElement2 %p)\n", This, ppv);
+ *ppv = &This->IHTMLStyleElement2_iface;
}else {
return HTMLElement_QI(&This->element.node, riid, ppv);
}
@@ -382,6 +462,7 @@ HRESULT HTMLStyleElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HT
return E_OUTOFMEMORY;
ret->IHTMLStyleElement_iface.lpVtbl = &HTMLStyleElementVtbl;
+ ret->IHTMLStyleElement2_iface.lpVtbl = &HTMLStyleElement2Vtbl;
ret->element.node.vtbl = &HTMLStyleElementImplVtbl;
HTMLElement_Init(&ret->element, doc, nselem, &HTMLStyleElement_dispex);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2a269df5e4e..d6b71b0521b 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -236,6 +236,7 @@ typedef struct EventTarget EventTarget;
XIID(IHTMLStyle5) \
XIID(IHTMLStyle6) \
XIID(IHTMLStyleElement) \
+ XIID(IHTMLStyleElement2) \
XIID(IHTMLStyleSheet) \
XIID(IHTMLStyleSheetRule) \
XIID(IHTMLStyleSheetRulesCollection) \
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 1253e9cdea8..67d79780907 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -10100,6 +10100,7 @@ static void test_null_write(IHTMLDocument2 *doc)
static void test_create_stylesheet(IHTMLDocument2 *doc)
{
IHTMLStyleSheet *stylesheet, *stylesheet2;
+ IHTMLStyleElement2 *style_elem2;
IHTMLStyleElement *style_elem;
IHTMLElement *doc_elem, *elem;
HRESULT hres;
@@ -10142,8 +10143,18 @@ static void test_create_stylesheet(IHTMLDocument2 *doc)
ok(hres == S_OK, "get_styleSheet failed: %08x\n", hres);
ok(stylesheet2 != NULL, "stylesheet2 == NULL\n");
ok(iface_cmp((IUnknown*)stylesheet, (IUnknown*)stylesheet2), "stylesheet != stylesheet2\n");
-
IHTMLStyleSheet_Release(stylesheet2);
+
+ hres = IHTMLStyleElement_QueryInterface(style_elem, &IID_IHTMLStyleElement2, (void**)&style_elem2);
+ ok(hres == S_OK, "Could not get IHTMLStyleElement2: %08x\n", hres);
+
+ hres = IHTMLStyleElement2_get_sheet(style_elem2, &stylesheet2);
+ ok(hres == S_OK, "get_styleSheet failed: %08x\n", hres);
+ ok(stylesheet2 != NULL, "stylesheet2 == NULL\n");
+ ok(iface_cmp((IUnknown*)stylesheet, (IUnknown*)stylesheet2), "stylesheet != stylesheet2\n");
+ IHTMLStyleSheet_Release(stylesheet2);
+
+ IHTMLStyleElement2_Release(style_elem2);
IHTMLStyleSheet_Release(stylesheet);
IHTMLStyleElement_Release(style_elem);