Diff
Modified: trunk/Source/WebCore/ChangeLog (285169 => 285170)
--- trunk/Source/WebCore/ChangeLog 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebCore/ChangeLog 2021-11-02 18:36:32 UTC (rev 285170)
@@ -1,3 +1,20 @@
+2021-11-02 Kate Cheney <katherine_che...@apple.com>
+
+ PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
+ https://bugs.webkit.org/show_bug.cgi?id=228104
+ <rdar://problem/80991209>
+
+ Reviewed by John Wilander.
+
+ No new tests. Several existing tests would timeout with the removal of
+ m_firePendingAttributionRequestsTimer.startOneShot(m_isRunningTest ? 0_s : seconds)
+ if the fix wasn't in place.
+
+ * loader/PrivateClickMeasurement.cpp:
+ (WebCore::randomlyBetweenTwentyFourAndFortyEightHours):
+ (WebCore::PrivateClickMeasurement::attributeAndGetEarliestTimeToSend):
+ * loader/PrivateClickMeasurement.h:
+
2021-11-02 Tyler Wilcock <tyle...@apple.com>
AX: WebKit needs to include NSAccessibilityChildrenInNavigationOrderAttribute in accessibilityAttributeNames
Modified: trunk/Source/WebCore/loader/PrivateClickMeasurement.cpp (285169 => 285170)
--- trunk/Source/WebCore/loader/PrivateClickMeasurement.cpp 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebCore/loader/PrivateClickMeasurement.cpp 2021-11-02 18:36:32 UTC (rev 285170)
@@ -147,12 +147,12 @@
m_sourceApplicationBundleID = appBundleIDForTesting;
}
-static Seconds randomlyBetweenTwentyFourAndFortyEightHours()
+static Seconds randomlyBetweenTwentyFourAndFortyEightHours(PrivateClickMeasurement::IsRunningLayoutTest isRunningTest)
{
- return 24_h + Seconds(randomNumber() * (24_h).value());
+ return isRunningTest == PrivateClickMeasurement::IsRunningLayoutTest::Yes ? 1_s : 24_h + Seconds(randomNumber() * (24_h).value());
}
-PrivateClickMeasurement::AttributionSecondsUntilSendData PrivateClickMeasurement::attributeAndGetEarliestTimeToSend(AttributionTriggerData&& attributionTriggerData)
+PrivateClickMeasurement::AttributionSecondsUntilSendData PrivateClickMeasurement::attributeAndGetEarliestTimeToSend(AttributionTriggerData&& attributionTriggerData, IsRunningLayoutTest isRunningTest)
{
if (!attributionTriggerData.isValid() || (m_attributionTriggerData && m_attributionTriggerData->priority >= attributionTriggerData.priority))
return { };
@@ -160,8 +160,8 @@
m_attributionTriggerData = WTFMove(attributionTriggerData);
// 24-48 hour delay before sending. This helps privacy since the conversion and the attribution
// requests are detached and the time of the attribution does not reveal the time of the conversion.
- auto sourceSecondsUntilSend = randomlyBetweenTwentyFourAndFortyEightHours();
- auto destinationSecondsUntilSend = randomlyBetweenTwentyFourAndFortyEightHours();
+ auto sourceSecondsUntilSend = randomlyBetweenTwentyFourAndFortyEightHours(isRunningTest);
+ auto destinationSecondsUntilSend = randomlyBetweenTwentyFourAndFortyEightHours(isRunningTest);
m_timesToSend = { WallTime::now() + sourceSecondsUntilSend, WallTime::now() + destinationSecondsUntilSend };
return AttributionSecondsUntilSendData { sourceSecondsUntilSend, destinationSecondsUntilSend };
Modified: trunk/Source/WebCore/loader/PrivateClickMeasurement.h (285169 => 285170)
--- trunk/Source/WebCore/loader/PrivateClickMeasurement.h 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebCore/loader/PrivateClickMeasurement.h 2021-11-02 18:36:32 UTC (rev 285170)
@@ -54,6 +54,7 @@
enum class PcmDataCarried : bool { NonPersonallyIdentifiable, PersonallyIdentifiable };
enum class AttributionReportEndpoint : bool { Source, Destination };
+ enum class IsRunningLayoutTest : bool { No, Yes };
struct SourceID {
static constexpr uint8_t MaxEntropy = 255;
@@ -314,7 +315,7 @@
WEBCORE_EXPORT static const Seconds maxAge();
WEBCORE_EXPORT static Expected<AttributionTriggerData, String> parseAttributionRequest(const URL& redirectURL);
- WEBCORE_EXPORT AttributionSecondsUntilSendData attributeAndGetEarliestTimeToSend(AttributionTriggerData&&);
+ WEBCORE_EXPORT AttributionSecondsUntilSendData attributeAndGetEarliestTimeToSend(AttributionTriggerData&&, IsRunningLayoutTest);
WEBCORE_EXPORT bool hasHigherPriorityThan(const PrivateClickMeasurement&) const;
WEBCORE_EXPORT URL attributionReportSourceURL() const;
WEBCORE_EXPORT URL attributionReportAttributeOnURL() const;
Modified: trunk/Source/WebKit/ChangeLog (285169 => 285170)
--- trunk/Source/WebKit/ChangeLog 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/ChangeLog 2021-11-02 18:36:32 UTC (rev 285170)
@@ -1,3 +1,36 @@
+2021-11-02 Kate Cheney <katherine_che...@apple.com>
+
+ PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
+ https://bugs.webkit.org/show_bug.cgi?id=228104
+ <rdar://problem/80991209>
+
+ Reviewed by John Wilander.
+
+ firePendingAttributionRequests() was sometimes scheduling the next timer
+ fire to be the raw time value instead of the difference between now
+ and the scheduled send time. This was resulting in some reports not being
+ sent within the 24-48 hour range.
+
+ To test this, this patch removes the immediate timer fire for testing
+ and instead sets the earliest time to send values to both be 1 second.
+ This will test that the proper timer gets set to send both reports.
+
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp:
+ (WebKit::PCM::Database::attributePrivateClickMeasurement):
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h:
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp:
+ (WebKit::PrivateClickMeasurementManager::startTimer):
+ (WebKit::PrivateClickMeasurementManager::attribute):
+ (WebKit::PrivateClickMeasurementManager::randomlyBetweenFifteenAndThirtyMinutes const):
+ (WebKit::PrivateClickMeasurementManager::firePendingAttributionRequests):
+ In the case of both times being past due to report, schedule one for
+ 15 - 30 minutes later.
+
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h:
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp:
+ (WebKit::PCM::Store::attributePrivateClickMeasurement):
+ * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h:
+
2021-11-02 Simon Fraser <simon.fra...@apple.com>
Revert the wheel event coalescing added in r277587
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp 2021-11-02 18:36:32 UTC (rev 285170)
@@ -272,7 +272,7 @@
return std::make_pair(unattributedPrivateClickMeasurement, attributedPrivateClickMeasurement);
}
-std::pair<std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>, DebugInfo> Database::attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite& sourceSite, const WebCore::PrivateClickMeasurement::AttributionDestinationSite& destinationSite, const ApplicationBundleIdentifier& applicationBundleIdentifier, WebCore::PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData)
+std::pair<std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>, DebugInfo> Database::attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite& sourceSite, const WebCore::PrivateClickMeasurement::AttributionDestinationSite& destinationSite, const ApplicationBundleIdentifier& applicationBundleIdentifier, WebCore::PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData, WebCore::PrivateClickMeasurement::IsRunningLayoutTest isRunningTest)
{
ASSERT(!RunLoop::isMain());
@@ -298,7 +298,7 @@
if (previouslyUnattributed) {
// Always convert the pending attribution and remove it from the unattributed map.
removeUnattributed(*previouslyUnattributed);
- secondsUntilSend = previouslyUnattributed.value().attributeAndGetEarliestTimeToSend(WTFMove(attributionTriggerData));
+ secondsUntilSend = previouslyUnattributed.value().attributeAndGetEarliestTimeToSend(WTFMove(attributionTriggerData), isRunningTest);
// We should always have a valid secondsUntilSend value for a previouslyUnattributed value because there can be no previous attribution with a higher priority.
if (!secondsUntilSend.hasValidSecondsUntilSendValues()) {
@@ -320,7 +320,7 @@
// If we have no new attribution, re-attribute the old one to respect the new priority, but only if this report has
// not been sent to the source or destination site yet.
if (!previouslyAttributed.value().hasPreviouslyBeenReported()) {
- auto secondsUntilSend = previouslyAttributed.value().attributeAndGetEarliestTimeToSend(WTFMove(attributionTriggerData));
+ auto secondsUntilSend = previouslyAttributed.value().attributeAndGetEarliestTimeToSend(WTFMove(attributionTriggerData), isRunningTest);
if (!secondsUntilSend.hasValidSecondsUntilSendValues())
return { std::nullopt, WTFMove(debugInfo) };
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h 2021-11-02 18:36:32 UTC (rev 285170)
@@ -45,7 +45,7 @@
static void interruptAllDatabases();
void insertPrivateClickMeasurement(WebCore::PrivateClickMeasurement&&, PrivateClickMeasurementAttributionType);
- std::pair<std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>, DebugInfo> attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&, const ApplicationBundleIdentifier&, WebCore::PrivateClickMeasurement::AttributionTriggerData&&);
+ std::pair<std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>, DebugInfo> attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&, const ApplicationBundleIdentifier&, WebCore::PrivateClickMeasurement::AttributionTriggerData&&, WebCore::PrivateClickMeasurement::IsRunningLayoutTest);
Vector<WebCore::PrivateClickMeasurement> allAttributedPrivateClickMeasurement();
void clearPrivateClickMeasurement(std::optional<WebCore::RegistrableDomain>);
void clearExpiredPrivateClickMeasurement();
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp 2021-11-02 18:36:32 UTC (rev 285170)
@@ -273,7 +273,7 @@
void PrivateClickMeasurementManager::startTimer(Seconds seconds)
{
- m_firePendingAttributionRequestsTimer.startOneShot(m_isRunningTest ? 0_s : seconds);
+ m_firePendingAttributionRequestsTimer.startOneShot(seconds);
}
void PrivateClickMeasurementManager::attribute(const SourceSite& sourceSite, const AttributionDestinationSite& destinationSite, AttributionTriggerData&& attributionTriggerData, const ApplicationBundleIdentifier& applicationBundleIdentifier)
@@ -281,7 +281,7 @@
if (!featureEnabled())
return;
- store().attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData), [this, weakThis = WeakPtr { *this }] (auto attributionSecondsUntilSendData, auto debugInfo) {
+ store().attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData), m_isRunningTest ? WebCore::PrivateClickMeasurement::IsRunningLayoutTest::Yes : WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No, [this, weakThis = WeakPtr { *this }] (auto attributionSecondsUntilSendData, auto debugInfo) {
if (!weakThis)
return;
@@ -382,6 +382,14 @@
store().clearSentAttribution(WTFMove(sentConversion), attributionReportEndpoint);
}
+Seconds PrivateClickMeasurementManager::randomlyBetweenFifteenAndThirtyMinutes() const
+{
+ if (m_isRunningTest)
+ return 0_s;
+
+ return debugModeEnabled() ? debugModeSecondsUntilSend : 15_min + Seconds(cryptographicallyRandomNumber() % 900);
+}
+
void PrivateClickMeasurementManager::firePendingAttributionRequests()
{
if (!featureEnabled())
@@ -408,8 +416,7 @@
// We've already sent an attribution this round. We should send additional overdue attributions at
// a random time between 15 and 30 minutes to avoid a burst of simultaneous attributions. If debug
// mode is enabled, this should be much shorter for easy testing.
- auto interval = debugModeEnabled() ? debugModeSecondsUntilSend : 15_min + Seconds(cryptographicallyRandomNumber() % 900);
- startTimer(interval);
+ startTimer(randomlyBetweenFifteenAndThirtyMinutes());
return;
}
@@ -420,9 +427,12 @@
// Update nextTimeToFire in case the later report time for this attribution is sooner than the scheduled next time to fire.
// Or, if debug mode is enabled, we should send the second report on a much shorter delay for easy testing.
- if (laterTimeToSend)
- nextTimeToFire = debugModeEnabled() ? debugModeSecondsUntilSend : std::min(nextTimeToFire, laterTimeToSend.value().secondsSinceEpoch());
-
+ if (laterTimeToSend) {
+ Seconds laterTimeToSendInSecondsFromNow = (*laterTimeToSend - WallTime::now());
+ // Avoid sending expired attributions in bursts by using a random 15-30 minute interval if laterTimeToSend is expired.
+ laterTimeToSendInSecondsFromNow = laterTimeToSendInSecondsFromNow.value() < 0 ? randomlyBetweenFifteenAndThirtyMinutes() : laterTimeToSendInSecondsFromNow;
+ nextTimeToFire = debugModeEnabled() ? debugModeSecondsUntilSend : std::min(nextTimeToFire, laterTimeToSendInSecondsFromNow);
+ }
continue;
}
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.h 2021-11-02 18:36:32 UTC (rev 285170)
@@ -82,6 +82,7 @@
void clearExpired();
bool featureEnabled() const;
bool debugModeEnabled() const;
+ Seconds randomlyBetweenFifteenAndThirtyMinutes() const;
RunLoop::Timer<PrivateClickMeasurementManager> m_firePendingAttributionRequestsTimer;
bool m_isRunningTest { false };
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.cpp 2021-11-02 18:36:32 UTC (rev 285170)
@@ -94,9 +94,9 @@
});
}
-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)
+void Store::attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite& sourceSite, const WebCore::PrivateClickMeasurement::AttributionDestinationSite& destinationSite, const ApplicationBundleIdentifier& applicationBundleIdentifier, WebCore::PrivateClickMeasurement::AttributionTriggerData&& attributionTriggerData, WebCore::PrivateClickMeasurement::IsRunningLayoutTest isRunningTest, 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), completionHandler = WTFMove(completionHandler)] () mutable {
+ postTask([this, protectedThis = Ref { *this }, sourceSite = sourceSite.isolatedCopy(), destinationSite = destinationSite.isolatedCopy(), applicationBundleIdentifier = applicationBundleIdentifier.isolatedCopy(), attributionTriggerData = WTFMove(attributionTriggerData), isRunningTest, completionHandler = WTFMove(completionHandler)] () mutable {
if (!m_database) {
return postTaskReply([completionHandler = WTFMove(completionHandler)] () mutable {
completionHandler(std::nullopt, { });
@@ -103,7 +103,7 @@
});
}
- auto [seconds, debugInfo] = m_database->attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData));
+ auto [seconds, debugInfo] = m_database->attributePrivateClickMeasurement(sourceSite, destinationSite, applicationBundleIdentifier, WTFMove(attributionTriggerData), isRunningTest);
postTaskReply([seconds = WTFMove(seconds), debugInfo = debugInfo.isolatedCopy(), completionHandler = WTFMove(completionHandler)]() mutable {
completionHandler(WTFMove(seconds), WTFMove(debugInfo));
Modified: trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h (285169 => 285170)
--- trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementStore.h 2021-11-02 18:36:32 UTC (rev 285170)
@@ -53,7 +53,7 @@
static void processDidResume();
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 attributePrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&, const ApplicationBundleIdentifier&, WebCore::PrivateClickMeasurement::AttributionTriggerData&&, WebCore::PrivateClickMeasurement::IsRunningLayoutTest, CompletionHandler<void(std::optional<WebCore::PrivateClickMeasurement::AttributionSecondsUntilSendData>&&, DebugInfo&&)>&&);
void privateClickMeasurementToStringForTesting(CompletionHandler<void(String)>&&) const;
void markAllUnattributedPrivateClickMeasurementAsExpiredForTesting();
Modified: trunk/Tools/ChangeLog (285169 => 285170)
--- trunk/Tools/ChangeLog 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Tools/ChangeLog 2021-11-02 18:36:32 UTC (rev 285170)
@@ -1,3 +1,14 @@
+2021-11-02 Kate Cheney <katherine_che...@apple.com>
+
+ PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
+ https://bugs.webkit.org/show_bug.cgi?id=228104
+ <rdar://problem/80991209>
+
+ Reviewed by John Wilander.
+
+ * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
+ (TestWebKitAPI::TEST):
+
2021-11-02 Tim Horton <timothy_hor...@apple.com>
dumpAsText() tests don't get the ref-test treatment when using --self-compare-with-header
Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp (285169 => 285170)
--- trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp 2021-11-02 18:34:18 UTC (rev 285169)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp 2021-11-02 18:36:32 UTC (rev 285170)
@@ -45,7 +45,7 @@
TEST(PrivateClickMeasurement, WellKnownURLs)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
auto attributionSourceURL = attribution.attributionReportSourceURL();
ASSERT_EQ(attributionSourceURL.string(), "https://webkit.org/.well-known/private-click-measurement/report-attribution/");
@@ -56,7 +56,7 @@
TEST(PrivateClickMeasurement, ValidMinValues)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_EQ(attribution.attributionReportJSON()->toJSONString(), "{\"source_engagement_type\":\"click\",\"source_site\":\"webkit.org\",\"source_id\":0,\"attributed_on_site\":\"example.com\",\"trigger_data\":0,\"version\":2}");
}
@@ -64,7 +64,7 @@
TEST(PrivateClickMeasurement, ValidMidValues)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID((uint32_t)192), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((uint32_t)9, PrivateClickMeasurement::Priority((uint32_t)22)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((uint32_t)9, PrivateClickMeasurement::Priority((uint32_t)22)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_EQ(attribution.attributionReportJSON()->toJSONString(), "{\"source_engagement_type\":\"click\",\"source_site\":\"webkit.org\",\"source_id\":192,\"attributed_on_site\":\"example.com\",\"trigger_data\":9,\"version\":2}");
}
@@ -72,7 +72,7 @@
TEST(PrivateClickMeasurement, ValidMaxValues)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_EQ(attribution.attributionReportJSON()->toJSONString(), "{\"source_engagement_type\":\"click\",\"source_site\":\"webkit.org\",\"source_id\":255,\"attributed_on_site\":\"example.com\",\"trigger_data\":15,\"version\":2}");
}
@@ -81,7 +81,7 @@
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
auto now = WallTime::now();
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
auto earliestTimeToSend = attribution.timesToSend();
ASSERT_TRUE(earliestTimeToSend.sourceEarliestTimeToSend && earliestTimeToSend.destinationEarliestTimeToSend);
ASSERT_TRUE(earliestTimeToSend.sourceEarliestTimeToSend.value().secondsSinceEpoch() - 24_h >= now.secondsSinceEpoch());
@@ -135,7 +135,7 @@
TEST(PrivateClickMeasurement, InvalidSourceHost)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { emptyURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty());
ASSERT_TRUE(attribution.attributionReportAttributeOnURL().isEmpty());
@@ -144,7 +144,7 @@
TEST(PrivateClickMeasurement, InvalidDestinationHost)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { emptyURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty());
ASSERT_TRUE(attribution.attributionReportAttributeOnURL().isEmpty());
@@ -153,7 +153,7 @@
TEST(PrivateClickMeasurement, AttributionTriggerData)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((PrivateClickMeasurement::AttributionTriggerData::MaxEntropy + 1), PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((PrivateClickMeasurement::AttributionTriggerData::MaxEntropy + 1), PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty());
ASSERT_TRUE(attribution.attributionReportAttributeOnURL().isEmpty());
@@ -162,7 +162,7 @@
TEST(PrivateClickMeasurement, InvalidPriority)
{
PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No };
- attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy + 1)));
+ attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy + 1)), WebCore::PrivateClickMeasurement::IsRunningLayoutTest::No);
ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty());
ASSERT_TRUE(attribution.attributionReportAttributeOnURL().isEmpty());