Reviewed by Darin.
authoradele@apple.com <adele@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Dec 2007 21:11:21 +0000 (21:11 +0000)
committeradele@apple.com <adele@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Dec 2007 21:11:21 +0000 (21:11 +0000)
        Fix for <rdar://problem/5578209> REGRESSION: Crash in WebCore::DeprecatedValueListImpl::Private::copyList when going back on zoomerang.com/survey

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::scheduleHistoryNavigation):
          When the new url is exactly the same as the old url, don't treat it like a fragment navigation, since its going to cause a reload.

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

WebCore/ChangeLog
WebCore/loader/FrameLoader.cpp

index 7070f249d8faa6fdd49d67233344a14c46c8f3fa..025fc9651240dd57a46d86e252e9be76727dd1a7 100644 (file)
@@ -1,3 +1,12 @@
+2007-12-04  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Darin.
+
+        Fix for <rdar://problem/5578209> REGRESSION: Crash in WebCore::DeprecatedValueListImpl::Private::copyList when going back on zoomerang.com/survey
+
+        * loader/FrameLoader.cpp: (WebCore::FrameLoader::scheduleHistoryNavigation):
+          When the new url is exactly the same as the old url, don't treat it like a fragment navigation, since its going to cause a reload.
+
 2007-12-04  Darin Adler  <darin@apple.com>
 
         Reviewed by Kevin Decker.
 2007-12-04  Darin Adler  <darin@apple.com>
 
         Reviewed by Kevin Decker.
index c0e5c89b73a15b614dcbc1641e28f6c4139f1cc7..a99ccbaa8340a1993e83c9ef6b7c6f6779e2f082 100644 (file)
@@ -1409,11 +1409,16 @@ void FrameLoader::scheduleHistoryNavigation(int steps)
         return;
     }
 
         return;
     }
 
-    // If the steps to navigate is not zero (which needs to force a reload), and if the URL we're going to navigate 
-    // to is the same as the current one, except for the fragment part, we don't need to schedule the navigation.
-    if (steps != 0 && equalIgnoringRef(m_URL, historyURL(steps))) {
-        goBackOrForward(steps);
-        return;
+    // If the steps to navigate is not zero (which needs to force a reload), and if we think the navigation is going to be a fragment load
+    // (when the URL we're going to navigate to is the same as the current one, except for the fragment part - but not exactly the same because that's a reload),
+    // then we don't need to schedule the navigation.
+    if (steps != 0) {
+        KURL destination = historyURL(steps);
+        // FIXME: This doesn't seem like a reliable way to tell whether or not the load will be a fragment load.
+        if (equalIgnoringRef(m_URL, destination) && m_URL != destination) {
+            goBackOrForward(steps);
+            return;
+        }
     }
     
     scheduleRedirection(new ScheduledRedirection(steps));
     }
     
     scheduleRedirection(new ScheduledRedirection(steps));