Title: [219052] trunk
Revision
219052
Author
beid...@apple.com
Date
2017-07-01 14:37:54 -0700 (Sat, 01 Jul 2017)

Log Message

When setting a custom cookie storage location on a WKWebsiteDataStore, cookies aren't actually removed.
<rdar://problem/32410662> and https://bugs.webkit.org/show_bug.cgi?id=174035

Reviewed by Alex Christensen.

Source/WebKit2:

* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _terminateNetworkProcess]):
* UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess): Take an optional WebsiteDataStore. If one is passed in,
  send it to either the existing or new network process.
* UIProcess/WebProcessPool.h:

* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters): Resolve paths first.

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchDataAndApply):
(WebKit::WebsiteDataStore::removeData):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (219051 => 219052)


--- trunk/Source/WebKit2/ChangeLog	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/ChangeLog	2017-07-01 21:37:54 UTC (rev 219052)
@@ -1,3 +1,26 @@
+2017-07-01  Brady Eidson  <beid...@apple.com>
+
+        When setting a custom cookie storage location on a WKWebsiteDataStore, cookies aren't actually removed.
+        <rdar://problem/32410662> and https://bugs.webkit.org/show_bug.cgi?id=174035
+
+        Reviewed by Alex Christensen.
+
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (-[WKProcessPool _terminateNetworkProcess]):
+        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+        
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::ensureNetworkProcess): Take an optional WebsiteDataStore. If one is passed in,
+          send it to either the existing or new network process.
+        * UIProcess/WebProcessPool.h:
+        
+        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
+        (WebKit::WebsiteDataStore::parameters): Resolve paths first.
+
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::fetchDataAndApply):
+        (WebKit::WebsiteDataStore::removeData):
+
 2017-07-01  Ryosuke Niwa  <rn...@webkit.org>
 
         Frame.h doesn't need to include FrameLoader.h, IntRect.h, and NavigationScheduler.h

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm	2017-07-01 21:37:54 UTC (rev 219052)
@@ -389,6 +389,11 @@
     _processPool->terminateDatabaseProcess();
 }
 
+- (void)_terminateNetworkProcess
+{
+    _processPool->terminateNetworkProcess();
+}
+
 - (void)_syncNetworkProcessCookies
 {
     _processPool->syncNetworkProcessCookies();

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h	2017-07-01 21:37:54 UTC (rev 219052)
@@ -73,6 +73,7 @@
 
 // Test only. Should be called only while no web content processes are running.
 - (void)_terminateDatabaseProcess;
+- (void)_terminateNetworkProcess;
 
 // Test only.
 - (size_t)_webProcessCount WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2017-07-01 21:37:54 UTC (rev 219052)
@@ -415,10 +415,13 @@
     sendToAllProcesses(Messages::WebProcess::SetTextCheckerState(TextChecker::state()));
 }
 
-NetworkProcessProxy& WebProcessPool::ensureNetworkProcess()
+NetworkProcessProxy& WebProcessPool::ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore)
 {
-    if (m_networkProcess)
+    if (m_networkProcess) {
+        if (withWebsiteDataStore)
+            m_networkProcess->send(Messages::NetworkProcess::AddWebsiteDataStore(withWebsiteDataStore->parameters()), 0);
         return *m_networkProcess;
+    }
 
     m_networkProcess = NetworkProcessProxy::create(*this);
 
@@ -481,6 +484,9 @@
             process->reinstateNetworkProcessAssertionState(*m_networkProcess);
     }
 
+    if (withWebsiteDataStore)
+        m_networkProcess->send(Messages::NetworkProcess::AddWebsiteDataStore(withWebsiteDataStore->parameters()), 0);
+
     return *m_networkProcess;
 }
 

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2017-07-01 21:37:54 UTC (rev 219052)
@@ -313,7 +313,7 @@
     void setPlugInAutoStartOriginsFilteringOutEntriesAddedAfterTime(API::Dictionary&, double time);
 
     // Network Process Management
-    NetworkProcessProxy& ensureNetworkProcess();
+    NetworkProcessProxy& ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore = nullptr);
     NetworkProcessProxy* networkProcess() { return m_networkProcess.get(); }
     void networkProcessCrashed(NetworkProcessProxy*);
 

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2017-07-01 21:37:54 UTC (rev 219052)
@@ -51,8 +51,9 @@
 
 WebsiteDataStoreParameters WebsiteDataStore::parameters()
 {
+    resolveDirectoriesIfNecessary();
+
     WebsiteDataStoreParameters parameters;
-
     parameters.sessionID = m_sessionID;
 
     auto cookieFile = resolvedCookieStorageFile();

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (219051 => 219052)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-07-01 21:37:54 UTC (rev 219052)
@@ -328,7 +328,7 @@
                 break;
 
             case ProcessAccessType::Launch:
-                processPool->ensureNetworkProcess();
+                processPool->ensureNetworkProcess(this);
                 break;
 
             case ProcessAccessType::None:
@@ -647,7 +647,7 @@
                 break;
 
             case ProcessAccessType::Launch:
-                processPool->ensureNetworkProcess();
+                processPool->ensureNetworkProcess(this);
                 break;
 
             case ProcessAccessType::None:
@@ -896,7 +896,7 @@
                 break;
 
             case ProcessAccessType::Launch:
-                processPool->ensureNetworkProcess();
+                processPool->ensureNetworkProcess(this);
                 break;
 
             case ProcessAccessType::None:

Modified: trunk/Tools/ChangeLog (219051 => 219052)


--- trunk/Tools/ChangeLog	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Tools/ChangeLog	2017-07-01 21:37:54 UTC (rev 219052)
@@ -1,3 +1,12 @@
+2017-07-01  Brady Eidson  <beid...@apple.com>
+
+        When setting a custom cookie storage location on a WKWebsiteDataStore, cookies aren't actually removed.
+        <rdar://problem/32410662> and https://bugs.webkit.org/show_bug.cgi?id=174035
+
+        Reviewed by Alex Christensen.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
+
 2017-07-01  Dan Bernstein  <m...@apple.com>
 
         [macOS] Remove code only needed when building for OS X Yosemite

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm (219051 => 219052)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm	2017-07-01 21:26:31 UTC (rev 219051)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm	2017-07-01 21:37:54 UTC (rev 219052)
@@ -170,6 +170,42 @@
     TestWebKitAPI::Util::run(&receivedScriptMessage);
 
     EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:fileIDBPath.get().path]);
+
+    // Now, with brand new WKWebsiteDataStores pointing at the same custom cookie storage location,
+    // in newly fired up NetworkProcesses, verify that the fetch and delete APIs work as expected.
+
+    [processPool _terminateNetworkProcess];
+    auto newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
+
+    [newCustomDataStore fetchDataRecordsOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeCookies, nil] completionHandler:^(NSArray<WKWebsiteDataRecord *> * records) {
+        EXPECT_GT([records count], (unsigned long)0);
+        receivedScriptMessage = true;
+    }];
+
+    receivedScriptMessage = false;
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
+
+    [processPool _terminateNetworkProcess];
+    newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
+
+    [newCustomDataStore removeDataOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeCookies, nil] modifiedSince:[NSDate distantPast] completionHandler:^ {
+        receivedScriptMessage = true;
+    }];
+
+    receivedScriptMessage = false;
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
+
+    // This time, reuse the same network process but still do a new websitedatastore, to make sure even an existing network process
+    // gets the new datastore.
+    newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
+
+    [newCustomDataStore fetchDataRecordsOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeCookies, nil] completionHandler:^(NSArray<WKWebsiteDataRecord *> * records) {
+        EXPECT_EQ([records count], (unsigned long)0);
+        receivedScriptMessage = true;
+    }];
+
+    receivedScriptMessage = false;
+    TestWebKitAPI::Util::run(&receivedScriptMessage);
 }
 
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to