diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 516a0d0393b..ccdad8c8d15 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -135,8 +135,40 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr VARIANT AttributeValue, LONG lFlags) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%s . %08x)\n", This, debugstr_w(strAttributeName), lFlags); - return E_NOTIMPL; + nsAString attr_str; + nsAString value_str; + nsresult nsres; + HRESULT hres; + VARIANT AttributeValueChanged; + + WARN("(%p)->(%s . %08x)\n", This, debugstr_w(strAttributeName), lFlags); + + VariantInit(&AttributeValueChanged); + + hres = VariantChangeType(&AttributeValueChanged, &AttributeValue, 0, VT_BSTR); + if (FAILED(hres)) { + WARN("couldn't convert input attribute value %d to VT_BSTR\n", V_VT(&AttributeValue)); + return hres; + } + + nsAString_Init(&attr_str, strAttributeName); + nsAString_Init(&value_str, V_BSTR(&AttributeValueChanged)); + + TRACE("setting %s to %s\n", debugstr_w(strAttributeName), + debugstr_w(V_BSTR(&AttributeValueChanged))); + + nsres = nsIDOMHTMLElement_SetAttribute(This->nselem, &attr_str, &value_str); + nsAString_Finish(&attr_str); + nsAString_Finish(&value_str); + + if(NS_SUCCEEDED(nsres)) { + hres = S_OK; + }else { + ERR("SetAttribute failed: %08x\n", nsres); + hres = E_FAIL; + } + + return hres; } static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttributeName,