Reviewed by John
authorkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Mar 2005 01:40:31 +0000 (01:40 +0000)
committerkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Mar 2005 01:40:31 +0000 (01:40 +0000)
Fixed: <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken

The reason why UNLOAD_EVENT wouldn't dispatch was because the code would delete all event listeners at the detach() phase which is prior to closeURL().

This fixes a recent regression from:

 <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow

        * khtml/khtml_part.cpp:
        (KHTMLPart::closeURL): After dispatching event handlers, go ahead and remove them from the DOM.
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::detach): Took out the call to removeAllEventListenersFromAllNodes(). If we remove all event listeners here then when KHTMLPart::closeURL() checks for even listeners, it will never have any because they'll already be gone.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8898 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/khtml_part.cpp
WebCore/khtml/xml/dom_docimpl.cpp

index 0ee6d4462438b8f1b0d0e2db2327aa0899535647..7a574a7c2364063d7aee3c71a13097a64a028a20 100644 (file)
@@ -1,3 +1,20 @@
+2005-03-15  Kevin Decker  <kdecker@apple.com>
+
+        Reviewed by John
+       
+       Fixed: <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken
+
+       The reason why UNLOAD_EVENT wouldn't dispatch was because the code would delete all event listeners at the detach() phase which is prior to closeURL(). 
+
+       This fixes a recent regression from:
+
+ <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow
+
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::closeURL): After dispatching event handlers, go ahead and remove them from the DOM. 
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::detach): Took out the call to removeAllEventListenersFromAllNodes(). If we remove all event listeners here then when KHTMLPart::closeURL() checks for even listeners, it will never have any because they'll already be gone. 
+
 2005-03-15  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Vicki
index 810127ef5f86034e812d9bcae4f961551c05f38a..ba48db1678c24f7801f235bb2cf7584eee3fafce 100644 (file)
@@ -600,7 +600,11 @@ bool KHTMLPart::closeURL()
       d->m_bUnloadEventEmitted = true;
     }
   }
-
+    
+    if (d->m_doc) {
+        d->m_doc->removeAllEventListenersFromAllNodes();
+    }
+    
   d->m_bComplete = true; // to avoid emitting completed() in slotFinishedParsing() (David)
   d->m_bLoadingMainResource = false;
   d->m_bLoadEventEmitted = true; // don't want that one either
index 8752655bfabd0646fcec1a21b359f3614c76a708..222aadd564e90ba5439b1d56953d627d439ac121 100644 (file)
@@ -1193,7 +1193,6 @@ void DocumentImpl::detach()
     m_imageLoadEventDispatchSoonList.clear();
     m_imageLoadEventDispatchingList.clear();
 
-    removeAllEventListenersFromAllNodes();
 
     NodeBaseImpl::detach();