| Index: webkit/quota/usage_tracker.cc
|
| ===================================================================
|
| --- webkit/quota/usage_tracker.cc (revision 96595)
|
| +++ webkit/quota/usage_tracker.cc (working copy)
|
| @@ -12,7 +12,6 @@
|
| #include "base/message_loop_proxy.h"
|
| #include "base/stl_util.h"
|
| #include "net/base/net_util.h"
|
| -#include "webkit/quota/special_storage_policy.h"
|
|
|
| namespace quota {
|
|
|
| @@ -334,18 +333,23 @@
|
| global_usage_(0),
|
| global_unlimited_usage_(0),
|
| global_usage_retrieved_(false),
|
| + global_unlimited_usage_is_valid_(true),
|
| global_usage_task_(NULL),
|
| special_storage_policy_(special_storage_policy) {
|
| DCHECK(tracker_);
|
| DCHECK(client_);
|
| + if (special_storage_policy_)
|
| + special_storage_policy_->AddObserver(this);
|
| }
|
|
|
| ClientUsageTracker::~ClientUsageTracker() {
|
| + if (special_storage_policy_)
|
| + special_storage_policy_->RemoveObserver(this);
|
| }
|
|
|
| void ClientUsageTracker::GetGlobalUsage(GlobalUsageCallback* callback) {
|
| if (global_usage_retrieved_) {
|
| - callback->Run(type_, global_usage_, global_unlimited_usage_);
|
| + callback->Run(type_, global_usage_, GetCachedGlobalUnlimitedUsage());
|
| delete callback;
|
| return;
|
| }
|
| @@ -377,7 +381,7 @@
|
| if (cached_hosts_.find(host) != cached_hosts_.end()) {
|
| cached_usage_[host][origin] += delta;
|
| global_usage_ += delta;
|
| - if (IsStorageUnlimited(origin))
|
| + if (global_unlimited_usage_is_valid_ && IsStorageUnlimited(origin))
|
| global_unlimited_usage_ += delta;
|
| DCHECK_GE(cached_usage_[host][origin], 0);
|
| DCHECK_GE(global_usage_, 0);
|
| @@ -411,7 +415,7 @@
|
| int64 delta = usage - old_usage;
|
| if (delta) {
|
| global_usage_ += delta;
|
| - if (IsStorageUnlimited(origin))
|
| + if (global_unlimited_usage_is_valid_ && IsStorageUnlimited(origin))
|
| global_unlimited_usage_ += delta;
|
| }
|
| DCHECK_GE(iter->second, 0);
|
| @@ -429,7 +433,8 @@
|
| global_usage_retrieved_ = true;
|
|
|
| DCHECK(global_usage_callback_.HasCallbacks());
|
| - global_usage_callback_.Run(type_, global_usage_, global_unlimited_usage_);
|
| + global_usage_callback_.Run(type_, global_usage_,
|
| + GetCachedGlobalUnlimitedUsage());
|
|
|
| for (HostUsageCallbackMap::iterator iter = host_usage_callbacks_.Begin();
|
| iter != host_usage_callbacks_.End(); ++iter) {
|
| @@ -458,6 +463,28 @@
|
| return usage;
|
| }
|
|
|
| +int64 ClientUsageTracker::GetCachedGlobalUnlimitedUsage() {
|
| + if (!global_unlimited_usage_is_valid_) {
|
| + global_unlimited_usage_ = 0;
|
| + for (HostUsageMap::const_iterator host_iter = cached_usage_.begin();
|
| + host_iter != cached_usage_.end(); host_iter++) {
|
| + const UsageMap& origin_map = host_iter->second;
|
| + for (UsageMap::const_iterator origin_iter = origin_map.begin();
|
| + origin_iter != origin_map.end(); origin_iter++) {
|
| + if (IsStorageUnlimited(origin_iter->first))
|
| + global_unlimited_usage_ += origin_iter->second;
|
| + }
|
| + }
|
| + global_unlimited_usage_is_valid_ = true;
|
| + }
|
| + return global_unlimited_usage_;
|
| +}
|
| +
|
| +void ClientUsageTracker::OnSpecialStoragePolicyChanged() {
|
| + DCHECK(CalledOnValidThread());
|
| + global_unlimited_usage_is_valid_ = false;
|
| +}
|
| +
|
| void ClientUsageTracker::NoopHostUsageCallback(
|
| const std::string& host, StorageType type, int64 usage) {
|
| }
|
|
|