Index: webkit/quota/quota_manager.cc |
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc |
index 60d7c323c682683a8c2b5fb6e90c7854c5c33eb2..f5892891b879a1a9d19c769872df203aeff28bc6 100644 |
--- a/webkit/quota/quota_manager.cc |
+++ b/webkit/quota/quota_manager.cc |
@@ -290,6 +290,67 @@ class QuotaManager::UsageAndQuotaDispatcherTask : public QuotaTask { |
DISALLOW_COPY_AND_ASSIGN(UsageAndQuotaDispatcherTask); |
}; |
+class QuotaManager::GetUsageTask : public QuotaTask { |
kinuko
2011/10/04 07:43:04
A subtle issue... GetUsageTask may sound too gener
mnaganov (inactive)
2011/10/04 16:38:42
OK, let's rename to GetUsageInfo. Initially I was
|
+ private: |
+ typedef QuotaManager::GetUsageTask self_type; |
+ |
+ public: |
+ GetUsageTask( |
+ QuotaManager* manager, |
+ GetUsageInfoCallback* callback) |
+ : QuotaTask(manager), |
+ callback_(callback), |
+ callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
+ } |
+ protected: |
+ virtual void Run() OVERRIDE { |
+ remaining_trackers_ = 2; |
+ // This will populate cached hosts and usage info. |
+ manager()->GetUsageTracker(kStorageTypeTemporary)->GetGlobalUsage( |
+ callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage)); |
+ manager()->GetUsageTracker(kStorageTypePersistent)->GetGlobalUsage( |
+ callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage)); |
+ } |
+ |
+ virtual void Completed() OVERRIDE { |
+ callback_->Run(entries_); |
+ DeleteSoon(); |
+ } |
+ |
+ virtual void Aborted() OVERRIDE { |
+ callback_->Run(UsageInfoEntries()); |
+ DeleteSoon(); |
+ } |
+ |
+ private: |
+ void AddEntries(StorageType type, UsageTracker* tracker) { |
+ std::map<std::string, int64> host_usage; |
+ tracker->GetCachedHostsUsage(&host_usage); |
+ for (std::map<std::string, int64>::const_iterator iter = host_usage.begin(); |
+ iter != host_usage.end(); |
+ ++iter) { |
+ entries_.push_back(UsageInfo(iter->first, type, iter->second)); |
+ } |
+ if (--remaining_trackers_ == 0) |
+ CallCompleted(); |
+ } |
+ |
+ void DidGetGlobalUsage(StorageType type, int64, int64) { |
+ AddEntries(type, manager()->GetUsageTracker(type)); |
+ } |
+ |
+ QuotaManager* manager() const { |
+ return static_cast<QuotaManager*>(observer()); |
+ } |
+ |
+ scoped_ptr<GetUsageInfoCallback> callback_; |
+ UsageInfoEntries entries_; |
+ base::ScopedCallbackFactory<GetUsageTask> callback_factory_; |
+ int remaining_trackers_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GetUsageTask); |
+}; |
+ |
class QuotaManager::UsageAndQuotaDispatcherTaskForTemporary |
: public QuotaManager::UsageAndQuotaDispatcherTask { |
public: |
@@ -964,6 +1025,12 @@ QuotaManager::~QuotaManager() { |
db_thread_->DeleteSoon(FROM_HERE, database_.release()); |
} |
+void QuotaManager::GetUsage(GetUsageInfoCallback* callback) { |
+ LazyInitialize(); |
+ GetUsageTask* get_usage = new GetUsageTask(this, callback); |
+ get_usage->Start(); |
+} |
+ |
void QuotaManager::GetUsageAndQuota( |
const GURL& origin, StorageType type, |
GetUsageAndQuotaCallback* callback_ptr) { |