Title: [246775] trunk

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);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to