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();