Changeset 243276 in webkit
- Timestamp:
- Mar 20, 2019, 9:38:29 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 17 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any-expected.txt (added)
-
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any.html (added)
-
LayoutTests/http/wpt/cache-storage/cache-quota-after-restart.any.js (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/cache/CacheStorageConnection.h (modified) (1 diff)
-
Source/WebCore/storage/StorageQuotaManager.cpp (modified) (2 diffs)
-
Source/WebCore/storage/StorageQuotaManager.h (modified) (1 diff)
-
Source/WebCore/testing/Internals.cpp (modified) (1 diff)
-
Source/WebCore/testing/Internals.h (modified) (1 diff)
-
Source/WebCore/testing/Internals.idl (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/cache/CacheStorageEngineConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r243270 r243276 1 2019-03-20 Youenn Fablet <youenn@apple.com> 2 3 Compute quota after network process restart based on default quota and space used 4 https://bugs.webkit.org/show_bug.cgi?id=195804 5 6 Reviewed by Chris Dumez. 7 8 * http/wpt/cache-storage/cache-quota-after-restart.any-expected.txt: Added. 9 * http/wpt/cache-storage/cache-quota-after-restart.any.html: Added. 10 * http/wpt/cache-storage/cache-quota-after-restart.any.js: Added. 11 (promise_test.async): 12 1 13 2019-03-20 Youenn Fablet <youenn@apple.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r243275 r243276 1 2019-03-20 Youenn Fablet <youenn@apple.com> 2 3 Compute quota after network process restart based on default quota and space used 4 https://bugs.webkit.org/show_bug.cgi?id=195804 5 6 Reviewed by Chris Dumez. 7 8 At creation of quota manager, a default quota will be assigned. 9 This value is the same for all origins. 10 Some origins may have been granted a bigger quota by the user. 11 In that case, the space used might be greater for these origins. 12 Update at initialization time the quota according the space used as follows: 13 - If space used is below default quota, stick with default quota. 14 - If space used is above, set quota to space used rounded by one tenth of the default quota. 15 The rounding ensures that quota requests will not happen too quickly after a page is loaded. 16 17 Test: http/wpt/cache-storage/cache-quota-after-restart.any.html 18 19 * Modules/cache/CacheStorageConnection.h: 20 (WebCore::CacheStorageConnection::setQuotaBasedOnSpaceUsage): 21 * storage/StorageQuotaManager.cpp: 22 (WebCore::StorageQuotaManager::setQuotaBasedOnSpaceUsage): 23 (WebCore::StorageQuotaManager::addUser): 24 * storage/StorageQuotaManager.h: 25 * testing/Internals.cpp: 26 (WebCore::Internals::updateQuotaBasedOnSpaceUsage): 27 * testing/Internals.h: 28 * testing/Internals.idl: 29 1 30 2019-03-20 Simon Fraser <simon.fraser@apple.com> 2 31 -
trunk/Source/WebCore/Modules/cache/CacheStorageConnection.h
r226481 r243276 56 56 virtual void clearMemoryRepresentation(const ClientOrigin&, DOMCacheEngine::CompletionCallback&& callback) { callback(DOMCacheEngine::Error::NotImplemented); } 57 57 virtual void engineRepresentation(WTF::Function<void(const String&)>&& callback) { callback(String { }); } 58 virtual void updateQuotaBasedOnSpaceUsage(const ClientOrigin&) { } 58 59 59 60 protected: -
trunk/Source/WebCore/storage/StorageQuotaManager.cpp
r243270 r243276 45 45 } 46 46 47 void StorageQuotaManager::updateQuotaBasedOnSpaceUsage() 48 { 49 if (!m_quota) 50 return; 51 52 auto defaultQuotaStep = m_quota / 10; 53 m_quota = std::max(m_quota, defaultQuotaStep * ((spaceUsage() / defaultQuotaStep) + 1)); 54 } 55 47 56 void StorageQuotaManager::addUser(StorageQuotaUser& user) 48 57 { … … 53 62 if (!weakThis) 54 63 return; 55 m_pendingInitializationUsers.remove(&user); 56 m_users.add(&user); 64 65 if (m_pendingInitializationUsers.remove(&user)) 66 m_users.add(&user); 67 68 if (!m_pendingInitializationUsers.isEmpty()) 69 return; 70 71 updateQuotaBasedOnSpaceUsage(); 57 72 processPendingRequests({ }); 58 73 }); -
trunk/Source/WebCore/storage/StorageQuotaManager.h
r243270 r243276 63 63 void resetQuota(uint64_t newQuota) { m_quota = newQuota; } 64 64 65 WEBCORE_EXPORT void updateQuotaBasedOnSpaceUsage(); 66 65 67 private: 66 68 uint64_t spaceUsage() const; -
trunk/Source/WebCore/testing/Internals.cpp
r243163 r243276 4758 4758 } 4759 4759 4760 void Internals::updateQuotaBasedOnSpaceUsage() 4761 { 4762 auto* document = contextDocument(); 4763 if (!document) 4764 return; 4765 4766 if (!m_cacheStorageConnection) { 4767 if (auto* page = contextDocument()->page()) 4768 m_cacheStorageConnection = page->cacheStorageProvider().createCacheStorageConnection(page->sessionID()); 4769 if (!m_cacheStorageConnection) 4770 return; 4771 } 4772 4773 m_cacheStorageConnection->updateQuotaBasedOnSpaceUsage(ClientOrigin { document->topOrigin().data(), document->securityOrigin().data() }); 4774 } 4775 4760 4776 void Internals::setConsoleMessageListener(RefPtr<StringCallback>&& listener) 4761 4777 { -
trunk/Source/WebCore/testing/Internals.h
r242920 r243276 707 707 uint64_t responseSizeWithPadding(FetchResponse&) const; 708 708 709 void updateQuotaBasedOnSpaceUsage(); 710 709 711 void setConsoleMessageListener(RefPtr<StringCallback>&&); 710 712 -
trunk/Source/WebCore/testing/Internals.idl
r242920 r243276 690 690 unsigned long long responseSizeWithPadding(FetchResponse response); 691 691 692 void updateQuotaBasedOnSpaceUsage(); 693 692 694 void setConsoleMessageListener(StringCallback callback); 693 695 -
trunk/Source/WebKit/ChangeLog
r243275 r243276 1 2019-03-20 Youenn Fablet <youenn@apple.com> 2 3 Compute quota after network process restart based on default quota and space used 4 https://bugs.webkit.org/show_bug.cgi?id=195804 5 6 Reviewed by Chris Dumez. 7 8 Make sure that Cache Storage quota user waits to declare as initialized to its manager 9 until all data is loaded so that it can report a valid space used from the start. 10 11 Add test API to reset the quota to its default value and compute it according current space use. 12 13 * NetworkProcess/NetworkProcess.cpp: 14 (WebKit::NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting): 15 * NetworkProcess/NetworkProcess.h: 16 * NetworkProcess/NetworkProcess.messages.in: 17 * NetworkProcess/cache/CacheStorageEngineCaches.cpp: 18 (WebKit::CacheStorage::Caches::create): 19 (WebKit::CacheStorage::Caches::Caches): 20 (WebKit::CacheStorage::Caches::whenInitialized): 21 * NetworkProcess/cache/CacheStorageEngineCaches.h: 22 * NetworkProcess/cache/CacheStorageEngineConnection.cpp: 23 (WebKit::CacheStorageEngineConnection::dereference): 24 * WebProcess/Cache/WebCacheStorageConnection.cpp: 25 (WebKit::WebCacheStorageConnection::setQuotaBasedOnSpaceUsage): 26 * WebProcess/Cache/WebCacheStorageConnection.h: 27 1 28 2019-03-20 Simon Fraser <simon.fraser@apple.com> 2 29 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r243247 r243276 2229 2229 #endif // ENABLE(INDEXED_DATABASE) 2230 2230 2231 void NetworkProcess::updateQuotaBasedOnSpaceUsageForTesting(PAL::SessionID sessionID, const ClientOrigin& origin) 2232 { 2233 auto& manager = storageQuotaManager(sessionID, origin); 2234 manager.resetQuota(m_storageQuotaManagers.find(sessionID)->value.defaultQuota); 2235 manager.updateQuotaBasedOnSpaceUsage(); 2236 } 2237 2231 2238 #if ENABLE(SANDBOX_EXTENSIONS) 2232 2239 void NetworkProcess::getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, CompletionHandler<void(SandboxExtension::HandleArray&&)>&& completionHandler) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r243247 r243276 282 282 void setIDBPerOriginQuota(uint64_t); 283 283 #endif 284 void updateQuotaBasedOnSpaceUsageForTesting(PAL::SessionID, const WebCore::ClientOrigin&); 284 285 285 286 #if ENABLE(SANDBOX_EXTENSIONS) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r243181 r243276 165 165 SetIDBPerOriginQuota(uint64_t quota) 166 166 #endif 167 UpdateQuotaBasedOnSpaceUsageForTesting(PAL::SessionID sessionID, struct WebCore::ClientOrigin origin) 167 168 168 169 StoreAdClickAttribution(PAL::SessionID sessionID, WebCore::AdClickAttribution adClickAttribution) -
trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp
r243110 r243276 52 52 } 53 53 54 Ref<Caches> Caches::create(Engine& engine, WebCore::ClientOrigin&& origin, String&& rootPath, WebCore::StorageQuotaManager& quotaManager) 55 { 56 auto caches = adoptRef(*new Caches { engine, WTFMove(origin), WTFMove(rootPath), quotaManager }); 57 quotaManager.addUser(caches.get()); 58 return caches; 59 } 60 54 61 Caches::Caches(Engine& engine, WebCore::ClientOrigin&& origin, String&& rootPath, WebCore::StorageQuotaManager& quotaManager) 55 62 : m_engine(&engine) … … 58 65 , m_quotaManager(makeWeakPtr(quotaManager)) 59 66 { 60 quotaManager.addUser(*this);61 67 } 62 68 … … 67 73 if (m_quotaManager) 68 74 m_quotaManager->removeUser(*this); 75 } 76 77 void Caches::whenInitialized(CompletionHandler<void()>&& callback) 78 { 79 initialize([callback = WTFMove(callback)](auto&& error) mutable { 80 if (error) 81 RELEASE_LOG_ERROR(CacheStorage, "Caches::initialize failed, reported space used will be zero"); 82 callback(); 83 }); 69 84 } 70 85 -
trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h
r242599 r243276 45 45 class Caches final : public RefCounted<Caches>, private WebCore::StorageQuotaUser { 46 46 public: 47 static Ref<Caches> create(Engine& engine, WebCore::ClientOrigin&& origin, String&& rootPath, WebCore::StorageQuotaManager& quotaManager) { return adoptRef(*new Caches { engine, WTFMove(origin), WTFMove(rootPath), quotaManager }); }47 static Ref<Caches> create(Engine&, WebCore::ClientOrigin&&, String&& rootPath, WebCore::StorageQuotaManager&); 48 48 ~Caches(); 49 49 … … 92 92 void writeCachesToDisk(WebCore::DOMCacheEngine::CompletionCallback&&); 93 93 94 void whenInitialized(CompletionHandler<void()>&&) final; 95 94 96 void storeOrigin(WebCore::DOMCacheEngine::CompletionCallback&&); 95 97 static Optional<WebCore::ClientOrigin> readOrigin(const NetworkCache::Data&); -
trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineConnection.cpp
r243110 r243276 139 139 140 140 auto referenceResult = references.find(cacheIdentifier); 141 ASSERT(referenceResult != references.end());142 141 if (referenceResult == references.end()) 143 142 return; -
trunk/Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp
r239427 r243276 31 31 #include "NetworkConnectionToWebProcessMessages.h" 32 32 #include "NetworkProcessConnection.h" 33 #include "NetworkProcessMessages.h" 33 34 #include "WebCacheStorageProvider.h" 34 35 #include "WebCoreArgumentCoders.h" … … 152 153 } 153 154 155 void WebCacheStorageConnection::updateQuotaBasedOnSpaceUsage(const ClientOrigin& origin) 156 { 157 connection().send(Messages::NetworkProcess::UpdateQuotaBasedOnSpaceUsageForTesting(m_sessionID, origin), 0); 154 158 } 159 160 } -
trunk/Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h
r239427 r243276 66 66 void clearMemoryRepresentation(const WebCore::ClientOrigin&, WebCore::DOMCacheEngine::CompletionCallback&&) final; 67 67 void engineRepresentation(WTF::Function<void(const String&)>&&) final; 68 void updateQuotaBasedOnSpaceUsage(const WebCore::ClientOrigin&) final; 68 69 69 70 void openCompleted(uint64_t requestIdentifier, const WebCore::DOMCacheEngine::CacheIdentifierOrError&);
Note:
See TracChangeset
for help on using the changeset viewer.