WebKit:
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jul 2004 20:13:14 +0000 (20:13 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jul 2004 20:13:14 +0000 (20:13 +0000)
        Reviewed by Trey.

        WebKit part of fix for <rdar://problem/3622268> Reload failed pages when a
        network problem is corrected, inc. using Network Diagnostics

        * WebView.subproj/WebFrame.m:
        (-[WebFrame reload]):
        This method did not handle unreachableURLs at all. The reason Safari's Reload
        did work with unreachableURLs was that Safari does "reloadObeyingLocationField"
        which never actually calls -[WebFrame reload]. Fixed by creating a fresh
        request for the previously-unreachable URL.

WebBrowser:

        Reviewed by Trey.

        - part of fix for <rdar://problem/3622268> Reload failed pages when a network
        problem is corrected, inc. using Network Diagnostics

        We don't actually use Network Diagnostics yet, but we now react to network
        configuration changes by reloading any error pages. Using Network Diagnostics
        is the remaining part of 3622268.

        * NetworkController.h: Added. New file, copied and simplified from Message project.
        * NetworkController.m: Added. New file, copied and simplified from Message project.
        (+[NetworkController sharedInstance]):
        returns singleton instance
        (-[NetworkController dealloc]):
        release ivars
        (-[NetworkController init]):
        call _listenForNetworkChanges
        (-[NetworkController _postNetworkChangeNotification:]):
        post notification that network configuration changed
        (_networkChangeCallBack):
        call _postNetworkChangeNotification after a delay to coalesce multiple
        SystemConfiguration callbacks
        (_listenForNetworkChanges):
        register with SystemConfiguration for network changes

        * BrowserWebController.h:
        new ivar _registeredForNetworkConfigurationChanges
        * BrowserWebController.m:
        (-[BrowserWebView dealloc]):
        if registered for network config changes, remove appropriate observer
        (-[BrowserWebView networkConfigurationDidChange:]):
        reload main frame if it's showing an unreachable URL
        (-[BrowserWebView showErrorPageForURL:withTitle:message:]):
        register for network config changes if necessary

        * WebBrowser.pbproj/project.pbxproj:
        updated for new files and for including the SystemConfiguration framework

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

WebKit/ChangeLog
WebKit/WebView.subproj/WebFrame.m

index 08adea6faebc44eafc278dba5e540655b7ff0951..e1e802333bab0124568838c26e0e29a5d9789563 100644 (file)
@@ -1,3 +1,17 @@
+2004-07-27  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Trey.
+        
+        WebKit part of fix for <rdar://problem/3622268> Reload failed pages when a 
+        network problem is corrected, inc. using Network Diagnostics
+
+        * WebView.subproj/WebFrame.m:
+        (-[WebFrame reload]):
+        This method did not handle unreachableURLs at all. The reason Safari's Reload
+        did work with unreachableURLs was that Safari does "reloadObeyingLocationField"
+        which never actually calls -[WebFrame reload]. Fixed by creating a fresh
+        request for the previously-unreachable URL.
+
 2004-07-26  Richard Williamson   <rjw@apple.com>
 
         Fixed 3739737.  When setting the focus to a NSView, set the focus
index 06c065e2ea34b2225f9fb52b7e2ac9d0afecfda9..d597e2b5f7377839aaadfaed47c778273be2958d 100644 (file)
@@ -2667,9 +2667,18 @@ static CFAbsoluteTime _timeOfLastCompletedLoad;
         return;
     }
 
+    NSMutableURLRequest *initialRequest = [dataSource request];
+
+    // Replace error-page URL with the URL we were trying to reach.
+    NSURL *unreachableURL = [initialRequest _webDataRequestUnreachableURL];
+    if (unreachableURL != nil) {
+        initialRequest = [NSURLRequest requestWithURL:unreachableURL];
+    }
+    
     // initWithRequest copies the request
-    WebDataSource *newDataSource = [[WebDataSource alloc] initWithRequest:[dataSource request]];
+    WebDataSource *newDataSource = [[WebDataSource alloc] initWithRequest:initialRequest];
     NSMutableURLRequest *request = [newDataSource request];
+
     [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
 
     // If we're about to rePOST, set up action so the app can warn the user