Commit 48f538f4 authored by Bence Béky's avatar Bence Béky Committed by Commit Bot

Add Backend* to HttpCacheDataRemover.

Instead of creating a unique_ptr<Backend*>, passing around ownership,
and having to worry about lifetime, just use a class member, since the
callback lifetime is already tied to the lifetime of the
HttpCacheDataRemover instance.

This also enables changing callback type from Repeating to Once.

Bug: 807724
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: Iae84f3729ed077c0599f3133cf129624bc02c1d7
Reviewed-on: https://chromium-review.googlesource.com/1093056Reviewed-by: default avatarHelen Li <xunjieli@chromium.org>
Commit-Queue: Bence Béky <bnc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#566798}
parent af700395
...@@ -47,6 +47,7 @@ HttpCacheDataRemover::HttpCacheDataRemover( ...@@ -47,6 +47,7 @@ HttpCacheDataRemover::HttpCacheDataRemover(
: delete_begin_(delete_begin), : delete_begin_(delete_begin),
delete_end_(delete_end), delete_end_(delete_end),
done_callback_(std::move(done_callback)), done_callback_(std::move(done_callback)),
backend_(nullptr),
weak_factory_(this) { weak_factory_(this) {
DCHECK(!done_callback_.is_null()); DCHECK(!done_callback_.is_null());
...@@ -97,31 +98,22 @@ std::unique_ptr<HttpCacheDataRemover> HttpCacheDataRemover::CreateAndStart( ...@@ -97,31 +98,22 @@ std::unique_ptr<HttpCacheDataRemover> HttpCacheDataRemover::CreateAndStart(
->quic_stream_factory() ->quic_stream_factory()
->ClearCachedStatesInCryptoConfig(remover->url_matcher_); ->ClearCachedStatesInCryptoConfig(remover->url_matcher_);
auto backend = std::make_unique<disk_cache::Backend*>(); net::CompletionOnceCallback callback =
disk_cache::Backend** backend_ptr = backend.get(); base::BindOnce(&HttpCacheDataRemover::CacheRetrieved,
// IMPORTANT: we have to keep the callback on the stack so that |backend| is remover->weak_factory_.GetWeakPtr());
// not deleted before this method returns, as its deletion would make int rv = http_cache->GetBackend(&remover->backend_, std::move(callback));
// |backend_ptr| invalid and it's needed for the CacheRetrieved() call below.
net::CompletionCallback callback =
base::Bind(&HttpCacheDataRemover::CacheRetrieved,
remover->weak_factory_.GetWeakPtr(), base::Passed(&backend));
int rv = http_cache->GetBackend(backend_ptr, callback);
if (rv != net::ERR_IO_PENDING) { if (rv != net::ERR_IO_PENDING) {
remover->CacheRetrieved( remover->CacheRetrieved(rv);
std::make_unique<disk_cache::Backend*>(*backend_ptr), rv);
} }
return remover; return remover;
} }
void HttpCacheDataRemover::CacheRetrieved( void HttpCacheDataRemover::CacheRetrieved(int rv) {
std::unique_ptr<disk_cache::Backend*> backend,
int rv) {
DCHECK(done_callback_); DCHECK(done_callback_);
disk_cache::Backend* cache = *backend; // |backend_| can be null if it cannot be initialized.
if (rv != net::OK || !backend_) {
// |cache| can be null if it cannot be initialized. backend_ = nullptr;
if (!cache || rv != net::OK) {
base::SequencedTaskRunnerHandle::Get()->PostTask( base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&HttpCacheDataRemover::ClearHttpCacheDone, FROM_HERE, base::BindOnce(&HttpCacheDataRemover::ClearHttpCacheDone,
weak_factory_.GetWeakPtr(), rv)); weak_factory_.GetWeakPtr(), rv));
...@@ -130,17 +122,17 @@ void HttpCacheDataRemover::CacheRetrieved( ...@@ -130,17 +122,17 @@ void HttpCacheDataRemover::CacheRetrieved(
if (!url_matcher_.is_null()) { if (!url_matcher_.is_null()) {
deletion_helper_ = ConditionalCacheDeletionHelper::CreateAndStart( deletion_helper_ = ConditionalCacheDeletionHelper::CreateAndStart(
cache, url_matcher_, delete_begin_, delete_end_, backend_, url_matcher_, delete_begin_, delete_end_,
base::BindOnce(&HttpCacheDataRemover::ClearHttpCacheDone, base::BindOnce(&HttpCacheDataRemover::ClearHttpCacheDone,
weak_factory_.GetWeakPtr(), net::OK)); weak_factory_.GetWeakPtr(), net::OK));
return; return;
} }
if (delete_begin_.is_null() && delete_end_.is_max()) { if (delete_begin_.is_null() && delete_end_.is_max()) {
rv = cache->DoomAllEntries(base::Bind( rv = backend_->DoomAllEntries(base::Bind(
&HttpCacheDataRemover::ClearHttpCacheDone, weak_factory_.GetWeakPtr())); &HttpCacheDataRemover::ClearHttpCacheDone, weak_factory_.GetWeakPtr()));
} else { } else {
rv = cache->DoomEntriesBetween( rv = backend_->DoomEntriesBetween(
delete_begin_, delete_end_, delete_begin_, delete_end_,
base::Bind(&HttpCacheDataRemover::ClearHttpCacheDone, base::Bind(&HttpCacheDataRemover::ClearHttpCacheDone,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
......
...@@ -54,7 +54,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HttpCacheDataRemover { ...@@ -54,7 +54,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HttpCacheDataRemover {
base::Time delete_end, base::Time delete_end,
HttpCacheDataRemoverCallback done_callback); HttpCacheDataRemoverCallback done_callback);
void CacheRetrieved(std::unique_ptr<disk_cache::Backend*> backend, int rv); void CacheRetrieved(int rv);
void ClearHttpCacheDone(int rv); void ClearHttpCacheDone(int rv);
base::RepeatingCallback<bool(const GURL&)> url_matcher_; base::RepeatingCallback<bool(const GURL&)> url_matcher_;
...@@ -63,6 +63,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HttpCacheDataRemover { ...@@ -63,6 +63,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HttpCacheDataRemover {
HttpCacheDataRemoverCallback done_callback_; HttpCacheDataRemoverCallback done_callback_;
disk_cache::Backend* backend_;
std::unique_ptr<ConditionalCacheDeletionHelper> deletion_helper_; std::unique_ptr<ConditionalCacheDeletionHelper> deletion_helper_;
base::WeakPtrFactory<HttpCacheDataRemover> weak_factory_; base::WeakPtrFactory<HttpCacheDataRemover> weak_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment