Index: components/browsing_data/content/conditional_cache_counting_helper.h |
diff --git a/components/browsing_data/content/conditional_cache_counting_helper.h b/components/browsing_data/content/conditional_cache_counting_helper.h |
index d40fba6e20a5ef57fd7ae6f3aedb053ec80fe6b1..b5c6a8eb8f4334ba8a91f10890c6845a11f1e8a0 100644 |
--- a/components/browsing_data/content/conditional_cache_counting_helper.h |
+++ b/components/browsing_data/content/conditional_cache_counting_helper.h |
@@ -34,12 +34,17 @@ class ConditionalCacheCountingHelper { |
// Count the cache entries according to the specified time range. Destroys |
// this instance of ConditionalCacheCountingHelper when finished. |
+ // The returned WeakPtr can be used to cancel the operation if necessary. |
// Must be called on the UI thread! |
// |
// The |completion_callback| will be invoked when the operation completes. |
base::WeakPtr<ConditionalCacheCountingHelper> CountAndDestroySelfWhenFinished( |
const CacheCountCallback& result_callback); |
+ // Cancel the currently counting process. The task on the IO thread will stop |
+ // and the callback will return net::ERR_ABORTED. |
+ void CancelCounting(); |
+ |
bool IsFinished(); |
private: |
@@ -66,6 +71,9 @@ class ConditionalCacheCountingHelper { |
void CountHttpCacheOnIOThread(); |
void DoCountCache(int rv); |
+ int CountEntries(disk_cache::Backend* backend); |
+ void IterateOverEntries(int error); |
+ |
// Stores the cache size computation result before it can be returned |
// via a callback. This is either the sum of size of the the two cache |
// backends, or an error code if the calculation failed. |
@@ -75,6 +83,9 @@ class ConditionalCacheCountingHelper { |
const base::Time begin_time_; |
const base::Time end_time_; |
+ // This flag is used to tell the IO thread to stop counting if the user |
+ // called CancelCounting(). |
+ volatile bool is_cancelled_; |
bool is_finished_; |
const scoped_refptr<net::URLRequestContextGetter> main_context_getter_; |
@@ -84,6 +95,7 @@ class ConditionalCacheCountingHelper { |
disk_cache::Backend* cache_; |
std::unique_ptr<disk_cache::Backend::Iterator> iterator_; |
+ disk_cache::Entry* current_entry_; |
base::WeakPtrFactory<ConditionalCacheCountingHelper> weak_ptr_factory_; |