[Cocoa] setCookie API fails to set session cookies for defaultDataStore if processPoo...
authorsihui_liu@apple.com <sihui_liu@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Aug 2018 22:18:36 +0000 (22:18 +0000)
committersihui_liu@apple.com <sihui_liu@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Aug 2018 22:18:36 +0000 (22:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188209

Reviewed by Geoffrey Garen.

Source/WebKit:

If defaultDataStore is already created when launching network process, it means user
probably set cookies for default session via API, so we should update m_websiteDataStore to
make sure pendingCookies is passed to network process.

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess):

Tools:

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

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

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/WebProcessPool.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm

index 5c8d045..28ba4dc 100644 (file)
@@ -1,3 +1,17 @@
+2018-08-02  Sihui Liu  <sihui_liu@apple.com>
+
+        [Cocoa] setCookie API fails to set session cookies for defaultDataStore if processPool created but not used
+        https://bugs.webkit.org/show_bug.cgi?id=188209
+
+        Reviewed by Geoffrey Garen.
+
+        If defaultDataStore is already created when launching network process, it means user 
+        probably set cookies for default session via API, so we should update m_websiteDataStore to 
+        make sure pendingCookies is passed to network process.
+
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::ensureNetworkProcess):
+
 2018-08-02  Alex Christensen  <achristensen@webkit.org>
 
         Use WTF::Variant for WebPreferencesStore::Value
index b479486..9264b99 100644 (file)
@@ -481,6 +481,9 @@ NetworkProcessProxy& WebProcessPool::ensureNetworkProcess(WebsiteDataStore* with
         parameters.defaultSessionParameters.sessionID = PAL::SessionID::defaultSessionID();
     }
 
+    if (!m_websiteDataStore && API::WebsiteDataStore::defaultDataStoreExists())
+        m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
+
     if (m_websiteDataStore) {
         parameters.defaultSessionPendingCookies = copyToVector(m_websiteDataStore->websiteDataStore().pendingCookies());
         m_websiteDataStore->websiteDataStore().clearPendingCookies();
index 4561a29..0c6f949 100644 (file)
@@ -1,3 +1,13 @@
+2018-08-02  Sihui Liu  <sihui_liu@apple.com>
+
+        [Cocoa] setCookie API fails to set session cookies for defaultDataStore if processPool created but not used
+        https://bugs.webkit.org/show_bug.cgi?id=188209
+
+        Reviewed by Geoffrey Garen.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
+        (TEST):
+
 2018-08-02  Dan Bernstein  <mitz@apple.com>
 
         Fixed WebKit.AttrStyle timing out on build.webkit.org.
index 8e19ed3..825401c 100644 (file)
@@ -534,6 +534,10 @@ TEST(WebKit, WKHTTPCookieStoreWithoutProcessPool)
     TestWebKitAPI::Util::run(&finished);
     
     // DefaultDataStore
+    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    auto processPool = adoptNS([[WKProcessPool alloc] init]);
+    [configuration setProcessPool:processPool.get()];
+
     auto defaultStore = [WKWebsiteDataStore defaultDataStore];
     finished = false;
     [defaultStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:[] {
@@ -560,7 +564,6 @@ TEST(WebKit, WKHTTPCookieStoreWithoutProcessPool)
     TestWebKitAPI::Util::run(&finished);
 
     finished = false;
-    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     configuration.get().websiteDataStore = defaultStore;
     webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     webView.get().UIDelegate = delegate.get();