…viction
https://bugs.webkit.org/show_bug.cgi?id=314872
rdar://176399178
Reviewed by Sihui Liu.
There are a number of websites whose only use of persisted website data is a simple service worker
that processes push events for the purposes of Web Push, and who do no other mutations to website
data. These websites could have their service workers (and therefore push subscriptions) cleared by
the time-based eviction path added in 312741@main, which is not desirable.
This exempts all origins with an active push subscription from time-based website data
eviction. This is handled through a new GetAllPushSubscriptionOrigins IPC from NetworkProcess to
webpushd.
Tests: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WebPushDaemon.mm
* Source/WebCore/Modules/push-api/PushDatabase.cpp:
(WebCore::PushDatabase::getAllPushSubscriptionOrigins):
* Source/WebCore/Modules/push-api/PushDatabase.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::getAllPushSubscriptionOrigins):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
* Source/WebKit/NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::mockPushSubscriptionOriginsForTesting const):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h:
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.serialization.in:
* Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.cpp:
(WebKit::NetworkNotificationManager::getAllPushSubscriptionOrigins):
* Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::prepareForTimeBasedEviction):
(WebKit::NetworkStorageManager::donePrepareForTimeBasedEviction):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/Shared/WebPushDaemonConstants.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration mockPushSubscriptionOriginsForTesting]):
(-[_WKWebsiteDataStoreConfiguration setMockPushSubscriptionOriginsForTesting:]):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::parameters):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::mockPushSubscriptionOriginsForTesting const):
(WebKit::WebsiteDataStoreConfiguration::setMockPushSubscriptionOriginsForTesting):
* Source/WebKit/webpushd/PushClientConnection.h:
* Source/WebKit/webpushd/PushClientConnection.messages.in:
* Source/WebKit/webpushd/PushClientConnection.mm:
(WebPushD::PushClientConnection::getAllPushSubscriptionOrigins):
* Source/WebKit/webpushd/PushService.h:
* Source/WebKit/webpushd/PushService.mm:
(WebPushD::PushService::getAllPushSubscriptionOrigins):
* Source/WebKit/webpushd/WebPushDaemon.h:
* Source/WebKit/webpushd/WebPushDaemon.mm:
(WebPushD::WebPushDaemon::getAllPushSubscriptionOrigins):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebsiteDatastore.mm:
(TestWebKitAPI::(TimeBasedEviction, PushSubscriptionOriginNotEvicted)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WebPushDaemon.mm:
(TestWebKitAPI::TestArgumentCoder<WebCore::SecurityOriginData>::encode):
(TestWebKitAPI::TestArgumentCoder<WebCore::SecurityOriginData>::decode):
(TestWebKitAPI::(WebPushDTest, SubscribeTest)):
Canonical link: https://commits.webkit.org/313457@main
f6769c8
0ec8037
🧪 ios-wk2🧪 ios-wk2-wpt🧪 api-ios