Reviewed by Mitz.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 8 Oct 2006 20:42:22 +0000 (20:42 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 8 Oct 2006 20:42:22 +0000 (20:42 +0000)
        - fix http://bugs.webkit.org/show_bug.cgi?id=11218
          REGRESSION: Assertion failure in WebFrameLoader when going back from a file: or data: URL

        Also added a helper function in WebFrameLoader so code that checks for back/forward load types
        is easier to read.

        * Loader/WebFrameLoader.m:
        (-[WebFrameLoader _setPolicyDocumentLoadState:]): Fixed line of code that was setting the load
        state to nil instead of the passed-in object.
        (isBackForwardLoadType): Added.
        (-[WebFrameLoader shouldReloadToHandleUnreachableURLFromRequest:]): Use isBackForwardLoadType.
        (-[WebFrameLoader checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
        Ditto.
        (-[WebFrameLoader continueLoadRequestAfterNavigationPolicy:formState:]): Ditto.

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

WebKit/ChangeLog
WebKit/Loader/WebFrameLoader.m

index e06ba4d535f9b0f7bf4774de85dd1e21da029fad..631f8a3cf56b8f9883dad98617c3e6b64eab490f 100644 (file)
@@ -1,3 +1,22 @@
+2006-10-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=11218
+          REGRESSION: Assertion failure in WebFrameLoader when going back from a file: or data: URL
+
+        Also added a helper function in WebFrameLoader so code that checks for back/forward load types
+        is easier to read.
+
+        * Loader/WebFrameLoader.m:
+        (-[WebFrameLoader _setPolicyDocumentLoadState:]): Fixed line of code that was setting the load
+        state to nil instead of the passed-in object.
+        (isBackForwardLoadType): Added.
+        (-[WebFrameLoader shouldReloadToHandleUnreachableURLFromRequest:]): Use isBackForwardLoadType.
+        (-[WebFrameLoader checkNavigationPolicyForRequest:dataSource:formState:andCall:withSelector:]):
+        Ditto.
+        (-[WebFrameLoader continueLoadRequestAfterNavigationPolicy:formState:]): Ditto.
+
 2006-10-08  Darin Adler  <darin@apple.com>
 
         Reviewed by Maciej.
index 0ce96a42003c70457e6b7b1488a1cc8cd6a44514..7fef1e7f64df8b2e7be364604f7b3cd5edf9a8b3 100644 (file)
 
     [policyDocumentLoadState release];
     [loadState retain];
-    policyDocumentLoadState = nil;
+    policyDocumentLoadState = loadState;
 }
    
 - (void)clearDataSource
@@ -848,18 +848,33 @@ static BOOL isCaseInsensitiveEqual(NSString *a, NSString *b)
     listener = nil;
 }
 
+static inline BOOL isBackForwardLoadType(WebFrameLoadType type)
+{
+    switch (type) {
+        case WebFrameLoadTypeStandard:
+        case WebFrameLoadTypeReload:
+        case WebFrameLoadTypeReloadAllowingStaleData:
+        case WebFrameLoadTypeSame:
+        case WebFrameLoadTypeInternal:
+        case WebFrameLoadTypeReplace:
+            return false;
+        case WebFrameLoadTypeBack:
+        case WebFrameLoadTypeForward:
+        case WebFrameLoadTypeIndexedBackForward:
+            return true;
+    }
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
 - (BOOL)shouldReloadToHandleUnreachableURLFromRequest:(NSURLRequest *)request
 {
     NSURL *unreachableURL = [request _webDataRequestUnreachableURL];
-    if (unreachableURL == nil) {
+    if (unreachableURL == nil)
         return NO;
-    }
     
-    if (policyLoadType != WebFrameLoadTypeForward
-        && policyLoadType != WebFrameLoadTypeBack
-        && policyLoadType != WebFrameLoadTypeIndexedBackForward) {
+    if (!isBackForwardLoadType(policyLoadType))
         return NO;
-    }
     
     // We only treat unreachableURLs specially during the delegate callbacks
     // for provisional load errors and navigation policy decisions. The former
@@ -1186,11 +1201,8 @@ static BOOL isCaseInsensitiveEqual(NSString *a, NSString *b)
     // We are always willing to show alternate content for unreachable URLs;
     // treat it like a reload so it maintains the right state for b/f list.
     if ([request _webDataRequestUnreachableURL] != nil) {
-        if (policyLoadType == WebFrameLoadTypeForward
-                || policyLoadType == WebFrameLoadTypeBack
-                || policyLoadType == WebFrameLoadTypeIndexedBackForward) {
+        if (isBackForwardLoadType(policyLoadType))
             policyLoadType = WebFrameLoadTypeReload;
-        }
         [target performSelector:selector withObject:request withObject:nil];
         return;
     }
@@ -1288,14 +1300,13 @@ static BOOL isCaseInsensitiveEqual(NSString *a, NSString *b)
             [client _clientRedirectCancelledOrFinished:NO];
 
         [self _setPolicyDocumentLoadState:nil];
+
         // If the navigation request came from the back/forward menu, and we punt on it, we have the 
         // problem that we have optimistically moved the b/f cursor already, so move it back.  For sanity, 
         // we only do this when punting a navigation for the target frame or top-level frame.  
-        if ((isTargetItem || [[client webView] mainFrame] == client)
-            && (policyLoadType == WebFrameLoadTypeForward
-                || policyLoadType == WebFrameLoadTypeBack
-                || policyLoadType == WebFrameLoadTypeIndexedBackForward))
+        if ((isTargetItem || [[client webView] mainFrame] == client) && isBackForwardLoadType(policyLoadType))
             [(WebFrame <WebFrameLoaderClient> *)[[client webView] mainFrame] _resetBackForwardList];
+
         return;
     }