Index: content/renderer/service_worker/service_worker_cache_storage_dispatcher.h |
diff --git a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.h b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.h |
index ec454dca2c96a85fedb19ac4c0d94f609383d9a5..c6be53425c6caa0f94467cbb66cc306918e24d27 100644 |
--- a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.h |
+++ b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.h |
@@ -2,25 +2,30 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_FETCH_STORES_DISPATCHER_H_ |
-#define CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_FETCH_STORES_DISPATCHER_H_ |
+#ifndef CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_CACHE_STORAGE_DISPATCHER_H_ |
+#define CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_CACHE_STORAGE_DISPATCHER_H_ |
#include <vector> |
#include "base/id_map.h" |
#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
#include "base/strings/string16.h" |
#include "content/public/renderer/render_process_observer.h" |
+#include "third_party/WebKit/public/platform/WebServiceWorkerCache.h" |
#include "third_party/WebKit/public/platform/WebServiceWorkerCacheError.h" |
#include "third_party/WebKit/public/platform/WebServiceWorkerCacheStorage.h" |
namespace content { |
+struct ServiceWorkerFetchRequest; |
class ServiceWorkerScriptContext; |
+struct ServiceWorkerResponse; |
// There is one ServiceWorkerCacheStorageDispatcher per |
-// ServiceWorkerScriptContext. It starts CacheStorage operations with messages |
-// to the browser process and runs callbacks at operation completion. |
+// ServiceWorkerScriptContext. It handles CacheStorage operations with messages |
+// to/from the browser, creating Cache objects (for which it also handles |
+// messages) as it goes. |
class ServiceWorkerCacheStorageDispatcher |
: public blink::WebServiceWorkerCacheStorage { |
@@ -29,26 +34,48 @@ class ServiceWorkerCacheStorageDispatcher |
ServiceWorkerScriptContext* script_context); |
virtual ~ServiceWorkerCacheStorageDispatcher(); |
+ // ServiceWorkerScriptContext calls our OnMessageReceived directly. |
bool OnMessageReceived(const IPC::Message& message); |
- // Message handlers for messages from the browser process. |
+ // Message handlers for CacheStorage messages from the browser process. |
void OnCacheStorageGetSuccess(int request_id, int cache_id); |
void OnCacheStorageHasSuccess(int request_id); |
void OnCacheStorageCreateSuccess(int request_id, int cache_id); |
void OnCacheStorageDeleteSuccess(int request_id); |
void OnCacheStorageKeysSuccess(int request_id, |
- const std::vector<base::string16>& keys); |
+ const std::vector<base::string16>& keys); |
void OnCacheStorageGetError(int request_id, |
- blink::WebServiceWorkerCacheError reason); |
+ blink::WebServiceWorkerCacheError reason); |
void OnCacheStorageHasError(int request_id, |
- blink::WebServiceWorkerCacheError reason); |
+ blink::WebServiceWorkerCacheError reason); |
void OnCacheStorageCreateError(int request_id, |
- blink::WebServiceWorkerCacheError reason); |
+ blink::WebServiceWorkerCacheError reason); |
void OnCacheStorageDeleteError(int request_id, |
- blink::WebServiceWorkerCacheError reason); |
+ blink::WebServiceWorkerCacheError reason); |
void OnCacheStorageKeysError(int request_id, |
- blink::WebServiceWorkerCacheError reason); |
+ blink::WebServiceWorkerCacheError reason); |
+ |
+ // Message handlers for Cache messages from the browser process. |
+ void OnCacheMatchSuccess(int request_id, |
+ const ServiceWorkerResponse& response); |
+ void OnCacheMatchAllSuccess( |
+ int request_id, |
+ const std::vector<ServiceWorkerResponse>& response); |
+ void OnCacheKeysSuccess( |
+ int request_id, |
+ const std::vector<ServiceWorkerFetchRequest>& response); |
+ void OnCacheBatchSuccess(int request_id, |
+ const std::vector<ServiceWorkerResponse>& response); |
+ |
+ void OnCacheMatchError(int request_id, |
+ blink::WebServiceWorkerCacheError reason); |
+ void OnCacheMatchAllError(int request_id, |
+ blink::WebServiceWorkerCacheError reason); |
+ void OnCacheKeysError(int request_id, |
+ blink::WebServiceWorkerCacheError reason); |
+ void OnCacheBatchError(int request_id, |
+ blink::WebServiceWorkerCacheError reason); |
// From WebServiceWorkerCacheStorage: |
virtual void dispatchGet(CacheStorageWithCacheCallbacks* callbacks, |
@@ -61,13 +88,47 @@ class ServiceWorkerCacheStorageDispatcher |
const blink::WebString& cacheName); |
virtual void dispatchKeys(CacheStorageKeysCallbacks* callbacks); |
+ // These methods are used by WebCache to forward events to the browser |
+ // process. |
+ void dispatchMatchForCache( |
+ int cache_id, |
+ blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks, |
+ const blink::WebServiceWorkerRequest& request, |
+ const blink::WebServiceWorkerCache::QueryParams& query_params); |
+ void dispatchMatchAllForCache( |
+ int cache_id, |
+ blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks, |
+ const blink::WebServiceWorkerRequest& request, |
+ const blink::WebServiceWorkerCache::QueryParams& query_params); |
+ void dispatchKeysForCache( |
+ int cache_id, |
+ blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks, |
+ const blink::WebServiceWorkerRequest* request, |
+ const blink::WebServiceWorkerCache::QueryParams& query_params); |
+ void dispatchBatchForCache( |
+ int cache_id, |
+ blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks, |
+ const blink::WebVector<blink::WebServiceWorkerCache::BatchOperation>& |
+ batch_operations); |
+ |
+ void OnWebCacheDestruction(int cache_id); |
+ |
private: |
+ class WebCache; |
+ |
typedef IDMap<CacheStorageCallbacks, IDMapOwnPointer> CallbacksMap; |
typedef IDMap<CacheStorageWithCacheCallbacks, IDMapOwnPointer> |
WithCacheCallbacksMap; |
typedef IDMap<CacheStorageKeysCallbacks, IDMapOwnPointer> |
KeysCallbacksMap; |
+ typedef IDMap<blink::WebServiceWorkerCache::CacheMatchCallbacks, |
+ IDMapOwnPointer> MatchCallbacksMap; |
+ typedef IDMap<blink::WebServiceWorkerCache::CacheWithResponsesCallbacks, |
+ IDMapOwnPointer> WithResponsesCallbacksMap; |
+ typedef IDMap<blink::WebServiceWorkerCache::CacheWithRequestsCallbacks, |
+ IDMapOwnPointer> WithRequestsCallbacksMap; |
+ |
// Not owned. The script context containing this object. |
ServiceWorkerScriptContext* script_context_; |
@@ -77,6 +138,18 @@ class ServiceWorkerCacheStorageDispatcher |
CallbacksMap delete_callbacks_; |
KeysCallbacksMap keys_callbacks_; |
+ // The individual caches created under this CacheStorage object. |
+ IDMap<WebCache, IDMapExternalPointer> web_caches_; |
+ |
+ // These ID maps are held in the CacheStorage object rather than the Cache |
+ // object to ensure that the IDs are unique. |
+ MatchCallbacksMap cache_match_callbacks_; |
+ WithResponsesCallbacksMap cache_match_all_callbacks_; |
+ WithRequestsCallbacksMap cache_keys_callbacks_; |
+ WithResponsesCallbacksMap cache_batch_callbacks_; |
+ |
+ base::WeakPtrFactory<ServiceWorkerCacheStorageDispatcher> weak_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerCacheStorageDispatcher); |
}; |