Index: chrome/browser/browsing_data/cache_counter.cc |
diff --git a/chrome/browser/browsing_data/cache_counter.cc b/chrome/browser/browsing_data/cache_counter.cc |
index d131033608d252204bd70105a4bd5a213afe24b4..a978c22182ac629f1c605d1a049cff22b757f4fd 100644 |
--- a/chrome/browser/browsing_data/cache_counter.cc |
+++ b/chrome/browser/browsing_data/cache_counter.cc |
@@ -9,6 +9,10 @@ |
#include "content/public/browser/browser_thread.h" |
#include "net/base/net_errors.h" |
+#if defined(OS_ANDROID) |
+#include "chrome/browser/android/offline_pages/offline_page_utils.h" |
+#endif // OS_ANDROID |
+ |
CacheCounter::CacheResult::CacheResult(const CacheCounter* source, |
int64_t cache_size, |
bool is_upper_limit) |
@@ -32,8 +36,11 @@ const char* CacheCounter::GetPrefName() const { |
} |
void CacheCounter::Count() { |
- // Cancel existing requests. |
+ // Cancel existing requests and reset states. |
weak_ptr_factory_.InvalidateWeakPtrs(); |
+ calculated_size_ = 0; |
+ is_upper_limit_ = false; |
+ pending_sources_ = 1; |
base::WeakPtr<browsing_data::ConditionalCacheCountingHelper> counter = |
browsing_data::ConditionalCacheCountingHelper::CreateForRange( |
content::BrowserContext::GetDefaultStoragePartition(profile_), |
@@ -41,14 +48,30 @@ void CacheCounter::Count() { |
->CountAndDestroySelfWhenFinished( |
base::Bind(&CacheCounter::OnCacheSizeCalculated, |
weak_ptr_factory_.GetWeakPtr())); |
+#if defined(OS_ANDROID) |
+ if (offline_pages::OfflinePageUtils::GetCachedOfflinePageSizeBetween( |
+ profile_, |
+ base::Bind(&CacheCounter::OnCacheSizeCalculated, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ false /* is_upper_limit */), |
+ GetPeriodStart(), base::Time::Max())) { |
+ pending_sources_++; |
+ } |
+#endif // OS_ANDROID |
} |
-void CacheCounter::OnCacheSizeCalculated(int64_t result_bytes, |
- bool is_upper_limit) { |
+void CacheCounter::OnCacheSizeCalculated(bool is_upper_limit, |
+ int64_t cache_bytes) { |
// A value less than 0 means a net error code. |
- if (result_bytes < 0) |
+ if (cache_bytes < 0) |
return; |
- auto result = |
- base::MakeUnique<CacheResult>(this, result_bytes, is_upper_limit); |
- ReportResult(std::move(result)); |
+ |
+ pending_sources_--; |
+ calculated_size_ += cache_bytes; |
+ is_upper_limit_ |= is_upper_limit; |
+ if (pending_sources_ == 0) { |
+ auto result = |
+ base::MakeUnique<CacheResult>(this, calculated_size_, is_upper_limit_); |
+ ReportResult(std::move(result)); |
+ } |
} |