| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/appcache/appcache_storage_impl.h" | 5 #include "content/browser/appcache/appcache_storage_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 NOTREACHED() << "A existing group without a cache is unexpected"; | 66 NOTREACHED() << "A existing group without a cache is unexpected"; |
| 67 success = database->DeleteGroup(group_id); | 67 success = database->DeleteGroup(group_id); |
| 68 } | 68 } |
| 69 return success; | 69 return success; |
| 70 } | 70 } |
| 71 | 71 |
| 72 // Destroys |database|. If there is appcache data to be deleted | 72 // Destroys |database|. If there is appcache data to be deleted |
| 73 // (|force_keep_session_state| is false), deletes session-only appcache data. | 73 // (|force_keep_session_state| is false), deletes session-only appcache data. |
| 74 void ClearSessionOnlyOrigins( | 74 void ClearSessionOnlyOrigins( |
| 75 AppCacheDatabase* database, | 75 AppCacheDatabase* database, |
| 76 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy, | 76 scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy, |
| 77 bool force_keep_session_state) { | 77 bool force_keep_session_state) { |
| 78 scoped_ptr<AppCacheDatabase> database_to_delete(database); | 78 scoped_ptr<AppCacheDatabase> database_to_delete(database); |
| 79 | 79 |
| 80 // If saving session state, only delete the database. | 80 // If saving session state, only delete the database. |
| 81 if (force_keep_session_state) | 81 if (force_keep_session_state) |
| 82 return; | 82 return; |
| 83 | 83 |
| 84 bool has_session_only_appcaches = | 84 bool has_session_only_appcaches = |
| 85 special_storage_policy && | 85 special_storage_policy && |
| 86 special_storage_policy->HasSessionOnlyOrigins(); | 86 special_storage_policy->HasSessionOnlyOrigins(); |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 } | 584 } |
| 585 | 585 |
| 586 // StoreGroupAndCacheTask ------- | 586 // StoreGroupAndCacheTask ------- |
| 587 | 587 |
| 588 class AppCacheStorageImpl::StoreGroupAndCacheTask : public StoreOrLoadTask { | 588 class AppCacheStorageImpl::StoreGroupAndCacheTask : public StoreOrLoadTask { |
| 589 public: | 589 public: |
| 590 StoreGroupAndCacheTask(AppCacheStorageImpl* storage, AppCacheGroup* group, | 590 StoreGroupAndCacheTask(AppCacheStorageImpl* storage, AppCacheGroup* group, |
| 591 AppCache* newest_cache); | 591 AppCache* newest_cache); |
| 592 | 592 |
| 593 void GetQuotaThenSchedule(); | 593 void GetQuotaThenSchedule(); |
| 594 void OnQuotaCallback( | 594 void OnQuotaCallback(storage::QuotaStatusCode status, |
| 595 quota::QuotaStatusCode status, int64 usage, int64 quota); | 595 int64 usage, |
| 596 int64 quota); |
| 596 | 597 |
| 597 // DatabaseTask: | 598 // DatabaseTask: |
| 598 virtual void Run() OVERRIDE; | 599 virtual void Run() OVERRIDE; |
| 599 virtual void RunCompleted() OVERRIDE; | 600 virtual void RunCompleted() OVERRIDE; |
| 600 virtual void CancelCompletion() OVERRIDE; | 601 virtual void CancelCompletion() OVERRIDE; |
| 601 | 602 |
| 602 protected: | 603 protected: |
| 603 virtual ~StoreGroupAndCacheTask() {} | 604 virtual ~StoreGroupAndCacheTask() {} |
| 604 | 605 |
| 605 private: | 606 private: |
| (...skipping 16 matching lines...) Expand all Loading... |
| 622 group_record_.origin = group_record_.manifest_url.GetOrigin(); | 623 group_record_.origin = group_record_.manifest_url.GetOrigin(); |
| 623 newest_cache->ToDatabaseRecords( | 624 newest_cache->ToDatabaseRecords( |
| 624 group, | 625 group, |
| 625 &cache_record_, &entry_records_, | 626 &cache_record_, &entry_records_, |
| 626 &intercept_namespace_records_, | 627 &intercept_namespace_records_, |
| 627 &fallback_namespace_records_, | 628 &fallback_namespace_records_, |
| 628 &online_whitelist_records_); | 629 &online_whitelist_records_); |
| 629 } | 630 } |
| 630 | 631 |
| 631 void AppCacheStorageImpl::StoreGroupAndCacheTask::GetQuotaThenSchedule() { | 632 void AppCacheStorageImpl::StoreGroupAndCacheTask::GetQuotaThenSchedule() { |
| 632 quota::QuotaManager* quota_manager = NULL; | 633 storage::QuotaManager* quota_manager = NULL; |
| 633 if (storage_->service()->quota_manager_proxy()) { | 634 if (storage_->service()->quota_manager_proxy()) { |
| 634 quota_manager = | 635 quota_manager = |
| 635 storage_->service()->quota_manager_proxy()->quota_manager(); | 636 storage_->service()->quota_manager_proxy()->quota_manager(); |
| 636 } | 637 } |
| 637 | 638 |
| 638 if (!quota_manager) { | 639 if (!quota_manager) { |
| 639 if (storage_->service()->special_storage_policy() && | 640 if (storage_->service()->special_storage_policy() && |
| 640 storage_->service()->special_storage_policy()->IsStorageUnlimited( | 641 storage_->service()->special_storage_policy()->IsStorageUnlimited( |
| 641 group_record_.origin)) | 642 group_record_.origin)) |
| 642 space_available_ = kint64max; | 643 space_available_ = kint64max; |
| 643 Schedule(); | 644 Schedule(); |
| 644 return; | 645 return; |
| 645 } | 646 } |
| 646 | 647 |
| 647 // We have to ask the quota manager for the value. | 648 // We have to ask the quota manager for the value. |
| 648 storage_->pending_quota_queries_.insert(this); | 649 storage_->pending_quota_queries_.insert(this); |
| 649 quota_manager->GetUsageAndQuota( | 650 quota_manager->GetUsageAndQuota( |
| 650 group_record_.origin, quota::kStorageTypeTemporary, | 651 group_record_.origin, |
| 652 storage::kStorageTypeTemporary, |
| 651 base::Bind(&StoreGroupAndCacheTask::OnQuotaCallback, this)); | 653 base::Bind(&StoreGroupAndCacheTask::OnQuotaCallback, this)); |
| 652 } | 654 } |
| 653 | 655 |
| 654 void AppCacheStorageImpl::StoreGroupAndCacheTask::OnQuotaCallback( | 656 void AppCacheStorageImpl::StoreGroupAndCacheTask::OnQuotaCallback( |
| 655 quota::QuotaStatusCode status, int64 usage, int64 quota) { | 657 storage::QuotaStatusCode status, |
| 658 int64 usage, |
| 659 int64 quota) { |
| 656 if (storage_) { | 660 if (storage_) { |
| 657 if (status == quota::kQuotaStatusOk) | 661 if (status == storage::kQuotaStatusOk) |
| 658 space_available_ = std::max(static_cast<int64>(0), quota - usage); | 662 space_available_ = std::max(static_cast<int64>(0), quota - usage); |
| 659 else | 663 else |
| 660 space_available_ = 0; | 664 space_available_ = 0; |
| 661 storage_->pending_quota_queries_.erase(this); | 665 storage_->pending_quota_queries_.erase(this); |
| 662 Schedule(); | 666 Schedule(); |
| 663 } | 667 } |
| 664 } | 668 } |
| 665 | 669 |
| 666 void AppCacheStorageImpl::StoreGroupAndCacheTask::Run() { | 670 void AppCacheStorageImpl::StoreGroupAndCacheTask::Run() { |
| 667 DCHECK(!success_); | 671 DCHECK(!success_); |
| (...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1853 base::Bind(&AppCacheStorageImpl::CallScheduleReinitialize, | 1857 base::Bind(&AppCacheStorageImpl::CallScheduleReinitialize, |
| 1854 weak_factory_.GetWeakPtr())); | 1858 weak_factory_.GetWeakPtr())); |
| 1855 } | 1859 } |
| 1856 | 1860 |
| 1857 void AppCacheStorageImpl::CallScheduleReinitialize() { | 1861 void AppCacheStorageImpl::CallScheduleReinitialize() { |
| 1858 service_->ScheduleReinitialize(); | 1862 service_->ScheduleReinitialize(); |
| 1859 // note: 'this' may be deleted at this point. | 1863 // note: 'this' may be deleted at this point. |
| 1860 } | 1864 } |
| 1861 | 1865 |
| 1862 } // namespace content | 1866 } // namespace content |
| OLD | NEW |