Diff
Modified: trunk/Source/WebCore/platform/network/CredentialStorage.cpp (246774 => 246775)
--- trunk/Source/WebCore/platform/network/CredentialStorage.cpp 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebCore/platform/network/CredentialStorage.cpp 2019-06-25 00:26:41 UTC (rev 246775)
@@ -187,21 +187,4 @@
m_pathToDefaultProtectionSpaceMap.clear();
}
-#if !PLATFORM(COCOA)
-Vector<SecurityOriginData> CredentialStorage::originsWithPersistentCredentials()
-{
- return { };
-}
-
-void CredentialStorage::removePersistentCredentialsWithOrigins(const Vector<SecurityOriginData>&)
-{
- return;
-}
-
-void CredentialStorage::clearPersistentCredentials()
-{
- return;
-}
-#endif
-
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/network/CredentialStorage.h (246774 => 246775)
--- trunk/Source/WebCore/platform/network/CredentialStorage.h 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebCore/platform/network/CredentialStorage.h 2019-06-25 00:26:41 UTC (rev 246775)
@@ -48,8 +48,6 @@
// OS persistent storage.
WEBCORE_EXPORT static Credential getFromPersistentStorage(const ProtectionSpace&);
WEBCORE_EXPORT static Vector<SecurityOriginData> originsWithPersistentCredentials();
- WEBCORE_EXPORT static void removePersistentCredentialsWithOrigins(const Vector<SecurityOriginData>& origins);
- WEBCORE_EXPORT static void clearPersistentCredentials();
WEBCORE_EXPORT void clearCredentials();
Modified: trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm (246774 => 246775)
--- trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm 2019-06-25 00:26:41 UTC (rev 246775)
@@ -38,46 +38,13 @@
return credential ? Credential(credential) : Credential();
}
-Vector<SecurityOriginData> CredentialStorage::originsWithPersistentCredentials()
+Vector<WebCore::SecurityOriginData> CredentialStorage::originsWithPersistentCredentials()
{
- Vector<SecurityOriginData> origins;
+ Vector<WebCore::SecurityOriginData> origins;
auto allCredentials = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
for (NSURLProtectionSpace* key in allCredentials.keyEnumerator)
- origins.append(SecurityOriginData { String(key.protocol), String(key.host), key.port });
+ origins.append(WebCore::SecurityOriginData { String(key.protocol), String(key.host), key.port });
return origins;
}
-void CredentialStorage::removePersistentCredentialsWithOrigins(const Vector<SecurityOriginData>& origins)
-{
- auto sharedStorage = [NSURLCredentialStorage sharedCredentialStorage];
- auto allCredentials = [sharedStorage allCredentials];
- for (auto& origin : origins) {
- for (NSURLProtectionSpace* space in allCredentials) {
- if (origin.protocol == String(space.protocol)
- && origin.host == String(space.host)
- && origin.port
- && *origin.port == space.port) {
- auto credentials = allCredentials[space];
- for (NSString* user in credentials) {
- auto credential = credentials[user];
- [sharedStorage removeCredential:credential forProtectionSpace:space options:@{ NSURLCredentialStorageRemoveSynchronizableCredentials : @YES }];
- }
- }
- }
- }
-}
-
-void CredentialStorage::clearPersistentCredentials()
-{
- auto sharedStorage = [NSURLCredentialStorage sharedCredentialStorage];
- auto allCredentials = [sharedStorage allCredentials];
- for (NSURLProtectionSpace* space in allCredentials.keyEnumerator) {
- auto credentials = allCredentials[space];
- for (NSString* user in credentials) {
- auto credential = credentials[user];
- [sharedStorage removeCredential:credential forProtectionSpace:space options:@{ NSURLCredentialStorageRemoveSynchronizableCredentials : @YES }];
- }
- }
-}
-
} // namespace WebCore
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (246774 => 246775)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-06-25 00:26:41 UTC (rev 246775)
@@ -1282,11 +1282,6 @@
for (auto& securityOrigin : securityOrigins)
callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::Credentials, 0 });
}
- if (!sessionID.isEphemeral()) {
- auto securityOrigins = WebCore::CredentialStorage::originsWithPersistentCredentials();
- for (auto& securityOrigin : securityOrigins)
- callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::Credentials, 0 });
- }
}
if (websiteDataTypes.contains(WebsiteDataType::DOMCache)) {
@@ -1364,8 +1359,6 @@
if (websiteDataTypes.contains(WebsiteDataType::Credentials)) {
if (auto* session = storageSession(sessionID))
session->credentialStorage().clearCredentials();
- if (!sessionID.isEphemeral())
- WebCore::CredentialStorage::clearPersistentCredentials();
}
auto clearTasksHandler = WTF::CallbackAggregator::create([this, callbackID] {
@@ -1503,8 +1496,6 @@
for (auto& originData : originDatas)
session->credentialStorage().removeCredentialsWithOrigin(originData);
}
- if (!sessionID.isEphemeral())
- WebCore::CredentialStorage::removePersistentCredentialsWithOrigins(originDatas);
}
// FIXME: Implement storage quota clearing for these origins.
@@ -2550,6 +2541,16 @@
}
#if !PLATFORM(COCOA)
+void NetworkProcess::originsWithPersistentCredentials(CompletionHandler<void(Vector<WebCore::SecurityOriginData>)>&& completionHandler)
+{
+ completionHandler(Vector<WebCore::SecurityOriginData>());
+}
+
+void NetworkProcess::removeCredentialsWithOrigins(const Vector<WebCore::SecurityOriginData>&, CompletionHandler<void()>&& completionHandler)
+{
+ completionHandler();
+}
+
void NetworkProcess::initializeProcess(const AuxiliaryProcessInitializationParameters&)
{
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (246774 => 246775)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-06-25 00:26:41 UTC (rev 246775)
@@ -436,6 +436,9 @@
#endif
void platformSyncAllCookies(CompletionHandler<void()>&&);
+
+ void originsWithPersistentCredentials(CompletionHandler<void(Vector<WebCore::SecurityOriginData>)>&&);
+ void removeCredentialsWithOrigins(const Vector<WebCore::SecurityOriginData>& origins, CompletionHandler<void()>&&);
void registerURLSchemeAsSecure(const String&) const;
void registerURLSchemeAsBypassingContentSecurityPolicy(const String&) const;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (246774 => 246775)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-06-25 00:26:41 UTC (rev 246775)
@@ -168,5 +168,7 @@
SetAdClickAttributionOverrideTimerForTesting(PAL::SessionID sessionID, bool value) -> () Async
SetAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, URL url) -> () Async
MarkAdClickAttributionsAsExpiredForTesting(PAL::SessionID sessionID) -> () Async
+ OriginsWithPersistentCredentials() -> (Vector<WebCore::SecurityOriginData> origins) Async
+ RemoveCredentialsWithOrigins(Vector<WebCore::SecurityOriginData> origins) -> () Async
GetLocalStorageOriginDetails(PAL::SessionID sessionID) -> (Vector<WebKit::LocalStorageDatabaseTracker::OriginDetails> details) Async
}
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (246774 => 246775)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-06-25 00:26:41 UTC (rev 246775)
@@ -212,6 +212,31 @@
}).get());
}
+void NetworkProcess::originsWithPersistentCredentials(CompletionHandler<void(Vector<WebCore::SecurityOriginData>)>&& completionHandler)
+{
+ completionHandler(WebCore::CredentialStorage::originsWithPersistentCredentials());
+}
+
+void NetworkProcess::removeCredentialsWithOrigins(const Vector<WebCore::SecurityOriginData>& origins, CompletionHandler<void()>&& completionHandler)
+{
+ for (auto& origin : origins) {
+ auto allCredentials = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
+ for (NSURLProtectionSpace* space in allCredentials) {
+ if (origin.protocol == String(space.protocol)
+ && origin.host == String(space.host)
+ && origin.port
+ && *origin.port == space.port) {
+ auto credentials = allCredentials[space];
+ for (NSString* user in credentials) {
+ auto credential = credentials[user];
+ [[NSURLCredentialStorage sharedCredentialStorage] removeCredential:credential forProtectionSpace:space];
+ }
+ }
+ }
+ }
+ completionHandler();
+}
+
#if PLATFORM(MAC)
void NetworkProcess::setSharedHTTPCookieStorage(const Vector<uint8_t>& identifier)
{
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (246774 => 246775)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-06-25 00:26:41 UTC (rev 246775)
@@ -516,6 +516,24 @@
});
}
+#if PLATFORM(COCOA)
+ if (dataTypes.contains(WebsiteDataType::Credentials) && isPersistent()) {
+ for (auto& processPool : processPools()) {
+ if (!processPool->networkProcess())
+ continue;
+
+ callbackAggregator->addPendingCallback();
+ WTF::CompletionHandler<void(Vector<WebCore::SecurityOriginData>&&)> completionHandler = [callbackAggregator](Vector<WebCore::SecurityOriginData>&& origins) mutable {
+ WebsiteData websiteData;
+ for (auto& origin : origins)
+ websiteData.entries.append(WebsiteData::Entry { origin, WebsiteDataType::Credentials, 0 });
+ callbackAggregator->removePendingCallback(WTFMove(websiteData));
+ };
+ processPool->networkProcess()->sendWithAsyncReply(Messages::NetworkProcess::OriginsWithPersistentCredentials(), WTFMove(completionHandler));
+ }
+ }
+#endif
+
#if ENABLE(NETSCAPE_PLUGIN_API)
if (dataTypes.contains(WebsiteDataType::PlugInData) && isPersistent()) {
class State {
@@ -622,6 +640,9 @@
if (dataTypes.contains(WebsiteDataType::MemoryCache))
processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched);
+ if (dataTypes.contains(WebsiteDataType::Credentials))
+ processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched);
+
return processAccessType;
}
@@ -1068,6 +1089,19 @@
});
}
+ if (dataTypes.contains(WebsiteDataType::Credentials) && isPersistent()) {
+ for (auto& processPool : processPools()) {
+ if (!processPool->networkProcess())
+ continue;
+
+ callbackAggregator->addPendingCallback();
+ WTF::CompletionHandler<void()> completionHandler = [callbackAggregator]() mutable {
+ callbackAggregator->removePendingCallback();
+ };
+ processPool->networkProcess()->sendWithAsyncReply(Messages::NetworkProcess::RemoveCredentialsWithOrigins(origins), WTFMove(completionHandler));
+ }
+ }
+
#if ENABLE(NETSCAPE_PLUGIN_API)
if (dataTypes.contains(WebsiteDataType::PlugInData) && isPersistent()) {
Vector<String> hostNames;
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm (246774 => 246775)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm 2019-06-25 00:06:39 UTC (rev 246774)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm 2019-06-25 00:26:41 UTC (rev 246775)
@@ -225,51 +225,6 @@
TestWebKitAPI::Util::run(&done);
}
-TEST(WKWebsiteDataStore, RemoveAllPersistentCredentials)
-{
- usePersistentCredentialStorage = true;
-
- TCPServer server(TCPServer::respondWithChallengeThenOK);
- auto websiteDataStore = [WKWebsiteDataStore defaultDataStore];
- auto navigationDelegate = adoptNS([[NavigationTestDelegate alloc] init]);
- auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
- [webView setNavigationDelegate:navigationDelegate.get()];
- [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1:%d/", server.port()]]]];
- [navigationDelegate waitForDidFinishNavigation];
-
- readyToContinue = false;
- [websiteDataStore fetchDataRecordsOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) {
- bool foundRecord = false;
- for (WKWebsiteDataRecord *record in dataRecords) {
- auto name = [record displayName];
- if ([name isEqualToString:@"127.0.0.1"])
- foundRecord = true;
- }
- EXPECT_TRUE(foundRecord);
- readyToContinue = true;
- }];
- TestWebKitAPI::Util::run(&readyToContinue);
-
- readyToContinue = false;
- [websiteDataStore removeDataOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] modifiedSince:[NSDate distantPast] completionHandler:^() {
- readyToContinue = true;
- }];
- TestWebKitAPI::Util::run(&readyToContinue);
-
- readyToContinue = false;
- [websiteDataStore fetchDataRecordsOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) {
- bool foundRecord = false;
- for (WKWebsiteDataRecord *record in dataRecords) {
- auto name = [record displayName];
- if ([name isEqualToString:@"127.0.0.1"])
- foundRecord = true;
- }
- EXPECT_FALSE(foundRecord);
- readyToContinue = true;
- }];
- TestWebKitAPI::Util::run(&readyToContinue);
-}
-
TEST(WKWebsiteDataStore, RemoveNonPersistentCredentials)
{
TCPServer server(TCPServer::respondWithChallengeThenOK);