Jacek Caban : mshtml: Keep reference to document node in onload event handler.

Alexandre Julliard julliard at winehq.org
Wed May 15 14:20:00 CDT 2013


Module: wine
Branch: master
Commit: 503032749b0b9091dfbde69385888bc39d733672
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=503032749b0b9091dfbde69385888bc39d733672

Author: Jacek Caban <jacek at 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)




More information about the wine-cvs mailing list