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 |