Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(923)

Side by Side Diff: webkit/quota/quota_manager.cc

Issue 8079004: Retrieve per host storage usage from QuotaManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/quota/quota_manager.h" 5 #include "webkit/quota/quota_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 #include <set> 9 #include <set>
10 10
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 int64 host_usage_; 283 int64 host_usage_;
284 QuotaStatusCode quota_status_; 284 QuotaStatusCode quota_status_;
285 CallbackList callbacks_; 285 CallbackList callbacks_;
286 CallbackList unlimited_callbacks_; 286 CallbackList unlimited_callbacks_;
287 int waiting_callbacks_; 287 int waiting_callbacks_;
288 ScopedCallbackFactory<UsageAndQuotaDispatcherTask> callback_factory_; 288 ScopedCallbackFactory<UsageAndQuotaDispatcherTask> callback_factory_;
289 289
290 DISALLOW_COPY_AND_ASSIGN(UsageAndQuotaDispatcherTask); 290 DISALLOW_COPY_AND_ASSIGN(UsageAndQuotaDispatcherTask);
291 }; 291 };
292 292
293 class QuotaManager::GetUsageTask : public QuotaTask {
294 private:
295 typedef QuotaManager::GetUsageTask self_type;
296
297 public:
298 GetUsageTask(
299 QuotaManager* manager,
300 GetUsageCallback* callback)
301 : QuotaTask(manager),
302 callback_(callback),
303 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
304 }
305 protected:
306 virtual void Run() OVERRIDE {
307 remaining_trackers_ = 2;
308 // This will populate cached hosts and usage info.
309 manager()->temporary_usage_tracker_->GetGlobalUsage(
310 callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage));
311 manager()->persistent_usage_tracker_->GetGlobalUsage(
312 callback_factory_.NewCallback(&GetUsageTask::DidGetGlobalUsage));
313 }
314
315 virtual void Completed() OVERRIDE {
316 }
317
318 virtual void Aborted() OVERRIDE {
319 callback_->Run(UsageInfoEntries());
320 DeleteSoon();
321 }
322
323 private:
324 void AddEntries(StorageType type, UsageTracker* tracker) {
325 std::map<std::string, int64> host_usage;
326 tracker->GetCachedHostsUsage(&host_usage);
327 for (std::map<std::string, int64>::const_iterator iter = host_usage.begin();
328 iter != host_usage.end();
329 ++iter) {
330 entries_.push_back(UsageInfo(iter->first, type, iter->second));
331 }
332 if (--remaining_trackers_ == 0) {
333 callback_->Run(entries_);
334 DeleteSoon();
335 }
336 }
337
338 void DidGetGlobalUsage(StorageType type, int64, int64) {
339 if (type == kStorageTypeTemporary) {
340 AddEntries(type, manager()->temporary_usage_tracker_.get());
341 } else if (type == kStorageTypePersistent) {
342 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.
343 }
344 }
345
346 QuotaManager* manager() const {
347 return static_cast<QuotaManager*>(observer());
348 }
349
350 scoped_ptr<GetUsageCallback> callback_;
351 UsageInfoEntries entries_;
352 base::ScopedCallbackFactory<GetUsageTask> callback_factory_;
353 int remaining_trackers_;
354
355 DISALLOW_COPY_AND_ASSIGN(GetUsageTask);
356 };
357
293 class QuotaManager::UsageAndQuotaDispatcherTaskForTemporary 358 class QuotaManager::UsageAndQuotaDispatcherTaskForTemporary
294 : public QuotaManager::UsageAndQuotaDispatcherTask { 359 : public QuotaManager::UsageAndQuotaDispatcherTask {
295 public: 360 public:
296 UsageAndQuotaDispatcherTaskForTemporary( 361 UsageAndQuotaDispatcherTaskForTemporary(
297 QuotaManager* manager, const std::string& host) 362 QuotaManager* manager, const std::string& host)
298 : UsageAndQuotaDispatcherTask(manager, host, kStorageTypeTemporary) {} 363 : UsageAndQuotaDispatcherTask(manager, host, kStorageTypeTemporary) {}
299 364
300 protected: 365 protected:
301 virtual void RunBody() OVERRIDE { 366 virtual void RunBody() OVERRIDE {
302 manager()->temporary_usage_tracker_->GetGlobalUsage( 367 manager()->temporary_usage_tracker_->GetGlobalUsage(
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 1022
958 QuotaManager::~QuotaManager() { 1023 QuotaManager::~QuotaManager() {
959 DCHECK(io_thread_->BelongsToCurrentThread()); 1024 DCHECK(io_thread_->BelongsToCurrentThread());
960 proxy_->manager_ = NULL; 1025 proxy_->manager_ = NULL;
961 std::for_each(clients_.begin(), clients_.end(), 1026 std::for_each(clients_.begin(), clients_.end(),
962 std::mem_fun(&QuotaClient::OnQuotaManagerDestroyed)); 1027 std::mem_fun(&QuotaClient::OnQuotaManagerDestroyed));
963 if (database_.get()) 1028 if (database_.get())
964 db_thread_->DeleteSoon(FROM_HERE, database_.release()); 1029 db_thread_->DeleteSoon(FROM_HERE, database_.release());
965 } 1030 }
966 1031
1032 void QuotaManager::GetUsage(GetUsageCallback* callback) {
1033 LazyInitialize();
1034 GetUsageTask* get_usage = new GetUsageTask(this, callback);
1035 get_usage->Start();
1036 }
1037
967 void QuotaManager::GetUsageAndQuota( 1038 void QuotaManager::GetUsageAndQuota(
968 const GURL& origin, StorageType type, 1039 const GURL& origin, StorageType type,
969 GetUsageAndQuotaCallback* callback_ptr) { 1040 GetUsageAndQuotaCallback* callback_ptr) {
970 scoped_ptr<GetUsageAndQuotaCallback> callback(callback_ptr); 1041 scoped_ptr<GetUsageAndQuotaCallback> callback(callback_ptr);
971 LazyInitialize(); 1042 LazyInitialize();
972 1043
973 if (type == kStorageTypeUnknown) { 1044 if (type == kStorageTypeUnknown) {
974 // Quota only supports temporary/persistent types. 1045 // Quota only supports temporary/persistent types.
975 callback->Run(kQuotaErrorNotSupported, 0, 0); 1046 callback->Run(kQuotaErrorNotSupported, 0, 0);
976 return; 1047 return;
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 1638
1568 QuotaManagerProxy::QuotaManagerProxy( 1639 QuotaManagerProxy::QuotaManagerProxy(
1569 QuotaManager* manager, base::MessageLoopProxy* io_thread) 1640 QuotaManager* manager, base::MessageLoopProxy* io_thread)
1570 : manager_(manager), io_thread_(io_thread) { 1641 : manager_(manager), io_thread_(io_thread) {
1571 } 1642 }
1572 1643
1573 QuotaManagerProxy::~QuotaManagerProxy() { 1644 QuotaManagerProxy::~QuotaManagerProxy() {
1574 } 1645 }
1575 1646
1576 } // namespace quota 1647 } // namespace quota
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698