Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: content/browser/cache_storage/cache_storage.cc

Issue 1470073003: [CacheStorage] Keep caches alive for 30 seconds after opening (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from PS3 Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/cache_storage/cache_storage.cc
diff --git a/content/browser/cache_storage/cache_storage.cc b/content/browser/cache_storage/cache_storage.cc
index 5765a890e7470a1e37487295829a5ac6fc990b1d..ffdeed14790b480406a32b477e7f8a4b4bf11761 100644
--- a/content/browser/cache_storage/cache_storage.cc
+++ b/content/browser/cache_storage/cache_storage.cc
@@ -35,6 +35,8 @@ namespace content {
namespace {
+const int kCachePreservationInSecs = 30;
+
std::string HexedHash(const std::string& value) {
std::string value_hash = base::SHA1HashString(value);
std::string valued_hexed_hash = base::ToLowerASCII(
@@ -671,6 +673,8 @@ void CacheStorage::CreateCacheDidCreateCache(
cache_map_.insert(std::make_pair(cache_name, cache->AsWeakPtr()));
ordered_cache_names_.push_back(cache_name);
+ TemporarilyPreserveCache(cache);
+
cache_loader_->WriteIndex(
ordered_cache_names_,
base::Bind(&CacheStorage::CreateCacheDidWriteIndex,
@@ -853,12 +857,41 @@ scoped_refptr<CacheStorageCache> CacheStorage::GetLoadedCache(
scoped_refptr<CacheStorageCache> new_cache =
cache_loader_->CreateCache(cache_name);
map_iter->second = new_cache->AsWeakPtr();
+
+ TemporarilyPreserveCache(new_cache);
return new_cache;
}
return make_scoped_refptr(cache.get());
}
+void CacheStorage::TemporarilyPreserveCache(
+ const scoped_refptr<CacheStorageCache>& cache) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(!ContainsKey(preserved_caches_, cache.get()));
+
+ preserved_caches_[cache.get()] = cache;
+ SchedulePreservedCacheRemoval(base::Bind(&CacheStorage::RemovePreservedCache,
+ weak_factory_.GetWeakPtr(),
+ base::Unretained(cache.get())));
+}
+
+void CacheStorage::SchedulePreservedCacheRemoval(
+ const base::Closure& callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE, callback,
+ base::TimeDelta::FromSeconds(kCachePreservationInSecs));
+}
+
+void CacheStorage::RemovePreservedCache(const CacheStorageCache* cache) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(ContainsKey(preserved_caches_, cache));
+
+ preserved_caches_.erase(cache);
+}
+
void CacheStorage::CloseAllCachesImpl(const base::Closure& callback) {
int live_cache_count = 0;
for (const auto& key_value : cache_map_) {
« no previous file with comments | « content/browser/cache_storage/cache_storage.h ('k') | content/browser/cache_storage/cache_storage_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698