Chromium Code Reviews| Index: content/browser/cache_storage/cache_storage_cache.cc |
| diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc |
| index 66fd2fc163b6b165cfa7672fa49859796ba17c71..8dcbc84e9a37babb96e23fd1214a189cf3c74c47 100644 |
| --- a/content/browser/cache_storage/cache_storage_cache.cc |
| +++ b/content/browser/cache_storage/cache_storage_cache.cc |
| @@ -796,7 +796,7 @@ void CacheStorageCache::PutImpl(scoped_ptr<PutContext> put_context) { |
| scoped_ptr<ServiceWorkerFetchRequest> request_copy( |
| new ServiceWorkerFetchRequest(*put_context->request)); |
| - DeleteImpl(std::move(request_copy), |
| + DeleteImpl(std::move(request_copy), CacheStorageCacheQueryParams(), |
| base::Bind(&CacheStorageCache::PutDidDelete, |
| weak_ptr_factory_.GetWeakPtr(), |
| base::Passed(std::move(put_context)))); |
| @@ -1018,17 +1018,27 @@ void CacheStorageCache::Delete(const CacheStorageBatchOperation& operation, |
| weak_ptr_factory_.GetWeakPtr(), callback); |
| scheduler_->ScheduleOperation( |
| base::Bind(&CacheStorageCache::DeleteImpl, weak_ptr_factory_.GetWeakPtr(), |
| - base::Passed(std::move(request)), pending_callback)); |
| + base::Passed(std::move(request)), operation.match_params, |
| + pending_callback)); |
| } |
| void CacheStorageCache::DeleteImpl( |
| scoped_ptr<ServiceWorkerFetchRequest> request, |
| + const CacheStorageCacheQueryParams& match_params, |
| const ErrorCallback& callback) { |
| DCHECK_NE(BACKEND_UNINITIALIZED, backend_state_); |
| if (backend_state_ != BACKEND_OPEN) { |
| callback.Run(CACHE_STORAGE_ERROR_STORAGE); |
| return; |
| } |
| + |
| + if (match_params.ignore_search) { |
| + OpenAllEntries(base::Bind(&CacheStorageCache::DeleteDidOpenAllEntries, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + base::Passed(std::move(request)), callback)); |
| + return; |
| + } |
| + |
| scoped_ptr<disk_cache::Entry*> entry(new disk_cache::Entry*); |
| disk_cache::Entry** entry_ptr = entry.get(); |
| @@ -1046,6 +1056,28 @@ void CacheStorageCache::DeleteImpl( |
| open_entry_callback.Run(rv); |
| } |
| +void CacheStorageCache::DeleteDidOpenAllEntries( |
| + scoped_ptr<ServiceWorkerFetchRequest> request, |
| + const ErrorCallback& callback, |
| + scoped_ptr<OpenAllEntriesContext> entries_context, |
| + CacheStorageError error) { |
| + if (error != CACHE_STORAGE_OK) { |
| + callback.Run(error); |
| + return; |
| + } |
| + |
| + GURL request_url_without_query = RemoveQueryParam(request->url); |
| + for (Entries::iterator iter = entries_context->entries.begin(); |
| + iter != entries_context->entries.end(); iter++) { |
| + disk_cache::Entry* entry(*iter); |
| + if (request_url_without_query == RemoveQueryParam(GURL(entry->GetKey()))) |
| + entry->Doom(); |
| + } |
| + |
| + UpdateCacheSize(); |
|
nhiroki
2016/02/16 09:51:47
I wonder if we need to clear |entries_context| bef
jkarlin
2016/02/16 14:54:37
It does need to be cleared first. UpdateCacheSize(
zino
2016/02/18 08:12:47
Done.
|
| + callback.Run(CACHE_STORAGE_OK); |
| +} |
| + |
| void CacheStorageCache::DeleteDidOpenEntry( |
| const GURL& origin, |
| scoped_ptr<ServiceWorkerFetchRequest> request, |