Title: [244572] trunk
Revision
244572
Author
[email protected]
Date
2019-04-23 17:13:00 -0700 (Tue, 23 Apr 2019)

Log Message

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.

Source/WebKit:

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]):

Tools:

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):

LayoutTests:

* http/tests/adClickAttribution/clear-through-website-data-removal-expected.txt: Added.
* http/tests/adClickAttribution/clear-through-website-data-removal.html: Added.

Modified Paths

Added Paths

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

Reply via email to