Title: [283383] trunk/Source/WebKit
Revision
283383
Author
[email protected]
Date
2021-10-01 11:13:51 -0700 (Fri, 01 Oct 2021)

Log Message

Move ephemeral PCM storage from PCM manager to NetworkSession
https://bugs.webkit.org/show_bug.cgi?id=231025

Patch by Alex Christensen <[email protected]> on 2021-10-01
Reviewed by Kate Cheney.

With the daemon, we want the network process to hang on to an ephemeral PCM instead of the daemon,
which is responsible for many network processes.  When attribution happens we insert the PCM then
attribute it like we did before, but from the NetworkSession instead of from the PCM manager.

Functionality covered by existing tests.
This just reduces state in the daemon.  All the other state in the PCM manager is only used for tests.

* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::storePrivateClickMeasurement):
(WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
(WebKit::NetworkSession::clearPrivateClickMeasurement):
(WebKit::NetworkSession::setPrivateClickMeasurementEphemeralMeasurementForTesting):
* NetworkProcess/NetworkSession.h:
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
(WebKit::PrivateClickMeasurementManager::storeUnattributed):
(WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
(WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
(WebKit::PrivateClickMeasurementManager::migratePrivateClickMeasurementFromLegacyStorage):
(WebKit::PrivateClickMeasurementManager::attribute):
(WebKit::PrivateClickMeasurementManager::clear):
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
(WebKit::PCM::messageTypeSendsReply):
(WebKit::PCM::decodeMessageAndSendToManager):
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
(WebKit::PCM::ManagerProxy::storeUnattributed):
(WebKit::PCM::ManagerProxy::setEphemeralMeasurementForTesting): Deleted.
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
(WebKit::PCM::Store::insertPrivateClickMeasurement):
(WebKit::PCM::Store::attributePrivateClickMeasurement):
* NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (283382 => 283383)


--- trunk/Source/WebKit/ChangeLog	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/ChangeLog	2021-10-01 18:13:51 UTC (rev 283383)
@@ -1,3 +1,44 @@
+2021-10-01  Alex Christensen  <[email protected]>
+
+        Move ephemeral PCM storage from PCM manager to NetworkSession
+        https://bugs.webkit.org/show_bug.cgi?id=231025
+
+        Reviewed by Kate Cheney.
+
+        With the daemon, we want the network process to hang on to an ephemeral PCM instead of the daemon,
+        which is responsible for many network processes.  When attribution happens we insert the PCM then
+        attribute it like we did before, but from the NetworkSession instead of from the PCM manager.
+
+        Functionality covered by existing tests.
+        This just reduces state in the daemon.  All the other state in the PCM manager is only used for tests.
+
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::storePrivateClickMeasurement):
+        (WebKit::NetworkSession::handlePrivateClickMeasurementConversion):
+        (WebKit::NetworkSession::clearPrivateClickMeasurement):
+        (WebKit::NetworkSession::setPrivateClickMeasurementEphemeralMeasurementForTesting):
+        * NetworkProcess/NetworkSession.h:
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
+        (WebKit::PrivateClickMeasurementManager::storeUnattributed):
+        (WebKit::PrivateClickMeasurementManager::getSignedUnlinkableToken):
+        (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement):
+        (WebKit::PrivateClickMeasurementManager::migratePrivateClickMeasurementFromLegacyStorage):
+        (WebKit::PrivateClickMeasurementManager::attribute):
+        (WebKit::PrivateClickMeasurementManager::clear):
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp:
+        (WebKit::PCM::messageTypeSendsReply):
+        (WebKit::PCM::decodeMessageAndSendToManager):
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h:
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp:
+        (WebKit::PCM::ManagerProxy::storeUnattributed):
+        (WebKit::PCM::ManagerProxy::setEphemeralMeasurementForTesting): Deleted.
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h:
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
+        (WebKit::PCM::Store::insertPrivateClickMeasurement):
+        (WebKit::PCM::Store::attributePrivateClickMeasurement):
+        * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:
+
 2021-10-01  Per Arne Vollan <[email protected]>
 
         [macOS] Remove obsolete sandbox rule

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-10-01 18:13:51 UTC (rev 283383)
@@ -321,7 +321,13 @@
 
 void NetworkSession::storePrivateClickMeasurement(WebCore::PrivateClickMeasurement&& unattributedPrivateClickMeasurement)
 {
-    privateClickMeasurement().storeUnattributed(WTFMove(unattributedPrivateClickMeasurement));
+    if (m_isRunningEphemeralMeasurementTest)
+        unattributedPrivateClickMeasurement.setEphemeral(PrivateClickMeasurement::AttributionEphemeral::Yes);
+    if (unattributedPrivateClickMeasurement.isEphemeral()) {
+        m_ephemeralMeasurement = WTFMove(unattributedPrivateClickMeasurement);
+        return;
+    }
+    privateClickMeasurement().storeUnattributed(WTFMove(unattributedPrivateClickMeasurement), [] { });
 }
 
 void NetworkSession::handlePrivateClickMeasurementConversion(PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData, const URL& requestURL, const WebCore::ResourceRequest& redirectRequest)
@@ -331,6 +337,28 @@
 #else
     auto appBundleID = String();
 #endif
+
+    if (m_ephemeralMeasurement) {
+        auto ephemeralMeasurement = *std::exchange(m_ephemeralMeasurement, std::nullopt);
+
+        auto redirectDomain = RegistrableDomain(redirectRequest.url());
+        auto firstPartyForCookies = redirectRequest.firstPartyForCookies();
+
+        // Ephemeral measurement can only have one pending click.
+        if (ephemeralMeasurement.sourceSite().registrableDomain != redirectDomain)
+            return;
+        if (ephemeralMeasurement.destinationSite().registrableDomain != RegistrableDomain(firstPartyForCookies))
+            return;
+
+        // Insert ephemeral measurement right before attribution.
+        privateClickMeasurement().storeUnattributed(WTFMove(ephemeralMeasurement), [this, weakThis = makeWeakPtr(*this), attributionTriggerData = WTFMove(attributionTriggerData), requestURL, redirectDomain = WTFMove(redirectDomain), firstPartyForCookies = WTFMove(firstPartyForCookies), appBundleID = WTFMove(appBundleID)] () mutable {
+            if (!weakThis)
+                return;
+            privateClickMeasurement().handleAttribution(WTFMove(attributionTriggerData), requestURL, WTFMove(redirectDomain), firstPartyForCookies, appBundleID);
+        });
+        return;
+    }
+
     privateClickMeasurement().handleAttribution(WTFMove(attributionTriggerData), requestURL, RegistrableDomain(redirectRequest.url()), redirectRequest.firstPartyForCookies(), appBundleID);
 }
 
@@ -342,6 +370,8 @@
 void NetworkSession::clearPrivateClickMeasurement(CompletionHandler<void()>&& completionHandler)
 {
     privateClickMeasurement().clear(WTFMove(completionHandler));
+    m_ephemeralMeasurement = std::nullopt;
+    m_isRunningEphemeralMeasurementTest = false;
 }
 
 void NetworkSession::clearPrivateClickMeasurementForRegistrableDomain(WebCore::RegistrableDomain&& domain, CompletionHandler<void()>&& completionHandler)
@@ -381,7 +411,7 @@
 
 void NetworkSession::setPrivateClickMeasurementEphemeralMeasurementForTesting(bool value)
 {
-    privateClickMeasurement().setEphemeralMeasurementForTesting(value);
+    m_isRunningEphemeralMeasurementTest = value;
 }
 
 // FIXME: Switch to non-mocked test data once the right cryptography library is available in open source.

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-10-01 18:13:51 UTC (rev 283383)
@@ -215,6 +215,8 @@
 #endif
     bool m_isStaleWhileRevalidateEnabled { false };
     UniqueRef<PCM::ManagerInterface> m_privateClickMeasurement;
+    std::optional<WebCore::PrivateClickMeasurement> m_ephemeralMeasurement;
+    bool m_isRunningEphemeralMeasurementTest { false };
 
     HashSet<Ref<NetworkResourceLoader>> m_keptAliveLoads;
 

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp	2021-10-01 18:13:51 UTC (rev 283383)
@@ -70,10 +70,10 @@
         m_store->close([] { });
 }
 
-void PrivateClickMeasurementManager::storeUnattributed(PrivateClickMeasurement&& measurement)
+void PrivateClickMeasurementManager::storeUnattributed(PrivateClickMeasurement&& measurement, CompletionHandler<void()>&& completionHandler)
 {
     if (!featureEnabled())
-        return;
+        return completionHandler();
 
     clearExpired();
 
@@ -109,7 +109,7 @@
 
     m_client->broadcastConsoleMessage(MessageLevel::Log, "[Private Click Measurement] Storing a click."_s);
 
-    insertPrivateClickMeasurement(WTFMove(measurement), PrivateClickMeasurementAttributionType::Unattributed);
+    insertPrivateClickMeasurement(WTFMove(measurement), PrivateClickMeasurementAttributionType::Unattributed, WTFMove(completionHandler));
 }
 
 void PrivateClickMeasurementManager::getTokenPublicKey(PrivateClickMeasurement&& attribution, PrivateClickMeasurement::AttributionReportEndpoint attributionReportEndpoint, PrivateClickMeasurement::PcmDataCarried pcmDataCarried, Function<void(PrivateClickMeasurement&& attribution, const String& publicKeyBase64URL)>&& callback)
@@ -212,25 +212,19 @@
 
         m_client->broadcastConsoleMessage(MessageLevel::Log, "[Private Click Measurement] Storing a secret token."_s);
 
-        insertPrivateClickMeasurement(WTFMove(measurement), PrivateClickMeasurementAttributionType::Unattributed);
+        insertPrivateClickMeasurement(WTFMove(measurement), PrivateClickMeasurementAttributionType::Unattributed, [] { });
     });
 
 }
 
-void PrivateClickMeasurementManager::insertPrivateClickMeasurement(PrivateClickMeasurement&& measurement, PrivateClickMeasurementAttributionType type)
+void PrivateClickMeasurementManager::insertPrivateClickMeasurement(PrivateClickMeasurement&& measurement, PrivateClickMeasurementAttributionType type, CompletionHandler<void()>&& completionHandler)
 {
-    if (m_isRunningEphemeralMeasurementTest)
-        measurement.setEphemeral(PrivateClickMeasurement::AttributionEphemeral::Yes);
-    if (measurement.isEphemeral()) {
-        m_ephemeralMeasurement = WTFMove(measurement);
-        return;
-    }
-    store().insertPrivateClickMeasurement(WTFMove(measurement), type);
+    store().insertPrivateClickMeasurement(WTFMove(measurement), type, WTFMove(completionHandler));
 }
 
 void PrivateClickMeasurementManager::migratePrivateClickMeasurementFromLegacyStorage(PrivateClickMeasurement&& measurement, PrivateClickMeasurementAttributionType type)
 {
-    store().insertPrivateClickMeasurement(WTFMove(measurement), type);
+    store().insertPrivateClickMeasurement(WTFMove(measurement), type, [] { });
 }
 
 void PrivateClickMeasurementManager::handleAttribution(AttributionTriggerData&& attributionTriggerData, const URL& requestURL, WebCore::RegistrableDomain&& redirectDomain, const URL& firstPartyURL, const ApplicationBundleIdentifier& applicationBundleIdentifier)
@@ -276,15 +270,7 @@
     if (!featureEnabled())
         return;
 
-    if (m_ephemeralMeasurement) {
-        // Ephemeral measurement can only have one pending click.
-        if (m_ephemeralMeasurement->sourceSite() != sourceSite)
-            return;
-        if (m_ephemeralMeasurement->destinationSite() != destinationSite)
-            return;
-    }
-        
-    store().attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData), std::exchange(m_ephemeralMeasurement, std::nullopt), [this, weakThis = makeWeakPtr(*this)] (auto attributionSecondsUntilSendData, auto debugInfo) {
+    store().attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData), [this, weakThis = makeWeakPtr(*this)] (auto attributionSecondsUntilSendData, auto debugInfo) {
         if (!weakThis)
             return;
         
@@ -445,8 +431,6 @@
 void PrivateClickMeasurementManager::clear(CompletionHandler<void()>&& completionHandler)
 {
     m_firePendingAttributionRequestsTimer.stop();
-    m_ephemeralMeasurement = std::nullopt;
-    m_isRunningEphemeralMeasurementTest = false;
     m_privateClickMeasurementAppBundleIDForTesting = std::nullopt;
 
     if (!featureEnabled())

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h	2021-10-01 18:13:51 UTC (rev 283383)
@@ -47,7 +47,7 @@
 
     using ApplicationBundleIdentifier = String;
 
-    void storeUnattributed(PrivateClickMeasurement&&) final;
+    void storeUnattributed(PrivateClickMeasurement&&, CompletionHandler<void()>&&) final;
     void handleAttribution(AttributionTriggerData&&, const URL& requestURL, WebCore::RegistrableDomain&& redirectDomain, const URL& firstPartyURL, const ApplicationBundleIdentifier&) final;
     void clear(CompletionHandler<void()>&&) final;
     void clearForRegistrableDomain(const RegistrableDomain&, CompletionHandler<void()>&&) final;
@@ -60,7 +60,6 @@
     void setAttributionReportURLsForTesting(URL&& sourceURL, URL&& destinationURL) final;
     void markAllUnattributedAsExpiredForTesting() final;
     void markAttributedPrivateClickMeasurementsAsExpiredForTesting(CompletionHandler<void()>&&) final;
-    void setEphemeralMeasurementForTesting(bool value) final { m_isRunningEphemeralMeasurementTest = value; }
     void setPCMFraudPreventionValuesForTesting(String&& unlinkableToken, String&& secretToken, String&& signature, String&& keyID) final;
     void startTimerImmediatelyForTesting() final;
     void setPrivateClickMeasurementAppBundleIDForTesting(ApplicationBundleIdentifier&&);
@@ -73,7 +72,7 @@
     void startTimer(Seconds);
     void getTokenPublicKey(PrivateClickMeasurement&&, PrivateClickMeasurement::AttributionReportEndpoint, PrivateClickMeasurement::PcmDataCarried, Function<void(PrivateClickMeasurement&& attribution, const String& publicKeyBase64URL)>&&);
     void getSignedUnlinkableToken(PrivateClickMeasurement&&);
-    void insertPrivateClickMeasurement(PrivateClickMeasurement&&, PrivateClickMeasurementAttributionType);
+    void insertPrivateClickMeasurement(PrivateClickMeasurement&&, PrivateClickMeasurementAttributionType, CompletionHandler<void()>&&);
     void clearSentAttribution(PrivateClickMeasurement&&, PrivateClickMeasurement::AttributionReportEndpoint);
     void attribute(const SourceSite&, const AttributionDestinationSite&, AttributionTriggerData&&, const ApplicationBundleIdentifier&);
     void fireConversionRequest(const PrivateClickMeasurement&, PrivateClickMeasurement::AttributionReportEndpoint);
@@ -83,10 +82,8 @@
     bool featureEnabled() const;
     bool debugModeEnabled() const;
 
-    std::optional<PrivateClickMeasurement> m_ephemeralMeasurement;
     WebCore::Timer m_firePendingAttributionRequestsTimer;
     bool m_isRunningTest { false };
-    bool m_isRunningEphemeralMeasurementTest { false };
     std::optional<URL> m_tokenPublicKeyURLForTesting;
     std::optional<URL> m_tokenSignatureURLForTesting;
     std::optional<ApplicationBundleIdentifier> m_privateClickMeasurementAppBundleIDForTesting;

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.cpp	2021-10-01 18:13:51 UTC (rev 283383)
@@ -48,6 +48,7 @@
 
 FUNCTION(storeUnattributed)
 ARGUMENTS(WebCore::PrivateClickMeasurement)
+REPLY()
 END
 
 FUNCTION(handleAttribution)
@@ -98,10 +99,6 @@
 REPLY()
 END
 
-FUNCTION(setEphemeralMeasurementForTesting)
-ARGUMENTS(bool)
-END
-
 FUNCTION(setPCMFraudPreventionValuesForTesting)
 ARGUMENTS(String, String, String, String)
 END
@@ -133,6 +130,7 @@
 EMPTY_REPLY(clearForRegistrableDomain);
 EMPTY_REPLY(markAttributedPrivateClickMeasurementsAsExpiredForTesting);
 EMPTY_REPLY(destroyStoreForTesting);
+EMPTY_REPLY(storeUnattributed);
 #undef EMPTY_REPLY
 
 PCM::EncodedMessage toStringForTesting::encodeReply(String reply)
@@ -147,7 +145,6 @@
 bool messageTypeSendsReply(MessageType messageType)
 {
     switch (messageType) {
-    case MessageType::StoreUnattributed:
     case MessageType::HandleAttribution:
     case MessageType::MigratePrivateClickMeasurementFromLegacyStorage:
     case MessageType::SetOverrideTimerForTesting:
@@ -155,12 +152,12 @@
     case MessageType::SetTokenSignatureURLForTesting:
     case MessageType::SetAttributionReportURLsForTesting:
     case MessageType::MarkAllUnattributedAsExpiredForTesting:
-    case MessageType::SetEphemeralMeasurementForTesting:
     case MessageType::SetPCMFraudPreventionValuesForTesting:
     case MessageType::StartTimerImmediatelyForTesting:
     case MessageType::SetPrivateClickMeasurementAppBundleIDForTesting:
     case MessageType::AllowTLSCertificateChainForLocalPCMTesting:
         return false;
+    case MessageType::StoreUnattributed:
     case MessageType::MarkAttributedPrivateClickMeasurementsAsExpiredForTesting:
     case MessageType::DestroyStoreForTesting:
     case MessageType::ToStringForTesting:
@@ -225,7 +222,7 @@
     ASSERT(messageTypeSendsReply(messageType) == !!replySender);
     switch (messageType) {
     case PCM::MessageType::StoreUnattributed:
-        handlePCMMessage<MessageInfo::storeUnattributed>(WTFMove(encodedMessage));
+        handlePCMMessageWithReply<MessageInfo::storeUnattributed>(WTFMove(encodedMessage), WTFMove(replySender));
         break;
     case PCM::MessageType::HandleAttribution:
         handlePCMMessage<MessageInfo::handleAttribution>(WTFMove(encodedMessage));
@@ -260,9 +257,6 @@
     case PCM::MessageType::MarkAttributedPrivateClickMeasurementsAsExpiredForTesting:
         handlePCMMessageWithReply<MessageInfo::markAttributedPrivateClickMeasurementsAsExpiredForTesting>(WTFMove(encodedMessage), WTFMove(replySender));
         break;
-    case PCM::MessageType::SetEphemeralMeasurementForTesting:
-        handlePCMMessage<MessageInfo::setEphemeralMeasurementForTesting>(WTFMove(encodedMessage));
-        break;
     case PCM::MessageType::SetPCMFraudPreventionValuesForTesting:
         handlePCMMessage<MessageInfo::setPCMFraudPreventionValuesForTesting>(WTFMove(encodedMessage));
         break;

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerInterface.h	2021-10-01 18:13:51 UTC (rev 283383)
@@ -52,7 +52,7 @@
     using SourceSite = WebCore::PrivateClickMeasurement::SourceSite;
     using ApplicationBundleIdentifier = String;
 
-    virtual void storeUnattributed(PrivateClickMeasurement&&) = 0;
+    virtual void storeUnattributed(PrivateClickMeasurement&&, CompletionHandler<void()>&&) = 0;
     virtual void handleAttribution(AttributionTriggerData&&, const URL& requestURL, WebCore::RegistrableDomain&& redirectDomain, const URL& firstPartyURL, const ApplicationBundleIdentifier&) = 0;
     virtual void clear(CompletionHandler<void()>&&) = 0;
     virtual void clearForRegistrableDomain(const RegistrableDomain&, CompletionHandler<void()>&&) = 0;
@@ -65,7 +65,6 @@
     virtual void setAttributionReportURLsForTesting(URL&& sourceURL, URL&& destinationURL) = 0;
     virtual void markAllUnattributedAsExpiredForTesting() = 0;
     virtual void markAttributedPrivateClickMeasurementsAsExpiredForTesting(CompletionHandler<void()>&&) = 0;
-    virtual void setEphemeralMeasurementForTesting(bool) = 0;
     virtual void setPCMFraudPreventionValuesForTesting(String&& unlinkableToken, String&& secretToken, String&& signature, String&& keyID) = 0;
     virtual void startTimerImmediatelyForTesting() = 0;
     virtual void setPrivateClickMeasurementAppBundleIDForTesting(ApplicationBundleIdentifier&&) = 0;
@@ -90,7 +89,6 @@
     SetAttributionReportURLsForTesting,
     MarkAllUnattributedAsExpiredForTesting,
     MarkAttributedPrivateClickMeasurementsAsExpiredForTesting,
-    SetEphemeralMeasurementForTesting,
     SetPCMFraudPreventionValuesForTesting,
     StartTimerImmediatelyForTesting,
     SetPrivateClickMeasurementAppBundleIDForTesting,
@@ -127,7 +125,6 @@
         WebKit::PCM::MessageType::SetAttributionReportURLsForTesting,
         WebKit::PCM::MessageType::MarkAllUnattributedAsExpiredForTesting,
         WebKit::PCM::MessageType::MarkAttributedPrivateClickMeasurementsAsExpiredForTesting,
-        WebKit::PCM::MessageType::SetEphemeralMeasurementForTesting,
         WebKit::PCM::MessageType::SetPCMFraudPreventionValuesForTesting,
         WebKit::PCM::MessageType::StartTimerImmediatelyForTesting,
         WebKit::PCM::MessageType::SetPrivateClickMeasurementAppBundleIDForTesting,

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp	2021-10-01 18:13:51 UTC (rev 283383)
@@ -75,9 +75,9 @@
 ManagerProxy::ManagerProxy(const String& machServiceName)
     : m_connection(machServiceName.utf8()) { }
 
-void ManagerProxy::storeUnattributed(WebCore::PrivateClickMeasurement&& pcm)
+void ManagerProxy::storeUnattributed(WebCore::PrivateClickMeasurement&& pcm, CompletionHandler<void()>&& completionHandler)
 {
-    sendMessage<MessageType::StoreUnattributed>(pcm);
+    sendMessageWithReply<MessageType::StoreUnattributed>(WTFMove(completionHandler), pcm);
 }
 
 void ManagerProxy::handleAttribution(WebCore::PrivateClickMeasurement::AttributionTriggerData&& triggerData, const URL& requestURL, WebCore::RegistrableDomain&& redirectDomain, const URL& firstPartyURL, const ApplicationBundleIdentifier& applicationBundleIdentifier)
@@ -135,11 +135,6 @@
     sendMessageWithReply<MessageType::MarkAttributedPrivateClickMeasurementsAsExpiredForTesting>(WTFMove(completionHandler));
 }
 
-void ManagerProxy::setEphemeralMeasurementForTesting(bool value)
-{
-    sendMessage<MessageType::SetEphemeralMeasurementForTesting>(value);
-}
-
 void ManagerProxy::setPCMFraudPreventionValuesForTesting(String&& unlinkableToken, String&& secretToken, String&& signature, String&& keyID)
 {
     sendMessage<MessageType::SetPCMFraudPreventionValuesForTesting>(unlinkableToken, secretToken, signature, keyID);

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.h	2021-10-01 18:13:51 UTC (rev 283383)
@@ -41,7 +41,7 @@
 
     using ApplicationBundleIdentifier = String;
 
-    void storeUnattributed(WebCore::PrivateClickMeasurement&&) final;
+    void storeUnattributed(WebCore::PrivateClickMeasurement&&, CompletionHandler<void()>&&) final;
     void handleAttribution(WebCore::PrivateClickMeasurement::AttributionTriggerData&&, const URL& requestURL, WebCore::RegistrableDomain&& redirectDomain, const URL& firstPartyURL, const ApplicationBundleIdentifier&) final;
     void clear(CompletionHandler<void()>&&) final;
     void clearForRegistrableDomain(const WebCore::RegistrableDomain&, CompletionHandler<void()>&&) final;
@@ -54,7 +54,6 @@
     void setAttributionReportURLsForTesting(URL&& sourceURL, URL&& destinationURL) final;
     void markAllUnattributedAsExpiredForTesting() final;
     void markAttributedPrivateClickMeasurementsAsExpiredForTesting(CompletionHandler<void()>&&) final;
-    void setEphemeralMeasurementForTesting(bool) final;
     void setPCMFraudPreventionValuesForTesting(String&& unlinkableToken, String&& secretToken, String&& signature, String&& keyID) final;
     void startTimerImmediatelyForTesting() final;
     void setPrivateClickMeasurementAppBundleIDForTesting(ApplicationBundleIdentifier&&) final;

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp	2021-10-01 18:13:51 UTC (rev 283383)
@@ -79,11 +79,12 @@
     RunLoop::main().dispatch(WTFMove(reply));
 }
 
-void Store::insertPrivateClickMeasurement(WebCore::PrivateClickMeasurement&& attribution, PrivateClickMeasurementAttributionType attributionType)
+void Store::insertPrivateClickMeasurement(WebCore::PrivateClickMeasurement&& attribution, PrivateClickMeasurementAttributionType attributionType, CompletionHandler<void()>&& completionHandler)
 {
-    postTask([this, protectedThis = Ref { *this }, attribution = WTFMove(attribution), attributionType] () mutable {
+    postTask([this, protectedThis = Ref { *this }, attribution = WTFMove(attribution), attributionType, completionHandler = WTFMove(completionHandler)] () mutable {
         if (m_database)
             m_database->insertPrivateClickMeasurement(WTFMove(attribution), attributionType);
+        postTaskReply(WTFMove(completionHandler));
     });
 }
 
@@ -95,9 +96,9 @@
     });
 }
 
-void Store::attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite& sourceSite, const WebCore::PrivateClickMeasurement::AttributionDestinationSite& destinationSite, const ApplicationBundleIdentifier& applicationBundleIdentifier, WebCore::PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData, std::optional<WebCore::PrivateClickMeasurement>&& ephemeralMeasurement, CompletionHandler<void(std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>&&, DebugInfo&&)>&& completionHandler)
+void Store::attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite& sourceSite, const WebCore::PrivateClickMeasurement::AttributionDestinationSite& destinationSite, const ApplicationBundleIdentifier& applicationBundleIdentifier, WebCore::PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData, CompletionHandler<void(std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>&&, DebugInfo&&)>&& completionHandler)
 {
-    postTask([this, protectedThis = Ref { *this }, sourceSite = sourceSite.isolatedCopy(), destinationSite = destinationSite.isolatedCopy(), applicationBundleIdentifier = applicationBundleIdentifier.isolatedCopy(), attributionTriggerData = WTFMove(attributionTriggerData), ephemeralMeasurement = crossThreadCopy(ephemeralMeasurement), completionHandler = WTFMove(completionHandler)] () mutable {
+    postTask([this, protectedThis = Ref { *this }, sourceSite = sourceSite.isolatedCopy(), destinationSite = destinationSite.isolatedCopy(), applicationBundleIdentifier = applicationBundleIdentifier.isolatedCopy(), attributionTriggerData = WTFMove(attributionTriggerData), completionHandler = WTFMove(completionHandler)] () mutable {
         if (!m_database) {
             return postTaskReply([completionHandler = WTFMove(completionHandler)] () mutable {
                 completionHandler(std::nullopt, { });
@@ -104,12 +105,6 @@
             });
         }
 
-        // Insert ephemeral measurement right before attribution.
-        if (ephemeralMeasurement) {
-            RELEASE_ASSERT(ephemeralMeasurement->isEphemeral());
-            m_database->insertPrivateClickMeasurement(WTFMove(*ephemeralMeasurement), PrivateClickMeasurementAttributionType::Unattributed);
-        }
-
         auto [seconds, debugInfo] = m_database->attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData));
 
         postTaskReply([seconds = WTFMove(seconds), debugInfo = debugInfo.isolatedCopy(), completionHandler = WTFMove(completionHandler)]() mutable {

Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h (283382 => 283383)


--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h	2021-10-01 18:07:05 UTC (rev 283382)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h	2021-10-01 18:13:51 UTC (rev 283383)
@@ -52,8 +52,8 @@
     static void prepareForProcessToSuspend(CompletionHandler<void()>&&);
     static void processDidResume();
 
-    void insertPrivateClickMeasurement(WebCore::PrivateClickMeasurement&&, WebKit::PrivateClickMeasurementAttributionType);
-    void attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&, const ApplicationBundleIdentifier&, WebCore::PrivateClickMeasurement::AttributionTriggerData&&, std::optional<WebCore::PrivateClickMeasurement>&& ephemeralMeasurement, CompletionHandler<void(std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>&&, DebugInfo&&)>&&);
+    void insertPrivateClickMeasurement(WebCore::PrivateClickMeasurement&&, WebKit::PrivateClickMeasurementAttributionType, CompletionHandler<void()>&&);
+    void attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&, const ApplicationBundleIdentifier&, WebCore::PrivateClickMeasurement::AttributionTriggerData&&, CompletionHandler<void(std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>&&, DebugInfo&&)>&&);
 
     void privateClickMeasurementToStringForTesting(CompletionHandler<void(String)>&&) const;
     void markAllUnattributedPrivateClickMeasurementAsExpiredForTesting();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to