WebKit Bugzilla
Attachment 368779 Details for
Bug 197510
: -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197510-20190502100040.patch (text/plain), 9.52 KB, created by
Per Arne Vollan
on 2019-05-02 10:00:41 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Per Arne Vollan
Created:
2019-05-02 10:00:41 PDT
Size:
9.52 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 244872) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,24 @@ >+2019-05-02 Per Arne Vollan <pvollan@apple.com> >+ >+ -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials >+ https://bugs.webkit.org/show_bug.cgi?id=197510 >+ <rdar://problem/50372338> >+ >+ Reviewed by Alex Christensen. >+ >+ When asked to delete persistent credentials for a set of origins, send a message to the network process with the >+ list of origins. The network process will then delete all persistent credentials from these origins from >+ NSURLCredentialStorage. >+ >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::removeCredentialsWithOrigins): >+ * NetworkProcess/NetworkProcess.h: >+ * NetworkProcess/NetworkProcess.messages.in: >+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm: >+ (WebKit::NetworkProcess::removeCredentialsWithOrigins): >+ * UIProcess/WebsiteData/WebsiteDataStore.cpp: >+ (WebKit::WebsiteDataStore::removeData): >+ > 2019-05-02 Frederic Wang <fwang@igalia.com> > > [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime >Index: Source/WebKit/NetworkProcess/NetworkProcess.cpp >=================================================================== >--- Source/WebKit/NetworkProcess/NetworkProcess.cpp (revision 244861) >+++ Source/WebKit/NetworkProcess/NetworkProcess.cpp (working copy) >@@ -2506,7 +2506,12 @@ void NetworkProcess::originsWithPersiste > { > completionHandler(Vector<WebCore::SecurityOriginData>()); > } >- >+ >+void NetworkProcess::removeCredentialsWithOrigins(const Vector<WebCore::SecurityOriginData>&, CompletionHandler<void()>&& completionHandler) >+{ >+ completionHandler(); >+} >+ > void NetworkProcess::initializeProcess(const AuxiliaryProcessInitializationParameters&) > { > } >Index: Source/WebKit/NetworkProcess/NetworkProcess.h >=================================================================== >--- Source/WebKit/NetworkProcess/NetworkProcess.h (revision 244861) >+++ Source/WebKit/NetworkProcess/NetworkProcess.h (working copy) >@@ -435,6 +435,7 @@ private: > void removeCredential(WebCore::Credential&&, WebCore::ProtectionSpace&&, 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; >Index: Source/WebKit/NetworkProcess/NetworkProcess.messages.in >=================================================================== >--- Source/WebKit/NetworkProcess/NetworkProcess.messages.in (revision 244861) >+++ Source/WebKit/NetworkProcess/NetworkProcess.messages.in (working copy) >@@ -173,5 +173,6 @@ messages -> NetworkProcess LegacyReceive > SetAdClickAttributionConversionURLForTesting(PAL::SessionID sessionID, URL url) -> () Async > MarkAdClickAttributionsAsExpiredForTesting(PAL::SessionID sessionID) -> () Async > RemoveCredential(WebCore::Credential credential, WebCore::ProtectionSpace protectionSpace) -> () Async >- OriginsWithPersistentCredentials() -> (Vector<WebCore::SecurityOriginData> persistentCredentials) Async >+ OriginsWithPersistentCredentials() -> (Vector<WebCore::SecurityOriginData> origins) Async >+ RemoveCredentialsWithOrigins(Vector<WebCore::SecurityOriginData> origins) -> () Async > } >Index: Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm >=================================================================== >--- Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (revision 244861) >+++ Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (working copy) >@@ -222,6 +222,26 @@ void NetworkProcess::originsWithPersiste > 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) > { >Index: Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (revision 244861) >+++ Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (working copy) >@@ -1181,6 +1181,19 @@ void WebsiteDataStore::removeData(Option > }); > } > >+ 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; >Index: Tools/ChangeLog >=================================================================== >--- Tools/ChangeLog (revision 244870) >+++ Tools/ChangeLog (working copy) >@@ -1,3 +1,13 @@ >+2019-05-02 Per Arne Vollan <pvollan@apple.com> >+ >+ -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials >+ https://bugs.webkit.org/show_bug.cgi?id=197510 >+ >+ Reviewed by Alex Christensen. >+ >+ * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm: >+ (TestWebKitAPI::TEST): >+ > 2019-05-02 Frederic Wang <fwang@igalia.com> > > [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime >Index: Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm >=================================================================== >--- Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm (revision 244861) >+++ Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm (working copy) >@@ -197,4 +197,55 @@ TEST(WKWebsiteDataStore, FetchPersistent > TestWebKitAPI::Util::run(&removedCredential); > } > >+TEST(WKWebsiteDataStore, RemovePersistentCredentials) >+{ >+ TCPServer server(respondWithChallengeThenOK); >+ >+ usePersistentCredentialStorage = true; >+ 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]; >+ >+ __block bool done = false; >+ __block RetainPtr<WKWebsiteDataRecord> expectedRecord; >+ [websiteDataStore fetchDataRecordsOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) { >+ int credentialCount = dataRecords.count; >+ ASSERT_GT(credentialCount, 0); >+ for (WKWebsiteDataRecord *record in dataRecords) { >+ auto name = [record displayName]; >+ if ([name isEqualToString:@"127.0.0.1"]) { >+ expectedRecord = record; >+ break; >+ } >+ } >+ EXPECT_TRUE(expectedRecord); >+ done = true; >+ }]; >+ TestWebKitAPI::Util::run(&done); >+ >+ done = false; >+ [websiteDataStore removeDataOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] forDataRecords:[NSArray arrayWithObject:expectedRecord.get()] completionHandler:^(void) { >+ done = true; >+ }]; >+ TestWebKitAPI::Util::run(&done); >+ >+ done = false; >+ [websiteDataStore fetchDataRecordsOfTypes:[NSSet setWithObject:_WKWebsiteDataTypeCredentials] completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) { >+ bool foundLocalHostRecord = false; >+ for (WKWebsiteDataRecord *record in dataRecords) { >+ auto name = [record displayName]; >+ if ([name isEqualToString:@"127.0.0.1"]) { >+ foundLocalHostRecord = true; >+ break; >+ } >+ } >+ EXPECT_FALSE(foundLocalHostRecord); >+ done = true; >+ }]; >+ TestWebKitAPI::Util::run(&done); >+} >+ > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197510
:
368772
|
368779
|
368797
|
369073
|
369127
|
369165