Changeset 282884 in webkit
- Timestamp:
- Sep 22, 2021, 2:32:16 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 33 edited
- 15 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/tests/contentextensions/block-private-click-measurement-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt (modified) (1 diff)
-
LayoutTests/platform/ios/http/tests/contentextensions (added)
-
LayoutTests/platform/ios/http/tests/contentextensions/block-private-click-measurement-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/contentextensions/block-private-click-measurement-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement (added)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt ) (1 diff)
-
LayoutTests/platform/ios/http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt (copied) (copied from trunk/LayoutTests/http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt ) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/HTMLAnchorElement.cpp (modified) (2 diffs)
-
Source/WebCore/loader/PrivateClickMeasurement.cpp (modified) (1 diff)
-
Source/WebCore/loader/PrivateClickMeasurement.h (modified) (7 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/DatabaseUtilities.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/DatabaseUtilities.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp (modified) (9 diffs)
-
Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm (modified) (4 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp (modified) (11 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r282880 r282884 1 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 3 PCM should include the bundle ID of the app from which it originated 4 https://bugs.webkit.org/show_bug.cgi?id=230576 5 <rdar://83065221> 6 7 Reviewed by Kate Cheney. 8 9 * http/tests/contentextensions/block-private-click-measurement-expected.txt: 10 * http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt: 11 * http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt: 12 * http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt: 13 * http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt: 14 * http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt: 15 * http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt: 16 * http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt: 17 * http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt: 18 * http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt: 19 * http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt: 20 * http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt: 21 * http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt: 22 * http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt: 23 * http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt: 24 1 25 2021-09-22 Gabriel Nava Marino <gnavamarino@apple.com> 2 26 -
trunk/LayoutTests/http/tests/contentextensions/block-private-click-measurement-expected.txt
r274801 r282884 16 16 Source ID: 3 17 17 No attribution trigger data. 18 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt
r270136 r282884 8 8 Source ID: 3 9 9 No attribution trigger data. 10 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt
r272422 r282884 13 13 Attribution priority: 0 14 14 Attribution earliest time to send: Within 24-48 hours 15 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt
r281480 r282884 10 10 Attribution priority: 0 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt
r270136 r282884 10 10 Attribution priority: 3 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 3 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 0 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt
r270136 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt
r275260 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt
r275260 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt
r270136 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt
r270136 r282884 8 8 Source ID: 3 9 9 No attribution trigger data. 10 Application bundle identifier: com.apple.WebKit.WebKitTestRunner -
trunk/LayoutTests/platform/ios/http/tests/contentextensions/block-private-click-measurement-expected.txt
r282883 r282884 16 16 Source ID: 3 17 17 No attribution trigger data. 18 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-cross-site-image-redirect-expected.txt
r282883 r282884 8 8 Source ID: 3 9 9 No attribution trigger data. 10 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-fetch-keepalive-expected.txt
r282883 r282884 13 13 Attribution priority: 0 14 14 Attribution earliest time to send: Within 24-48 hours 15 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-ephemeral-expected.txt
r282883 r282884 10 10 Attribution priority: 0 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-in-new-window-expected.txt
r282883 r282884 10 10 Attribution priority: 3 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-with-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 3 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/attribution-conversion-through-image-redirect-without-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 0 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/conversion-disabled-in-ephemeral-session-expected.txt
r282883 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-null-content-expected.txt
r282883 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/private-click-measurement-with-source-nonce-wrong-content-type-expected.txt
r282883 r282884 14 14 Source ID: 3 15 15 No attribution trigger data. 16 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-attribution-converted-with-higher-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-attribution-converted-with-lower-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-conversion-with-higher-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/second-conversion-with-lower-priority-expected.txt
r282883 r282884 10 10 Attribution priority: 4 11 11 Attribution earliest time to send: Within 24-48 hours 12 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/LayoutTests/platform/ios/http/tests/privateClickMeasurement/store-private-click-measurement-expected.txt
r282883 r282884 8 8 Source ID: 3 9 9 No attribution trigger data. 10 Application bundle identifier: org.webkit.WebKitTestRunnerApp -
trunk/Source/WebCore/ChangeLog
r282882 r282884 1 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 3 PCM should include the bundle ID of the app from which it originated 4 https://bugs.webkit.org/show_bug.cgi?id=230576 5 <rdar://83065221> 6 7 Reviewed by Kate Cheney. 8 9 This adds infrastructure to store the bundle ID of the application. 10 In another patch I'm going to use that to prevent PCMs from one app from overwriting PCMs from another app during attribution. 11 12 * html/HTMLAnchorElement.cpp: 13 (WebCore::HTMLAnchorElement::parsePrivateClickMeasurement const): 14 * loader/PrivateClickMeasurement.cpp: 15 (WebCore::PrivateClickMeasurement::isolatedCopy const): 16 * loader/PrivateClickMeasurement.h: 17 (WebCore::PrivateClickMeasurement::PrivateClickMeasurement): 18 (WebCore::PrivateClickMeasurement::attributionTriggerData const): 19 (WebCore::PrivateClickMeasurement::sourceApplicationBundleID const): 20 (WebCore::PrivateClickMeasurement::encode const): 21 (WebCore::PrivateClickMeasurement::decode): 22 (WebCore::PrivateClickMeasurement::attributionTriggerData): Deleted. 23 1 24 2021-09-22 Chris Dumez <cdumez@apple.com> 2 25 -
trunk/Source/WebCore/html/HTMLAnchorElement.cpp
r281239 r282884 48 48 #include "RenderImage.h" 49 49 #include "ResourceRequest.h" 50 #include "RuntimeApplicationChecks.h" 50 51 #include "RuntimeEnabledFeatures.h" 51 52 #include "SVGImage.h" … … 450 451 } 451 452 452 auto privateClickMeasurement = PrivateClickMeasurement { SourceID(attributionSourceID.value()), SourceSite(WTFMove(documentRegistrableDomain)), AttributionDestinationSite(destinationURL) }; 453 #if PLATFORM(COCOA) 454 auto bundleID = applicationBundleIdentifier(); 455 #else 456 String bundleID; 457 #endif 458 auto privateClickMeasurement = PrivateClickMeasurement { SourceID(attributionSourceID.value()), SourceSite(WTFMove(documentRegistrableDomain)), AttributionDestinationSite(destinationURL), bundleID }; 453 459 454 460 auto attributionSourceNonceAttr = attributeWithoutSynchronization(attributionsourcenonceAttr); -
trunk/Source/WebCore/loader/PrivateClickMeasurement.cpp
r281837 r282884 102 102 copy.m_sourceUnlinkableToken = m_sourceUnlinkableToken.isolatedCopy(); 103 103 copy.m_sourceSecretToken = crossThreadCopy(m_sourceSecretToken); 104 copy.m_sourceApplicationBundleID = m_sourceApplicationBundleID.isolatedCopy(); 104 105 return copy; 105 106 } -
trunk/Source/WebCore/loader/PrivateClickMeasurement.h
r281721 r282884 313 313 314 314 PrivateClickMeasurement() = default; 315 PrivateClickMeasurement(SourceID sourceID, const SourceSite& sourceSite, const AttributionDestinationSite& destinationSite, String&& sourceDescription = { }, String&& purchaser = { }, WallTime timeOfAdClick = WallTime::now(), PrivateClickMeasurementAttributionEphemeral isEphemeral = PrivateClickMeasurementAttributionEphemeral::No)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) 316 316 : m_sourceID { sourceID } 317 317 , m_sourceSite { sourceSite } … … 321 321 , m_timeOfAdClick { timeOfAdClick } 322 322 , m_isEphemeral { isEphemeral } 323 , m_sourceApplicationBundleID { sourceApplicationBundleID } 323 324 { 324 325 } … … 338 339 void setTimesToSend(AttributionTimeToSendData data) { m_timesToSend = data; } 339 340 const SourceID& sourceID() const { return m_sourceID; } 340 std::optional<AttributionTriggerData> attributionTriggerData(){ return m_attributionTriggerData; }341 const std::optional<AttributionTriggerData>& attributionTriggerData() const { return m_attributionTriggerData; } 341 342 void setAttribution(AttributionTriggerData&& attributionTriggerData) { m_attributionTriggerData = WTFMove(attributionTriggerData); } 343 const String& sourceApplicationBundleID() const { return m_sourceApplicationBundleID; } 342 344 343 345 const String& sourceDescription() const { return m_sourceDescription; } … … 418 420 SourceUnlinkableToken m_sourceUnlinkableToken; 419 421 std::optional<SourceSecretToken> m_sourceSecretToken; 422 String m_sourceApplicationBundleID; 420 423 }; 421 424 … … 432 435 << m_isEphemeral 433 436 << m_attributionTriggerData 437 << m_sourceApplicationBundleID 434 438 << m_timesToSend; 435 439 } … … 482 486 if (!attributionTriggerData) 483 487 return std::nullopt; 484 488 489 std::optional<String> sourceApplicationBundleID; 490 decoder >> sourceApplicationBundleID; 491 if (!sourceApplicationBundleID) 492 return std::nullopt; 493 485 494 std::optional<AttributionTimeToSendData> timesToSend; 486 495 decoder >> timesToSend; … … 492 501 SourceSite { WTFMove(*sourceRegistrableDomain) }, 493 502 AttributionDestinationSite { WTFMove(*destinationRegistrableDomain) }, 503 WTFMove(*sourceApplicationBundleID), 494 504 WTFMove(*sourceDescription), 495 505 WTFMove(*purchaser), -
trunk/Source/WebKit/ChangeLog
r282883 r282884 1 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 3 PCM should include the bundle ID of the app from which it originated 4 https://bugs.webkit.org/show_bug.cgi?id=230576 5 <rdar://83065221> 6 7 Reviewed by Kate Cheney. 8 9 * NetworkProcess/DatabaseUtilities.cpp: 10 (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase const): 11 (WebKit::DatabaseUtilities::buildPrivateClickMeasurementFromDatabase): Deleted. 12 * NetworkProcess/DatabaseUtilities.h: 13 * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp: 14 (WebKit::PCM::Database::Database): 15 (WebKit::PCM::Database::insertPrivateClickMeasurement): 16 (WebKit::PCM::Database::privateClickMeasurementToStringForTesting const): 17 (WebKit::PCM::Database::attributionToStringForTesting const): 18 (WebKit::PCM::Database::addBundleIDColumnIfNecessary): 19 (WebKit::PCM::Database::columnsForTable): 20 (WebKit::PCM::Database::addMissingColumnToTable): 21 * NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h: 22 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 23 * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h: 24 * UIProcess/API/Cocoa/WKWebViewTesting.mm: 25 (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:applicationBundleID:]): 26 (-[WKWebView _addEventAttributionWithSourceID:destinationURL:sourceDescription:purchaser:reportEndpoint:optionalNonce:]): Deleted. 27 * UIProcess/API/ios/WKWebViewIOS.mm: 28 (-[WKWebView _setEphemeralUIEventAttribution:]): 29 (-[WKWebView _setEphemeralUIEventAttribution:forApplicationWithBundleID:]): 30 1 31 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 32 -
trunk/Source/WebKit/NetworkProcess/DatabaseUtilities.cpp
r281779 r282884 138 138 } 139 139 140 WebCore::PrivateClickMeasurement DatabaseUtilities::buildPrivateClickMeasurementFromDatabase(WebCore::SQLiteStatement& statement, PrivateClickMeasurementAttributionType attributionType) 140 WebCore::PrivateClickMeasurement DatabaseUtilities::buildPrivateClickMeasurementFromDatabase(WebCore::SQLiteStatement& statement, PrivateClickMeasurementAttributionType attributionType) const 141 141 { 142 142 ASSERT(!RunLoop::isMain()); … … 148 148 auto signature = attributionType == PrivateClickMeasurementAttributionType::Attributed ? statement.columnText(8) : statement.columnText(5); 149 149 auto keyID = attributionType == PrivateClickMeasurementAttributionType::Attributed ? statement.columnText(9) : statement.columnText(6); 150 auto bundleID = attributionType == PrivateClickMeasurementAttributionType::Attributed ? statement.columnText(11) : statement.columnText(7); 150 151 151 WebCore::PrivateClickMeasurement attribution(WebCore::PrivateClickMeasurement::SourceID(sourceID), WebCore::PrivateClickMeasurement::SourceSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(sourceSiteDomain)), WebCore::PrivateClickMeasurement::AttributionDestinationSite(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString(destinationSiteDomain)), { }, { }, WallTime::fromRawSeconds(timeOfAdClick)); 152 // Safari was the only application that used PCM when it was stored with ResourceLoadStatistics. 153 #if PLATFORM(MAC) 154 constexpr auto safariBundleID = "com.apple.Safari"_s; 155 #else 156 constexpr auto safariBundleID = "com.apple.mobilesafari"_s; 157 #endif 158 if (bundleID.isEmpty()) 159 bundleID = safariBundleID; 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)); 152 162 153 163 if (attributionType == PrivateClickMeasurementAttributionType::Attributed) { -
trunk/Source/WebKit/NetworkProcess/DatabaseUtilities.h
r281779 r282884 56 56 virtual String getDomainStringFromDomainID(unsigned) const = 0; 57 57 58 WebCore::PrivateClickMeasurement buildPrivateClickMeasurementFromDatabase(WebCore::SQLiteStatement&, PrivateClickMeasurementAttributionType) ;58 WebCore::PrivateClickMeasurement buildPrivateClickMeasurementFromDatabase(WebCore::SQLiteStatement&, PrivateClickMeasurementAttributionType) const; 59 59 60 60 const String m_storageFilePath; -
trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.cpp
r281886 r282884 41 41 constexpr auto setUnattributedPrivateClickMeasurementAsExpiredQuery = "UPDATE UnattributedPrivateClickMeasurement SET timeOfAdClick = -1.0"_s; 42 42 constexpr auto insertUnattributedPrivateClickMeasurementQuery = "INSERT OR REPLACE INTO UnattributedPrivateClickMeasurement (sourceSiteDomainID, destinationSiteDomainID, " 43 "sourceID, timeOfAdClick, token, signature, keyID ) VALUES (?, ?, ?, ?, ?, ?, ?)"_s;43 "sourceID, timeOfAdClick, token, signature, keyID, sourceApplicationBundleID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"_s; 44 44 constexpr auto insertAttributedPrivateClickMeasurementQuery = "INSERT OR REPLACE INTO AttributedPrivateClickMeasurement (sourceSiteDomainID, destinationSiteDomainID, " 45 "sourceID, attributionTriggerData, priority, timeOfAdClick, earliestTimeToSendToSource, token, signature, keyID, earliestTimeToSendToDestination ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"_s;45 "sourceID, attributionTriggerData, priority, timeOfAdClick, earliestTimeToSendToSource, token, signature, keyID, earliestTimeToSendToDestination, sourceApplicationBundleID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"_s; 46 46 constexpr auto findUnattributedQuery = "SELECT * FROM UnattributedPrivateClickMeasurement WHERE sourceSiteDomainID = ? AND destinationSiteDomainID = ?"_s; 47 47 constexpr auto findAttributedQuery = "SELECT * FROM AttributedPrivateClickMeasurement WHERE sourceSiteDomainID = ? AND destinationSiteDomainID = ?"_s; … … 60 60 constexpr auto createUnattributedPrivateClickMeasurement = "CREATE TABLE UnattributedPrivateClickMeasurement (" 61 61 "sourceSiteDomainID INTEGER NOT NULL, destinationSiteDomainID INTEGER NOT NULL, sourceID INTEGER NOT NULL, " 62 "timeOfAdClick REAL NOT NULL, token TEXT, signature TEXT, keyID TEXT, FOREIGN KEY(sourceSiteDomainID) "62 "timeOfAdClick REAL NOT NULL, token TEXT, signature TEXT, keyID TEXT, sourceApplicationBundleID TEXT, FOREIGN KEY(sourceSiteDomainID) " 63 63 "REFERENCES PCMObservedDomains(domainID) ON DELETE CASCADE, FOREIGN KEY(destinationSiteDomainID) REFERENCES " 64 64 "PCMObservedDomains(domainID) ON DELETE CASCADE)"_s; … … 66 66 "sourceSiteDomainID INTEGER NOT NULL, destinationSiteDomainID INTEGER NOT NULL, sourceID INTEGER NOT NULL, " 67 67 "attributionTriggerData INTEGER NOT NULL, priority INTEGER NOT NULL, timeOfAdClick REAL NOT NULL, " 68 "earliestTimeToSendToSource REAL, token TEXT, signature TEXT, keyID TEXT, earliestTimeToSendToDestination REAL, "68 "earliestTimeToSendToSource REAL, token TEXT, signature TEXT, keyID TEXT, earliestTimeToSendToDestination REAL, sourceApplicationBundleID TEXT, " 69 69 "FOREIGN KEY(sourceSiteDomainID) REFERENCES PCMObservedDomains(domainID) ON DELETE CASCADE, FOREIGN KEY(destinationSiteDomainID) REFERENCES " 70 70 "PCMObservedDomains(domainID) ON DELETE CASCADE)"_s; … … 89 89 openDatabaseAndCreateSchemaIfNecessary(); 90 90 enableForeignKeys(); 91 addBundleIDColumnIfNecessary(); 91 92 allDatabases().add(this); 92 93 } … … 167 168 || statement->bindText(10, sourceUnlinkableToken ? sourceUnlinkableToken->keyIDBase64URL : emptyString()) != SQLITE_OK 168 169 || statement->bindDouble(11, destinationEarliestTimeToSend) != SQLITE_OK 170 || statement->bindText(12, attribution.sourceApplicationBundleID()) != SQLITE_OK 169 171 || statement->step() != SQLITE_DONE) { 170 172 RELEASE_LOG_ERROR(PrivateClickMeasurement, "%p - Database::insertPrivateClickMeasurement insertAttributedPrivateClickMeasurementQuery, error message: %" PRIVATE_LOG_STRING, this, m_database.lastErrorMsg()); … … 185 187 || statement->bindText(6, sourceUnlinkableToken ? sourceUnlinkableToken->signatureBase64URL : emptyString()) != SQLITE_OK 186 188 || statement->bindText(7, sourceUnlinkableToken ? sourceUnlinkableToken->keyIDBase64URL : emptyString()) != SQLITE_OK 189 || statement->bindText(8, attribution.sourceApplicationBundleID()) != SQLITE_OK 187 190 || statement->step() != SQLITE_DONE) { 188 191 RELEASE_LOG_ERROR(PrivateClickMeasurement, "%p - Database::insertPrivateClickMeasurement insertUnattributedPrivateClickMeasurementQuery, error message: %" PRIVATE_LOG_STRING, this, m_database.lastErrorMsg()); … … 365 368 const char* prefix = unattributedNumber ? "" : "Unattributed Private Click Measurements:"; 366 369 builder.append(prefix, "\nWebCore::PrivateClickMeasurement ", ++unattributedNumber, '\n', 367 attributionToStringForTesting( *unattributedScopedStatement.get(), PrivateClickMeasurementAttributionType::Unattributed));370 attributionToStringForTesting(buildPrivateClickMeasurementFromDatabase(*unattributedScopedStatement.get(), PrivateClickMeasurementAttributionType::Unattributed))); 368 371 } 369 372 … … 381 384 builder.append(unattributedNumber ? "\n" : "", "Attributed Private Click Measurements:"); 382 385 builder.append("\nWebCore::PrivateClickMeasurement ", ++attributedNumber + unattributedNumber, '\n', 383 attributionToStringForTesting( *attributedScopedStatement.get(), PrivateClickMeasurementAttributionType::Attributed));386 attributionToStringForTesting(buildPrivateClickMeasurementFromDatabase(*attributedScopedStatement.get(), PrivateClickMeasurementAttributionType::Attributed))); 384 387 } 385 388 return builder.toString(); 386 389 } 387 390 388 String Database::attributionToStringForTesting( WebCore::SQLiteStatement& statement, PrivateClickMeasurementAttributionType attributionType) const389 { 390 ASSERT(!RunLoop::isMain()); 391 auto sourceSiteDomain = getDomainStringFromDomainID(statement.columnInt(0));392 auto destinationSiteDomain = getDomainStringFromDomainID(statement.columnInt(1));393 auto sourceID = statement.columnInt(2);391 String Database::attributionToStringForTesting(const WebCore::PrivateClickMeasurement& pcm) const 392 { 393 ASSERT(!RunLoop::isMain()); 394 auto sourceSiteDomain = pcm.sourceSite().registrableDomain; 395 auto destinationSiteDomain = pcm.destinationSite().registrableDomain; 396 auto sourceID = pcm.sourceID().id; 394 397 395 398 StringBuilder builder; 396 399 builder.append("Source site: ", sourceSiteDomain, "\nAttribute on site: ", destinationSiteDomain, "\nSource ID: ", sourceID); 397 400 398 if (attributionType == PrivateClickMeasurementAttributionType::Attributed) { 399 auto attributionTriggerData = statement.columnInt(3); 400 auto priority = statement.columnInt(4); 401 auto earliestTimeToSend = statement.columnInt(6); 402 403 if (attributionTriggerData != -1) { 404 builder.append("\nAttribution trigger data: ", attributionTriggerData, "\nAttribution priority: ", priority, "\nAttribution earliest time to send: "); 405 if (earliestTimeToSend == -1) 406 builder.append("Not set"); 407 else { 408 auto secondsUntilSend = WallTime::fromRawSeconds(earliestTimeToSend) - WallTime::now(); 409 builder.append((secondsUntilSend >= 24_h && secondsUntilSend <= 48_h) ? "Within 24-48 hours" : "Outside 24-48 hours"); 410 } 411 } else 412 builder.append("\nNo attribution trigger data."); 401 if (auto& triggerData = pcm.attributionTriggerData()) { 402 auto attributionTriggerData = triggerData->data; 403 auto priority = triggerData->priority; 404 auto earliestTimeToSend = pcm.timesToSend().sourceEarliestTimeToSend; 405 406 builder.append("\nAttribution trigger data: ", attributionTriggerData, "\nAttribution priority: ", priority, "\nAttribution earliest time to send: "); 407 if (!earliestTimeToSend) 408 builder.append("Not set"); 409 else { 410 auto secondsUntilSend = *earliestTimeToSend - WallTime::now(); 411 builder.append((secondsUntilSend >= 24_h && secondsUntilSend <= 48_h) ? "Within 24-48 hours" : "Outside 24-48 hours"); 412 } 413 413 } else 414 414 builder.append("\nNo attribution trigger data."); 415 builder.append( '\n');415 builder.append("\nApplication bundle identifier: ", pcm.sourceApplicationBundleID(), '\n'); 416 416 417 417 return builder.toString(); … … 661 661 } 662 662 663 void Database::addBundleIDColumnIfNecessary() 664 { 665 // FIXME: Remove this at the end of 2021. No public release was made with the schema missing sourceApplicationBundleID, so this is only needed to migrate internal users who updated in September 2021. 666 String attributedTableName("AttributedPrivateClickMeasurement"); 667 String unattributedTableName("UnattributedPrivateClickMeasurement"_s); 668 String sourceApplicationBundleIDColumnName("sourceApplicationBundleID"_s); 669 auto checkColumns = [&] (const String& tableName) { 670 auto columns = columnsForTable(tableName); 671 if (!columns.size() || columns.last() != sourceApplicationBundleIDColumnName) 672 addMissingColumnToTable(tableName, sourceApplicationBundleIDColumnName); 673 }; 674 checkColumns(attributedTableName); 675 checkColumns(unattributedTableName); 676 } 677 678 Vector<String> Database::columnsForTable(const String& tableName) 679 { 680 auto statement = m_database.prepareStatementSlow(makeString("PRAGMA table_info(", tableName, ")")); 681 682 if (!statement) { 683 RELEASE_LOG_ERROR(PrivateClickMeasurement, "%p - Database::columnsForTable Unable to prepare statement to fetch schema for table, error message: %" PRIVATE_LOG_STRING, this, m_database.lastErrorMsg()); 684 ASSERT_NOT_REACHED(); 685 return { }; 686 } 687 688 Vector<String> columns; 689 while (statement->step() == SQLITE_ROW) { 690 auto name = statement->columnText(1); 691 columns.append(name); 692 } 693 694 return columns; 695 } 696 697 void Database::addMissingColumnToTable(const String& tableName, const String& columnName) 698 { 699 auto statement = m_database.prepareStatementSlow(makeString("ALTER TABLE ", tableName, " ADD COLUMN ", columnName)); 700 if (!statement) { 701 RELEASE_LOG_ERROR(PrivateClickMeasurement, "%p - Database::addMissingColumnToTable Unable to prepare statement to add missing columns to table, error message: %" PRIVATE_LOG_STRING, this, m_database.lastErrorMsg()); 702 ASSERT_NOT_REACHED(); 703 return; 704 } 705 if (statement->step() != SQLITE_DONE) { 706 RELEASE_LOG_ERROR(PrivateClickMeasurement, "%p - Database::addMissingColumnToTable error executing statement to add missing columns to table, error message: %" PRIVATE_LOG_STRING, this, m_database.lastErrorMsg()); 707 ASSERT_NOT_REACHED(); 708 } 709 } 710 663 711 } // namespace PCM 664 712 -
trunk/Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementDatabase.h
r281886 r282884 69 69 std::pair<std::optional<UnattributedPrivateClickMeasurement>, std::optional<AttributedPrivateClickMeasurement>> findPrivateClickMeasurement(const WebCore::PrivateClickMeasurement::SourceSite&, const WebCore::PrivateClickMeasurement::AttributionDestinationSite&); 70 70 void removeUnattributed(WebCore::PrivateClickMeasurement&); 71 String attributionToStringForTesting( WebCore::SQLiteStatement&, PrivateClickMeasurementAttributionType) const;71 String attributionToStringForTesting(const WebCore::PrivateClickMeasurement&) const; 72 72 void markReportAsSentToDestination(SourceDomainID, DestinationDomainID); 73 73 void markReportAsSentToSource(SourceDomainID, DestinationDomainID); … … 76 76 std::optional<DomainID> domainID(const WebCore::RegistrableDomain&); 77 77 String getDomainStringFromDomainID(DomainID) const final; 78 79 void addBundleIDColumnIfNecessary(); 80 Vector<String> columnsForTable(const String& tableName); 81 void addMissingColumnToTable(const String& tableName, const String& columnName); 78 82 79 83 using Statement = std::unique_ptr<WebCore::SQLiteStatement>; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r282370 r282884 421 421 @property (nonatomic, copy, setter=_setUIEventAttribution:) UIEventAttribution *_uiEventAttribution WK_API_AVAILABLE(ios(15.0)); 422 422 @property (nonatomic, copy, setter=_setEphemeralUIEventAttribution:) UIEventAttribution *_ephemeralUIEventAttribution WK_API_AVAILABLE(ios(WK_IOS_TBA)); 423 - (void)_setEphemeralUIEventAttribution:(UIEventAttribution *)attribution forApplicationWithBundleID:(NSString *)bundleID WK_API_AVAILABLE(ios(WK_IOS_TBA)); 423 424 #endif 424 425 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h
r281779 r282884 45 45 @interface WKWebView (WKTesting) 46 46 47 - (void)_addEventAttributionWithSourceID:(uint8_t)sourceID destinationURL:(NSURL *)destination sourceDescription:(NSString *)sourceDescription purchaser:(NSString *)purchaser reportEndpoint:(NSURL *)reportEndpoint optionalNonce:(nullable NSString *)nonce WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));47 - (void)_addEventAttributionWithSourceID:(uint8_t)sourceID destinationURL:(NSURL *)destination sourceDescription:(NSString *)sourceDescription purchaser:(NSString *)purchaser reportEndpoint:(NSURL *)reportEndpoint optionalNonce:(nullable NSString *)nonce applicationBundleID:(NSString *)bundleID WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 48 48 49 49 - (void)_setPageScale:(CGFloat)scale withOrigin:(CGPoint)origin; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
r281779 r282884 56 56 @implementation WKWebView (WKTesting) 57 57 58 - (void)_addEventAttributionWithSourceID:(uint8_t)sourceID destinationURL:(NSURL *)destination sourceDescription:(NSString *)sourceDescription purchaser:(NSString *)purchaser reportEndpoint:(NSURL *)reportEndpoint optionalNonce:(NSString *)nonce 58 - (void)_addEventAttributionWithSourceID:(uint8_t)sourceID destinationURL:(NSURL *)destination sourceDescription:(NSString *)sourceDescription purchaser:(NSString *)purchaser reportEndpoint:(NSURL *)reportEndpoint optionalNonce:(NSString *)nonce applicationBundleID:(NSString *)bundleID 59 59 { 60 60 WebCore::PrivateClickMeasurement measurement( … … 62 62 WebCore::PrivateClickMeasurement::SourceSite(reportEndpoint), 63 63 WebCore::PrivateClickMeasurement::AttributionDestinationSite(destination), 64 bundleID, 64 65 sourceDescription, 65 66 purchaser -
trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm
r281825 r282884 58 58 #import <WebCore/LocalCurrentTraitCollection.h> 59 59 #import <WebCore/MIMETypeRegistry.h> 60 #import <WebCore/RuntimeApplicationChecks.h> 60 61 #import <WebCore/VersionChecks.h> 61 62 #import <pal/spi/cocoa/QuartzCoreSPI.h> … … 2632 2633 WebCore::PrivateClickMeasurement::SourceSite(attribution.reportEndpoint), 2633 2634 WebCore::PrivateClickMeasurement::AttributionDestinationSite(attribution.destinationURL), 2635 WebCore::applicationBundleIdentifier(), 2634 2636 attribution.sourceDescription, 2635 2637 attribution.purchaser … … 2657 2659 - (void)_setEphemeralUIEventAttribution:(UIEventAttribution *)attribution 2658 2660 { 2661 // FIXME: Deprecate and remove this version without a bundle ID. 2662 [self _setEphemeralUIEventAttribution:attribution forApplicationWithBundleID:@"com.apple.mobilesafari"]; 2663 } 2664 2665 - (void)_setEphemeralUIEventAttribution:(UIEventAttribution *)attribution forApplicationWithBundleID:(NSString *)bundleID 2666 { 2659 2667 #if HAVE(UI_EVENT_ATTRIBUTION) 2660 2668 if (attribution) { … … 2663 2671 WebCore::PrivateClickMeasurement::SourceSite(attribution.reportEndpoint), 2664 2672 WebCore::PrivateClickMeasurement::AttributionDestinationSite(attribution.destinationURL), 2673 bundleID, 2665 2674 attribution.sourceDescription, 2666 2675 attribution.purchaser, -
trunk/Tools/ChangeLog
r282883 r282884 1 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 3 PCM should include the bundle ID of the app from which it originated 4 https://bugs.webkit.org/show_bug.cgi?id=230576 5 <rdar://83065221> 6 7 Reviewed by Kate Cheney. 8 9 * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp: 10 (TestWebKitAPI::TEST): 11 * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm: 12 (TestWebKitAPI::TEST): 13 * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm: 14 (pollUntilPCMIsMigrated): 15 1 16 2021-09-22 Alex Christensen <achristensen@webkit.org> 2 17 -
trunk/Tools/TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp
r279710 r282884 45 45 TEST(PrivateClickMeasurement, WellKnownURLs) 46 46 { 47 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };47 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 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 } };58 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(min6BitValue), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 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 } };66 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID((uint32_t)192), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 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 } };74 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 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 } };82 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 83 83 auto now = WallTime::now(); 84 84 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); … … 135 135 TEST(PrivateClickMeasurement, InvalidSourceID) 136 136 { 137 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };137 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 138 138 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 139 139 … … 144 144 TEST(PrivateClickMeasurement, InvalidSourceHost) 145 145 { 146 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { emptyURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };146 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { emptyURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 147 147 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 148 148 … … 153 153 TEST(PrivateClickMeasurement, InvalidDestinationHost) 154 154 { 155 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { emptyURL } };155 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy + 1), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { emptyURL }, "test.bundle.identifier" }; 156 156 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 157 157 … … 162 162 TEST(PrivateClickMeasurement, AttributionTriggerData) 163 163 { 164 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };164 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 165 165 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData((PrivateClickMeasurement::AttributionTriggerData::MaxEntropy + 1), PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy))); 166 166 … … 171 171 TEST(PrivateClickMeasurement, InvalidPriority) 172 172 { 173 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };173 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 174 174 attribution.attributeAndGetEarliestTimeToSend(PrivateClickMeasurement::AttributionTriggerData(PrivateClickMeasurement::AttributionTriggerData::MaxEntropy, PrivateClickMeasurement::Priority(PrivateClickMeasurement::Priority::MaxEntropy + 1))); 175 175 … … 180 180 TEST(PrivateClickMeasurement, InvalidMissingConversion) 181 181 { 182 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL } };182 PrivateClickMeasurement attribution { PrivateClickMeasurement::SourceID(PrivateClickMeasurement::SourceID::MaxEntropy), PrivateClickMeasurement::SourceSite { webKitURL }, PrivateClickMeasurement::AttributionDestinationSite { exampleURL }, "test.bundle.identifier" }; 183 183 184 184 ASSERT_TRUE(attribution.attributionReportSourceURL().isEmpty()); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm
r282883 r282884 298 298 auto webView = adoptNS([WKWebView new]); 299 299 webView.get().navigationDelegate = delegateAllowingAllTLS(); 300 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:serverURL optionalNonce:@"ABCDEFabcdef0123456789" ];300 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:serverURL optionalNonce:@"ABCDEFabcdef0123456789" applicationBundleID:@"test.bundle.id"]; 301 301 [[webView configuration].websiteDataStore _setResourceLoadStatisticsEnabled:YES]; 302 302 [[webView configuration].websiteDataStore _trustServerForLocalPCMTesting:secTrustFromCertificateChain(@[(id)testCertificate().get()]).get()]; … … 319 319 { 320 320 runBasicEventAttributionTest(nil, [](WKWebView *webView, const HTTPServer& server) { 321 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil ];321 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil applicationBundleID:@"test.bundle.id"]; 322 322 }); 323 323 } … … 341 341 viewConfiguration.get().websiteDataStore = dataStore.get(); 342 342 runBasicEventAttributionTest(viewConfiguration.get(), [](WKWebView *webView, const HTTPServer& server) { 343 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil ];343 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil applicationBundleID:@"test.bundle.id"]; 344 344 }); 345 345 originalNetworkProcessPid = [dataStore _networkProcessIdentifier]; … … 473 473 viewConfiguration.get().websiteDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration.get()]).get(); 474 474 runBasicEventAttributionTest(viewConfiguration.get(), [](WKWebView *webView, const HTTPServer& server) { 475 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil ];475 [webView _addEventAttributionWithSourceID:42 destinationURL:exampleURL() sourceDescription:@"test source description" purchaser:@"test purchaser" reportEndpoint:server.request().URL optionalNonce:nil applicationBundleID:@"test.bundle.id"]; 476 476 }); 477 477 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm
r281881 r282884 189 189 "Source ID: 43\n" 190 190 "No attribution trigger data.\n" 191 #if PLATFORM(MAC) 192 "Application bundle identifier: com.apple.Safari\n" 193 #else 194 "Application bundle identifier: com.apple.mobilesafari\n" 195 #endif 191 196 "\n" 192 197 "Attributed Private Click Measurements:\n" … … 197 202 "Attribution trigger data: 14\n" 198 203 "Attribution priority: 7\n" 199 "Attribution earliest time to send: Outside 24-48 hours\n"; 204 "Attribution earliest time to send: Outside 24-48 hours\n" 205 #if PLATFORM(MAC) 206 "Application bundle identifier: com.apple.Safari\n" 207 #else 208 "Application bundle identifier: com.apple.mobilesafari\n" 209 #endif 210 ""; 200 211 201 212 while (![dumpedPCM(webView) isEqualToString:expectedMigratedPCMDatabase])
Note:
See TracChangeset
for help on using the changeset viewer.