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

Unified Diff: content/browser/cache_storage/cache_storage_dispatcher_host.cc

Issue 1248003004: CacheStorage: Implement Cache.matchAll() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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: content/browser/cache_storage/cache_storage_dispatcher_host.cc
diff --git a/content/browser/cache_storage/cache_storage_dispatcher_host.cc b/content/browser/cache_storage/cache_storage_dispatcher_host.cc
index 79d3f5a884033aab3533b9edcdef23d565608aa0..82f47e780196a8183c844ab39f087eb6f103e4db 100644
--- a/content/browser/cache_storage/cache_storage_dispatcher_host.cc
+++ b/content/browser/cache_storage/cache_storage_dispatcher_host.cc
@@ -203,9 +203,29 @@ void CacheStorageDispatcherHost::OnCacheMatchAll(
int cache_id,
const ServiceWorkerFetchRequest& request,
const CacheStorageCacheQueryParams& match_params) {
- // TODO(gavinp,jkarlin): Implement this method.
- Send(new CacheStorageMsg_CacheMatchAllError(
- thread_id, request_id, blink::WebServiceWorkerCacheErrorNotImplemented));
+ IDToCacheMap::iterator it = id_to_cache_map_.find(cache_id);
+ if (it == id_to_cache_map_.end()) {
+ Send(new CacheStorageMsg_CacheMatchError(
+ thread_id, request_id, blink::WebServiceWorkerCacheErrorNotFound));
+ return;
+ }
+
+ scoped_refptr<CacheStorageCache> cache = it->second;
+ if (request.url.is_empty()) {
+ cache->MatchAll(
+ base::Bind(&CacheStorageDispatcherHost::OnCacheMatchAllCallback, this,
+ thread_id, request_id, cache));
+ return;
+ }
+
+ scoped_ptr<ServiceWorkerFetchRequest> scoped_request(
+ new ServiceWorkerFetchRequest(request.url, request.method,
+ request.headers, request.referrer,
+ request.is_reload));
+ cache->Match(
+ scoped_request.Pass(),
+ base::Bind(&CacheStorageDispatcherHost::OnCacheMatchAllCallbackAdapter,
+ this, thread_id, request_id, cache));
}
void CacheStorageDispatcherHost::OnCacheKeys(
@@ -355,6 +375,47 @@ void CacheStorageDispatcherHost::OnCacheMatchCallback(
Send(new CacheStorageMsg_CacheMatchSuccess(thread_id, request_id, *response));
}
+void CacheStorageDispatcherHost::OnCacheMatchAllCallbackAdapter(
+ int thread_id,
+ int request_id,
+ const scoped_refptr<CacheStorageCache>& cache,
+ CacheStorageError error,
+ scoped_ptr<ServiceWorkerResponse> response,
+ scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
+ std::vector<ServiceWorkerResponse> responses;
+ ScopedVector<storage::BlobDataHandle> blob_data_handles;
+ if (error == CACHE_STORAGE_OK) {
+ DCHECK(response);
+ responses.push_back(*response);
+ blob_data_handles.push_back(blob_data_handle.release());
+ }
+ OnCacheMatchAllCallback(thread_id, request_id, cache, error, responses,
+ blob_data_handles.Pass());
+}
+
+void CacheStorageDispatcherHost::OnCacheMatchAllCallback(
+ int thread_id,
+ int request_id,
+ const scoped_refptr<CacheStorageCache>& cache,
+ CacheStorageError error,
+ const std::vector<ServiceWorkerResponse>& responses,
+ ScopedVector<storage::BlobDataHandle> blob_data_handles) {
+ if (error != CACHE_STORAGE_OK || error != CACHE_STORAGE_ERROR_NOT_FOUND) {
+ Send(new CacheStorageMsg_CacheMatchAllError(
+ thread_id, request_id, ToWebServiceWorkerCacheError(error)));
+ return;
+ }
+
+ for (storage::BlobDataHandle* handle : blob_data_handles) {
+ if (handle)
+ StoreBlobDataHandle(make_scoped_ptr(handle));
+ }
+ blob_data_handles.weak_clear();
+
+ Send(new CacheStorageMsg_CacheMatchAllSuccess(thread_id, request_id,
+ responses));
+}
+
void CacheStorageDispatcherHost::OnCacheKeysCallback(
int thread_id,
int request_id,
@@ -414,7 +475,7 @@ void CacheStorageDispatcherHost::StoreBlobDataHandle(
rv.first->second.push_front(storage::BlobDataHandle(*blob_data_handle));
}
-void CacheStorageDispatcherHost::DropBlobDataHandle(std::string uuid) {
+void CacheStorageDispatcherHost::DropBlobDataHandle(const std::string& uuid) {
UUIDToBlobDataHandleList::iterator it = blob_handle_store_.find(uuid);
if (it == blob_handle_store_.end())
return;

Powered by Google App Engine
This is Rietveld 408576698