Diff
Modified: trunk/Source/WebCore/ChangeLog (246529 => 246530)
--- trunk/Source/WebCore/ChangeLog 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebCore/ChangeLog 2019-06-18 01:43:39 UTC (rev 246530)
@@ -1,3 +1,26 @@
+2019-06-17 Sihui Liu <[email protected]>
+
+ -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
+ https://bugs.webkit.org/show_bug.cgi?id=198854
+ <rdar://problem/51386058>
+
+ Reviewed by Geoffrey Garen.
+
+ Add option NSURLCredentialStorageRemoveSynchronizableCredentials when removing persistent credential so
+ credentials from same account will be removed from all devices.
+
+ Test: WKWebsiteDataStore.RemoveAllPersistentCredentials
+
+ * platform/network/CredentialStorage.cpp:
+ (WebCore::CredentialStorage::originsWithPersistentCredentials):
+ (WebCore::CredentialStorage::removePersistentCredentialsWithOrigins):
+ (WebCore::CredentialStorage::clearPersistentCredentials):
+ * platform/network/CredentialStorage.h:
+ * platform/network/mac/CredentialStorageMac.mm:
+ (WebCore::CredentialStorage::originsWithPersistentCredentials):
+ (WebCore::CredentialStorage::removePersistentCredentialsWithOrigins):
+ (WebCore::CredentialStorage::clearPersistentCredentials):
+
2019-06-17 Ryosuke Niwa <[email protected]>
m_disconnectedFrame can be null in DOMWindowExtension::willDestroyGlobalObjectInCachedFrame()
Modified: trunk/Source/WebCore/platform/network/CredentialStorage.cpp (246529 => 246530)
--- trunk/Source/WebCore/platform/network/CredentialStorage.cpp 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebCore/platform/network/CredentialStorage.cpp 2019-06-18 01:43:39 UTC (rev 246530)
@@ -187,4 +187,21 @@
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 (246529 => 246530)
--- trunk/Source/WebCore/platform/network/CredentialStorage.h 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebCore/platform/network/CredentialStorage.h 2019-06-18 01:43:39 UTC (rev 246530)
@@ -48,6 +48,8 @@
// 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 (246529 => 246530)
--- trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm 2019-06-18 01:43:39 UTC (rev 246530)
@@ -38,13 +38,46 @@
return credential ? Credential(credential) : Credential();
}
-Vector<WebCore::SecurityOriginData> CredentialStorage::originsWithPersistentCredentials()
+Vector<SecurityOriginData> CredentialStorage::originsWithPersistentCredentials()
{
- Vector<WebCore::SecurityOriginData> origins;
+ Vector<SecurityOriginData> origins;
auto allCredentials = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
for (NSURLProtectionSpace* key in allCredentials.keyEnumerator)
- origins.append(WebCore::SecurityOriginData { String(key.protocol), String(key.host), key.port });
+ origins.append(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/ChangeLog (246529 => 246530)
--- trunk/Source/WebKit/ChangeLog 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/ChangeLog 2019-06-18 01:43:39 UTC (rev 246530)
@@ -1,3 +1,32 @@
+2019-06-17 Sihui Liu <[email protected]>
+
+ -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
+ https://bugs.webkit.org/show_bug.cgi?id=198854
+ <rdar://problem/51386058>
+
+ Reviewed by Geoffrey Garen.
+
+ Clear persistent credentials in deleteWebsiteData of network process.
+
+ Also, merge originsWithPersistentCredentials and removeCredentialsWithOrigins into fetchWebsiteData and
+ deleteWebsiteData, and move credentials handling to WebCore.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::fetchWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+ (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
+ (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::NetworkProcess::originsWithPersistentCredentials): Deleted.
+ (WebKit::NetworkProcess::removeCredentialsWithOrigins): Deleted.
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::fetchDataAndApply):
+ (WebKit::computeWebProcessAccessTypeForDataRemoval):
+ (WebKit::WebsiteDataStore::removeData):
+
2019-06-17 Tim Horton <[email protected]>
Fix the build with case-sensitive includes
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (246529 => 246530)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-06-18 01:43:39 UTC (rev 246530)
@@ -1282,6 +1282,11 @@
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)) {
@@ -1359,6 +1364,8 @@
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] {
@@ -1496,6 +1503,8 @@
for (auto& originData : originDatas)
session->credentialStorage().removeCredentialsWithOrigin(originData);
}
+ if (!sessionID.isEphemeral())
+ WebCore::CredentialStorage::removePersistentCredentialsWithOrigins(originDatas);
}
// FIXME: Implement storage quota clearing for these origins.
@@ -2541,16 +2550,6 @@
}
#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 (246529 => 246530)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-06-18 01:43:39 UTC (rev 246530)
@@ -436,9 +436,6 @@
#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 (246529 => 246530)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-06-18 01:43:39 UTC (rev 246530)
@@ -168,7 +168,5 @@
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 (246529 => 246530)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2019-06-18 01:43:39 UTC (rev 246530)
@@ -212,31 +212,6 @@
}).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 (246529 => 246530)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2019-06-18 01:43:39 UTC (rev 246530)
@@ -516,24 +516,6 @@
});
}
-#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 {
@@ -640,9 +622,6 @@
if (dataTypes.contains(WebsiteDataType::MemoryCache))
processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched);
- if (dataTypes.contains(WebsiteDataType::Credentials))
- processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched);
-
return processAccessType;
}
@@ -1089,19 +1068,6 @@
});
}
- 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/ChangeLog (246529 => 246530)
--- trunk/Tools/ChangeLog 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Tools/ChangeLog 2019-06-18 01:43:39 UTC (rev 246530)
@@ -1,3 +1,14 @@
+2019-06-17 Sihui Liu <[email protected]>
+
+ -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
+ https://bugs.webkit.org/show_bug.cgi?id=198854
+ <rdar://problem/51386058>
+
+ Reviewed by Geoffrey Garen.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
+ (TestWebKitAPI::TEST):
+
2019-06-17 Adrian Perez de Castro <[email protected]>
[Flatpak][JHBuild] Update build environments to use WPEBackend-fdo 1.3.1
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm (246529 => 246530)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm 2019-06-18 01:41:01 UTC (rev 246529)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm 2019-06-18 01:43:39 UTC (rev 246530)
@@ -252,6 +252,51 @@
TestWebKitAPI::Util::run(&done);
}
+TEST(WKWebsiteDataStore, RemoveAllPersistentCredentials)
+{
+ usePersistentCredentialStorage = true;
+
+ TCPServer server(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(respondWithChallengeThenOK);