Skip to content

Conversation

szewai
Copy link
Contributor

@szewai szewai commented Mar 15, 2023

7bc1fa5

Allow quota to be set based on disk space
https://bugs.webkit.org/show_bug.cgi?id=253978
rdar://106769648

Reviewed by Geoffrey Garen.

Make it possible to set origin quota based on disk space. This is achieved by letting client specify a originQuotaRatio,
and using it to compute the quota: originQuota = totalDiskSpace * originQuotaRatio. If originQuotaRatio it is unset, we
will use perOriginStorageQuota for quota. By default, originQuotaRatio is unset.

Also, when quota is set using originQuotaRatio, quota increase will not be allowed (client will not receive delegate
callback about quota is exceeded).

To mitigate fingerprinting issue, StorageManager.estimate() might report a quota that is lower than actual qutoa when
usage is small.

Test: WKWebsiteDataStoreConfiguration.OriginQuotaRatio

* Source/WTF/wtf/FileSystem.cpp:
(WTF::FileSystemImpl::volumeCapacity):
* Source/WTF/wtf/FileSystem.h:
* Source/WTF/wtf/playstation/FileSystemPlayStation.cpp:
(WTF::FileSystemImpl::volumeCapacity):
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::createNetworkStorageManager):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::create):
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::originStorageManager):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::estimate):
* Source/WebKit/NetworkProcess/storage/QuotaManager.cpp:
(WebKit::QuotaManager::handleRequests):
(WebKit::QuotaManager::reportedQuota const):
* Source/WebKit/NetworkProcess/storage/QuotaManager.h:
(WebKit::QuotaManager::create):
(WebKit::QuotaManager::quota const): Deleted.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration originQuotaRatio]):
(-[_WKWebsiteDataStoreConfiguration setOriginQuotaRatio:]):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::parameters):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::originQuotaRatio):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::originQuotaRatio const):
(WebKit::WebsiteDataStoreConfiguration::setOriginQuotaRatio):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
(-[WKWebsiteDataStoreMessageHandler userContentController:didReceiveScriptMessage:]):
(TestWebKitAPI::TEST):

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

691b3a9

Misc iOS, tvOS & watchOS macOS Linux Windows
❌ 🧪 style ✅ 🛠 ios ✅ 🛠 mac ✅ 🛠 wpe ✅ 🛠 wincairo
✅ 🧪 bindings ✅ 🛠 ios-sim ✅ 🛠 mac-AS-debug ✅ 🧪 wpe-wk2
✅ 🧪 webkitperl ✅ 🧪 ios-wk2 ✅ 🧪 api-mac ✅ 🛠 gtk
✅ 🧪 api-ios ✅ 🧪 mac-wk1 ✅ 🧪 gtk-wk2
✅ 🛠 🧪 jsc ✅ 🛠 tv ✅ 🧪 mac-wk2 ⏳ 🧪 api-gtk
✅ 🛠 🧪 jsc-arm64 ✅ 🛠 tv-sim ✅ 🧪 mac-AS-debug-wk2 ✅ 🛠 jsc-armv7
✅ 🛠 watch ✅ 🧪 mac-wk2-stress ✅ 🧪 jsc-armv7-tests
✅ 🛠 🧪 merge ✅ 🛠 watch-sim ✅ 🛠 jsc-mips
✅ 🧪 jsc-mips-tests

@szewai szewai self-assigned this Mar 15, 2023
@szewai szewai added the Website Storage Bugs related to storage APIs, including IndexedDB and localStorage label Mar 15, 2023
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Mar 15, 2023
@szewai szewai requested a review from youennf March 17, 2023 06:19
@szewai szewai marked this pull request as ready for review March 17, 2023 06:26
@szewai szewai requested a review from cdumez as a code owner March 17, 2023 06:26
@szewai szewai requested a review from geoffreygaren March 17, 2023 06:26
@szewai szewai removed the merging-blocked Applied to prevent a change from being merged label Mar 17, 2023
@szewai szewai force-pushed the eng/Allow-quota-to-be-set-based-on-disk-space branch from edb36dc to 81de335 Compare March 17, 2023 18:59
Copy link
Contributor

@geoffreygaren geoffreygaren left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me

@szewai szewai force-pushed the eng/Allow-quota-to-be-set-based-on-disk-space branch from 81de335 to 691b3a9 Compare March 18, 2023 04:20
@szewai szewai added the merge-queue Applied to send a pull request to merge-queue label Mar 19, 2023
https://bugs.webkit.org/show_bug.cgi?id=253978
rdar://106769648

Reviewed by Geoffrey Garen.

Make it possible to set origin quota based on disk space. This is achieved by letting client specify a originQuotaRatio,
and using it to compute the quota: originQuota = totalDiskSpace * originQuotaRatio. If originQuotaRatio it is unset, we
will use perOriginStorageQuota for quota. By default, originQuotaRatio is unset.

Also, when quota is set using originQuotaRatio, quota increase will not be allowed (client will not receive delegate
callback about quota is exceeded).

To mitigate fingerprinting issue, StorageManager.estimate() might report a quota that is lower than actual qutoa when
usage is small.

Test: WKWebsiteDataStoreConfiguration.OriginQuotaRatio

* Source/WTF/wtf/FileSystem.cpp:
(WTF::FileSystemImpl::volumeCapacity):
* Source/WTF/wtf/FileSystem.h:
* Source/WTF/wtf/playstation/FileSystemPlayStation.cpp:
(WTF::FileSystemImpl::volumeCapacity):
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::createNetworkStorageManager):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::create):
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::originStorageManager):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::estimate):
* Source/WebKit/NetworkProcess/storage/QuotaManager.cpp:
(WebKit::QuotaManager::handleRequests):
(WebKit::QuotaManager::reportedQuota const):
* Source/WebKit/NetworkProcess/storage/QuotaManager.h:
(WebKit::QuotaManager::create):
(WebKit::QuotaManager::quota const): Deleted.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration originQuotaRatio]):
(-[_WKWebsiteDataStoreConfiguration setOriginQuotaRatio:]):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::parameters):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::originQuotaRatio):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::originQuotaRatio const):
(WebKit::WebsiteDataStoreConfiguration::setOriginQuotaRatio):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
(-[WKWebsiteDataStoreMessageHandler userContentController:didReceiveScriptMessage:]):
(TestWebKitAPI::TEST):

Canonical link: https://commits.webkit.org/261840@main
@webkit-commit-queue webkit-commit-queue force-pushed the eng/Allow-quota-to-be-set-based-on-disk-space branch from 691b3a9 to 7bc1fa5 Compare March 19, 2023 17:45
@webkit-commit-queue webkit-commit-queue merged commit 7bc1fa5 into WebKit:main Mar 19, 2023
@webkit-commit-queue
Copy link
Collaborator

Committed 261840@main (7bc1fa5): https://commits.webkit.org/261840@main

Reviewed commits have been landed. Closing PR #11569 and removing active labels.

@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Mar 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Website Storage Bugs related to storage APIs, including IndexedDB and localStorage
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants