Title: [239310] trunk
Revision
239310
Author
cdu...@apple.com
Date
2018-12-17 18:17:26 -0800 (Mon, 17 Dec 2018)

Log Message

Allow passing nil as session state to [WKWebView _restoreSessionState:]
https://bugs.webkit.org/show_bug.cgi?id=192789
<rdar://problem/46755277>

Reviewed by Alex Christensen.

Source/WebKit:

Allow passing nil as session state to [WKWebView _restoreSessionState:] instead of crashing.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _restoreSessionState:andNavigate:]):

Tools:

Add API test coverage.

* TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm:
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (239309 => 239310)


--- trunk/Source/WebKit/ChangeLog	2018-12-18 02:03:15 UTC (rev 239309)
+++ trunk/Source/WebKit/ChangeLog	2018-12-18 02:17:26 UTC (rev 239310)
@@ -1,3 +1,16 @@
+2018-12-17  Chris Dumez  <cdu...@apple.com>
+
+        Allow passing nil as session state to [WKWebView _restoreSessionState:]
+        https://bugs.webkit.org/show_bug.cgi?id=192789
+        <rdar://problem/46755277>
+
+        Reviewed by Alex Christensen.
+
+        Allow passing nil as session state to [WKWebView _restoreSessionState:] instead of crashing.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _restoreSessionState:andNavigate:]):
+
 2018-12-17  Alex Christensen  <achristen...@webkit.org>
 
         Fix occasional null-dereference crash in WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (239309 => 239310)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2018-12-18 02:03:15 UTC (rev 239309)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2018-12-18 02:17:26 UTC (rev 239310)
@@ -4712,7 +4712,7 @@
 
 - (WKNavigation *)_restoreSessionState:(_WKSessionState *)sessionState andNavigate:(BOOL)navigate
 {
-    return wrapper(_page->restoreFromSessionState(sessionState->_sessionState, navigate));
+    return wrapper(_page->restoreFromSessionState(sessionState ? sessionState->_sessionState : WebKit::SessionState { }, navigate));
 }
 
 - (void)_close

Modified: trunk/Tools/ChangeLog (239309 => 239310)


--- trunk/Tools/ChangeLog	2018-12-18 02:03:15 UTC (rev 239309)
+++ trunk/Tools/ChangeLog	2018-12-18 02:17:26 UTC (rev 239310)
@@ -1,3 +1,16 @@
+2018-12-17  Chris Dumez  <cdu...@apple.com>
+
+        Allow passing nil as session state to [WKWebView _restoreSessionState:]
+        https://bugs.webkit.org/show_bug.cgi?id=192789
+        <rdar://problem/46755277>
+
+        Reviewed by Alex Christensen.
+
+        Add API test coverage.
+
+        * TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm:
+        (TEST):
+
 2018-12-17  Simon Fraser  <simon.fra...@apple.com>
 
         Don't use more expensive layer backing store formats when subpixel text antialiasing is not enabled

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm (239309 => 239310)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm	2018-12-18 02:03:15 UTC (rev 239309)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm	2018-12-18 02:17:26 UTC (rev 239310)
@@ -103,6 +103,37 @@
     EXPECT_EQ((NSUInteger)0, newList.forwardList.count);
 }
 
+TEST(WKBackForwardList, RestoringNilSessionState)
+{
+    auto webView = adoptNS([[WKWebView alloc] init]);
+
+    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL1]]];
+    [webView _test_waitForDidFinishNavigation];
+
+    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL2]]];
+    [webView _test_waitForDidFinishNavigation];
+
+    WKBackForwardList *list = [webView backForwardList];
+    EXPECT_EQ(YES, [webView canGoBack]);
+    EXPECT_EQ(NO, [webView canGoForward]);
+    EXPECT_EQ((NSUInteger)1, list.backList.count);
+    EXPECT_EQ((NSUInteger)0, list.forwardList.count);
+
+    auto singlePageWebView = adoptNS([[WKWebView alloc] init]);
+
+    [singlePageWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:loadableURL1]]];
+    [singlePageWebView _test_waitForDidFinishNavigation];
+
+    [webView _restoreSessionState:nil andNavigate:NO];
+
+    WKBackForwardList *newList = [webView backForwardList];
+
+    EXPECT_EQ(YES, [webView canGoBack]);
+    EXPECT_EQ(NO, [webView canGoForward]);
+    EXPECT_EQ((NSUInteger)1, newList.backList.count);
+    EXPECT_EQ((NSUInteger)0, newList.forwardList.count);
+}
+
 static bool done;
 static size_t navigations;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to