| 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(
|
|
|