Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0c6fc3c778e57a5b66b2045881310b2a63068b0d
      
https://github.com/WebKit/WebKit/commit/0c6fc3c778e57a5b66b2045881310b2a63068b0d
  Author: Ronan Turner <[email protected]>
  Date:   2025-12-05 (Fri, 05 Dec 2025)

  Changed paths:
    M Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.h
    M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
    M Source/WebKit/Platform/Logging.h
    M Source/WebKit/Shared/WebsiteData/WebsiteData.cpp
    M Source/WebKit/Shared/WebsiteData/WebsiteDataType.h
    M Source/WebKit/Shared/WebsiteData/WebsiteDataType.serialization.in
    M Source/WebKit/Sources.txt
    M Source/WebKit/UIProcess/API/APINavigation.cpp
    M Source/WebKit/UIProcess/API/APINavigation.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
    M Source/WebKit/UIProcess/EnhancedSecurityTracking.cpp
    M Source/WebKit/UIProcess/EnhancedSecurityTracking.h
    M Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
    M Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
    M Source/WebKit/UIProcess/WebFramePolicyListenerProxy.cpp
    M Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h
    M Source/WebKit/UIProcess/WebFrameProxy.cpp
    M Source/WebKit/UIProcess/WebFrameProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
    A Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesHolder.cpp
    A Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesHolder.h
    A Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesPersistence.cpp
    A Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesPersistence.h
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/EnhancedSecurityPolicies.mm

  Log Message:
  -----------
  Implement heuristics to drop out of Enhanced Security
https://bugs.webkit.org/show_bug.cgi?id=303390
rdar://165692583

Reviewed by Matthew Finkel.

This change expands upon prior Enhanced Security adoption for HTTP which
now applies heuristics to determine when to drop out of Enhanced Security,
in particular, when we consider a site to have had meaningful prior
usage outside of Enhanced Security.

One requirement of this is to add a new WebsiteDataType for tracking when
sites have been seen outside of Enhanced Security, or only when Enhanced
Security was enabled. We persist this to a new db specifically for
Enhanced Security.

Additional tests have been implemented that check that these heuristics
apply successfully in conditions that we expect.

Test: Tools/TestWebKitAPI/Tests/WebKitCocoa/EnhancedSecurityPolicies.mm

* Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::monitoredDataTypes):
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::hasLocalStorageOrCookies):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/Platform/Logging.h:
* Source/WebKit/Shared/WebsiteData/WebsiteData.cpp:
(WebKit::WebsiteData::ownerProcess):
* Source/WebKit/Shared/WebsiteData/WebsiteDataType.h:
(WebKit::toString):
* Source/WebKit/Shared/WebsiteData/WebsiteDataType.serialization.in:
* Source/WebKit/Sources.txt:
* Source/WebKit/UIProcess/API/APINavigation.cpp:
(API::Navigation::setCurrentRequest):
(API::Navigation::setHasStorageForCurrentSite):
* Source/WebKit/UIProcess/API/APINavigation.h:
(API::Navigation::hasStorageForCurrentSite const):
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
(dataTypesToString):
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
(WebKit::toWebsiteDataType):
(WebKit::toWKWebsiteDataTypes):
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(+[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]):
* Source/WebKit/UIProcess/EnhancedSecurityTracking.cpp:
(WebKit::enabledSitesMap):
(WebKit::didSitePreviouslyUseEnhancedSecurity):
(WebKit::trackSiteSeenOutsideEnhancedSecurity):
(WebKit::updateEnhancedSecurityDomains):
(WebKit::EnhancedSecurityTracking::initializeWithWebsiteDataStore):
(WebKit::EnhancedSecurityTracking::enableFor):
(WebKit::EnhancedSecurityTracking::trackChangingSiteNavigation):
(WebKit::EnhancedSecurityTracking::trackSameSiteNavigation):
(WebKit::EnhancedSecurityTracking::trackNavigation):
* Source/WebKit/UIProcess/EnhancedSecurityTracking.h:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::hasLocalStorageOrCookies):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/WebFramePolicyListenerProxy.cpp:
(WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
(WebKit::WebFramePolicyListenerProxy::didReceiveAppBoundDomainResult):
(WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults):
(WebKit::WebFramePolicyListenerProxy::didReceiveInitialLinkDecorationFilteringData):
(WebKit::WebFramePolicyListenerProxy::didReceiveSiteHasStorageResults):
(WebKit::WebFramePolicyListenerProxy::use):
* Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:
(WebKit::WebFramePolicyListenerProxy::create):
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::setUpPolicyListenerProxy):
* Source/WebKit/UIProcess/WebFrameProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedNavigationActionPolicyDecision):
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::decidePolicyForNewWindowAction):
(WebKit::WebPageProxy::decidePolicyForResponseShared):
(WebKit::WebPageProxy::beginSiteHasStorageCheck):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::defaultEnhancedSecurityDirectory):
(WebKit::WebsiteDataStore::enhancedSecuritySitesHolder):
(WebKit::WebsiteDataStore::trackEnhancedSecurityForDomain):
(WebKit::WebsiteDataStore::fetchEnhancedSecurityOnlyDomains):
(WebKit::WebsiteDataStore::fetchAllEnhancedSecuritySites):
(WebKit::WebsiteDataStore::removeEnhancedSecuritySites):
(WebKit::WebsiteDataStore::removeAllEnhancedSecuritySites):
* Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesHolder.cpp: Added.
(WebKit::EnhancedSecuritySitesHolder::sharedWorkQueueSingleton):
(WebKit::EnhancedSecuritySitesHolder::create):
(WebKit::EnhancedSecuritySitesHolder::EnhancedSecuritySitesHolder):
(WebKit::EnhancedSecuritySitesHolder::~EnhancedSecuritySitesHolder):
(WebKit::EnhancedSecuritySitesHolder::fetchEnhancedSecurityOnlyDomains):
(WebKit::EnhancedSecuritySitesHolder::fetchAllEnhancedSecuritySites):
(WebKit::EnhancedSecuritySitesHolder::trackEnhancedSecurityForDomain):
(WebKit::EnhancedSecuritySitesHolder::deleteSites):
(WebKit::EnhancedSecuritySitesHolder::deleteAllSites):
* Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesHolder.h: Copied 
from Source/WebKit/UIProcess/EnhancedSecurityTracking.h.
* Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesPersistence.cpp: 
Added.
(WebKit::EnhancedSecuritySitesPersistence::EnhancedSecuritySitesPersistence):
(WebKit::EnhancedSecuritySitesPersistence::~EnhancedSecuritySitesPersistence):
(WebKit::EnhancedSecuritySitesPersistence::reportSQLError):
(WebKit::databasePath):
(WebKit::EnhancedSecuritySitesPersistence::checkedDatabase const):
(WebKit::EnhancedSecuritySitesPersistence::cachedStatement):
(WebKit::EnhancedSecuritySitesPersistence::openDatabase):
(WebKit::EnhancedSecuritySitesPersistence::deleteSite):
(WebKit::EnhancedSecuritySitesPersistence::deleteSites):
(WebKit::EnhancedSecuritySitesPersistence::deleteAllSites):
(WebKit::EnhancedSecuritySitesPersistence::enhancedSecurityOnlyDomains):
(WebKit::EnhancedSecuritySitesPersistence::allEnhancedSecuritySites):
(WebKit::EnhancedSecuritySitesPersistence::trackEnhancedSecurityForDomain):
(WebKit::EnhancedSecuritySitesPersistence::closeDatabase):
* Source/WebKit/UIProcess/WebsiteData/EnhancedSecuritySitesPersistence.h: Added.
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::resolveDirectories):
(WebKit::WebsiteDataStore::fetchDataAndApply):
(WebKit::WebsiteDataStore::removeData):
(WebKit::WebsiteDataStore::hasLocalStorageOrCookies const):
(WebKit::WebsiteDataStore::removeEnhancedSecuritySites):
(WebKit::WebsiteDataStore::removeAllEnhancedSecuritySites):
(WebKit::WebsiteDataStore::fetchEnhancedSecurityOnlyDomains):
(WebKit::WebsiteDataStore::fetchAllEnhancedSecuritySites):
(WebKit::WebsiteDataStore::trackEnhancedSecurityForDomain):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::initializePaths):
(WebKit::WebsiteDataStoreConfiguration::Directories::isolatedCopy const):
(WebKit::WebsiteDataStoreConfiguration::Directories::isolatedCopy):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::enhancedSecurityDirectory const):
(WebKit::WebsiteDataStoreConfiguration::setEnhancedSecurityDirectory):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/EnhancedSecurityPolicies.mm:
(runHttpThenNavigateToHttpsSiteWithCookies):
(runHttpThenNavigateToHttpsSiteWithLocalStorage):
(runHttpThenHttpsThenNavigateToHttpsSiteWithCookies):
(runHttpThenNavigateToHttpsSiteWithCookiesThenHttps):
(runHttpThenNavigateToHttpsSetCookiesThenNavigateToHttpsAgain):
(runHttpRedirectsHttpsWithExplicitNavigationToMeaningfulSite):
(runWindowOpenThenNavigateToMeaningfulSite):
(runHttpThenNavigateToHttpsSiteWithCookiesViaAPI):
(enhancedSecuritySitesPath):
(emptyEnhancedSecuritySitesPath):
(createEnhancedSecuritySitesTable):
(addEnhancedSecuritySite):
(setUpEnhancedSecuritySeenValues):
(cleanUpEnhancedSecuritySites):
(runHttpThenNavigateToHttpsSiteWithCookiesViaAndExpectations):
(runHttpThenNavigateToHttpsSiteWithCookiesViaAPIAndNotSeenOutsideEnhancedSecurity):
(runHttpThenNavigateToHttpsSiteWithCookiesViaAPIAndSeenOutsideEnhancedSecurity):

Canonical link: https://commits.webkit.org/303988@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to