Module: wine Branch: master Commit: ad1599f276e1b396bdbb8bdd93917bd1e04302bd URL: https://source.winehq.org/git/wine.git/?a=commit;h=ad1599f276e1b396bdbb8bdd9...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 20 13:25:44 2018 +0100
mshtml: Share more code between get_form implementations.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlform.c | 32 ++++++++++++++++++++++++++++++++ dlls/mshtml/htmlinput.c | 40 ++-------------------------------------- dlls/mshtml/htmloption.c | 28 +--------------------------- dlls/mshtml/htmlselect.c | 28 +--------------------------- dlls/mshtml/htmltextarea.c | 23 +---------------------- dlls/mshtml/mshtml_private.h | 1 + 6 files changed, 38 insertions(+), 114 deletions(-)
diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 27a82fa..c22fa9e 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -42,6 +42,38 @@ struct HTMLFormElement { nsIDOMHTMLFormElement *nsform; };
+HRESULT return_nsform(nsresult nsres, nsIDOMHTMLFormElement *form, IHTMLFormElement **p) +{ + nsIDOMNode *form_node; + HTMLDOMNode *node; + HRESULT hres; + + if (NS_FAILED(nsres)) { + ERR("GetForm failed: %08x\n", nsres); + return E_FAIL; + } + + if(!form) { + *p = NULL; + TRACE("NULL\n"); + return S_OK; + } + + nsres = nsIDOMHTMLFormElement_QueryInterface(form, &IID_nsIDOMNode, (void**)&form_node); + nsIDOMHTMLFormElement_Release(form); + assert(nsres == NS_OK); + + hres = get_node(form_node, TRUE, &node); + nsIDOMNode_Release(form_node); + if (FAILED(hres)) + return hres; + + TRACE("node %p\n", node); + hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLFormElement, (void**)p); + node_release(node); + return hres; +} + static HRESULT htmlform_item(HTMLFormElement *This, int i, IDispatch **ret) { nsIDOMHTMLCollection *elements; diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 9c44864..1ae1f8a 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -46,32 +46,6 @@ struct HTMLInputElement {
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(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); @@ -288,12 +262,7 @@ static HRESULT WINAPI HTMLInputElement_get_form(IHTMLInputElement *iface, IHTMLF TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMHTMLInputElement_GetForm(This->nsinput, &nsform); - if (NS_FAILED(nsres)) { - ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform); - return E_FAIL; - } - - return return_nsform(&This->element, nsform, p); + return return_nsform(nsres, nsform, p); }
static HRESULT WINAPI HTMLInputElement_put_size(IHTMLInputElement *iface, LONG v) @@ -1905,12 +1874,7 @@ static HRESULT WINAPI HTMLButtonElement_get_form(IHTMLButtonElement *iface, IHTM 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); + return return_nsform(nsres, nsform, p); }
static HRESULT WINAPI HTMLButtonElement_createTextRange(IHTMLButtonElement *iface, IHTMLTxtRange **range) diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index a2bf073..e337be9 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -308,9 +308,6 @@ static HRESULT WINAPI HTMLOptionElement_get_form(IHTMLOptionElement *iface, IHTM { HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface); nsIDOMHTMLFormElement *nsform; - nsIDOMNode *form_node; - HTMLDOMNode *node; - HRESULT hres; nsresult nsres;
TRACE("(%p)->(%p)\n", This, p); @@ -319,30 +316,7 @@ static HRESULT WINAPI HTMLOptionElement_get_form(IHTMLOptionElement *iface, IHTM return E_POINTER;
nsres = nsIDOMHTMLOptionElement_GetForm(This->nsoption, &nsform); - if (NS_FAILED(nsres)) { - ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform); - *p = NULL; - return E_FAIL; - } - if (nsform == NULL) { - TRACE("nsform not found\n"); - *p = NULL; - return S_OK; - } - - nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node); - nsIDOMHTMLFormElement_Release(nsform); - assert(nsres == NS_OK); - - hres = get_node(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(nsres, nsform, p); }
static const IHTMLOptionElementVtbl HTMLOptionElementVtbl = { diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 320cf5f..a1d9b05 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -372,9 +372,6 @@ static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTM { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsIDOMHTMLFormElement *nsform; - nsIDOMNode *form_node; - HTMLDOMNode *node; - HRESULT hres; nsresult nsres;
TRACE("(%p)->(%p)\n", This, p); @@ -383,30 +380,7 @@ static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTM return E_POINTER;
nsres = nsIDOMHTMLSelectElement_GetForm(This->nsselect, &nsform); - if (NS_FAILED(nsres)) { - ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform); - *p = NULL; - return E_FAIL; - } - if (nsform == NULL) { - TRACE("nsform not found\n"); - *p = NULL; - return S_OK; - } - - nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node); - nsIDOMHTMLFormElement_Release(nsform); - assert(nsres == NS_OK); - - hres = get_node(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(nsres, nsform, p); }
static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElement *element, diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 599c029..caf5d85 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -197,33 +197,12 @@ static HRESULT WINAPI HTMLTextAreaElement_get_form(IHTMLTextAreaElement *iface, { HTMLTextAreaElement *This = impl_from_IHTMLTextAreaElement(iface); nsIDOMHTMLFormElement *nsform; - nsIDOMNode *nsnode; - HTMLDOMNode *node; nsresult nsres; - HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMHTMLTextAreaElement_GetForm(This->nstextarea, &nsform); - assert(nsres == NS_OK); - - if(!nsform) { - *p = NULL; - return S_OK; - } - - nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&nsnode); - nsIDOMHTMLFormElement_Release(nsform); - assert(nsres == NS_OK); - - hres = get_node(nsnode, TRUE, &node); - nsIDOMNode_Release(nsnode); - if(FAILED(hres)) - return hres; - - hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLFormElement, (void**)p); - IHTMLDOMNode_Release(&node->IHTMLDOMNode_iface); - return hres; + return return_nsform(nsres, nsform, p); }
static HRESULT WINAPI HTMLTextAreaElement_put_defaultValue(IHTMLTextAreaElement *iface, BSTR v) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index c720ef4..551ee12 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -948,6 +948,7 @@ void nsAString_Finish(nsAString*) DECLSPEC_HIDDEN;
HRESULT return_nsstr(nsresult,nsAString*,BSTR*) DECLSPEC_HIDDEN; HRESULT return_nsstr_variant(nsresult nsres, nsAString *nsstr, VARIANT *p) DECLSPEC_HIDDEN; +HRESULT return_nsform(nsresult,nsIDOMHTMLFormElement*,IHTMLFormElement**) DECLSPEC_HIDDEN;
nsICommandParams *create_nscommand_params(void) DECLSPEC_HIDDEN; HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*) DECLSPEC_HIDDEN;