Commit 6c637ab9 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Added support for IHTMLDOMAttribute::nodeValue property on detached attributes.

parent 4e9324c4
...@@ -83,6 +83,7 @@ static ULONG WINAPI HTMLDOMAttribute_Release(IHTMLDOMAttribute *iface) ...@@ -83,6 +83,7 @@ static ULONG WINAPI HTMLDOMAttribute_Release(IHTMLDOMAttribute *iface)
if(!ref) { if(!ref) {
assert(!This->elem); assert(!This->elem);
release_dispex(&This->dispex); release_dispex(&This->dispex);
VariantClear(&This->value);
heap_free(This->name); heap_free(This->name);
heap_free(This); heap_free(This);
} }
...@@ -150,10 +151,8 @@ static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, V ...@@ -150,10 +151,8 @@ static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, V
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v)); TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
if(!This->elem) { if(!This->elem)
FIXME("NULL This->elem\n"); return VariantCopy(&This->value, &v);
return E_UNEXPECTED;
}
memset(&ei, 0, sizeof(ei)); memset(&ei, 0, sizeof(ei));
...@@ -167,10 +166,8 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, V ...@@ -167,10 +166,8 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, V
TRACE("(%p)->(%p)\n", This, p); TRACE("(%p)->(%p)\n", This, p);
if(!This->elem) { if(!This->elem)
FIXME("NULL This->elem\n"); return VariantCopy(p, &This->value);
return E_UNEXPECTED;
}
return get_elem_attr_value_by_dispid(This->elem, This->dispid, 0, p); return get_elem_attr_value_by_dispid(This->elem, This->dispid, 0, p);
} }
......
...@@ -943,7 +943,9 @@ typedef struct { ...@@ -943,7 +943,9 @@ typedef struct {
LONG ref; LONG ref;
/* name and value are valid only for detached attributes (when elem == NULL). */
WCHAR *name; WCHAR *name;
VARIANT value;
HTMLElement *elem; HTMLElement *elem;
DISPID dispid; DISPID dispid;
......
...@@ -4790,6 +4790,7 @@ static void _get_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, VARIANT ...@@ -4790,6 +4790,7 @@ static void _get_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, VARIANT
{ {
HRESULT hres; HRESULT hres;
V_VT(v) = VT_EMPTY;
hres = IHTMLDOMAttribute_get_nodeValue(attr, v); hres = IHTMLDOMAttribute_get_nodeValue(attr, v);
ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x\n", hres); ok_(__FILE__,line) (hres == S_OK, "get_nodeValue failed: %08x\n", hres);
ok_(__FILE__,line) (V_VT(v) == vt, "vt=%d, expected %d\n", V_VT(v), vt); ok_(__FILE__,line) (V_VT(v) == vt, "vt=%d, expected %d\n", V_VT(v), vt);
...@@ -8914,6 +8915,8 @@ static void test_create_elems(IHTMLDocument2 *doc) ...@@ -8914,6 +8915,8 @@ static void test_create_elems(IHTMLDocument2 *doc)
ok(hres == S_OK, "createAttribute dailed: %08x\n", hres); ok(hres == S_OK, "createAttribute dailed: %08x\n", hres);
SysFreeString(str); SysFreeString(str);
if(SUCCEEDED(hres)) { if(SUCCEEDED(hres)) {
VARIANT v;
test_disp((IUnknown*)attr, &DIID_DispHTMLDOMAttribute, "[object]"); test_disp((IUnknown*)attr, &DIID_DispHTMLDOMAttribute, "[object]");
test_ifaces((IUnknown*)attr, attr_iids); test_ifaces((IUnknown*)attr, attr_iids);
test_no_iface((IUnknown*)attr, &IID_IHTMLDOMNode); test_no_iface((IUnknown*)attr, &IID_IHTMLDOMNode);
...@@ -8921,6 +8924,19 @@ static void test_create_elems(IHTMLDocument2 *doc) ...@@ -8921,6 +8924,19 @@ static void test_create_elems(IHTMLDocument2 *doc)
test_attr_node_name(attr, "Test"); test_attr_node_name(attr, "Test");
test_attr_expando(attr, VARIANT_FALSE); test_attr_expando(attr, VARIANT_FALSE);
get_attr_node_value(attr, &v, VT_EMPTY);
V_VT(&v) = VT_I4;
V_I4(&v) = 1;
put_attr_node_value(attr, v);
get_attr_node_value(attr, &v, VT_I4);
ok(V_I4(&v) == 1, "nodeValue = %d\n", V_I4(&v));
V_VT(&v) = VT_EMPTY;
put_attr_node_value(attr, v);
get_attr_node_value(attr, &v, VT_EMPTY);
IHTMLDOMAttribute_Release(attr); IHTMLDOMAttribute_Release(attr);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment