Compute quota after network process restart based on default quota and space used
authoryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Mar 2019 04:38:29 +0000 (04:38 +0000)
committeryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Mar 2019 04:38:29 +0000 (04:38 +0000)
commitacfee80d3a84cb4a348690c839653ce7dbda2820
tree02370b2bd42befff00c2c700636887620315b57a
parent5ad53795d4e1caa559986b4659844422d424a4ce
Compute quota after network process restart based on default quota and space used
https://bugs.webkit.org/show_bug.cgi?id=195804

Reviewed by Chris Dumez.

Source/WebCore:

At creation of quota manager, a default quota will be assigned.
This value is the same for all origins.
Some origins may have been granted a bigger quota by the user.
In that case, the space used might be greater for these origins.
Update at initialization time the quota according the space used as follows:
- If space used is below default quota, stick with default quota.
- If space used is above, set quota to space used rounded by one tenth of the default quota.
The rounding ensures that quota requests will not happen too quickly after a page is loaded.

Test: http/wpt/cache-storage/cache-quota-after-restart.any.html

* Modules/cache/CacheStorageConnection.h:
(WebCore::CacheStorageConnection::setQuotaBasedOnSpaceUsage):
* storage/StorageQuotaManager.cpp:
(WebCore::StorageQuotaManager::setQuotaBasedOnSpaceUsage):
(WebCore::StorageQuotaManager::addUser):
* storage/StorageQuotaManager.h:
* testing/Internals.cpp:
(WebCore::Internals::updateQuotaBasedOnSpaceUsage):
* testing/Internals.h:
* testing/Internals.idl:

Source/WebKit:

Make sure that Cache Storage quota user waits to declare as initialized to its manager
until all data is loaded so that it can report a valid space used from the start.

Add test API to reset the quota to its default value and compute it according current space use.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/cache/CacheStorageEngineCaches.cpp:
(WebKit::CacheStorage::Caches::create):
(WebKit::CacheStorage::Caches::Caches):
(WebKit::CacheStorage::Caches::whenInitialized):
* NetworkProcess/cache/CacheStorageEngineCaches.h:
* NetworkProcess/cache/CacheStorageEngineConnection.cpp:
(WebKit::CacheStorageEngineConnection::dereference):
* WebProcess/Cache/WebCacheStorageConnection.cpp:
(WebKit::WebCacheStorageConnection::setQuotaBasedOnSpaceUsage):
* WebProcess/Cache/WebCacheStorageConnection.h:

LayoutTests:

* http/wpt/cache-storage/cache-quota-after-restart.any-expected.txt: Added.
* http/wpt/cache-storage/cache-quota-after-restart.any.html: Added.
* http/wpt/cache-storage/cache-quota-after-restart.any.js: Added.
(promise_test.async):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243276 268f45cc-cd09-0410-ab3c-d52691b4dbfc
20 files changed:
LayoutTests/ChangeLog
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any-expected.txt [new file with mode: 0644]
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any.html [new file with mode: 0644]
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any.js [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/Modules/cache/CacheStorageConnection.h
Source/WebCore/storage/StorageQuotaManager.cpp
Source/WebCore/storage/StorageQuotaManager.h
Source/WebCore/testing/Internals.cpp
Source/WebCore/testing/Internals.h
Source/WebCore/testing/Internals.idl
Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/NetworkProcess.cpp
Source/WebKit/NetworkProcess/NetworkProcess.h
Source/WebKit/NetworkProcess/NetworkProcess.messages.in
Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp
Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h
Source/WebKit/NetworkProcess/cache/CacheStorageEngineConnection.cpp
Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp
Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h