Diff
Modified: tags/Safari-604.1.25/Source/WebKit2/ChangeLog (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/ChangeLog 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/ChangeLog 2017-06-12 18:49:13 UTC (rev 218118)
@@ -1,5 +1,40 @@
2017-06-12 Matthew Hanson <matthew_han...@apple.com>
+ Cherry-pick r218011. rdar://problem/32679311
+
+ 2017-06-09 Brent Fulgham <bfulg...@apple.com>
+
+ Use Function rather than std::function for thread safety in WebsiteDataStore
+ https://bugs.webkit.org/show_bug.cgi?id=173172
+
+ Reviewed by Chris Dumez.
+ <rdar://problem/32679311>
+
+ Remove a few more instances of std::function in the WebsiteDataStore, and WTFMove completion handler to
+ avoid unnecessary copies.
+
+ * Shared/WebsiteData/WebsiteDataType.h: Remove redundant WebsiteDataType from name.
+ * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
+ (WebKit::toWebsiteDataType): Update for revised name.
+ (WebKit::toWKWebsiteDataTypes): Ditto.
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores): ASSERT that
+ this function, as well as its completion handler, are getting called from the main thread.
+ (WebKit::WebProcessProxy::topPrivatelyControlledDomainsWithWebiteData): Ditto.
+ (WebKit::WebProcessProxy::fetchWebsiteData): Move the completionHandler.
+ (WebKit::WebProcessProxy::deleteWebsiteData): Ditto.
+ (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins): Ditto.
+ * UIProcess/WebProcessProxy.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::fetchData): Switch to Function, and move completion handler.
+ (WebKit::WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains): Ditto.
+ (WebKit::WebsiteDataStore::topPrivatelyControlledDomainsWithWebsiteData): Ditto.
+ (WebKit::WebsiteDataStore::removeData): Ditto.
+ (WebKit::WebsiteDataStore::removeDataForTopPrivatelyControlledDomains): Ditto.
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+
+2017-06-12 Matthew Hanson <matthew_han...@apple.com>
+
Cherry-pick r218006. rdar://problem/32598919
2017-06-09 Chris Dumez <cdu...@apple.com>
Modified: tags/Safari-604.1.25/Source/WebKit2/Shared/WebsiteData/WebsiteDataType.h (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/Shared/WebsiteData/WebsiteDataType.h 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/Shared/WebsiteData/WebsiteDataType.h 2017-06-12 18:49:13 UTC (rev 218118)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -46,7 +46,7 @@
#if ENABLE(MEDIA_STREAM)
MediaDeviceIdentifier = 1 << 12,
#endif
- WebsiteDataTypeResourceLoadStatistics = 1 << 13,
+ ResourceLoadStatistics = 1 << 13,
Credentials = 1 << 14,
};
Modified: tags/Safari-604.1.25/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2017-06-12 18:49:13 UTC (rev 218118)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015-2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -69,7 +69,7 @@
return WebsiteDataType::PlugInData;
#endif
if ([websiteDataType isEqualToString:_WKWebsiteDataTypeResourceLoadStatistics])
- return WebsiteDataType::WebsiteDataTypeResourceLoadStatistics;
+ return WebsiteDataType::ResourceLoadStatistics;
if ([websiteDataType isEqualToString:_WKWebsiteDataTypeCredentials])
return WebsiteDataType::Credentials;
return std::nullopt;
@@ -117,7 +117,7 @@
if (websiteDataTypes.contains(WebsiteDataType::PlugInData))
[wkWebsiteDataTypes addObject:_WKWebsiteDataTypePlugInData];
#endif
- if (websiteDataTypes.contains(WebsiteDataType::WebsiteDataTypeResourceLoadStatistics))
+ if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
[wkWebsiteDataTypes addObject:_WKWebsiteDataTypeResourceLoadStatistics];
if (websiteDataTypes.contains(WebsiteDataType::Credentials))
[wkWebsiteDataTypes addObject:_WKWebsiteDataTypeCredentials];
Modified: tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.cpp (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2017-06-12 18:49:13 UTC (rev 218118)
@@ -211,6 +211,9 @@
void WebProcessProxy::deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores(OptionSet<WebsiteDataType> dataTypes, Vector<String>&& topPrivatelyControlledDomains, bool shouldNotifyPage, Function<void(Vector<String>)>&& completionHandler)
{
+ // We expect this to be called on the main thread so we get the default website data store.
+ ASSERT(isMainThread());
+
struct CallbackAggregator : ThreadSafeRefCounted<CallbackAggregator> {
explicit CallbackAggregator(Function<void(Vector<String>)>&& completionHandler)
: completionHandler(WTFMove(completionHandler))
@@ -254,19 +257,24 @@
continue;
visitedSessionIDs.add(dataStore.sessionID());
callbackAggregator->addPendingCallback();
- dataStore.removeDataForTopPrivatelyControlledDomains(dataTypes, { }, WTFMove(topPrivatelyControlledDomains), [callbackAggregator, shouldNotifyPage, page](auto domainsWithDeletedWebsiteData) {
+ dataStore.removeDataForTopPrivatelyControlledDomains(dataTypes, { }, WTFMove(topPrivatelyControlledDomains), [callbackAggregator, shouldNotifyPage, page](Vector<String>&& domainsWithDeletedWebsiteData) {
+ // When completing the task, we should be getting called on the main thread.
+ ASSERT(isMainThread());
+
if (shouldNotifyPage)
page.value->postMessageToInjectedBundle("WebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished", nullptr);
- WTF::RunLoop::main().dispatch([callbackAggregator, domainsWithDeletedWebsiteData] {
- callbackAggregator->addDomainsWithDeletedWebsiteData(domainsWithDeletedWebsiteData);
- callbackAggregator->removePendingCallback();
- });
+
+ callbackAggregator->addDomainsWithDeletedWebsiteData(WTFMove(domainsWithDeletedWebsiteData));
+ callbackAggregator->removePendingCallback();
});
}
}
-void WebProcessProxy::topPrivatelyControlledDomainsWithWebiteData(OptionSet<WebsiteDataType> dataTypes, bool shouldNotifyPage, Function<void(HashSet<String>&&)> completionHandler)
+void WebProcessProxy::topPrivatelyControlledDomainsWithWebiteData(OptionSet<WebsiteDataType> dataTypes, bool shouldNotifyPage, Function<void(HashSet<String>&&)>&& completionHandler)
{
+ // We expect this to be called on the main thread so we get the default website data store.
+ ASSERT(isMainThread());
+
struct CallbackAggregator : ThreadSafeRefCounted<CallbackAggregator> {
explicit CallbackAggregator(Function<void(HashSet<String>&&)>&& completionHandler)
: completionHandler(WTFMove(completionHandler))
@@ -312,13 +320,14 @@
visitedSessionIDs.add(dataStore.sessionID());
callbackAggregator->addPendingCallback();
dataStore.topPrivatelyControlledDomainsWithWebsiteData(dataTypes, { }, [callbackAggregator, shouldNotifyPage, page](HashSet<String>&& domainsWithDataRecords) {
+ // When completing the task, we should be getting called on the main thread.
+ ASSERT(isMainThread());
+
if (shouldNotifyPage)
page.value->postMessageToInjectedBundle("WebsiteDataScanForTopPrivatelyControlledDomainsFinished", nullptr);
- WTF::RunLoop::main().dispatch([callbackAggregator, domainsWithDataRecords = WTFMove(domainsWithDataRecords)]() mutable {
- callbackAggregator->addDomainsWithDeletedWebsiteData(WTFMove(domainsWithDataRecords));
- callbackAggregator->removePendingCallback();
- });
+ callbackAggregator->addDomainsWithDeletedWebsiteData(WTFMove(domainsWithDataRecords));
+ callbackAggregator->removePendingCallback();
});
}
}
@@ -867,7 +876,7 @@
page->activityStateDidChange(ActivityState::IsVisuallyIdle);
}
-void WebProcessProxy::fetchWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, Function<void (WebsiteData)> completionHandler)
+void WebProcessProxy::fetchWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, Function<void(WebsiteData)>&& completionHandler)
{
ASSERT(canSendMessage());
@@ -885,7 +894,7 @@
});
}
-void WebProcessProxy::deleteWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, std::chrono::system_clock::time_point modifiedSince, Function<void ()> completionHandler)
+void WebProcessProxy::deleteWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, std::chrono::system_clock::time_point modifiedSince, Function<void()>&& completionHandler)
{
ASSERT(canSendMessage());
@@ -898,7 +907,7 @@
});
}
-void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, Function<void()> completionHandler)
+void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler)
{
ASSERT(canSendMessage());
Modified: tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.h (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.h 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebProcessProxy.h 2017-06-12 18:49:13 UTC (rev 218118)
@@ -138,11 +138,11 @@
void didSaveToPageCache();
void releasePageCache();
- void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, Function<void(WebsiteData)> completionHandler);
- void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, Function<void()> completionHandler);
- void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, Function<void()> completionHandler);
+ void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, Function<void(WebsiteData)>&& completionHandler);
+ void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, Function<void()>&& completionHandler);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, Function<void()>&& completionHandler);
static void deleteWebsiteDataForTopPrivatelyControlledDomainsInAllPersistentDataStores(OptionSet<WebsiteDataType>, Vector<String>&& topPrivatelyControlledDomains, bool shouldNotifyPages, Function<void(Vector<String>)>&& completionHandler);
- static void topPrivatelyControlledDomainsWithWebiteData(OptionSet<WebsiteDataType> dataTypes, bool shouldNotifyPage, Function<void(HashSet<String>&&)> completionHandler);
+ static void topPrivatelyControlledDomainsWithWebiteData(OptionSet<WebsiteDataType> dataTypes, bool shouldNotifyPage, Function<void(HashSet<String>&&)>&& completionHandler);
static void notifyPageStatisticsAndDataRecordsProcessed();
void enableSuddenTermination();
Modified: tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-06-12 18:49:13 UTC (rev 218118)
@@ -182,10 +182,10 @@
return processAccessType;
}
-void WebsiteDataStore::fetchData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void (Vector<WebsiteDataRecord>)> completionHandler)
+void WebsiteDataStore::fetchData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Function<void(Vector<WebsiteDataRecord>)>&& completionHandler)
{
struct CallbackAggregator final : ThreadSafeRefCounted<CallbackAggregator> {
- explicit CallbackAggregator(OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void (Vector<WebsiteDataRecord>)> completionHandler)
+ explicit CallbackAggregator(OptionSet<WebsiteDataFetchOption> fetchOptions, Function<void(Vector<WebsiteDataRecord>)>&& completionHandler)
: fetchOptions(fetchOptions)
, completionHandler(WTFMove(completionHandler))
{
@@ -281,7 +281,7 @@
const OptionSet<WebsiteDataFetchOption> fetchOptions;
unsigned pendingCallbacks = 0;
- std::function<void (Vector<WebsiteDataRecord>)> completionHandler;
+ Function<void(Vector<WebsiteDataRecord>)> completionHandler;
HashMap<String, WebsiteDataRecord> m_websiteDataRecords;
};
@@ -507,9 +507,9 @@
callbackAggregator->callIfNeeded();
}
-void WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Vector<String>&& topPrivatelyControlledDomains, std::function<void(Vector<WebsiteDataRecord>&&, Vector<String>&&)> completionHandler)
+void WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Vector<String>&& topPrivatelyControlledDomains, Function<void(Vector<WebsiteDataRecord>&&, Vector<String>&&)>&& completionHandler)
{
- fetchData(dataTypes, fetchOptions, [topPrivatelyControlledDomains = WTFMove(topPrivatelyControlledDomains), completionHandler](auto&& existingDataRecords) {
+ fetchData(dataTypes, fetchOptions, [topPrivatelyControlledDomains = WTFMove(topPrivatelyControlledDomains), completionHandler = WTFMove(completionHandler)](auto&& existingDataRecords) {
Vector<WebsiteDataRecord> matchingDataRecords;
Vector<String> domainsWithMatchingDataRecords;
for (auto&& dataRecord : existingDataRecords) {
@@ -525,15 +525,15 @@
});
}
-void WebsiteDataStore::topPrivatelyControlledDomainsWithWebsiteData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void(HashSet<String>&&)> completionHandler)
+void WebsiteDataStore::topPrivatelyControlledDomainsWithWebsiteData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Function<void(HashSet<String>&&)>&& completionHandler)
{
- fetchData(dataTypes, fetchOptions, [completionHandler, this](auto&& existingDataRecords) {
+ fetchData(dataTypes, fetchOptions, [completionHandler = WTFMove(completionHandler), this, protectedThis = makeRef(*this)](auto&& existingDataRecords) {
HashSet<String> domainsWithDataRecords;
for (auto&& dataRecord : existingDataRecords) {
String domain = dataRecord.topPrivatelyControlledDomain();
if (domain.isEmpty())
continue;
- domainsWithDataRecords.add(domain);
+ domainsWithDataRecords.add(WTFMove(domain));
}
completionHandler(WTFMove(domainsWithDataRecords));
});
@@ -577,10 +577,10 @@
return processAccessType;
}
-void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler)
+void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, std::chrono::system_clock::time_point modifiedSince, Function<void()>&& completionHandler)
{
struct CallbackAggregator : ThreadSafeRefCounted<CallbackAggregator> {
- explicit CallbackAggregator (std::function<void ()> completionHandler)
+ explicit CallbackAggregator(Function<void()>&& completionHandler)
: completionHandler(WTFMove(completionHandler))
{
}
@@ -605,7 +605,7 @@
}
unsigned pendingCallbacks = 0;
- std::function<void()> completionHandler;
+ Function<void()> completionHandler;
};
RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
@@ -800,7 +800,7 @@
}
#endif
- if (dataTypes.contains(WebsiteDataType::WebsiteDataTypeResourceLoadStatistics))
+ if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore(modifiedSince);
// There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
@@ -807,7 +807,7 @@
callbackAggregator->callIfNeeded();
}
-void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, const Vector<WebsiteDataRecord>& dataRecords, std::function<void ()> completionHandler)
+void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, const Vector<WebsiteDataRecord>& dataRecords, Function<void()>&& completionHandler)
{
Vector<WebCore::SecurityOriginData> origins;
@@ -817,7 +817,7 @@
}
struct CallbackAggregator : ThreadSafeRefCounted<CallbackAggregator> {
- explicit CallbackAggregator (std::function<void ()> completionHandler)
+ explicit CallbackAggregator(Function<void()>&& completionHandler)
: completionHandler(WTFMove(completionHandler))
{
}
@@ -842,7 +842,7 @@
}
unsigned pendingCallbacks = 0;
- std::function<void()> completionHandler;
+ Function<void()> completionHandler;
};
RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
@@ -1069,7 +1069,7 @@
}
#endif
- if (dataTypes.contains(WebsiteDataType::WebsiteDataTypeResourceLoadStatistics))
+ if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
WebCore::ResourceLoadObserver::sharedObserver().clearInMemoryAndPersistentStore();
// There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
@@ -1076,11 +1076,11 @@
callbackAggregator->callIfNeeded();
}
-void WebsiteDataStore::removeDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Vector<String>&& topPrivatelyControlledDomains, std::function<void(Vector<String>)> completionHandler)
+void WebsiteDataStore::removeDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Vector<String>&& topPrivatelyControlledDomains, Function<void(Vector<String>&&)>&& completionHandler)
{
- fetchDataForTopPrivatelyControlledDomains(dataTypes, fetchOptions, WTFMove(topPrivatelyControlledDomains), [dataTypes, completionHandler, this](auto websiteDataRecords, auto domainsWithDataRecords) {
- this->removeData(dataTypes, websiteDataRecords, [domainsWithDataRecords, completionHandler]() {
- completionHandler(domainsWithDataRecords);
+ fetchDataForTopPrivatelyControlledDomains(dataTypes, fetchOptions, WTFMove(topPrivatelyControlledDomains), [dataTypes, completionHandler = WTFMove(completionHandler), this, protectedThis = makeRef(*this)](Vector<WebsiteDataRecord>&& websiteDataRecords, Vector<String>&& domainsWithDataRecords) mutable {
+ this->removeData(dataTypes, websiteDataRecords, [domainsWithDataRecords = WTFMove(domainsWithDataRecords), completionHandler = WTFMove(completionHandler)]() mutable {
+ completionHandler(WTFMove(domainsWithDataRecords));
});
});
}
Modified: tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (218117 => 218118)
--- tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h 2017-06-12 18:49:09 UTC (rev 218117)
+++ tags/Safari-604.1.25/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h 2017-06-12 18:49:13 UTC (rev 218118)
@@ -31,6 +31,7 @@
#include <WebCore/SecurityOriginHash.h>
#include <WebCore/SessionID.h>
#include <functional>
+#include <wtf/Function.h>
#include <wtf/HashSet.h>
#include <wtf/OptionSet.h>
#include <wtf/RefCounted.h>
@@ -93,12 +94,12 @@
static void cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage);
- void fetchData(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, std::function<void (Vector<WebsiteDataRecord>)> completionHandler);
- void fetchDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Vector<String>&& topPrivatelyControlledDomains, std::function<void(Vector<WebsiteDataRecord>&&, Vector<String>&&)> completionHandler);
- void topPrivatelyControlledDomainsWithWebsiteData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void(HashSet<String>&&)> completionHandler);
- void removeData(OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
- void removeData(OptionSet<WebsiteDataType>, const Vector<WebsiteDataRecord>&, std::function<void ()> completionHandler);
- void removeDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Vector<String>&& topPrivatelyControlledDomains, std::function<void(Vector<String>)> completionHandler);
+ void fetchData(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Function<void(Vector<WebsiteDataRecord>)>&& completionHandler);
+ void fetchDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Vector<String>&& topPrivatelyControlledDomains, Function<void(Vector<WebsiteDataRecord>&&, Vector<String>&&)>&& completionHandler);
+ void topPrivatelyControlledDomainsWithWebsiteData(OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, Function<void(HashSet<String>&&)>&& completionHandler);
+ void removeData(OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, Function<void()>&& completionHandler);
+ void removeData(OptionSet<WebsiteDataType>, const Vector<WebsiteDataRecord>&, Function<void()>&& completionHandler);
+ void removeDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Vector<String>&& topPrivatelyControlledDomains, Function<void(Vector<String>&&)>&& completionHandler);
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
void shouldPartitionCookiesForTopPrivatelyOwnedDomains(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst);