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

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

Issue 2040173002: [CacheStorage] Clean up CacheStorageCache lifetimes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify and caught one more reference Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/cache_storage/cache_storage.h ('k') | content/browser/cache_storage/cache_storage_cache.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c1e9820e0ee1333d7af887fb50ac99904e03f31e..a8246a86386dae4ea8622667ecd1cb85ceb2f57e 100644
--- a/content/browser/cache_storage/cache_storage.cc
+++ b/content/browser/cache_storage/cache_storage.cc
@@ -48,19 +48,13 @@ std::string HexedHash(const std::string& value) {
return valued_hexed_hash;
}
-void SizeRetrievedFromCache(const scoped_refptr<CacheStorageCache>& cache,
- const base::Closure& closure,
+void SizeRetrievedFromCache(const base::Closure& closure,
int64_t* accumulator,
int64_t size) {
*accumulator += size;
closure.Run();
}
-void SizeRetrievedFromAllCaches(std::unique_ptr<int64_t> accumulator,
- const CacheStorage::SizeCallback& callback) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, *accumulator));
-}
} // namespace
@@ -704,7 +698,7 @@ void CacheStorage::CreateCacheDidCreateCache(
const CacheAndErrorCallback& callback,
scoped_refptr<CacheStorageCache> cache) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
+ DCHECK(!callback_cache_.get());
UMA_HISTOGRAM_BOOLEAN("ServiceWorkerCache.CreateCacheStorageResult",
static_cast<bool>(cache));
@@ -718,23 +712,21 @@ void CacheStorage::CreateCacheDidCreateCache(
ordered_cache_names_.push_back(cache_name);
TemporarilyPreserveCache(cache);
+ callback_cache_ = std::move(cache);
- cache_loader_->WriteIndex(
- ordered_cache_names_,
- base::Bind(&CacheStorage::CreateCacheDidWriteIndex,
- weak_factory_.GetWeakPtr(), callback, std::move(cache)));
+ cache_loader_->WriteIndex(ordered_cache_names_,
+ base::Bind(&CacheStorage::CreateCacheDidWriteIndex,
+ weak_factory_.GetWeakPtr(), callback));
}
void CacheStorage::CreateCacheDidWriteIndex(
const CacheAndErrorCallback& callback,
- scoped_refptr<CacheStorageCache> cache,
bool success) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(cache.get());
+ DCHECK(callback_cache_.get());
// TODO(jkarlin): Handle !success.
-
- callback.Run(std::move(cache), CACHE_STORAGE_OK);
+ callback.Run(std::move(callback_cache_), CACHE_STORAGE_OK);
}
void CacheStorage::HasCacheImpl(const std::string& cache_name,
@@ -745,6 +737,7 @@ void CacheStorage::HasCacheImpl(const std::string& cache_name,
void CacheStorage::DeleteCacheImpl(const std::string& cache_name,
const BoolAndErrorCallback& callback) {
+ DCHECK(!callback_cache_.get());
scoped_refptr<CacheStorageCache> cache = GetLoadedCache(cache_name);
if (!cache.get()) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -763,14 +756,15 @@ void CacheStorage::DeleteCacheImpl(const std::string& cache_name,
cache->GetSizeThenClose(base::Bind(&CacheStorage::DeleteCacheDidClose,
weak_factory_.GetWeakPtr(), cache_name,
- callback, ordered_cache_names_, cache));
+ callback, ordered_cache_names_));
+ callback_cache_ = std::move(cache);
}
void CacheStorage::DeleteCacheDidClose(const std::string& cache_name,
const BoolAndErrorCallback& callback,
const StringVector& ordered_cache_names,
- scoped_refptr<CacheStorageCache> cache,
int64_t cache_size) {
+ callback_cache_ = nullptr;
cache_loader_->WriteIndex(
ordered_cache_names,
base::Bind(&CacheStorage::DeleteCacheDidWriteIndex,
@@ -809,6 +803,7 @@ void CacheStorage::MatchCacheImpl(
const std::string& cache_name,
std::unique_ptr<ServiceWorkerFetchRequest> request,
const CacheStorageCache::ResponseCallback& callback) {
+ DCHECK(!callback_cache_.get());
scoped_refptr<CacheStorageCache> cache = GetLoadedCache(cache_name);
if (!cache.get()) {
@@ -818,25 +813,25 @@ void CacheStorage::MatchCacheImpl(
return;
}
- // Pass the cache along to the callback to keep the cache open until match is
- // done.
cache->Match(std::move(request),
base::Bind(&CacheStorage::MatchCacheDidMatch,
- weak_factory_.GetWeakPtr(), cache, callback));
+ weak_factory_.GetWeakPtr(), callback));
+ callback_cache_ = std::move(cache);
}
void CacheStorage::MatchCacheDidMatch(
- scoped_refptr<CacheStorageCache> cache,
const CacheStorageCache::ResponseCallback& callback,
CacheStorageError error,
std::unique_ptr<ServiceWorkerResponse> response,
std::unique_ptr<storage::BlobDataHandle> handle) {
+ callback_cache_ = nullptr;
callback.Run(error, std::move(response), std::move(handle));
}
void CacheStorage::MatchAllCachesImpl(
std::unique_ptr<ServiceWorkerFetchRequest> request,
const CacheStorageCache::ResponseCallback& callback) {
+ DCHECK(callback_caches_.empty());
std::vector<CacheMatchResponse>* match_responses =
new std::vector<CacheMatchResponse>(ordered_cache_names_.size());
@@ -846,6 +841,7 @@ void CacheStorage::MatchAllCachesImpl(
weak_factory_.GetWeakPtr(),
base::Passed(base::WrapUnique(match_responses)), callback));
+ callback_caches_.resize(ordered_cache_names_.size());
for (size_t i = 0, max = ordered_cache_names_.size(); i < max; ++i) {
scoped_refptr<CacheStorageCache> cache =
GetLoadedCache(ordered_cache_names_[i]);
@@ -853,13 +849,13 @@ void CacheStorage::MatchAllCachesImpl(
cache->Match(base::WrapUnique(new ServiceWorkerFetchRequest(*request)),
base::Bind(&CacheStorage::MatchAllCachesDidMatch,
- weak_factory_.GetWeakPtr(), cache,
- &match_responses->at(i), barrier_closure));
+ weak_factory_.GetWeakPtr(), &match_responses->at(i),
+ barrier_closure));
+ callback_caches_.push_back(std::move(cache));
}
}
void CacheStorage::MatchAllCachesDidMatch(
- scoped_refptr<CacheStorageCache> cache,
CacheMatchResponse* out_match_response,
const base::Closure& barrier_closure,
CacheStorageError error,
@@ -875,6 +871,7 @@ void CacheStorage::MatchAllCachesDidMatch(
void CacheStorage::MatchAllCachesDidMatchAll(
std::unique_ptr<std::vector<CacheMatchResponse>> match_responses,
const CacheStorageCache::ResponseCallback& callback) {
+ callback_caches_.clear();
for (CacheMatchResponse& match_response : *match_responses) {
if (match_response.error == CACHE_STORAGE_ERROR_NOT_FOUND)
continue;
@@ -941,41 +938,57 @@ void CacheStorage::RemovePreservedCache(const CacheStorageCache* cache) {
void CacheStorage::GetSizeThenCloseAllCachesImpl(const SizeCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(initialized_);
+ DCHECK(callback_caches_.empty());
std::unique_ptr<int64_t> accumulator(new int64_t(0));
int64_t* accumulator_ptr = accumulator.get();
base::Closure barrier_closure = base::BarrierClosure(
ordered_cache_names_.size(),
- base::Bind(&SizeRetrievedFromAllCaches,
+ base::Bind(&CacheStorage::SizeRetrievedFromAllCaches,
+ weak_factory_.GetWeakPtr(),
base::Passed(std::move(accumulator)), callback));
+ callback_caches_.resize(ordered_cache_names_.size());
for (const std::string& cache_name : ordered_cache_names_) {
scoped_refptr<CacheStorageCache> cache = GetLoadedCache(cache_name);
- cache->GetSizeThenClose(base::Bind(&SizeRetrievedFromCache, cache,
- barrier_closure, accumulator_ptr));
+ cache->GetSizeThenClose(
+ base::Bind(&SizeRetrievedFromCache, barrier_closure, accumulator_ptr));
+ callback_caches_.push_back(std::move(cache));
}
}
void CacheStorage::SizeImpl(const SizeCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(initialized_);
+ DCHECK(callback_caches_.empty());
std::unique_ptr<int64_t> accumulator(new int64_t(0));
int64_t* accumulator_ptr = accumulator.get();
base::Closure barrier_closure = base::BarrierClosure(
ordered_cache_names_.size(),
- base::Bind(&SizeRetrievedFromAllCaches,
+ base::Bind(&CacheStorage::SizeRetrievedFromAllCaches,
+ weak_factory_.GetWeakPtr(),
base::Passed(std::move(accumulator)), callback));
+ callback_caches_.resize(ordered_cache_names_.size());
for (const std::string& cache_name : ordered_cache_names_) {
scoped_refptr<CacheStorageCache> cache = GetLoadedCache(cache_name);
- cache->Size(base::Bind(&SizeRetrievedFromCache, cache, barrier_closure,
- accumulator_ptr));
+ cache->Size(
+ base::Bind(&SizeRetrievedFromCache, barrier_closure, accumulator_ptr));
+ callback_caches_.push_back(std::move(cache));
}
}
+void CacheStorage::SizeRetrievedFromAllCaches(
+ std::unique_ptr<int64_t> accumulator,
+ const CacheStorage::SizeCallback& callback) {
+ callback_caches_.clear();
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(callback, *accumulator));
+}
+
void CacheStorage::PendingClosure(const base::Closure& callback) {
base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
« no previous file with comments | « content/browser/cache_storage/cache_storage.h ('k') | content/browser/cache_storage/cache_storage_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698