Jacek Caban : mshtml: Share nsIDOMText reference with nsIDOMNode.
Module: wine Branch: master Commit: cf35bbd2618d8e664d1e16dcf2e8825be060c514 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf35bbd2618d8e664d1e16dcf2... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Jun 26 12:34:06 2012 +0200 mshtml: Share nsIDOMText reference with nsIDOMNode. --- dlls/mshtml/htmltextnode.c | 27 +++++++++------------------ 1 files changed, 9 insertions(+), 18 deletions(-) diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 7663810..1be260f 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -18,6 +18,7 @@ #include <stdarg.h> +#include <assert.h> #define COBJMACROS @@ -178,16 +179,6 @@ static HRESULT HTMLDOMTextNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) return S_OK; } -static void HTMLDOMTextNode_destructor(HTMLDOMNode *iface) -{ - HTMLDOMTextNode *This = impl_from_HTMLDOMNode(iface); - - if(This->nstext) - IHTMLDOMTextNode_Release(This->nstext); - - HTMLDOMNode_destructor(&This->node); -} - static HRESULT HTMLDOMTextNode_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) { HTMLDOMTextNode *This = impl_from_HTMLDOMNode(iface); @@ -197,7 +188,7 @@ static HRESULT HTMLDOMTextNode_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTM static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = { HTMLDOMTextNode_QI, - HTMLDOMTextNode_destructor, + HTMLDOMNode_destructor, HTMLDOMTextNode_clone }; @@ -226,17 +217,17 @@ HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDO ret->node.vtbl = &HTMLDOMTextNodeImplVtbl; ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl; - nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMText, (void**)&ret->nstext); - if(NS_FAILED(nsres)) { - ERR("Could not get nsIDOMText iface: %08x\n", nsres); - heap_free(ret); - return E_FAIL; - } - init_dispex(&ret->node.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface, &HTMLDOMTextNode_dispex); + HTMLDOMNode_Init(doc, &ret->node, nsnode); + nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMText, (void**)&ret->nstext); + assert(nsres == NS_OK && (nsIDOMNode*)ret->nstext == ret->node.nsnode); + + /* Share reference with nsnode */ + nsIDOMNode_Release(ret->node.nsnode); + *node = &ret->node; return S_OK; }
participants (1)
-
Alexandre Julliard