| Index: webkit/quota/quota_manager.cc
 | 
| diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
 | 
| index 6bd37bdf6505a19b4a8907ad803b41aeb4f6e6eb..ecfdef54e55b90219b01cba67096bb84a3e268fc 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(
 | 
| 
 |