diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index e5ae4e0212b..defa10a4625 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -3791,6 +3791,84 @@ static const IHTMLElement4Vtbl HTMLElement4Vtbl = {
HTMLElement4_get_onfocusout
};
+static inline HTMLElement *impl_from_IHTMLUniqueName(IHTMLUniqueName *iface)
+{
+ return CONTAINING_RECORD(iface, HTMLElement, IHTMLUniqueName_iface);
+}
+
+static HRESULT WINAPI HTMLUniqueName_QueryInterface(IHTMLUniqueName *iface, REFIID riid, void **ppv)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IHTMLElement_QueryInterface(&This->IHTMLElement_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLUniqueName_AddRef(IHTMLUniqueName *iface)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IHTMLElement_AddRef(&This->IHTMLElement_iface);
+}
+
+static ULONG WINAPI HTMLUniqueName_Release(IHTMLUniqueName *iface)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IHTMLElement_Release(&This->IHTMLElement_iface);
+}
+
+static HRESULT WINAPI HTMLUniqueName_GetTypeInfoCount(IHTMLUniqueName *iface, UINT *pctinfo)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IDispatchEx_GetTypeInfoCount(&This->node.event_target.dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLUniqueName_GetTypeInfo(IHTMLUniqueName *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IDispatchEx_GetTypeInfo(&This->node.event_target.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI HTMLUniqueName_GetIDsOfNames(IHTMLUniqueName *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IDispatchEx_GetIDsOfNames(&This->node.event_target.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
+ lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLUniqueName_Invoke(IHTMLUniqueName *iface, DISPID dispIdMember, REFIID riid,
+ LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ return IDispatchEx_Invoke(&This->node.event_target.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
+ wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLUniqueName_get_uniqueNumber(IHTMLUniqueName *iface, LONG *p)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ FIXME("(%p)->(%p)\n", This, p);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLUniqueName_get_uniqueID(IHTMLUniqueName *iface, BSTR *p)
+{
+ HTMLElement *This = impl_from_IHTMLUniqueName(iface);
+ FIXME("(%p)->(%p)\n", This, p);
+ return E_NOTIMPL;
+}
+
+static const IHTMLUniqueNameVtbl HTMLUniqueNameVtbl = {
+ HTMLUniqueName_QueryInterface,
+ HTMLUniqueName_AddRef,
+ HTMLUniqueName_Release,
+ HTMLUniqueName_GetTypeInfoCount,
+ HTMLUniqueName_GetTypeInfo,
+ HTMLUniqueName_GetIDsOfNames,
+ HTMLUniqueName_Invoke,
+ HTMLUniqueName_get_uniqueNumber,
+ HTMLUniqueName_get_uniqueID
+};
+
static inline HTMLElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface)
{
return CONTAINING_RECORD(iface, HTMLElement, node);
@@ -3812,6 +3890,8 @@ HRESULT HTMLElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
*ppv = &This->IHTMLElement3_iface;
}else if(IsEqualGUID(&IID_IHTMLElement4, riid)) {
*ppv = &This->IHTMLElement4_iface;
+ }else if(IsEqualGUID(&IID_IHTMLUniqueName, riid)) {
+ *ppv = &This->IHTMLUniqueName_iface;
}else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
*ppv = &This->cp_container.IConnectionPointContainer_iface;
}else {
@@ -4072,6 +4152,7 @@ void HTMLElement_Init(HTMLElement *This, HTMLDocumentNode *doc, nsIDOMHTMLElemen
This->IHTMLElement2_iface.lpVtbl = &HTMLElement2Vtbl;
This->IHTMLElement3_iface.lpVtbl = &HTMLElement3Vtbl;
This->IHTMLElement4_iface.lpVtbl = &HTMLElement4Vtbl;
+ This->IHTMLUniqueName_iface.lpVtbl = &HTMLUniqueNameVtbl;
if(dispex_data && !dispex_data->vtbl)
dispex_data->vtbl = &HTMLElement_dispex_vtbl;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2b8fa827978..b613f70c35c 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -706,6 +706,7 @@ typedef struct {
IHTMLElement2 IHTMLElement2_iface;
IHTMLElement3 IHTMLElement3_iface;
IHTMLElement4 IHTMLElement4_iface;
+ IHTMLUniqueName IHTMLUniqueName_iface;
nsIDOMHTMLElement *nselem;
HTMLStyle *style;
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index e90fc708d52..9a9cc85022e 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -179,6 +179,7 @@ static const IID * const doc_obj_iids[] = {
&IID_IHTMLElement2, \
&IID_IHTMLElement3, \
&IID_IHTMLElement4, \
+ &IID_IHTMLUniqueName, \
&IID_IDispatchEx
static const IID * const elem_iids[] = {