REGRESSION: Using the reload button while offline pushes identical pages onto the...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 18 Apr 2018 17:50:15 +0000 (17:50 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 18 Apr 2018 17:50:15 +0000 (17:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=184570
<rdar://problem/34807323>

Patch by Sihui Liu <sihui_liu@apple.com> on 2018-04-18
Reviewed by Chris Dumez.

Source/WebCore:

Set FrameLoadType properly when error occurs in reload.

tests: Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::load):

Tools:

Add API test coverage.

* TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
(TEST):

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

Source/WebCore/ChangeLog
Source/WebCore/loader/FrameLoader.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm

index d969394..8115b35 100644 (file)
@@ -1,3 +1,18 @@
+2018-04-18  Sihui Liu  <sihui_liu@apple.com>
+
+        REGRESSION: Using the reload button while offline pushes identical pages onto the back/forward list
+        https://bugs.webkit.org/show_bug.cgi?id=184570
+        <rdar://problem/34807323>
+
+        Reviewed by Chris Dumez.
+
+        Set FrameLoadType properly when error occurs in reload.
+
+        tests: Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::load):
+
 2018-04-18  Chris Dumez  <cdumez@apple.com>
 
         Add support for converting a local window to a remote window
index a5c6e3d..a454dd9 100644 (file)
@@ -1428,8 +1428,8 @@ void FrameLoader::load(DocumentLoader* newDocumentLoader)
     if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->originalRequest().url())) {
         r.setCachePolicy(ReloadIgnoringCacheData);
         type = FrameLoadType::Same;
-    } else if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->unreachableURL()) && m_loadType == FrameLoadType::Reload)
-        type = FrameLoadType::Reload;
+    } else if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->unreachableURL()) && isReload(m_loadType))
+        type = m_loadType;
     else if (m_loadType == FrameLoadType::RedirectWithLockedBackForwardList && !newDocumentLoader->unreachableURL().isEmpty() && newDocumentLoader->substituteData().isValid())
         type = FrameLoadType::RedirectWithLockedBackForwardList;
     else
index a520b61..298ad85 100644 (file)
@@ -1,3 +1,16 @@
+2018-04-18  Sihui Liu  <sihui_liu@apple.com>
+
+        REGRESSION: Using the reload button while offline pushes identical pages onto the back/forward list
+        https://bugs.webkit.org/show_bug.cgi?id=184570
+        <rdar://problem/34807323>
+
+        Reviewed by Chris Dumez.
+
+        Add API test coverage.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
+        (TEST):
+
 2018-04-18  Chris Dumez  <cdumez@apple.com>
 
         Add support for converting a local window to a remote window
index ab76a85..505af35 100644 (file)
@@ -128,4 +128,31 @@ TEST(WKWebView, LoadAlternateHTMLStringNoFileSystemPath)
     [webView loadHTMLString:@"<html>hi</html>" baseURL:[NSURL URLWithString:@"file:///.file/id="]];
 }
 
+TEST(WKWebView, LoadAlternateHTMLStringFromProvisionalLoadErrorReload)
+{
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+    auto controller = adoptNS([[LoadAlternateHTMLStringFromProvisionalLoadErrorController alloc] init]);
+    [webView setNavigationDelegate:controller.get()];
+
+    NSURL *invalidURL = [NSURL URLWithString:@"https://www.example.com%3C%3E/"];
+    [webView loadRequest:[NSURLRequest requestWithURL:invalidURL]];
+    TestWebKitAPI::Util::run(&isDone);
+    isDone = false;
+
+    [webView reload];
+    TestWebKitAPI::Util::run(&isDone);
+    isDone = false;
+
+    [webView reloadFromOrigin];
+    TestWebKitAPI::Util::run(&isDone);
+    isDone = false;
+
+    [webView _reloadExpiredOnly];
+    TestWebKitAPI::Util::run(&isDone);
+    isDone = false;
+
+    WKBackForwardList *list = [webView backForwardList];
+    EXPECT_EQ((NSUInteger)0, list.backList.count);
+}
+
 #endif