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 f7bc857c8659113a46d07cf70bbe206b161c0bfa..14a130b9a28fecfb06553f409856521c1d613754 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 954b27fd7f72dc2b74518fb12cc8e59331b3b17a..2343eed96a2d6e651303cd1080e9f7f76382c554 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;