#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 {
callback.Run(limited_usage + unlimited_usage);
}
-void NoopHostUsageCallback(int64 usage) {}
-
bool EraseOriginFromOriginSet(OriginSetByHost* origins_by_host,
const std::string& host,
const GURL& origin) {
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_);
}
}
}
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),
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(
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));