Index: webkit/quota/quota_manager.cc |
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc |
index 60d7c323c682683a8c2b5fb6e90c7854c5c33eb2..4ade94f8ea1570a3cbc2067d97bc38add45666f7 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::GetUsageInfoTask : public QuotaTask { |
+ private: |
+ typedef QuotaManager::GetUsageInfoTask self_type; |
+ |
+ public: |
+ GetUsageInfoTask( |
+ 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(&GetUsageInfoTask::DidGetGlobalUsage)); |
+ manager()->GetUsageTracker(kStorageTypePersistent)->GetGlobalUsage( |
+ callback_factory_.NewCallback(&GetUsageInfoTask::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<GetUsageInfoTask> callback_factory_; |
+ int remaining_trackers_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GetUsageInfoTask); |
+}; |
+ |
class QuotaManager::UsageAndQuotaDispatcherTaskForTemporary |
: public QuotaManager::UsageAndQuotaDispatcherTask { |
public: |
@@ -964,6 +1025,12 @@ QuotaManager::~QuotaManager() { |
db_thread_->DeleteSoon(FROM_HERE, database_.release()); |
} |
+void QuotaManager::GetUsageInfo(GetUsageInfoCallback* callback) { |
+ LazyInitialize(); |
+ GetUsageInfoTask* get_usage_info = new GetUsageInfoTask(this, callback); |
+ get_usage_info->Start(); |
+} |
+ |
void QuotaManager::GetUsageAndQuota( |
const GURL& origin, StorageType type, |
GetUsageAndQuotaCallback* callback_ptr) { |