mshtml: Added IHTMLButtonElement::form property implementation.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
5a07f80ebe
commit
a963b6c8c8
|
@ -45,6 +45,32 @@ typedef struct {
|
|||
|
||||
static const WCHAR forW[] = {'f','o','r',0};
|
||||
|
||||
static HRESULT return_nsform(HTMLElement *elem, nsIDOMHTMLFormElement *nsform, IHTMLFormElement **p)
|
||||
{
|
||||
nsIDOMNode *form_node;
|
||||
HTMLDOMNode *node;
|
||||
nsresult nsres;
|
||||
HRESULT hres;
|
||||
|
||||
if(!nsform) {
|
||||
*p = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node);
|
||||
nsIDOMHTMLFormElement_Release(nsform);
|
||||
assert(nsres == NS_OK);
|
||||
|
||||
hres = get_node(elem->node.doc, form_node, TRUE, &node);
|
||||
nsIDOMNode_Release(form_node);
|
||||
if (FAILED(hres))
|
||||
return hres;
|
||||
|
||||
hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p);
|
||||
node_release(node);
|
||||
return hres;
|
||||
}
|
||||
|
||||
static inline HTMLInputElement *impl_from_IHTMLInputElement(IHTMLInputElement *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, HTMLInputElement, IHTMLInputElement_iface);
|
||||
|
@ -256,33 +282,17 @@ static HRESULT WINAPI HTMLInputElement_get_form(IHTMLInputElement *iface, IHTMLF
|
|||
{
|
||||
HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
|
||||
nsIDOMHTMLFormElement *nsform;
|
||||
nsIDOMNode *form_node;
|
||||
HTMLDOMNode *node;
|
||||
HRESULT hres;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsres = nsIDOMHTMLInputElement_GetForm(This->nsinput, &nsform);
|
||||
if (NS_FAILED(nsres) || nsform == NULL) {
|
||||
if (NS_FAILED(nsres)) {
|
||||
ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform);
|
||||
*p = NULL;
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node);
|
||||
nsIDOMHTMLFormElement_Release(nsform);
|
||||
assert(nsres == NS_OK);
|
||||
|
||||
hres = get_node(This->element.node.doc, form_node, TRUE, &node);
|
||||
nsIDOMNode_Release(form_node);
|
||||
if (FAILED(hres))
|
||||
return hres;
|
||||
|
||||
hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p);
|
||||
|
||||
node_release(node);
|
||||
return hres;
|
||||
return return_nsform(&This->element, nsform, p);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLInputElement_put_size(IHTMLInputElement *iface, LONG v)
|
||||
|
@ -1746,8 +1756,18 @@ static HRESULT WINAPI HTMLButtonElement_get_disabled(IHTMLButtonElement *iface,
|
|||
static HRESULT WINAPI HTMLButtonElement_get_form(IHTMLButtonElement *iface, IHTMLFormElement **p)
|
||||
{
|
||||
HTMLButtonElement *This = impl_from_IHTMLButtonElement(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMHTMLFormElement *nsform;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsres = nsIDOMHTMLButtonElement_GetForm(This->nsbutton, &nsform);
|
||||
if (NS_FAILED(nsres)) {
|
||||
ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return return_nsform(&This->element, nsform, p);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLButtonElement_createTextRange(IHTMLButtonElement *iface, IHTMLTxtRange **range)
|
||||
|
|
|
@ -4550,7 +4550,7 @@ static void test_select_form(IUnknown *uselect, IUnknown *uform)
|
|||
ok(hres == S_OK, "get_form failed: %08x\n", hres);
|
||||
ok(form != NULL, "form == NULL\n");
|
||||
|
||||
test_form_length((IUnknown*)form, 1);
|
||||
test_form_length((IUnknown*)form, 2);
|
||||
test_form_elements((IUnknown*)form);
|
||||
test_form_name((IUnknown*)form, "form_name");
|
||||
|
||||
|
@ -6976,14 +6976,33 @@ static void _set_button_value(unsigned line, IHTMLElement *elem, const char *val
|
|||
_test_button_value(line, elem, value);
|
||||
}
|
||||
|
||||
#define get_button_form(a) _get_button_form(__LINE__,a)
|
||||
static IHTMLFormElement *_get_button_form(unsigned line, IHTMLElement *elem)
|
||||
{
|
||||
IHTMLButtonElement *button = _get_button_iface(line, (IUnknown*)elem);
|
||||
IHTMLFormElement *form;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLButtonElement_get_form(button, &form);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_form failed: %08x\n", hres);
|
||||
IHTMLButtonElement_Release(button);
|
||||
|
||||
return form;
|
||||
}
|
||||
|
||||
static void test_button_elem(IHTMLElement *elem)
|
||||
{
|
||||
IHTMLFormElement *form;
|
||||
|
||||
test_button_name(elem, NULL);
|
||||
set_button_name(elem, "button name");
|
||||
test_button_type(elem, "submit");
|
||||
test_button_value(elem, NULL);
|
||||
set_button_value(elem, "val");
|
||||
|
||||
form = get_button_form(elem);
|
||||
ok(!form, "form != NULL\n");
|
||||
|
||||
test_elem_istextedit(elem, VARIANT_TRUE);
|
||||
}
|
||||
|
||||
|
@ -9062,10 +9081,12 @@ static void test_elems2(IHTMLDocument2 *doc)
|
|||
}
|
||||
|
||||
test_elem_set_innerhtml((IUnknown*)div,
|
||||
"<form id=\"form\" name=\"form_name\"><select id=\"sform\"><option id=\"oform\"></option></select></form>");
|
||||
"<form id=\"form\" name=\"form_name\"><select id=\"sform\"><option id=\"oform\"></option></select><button id=\"btnid\"></button></form>");
|
||||
elem = get_elem_by_id(doc, "sform", TRUE);
|
||||
elem2 = get_elem_by_id(doc, "form", TRUE);
|
||||
if(elem && elem2) {
|
||||
IHTMLFormElement *form;
|
||||
|
||||
test_select_form((IUnknown*)elem, (IUnknown*)elem2);
|
||||
IHTMLElement_Release(elem);
|
||||
|
||||
|
@ -9074,6 +9095,14 @@ static void test_elems2(IHTMLDocument2 *doc)
|
|||
test_option_form((IUnknown*)elem, (IUnknown*)elem2);
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
elem = get_elem_by_id(doc, "btnid", TRUE);
|
||||
|
||||
form = get_button_form(elem);
|
||||
ok(iface_cmp((IUnknown*)form, (IUnknown*)elem2), "form != elem2\n");
|
||||
IHTMLFormElement_Release(form);
|
||||
|
||||
IHTMLElement_Release(elem);
|
||||
IHTMLElement_Release(elem2);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue