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

Reply via email to