Reviewed by Darin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Nov 2004 21:25:56 +0000 (21:25 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Nov 2004 21:25:56 +0000 (21:25 +0000)
<rdar://problem/3864151> REGRESSION (125-167): Chrysler.com never stops loading

        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::close): Don't fire the onload handler if there is a
redirect pending. This is a very long-standing bug that was masked
by our previously incorrect redirect logic. It used to be that an
older redirect would always win. Recently we changed things so
that a newer redirect would win, but a script that causes a
redirect would stop parsing once complete (so if there are two
redirects in the same script, the latter wins). However, we should
have also prevented onload in this case. Testing with other
browsers shows that onload handlers do not run at all when there
is a pending redirect.

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

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

index f7bc857..14a130b 100644 (file)
@@ -1,3 +1,21 @@
+2004-11-19  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+       <rdar://problem/3864151> REGRESSION (125-167): Chrysler.com never stops loading
+       
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::close): Don't fire the onload handler if there is a
+       redirect pending. This is a very long-standing bug that was masked
+       by our previously incorrect redirect logic. It used to be that an
+       older redirect would always win. Recently we changed things so
+       that a newer redirect would win, but a script that causes a
+       redirect would stop parsing once complete (so if there are two
+       redirects in the same script, the latter wins). However, we should
+       have also prevented onload in this case. Testing with other
+       browsers shows that onload handlers do not run at all when there
+       is a pending redirect.
+
 2004-11-19  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Harrison
index 954b27f..2343eed 100644 (file)
@@ -1350,9 +1350,9 @@ HTMLElementImpl* DocumentImpl::body()
 void DocumentImpl::close()
 {
     // First fire the onload.
-    bool doload = !parsing() && m_tokenizer && !m_processingLoadEvent;
     
     bool wasLocationChangePending = part() && part()->isScheduledLocationChangePending();
+    bool doload = !parsing() && m_tokenizer && !m_processingLoadEvent && !wasLocationChangePending;
     
     if (body() && doload) {
         m_processingLoadEvent = true;
@@ -1376,8 +1376,8 @@ void DocumentImpl::close()
     
     bool isLocationChangePending = part() && part()->isScheduledLocationChangePending();
     
-    if (doload && !wasLocationChangePending && isLocationChangePending && m_startTime.elapsed() < cLayoutScheduleThreshold) {
-       // Just bail out. During the onload we were shifted to another page.
+    if (doload && isLocationChangePending && m_startTime.elapsed() < cLayoutScheduleThreshold) {
+       // Just bail out. Before or during the onload we were shifted to another page.
        // The old i-Bench suite does this. When this happens don't bother painting or laying out.        
        delete m_tokenizer;
        m_tokenizer = 0;