Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: webkit/quota/quota_manager.cc

Issue 7839029: QuotaManager::DeleteOriginData now allows deletion of specific QuotaClients (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/quota/quota_manager.cc
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
index 60d7c323c682683a8c2b5fb6e90c7854c5c33eb2..cbfede0be0820a743480e9edee845d1f700272bb 100644
--- a/webkit/quota/quota_manager.cc
+++ b/webkit/quota/quota_manager.cc
@@ -379,12 +379,15 @@ class QuotaManager::OriginDataDeleter : public QuotaTask {
OriginDataDeleter(QuotaManager* manager,
const GURL& origin,
StorageType type,
+ int quota_client_mask,
StatusCallback* callback)
: QuotaTask(manager),
origin_(origin),
type_(type),
+ quota_client_mask_(quota_client_mask),
error_count_(0),
remaining_clients_(-1),
+ skipped_clients_(0),
callback_(callback),
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {}
@@ -394,14 +397,21 @@ class QuotaManager::OriginDataDeleter : public QuotaTask {
remaining_clients_ = manager()->clients_.size();
for (QuotaClientList::iterator iter = manager()->clients_.begin();
iter != manager()->clients_.end(); ++iter) {
- (*iter)->DeleteOriginData(origin_, type_, callback_factory_.NewCallback(
- &OriginDataDeleter::DidDeleteOriginData));
+ if (quota_client_mask_ & (*iter)->id()) {
+ (*iter)->DeleteOriginData(origin_, type_, callback_factory_.NewCallback(
+ &OriginDataDeleter::DidDeleteOriginData));
+ } else {
+ ++skipped_clients_;
+ if (--remaining_clients_ == 0)
+ CallCompleted();
+ }
}
}
virtual void Completed() OVERRIDE {
if (error_count_ == 0) {
- manager()->DeleteOriginFromDatabase(origin_, type_);
+ if (remaining_clients_ == 0)
+ manager()->DeleteOriginFromDatabase(origin_, type_);
callback_->Run(kQuotaStatusOk);
} else {
callback_->Run(kQuotaErrorInvalidModification);
@@ -430,8 +440,10 @@ class QuotaManager::OriginDataDeleter : public QuotaTask {
GURL origin_;
StorageType type_;
+ int quota_client_mask_;
int error_count_;
int remaining_clients_;
+ int skipped_clients_;
scoped_ptr<StatusCallback> callback_;
ScopedCallbackFactory<OriginDataDeleter> callback_factory_;
@@ -1166,18 +1178,19 @@ void QuotaManager::NotifyOriginNoLongerInUse(const GURL& origin) {
origins_in_use_.erase(origin);
}
-void QuotaManager::DeleteOriginData(
- const GURL& origin, StorageType type, StatusCallback* callback) {
+void QuotaManager::DeleteOriginData(const GURL& origin, StorageType type,
+ int quota_client_mask, StatusCallback* callback) {
LazyInitialize();
- if (origin.is_empty() || clients_.empty()) {
+ if (origin.is_empty() || clients_.empty() ||
+ quota_client_mask == QuotaClient::kUnknown) {
callback->Run(kQuotaStatusOk);
delete callback;
return;
}
OriginDataDeleter* deleter =
- new OriginDataDeleter(this, origin, type, callback);
+ new OriginDataDeleter(this, origin, type, quota_client_mask, callback);
deleter->Start();
}
@@ -1327,8 +1340,8 @@ void QuotaManager::EvictOriginData(
eviction_context_.evicted_type = type;
eviction_context_.evict_origin_data_callback.reset(callback);
- DeleteOriginData(origin, type, callback_factory_.NewCallback(
- &QuotaManager::DidOriginDataEvicted));
+ DeleteOriginData(origin, type, QuotaClient::kAllClientsMask,
+ callback_factory_.NewCallback(&QuotaManager::DidOriginDataEvicted));
}
void QuotaManager::DidGetAvailableSpaceForEviction(

Powered by Google App Engine
This is Rietveld 408576698