Changeset 283313 in webkit
- Timestamp:
- Sep 30, 2021, 8:42:31 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/HTMLAnchorElement.cpp (modified) (1 diff)
-
Source/WebCore/loader/PrivateClickMeasurement.cpp (modified) (5 diffs)
-
Source/WebCore/loader/PrivateClickMeasurement.h (modified) (15 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/DatabaseUtilities.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm (modified) (3 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebPageProxy.h (modified) (2 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp (modified) (11 diffs)
-
Tools/TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r283312 r283313 1 2021-09-30 Alex Christensen <achristensen@webkit.org> 2 3 Clean up PrivateClickMeasurement 4 https://bugs.webkit.org/show_bug.cgi?id=230978 5 6 Reviewed by Kate Cheney. 7 8 In r270669 I added sourceDescription and purchaser to PrivateClickMeasurement, 9 but they're actually only needed for the UIEventAttribution getter on WKWebView. 10 I moved them to a new struct PrivateClickMeasurementAndMetadata which stores this additional 11 information only on WebPageProxy instead of all the PCM infrastructure. 12 13 I reduced the size of SourceID.id to 1 byte. Now a SourceID is always valid, so we don't need 14 to check after it has been created. We still check when creating one from parsing web content, 15 but everywhere else we know that it is valid because of its type. 16 17 I removed the default constructor of PrivateClickMeasurement and default parameter values. 18 There aren't very many places where we construct one except for the tests, and it's good to see 19 what values we are using so we don't forget anything. 20 21 No change in behavior. 22 23 * html/HTMLAnchorElement.cpp: 24 (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const): 25 * loader/PrivateClickMeasurement.cpp: 26 (WebCore::PrivateClickMeasurement::isValid const): 27 (WebCore::PrivateClickMeasurement::isolatedCopy const): 28 (WebCore::PrivateClickMeasurement::parseAttributionRequest): 29 * loader/PrivateClickMeasurement.h: 30 (WebCore::PrivateClickMeasurement::SourceID::SourceID): 31 (WebCore::PrivateClickMeasurement::Priority::Priority): 32 (WebCore::PrivateClickMeasurement::AttributionTriggerData::AttributionTriggerData): 33 (WebCore::PrivateClickMeasurement::PrivateClickMeasurement): 34 (WebCore::PrivateClickMeasurement::isEphemeral const): 35 (WebCore::PrivateClickMeasurement::setEphemeral): 36 (WebCore::PrivateClickMeasurement::encode const): 37 (WebCore::PrivateClickMeasurement::decode): 38 (WebCore::PrivateClickMeasurement::AttributionTriggerData::decode): 39 (WTF::HashTraits<WebCore::PrivateClickMeasurement::SourceSite>::emptyValue): 40 (WebCore::PrivateClickMeasurement::SourceID::isValid const): Deleted. 41 (WebCore::PrivateClickMeasurement::sourceDescription const): Deleted. 42 (WebCore::PrivateClickMeasurement::purchaser const): Deleted. 43 1 44 2021-09-30 Alan Bujtas <zalan@apple.com> 2 45 -
trunk/Source/WebCore/html/HTMLAnchorElement.cpp
r282884 r283313 456 456 String bundleID; 457 457 #endif 458 auto privateClickMeasurement = PrivateClickMeasurement { SourceID(attributionSourceID.value()), SourceSite(WTFMove(documentRegistrableDomain)), AttributionDestinationSite(destinationURL), bundleID };458 auto privateClickMeasurement = PrivateClickMeasurement { SourceID(attributionSourceID.value()), SourceSite(WTFMove(documentRegistrableDomain)), AttributionDestinationSite(destinationURL), bundleID, WallTime::now(), PrivateClickMeasurement::AttributionEphemeral::No }; 459 459 460 460 auto attributionSourceNonceAttr = attributeWithoutSynchronization(attributionsourcenonceAttr); -
trunk/Source/WebCore/loader/PrivateClickMeasurement.cpp
r282884 r283313 55 55 return m_attributionTriggerData 56 56 && m_attributionTriggerData.value().isValid() 57 && m_sourceID.isValid()58 57 && !m_sourceSite.registrableDomain.isEmpty() 59 58 && !m_destinationSite.registrableDomain.isEmpty() … … 89 88 PrivateClickMeasurement PrivateClickMeasurement::isolatedCopy() const 90 89 { 91 PrivateClickMeasurement copy ;92 copy.m_sourceID = m_sourceID;93 copy.m_sourceSite = m_sourceSite.isolatedCopy();94 copy.m_destinationSite = m_destinationSite.isolatedCopy();95 copy.m_sourceDescription = m_sourceDescription.isolatedCopy();96 copy.m_purchaser = m_purchaser.isolatedCopy();97 copy.m_timeOfAdClick = m_timeOfAdClick.isolatedCopy();98 copy.m_isEphemeral = m_isEphemeral;90 PrivateClickMeasurement copy { 91 m_sourceID, 92 m_sourceSite.isolatedCopy(), 93 m_destinationSite.isolatedCopy(), 94 m_sourceApplicationBundleID.isolatedCopy(), 95 m_timeOfAdClick.isolatedCopy(), 96 m_isEphemeral, 97 }; 99 98 copy.m_attributionTriggerData = m_attributionTriggerData; 100 99 copy.m_timesToSend = m_timesToSend; … … 102 101 copy.m_sourceUnlinkableToken = m_sourceUnlinkableToken.isolatedCopy(); 103 102 copy.m_sourceSecretToken = crossThreadCopy(m_sourceSecretToken); 104 copy.m_sourceApplicationBundleID = m_sourceApplicationBundleID.isolatedCopy();105 103 return copy; 106 104 } … … 122 120 return makeUnexpected(makeString("[Private Click Measurement] Conversion was not accepted because the conversion data could not be parsed or was higher than the allowed maximum of "_s, AttributionTriggerData::MaxEntropy, "."_s)); 123 121 124 return AttributionTriggerData { static_cast<uint 32_t>(*attributionTriggerDataUInt64), Priority { 0 } };122 return AttributionTriggerData { static_cast<uint8_t>(*attributionTriggerDataUInt64), Priority { 0 } }; 125 123 } 126 124 … … 134 132 return makeUnexpected(makeString("[Private Click Measurement] Conversion was not accepted because the priority could not be parsed or was higher than the allowed maximum of "_s, Priority::MaxEntropy, "."_s)); 135 133 136 return AttributionTriggerData { static_cast<uint 32_t>(*attributionTriggerDataUInt64), Priority { static_cast<uint32_t>(*attributionPriorityUInt64) } };134 return AttributionTriggerData { static_cast<uint8_t>(*attributionTriggerDataUInt64), Priority { static_cast<uint8_t>(*attributionPriorityUInt64) } }; 137 135 } 138 136 -
trunk/Source/WebCore/loader/PrivateClickMeasurement.h
r282884 r283313 48 48 namespace WebCore { 49 49 50 enum class PrivateClickMeasurementAttributionEphemeral : bool { No, Yes };51 52 50 class PrivateClickMeasurement { 53 51 public: 54 using PriorityValue = uint32_t; 52 using PriorityValue = uint8_t; 53 enum class AttributionEphemeral : bool { No, Yes }; 55 54 56 55 enum class PcmDataCarried : bool { NonPersonallyIdentifiable, PersonallyIdentifiable }; … … 58 57 59 58 struct SourceID { 60 static constexpr uint32_t MaxEntropy = 255; 61 62 SourceID() = default; 63 explicit SourceID(uint32_t id) 59 static constexpr uint8_t MaxEntropy = 255; 60 explicit SourceID(uint8_t id) 64 61 : id { id } 65 62 { 66 63 } 67 68 bool isValid() const 69 { 70 return id <= MaxEntropy; 71 } 72 73 uint32_t id { 0 }; 64 65 uint8_t id { 0 }; 74 66 }; 75 67 76 68 struct SourceSite { 77 SourceSite() = default;78 69 explicit SourceSite(const URL& url) 79 70 : registrableDomain { url } … … 167 158 168 159 struct Priority { 169 static constexpr uint 32_t MaxEntropy = 63;160 static constexpr uint8_t MaxEntropy = 63; 170 161 171 162 explicit Priority(PriorityValue value) 172 : value { value }163 : value { value } 173 164 { 174 165 } … … 178 169 179 170 struct AttributionTriggerData { 180 static constexpr uint 32_t MaxEntropy = 15;171 static constexpr uint8_t MaxEntropy = 15; 181 172 182 173 enum class WasSent : bool { No, Yes }; 183 174 184 AttributionTriggerData(uint 32_t data, Priority priority, WasSent wasSent = WasSent::No)175 AttributionTriggerData(uint8_t data, Priority priority, WasSent wasSent = WasSent::No) 185 176 : data { data } 186 177 , priority { priority.value } … … 194 185 } 195 186 196 uint 32_t data;187 uint8_t data { 0 }; 197 188 PriorityValue priority; 198 189 WasSent wasSent = WasSent::No; … … 312 303 }; 313 304 314 PrivateClickMeasurement() = default; 315 PrivateClickMeasurement(SourceID sourceID, const SourceSite& sourceSite, const AttributionDestinationSite& destinationSite, const String& sourceApplicationBundleID, String&& sourceDescription = { }, String&& purchaser = { }, WallTime timeOfAdClick = WallTime::now(), PrivateClickMeasurementAttributionEphemeral isEphemeral = PrivateClickMeasurementAttributionEphemeral::No) 305 PrivateClickMeasurement(SourceID sourceID, const SourceSite& sourceSite, const AttributionDestinationSite& destinationSite, const String& sourceApplicationBundleID, WallTime timeOfAdClick, AttributionEphemeral isEphemeral) 316 306 : m_sourceID { sourceID } 317 307 , m_sourceSite { sourceSite } 318 308 , m_destinationSite { destinationSite } 319 , m_sourceDescription { WTFMove(sourceDescription) }320 , m_purchaser { WTFMove(purchaser) }321 309 , m_timeOfAdClick { timeOfAdClick } 322 310 , m_isEphemeral { isEphemeral } … … 343 331 const String& sourceApplicationBundleID() const { return m_sourceApplicationBundleID; } 344 332 345 const String& sourceDescription() const { return m_sourceDescription; } 346 const String& purchaser() const { return m_purchaser; } 347 bool isEphemeral() const { return m_isEphemeral == PrivateClickMeasurementAttributionEphemeral::Yes; } 348 void setEphemeral(PrivateClickMeasurementAttributionEphemeral isEphemeral) { m_isEphemeral = isEphemeral; } 333 bool isEphemeral() const { return m_isEphemeral == AttributionEphemeral::Yes; } 334 void setEphemeral(AttributionEphemeral isEphemeral) { m_isEphemeral = isEphemeral; } 349 335 350 336 // MARK: - Fraud Prevention … … 398 384 SourceSite m_sourceSite; 399 385 AttributionDestinationSite m_destinationSite; 400 String m_sourceDescription;401 String m_purchaser;402 386 WallTime m_timeOfAdClick; 403 PrivateClickMeasurementAttributionEphemeral m_isEphemeral;387 AttributionEphemeral m_isEphemeral; 404 388 405 389 std::optional<AttributionTriggerData> m_attributionTriggerData; … … 429 413 << m_sourceSite.registrableDomain 430 414 << m_destinationSite.registrableDomain 431 << m_sourceDescription432 << m_purchaser433 415 << m_timeOfAdClick 434 416 << m_ephemeralSourceNonce … … 442 424 std::optional<PrivateClickMeasurement> PrivateClickMeasurement::decode(Decoder& decoder) 443 425 { 444 std::optional<uint 32_t> sourceID;426 std::optional<uint8_t> sourceID; 445 427 decoder >> sourceID; 446 428 if (!sourceID) … … 457 439 return std::nullopt; 458 440 459 std::optional<String> sourceDescription;460 decoder >> sourceDescription;461 if (!sourceDescription)462 return std::nullopt;463 464 std::optional<String> purchaser;465 decoder >> purchaser;466 if (!purchaser)467 return std::nullopt;468 469 441 std::optional<WallTime> timeOfAdClick; 470 442 decoder >> timeOfAdClick; … … 477 449 return std::nullopt; 478 450 479 std::optional< PrivateClickMeasurementAttributionEphemeral> isEphemeral;451 std::optional<AttributionEphemeral> isEphemeral; 480 452 decoder >> isEphemeral; 481 453 if (!isEphemeral) … … 502 474 AttributionDestinationSite { WTFMove(*destinationRegistrableDomain) }, 503 475 WTFMove(*sourceApplicationBundleID), 504 WTFMove(*sourceDescription),505 WTFMove(*purchaser),506 476 WTFMove(*timeOfAdClick), 507 477 WTFMove(*isEphemeral) … … 540 510 std::optional<PrivateClickMeasurement::AttributionTriggerData> PrivateClickMeasurement::AttributionTriggerData::decode(Decoder& decoder) 541 511 { 542 std::optional<uint 32_t> data;512 std::optional<uint8_t> data; 543 513 decoder >> data; 544 514 if (!data) … … 565 535 template<> struct DefaultHash<WebCore::PrivateClickMeasurement::SourceSite> : WebCore::PrivateClickMeasurement::SourceSiteHash { }; 566 536 template<> struct HashTraits<WebCore::PrivateClickMeasurement::SourceSite> : GenericHashTraits<WebCore::PrivateClickMeasurement::SourceSite> { 567 static WebCore::PrivateClickMeasurement::SourceSite emptyValue() { return { }; }537 static WebCore::PrivateClickMeasurement::SourceSite emptyValue() { return WebCore::PrivateClickMeasurement::SourceSite(WebCore::RegistrableDomain()); } 568 538 static void constructDeletedValue(WebCore::PrivateClickMeasurement::SourceSite& slot) { new (NotNull, &slot.registrableDomain) WebCore::RegistrableDomain(WTF::HashTableDeletedValue); } 569 539 static bool isDeletedValue(const WebCore::PrivateClickMeasurement::SourceSite& slot) { return slot.registrableDomain.isHashTableDeletedValue(); } -
trunk/Source/WebKit/ChangeLog
r283304 r283313 1 2021-09-30 Alex Christensen <achristensen@webkit.org> 2 3 Clean up PrivateClickMeasurement 4 https://bugs.webkit.org/show_bug.cgi?id=230978 5 6 Reviewed by Kate Cheney. 7 8 * NetworkProcess/DatabaseUtilities.cpp: 9 (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase const): 10 * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp: 11 (WebKit::PrivateClickMeasurementManager::insertPrivateClickMeasurement): 12 * UIProcess/API/Cocoa/WKWebViewTesting.mm: 13 (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:]): 14 * UIProcess/API/ios/WKWebViewIOS.mm: 15 (-[WKWebView _setUIEventAttribution:]): 16 (-[WKWebView _uiEventAttribution]): 17 (-[WKWebView _setEphemeralUIEventAttribution:forApplicationWithBundleID:]): 18 * UIProcess/WebPageProxy.cpp: 19 (WebKit::WebPageProxy::didCommitLoadForFrame): 20 (WebKit::WebPageProxy::createNewPage): 21 * UIProcess/WebPageProxy.h: 22 1 23 2021-09-30 Carlos Garcia Campos <cgarcia@igalia.com> 2 24 -
trunk/Source/WebKit/NetworkProcess/DatabaseUtilities.cpp
r283227 r283313 159 159 bundleID = safariBundleID; 160 160 161 WebCore::PrivateClickMeasurement attribution(WebCore::PrivateClickMeasurement::SourceID(sourceID), WebCore::PrivateClickMeasurement::SourceSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(sourceSiteDomain)), WebCore::PrivateClickMeasurement::AttributionDestinationSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(destinationSiteDomain)), bundleID, { }, { }, WallTime::fromRawSeconds(timeOfAdClick));161 WebCore::PrivateClickMeasurement attribution(WebCore::PrivateClickMeasurement::SourceID(sourceID), WebCore::PrivateClickMeasurement::SourceSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(sourceSiteDomain)), WebCore::PrivateClickMeasurement::AttributionDestinationSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(destinationSiteDomain)), bundleID, WallTime::fromRawSeconds(timeOfAdClick), WebCore::PrivateClickMeasurement::AttributionEphemeral::No); 162 162 163 163 if (attributionType == PrivateClickMeasurementAttributionType::Attributed) { … … 168 168 169 169 if (attributionTriggerData != -1) 170 attribution.setAttribution(WebCore::PrivateClickMeasurement::AttributionTriggerData { static_cast<uint 32_t>(attributionTriggerData), WebCore::PrivateClickMeasurement::Priority(priority) });170 attribution.setAttribution(WebCore::PrivateClickMeasurement::AttributionTriggerData { static_cast<uint8_t>(attributionTriggerData), WebCore::PrivateClickMeasurement::Priority(priority) }); 171 171 172 172 std::optional<WallTime> sourceEarliestTimeToSend; -
trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManager.cpp
r282269 r283313 218 218 { 219 219 if (m_isRunningEphemeralMeasurementTest) 220 measurement.setEphemeral(PrivateClickMeasurement AttributionEphemeral::Yes);220 measurement.setEphemeral(PrivateClickMeasurement::AttributionEphemeral::Yes); 221 221 if (measurement.isEphemeral()) { 222 222 m_ephemeralMeasurement = WTFMove(measurement); -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
r282884 r283313 63 63 WebCore::PrivateClickMeasurement::AttributionDestinationSite(destination), 64 64 bundleID, 65 sourceDescription,66 purchaser65 WallTime::now(), 66 WebCore::PrivateClickMeasurement::AttributionEphemeral::No 67 67 ); 68 68 if (nonce) 69 69 measurement.setEphemeralSourceNonce({ nonce }); 70 70 71 _page->setPrivateClickMeasurement( WTFMove(measurement));71 _page->setPrivateClickMeasurement({{ WTFMove(measurement), { }, { }}}); 72 72 } 73 73 -
trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm
r282884 r283313 2634 2634 WebCore::PrivateClickMeasurement::AttributionDestinationSite(attribution.destinationURL), 2635 2635 WebCore::applicationBundleIdentifier(), 2636 attribution.sourceDescription,2637 attribution.purchaser2636 WallTime::now(), 2637 WebCore::PrivateClickMeasurement::AttributionEphemeral::No 2638 2638 ); 2639 _page->setPrivateClickMeasurement( WTFMove(measurement));2639 _page->setPrivateClickMeasurement({{ WTFMove(measurement), attribution.sourceDescription, attribution.purchaser }}); 2640 2640 } else 2641 2641 _page->setPrivateClickMeasurement(std::nullopt); … … 2647 2647 #if HAVE(UI_EVENT_ATTRIBUTION) 2648 2648 auto& measurement = _page->privateClickMeasurement(); 2649 if (!measurement || !measurement->sourceID().isValid())2649 if (!measurement) 2650 2650 return nil; 2651 2651 2652 auto destinationURL = URL(URL(), makeString("https://", measurement-> destinationSite().registrableDomain.string()));2653 return adoptNS([[UIEventAttribution alloc] initWithSourceIdentifier:measurement-> sourceID().id destinationURL:destinationURL sourceDescription:measurement->sourceDescription() purchaser:measurement->purchaser()]).autorelease();2652 auto destinationURL = URL(URL(), makeString("https://", measurement->pcm.destinationSite().registrableDomain.string())); 2653 return adoptNS([[UIEventAttribution alloc] initWithSourceIdentifier:measurement->pcm.sourceID().id destinationURL:destinationURL sourceDescription:measurement->sourceDescription purchaser:measurement->purchaser]).autorelease(); 2654 2654 #else 2655 2655 return nil; … … 2672 2672 WebCore::PrivateClickMeasurement::AttributionDestinationSite(attribution.destinationURL), 2673 2673 bundleID, 2674 attribution.sourceDescription,2675 attribution.purchaser,2676 2674 WallTime::now(), 2677 WebCore::PrivateClickMeasurement AttributionEphemeral::Yes2675 WebCore::PrivateClickMeasurement::AttributionEphemeral::Yes 2678 2676 ); 2679 _page->setPrivateClickMeasurement( WTFMove(measurement));2677 _page->setPrivateClickMeasurement({{ WTFMove(measurement), attribution.sourceDescription, attribution.purchaser }}); 2680 2678 } else 2681 2679 _page->setPrivateClickMeasurement(std::nullopt); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r283304 r283313 4927 4927 std::optional<WebCore::PrivateClickMeasurement> privateClickMeasurement; 4928 4928 if (m_privateClickMeasurement) 4929 privateClickMeasurement = m_privateClickMeasurement ;4929 privateClickMeasurement = m_privateClickMeasurement->pcm; 4930 4930 else if (navigation && navigation->privateClickMeasurement()) 4931 4931 privateClickMeasurement = navigation->privateClickMeasurement(); … … 5847 5847 newPage->m_shouldSuppressAppLinksInNextNavigationPolicyDecision = mainFrameURL.host() == request.url().host(); 5848 5848 5849 newPage->m_privateClickMeasurement = privateClickMeasurement; 5849 if (privateClickMeasurement) 5850 newPage->m_privateClickMeasurement = {{ WTFMove(*privateClickMeasurement), { }, { }}}; 5850 5851 #if HAVE(APP_SSO) 5851 5852 newPage->m_shouldSuppressSOAuthorizationInNextNavigationPolicyDecision = true; -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r283304 r283313 717 717 bool delegatesScrolling() const { return m_delegatesScrolling; } 718 718 719 void setPrivateClickMeasurement(std::optional<WebCore::PrivateClickMeasurement>&& measurement) { m_privateClickMeasurement = WTFMove(measurement); } 720 const std::optional<WebCore::PrivateClickMeasurement>& privateClickMeasurement() const { return m_privateClickMeasurement; } 719 struct PrivateClickMeasurementAndMetadata { 720 WebCore::PrivateClickMeasurement pcm; 721 String sourceDescription; 722 String purchaser; 723 }; 724 void setPrivateClickMeasurement(std::optional<PrivateClickMeasurementAndMetadata>&& measurement) { m_privateClickMeasurement = WTFMove(measurement); } 725 const std::optional<PrivateClickMeasurementAndMetadata>& privateClickMeasurement() const { return m_privateClickMeasurement; } 721 726 722 727 enum class ActivityStateChangeDispatchMode : bool { Deferrable, Immediate }; … … 3087 3092 bool m_isSuspended { false }; 3088 3093 3089 std::optional< WebCore::PrivateClickMeasurement> m_privateClickMeasurement;3094 std::optional<PrivateClickMeasurementAndMetadata> m_privateClickMeasurement; 3090 3095 3091 3096 #if ENABLE(WEBXR) && !USE(OPENXR) -
trunk/Tools/ChangeLog
r283298 r283313 1 2021-09-30 Alex Christensen <achristensen@webkit.org> 2 3 Clean up PrivateClickMeasurement 4 https://bugs.webkit.org/show_bug.cgi?id=230978 5 6 Reviewed by Kate Cheney. 7 8 I removed the InvalidSourceID test because it is now impossible to make an invalid source ID 9 because it uses a uint8_t and allows the values 0-255. 10 11 * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp: 12 (TestWebKitAPI::TEST): 13 * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm: 14 (TestWebKitAPI::TEST): 15 1 16 2021-09-29 Alex Christensen <achristensen@webkit.org> 2 17 -
trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp
r282884 r283313 45 45 TEST(PrivateClickMeasurement, WellKnownURLs) 46 46 { 47 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };47 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 48 48 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue))); 49 49 … … 56 56 TEST(PrivateClickMeasurement, ValidMinValues) 57 57 { 58 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };58 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 59 59 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(min6BitValue, PrivateClickMeasurement::Priority(min6BitValue))); 60 60 … … 64 64 TEST(PrivateClickMeasurement, ValidMidValues) 65 65 { 66 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID((uint32_t)192), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };66 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID((uint32_t)192), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 67 67 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((uint32_t)9, PrivateClickMeasurement::Priority((uint32_t)22))); 68 68 … … 72 72 TEST(PrivateClickMeasurement, ValidMaxValues) 73 73 { 74 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };74 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 75 75 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 76 76 … … 80 80 TEST(PrivateClickMeasurement, EarliestTimeToSendAttributionMinimumDelay) 81 81 { 82 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };82 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 83 83 auto now = WallTime::now(); 84 84 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); … … 133 133 // Negative test cases. 134 134 135 TEST(PrivateClickMeasurement, InvalidSource ID)136 { 137 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier"};135 TEST(PrivateClickMeasurement, InvalidSourceHost) 136 { 137 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { emptyURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 138 138 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 139 139 … … 142 142 } 143 143 144 TEST(PrivateClickMeasurement, Invalid SourceHost)145 { 146 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { emptyURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier"};144 TEST(PrivateClickMeasurement, InvalidDestinationHost) 145 { 146 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { emptyURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 147 147 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 148 148 … … 151 151 } 152 152 153 TEST(PrivateClickMeasurement, InvalidDestinationHost)154 {155 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { emptyURL }, "test.bundle.identifier" };156 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy)));157 158 ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty());159 ASSERT_TRUE(attribution.attributionReportAttributeOnURL().isEmpty());160 }161 162 153 TEST(PrivateClickMeasurement, AttributionTriggerData) 163 154 { 164 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };155 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 165 156 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((PrivateClickMeasurement::AttributionTriggerData::MaxEntropy + 1), PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 166 157 … … 171 162 TEST(PrivateClickMeasurement, InvalidPriority) 172 163 { 173 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };164 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 174 165 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy + 1))); 175 166 … … 180 171 TEST(PrivateClickMeasurement, InvalidMissingConversion) 181 172 { 182 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" };173 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier", WallTime::now(), WebCore::PrivateClickMeasurement::AttributionEphemeral::No }; 183 174 184 175 ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty()); … … 313 304 const char serverPublicKeyBase64URL[] = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzb1dThrtYwVh46SjInegKhAqpbJwm1XnTBCvybSK8zk53R0Am1hG33AVF5J1lqYf36wp663GasclHtqzvxFZIvDA1DUSH4aZz_fDHCTTxEeJVPORS3zNN2UjWwbtnwsh4BmDTi-z_cDn0LAz2JuZyKlyFt5GgVLAQvL9H3VLHU9_XHNK-uboyXfcHRTtrDnpu3c6wvX5dd-AJoLmIQTZBEJfVkxBGznk1qKHjc6nASAirKF_wJCnuwAK8C6BAcjNcwUWCeKp0YECzCXU--JXd2OEU-QhxPC67faiDOh3V0vlfqZLtrlbnanUCKrvhw7GaGOGYotIrnZtuNfxC14d_XNVd1FS8nHjRTHnEgw_jnlSssfgStz0uJtcmkfgoJBvOE4mIRpi7iSlRfXNkKsWX1J-gwcnCVo5u0uJEW6X6NyvEGYJ8w5BPfwsQuK9y-4Z7ikt9IOucEHY7ThDmi9TNNhHBVj0Gu4wGoSjq3a6vL5N10ZSHXoq1XgfGPrmHhhL90cjvWonoyOXsUqlXEzTjD2W9897Q-Mx9BUNrGQPqmIx8F5MwxWcOrye8WRp4Q88n2YSUnV7C8ayld3v1Fh7N5jeSqeVmtDVRYTn2sVfNqgXrzgdigJcQR8vFENu6nzFPwsrXPMaCiLUnZNUmQ1ZSLQeQyhYXxHqRJrnuCDWXLkCAwEAAQ"; 314 305 315 PrivateClickMeasurement pcm; 306 WebCore::PrivateClickMeasurement pcm( 307 WebCore::PrivateClickMeasurement::SourceID({ }), 308 WebCore::PrivateClickMeasurement::SourceSite(URL()), 309 WebCore::PrivateClickMeasurement::AttributionDestinationSite(URL()), 310 { }, 311 WallTime::now(), 312 WebCore::PrivateClickMeasurement::AttributionEphemeral::No 313 ); 316 314 auto sourceUnlinkableToken = pcm.tokenSignatureJSON(); 317 315 EXPECT_EQ(sourceUnlinkableToken->asObject()->size(), 0ul); -
trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm
r279710 r283313 43 43 EXPECT_TRUE(ephemeralNonce.isValid()); 44 44 45 PrivateClickMeasurement pcm; 45 WebCore::PrivateClickMeasurement pcm( 46 WebCore::PrivateClickMeasurement::SourceID({ }), 47 WebCore::PrivateClickMeasurement::SourceSite(URL()), 48 WebCore::PrivateClickMeasurement::AttributionDestinationSite(URL()), 49 { }, 50 WallTime::now(), 51 WebCore::PrivateClickMeasurement::AttributionEphemeral::No 52 ); 46 53 pcm.setEphemeralSourceNonce(WTFMove(ephemeralNonce)); 47 54 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm
r283298 r283313 494 494 auto attribution = adoptNS([[MockEventAttribution alloc] initWithReportEndpoint:server.request().URL destinationURL:exampleURL()]); 495 495 webView._uiEventAttribution = (UIEventAttribution *)attribution.get(); 496 EXPECT_WK_STREQ(webView._uiEventAttribution.sourceDescription, "test source description"); 497 EXPECT_WK_STREQ(webView._uiEventAttribution.purchaser, "test purchaser"); 496 498 }); 497 499 }
Note:
See TracChangeset
for help on using the changeset viewer.