Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4fb2a0985cf0d6956111bf749feaf75118b7f6de
https://github.com/WebKit/WebKit/commit/4fb2a0985cf0d6956111bf749feaf75118b7f6de
Author: Sihui Liu <[email protected]>
Date: 2026-05-06 (Wed, 06 May 2026)
Changed paths:
M Source/WTF/wtf/Seconds.h
M Source/WebKit/NetworkProcess/NetworkSession.cpp
M Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h
M
Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.serialization.in
M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp
M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h
M Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h
M Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm
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 Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm
Log Message:
-----------
Introduce time-based website data eviction
https://bugs.webkit.org/show_bug.cgi?id=313865
rdar://175894273
Reviewed by Ben Nham.
For users with ITP disabled, website data can accumulate indefinitely. Add a
time-based eviction mechanism that deletes
data for origins not accessed within a configurable threshold (default 180
days). Eviction currently runs once at
session initialization, skipping active and persisted origins. The eviction
currently only include types written by
Storage APIs (so not including cookies and credentials). The feature is
currently gated on timeBasedEvictionEnabled,
which is off by default.
This patch includes a drive-by fix that we don't update modification timestamp
of origins with LocalStorage operations
since they don't go through normal quota check (LocalStorage has its own quota).
Tests: TimeBasedEviction.Basic
TimeBasedEviction.IndexedDBReadUpdatesTimestamp
TimeBasedEviction.LocalStorageReadUpdatesTimestamp
TimeBasedEviction.CacheStorageReadUpdatesTimestamp
TimeBasedEviction.FileSystemAPIReadUpdatesTimestamp
* Source/WTF/wtf/Seconds.h:
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::createNetworkStorageManager):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h:
*
Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.serialization.in:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::create):
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::writeOriginToFileIfNecessary):
(WebKit::NetworkStorageManager::donePrepareForEviction):
(WebKit::NetworkStorageManager::performEvictionForOrigin):
(WebKit::NetworkStorageManager::performQuotaBasedEviction):
(WebKit::NetworkStorageManager::performTimeBasedEviction):
(WebKit::NetworkStorageManager::originStorageManager):
(WebKit::NetworkStorageManager::updateLastModificationTimeForOrigin):
(WebKit::NetworkStorageManager::fileSystemGetDirectory):
(WebKit::NetworkStorageManager::connectToStorageArea):
(WebKit::NetworkStorageManager::setItem):
(WebKit::NetworkStorageManager::removeItem):
(WebKit::NetworkStorageManager::clear):
(WebKit::NetworkStorageManager::cacheStorageOpenCache):
(WebKit::NetworkStorageManager::performEviction): Deleted.
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration timeBasedEvictionEnabled]):
(-[_WKWebsiteDataStoreConfiguration setTimeBasedEvictionEnabled:]):
(-[_WKWebsiteDataStoreConfiguration timeBasedEvictionThreshold]):
(-[_WKWebsiteDataStoreConfiguration setTimeBasedEvictionThreshold:]):
(-[_WKWebsiteDataStoreConfiguration
lastModificationTimeUpdateIntervalOverride]):
(-[_WKWebsiteDataStoreConfiguration
setLastModificationTimeUpdateIntervalOverride:]):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::shouldPerformTimeBasedEviction const):
(WebKit::WebsiteDataStore::parameters):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::timeBasedEvictionEnabled const):
(WebKit::WebsiteDataStoreConfiguration::setTimeBasedEvictionEnabled):
(WebKit::WebsiteDataStoreConfiguration::timeBasedEvictionThreshold const):
(WebKit::WebsiteDataStoreConfiguration::setTimeBasedEvictionThreshold):
(WebKit::WebsiteDataStoreConfiguration::lastModificationTimeUpdateIntervalOverride
const):
(WebKit::WebsiteDataStoreConfiguration::setLastModificationTimeUpdateIntervalOverride):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm:
(TestWebKitAPI::(TimeBasedEviction, Basic)):
(TestWebKitAPI::(TimeBasedEviction, IndexedDBReadUpdatesTimestamp)):
(TestWebKitAPI::(TimeBasedEviction, LocalStorageReadUpdatesTimestamp)):
(TestWebKitAPI::(TimeBasedEviction, CacheStorageReadUpdatesTimestamp)):
(TestWebKitAPI::(TimeBasedEviction, FileSystemAPIReadUpdatesTimestamp)):
Canonical link: https://commits.webkit.org/312741@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications