Index: webkit/browser/quota/usage_tracker.cc |
diff --git a/webkit/browser/quota/usage_tracker.cc b/webkit/browser/quota/usage_tracker.cc |
index 57b5e0d24eacd11c9eb7670928deedfe6d5f6f2e..2e4659f0e483fc016653e0f9e37d93bcf79970c2 100644 |
--- a/webkit/browser/quota/usage_tracker.cc |
+++ b/webkit/browser/quota/usage_tracker.cc |
@@ -14,6 +14,8 @@ |
#include "base/message_loop/message_loop_proxy.h" |
#include "base/stl_util.h" |
#include "net/base/net_util.h" |
+#include "webkit/browser/quota/storage_monitor.h" |
+#include "webkit/browser/quota/storage_observer.h" |
namespace quota { |
@@ -36,8 +38,6 @@ void DidGetHostUsage(const UsageCallback& callback, |
callback.Run(limited_usage + unlimited_usage); |
} |
-void NoopHostUsageCallback(int64 usage) {} |
- |
bool EraseOriginFromOriginSet(OriginSetByHost* origins_by_host, |
const std::string& host, |
const GURL& origin) { |
@@ -72,15 +72,18 @@ void DidGetGlobalUsageForLimitedGlobalUsage(const UsageCallback& callback, |
UsageTracker::UsageTracker(const QuotaClientList& clients, |
StorageType type, |
- SpecialStoragePolicy* special_storage_policy) |
+ SpecialStoragePolicy* special_storage_policy, |
+ StorageMonitor* storage_monitor) |
: type_(type), |
+ storage_monitor_(storage_monitor), |
weak_factory_(this) { |
for (QuotaClientList::const_iterator iter = clients.begin(); |
iter != clients.end(); |
++iter) { |
if ((*iter)->DoesSupport(type)) { |
client_tracker_map_[(*iter)->id()] = |
- new ClientUsageTracker(this, *iter, type, special_storage_policy); |
+ new ClientUsageTracker(this, *iter, type, special_storage_policy, |
+ storage_monitor_); |
} |
} |
} |
@@ -271,10 +274,12 @@ void UsageTracker::AccumulateClientHostUsage(AccumulateInfo* info, |
ClientUsageTracker::ClientUsageTracker( |
UsageTracker* tracker, QuotaClient* client, StorageType type, |
- SpecialStoragePolicy* special_storage_policy) |
+ SpecialStoragePolicy* special_storage_policy, |
+ StorageMonitor* storage_monitor) |
: tracker_(tracker), |
client_(client), |
type_(type), |
+ storage_monitor_(storage_monitor), |
global_limited_usage_(0), |
global_unlimited_usage_(0), |
global_usage_retrieved_(false), |
@@ -364,11 +369,19 @@ void ClientUsageTracker::UpdateUsageCache( |
global_limited_usage_ += delta; |
DCHECK_GE(cached_usage_by_host_[host][origin], 0); |
DCHECK_GE(global_limited_usage_, 0); |
+ |
+ // Notify the usage monitor that usage has changed. The storage monitor may |
+ // be NULL during tests. |
+ if (storage_monitor_) { |
+ StorageObserver::Filter filter(type_, origin); |
+ storage_monitor_->NotifyUsageChange(filter, delta); |
+ } |
return; |
} |
// We don't know about this host yet, so populate our cache for it. |
- GetHostUsage(host, base::Bind(&NoopHostUsageCallback)); |
+ GetHostUsage(host, base::Bind(&ClientUsageTracker::DidGetHostUsageAfterUpdate, |
+ AsWeakPtr(), origin)); |
} |
void ClientUsageTracker::GetCachedHostsUsage( |
@@ -549,6 +562,15 @@ void ClientUsageTracker::AccumulateOriginUsage(AccumulateInfo* info, |
host, MakeTuple(info->limited_usage, info->unlimited_usage)); |
} |
+void ClientUsageTracker::DidGetHostUsageAfterUpdate( |
+ const GURL& origin, int64 usage) { |
+ if (!storage_monitor_) |
+ return; |
+ |
+ StorageObserver::Filter filter(type_, origin); |
+ storage_monitor_->NotifyUsageChange(filter, 0); |
+} |
+ |
void ClientUsageTracker::AddCachedOrigin( |
const GURL& origin, int64 new_usage) { |
DCHECK(IsUsageCacheEnabledForOrigin(origin)); |