| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |