Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |