Module: wine Branch: master Commit: 503032749b0b9091dfbde69385888bc39d733672 URL: http://source.winehq.org/git/wine.git/?a=commit;h=503032749b0b9091dfbde69385...
Author: Jacek Caban jacek@codeweavers.com Date: Wed May 15 12:52:52 2013 +0200
mshtml: Keep reference to document node in onload event handler.
---
dlls/mshtml/nsevents.c | 22 +++++++++++++--------- 1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index 297ef8c..fc6504b 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -235,6 +235,7 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event HTMLDocumentNode *doc = This->This->doc; nsIDOMHTMLElement *nsbody = NULL; HTMLDocumentObj *doc_obj = NULL; + nsresult nsres = NS_OK;
TRACE("(%p)\n", doc);
@@ -245,6 +246,8 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
connect_scripts(doc->window);
+ htmldoc_addref(&doc->basedoc); + if(doc_obj) handle_docobj_load(doc_obj);
@@ -264,18 +267,19 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event IDocObjectService_FireDocumentComplete(doc_obj->doc_object_service, &doc->basedoc.window->base.IHTMLWindow2_iface, 0);
- if(!doc->nsdoc) { + if(doc->nsdoc) { + nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); + if(nsbody) { + fire_event(doc, EVENTID_LOAD, TRUE, (nsIDOMNode*)nsbody, event, (IDispatch*)&doc->window->base.IDispatchEx_iface); + nsIDOMHTMLElement_Release(nsbody); + } + }else { ERR("NULL nsdoc\n"); - return NS_ERROR_FAILURE; + nsres = NS_ERROR_FAILURE; }
- nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); - if(nsbody) { - fire_event(doc, EVENTID_LOAD, TRUE, (nsIDOMNode*)nsbody, event, (IDispatch*)&doc->window->base.IDispatchEx_iface); - nsIDOMHTMLElement_Release(nsbody); - } - - return NS_OK; + htmldoc_release(&doc->basedoc); + return nsres; }
static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *event)