Diff
Modified: trunk/LayoutTests/ChangeLog (244571 => 244572)
--- trunk/LayoutTests/ChangeLog 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/LayoutTests/ChangeLog 2019-04-24 00:13:00 UTC (rev 244572)
@@ -1,3 +1,14 @@
+2019-04-23 John Wilander <[email protected]>
+
+ Remove Ad Click Attribution data when removing website data
+ https://bugs.webkit.org/show_bug.cgi?id=197215
+ <rdar://problem/47668988>
+
+ Reviewed by Chris Dumez.
+
+ * http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt: Added.
+ * http/tests/adClickAttribution/clear-through-website-data-removal.html: Added.
+
2019-04-23 Devin Rousso <[email protected]>
ContentSecurityPolicy::logToConsole should include line/column number and source location
Added: trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt (0 => 244572)
--- trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt 2019-04-24 00:13:00 UTC (rev 244572)
@@ -0,0 +1,5 @@
+Tests that both unconverted and converted attributions are cleared on website data removal.
+
+
+
+No stored Ad Click Attribution data.
Added: trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal.html (0 => 244572)
--- trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal.html (rev 0)
+++ trunk/LayoutTests/http/tests/adClickAttribution/clear-through-website-data-removal.html 2019-04-24 00:13:00 UTC (rev 244572)
@@ -0,0 +1,83 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true internal:AdClickAttributionEnabled=true ] -->
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+ <script src=""
+ <script src=""
+</head>
+<body _onload_="setTimeout(runTest, 0)">
+<div id="description">Tests that both unconverted and converted attributions are cleared on website data removal.</div>
+<a id="targetLink">Link</a><br>
+<div id="output"></div>
+<script>
+ const path = "/adClickAttribution/clear-through-website-data-removal.html";
+ const configuration = [
+ {
+ href: "http://localhost:8000" + path + "?stepTwo",
+ adcampaignid: "3",
+ addestination: "http://localhost:8000"
+ },
+ {
+ href: "http://127.0.0.1:8000" + path + "?stepThree",
+ adcampaignid: "4",
+ addestination: "http://127.0.0.1:8000"
+ }
+ ];
+
+ prepareTest();
+
+ function configureLink(index) {
+ let linkElement = document.getElementById("targetLink");
+ linkElement.setAttribute("href", configuration[index].href);
+ linkElement.setAttribute("adcampaignid", configuration[index].adcampaignid);
+ linkElement.setAttribute("addestination", configuration[index].addestination);
+ }
+
+ function activateElement(elementID) {
+ var element = document.getElementById(elementID);
+ var centerX = element.offsetLeft + element.offsetWidth / 2;
+ var centerY = element.offsetTop + element.offsetHeight / 2;
+ UIHelper.activateAt(centerX, centerY).then(
+ function () {
+ },
+ function () {
+ document.getElementById("output").innerText = "FAIL Promise rejected.";
+ tearDownAndFinish();
+ }
+ );
+ }
+
+ function runTest() {
+ if (window.testRunner) {
+ if (window.location.search === "") {
+ // First ad click 127.0.0.1 –> localhost.
+ configureLink(0);
+ activateElement("targetLink");
+ } else if (window.location.search === "?stepTwo") {
+ // Convert the first ad click with priority 4, then do a reverse ad click.
+ let imageElement = document.createElement("img");
+ imageElement.src = ""
+ imageElement.id = "pixel";
+ imageElement._onerror_ = function(e) {
+ // Second ad click localhost –> 127.0.0.1.
+ configureLink(1);
+ activateElement("targetLink");
+ };
+ document.body.appendChild(imageElement);
+ } else if (window.location.search === "?stepThree") {
+ testRunner.clearAdClickAttributionsThroughWebsiteDataRemoval();
+ testRunner.dumpAdClickAttribution();
+ document.body.removeChild(document.getElementById("targetLink"));
+ tearDownAndFinish();
+ } else {
+ document.getElementById("output").innerText = "FAIL Unknown window.location.search == " + window.location.search + ".";
+ tearDownAndFinish();
+ }
+ } else {
+ document.getElementById("output").innerText = "FAIL No testRunner.";
+ }
+ }
+</script>
+</body>
+</html>
Modified: trunk/Source/WebKit/ChangeLog (244571 => 244572)
--- trunk/Source/WebKit/ChangeLog 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/ChangeLog 2019-04-24 00:13:00 UTC (rev 244572)
@@ -1,3 +1,55 @@
+2019-04-23 John Wilander <[email protected]>
+
+ Remove Ad Click Attribution data when removing website data
+ https://bugs.webkit.org/show_bug.cgi?id=197215
+ <rdar://problem/47668988>
+
+ Reviewed by Chris Dumez.
+
+ This patch adds a new WebsiteDataType called AdClickAttributions and flags
+ it as owned by the network process.
+
+ The new website data type is added to the Cocoa API layer for
+ website data records management.
+
+ When either of the two WebsiteDataStore::removeData() functions calls
+ NetworkProcess::deleteWebsiteData() or
+ NetworkProcess::deleteWebsiteDataForOrigins() over IPC, the network
+ process now calls into AdClickAttributionManager::clear() and
+ AdClickAttributionManager::clearForRegistrableDomain() respectively,
+ if the website datatypes include WebsiteDataType::AdClickAttributions.
+
+ The patch removes a couple of completion handlers in NetworkSession function
+ calls are because those are not asynchronous.
+
+ * NetworkProcess/AdClickAttributionManager.cpp:
+ (WebKit::AdClickAttributionManager::clear):
+ (WebKit::AdClickAttributionManager::clearForRegistrableDomain):
+ (WebKit::AdClickAttributionManager::toString const):
+ * NetworkProcess/AdClickAttributionManager.h:
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::deleteWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+ (WebKit::NetworkProcess::clearAdClickAttribution):
+ * NetworkProcess/NetworkSession.cpp:
+ (WebKit::NetworkSession::clearAdClickAttribution):
+ (WebKit::NetworkSession::clearAdClickAttributionForRegistrableDomain):
+ * NetworkProcess/NetworkSession.h:
+ * Shared/WebsiteData/WebsiteData.cpp:
+ (WebKit::WebsiteData::ownerProcess):
+ * Shared/WebsiteData/WebsiteDataType.h:
+ * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
+ (WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval):
+ * UIProcess/API/C/WKWebsiteDataStoreRef.h:
+ * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
+ (dataTypesToString):
+ * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
+ (WebKit::toWebsiteDataType):
+ (WebKit::toWKWebsiteDataTypes):
+ * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
+ * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+ (+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):
+
2019-04-23 Tim Horton <[email protected]>
Return annotated text checking strings via UIWKDocumentContext
Modified: trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp (244571 => 244572)
--- trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -169,14 +169,24 @@
startTimer(nextTimeToFire);
}
-void AdClickAttributionManager::clear(CompletionHandler<void()>&& completionHandler)
+void AdClickAttributionManager::clear()
{
m_firePendingConversionRequestsTimer.stop();
m_unconvertedAdClickAttributionMap.clear();
m_convertedAdClickAttributionMap.clear();
- completionHandler();
}
+void AdClickAttributionManager::clearForRegistrableDomain(const RegistrableDomain& domain)
+{
+ m_unconvertedAdClickAttributionMap.removeIf([&domain](auto& keyAndValue) {
+ return keyAndValue.key.first.registrableDomain == domain || keyAndValue.key.second.registrableDomain == domain;
+ });
+
+ m_convertedAdClickAttributionMap.removeIf([&domain](auto& keyAndValue) {
+ return keyAndValue.key.first.registrableDomain == domain || keyAndValue.key.second.registrableDomain == domain;
+ });
+}
+
void AdClickAttributionManager::toString(CompletionHandler<void(String)>&& completionHandler) const
{
if (m_unconvertedAdClickAttributionMap.isEmpty() && m_convertedAdClickAttributionMap.isEmpty())
@@ -197,6 +207,8 @@
unsigned convertedAttributionNumber = 0;
for (auto& attribution : m_convertedAdClickAttributionMap.values()) {
+ if (unconvertedAttributionNumber)
+ builder.append('\n');
if (!convertedAttributionNumber)
builder.appendLiteral("Converted Ad Click Attributions:\n");
else
Modified: trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.h (244571 => 244572)
--- trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/NetworkProcess/AdClickAttributionManager.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -57,7 +57,8 @@
void storeUnconverted(AdClickAttribution&&);
void convert(const Source&, const Destination&, Conversion&&);
- void clear(CompletionHandler<void()>&&);
+ void clear();
+ void clearForRegistrableDomain(const RegistrableDomain&);
void toString(CompletionHandler<void(String)>&&) const;
void setPingLoadFunction(Function<void(NetworkResourceLoadParameters&&, CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)>&&)>&& pingLoadFunction) { m_pingLoadFunction = WTFMove(pingLoadFunction); }
void setOverrideTimerForTesting(bool value) { m_isRunningTest = value; }
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (244571 => 244572)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -1425,6 +1425,11 @@
if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases) || websiteDataTypes.contains(WebsiteDataType::DOMCache))
clearStorageQuota(sessionID);
+
+ if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions)) {
+ if (auto* networkSession = this->networkSession(sessionID))
+ networkSession->clearAdClickAttribution();
+ }
}
static void clearDiskCacheEntries(NetworkCache::Cache* cache, const Vector<SecurityOriginData>& origins, CompletionHandler<void()>&& completionHandler)
@@ -1465,6 +1470,13 @@
}
#endif
+ if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions)) {
+ if (auto* networkSession = this->networkSession(sessionID)) {
+ for (auto& originData : originDatas)
+ networkSession->clearAdClickAttributionForRegistrableDomain(RegistrableDomain::uncheckedCreateFromHost(originData.host));
+ }
+ }
+
auto clearTasksHandler = WTF::CallbackAggregator::create([this, callbackID] {
parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0);
});
@@ -2515,7 +2527,7 @@
void NetworkProcess::clearAdClickAttribution(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
{
if (auto* session = networkSession(sessionID))
- return session->clearAdClickAttribution(WTFMove(completionHandler));
+ session->clearAdClickAttribution();
completionHandler();
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (244571 => 244572)
--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -158,11 +158,16 @@
m_adClickAttribution->toString(WTFMove(completionHandler));
}
-void NetworkSession::clearAdClickAttribution(CompletionHandler<void()>&& completionHandler)
+void NetworkSession::clearAdClickAttribution()
{
- m_adClickAttribution->clear(WTFMove(completionHandler));
+ m_adClickAttribution->clear();
}
+void NetworkSession::clearAdClickAttributionForRegistrableDomain(WebCore::RegistrableDomain&& domain)
+{
+ m_adClickAttribution->clearForRegistrableDomain(WTFMove(domain));
+}
+
void NetworkSession::setAdClickAttributionOverrideTimerForTesting(bool value)
{
m_adClickAttribution->setOverrideTimerForTesting(value);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (244571 => 244572)
--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -82,7 +82,8 @@
void storeAdClickAttribution(WebCore::AdClickAttribution&&);
void convertAdClickAttribution(const WebCore::AdClickAttribution::Source&, const WebCore::AdClickAttribution::Destination&, WebCore::AdClickAttribution::Conversion&&);
void dumpAdClickAttribution(CompletionHandler<void(String)>&&);
- void clearAdClickAttribution(CompletionHandler<void()>&&);
+ void clearAdClickAttribution();
+ void clearAdClickAttributionForRegistrableDomain(WebCore::RegistrableDomain&&);
void setAdClickAttributionOverrideTimerForTesting(bool value);
void setAdClickAttributionConversionURLForTesting(URL&&);
Modified: trunk/Source/WebKit/Shared/WebsiteData/WebsiteData.cpp (244571 => 244572)
--- trunk/Source/WebKit/Shared/WebsiteData/WebsiteData.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/Shared/WebsiteData/WebsiteData.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -128,6 +128,8 @@
return WebsiteDataProcessType::Network;
case WebsiteDataType::DeviceIdHashSalt:
return WebsiteDataProcessType::UI;
+ case WebsiteDataType::AdClickAttributions:
+ return WebsiteDataProcessType::Network;
}
RELEASE_ASSERT_NOT_REACHED();
Modified: trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h (244571 => 244572)
--- trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -50,6 +50,7 @@
#endif
DOMCache = 1 << 15,
DeviceIdHashSalt = 1 << 16,
+ AdClickAttributions = 1 << 17,
};
};
Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -658,3 +658,12 @@
WebKit::toImpl(dataStoreRef)->websiteDataStore().setMockWebAuthenticationConfiguration(WTFMove(configuration));
#endif
}
+
+void WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction callback)
+{
+ OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::AdClickAttributions;
+ WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, WallTime::fromRawSeconds(0), [context, callback] {
+ callback(context);
+ });
+}
+
Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -131,6 +131,9 @@
WK_EXPORT void WKWebsiteDataStoreClearAllDeviceOrientationPermissions(WKWebsiteDataStoreRef dataStoreRef);
+typedef void (*WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction)(void* functionContext);
+WK_EXPORT void WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemovalFunction callback);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm 2019-04-24 00:13:00 UTC (rev 244572)
@@ -48,6 +48,7 @@
NSString * const _WKWebsiteDataTypeSearchFieldRecentSearches = @"_WKWebsiteDataTypeSearchFieldRecentSearches";
NSString * const _WKWebsiteDataTypeResourceLoadStatistics = @"_WKWebsiteDataTypeResourceLoadStatistics";
NSString * const _WKWebsiteDataTypeCredentials = @"_WKWebsiteDataTypeCredentials";
+NSString * const _WKWebsiteDataTypeAdClickAttributions = @"_WKWebsiteDataTypeAdClickAttributions";
#if PLATFORM(MAC)
NSString * const _WKWebsiteDataTypePlugInData = @"_WKWebsiteDataTypePlugInData";
@@ -100,6 +101,8 @@
[array addObject:@"Resource Load Statistics"];
if ([dataTypes containsObject:_WKWebsiteDataTypeCredentials])
[array addObject:@"Credentials"];
+ if ([dataTypes containsObject:_WKWebsiteDataTypeAdClickAttributions])
+ [array addObject:@"Ad Click Attributions"];
return [array componentsJoinedByString:@", "];
}
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -74,6 +74,8 @@
return WebsiteDataType::ResourceLoadStatistics;
if ([websiteDataType isEqualToString:_WKWebsiteDataTypeCredentials])
return WebsiteDataType::Credentials;
+ if ([websiteDataType isEqualToString:_WKWebsiteDataTypeAdClickAttributions])
+ return WebsiteDataType::AdClickAttributions;
return WTF::nullopt;
}
@@ -129,6 +131,8 @@
[wkWebsiteDataTypes addObject:_WKWebsiteDataTypeResourceLoadStatistics];
if (websiteDataTypes.contains(WebsiteDataType::Credentials))
[wkWebsiteDataTypes addObject:_WKWebsiteDataTypeCredentials];
+ if (websiteDataTypes.contains(WebsiteDataType::AdClickAttributions))
+ [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeAdClickAttributions];
return wkWebsiteDataTypes;
}
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -34,6 +34,7 @@
WK_EXTERN NSString * const _WKWebsiteDataTypeSearchFieldRecentSearches WK_API_AVAILABLE(macos(10.12), ios(10.0));
WK_EXTERN NSString * const _WKWebsiteDataTypeResourceLoadStatistics WK_API_AVAILABLE(macos(10.12), ios(10.0));
WK_EXTERN NSString * const _WKWebsiteDataTypeCredentials WK_API_AVAILABLE(macos(10.13), ios(11.0));
+WK_EXTERN NSString * const _WKWebsiteDataTypeAdClickAttributions WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
#if !TARGET_OS_IPHONE
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (244571 => 244572)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2019-04-24 00:13:00 UTC (rev 244572)
@@ -202,7 +202,7 @@
static dispatch_once_t onceToken;
static NSSet *allWebsiteDataTypes;
dispatch_once(&onceToken, ^ {
- auto *privateTypes = @[_WKWebsiteDataTypeHSTSCache, _WKWebsiteDataTypeMediaKeys, _WKWebsiteDataTypeSearchFieldRecentSearches, _WKWebsiteDataTypeResourceLoadStatistics, _WKWebsiteDataTypeCredentials
+ auto *privateTypes = @[_WKWebsiteDataTypeHSTSCache, _WKWebsiteDataTypeMediaKeys, _WKWebsiteDataTypeSearchFieldRecentSearches, _WKWebsiteDataTypeResourceLoadStatistics, _WKWebsiteDataTypeCredentials, _WKWebsiteDataTypeAdClickAttributions
#if !TARGET_OS_IPHONE
, _WKWebsiteDataTypePlugInData
#endif
Modified: trunk/Tools/ChangeLog (244571 => 244572)
--- trunk/Tools/ChangeLog 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/ChangeLog 2019-04-24 00:13:00 UTC (rev 244572)
@@ -1,3 +1,25 @@
+2019-04-23 John Wilander <[email protected]>
+
+ Remove Ad Click Attribution data when removing website data
+ https://bugs.webkit.org/show_bug.cgi?id=197215
+ <rdar://problem/47668988>
+
+ Reviewed by Chris Dumez.
+
+ This patch adds test infrastructure to delete Ad Click Attribution data
+ through WebsiteDataStore::removeData().
+
+ * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::clearAdClickAttribution):
+ (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval):
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval):
+ * WebKitTestRunner/TestController.h:
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
+
2019-04-23 Jonathan Bedard <[email protected]>
webkitpy: Kill unresponsive worker processes
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2019-04-24 00:13:00 UTC (rev 244572)
@@ -386,6 +386,7 @@
// Ad Click Attribution
void clearAdClickAttribution();
+ void clearAdClickAttributionsThroughWebsiteDataRemoval();
void setAdClickAttributionOverrideTimerForTesting(boolean value);
void setAdClickAttributionConversionURLForTesting(DOMString url);
};
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -2876,6 +2876,12 @@
WKBundlePagePostSynchronousMessageForTesting(InjectedBundle::singleton().page()->page(), messageName.get(), nullptr, nullptr);
}
+void TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval()
+{
+ auto messageName = adoptWK(WKStringCreateWithUTF8CString("ClearAdClickAttributionsThroughWebsiteDataRemoval"));
+ WKBundlePostSynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), nullptr, nullptr);
+}
+
void TestRunner::setAdClickAttributionOverrideTimerForTesting(bool value)
{
WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("SetAdClickAttributionOverrideTimerForTesting"));
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -500,6 +500,7 @@
// Ad Click Attribution.
void dumpAdClickAttribution();
void clearAdClickAttribution();
+ void clearAdClickAttributionsThroughWebsiteDataRemoval();
void setAdClickAttributionOverrideTimerForTesting(bool value);
void setAdClickAttributionConversionURLForTesting(JSStringRef);
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -3605,6 +3605,14 @@
runUntil(callbackContext.done, noTimeout);
}
+void TestController::clearAdClickAttributionsThroughWebsiteDataRemoval()
+{
+ auto* dataStore = WKContextGetWebsiteDataStore(platformContext());
+ AdClickAttributionVoidCallbackContext callbackContext(*this);
+ WKWebsiteDataStoreClearAdClickAttributionsThroughWebsiteDataRemoval(dataStore, &callbackContext, adClickAttributionVoidCallback);
+ runUntil(callbackContext.done, noTimeout);
+}
+
void TestController::setAdClickAttributionOverrideTimerForTesting(bool value)
{
AdClickAttributionVoidCallbackContext callbackContext(*this);
Modified: trunk/Tools/WebKitTestRunner/TestController.h (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/TestController.h 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/TestController.h 2019-04-24 00:13:00 UTC (rev 244572)
@@ -314,6 +314,7 @@
String dumpAdClickAttribution();
void clearAdClickAttribution();
+ void clearAdClickAttributionsThroughWebsiteDataRemoval();
void setAdClickAttributionOverrideTimerForTesting(bool value);
void setAdClickAttributionConversionURLForTesting(WKURLRef);
Modified: trunk/Tools/WebKitTestRunner/TestInvocation.cpp (244571 => 244572)
--- trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2019-04-23 23:52:43 UTC (rev 244571)
+++ trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2019-04-24 00:13:00 UTC (rev 244572)
@@ -1643,7 +1643,12 @@
TestController::singleton().clearAdClickAttribution();
return nullptr;
}
-
+
+ if (WKStringIsEqualToUTF8CString(messageName, "ClearAdClickAttributionsThroughWebsiteDataRemoval")) {
+ TestController::singleton().clearAdClickAttributionsThroughWebsiteDataRemoval();
+ return nullptr;
+ }
+
if (WKStringIsEqualToUTF8CString(messageName, "SetAdClickAttributionOverrideTimerForTesting")) {
ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
WKBooleanRef value = static_cast<WKBooleanRef>(messageBody);