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

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

Issue 2056983004: [CacheStorage] Give ownership of all CacheStorageCaches to CacheStorage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase 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
Index: content/browser/cache_storage/cache_storage_cache.cc
diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc
index 408dc5c48de6b48562be292e173881a49e6dd133..adc88d0c9d153a0d8d47ef76c57d85f0d51fc760 100644
--- a/content/browser/cache_storage/cache_storage_cache.cc
+++ b/content/browser/cache_storage/cache_storage_cache.cc
@@ -18,6 +18,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "content/browser/cache_storage/cache_storage.pb.h"
#include "content/browser/cache_storage/cache_storage_blob_to_disk_cache.h"
+#include "content/browser/cache_storage/cache_storage_cache_handle.h"
#include "content/browser/cache_storage/cache_storage_scheduler.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/referrer.h"
@@ -42,14 +43,15 @@ namespace {
class CacheStorageCacheDataHandle
: public storage::BlobDataBuilder::DataHandle {
public:
- CacheStorageCacheDataHandle(scoped_refptr<CacheStorageCache> cache,
- disk_cache::ScopedEntryPtr entry)
- : cache_(cache), entry_(std::move(entry)) {}
+ CacheStorageCacheDataHandle(
+ std::unique_ptr<CacheStorageCacheHandle> cache_handle,
+ disk_cache::ScopedEntryPtr entry)
+ : cache_handle_(std::move(cache_handle)), entry_(std::move(entry)) {}
private:
~CacheStorageCacheDataHandle() override {}
- scoped_refptr<CacheStorageCache> cache_;
+ std::unique_ptr<CacheStorageCacheHandle> cache_handle_;
disk_cache::ScopedEntryPtr entry_;
DISALLOW_COPY_AND_ASSIGN(CacheStorageCacheDataHandle);
@@ -280,32 +282,32 @@ struct CacheStorageCache::PutContext {
};
// static
-scoped_refptr<CacheStorageCache> CacheStorageCache::CreateMemoryCache(
+std::unique_ptr<CacheStorageCache> CacheStorageCache::CreateMemoryCache(
const GURL& origin,
const std::string& cache_name,
+ CacheStorage* cache_storage,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy,
base::WeakPtr<storage::BlobStorageContext> blob_context) {
- return make_scoped_refptr(new CacheStorageCache(
- origin, cache_name, base::FilePath(), std::move(request_context_getter),
- std::move(quota_manager_proxy), blob_context));
+ return std::unique_ptr<CacheStorageCache>(
+ new CacheStorageCache(origin, cache_name, base::FilePath(), cache_storage,
+ std::move(request_context_getter),
+ std::move(quota_manager_proxy), blob_context));
}
// static
-scoped_refptr<CacheStorageCache> CacheStorageCache::CreatePersistentCache(
+std::unique_ptr<CacheStorageCache> CacheStorageCache::CreatePersistentCache(
const GURL& origin,
const std::string& cache_name,
+ CacheStorage* cache_storage,
const base::FilePath& path,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy,
base::WeakPtr<storage::BlobStorageContext> blob_context) {
- return make_scoped_refptr(new CacheStorageCache(
- origin, cache_name, path, std::move(request_context_getter),
- std::move(quota_manager_proxy), blob_context));
-}
-
-CacheStorageCache::~CacheStorageCache() {
- quota_manager_proxy_->NotifyOriginNoLongerInUse(origin_);
+ return std::unique_ptr<CacheStorageCache>(
+ new CacheStorageCache(origin, cache_name, path, cache_storage,
+ std::move(request_context_getter),
+ std::move(quota_manager_proxy), blob_context));
}
base::WeakPtr<CacheStorageCache> CacheStorageCache::AsWeakPtr() {
@@ -427,12 +429,12 @@ void CacheStorageCache::BatchDidGetUsageAndQuota(
std::unique_ptr<ErrorCallback> callback_copy(new ErrorCallback(callback));
ErrorCallback* callback_ptr = callback_copy.get();
base::Closure barrier_closure = base::BarrierClosure(
- operations.size(),
- base::Bind(&CacheStorageCache::BatchDidAllOperations, this,
- base::Passed(std::move(callback_copy))));
+ operations.size(), base::Bind(&CacheStorageCache::BatchDidAllOperations,
+ weak_ptr_factory_.GetWeakPtr(),
+ base::Passed(std::move(callback_copy))));
ErrorCallback completion_callback =
- base::Bind(&CacheStorageCache::BatchDidOneOperation, this,
- barrier_closure, callback_ptr);
+ base::Bind(&CacheStorageCache::BatchDidOneOperation,
+ weak_ptr_factory_.GetWeakPtr(), barrier_closure, callback_ptr);
for (const auto& operation : operations) {
switch (operation.operation_type) {
@@ -535,16 +537,22 @@ void CacheStorageCache::GetSizeThenClose(const SizeCallback& callback) {
weak_ptr_factory_.GetWeakPtr(), pending_callback)));
}
+CacheStorageCache::~CacheStorageCache() {
+ quota_manager_proxy_->NotifyOriginNoLongerInUse(origin_);
+}
+
CacheStorageCache::CacheStorageCache(
const GURL& origin,
const std::string& cache_name,
const base::FilePath& path,
+ CacheStorage* cache_storage,
scoped_refptr<net::URLRequestContextGetter> request_context_getter,
scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy,
base::WeakPtr<storage::BlobStorageContext> blob_context)
: origin_(origin),
cache_name_(cache_name),
path_(path),
+ cache_storage_(cache_storage),
request_context_getter_(std::move(request_context_getter)),
quota_manager_proxy_(std::move(quota_manager_proxy)),
blob_storage_context_(blob_context),
@@ -1158,16 +1166,20 @@ void CacheStorageCache::UpdateCacheSize() {
if (backend_state_ != BACKEND_OPEN)
return;
- // Note that the callback holds a refptr to |this| since UpdateCacheSize is
- // often called after an operation completes and the cache might be freed.
- int rv = backend_->CalculateSizeOfAllEntries(
- base::Bind(&CacheStorageCache::UpdateCacheSizeGotSize, this));
+ // Note that the callback holds a cache handle to keep the cache alive during
+ // the operation since this UpdateCacheSize is often run after an operation
+ // completes and runs its callback.
+ int rv = backend_->CalculateSizeOfAllEntries(base::Bind(
+ &CacheStorageCache::UpdateCacheSizeGotSize,
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(CreateCacheHandle())));
if (rv != net::ERR_IO_PENDING)
- UpdateCacheSizeGotSize(rv);
+ UpdateCacheSizeGotSize(CreateCacheHandle(), rv);
}
-void CacheStorageCache::UpdateCacheSizeGotSize(int current_cache_size) {
+void CacheStorageCache::UpdateCacheSizeGotSize(
+ std::unique_ptr<CacheStorageCacheHandle> cache_handle,
+ int current_cache_size) {
int64_t old_cache_size = cache_size_;
cache_size_ = current_cache_size;
@@ -1556,9 +1568,14 @@ CacheStorageCache::PopulateResponseBody(disk_cache::ScopedEntryPtr entry,
disk_cache::Entry* temp_entry = entry.get();
blob_data.AppendDiskCacheEntryWithSideData(
- new CacheStorageCacheDataHandle(this, std::move(entry)), temp_entry,
- INDEX_RESPONSE_BODY, INDEX_SIDE_DATA);
+ new CacheStorageCacheDataHandle(CreateCacheHandle(), std::move(entry)),
+ temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA);
return blob_storage_context_->AddFinishedBlob(&blob_data);
}
+std::unique_ptr<CacheStorageCacheHandle>
+CacheStorageCache::CreateCacheHandle() {
+ return cache_storage_->CreateCacheHandle(this);
+}
+
} // namespace content
« no previous file with comments | « content/browser/cache_storage/cache_storage_cache.h ('k') | content/browser/cache_storage/cache_storage_cache_handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698