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

Side by Side Diff: content/browser/cache_storage/cache_storage.cc

Issue 2100433003: [CacheStorage] Temporarily preserve recently opened caches from CacheStorageDispatcherHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplified Created 4 years, 5 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/cache_storage/cache_storage.h" 5 #include "content/browser/cache_storage/cache_storage.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 22 matching lines...) Expand all
33 #include "net/base/directory_lister.h" 33 #include "net/base/directory_lister.h"
34 #include "net/base/net_errors.h" 34 #include "net/base/net_errors.h"
35 #include "net/url_request/url_request_context_getter.h" 35 #include "net/url_request/url_request_context_getter.h"
36 #include "storage/browser/blob/blob_storage_context.h" 36 #include "storage/browser/blob/blob_storage_context.h"
37 #include "storage/browser/quota/quota_manager_proxy.h" 37 #include "storage/browser/quota/quota_manager_proxy.h"
38 38
39 namespace content { 39 namespace content {
40 40
41 namespace { 41 namespace {
42 42
43 const int kCachePreservationInSecs = 30;
44
45 std::string HexedHash(const std::string& value) { 43 std::string HexedHash(const std::string& value) {
46 std::string value_hash = base::SHA1HashString(value); 44 std::string value_hash = base::SHA1HashString(value);
47 std::string valued_hexed_hash = base::ToLowerASCII( 45 std::string valued_hexed_hash = base::ToLowerASCII(
48 base::HexEncode(value_hash.c_str(), value_hash.length())); 46 base::HexEncode(value_hash.c_str(), value_hash.length()));
49 return valued_hexed_hash; 47 return valued_hexed_hash;
50 } 48 }
51 49
52 void SizeRetrievedFromCache( 50 void SizeRetrievedFromCache(
53 std::unique_ptr<CacheStorageCacheHandle> cache_handle, 51 std::unique_ptr<CacheStorageCacheHandle> cache_handle,
54 const base::Closure& closure, 52 const base::Closure& closure,
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 CacheStorageCache* cache_ptr = cache.get(); 736 CacheStorageCache* cache_ptr = cache.get();
739 737
740 cache_map_.insert(std::make_pair(cache_name, std::move(cache))); 738 cache_map_.insert(std::make_pair(cache_name, std::move(cache)));
741 ordered_cache_names_.push_back(cache_name); 739 ordered_cache_names_.push_back(cache_name);
742 740
743 if (memory_only_) { 741 if (memory_only_) {
744 static_cast<MemoryLoader*>(cache_loader_.get()) 742 static_cast<MemoryLoader*>(cache_loader_.get())
745 ->StoreCacheHandle(cache_name, CreateCacheHandle(cache_ptr)); 743 ->StoreCacheHandle(cache_name, CreateCacheHandle(cache_ptr));
746 } 744 }
747 745
748 TemporarilyPreserveCache(CreateCacheHandle(cache_ptr));
749
750 cache_loader_->WriteIndex( 746 cache_loader_->WriteIndex(
751 ordered_cache_names_, 747 ordered_cache_names_,
752 base::Bind(&CacheStorage::CreateCacheDidWriteIndex, 748 base::Bind(&CacheStorage::CreateCacheDidWriteIndex,
753 weak_factory_.GetWeakPtr(), callback, 749 weak_factory_.GetWeakPtr(), callback,
754 base::Passed(CreateCacheHandle(cache_ptr)))); 750 base::Passed(CreateCacheHandle(cache_ptr))));
755 } 751 }
756 752
757 void CacheStorage::CreateCacheDidWriteIndex( 753 void CacheStorage::CreateCacheDidWriteIndex(
758 const CacheAndErrorCallback& callback, 754 const CacheAndErrorCallback& callback,
759 std::unique_ptr<CacheStorageCacheHandle> cache_handle, 755 std::unique_ptr<CacheStorageCacheHandle> cache_handle,
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 return std::unique_ptr<CacheStorageCacheHandle>(); 977 return std::unique_ptr<CacheStorageCacheHandle>();
982 978
983 CacheStorageCache* cache = map_iter->second.get(); 979 CacheStorageCache* cache = map_iter->second.get();
984 980
985 if (!cache) { 981 if (!cache) {
986 std::unique_ptr<CacheStorageCache> new_cache = 982 std::unique_ptr<CacheStorageCache> new_cache =
987 cache_loader_->CreateCache(cache_name); 983 cache_loader_->CreateCache(cache_name);
988 CacheStorageCache* cache_ptr = new_cache.get(); 984 CacheStorageCache* cache_ptr = new_cache.get();
989 map_iter->second = std::move(new_cache); 985 map_iter->second = std::move(new_cache);
990 986
991 TemporarilyPreserveCache(CreateCacheHandle(cache_ptr));
992 return CreateCacheHandle(cache_ptr); 987 return CreateCacheHandle(cache_ptr);
993 } 988 }
994 989
995 return CreateCacheHandle(cache); 990 return CreateCacheHandle(cache);
996 } 991 }
997 992
998 void CacheStorage::TemporarilyPreserveCache(
999 std::unique_ptr<CacheStorageCacheHandle> cache_handle) {
1000 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1001 DCHECK(!ContainsKey(preserved_caches_, cache_handle->value()));
1002
1003 CacheStorageCache* cache_ptr = cache_handle->value();
1004 SchedulePreservedCacheRemoval(base::Bind(&CacheStorage::RemovePreservedCache,
1005 weak_factory_.GetWeakPtr(),
1006 cache_ptr));
1007 preserved_caches_[cache_ptr] = std::move(cache_handle);
1008 }
1009
1010 void CacheStorage::SchedulePreservedCacheRemoval(
1011 const base::Closure& callback) {
1012 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1013
1014 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1015 FROM_HERE, callback,
1016 base::TimeDelta::FromSeconds(kCachePreservationInSecs));
1017 }
1018
1019 void CacheStorage::RemovePreservedCache(const CacheStorageCache* cache) {
1020 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1021 DCHECK(ContainsKey(preserved_caches_, cache));
1022
1023 preserved_caches_.erase(cache);
1024 }
1025
1026 void CacheStorage::GetSizeThenCloseAllCachesImpl(const SizeCallback& callback) { 993 void CacheStorage::GetSizeThenCloseAllCachesImpl(const SizeCallback& callback) {
1027 DCHECK_CURRENTLY_ON(BrowserThread::IO); 994 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1028 DCHECK(initialized_); 995 DCHECK(initialized_);
1029 996
1030 std::unique_ptr<int64_t> accumulator(new int64_t(0)); 997 std::unique_ptr<int64_t> accumulator(new int64_t(0));
1031 int64_t* accumulator_ptr = accumulator.get(); 998 int64_t* accumulator_ptr = accumulator.get();
1032 999
1033 base::Closure barrier_closure = base::BarrierClosure( 1000 base::Closure barrier_closure = base::BarrierClosure(
1034 ordered_cache_names_.size(), 1001 ordered_cache_names_.size(),
1035 base::Bind(&SizeRetrievedFromAllCaches, 1002 base::Bind(&SizeRetrievedFromAllCaches,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 void CacheStorage::PendingSizeCallback(const SizeCallback& callback, 1090 void CacheStorage::PendingSizeCallback(const SizeCallback& callback,
1124 int64_t size) { 1091 int64_t size) {
1125 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr(); 1092 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1126 1093
1127 callback.Run(size); 1094 callback.Run(size);
1128 if (cache_storage) 1095 if (cache_storage)
1129 scheduler_->CompleteOperationAndRunNext(); 1096 scheduler_->CompleteOperationAndRunNext();
1130 } 1097 }
1131 1098
1132 } // namespace content 1099 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/cache_storage/cache_storage.h ('k') | content/browser/cache_storage/cache_storage_dispatcher_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698