Changeset 259275 in webkit
- Timestamp:
- Mar 30, 2020, 7:45:38 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 33 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database-expected.txt (added)
-
LayoutTests/http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html (added)
-
LayoutTests/http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-expected.txt (added)
-
LayoutTests/http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html (added)
-
LayoutTests/platform/ios/TestExpectations (modified) (1 diff)
-
LayoutTests/platform/mac-wk2/TestExpectations (modified) (1 diff)
-
LayoutTests/platform/wk2/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/loader/ResourceLoadStatistics.h (modified) (1 diff)
-
Source/WebCore/page/Settings.yaml (modified) (1 diff)
-
Source/WebCore/platform/network/NetworkStorageSession.h (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp (modified) (16 diffs)
-
Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp (modified) (4 diffs)
-
Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkProcess.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkSession.cpp (modified) (4 diffs)
-
Source/WebKit/NetworkProcess/NetworkSession.h (modified) (2 diffs)
-
Source/WebKit/Scripts/webkit/messages.py (modified) (1 diff)
-
Source/WebKit/Shared/ResourceLoadStatisticsParameters.h (modified) (4 diffs)
-
Source/WebKit/Shared/WebPreferences.yaml (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APINavigation.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r259262 r259275 1 2020-03-30 John Wilander <wilander@apple.com> 2 3 Experimental: Enforce SameSite=strict for domains classified as bounce trackers 4 https://bugs.webkit.org/show_bug.cgi?id=209761 5 <rdar://problem/59394943> 6 7 Reviewed by Brent Fulgham and Kate Cheney (informal). 8 9 * http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database-expected.txt: Added. 10 * http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html: Added. 11 * http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-expected.txt: Added. 12 * http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html: Added. 13 * platform/ios/TestExpectations: 14 New test cases marked as pass for Catalina+ based on CFNetwork API availability. 15 * platform/mac-wk2/TestExpectations: 16 New test cases marked as pass for Catalina+ based on CFNetwork API availability. 17 * platform/wk2/TestExpectations: 18 New test cases marked as skip due to CFNetwork API availability. 19 1 20 2020-03-30 Alexey Shvayka <shvaikalesh@gmail.com> 2 21 -
trunk/LayoutTests/platform/ios/TestExpectations
r259195 r259275 2745 2745 # The SameSite cookie API is only available in macOS Catalina and above, and thus skipped for WK2 in general. 2746 2746 http/tests/resourceLoadStatistics/set-all-cookies-to-same-site-strict.html [ Pass ] 2747 http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html [ Pass ] 2748 http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html [ Pass ] 2747 2749 2748 2750 http/tests/storageAccess/deny-storage-access-under-opener.html [ Pass ] -
trunk/LayoutTests/platform/mac-wk2/TestExpectations
r259261 r259275 714 714 # The SameSite cookie API is only available in macOS Catalina and above. 715 715 [ Catalina+ ] http/tests/resourceLoadStatistics/set-all-cookies-to-same-site-strict.html [ Pass ] 716 [ Catalina+ ] http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html [ Pass ] 717 [ Catalina+ ] http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html [ Pass ] 716 718 717 719 # Skipped in general expectations since they only work on iOS and Mac, WK2. -
trunk/LayoutTests/platform/wk2/TestExpectations
r258884 r259275 736 736 # The SameSite cookie API is only available in macOS Catalina and above. 737 737 http/tests/resourceLoadStatistics/set-all-cookies-to-same-site-strict.html [ Skip ] 738 http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html [ Skip ] 739 http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html [ Skip ] 738 740 739 741 http/tests/websocket/connection-refusal-in-frame-resource-load-statistics.html [ Pass ] -
trunk/Source/WebCore/ChangeLog
r259261 r259275 1 2020-03-30 John Wilander <wilander@apple.com> 2 3 Experimental: Enforce SameSite=strict for domains classified as bounce trackers 4 https://bugs.webkit.org/show_bug.cgi?id=209761 5 <rdar://problem/59394943> 6 7 Reviewed by Brent Fulgham and Kate Cheney (informal). 8 9 This experimental feature is part of Intelligent Tracking Prevention and only enabled if 10 ITP (Resource Load Statistics) are. A new enum WebCore::SameSiteStrictEnforcementEnabled 11 controls the new behavior with default setting WebCore::SameSiteStrictEnforcementEnabled::No. 12 13 The features keeps a separate count of topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement 14 which builds up to a threshold. Once a domain goes above the threshold, its cookies are 15 rewritten as SameSite=strict and the topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement 16 counter for that domain is reset, effectively giving the domain a new chance to change its 17 behavior. 18 19 Tests: http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to-database.html 20 http/tests/resourceLoadStatistics/enforce-samesite-strict-based-on-top-frame-unique-redirects-to.html 21 22 * loader/ResourceLoadStatistics.h: 23 New field topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement. 24 * page/Settings.yaml: 25 * platform/network/NetworkStorageSession.h: 26 New enum SameSiteStrictEnforcementEnabled. 27 1 28 2020-03-30 Devin Rousso <drousso@apple.com> 2 29 -
trunk/Source/WebCore/loader/ResourceLoadStatistics.h
r257726 r259275 80 80 // Top frame stats 81 81 HashSet<RegistrableDomain> topFrameUniqueRedirectsTo; 82 HashSet<RegistrableDomain> topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement; 82 83 HashSet<RegistrableDomain> topFrameUniqueRedirectsFrom; 83 84 HashSet<RegistrableDomain> topFrameLinkDecorationsFrom; -
trunk/Source/WebCore/page/Settings.yaml
r258482 r259275 911 911 initial: false 912 912 913 isSameSiteStrictEnforcementEnabled: 914 initial: false 915 913 916 isLoggedInAPIEnabled: 914 917 initial: false -
trunk/Source/WebCore/platform/network/NetworkStorageSession.h
r258884 r259275 79 79 enum class IncludeHttpOnlyCookies : bool; 80 80 enum class ThirdPartyCookieBlockingMode : uint8_t { All, AllOnSitesWithoutUserInteraction, OnlyAccordingToPerDomainPolicy }; 81 enum class SameSiteStrictEnforcementEnabled : bool { Yes, No }; 81 82 enum class FirstPartyWebsiteDataRemovalMode : uint8_t { AllButCookies, None, AllButCookiesLiveOnTestingTimeout, AllButCookiesReproTestingTimeout }; 82 83 enum class ShouldAskITP : bool { No, Yes }; -
trunk/Source/WebKit/ChangeLog
r259253 r259275 1 2020-03-30 John Wilander <wilander@apple.com> 2 3 Experimental: Enforce SameSite=strict for domains classified as bounce trackers 4 https://bugs.webkit.org/show_bug.cgi?id=209761 5 <rdar://problem/59394943> 6 7 Reviewed by Brent Fulgham and Kate Cheney (informal). 8 9 This experimental feature is part of Intelligent Tracking Prevention and only enabled if 10 ITP (Resource Load Statistics) are. A new enum WebCore::SameSiteStrictEnforcementEnabled 11 controls the new behavior with default setting WebCore::SameSiteStrictEnforcementEnabled::No. 12 13 The features keeps a separate count of topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement 14 which builds up to a threshold. Once a domain goes above the threshold, its cookies are 15 rewritten as SameSite=strict and the topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement 16 counter for that domain is reset, effectively giving the domain a new chance to change its 17 behavior. 18 19 Test infrastructure is added to allow for layout tests. 20 21 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp: 22 (WebKit::ResourceLoadStatisticsDatabaseStore::createUniqueIndices): 23 (WebKit::ResourceLoadStatisticsDatabaseStore::createSchema): 24 (WebKit::ResourceLoadStatisticsDatabaseStore::insertDomainRelationships): 25 (WebKit::CompletionHandler<void): 26 * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h: 27 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp: 28 (WebKit::ResourceLoadStatisticsMemoryStore::logFrameNavigation): 29 (WebKit::ResourceLoadStatisticsMemoryStore::setTopFrameUniqueRedirectTo): 30 (WebKit::ResourceLoadStatisticsMemoryStore::shouldEnforceSameSiteStrictFor): 31 (WebKit::ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor): 32 * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h: 33 * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h: 34 (WebKit::ResourceLoadStatisticsStore::setSameSiteStrictEnforcementEnabled): 35 (WebKit::ResourceLoadStatisticsStore::isSameSiteStrictEnforcementEnabled const): 36 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: 37 (WebKit::WebResourceLoadStatisticsStore::setSameSiteStrictEnforcementEnabled): 38 * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: 39 (WebKit::RegistrableDomainsToDeleteOrRestrictWebsiteDataFor::isolatedCopy const): 40 (WebKit::RegistrableDomainsToDeleteOrRestrictWebsiteDataFor::isEmpty const): 41 * NetworkProcess/NetworkProcess.cpp: 42 (WebKit::NetworkProcess::setShouldEnbleSameSiteStrictEnforcementForTesting): 43 * NetworkProcess/NetworkProcess.h: 44 * NetworkProcess/NetworkProcess.messages.in: 45 Added SetShouldEnbleSameSiteStrictEnforcementForTesting. 46 * NetworkProcess/NetworkSession.cpp: 47 (WebKit::NetworkSession::NetworkSession): 48 (WebKit::NetworkSession::forwardResourceLoadStatisticsSettings): 49 (WebKit::NetworkSession::deleteAndRestrictWebsiteDataForRegistrableDomains): 50 (WebKit::NetworkSession::setShouldEnbleSameSiteStrictEnforcement): 51 * NetworkProcess/NetworkSession.h: 52 * Scripts/webkit/messages.py: 53 IPC instructions to find WebCore::SameSiteStrictEnforcementEnabled in 54 WebCore/NetworkStorageSession.h. 55 * Shared/ResourceLoadStatisticsParameters.h: 56 (WebKit::ResourceLoadStatisticsParameters::encode const): 57 (WebKit::ResourceLoadStatisticsParameters::decode): 58 * Shared/WebPreferences.yaml: 59 * UIProcess/API/APINavigation.h: 60 (API::Navigation::setIsLoadedWithNavigationShared): 61 (API::Navigation::isLoadedWithNavigationShared const): 62 Keeps track of how a navigation occurs to make sure that 63 WebPageProxy::logFrameNavigation() can capture navigations initiated by the 64 user through the hosting application. 65 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: 66 (WKWebsiteDataStoreStatisticsResetToConsistentState): 67 * UIProcess/Network/NetworkProcessProxy.cpp: 68 (WebKit::NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting): 69 * UIProcess/Network/NetworkProcessProxy.h: 70 * UIProcess/WebPageProxy.cpp: 71 (WebKit::WebPageProxy::loadRequestWithNavigationShared): 72 See comment above for API::Navigation. 73 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 74 See comment above for API::Navigation. 75 * UIProcess/WebProcessPool.cpp: 76 (WebKit::WebProcessPool::ensureNetworkProcess): 77 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 78 (WebKit::WebsiteDataStore::parameters): 79 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 80 (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting): 81 * UIProcess/WebsiteData/WebsiteDataStore.h: 82 1 83 2020-03-30 Andres Gonzalez <andresg_22@apple.com> 2 84 -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp
r259236 r259275 82 82 constexpr auto storageAccessUnderTopFrameDomainsQuery = "INSERT OR IGNORE INTO StorageAccessUnderTopFrameDomains (domainID, topLevelDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain in ( "_s; 83 83 constexpr auto topFrameUniqueRedirectsToQuery = "INSERT OR IGNORE into TopFrameUniqueRedirectsTo (sourceDomainID, toDomainID) SELECT ?, domainID FROM ObservedDomains where registrableDomain in ( "_s; 84 constexpr auto topFrameUniqueRedirectsToSinceSameSiteStrictEnforcementQuery = "INSERT OR IGNORE into TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement (sourceDomainID, toDomainID) SELECT ?, domainID FROM ObservedDomains where registrableDomain in ( "_s; 84 85 constexpr auto topFrameUniqueRedirectsFromQuery = "INSERT OR IGNORE INTO TopFrameUniqueRedirectsFrom (targetDomainID, fromDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain in ( "_s; 85 86 constexpr auto topFrameLoadedThirdPartyScriptsQuery = "INSERT OR IGNORE into TopFrameLoadedThirdPartyScripts (topFrameDomainID, subresourceDomainID) SELECT ?, domainID FROM ObservedDomains where registrableDomain in ( "_s; … … 139 140 "StorageAccessUnderTopFrameDomains", 140 141 "TopFrameUniqueRedirectsTo", 142 "TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement", 141 143 "TopFrameUniqueRedirectsFrom", 142 144 "TopFrameLinkDecorationsFrom", … … 184 186 "FOREIGN KEY(sourceDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE, " 185 187 "FOREIGN KEY(toDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE);"_s; 186 188 189 constexpr auto createTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement = "CREATE TABLE TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement (" 190 "sourceDomainID INTEGER NOT NULL, toDomainID INTEGER NOT NULL, " 191 "FOREIGN KEY(sourceDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE, " 192 "FOREIGN KEY(toDomainID) REFERENCES TopLevelDomains(topLevelDomainID) ON DELETE CASCADE);"_s; 193 187 194 constexpr auto createTopFrameUniqueRedirectsFrom = "CREATE TABLE TopFrameUniqueRedirectsFrom (" 188 195 "targetDomainID INTEGER NOT NULL, fromDomainID INTEGER NOT NULL, " … … 223 230 constexpr auto createUniqueIndexStorageAccessUnderTopFrameDomains = "CREATE UNIQUE INDEX IF NOT EXISTS StorageAccessUnderTopFrameDomains_domainID_topLevelDomainID on StorageAccessUnderTopFrameDomains ( domainID, topLevelDomainID );"_s; 224 231 constexpr auto createUniqueIndexTopFrameUniqueRedirectsTo = "CREATE UNIQUE INDEX IF NOT EXISTS TopFrameUniqueRedirectsTo_sourceDomainID_toDomainID on TopFrameUniqueRedirectsTo ( sourceDomainID, toDomainID );"_s; 232 constexpr auto createUniqueIndexTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement = "CREATE UNIQUE INDEX IF NOT EXISTS TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement_sourceDomainID_toDomainID on TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement ( sourceDomainID, toDomainID );"_s; 225 233 constexpr auto createUniqueIndexTopFrameUniqueRedirectsFrom = "CREATE UNIQUE INDEX IF NOT EXISTS TopFrameUniqueRedirectsFrom_targetDomainID_fromDomainID on TopFrameUniqueRedirectsFrom ( targetDomainID, fromDomainID );"_s; 226 234 constexpr auto createUniqueIndexTopFrameLinkDecorationsFrom = "CREATE UNIQUE INDEX IF NOT EXISTS TopFrameLinkDecorationsFrom_toDomainID_fromDomainID on TopFrameLinkDecorationsFrom ( toDomainID, fromDomainID );"_s; … … 413 421 if (!m_database.executeCommand(createUniqueIndexStorageAccessUnderTopFrameDomains) 414 422 || !m_database.executeCommand(createUniqueIndexTopFrameUniqueRedirectsTo) 423 || !m_database.executeCommand(createUniqueIndexTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement) 415 424 || !m_database.executeCommand(createUniqueIndexTopFrameUniqueRedirectsFrom) 416 425 || !m_database.executeCommand(createUniqueIndexTopFrameLinkDecorationsFrom) … … 447 456 if (!m_database.executeCommand(createTopFrameUniqueRedirectsTo)) { 448 457 LOG_ERROR("Could not create TopFrameUniqueRedirectsTo table in database (%i) - %s", m_database.lastError(), m_database.lastErrorMsg()); 458 return false; 459 } 460 461 if (!m_database.executeCommand(createTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement)) { 462 LOG_ERROR("Could not create TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement table in database (%i) - %s", m_database.lastError(), m_database.lastErrorMsg()); 449 463 return false; 450 464 } … … 693 707 insertDomainRelationshipList(storageAccessUnderTopFrameDomainsQuery, loadStatistics.storageAccessUnderTopFrameDomains, registrableDomainID.value()); 694 708 insertDomainRelationshipList(topFrameUniqueRedirectsToQuery, loadStatistics.topFrameUniqueRedirectsTo, registrableDomainID.value()); 709 insertDomainRelationshipList(topFrameUniqueRedirectsToSinceSameSiteStrictEnforcementQuery, loadStatistics.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement, registrableDomainID.value()); 695 710 insertDomainRelationshipList(topFrameUniqueRedirectsFromQuery, loadStatistics.topFrameUniqueRedirectsFrom, registrableDomainID.value()); 696 711 insertDomainRelationshipList(subframeUnderTopFrameDomainsQuery, loadStatistics.subframeUnderTopFrameDomains, registrableDomainID.value()); … … 1613 1628 } 1614 1629 insertDomainRelationshipList(topFrameUniqueRedirectsToQuery, HashSet<RegistrableDomain>({ targetDomain }), *redirectingDomainResult.second); 1630 insertDomainRelationshipList(topFrameUniqueRedirectsToSinceSameSiteStrictEnforcementQuery, HashSet<RegistrableDomain>({ targetDomain }), *redirectingDomainResult.second); 1631 RELEASE_LOG_INFO_IF(debugLoggingEnabled(), ITPDebug, "Did set %" PUBLIC_LOG_STRING " as making a top frame redirect to %" PUBLIC_LOG_STRING ".", sourceDomain.string().utf8().data(), targetDomain.string().utf8().data()); 1615 1632 insertDomainRelationshipList(topFrameUniqueRedirectsFromQuery, HashSet<RegistrableDomain>({ sourceDomain }), *targetResult.second); 1616 1633 statisticsWereUpdated = true; … … 1649 1666 } 1650 1667 1668 void ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement(const RegistrableDomain& domain, CompletionHandler<void()>&& completionHandler) 1669 { 1670 ASSERT(!RunLoop::isMain()); 1671 1672 auto targetResult = ensureResourceStatisticsForRegistrableDomain(domain); 1673 if (!targetResult.second) { 1674 RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, "%p - ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement was not completed due to failed insert attempt", this); 1675 completionHandler(); 1676 return; 1677 } 1678 1679 SQLiteStatement removeRedirectsToSinceSameSite(m_database, "DELETE FROM TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement WHERE sourceDomainID = ?"); 1680 if (removeRedirectsToSinceSameSite.prepare() != SQLITE_OK 1681 || removeRedirectsToSinceSameSite.bindInt(1, *targetResult.second) != SQLITE_OK 1682 || removeRedirectsToSinceSameSite.step() != SQLITE_DONE) { 1683 RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, "%p - ResourceLoadStatisticsDatabaseStore::clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement failed to bind, error message: %{private}s", this, m_database.lastErrorMsg()); 1684 ASSERT_NOT_REACHED(); 1685 } 1686 1687 completionHandler(); 1688 } 1689 1651 1690 void ResourceLoadStatisticsDatabaseStore::setUserInteraction(const RegistrableDomain& domain, bool hadUserInteraction, WallTime mostRecentInteraction) 1652 1691 { … … 1699 1738 || removeStorageAccess.bindInt(1, *targetResult.second) != SQLITE_OK 1700 1739 || removeStorageAccess.step() != SQLITE_DONE) { 1701 RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, "%p - ResourceLoadStatisticsDatabaseStore:: logUserInteraction failed to bind, error message: %{private}s", this, m_database.lastErrorMsg());1740 RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, "%p - ResourceLoadStatisticsDatabaseStore::clearUserInteraction failed to bind, error message: %{private}s", this, m_database.lastErrorMsg()); 1702 1741 ASSERT_NOT_REACHED(); 1703 1742 } … … 2045 2084 return; 2046 2085 } 2047 // For consistency, make sure we also have a statistics entry for the redirect domain. 2086 2048 2087 insertDomainRelationshipList(topFrameUniqueRedirectsToQuery, HashSet<RegistrableDomain>({ redirectDomain }), *result.second); 2088 insertDomainRelationshipList(topFrameUniqueRedirectsToSinceSameSiteStrictEnforcementQuery, HashSet<RegistrableDomain>({ redirectDomain }), *result.second); 2049 2089 } 2050 2090 … … 2258 2298 2259 2299 Vector<DomainData> results; 2260 SQLiteStatement statement(m_database, "SELECT domainID, registrableDomain, mostRecentUserInteractionTime, hadUserInteraction, grandfathered, isScheduledForAllButCookieDataRemoval FROM ObservedDomains"_s); 2300 SQLiteStatement statement(m_database, "SELECT domainID, registrableDomain, mostRecentUserInteractionTime, hadUserInteraction, grandfathered, isScheduledForAllButCookieDataRemoval, countOfTopFrameRedirects FROM ObservedDomains LEFT JOIN (SELECT sourceDomainID, COUNT(*) as countOfTopFrameRedirects from TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement GROUP BY sourceDomainID) as z ON z.sourceDomainID = domainID"_s); 2301 2261 2302 if (statement.prepare() != SQLITE_OK) 2262 2303 return results; … … 2269 2310 , statement.getColumnInt(4) ? true : false 2270 2311 , statement.getColumnInt(5) ? true : false 2312 , static_cast<unsigned>(statement.getColumnInt(6)) 2271 2313 }); 2272 2314 } … … 2381 2423 } 2382 2424 2425 bool ResourceLoadStatisticsDatabaseStore::shouldEnforceSameSiteStrictFor(DomainData& resourceStatistic, bool shouldCheckForGrandfathering) 2426 { 2427 if (!isSameSiteStrictEnforcementEnabled() || (shouldCheckForGrandfathering && resourceStatistic.grandfathered)) 2428 return false; 2429 2430 if (resourceStatistic.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement > parameters().minimumTopFrameRedirectsForSameSiteStrictEnforcement) { 2431 clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement(resourceStatistic.registrableDomain, [] { }); 2432 return true; 2433 } 2434 2435 return false; 2436 } 2437 2383 2438 RegistrableDomainsToDeleteOrRestrictWebsiteDataFor ResourceLoadStatisticsDatabaseStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor() 2384 2439 { … … 2404 2459 toDeleteOrRestrictFor.domainsToDeleteAllCookiesFor.append(statistic.registrableDomain); 2405 2460 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 2406 } else if (shouldRemoveAllButCookiesFor(statistic, shouldCheckForGrandfathering)) { 2407 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 2408 setIsScheduledForAllButCookieDataRemoval(statistic.registrableDomain, false); 2461 } else { 2462 if (shouldRemoveAllButCookiesFor(statistic, shouldCheckForGrandfathering)) { 2463 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 2464 setIsScheduledForAllButCookieDataRemoval(statistic.registrableDomain, false); 2465 } 2466 if (shouldEnforceSameSiteStrictFor(statistic, shouldCheckForGrandfathering)) { 2467 toDeleteOrRestrictFor.domainsToEnforceSameSiteStrictFor.append(statistic.registrableDomain); 2468 RELEASE_LOG_INFO_IF(debugLoggingEnabled(), ITPDebug, "Scheduled %" PUBLIC_LOG_STRING " to have its cookies set to SameSite=strict.", statistic.registrableDomain.string().utf8().data()); 2469 } 2409 2470 } 2410 2471 if (shouldClearGrandfathering && statistic.grandfathered) … … 2696 2757 // Top frame stats 2697 2758 appendSubStatisticList(builder, "TopFrameUniqueRedirectsTo", domain); 2759 appendSubStatisticList(builder, "TopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement", domain); 2698 2760 appendSubStatisticList(builder, "TopFrameUniqueRedirectsFrom", domain); 2699 2761 appendSubStatisticList(builder, "TopFrameLinkDecorationsFrom", domain); -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h
r258969 r259275 126 126 127 127 void logFrameNavigation(const NavigatedToDomain&, const TopFrameDomain&, const NavigatedFromDomain&, bool isRedirect, bool isMainFrame, Seconds delayAfterMainFrameDocumentLoad, bool wasPotentiallyInitiatedByUser) override; 128 void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&) override; 129 void clearTopFrameUniqueRedirectsToSinceSameSiteStrictEnforcement(const NavigatedToDomain&, CompletionHandler<void()>&&); 130 128 131 void logUserInteraction(const TopFrameDomain&, CompletionHandler<void()>&&) override; 129 void logCrossSiteLoadWithLinkDecoration(const NavigatedFromDomain&, const NavigatedToDomain&) override;130 131 132 void clearUserInteraction(const RegistrableDomain&, CompletionHandler<void()>&&) override; 132 133 bool hasHadUserInteraction(const RegistrableDomain&, OperatingDatesWindow) override; … … 179 180 bool grandfathered; 180 181 bool isScheduledForAllButCookieDataRemoval; 182 unsigned topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement; 181 183 }; 182 184 Vector<DomainData> domains() const; … … 216 218 bool shouldRemoveAllWebsiteDataFor(const DomainData&, bool shouldCheckForGrandfathering); 217 219 bool shouldRemoveAllButCookiesFor(const DomainData&, bool shouldCheckForGrandfathering); 220 bool shouldEnforceSameSiteStrictFor(DomainData&, bool shouldCheckForGrandfathering); 218 221 RegistrableDomainsToDeleteOrRestrictWebsiteDataFor registrableDomainsToDeleteOrRestrictWebsiteDataFor() override; 219 222 bool isDatabaseStore() const final { return true; } -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp
r259236 r259275 475 475 if (redirectingDomainStatistics.topFrameUniqueRedirectsTo.add(targetDomain).isNewEntry) 476 476 statisticsWereUpdated = true; 477 if (redirectingDomainStatistics.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement.add(targetDomain).isNewEntry) 478 statisticsWereUpdated = true; 479 RELEASE_LOG_INFO_IF(debugLoggingEnabled(), ITPDebug, "Did set %" PUBLIC_LOG_STRING " as making a top frame redirect to %" PUBLIC_LOG_STRING ".", sourceDomain.string().utf8().data(), targetDomain.string().utf8().data()); 477 480 auto& targetStatistics = ensureResourceStatisticsForRegistrableDomain(targetDomain); 478 481 if (targetStatistics.topFrameUniqueRedirectsFrom.add(sourceDomain).isNewEntry) … … 713 716 auto& statistics = ensureResourceStatisticsForRegistrableDomain(topFrameDomain); 714 717 statistics.topFrameUniqueRedirectsTo.add(redirectDomain); 718 statistics.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement.add(redirectDomain); 715 719 // For consistency, make sure we also have a statistics entry for the redirect domain. 716 720 ensureResourceStatisticsForRegistrableDomain(redirectDomain); … … 944 948 } 945 949 950 bool ResourceLoadStatisticsMemoryStore::shouldEnforceSameSiteStrictFor(ResourceLoadStatistics& resourceStatistic, bool shouldCheckForGrandfathering) 951 { 952 if (!isSameSiteStrictEnforcementEnabled() || (shouldCheckForGrandfathering && resourceStatistic.grandfathered)) 953 return false; 954 955 if (resourceStatistic.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement.size() > parameters().minimumTopFrameRedirectsForSameSiteStrictEnforcement) { 956 resourceStatistic.topFrameUniqueRedirectsToSinceSameSiteStrictEnforcement.clear(); 957 return true; 958 } 959 960 return false; 961 } 962 946 963 RegistrableDomainsToDeleteOrRestrictWebsiteDataFor ResourceLoadStatisticsMemoryStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor() 947 964 { … … 962 979 toDeleteOrRestrictFor.domainsToDeleteAllCookiesFor.append(statistic.registrableDomain); 963 980 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 964 } else if (shouldRemoveAllButCookiesFor(statistic, shouldCheckForGrandfathering)) { 965 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 966 statistic.gotLinkDecorationFromPrevalentResource = false; 981 } else { 982 if (shouldRemoveAllButCookiesFor(statistic, shouldCheckForGrandfathering)) { 983 toDeleteOrRestrictFor.domainsToDeleteAllNonCookieWebsiteDataFor.append(statistic.registrableDomain); 984 statistic.gotLinkDecorationFromPrevalentResource = false; 985 } 986 if (shouldEnforceSameSiteStrictFor(statistic, shouldCheckForGrandfathering)) { 987 toDeleteOrRestrictFor.domainsToEnforceSameSiteStrictFor.append(statistic.registrableDomain); 988 RELEASE_LOG_INFO_IF(debugLoggingEnabled(), ITPDebug, "Scheduled %" PUBLIC_LOG_STRING " to have its cookies set to SameSite=strict.", statistic.registrableDomain.string().utf8().data()); 989 990 } 967 991 } 968 992 -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h
r258969 r259275 121 121 bool shouldRemoveAllWebsiteDataFor(ResourceLoadStatistics&, bool shouldCheckForGrandfathering) const; 122 122 bool shouldRemoveAllButCookiesFor(ResourceLoadStatistics&, bool shouldCheckForGrandfathering) const; 123 bool shouldEnforceSameSiteStrictFor(ResourceLoadStatistics&, bool shouldCheckForGrandfathering); 123 124 void incrementRecordsDeletedCountForDomains(HashSet<RegistrableDomain>&&) override; 124 125 void setPrevalentResource(ResourceLoadStatistics&, ResourceLoadPrevalence); -
trunk/Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h
r259236 r259275 166 166 void setThirdPartyCookieBlockingMode(WebCore::ThirdPartyCookieBlockingMode mode) { m_thirdPartyCookieBlockingMode = mode; }; 167 167 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode() const { return m_thirdPartyCookieBlockingMode; }; 168 void setSameSiteStrictEnforcementEnabled(WebCore::SameSiteStrictEnforcementEnabled enabled) { m_sameSiteStrictEnforcementEnabled = enabled; }; 169 bool isSameSiteStrictEnforcementEnabled() const { return m_sameSiteStrictEnforcementEnabled == WebCore::SameSiteStrictEnforcementEnabled::Yes; }; 168 170 void setFirstPartyWebsiteDataRemovalMode(WebCore::FirstPartyWebsiteDataRemovalMode mode) { m_firstPartyWebsiteDataRemovalMode = mode; } 169 171 … … 226 228 bool shouldNotifyPagesWhenDataRecordsWereScanned { false }; 227 229 bool shouldClassifyResourcesBeforeDataRecordsRemoval { true }; 230 size_t minimumTopFrameRedirectsForSameSiteStrictEnforcement { 10 }; 228 231 bool shouldSubmitTelemetry { true }; 229 232 bool isRunningTest { false }; … … 279 282 bool m_debugModeEnabled { false }; 280 283 WebCore::ThirdPartyCookieBlockingMode m_thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 284 WebCore::SameSiteStrictEnforcementEnabled m_sameSiteStrictEnforcementEnabled { WebCore::SameSiteStrictEnforcementEnabled::No }; 281 285 bool m_dataRecordsBeingRemoved { false }; 282 286 ShouldIncludeLocalhost m_shouldIncludeLocalhost { ShouldIncludeLocalhost::Yes }; -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp
r258969 r259275 600 600 } 601 601 602 void WebResourceLoadStatisticsStore::setSameSiteStrictEnforcementEnabled(SameSiteStrictEnforcementEnabled enabled) 603 { 604 ASSERT(RunLoop::isMain()); 605 606 if (isEphemeral()) 607 return; 608 609 postTask([this, enabled]() { 610 if (!m_statisticsStore) 611 return; 612 613 m_statisticsStore->setSameSiteStrictEnforcementEnabled(enabled); 614 }); 615 } 616 602 617 void WebResourceLoadStatisticsStore::setFirstPartyWebsiteDataRemovalMode(FirstPartyWebsiteDataRemovalMode mode, CompletionHandler<void()>&& completionHandler) 603 618 { -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h
r258969 r259275 81 81 Vector<WebCore::RegistrableDomain> domainsToDeleteAllButHttpOnlyCookiesFor; 82 82 Vector<WebCore::RegistrableDomain> domainsToDeleteAllNonCookieWebsiteDataFor; 83 RegistrableDomainsToDeleteOrRestrictWebsiteDataFor isolatedCopy() const { return { domainsToDeleteAllCookiesFor.isolatedCopy(), domainsToDeleteAllButHttpOnlyCookiesFor.isolatedCopy(), domainsToDeleteAllNonCookieWebsiteDataFor.isolatedCopy() }; } 84 bool isEmpty() const { return domainsToDeleteAllCookiesFor.isEmpty() && domainsToDeleteAllButHttpOnlyCookiesFor.isEmpty() && domainsToDeleteAllNonCookieWebsiteDataFor.isEmpty(); } 83 Vector<WebCore::RegistrableDomain> domainsToEnforceSameSiteStrictFor; 84 RegistrableDomainsToDeleteOrRestrictWebsiteDataFor isolatedCopy() const { return { domainsToDeleteAllCookiesFor.isolatedCopy(), domainsToDeleteAllButHttpOnlyCookiesFor.isolatedCopy(), domainsToDeleteAllNonCookieWebsiteDataFor.isolatedCopy(), domainsToEnforceSameSiteStrictFor.isolatedCopy() }; } 85 bool isEmpty() const { return domainsToDeleteAllCookiesFor.isEmpty() && domainsToDeleteAllButHttpOnlyCookiesFor.isEmpty() && domainsToDeleteAllNonCookieWebsiteDataFor.isEmpty() && domainsToEnforceSameSiteStrictFor.isEmpty(); } 85 86 }; 86 87 … … 275 276 void hasCookies(const RegistrableDomain&, CompletionHandler<void(bool)>&&); 276 277 void setThirdPartyCookieBlockingMode(WebCore::ThirdPartyCookieBlockingMode); 278 void setSameSiteStrictEnforcementEnabled(WebCore::SameSiteStrictEnforcementEnabled); 277 279 void setFirstPartyWebsiteDataRemovalMode(WebCore::FirstPartyWebsiteDataRemovalMode, CompletionHandler<void()>&&); 278 280 void didCreateNetworkProcess(); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r259236 r259275 1295 1295 } 1296 1296 1297 void NetworkProcess::setShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID sessionID, WebCore::SameSiteStrictEnforcementEnabled enabled, CompletionHandler<void()>&& completionHandler) 1298 { 1299 if (auto* networkSession = this->networkSession(sessionID)) 1300 networkSession->setShouldEnbleSameSiteStrictEnforcement(enabled); 1301 else 1302 ASSERT_NOT_REACHED(); 1303 completionHandler(); 1304 } 1305 1297 1306 void NetworkProcess::setFirstPartyWebsiteDataRemovalModeForTesting(PAL::SessionID sessionID, WebCore::FirstPartyWebsiteDataRemovalMode mode, CompletionHandler<void()>&& completionHandler) 1298 1307 { -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r259236 r259275 266 266 void setShouldDowngradeReferrerForTesting(bool, CompletionHandler<void()>&&); 267 267 void setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID, WebCore::ThirdPartyCookieBlockingMode, CompletionHandler<void()>&&); 268 void setShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID, WebCore::SameSiteStrictEnforcementEnabled, CompletionHandler<void()>&&); 268 269 void setFirstPartyWebsiteDataRemovalModeForTesting(PAL::SessionID, WebCore::FirstPartyWebsiteDataRemovalMode, CompletionHandler<void()>&&); 269 270 void setToSameSiteStrictCookiesForTesting(PAL::SessionID, const WebCore::RegistrableDomain&, CompletionHandler<void()>&&); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r258914 r259275 141 141 SetShouldDowngradeReferrerForTesting(bool enabled) -> () Async 142 142 SetShouldBlockThirdPartyCookiesForTesting(PAL::SessionID sessionID, enum:uint8_t WebCore::ThirdPartyCookieBlockingMode blockingMode) -> () Async 143 SetShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID sessionID, enum:bool WebCore::SameSiteStrictEnforcementEnabled enabled) -> () Async 143 144 SetFirstPartyWebsiteDataRemovalModeForTesting(PAL::SessionID sessionID, enum:uint8_t WebCore::FirstPartyWebsiteDataRemovalMode mode) -> () Async 144 145 SetToSameSiteStrictCookiesForTesting(PAL::SessionID sessionID, WebCore::RegistrableDomain domain) -> () Async -
trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp
r259236 r259275 87 87 , m_enableResourceLoadStatisticsLogTestingEvent(parameters.resourceLoadStatisticsParameters.enableLogTestingEvent) 88 88 , m_thirdPartyCookieBlockingMode(parameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode) 89 , m_sameSiteStrictEnforcementEnabled(parameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled) 89 90 , m_firstPartyWebsiteDataRemovalMode(parameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode) 90 91 #endif … … 201 202 { 202 203 m_resourceLoadStatistics->setThirdPartyCookieBlockingMode(m_thirdPartyCookieBlockingMode); 204 m_resourceLoadStatistics->setSameSiteStrictEnforcementEnabled(m_sameSiteStrictEnforcementEnabled); 203 205 m_resourceLoadStatistics->setFirstPartyWebsiteDataRemovalMode(m_firstPartyWebsiteDataRemovalMode, [] { }); 204 206 } … … 226 228 void NetworkSession::deleteAndRestrictWebsiteDataForRegistrableDomains(OptionSet<WebsiteDataType> dataTypes, RegistrableDomainsToDeleteOrRestrictWebsiteDataFor&& domains, bool shouldNotifyPage, CompletionHandler<void(const HashSet<RegistrableDomain>&)>&& completionHandler) 227 229 { 230 if (auto* storageSession = networkStorageSession()) { 231 for (auto& domain : domains.domainsToEnforceSameSiteStrictFor) 232 storageSession->setAllCookiesToSameSiteStrict(domain, [] { }); 233 } 234 domains.domainsToEnforceSameSiteStrictFor.clear(); 235 228 236 m_networkProcess->deleteAndRestrictWebsiteDataForRegistrableDomains(m_sessionID, dataTypes, WTFMove(domains), shouldNotifyPage, WTFMove(completionHandler)); 229 237 } … … 251 259 m_resourceLoadStatistics->setThirdPartyCookieBlockingMode(blockingMode); 252 260 } 261 262 void NetworkSession::setShouldEnbleSameSiteStrictEnforcement(WebCore::SameSiteStrictEnforcementEnabled enabled) 263 { 264 ASSERT(m_resourceLoadStatistics); 265 m_sameSiteStrictEnforcementEnabled = enabled; 266 if (m_resourceLoadStatistics) 267 m_resourceLoadStatistics->setSameSiteStrictEnforcementEnabled(enabled); 268 } 253 269 #endif // ENABLE(RESOURCE_LOAD_STATISTICS) 254 270 -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r259076 r259275 105 105 bool shouldDowngradeReferrer() const; 106 106 void setThirdPartyCookieBlockingMode(WebCore::ThirdPartyCookieBlockingMode); 107 void setShouldEnbleSameSiteStrictEnforcement(WebCore::SameSiteStrictEnforcementEnabled); 107 108 #endif 108 109 … … 162 163 bool m_downgradeReferrer { true }; 163 164 WebCore::ThirdPartyCookieBlockingMode m_thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 165 WebCore::SameSiteStrictEnforcementEnabled m_sameSiteStrictEnforcementEnabled { WebCore::SameSiteStrictEnforcementEnabled::No }; 164 166 WebCore::FirstPartyWebsiteDataRemovalMode m_firstPartyWebsiteDataRemovalMode { WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies }; 165 167 #endif -
trunk/Source/WebKit/Scripts/webkit/messages.py
r259200 r259275 629 629 'WebCore::TextIndicatorData': ['<WebCore/TextIndicator.h>'], 630 630 'WebCore::ThirdPartyCookieBlockingMode': ['<WebCore/NetworkStorageSession.h>'], 631 'WebCore::SameSiteStrictEnforcementEnabled': ['<WebCore/NetworkStorageSession.h>'], 631 632 'WebCore::FirstPartyWebsiteDataRemovalMode': ['<WebCore/NetworkStorageSession.h>'], 632 633 'WebCore::UsedLegacyTLS': ['<WebCore/ResourceResponseBase.h>'], -
trunk/Source/WebKit/Shared/ResourceLoadStatisticsParameters.h
r258269 r259275 45 45 #if ENABLE(RESOURCE_LOAD_STATISTICS) 46 46 WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; 47 WebCore::SameSiteStrictEnforcementEnabled sameSiteStrictEnforcementEnabled { WebCore::SameSiteStrictEnforcementEnabled::No }; 47 48 #endif 48 49 WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode { WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies }; … … 60 61 #if ENABLE(RESOURCE_LOAD_STATISTICS) 61 62 encoder << thirdPartyCookieBlockingMode; 63 encoder << sameSiteStrictEnforcementEnabled; 62 64 #endif 63 65 encoder << firstPartyWebsiteDataRemovalMode; … … 107 109 if (!thirdPartyCookieBlockingMode) 108 110 return WTF::nullopt; 111 112 Optional<WebCore::SameSiteStrictEnforcementEnabled> sameSiteStrictEnforcementEnabled; 113 decoder >> sameSiteStrictEnforcementEnabled; 114 if (!sameSiteStrictEnforcementEnabled) 115 return WTF::nullopt; 109 116 #endif 110 117 … … 129 136 #if ENABLE(RESOURCE_LOAD_STATISTICS) 130 137 WTFMove(*thirdPartyCookieBlockingMode), 138 WTFMove(*sameSiteStrictEnforcementEnabled), 131 139 #endif 132 140 WTFMove(*firstPartyWebsiteDataRemovalMode), -
trunk/Source/WebKit/Shared/WebPreferences.yaml
r258678 r259275 1929 1929 category: internal 1930 1930 1931 IsSameSiteStrictEnforcementEnabled: 1932 type: bool 1933 defaultValue: false 1934 humanReadableName: "SameSite strict enforcement (ITP)" 1935 humanReadableDescription: "Enable SameSite strict enforcement to mitigate bounce tracking" 1936 category: experimental 1937 1931 1938 IsLoggedInAPIEnabled: 1932 1939 type: bool -
trunk/Source/WebKit/UIProcess/API/APINavigation.h
r255992 r259275 157 157 void setForegroundActivity(std::unique_ptr<WebKit::ProcessThrottler::ForegroundActivity>&& activity) { m_foregroundActivity = WTFMove(activity); } 158 158 159 void setIsLoadedWithNavigationShared(bool value) { m_isLoadedWithNavigationShared = value; } 160 bool isLoadedWithNavigationShared() const { return m_isLoadedWithNavigationShared; } 161 159 162 private: 160 163 explicit Navigation(WebKit::WebNavigationState&); … … 179 182 WebKit::WebContentMode m_effectiveContentMode { WebKit::WebContentMode::Recommended }; 180 183 std::unique_ptr<WebKit::ProcessThrottler::ForegroundActivity> m_foregroundActivity; 184 bool m_isLoadedWithNavigationShared { false }; 181 185 }; 182 186 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
r258884 r259275 607 607 store.setResourceLoadStatisticsShouldDowngradeReferrerForTesting(true, [callbackAggregator = callbackAggregator.copyRef()] { }); 608 608 store.setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting(false, false, [callbackAggregator = callbackAggregator.copyRef()] { }); 609 store.setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting(true, [callbackAggregator = callbackAggregator.copyRef()] { }); 609 610 store.setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting(false, [callbackAggregator = callbackAggregator.copyRef()] { }); 610 611 store.resetParametersToDefaultValues([callbackAggregator = callbackAggregator.copyRef()] { }); -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r258914 r259275 1157 1157 } 1158 1158 1159 void NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID sessionID, WebCore::SameSiteStrictEnforcementEnabled enabled, CompletionHandler<void()>&& completionHandler) 1160 { 1161 sendWithAsyncReply(Messages::NetworkProcess::SetShouldEnbleSameSiteStrictEnforcementForTesting(sessionID, enabled), WTFMove(completionHandler)); 1162 } 1163 1159 1164 void NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting(PAL::SessionID sessionID, FirstPartyWebsiteDataRemovalMode mode, CompletionHandler<void()>&& completionHandler) 1160 1165 { -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r258914 r259275 174 174 void setShouldDowngradeReferrerForTesting(bool, CompletionHandler<void()>&&); 175 175 void setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID, WebCore::ThirdPartyCookieBlockingMode, CompletionHandler<void()>&&); 176 void setShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID, WebCore::SameSiteStrictEnforcementEnabled, CompletionHandler<void()>&&); 176 177 void setFirstPartyWebsiteDataRemovalModeForTesting(PAL::SessionID, WebCore::FirstPartyWebsiteDataRemovalMode, CompletionHandler<void()>&&); 177 178 void setToSameSiteStrictCookiesForTesting(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r259242 r259275 1331 1331 preconnectTo(url); 1332 1332 1333 navigation.setIsLoadedWithNavigationShared(true); 1334 1333 1335 #if HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN) 1334 1336 if (!process->isLaunching() || !url.isLocalFile()) … … 5169 5171 auto userInitiatedActivity = process->userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); 5170 5172 #if ENABLE(RESOURCE_LOAD_STATISTICS) 5173 auto wasPotentiallyInitiatedByUser = navigation->isLoadedWithNavigationShared() || userInitiatedActivity; 5171 5174 if (!sessionID().isEphemeral()) 5172 logFrameNavigation(frame, URL(URL(), m_pageLoadState.url()), request, redirectResponse.url(), !!userInitiatedActivity);5175 logFrameNavigation(frame, URL(URL(), m_pageLoadState.url()), request, redirectResponse.url(), wasPotentiallyInitiatedByUser); 5173 5176 #endif 5174 5177 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r259049 r259275 601 601 #endif 602 602 WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies; 603 WebCore::SameSiteStrictEnforcementEnabled sameSiteStrictEnforcementEnabled = WebCore::SameSiteStrictEnforcementEnabled::No; 603 604 WebCore::RegistrableDomain manualPrevalentResource { }; 604 605 WEB_PROCESS_POOL_ADDITIONS_2 … … 614 615 #if ENABLE(RESOURCE_LOAD_STATISTICS) 615 616 thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode; 617 sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled; 616 618 #endif 617 619 firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode; … … 638 640 #if ENABLE(RESOURCE_LOAD_STATISTICS) 639 641 thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode; 642 sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled; 640 643 #endif 641 644 firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode; … … 676 679 #if ENABLE(RESOURCE_LOAD_STATISTICS) 677 680 thirdPartyCookieBlockingMode, 681 sameSiteStrictEnforcementEnabled, 678 682 #endif 679 683 firstPartyWebsiteDataRemovalMode, -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r259240 r259275 100 100 bool shouldLogCookieInformation = false; 101 101 bool enableResourceLoadStatisticsDebugMode = false; 102 auto sameSiteStrictEnforcementEnabled = WebCore::SameSiteStrictEnforcementEnabled::No; 102 103 auto firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies; 103 104 WebCore::RegistrableDomain resourceLoadStatisticsManualPrevalentResource { }; 104 105 #if ENABLE(RESOURCE_LOAD_STATISTICS) 105 106 enableResourceLoadStatisticsDebugMode = [defaults boolForKey:@"ITPDebugMode"]; 107 108 if ([defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::isSameSiteStrictEnforcementEnabledKey().createCFString().get()]]) 109 sameSiteStrictEnforcementEnabled = WebCore::SameSiteStrictEnforcementEnabled::Yes; 110 106 111 if ([defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::isFirstPartyWebsiteDataRemovalDisabledKey().createCFString().get()]]) 107 112 firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::None; … … 182 187 enableResourceLoadStatisticsDebugMode, 183 188 thirdPartyCookieBlockingMode(), 189 sameSiteStrictEnforcementEnabled, 184 190 firstPartyWebsiteDataRemovalMode, 185 191 WTFMove(resourceLoadStatisticsManualPrevalentResource), -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r258914 r259275 1848 1848 } 1849 1849 1850 void WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting(bool enabled, CompletionHandler<void()>&& completionHandler) 1851 { 1852 auto flag = enabled ? WebCore::SameSiteStrictEnforcementEnabled::Yes : WebCore::SameSiteStrictEnforcementEnabled::No; 1853 1854 auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler)); 1855 for (auto& processPool : processPools()) { 1856 if (auto* networkProcess = processPool->networkProcess()) 1857 networkProcess->setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator = callbackAggregator.copyRef()] { }); 1858 } 1859 } 1860 1850 1861 void WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting(bool enabled, CompletionHandler<void()>&& completionHandler) 1851 1862 { -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r259240 r259275 196 196 void setResourceLoadStatisticsShouldDowngradeReferrerForTesting(bool, CompletionHandler<void()>&&); 197 197 void setResourceLoadStatisticsShouldBlockThirdPartyCookiesForTesting(bool enabled, bool onlyOnSitesWithoutUserInteraction, CompletionHandler<void()>&&); 198 void setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting(bool enabled, CompletionHandler<void()>&&); 198 199 void setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting(bool enabled, CompletionHandler<void()>&&); 199 200 void setResourceLoadStatisticsToSameSiteStrictCookiesForTesting(const URL&, CompletionHandler<void()>&&);
Note:
See TracChangeset
for help on using the changeset viewer.