summaryrefslogtreecommitdiffstats
path: root/webkit/quota/quota_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/quota/quota_manager.cc')
-rw-r--r--webkit/quota/quota_manager.cc48
1 files changed, 46 insertions, 2 deletions
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
index 6bd37bd..ecfdef54 100644
--- a/webkit/quota/quota_manager.cc
+++ b/webkit/quota/quota_manager.cc
@@ -524,7 +524,10 @@ QuotaManager::QuotaManager(bool is_incognito,
db_disabled_(false),
io_thread_(io_thread),
db_thread_(db_thread),
- temporary_global_quota_(-1) {
+ num_eviction_requested_clients_(0),
+ num_evicted_clients_(0),
+ temporary_global_quota_(-1),
+ callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
}
QuotaManager::~QuotaManager() {
@@ -773,11 +776,52 @@ void QuotaManager::GetLRUOrigin(
task->Start();
}
+void QuotaManager::DidOriginDataEvicted(
+ QuotaStatusCode status) {
+ DCHECK(io_thread_->BelongsToCurrentThread());
+
+ if (status != kQuotaStatusOk) {
+ // TODO(dmikurube): Handle error.
+ }
+
+ ++num_evicted_clients_;
+ DCHECK(num_evicted_clients_ <= num_eviction_requested_clients_);
+ if (num_evicted_clients_ == num_eviction_requested_clients_) {
+ num_eviction_requested_clients_ = 0;
+ num_evicted_clients_ = 0;
+
+ evict_origin_data_callback_->Run(kQuotaStatusOk);
+ evict_origin_data_callback_.reset();
+ }
+}
+
void QuotaManager::EvictOriginData(
const GURL& origin,
StorageType type,
EvictOriginDataCallback* callback) {
- // TODO(dmikurube): Implement it.
+ DCHECK(io_thread_->BelongsToCurrentThread());
+ DCHECK(database_.get());
+ DCHECK(num_eviction_requested_clients_ == 0);
+ DCHECK(type == kStorageTypeTemporary);
+
+ int num_clients = clients_.size();
+
+ if (origin.is_empty() || num_clients == 0) {
+ callback->Run(kQuotaStatusOk);
+ delete callback;
+ return;
+ }
+
+ num_eviction_requested_clients_ = num_clients;
+ num_evicted_clients_ = 0;
+
+ evict_origin_data_callback_.reset(callback);
+ for (QuotaClientList::iterator p = clients_.begin();
+ p != clients_.end();
+ ++p) {
+ (*p)->DeleteOriginData(origin, type, callback_factory_.
+ NewCallback(&QuotaManager::DidOriginDataEvicted));
+ }
}
void QuotaManager::GetUsageAndQuotaForEviction(