Module: wine Branch: master Commit: a8d0efc7d6ff001b671e379c6c312257261a4b0f URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8d0efc7d6ff001b671e379c6c...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Jun 26 12:33:35 2012 +0200
mshtml: Return referenced instances from node constructors.
---
dlls/mshtml/htmldoc.c | 2 -- dlls/mshtml/htmldoc3.c | 1 - dlls/mshtml/htmldoc5.c | 1 - dlls/mshtml/htmlelem.c | 1 - dlls/mshtml/htmlimg.c | 1 + dlls/mshtml/htmlnode.c | 20 ++++++-------------- dlls/mshtml/htmltextnode.c | 8 +------- 7 files changed, 8 insertions(+), 26 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index ede856b..19b73e5 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -1037,7 +1037,6 @@ static HRESULT WINAPI HTMLDocument_createElement(IHTMLDocument2 *iface, BSTR eTa return hres;
*newElem = &elem->IHTMLElement_iface; - IHTMLElement_AddRef(&elem->IHTMLElement_iface); return S_OK; }
@@ -2262,7 +2261,6 @@ HRESULT create_document_fragment(nsIDOMNode *nsnode, HTMLDocumentNode *doc_node, doc_frag->node.vtbl = &HTMLDocumentFragmentImplVtbl; doc_frag->node.cp_container = &doc_frag->basedoc.cp_container;
- htmldoc_addref(&doc_frag->basedoc); *ret = doc_frag; return S_OK; } diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index 3e7c7b7..eb19f8c 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -135,7 +135,6 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t return hres;
*newTextNode = &node->IHTMLDOMNode_iface; - IHTMLDOMNode_AddRef(&node->IHTMLDOMNode_iface); return S_OK; }
diff --git a/dlls/mshtml/htmldoc5.c b/dlls/mshtml/htmldoc5.c index 587d75b..2377b7a 100644 --- a/dlls/mshtml/htmldoc5.c +++ b/dlls/mshtml/htmldoc5.c @@ -155,7 +155,6 @@ static HRESULT WINAPI HTMLDocument5_createComment(IHTMLDocument5 *iface, BSTR bs return hres;
*ppRetNode = &elem->node.IHTMLDOMNode_iface; - IHTMLDOMNode_AddRef(&elem->node.IHTMLDOMNode_iface); return S_OK; }
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index b0e589e..10d5108 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1618,7 +1618,6 @@ HRESULT HTMLElement_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode ** } }
- IHTMLElement_AddRef(&new_elem->IHTMLElement_iface); *ret = &new_elem->node; return S_OK; } diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index adb40d5..5d1c665 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -841,6 +841,7 @@ static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *i
hres = IHTMLElement_QueryInterface(&elem->IHTMLElement_iface, &IID_IHTMLImgElement, (void**)&img); + IHTMLElement_Release(&elem->IHTMLElement_iface); if(FAILED(hres)) { ERR("IHTMLElement_QueryInterface failed: 0x%08x\n", hres); return hres; diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 9574fcb..5124c1c 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1007,14 +1007,7 @@ void HTMLDOMNode_destructor(HTMLDOMNode *This)
static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMNode **ret) { - HRESULT hres; - - hres = create_node(This->doc, nsnode, ret); - if(FAILED(hres)) - return hres; - - IHTMLDOMNode_AddRef(&(*ret)->IHTMLDOMNode_iface); - return S_OK; + return create_node(This->doc, nsnode, ret); }
static const NodeImplVtbl HTMLDOMNodeImplVtbl = { @@ -1027,9 +1020,12 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno { node->IHTMLDOMNode_iface.lpVtbl = &HTMLDOMNodeVtbl; node->IHTMLDOMNode2_iface.lpVtbl = &HTMLDOMNode2Vtbl; - node->ref = 1; + node->ref = 2; node->doc = doc;
+ if(&doc->node != node) + node->ref++; /* one extra for list entry reference */ + if(nsnode) nsIDOMNode_AddRef(nsnode); node->nsnode = nsnode; @@ -1096,7 +1092,6 @@ static HRESULT create_node(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNod HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDOMNode **ret) { HTMLDOMNode *iter = This->nodes; - HRESULT hres;
while(iter) { if(iter->nsnode == nsnode) @@ -1111,10 +1106,7 @@ HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDO return S_OK; }
- hres = create_node(This, nsnode, ret); - if(SUCCEEDED(hres)) - IHTMLDOMNode_AddRef(&(*ret)->IHTMLDOMNode_iface); - return hres; + return create_node(This, nsnode, ret); }
/* diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 58422de..7663810 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -191,14 +191,8 @@ static void HTMLDOMTextNode_destructor(HTMLDOMNode *iface) static HRESULT HTMLDOMTextNode_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) { HTMLDOMTextNode *This = impl_from_HTMLDOMNode(iface); - HRESULT hres;
- hres = HTMLDOMTextNode_Create(This->node.doc, nsnode, ret); - if(FAILED(hres)) - return hres; - - IHTMLDOMNode_AddRef(&(*ret)->IHTMLDOMNode_iface); - return S_OK; + return HTMLDOMTextNode_Create(This->node.doc, nsnode, ret); }
static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = {