- 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