Chromium Code Reviews| Index: webkit/quota/quota_manager.cc |
| diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc |
| index 60d7c323c682683a8c2b5fb6e90c7854c5c33eb2..e6c4de89646a2a3e5a7a98db79f87bd975415706 100644 |
| --- a/webkit/quota/quota_manager.cc |
| +++ b/webkit/quota/quota_manager.cc |
| @@ -290,6 +290,71 @@ class QuotaManager::UsageAndQuotaDispatcherTask : public QuotaTask { |
| DISALLOW_COPY_AND_ASSIGN(UsageAndQuotaDispatcherTask); |
| }; |
| +class QuotaManager::GetUsageTask : public QuotaTask { |
| + private: |
| + typedef QuotaManager::GetUsageTask self_type; |
| + |
| + public: |
| + GetUsageTask( |
| + QuotaManager* manager, |
| + GetUsageCallback* 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()->temporary_usage_tracker_->GetGlobalUsage( |
| + callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage)); |
| + manager()->persistent_usage_tracker_->GetGlobalUsage( |
| + callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage)); |
| + } |
| + |
| + virtual void Completed() OVERRIDE { |
| + } |
| + |
| + 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) { |
| + callback_->Run(entries_); |
| + DeleteSoon(); |
| + } |
| + } |
| + |
| + void DidGetGlobalUsage(StorageType type, int64, int64) { |
| + if (type == kStorageTypeTemporary) { |
| + AddEntries(type, manager()->temporary_usage_tracker_.get()); |
| + } else if (type == kStorageTypePersistent) { |
| + AddEntries(type, manager()->persistent_usage_tracker_.get()); |
|
kinuko
2011/10/03 07:49:20
You can use manager()->GetUsageTracker(type) here
mnaganov (inactive)
2011/10/04 03:00:40
Neat! Thanks.
|
| + } |
| + } |
| + |
| + QuotaManager* manager() const { |
| + return static_cast<QuotaManager*>(observer()); |
| + } |
| + |
| + scoped_ptr<GetUsageCallback> 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 +1029,12 @@ QuotaManager::~QuotaManager() { |
| db_thread_->DeleteSoon(FROM_HERE, database_.release()); |
| } |
| +void QuotaManager::GetUsage(GetUsageCallback* callback) { |
| + LazyInitialize(); |
| + GetUsageTask* get_usage = new GetUsageTask(this, callback); |
| + get_usage->Start(); |
| +} |
| + |
| void QuotaManager::GetUsageAndQuota( |
| const GURL& origin, StorageType type, |
| GetUsageAndQuotaCallback* callback_ptr) { |