Chromium Code Reviews| Index: webkit/quota/quota_manager.cc |
| diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc |
| index 7da4480e9ddaef01721f879ecac28e5023eaec40..6c6b1c884bd37472477eddf01685f49fc2aa27d1 100644 |
| --- a/webkit/quota/quota_manager.cc |
| +++ b/webkit/quota/quota_manager.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/sys_info.h" |
| #include "net/base/net_util.h" |
| #include "webkit/quota/quota_database.h" |
| +#include "webkit/quota/quota_temporary_storage_evictor.h" |
| #include "webkit/quota/quota_types.h" |
| #include "webkit/quota/usage_tracker.h" |
| @@ -494,12 +495,17 @@ QuotaManager::QuotaManager(bool is_incognito, |
| db_disabled_(false), |
| io_thread_(io_thread), |
| db_thread_(db_thread), |
| + temporary_storage_evictor_(NULL), |
| + num_deletion_requested_clients_(0), |
| + num_deleted_clients_(0), |
| temporary_global_quota_(-1) { |
| } |
| QuotaManager::~QuotaManager() { |
| DCHECK(io_thread_->BelongsToCurrentThread()); |
| proxy_->manager_ = NULL; |
| + if (temporary_storage_evictor_ != NULL) |
| + temporary_storage_evictor_->OnQuotaManagerDestroyedOnIOThread(); |
| std::for_each(clients_.begin(), clients_.end(), |
| std::mem_fun(&QuotaClient::OnQuotaManagerDestroyed)); |
| if (database_.get()) |
| @@ -613,6 +619,18 @@ void QuotaManager::SetPersistentHostQuota(const std::string& host, |
| } |
| } |
| +void QuotaManager::RegisterTemporaryStorageEvictor( |
| + scoped_refptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor) { |
| + /* |
| + // TODO(dmikurube): Change this hard-coded 3 seconds. |
| + temporary_storage_evictor_ = new QuotaTemporaryStorageEvictor( |
| + this, database_.get(), 10000000, 3000, io_thread_, db_thread_); |
| + */ |
| + |
| + temporary_storage_evictor_ = temporary_storage_evictor; |
| + temporary_storage_evictor_->RegisterQuotaManagerOnIOThread(this); |
| +} |
| + |
| void QuotaManager::LazyInitialize() { |
| DCHECK(io_thread_->BelongsToCurrentThread()); |
| if (database_.get()) { |
| @@ -680,6 +698,75 @@ void QuotaManager::GetLRUOrigin( |
| } |
| } |
| +void QuotaManager::StartEviction() { |
| + LazyInitialize(); |
| + if (temporary_storage_evictor_ != NULL) |
| + temporary_storage_evictor_->Start(); |
| +} |
| + |
| +void QuotaManager::GetUsageAndQuotaForEviction( |
| + DeleteOriginDataCallback* callback) { |
| + const int64 USAGE = 30000; |
| + const int64 QUOTA = 100000; |
| + const int64 PHYSICAL_AVAILABLE = 1000000000; |
| + |
| + LOG(ERROR) << "QM::GetUsageAndQuotaForEviction"; |
| + DCHECK(io_thread_->BelongsToCurrentThread()); |
| + // TODO(dmikurube): Get usage, quota and physical space and then callback. |
| + callback->Run(kQuotaStatusOk, USAGE, QUOTA, PHYSICAL_AVAILABLE); |
| + delete callback; |
| +} |
| + |
| +void QuotaManager::OnOriginDataDeleted( |
| + QuotaStatusCode status, |
| + DeleteOriginDataCallback* callback) { |
| + LOG(ERROR) << "QM::OnOriginDataDeleted"; |
| + DCHECK(io_thread_->BelongsToCurrentThread()); |
| + |
| + if (status != kQuotaStatusOk) { |
| + // TODO(dmikurube): Handle error. |
| + } |
| + |
| + ++num_deleted_clients_; |
| + DCHECK(num_deleted_clients_ <= num_deletion_requested_clients_); |
| + if (num_deleted_clients_ == num_deletion_requested_clients_) { |
| + num_deletion_requested_clients_ = 0; |
| + num_deleted_clients_ = 0; |
|
michaeln
2011/05/17 00:19:45
you might be able to do this with one data member
Dai Mikurube (NOT FULLTIME)
2011/05/17 09:18:40
We can do that, but I think these two variables he
|
| + |
| + // TODO(dmikurube): Get usage, quota and physical space and then callback. |
| + GetUsageAndQuotaForEviction(callback); |
| + } |
| +} |
| + |
| +void QuotaManager::DeleteOriginData( |
| + const GURL& origin, |
| + StorageType type, |
| + DeleteOriginDataCallback* callback) { |
| + LOG(ERROR) << "QM::DeleteOriginData"; |
| + DCHECK(io_thread_->BelongsToCurrentThread()); |
| + LazyInitialize(); |
| + |
| + int num_clients = clients_.size(); |
| + |
| + if (origin.is_empty() || num_clients == 0 || num_deleted_clients_ > 0) { |
| + GetUsageAndQuotaForEviction(callback); |
|
michaeln
2011/05/17 00:19:45
Seems strange to call this method for the last con
Dai Mikurube (NOT FULLTIME)
2011/05/17 09:18:40
I'm separating and re-constructing the change. Le
|
| + return; |
| + } |
| + |
| + num_deletion_requested_clients_ = num_clients; |
| + num_deleted_clients_ = 0; |
| + |
| + for (QuotaClientList::iterator p = clients_.begin(); |
| + p != clients_.end(); |
| + ++p) { |
| + /* |
| + p->DeleteOriginData(origin, kStorageTypeTemporary, NewRunnableMethod( |
| + this, &QuotaManager::OnOriginDataDeleted)); |
| + */ |
| + OnOriginDataDeleted(kQuotaStatusOk, callback); // test. |
| + } |
| +} |
| + |
| UsageTracker* QuotaManager::GetUsageTracker(StorageType type) const { |
| switch (type) { |
| case kStorageTypeTemporary: |