1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_CACHE_STORAGE_DISPATCHER_H_
6 #define CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_CACHE_STORAGE_DISPATCHER_H_
10 #include "base/id_map.h"
11 #include "base/macros.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/strings/string16.h"
14 #include "content/public/renderer/render_process_observer.h"
15 #include "third_party/WebKit/public/platform/WebServiceWorkerCache.h"
16 #include "third_party/WebKit/public/platform/WebServiceWorkerCacheError.h"
17 #include "third_party/WebKit/public/platform/WebServiceWorkerCacheStorage.h"
21 struct ServiceWorkerFetchRequest;
22 class ServiceWorkerScriptContext;
23 struct ServiceWorkerResponse;
25 // There is one ServiceWorkerCacheStorageDispatcher per
26 // ServiceWorkerScriptContext. It handles CacheStorage operations with messages
27 // to/from the browser, creating Cache objects (for which it also handles
28 // messages) as it goes.
30 class ServiceWorkerCacheStorageDispatcher
31 : public blink::WebServiceWorkerCacheStorage {
33 explicit ServiceWorkerCacheStorageDispatcher(
34 ServiceWorkerScriptContext* script_context);
35 virtual ~ServiceWorkerCacheStorageDispatcher();
37 // ServiceWorkerScriptContext calls our OnMessageReceived directly.
38 bool OnMessageReceived(const IPC::Message& message);
40 // Message handlers for CacheStorage messages from the browser process.
41 void OnCacheStorageGetSuccess(int request_id, int cache_id);
42 void OnCacheStorageHasSuccess(int request_id);
43 void OnCacheStorageCreateSuccess(int request_id, int cache_id);
44 void OnCacheStorageDeleteSuccess(int request_id);
45 void OnCacheStorageKeysSuccess(int request_id,
46 const std::vector<base::string16>& keys);
48 void OnCacheStorageGetError(int request_id,
49 blink::WebServiceWorkerCacheError reason);
50 void OnCacheStorageHasError(int request_id,
51 blink::WebServiceWorkerCacheError reason);
52 void OnCacheStorageCreateError(int request_id,
53 blink::WebServiceWorkerCacheError reason);
54 void OnCacheStorageDeleteError(int request_id,
55 blink::WebServiceWorkerCacheError reason);
56 void OnCacheStorageKeysError(int request_id,
57 blink::WebServiceWorkerCacheError reason);
59 // Message handlers for Cache messages from the browser process.
60 void OnCacheMatchSuccess(int request_id,
61 const ServiceWorkerResponse& response);
62 void OnCacheMatchAllSuccess(
64 const std::vector<ServiceWorkerResponse>& response);
65 void OnCacheKeysSuccess(
67 const std::vector<ServiceWorkerFetchRequest>& response);
68 void OnCacheBatchSuccess(int request_id,
69 const std::vector<ServiceWorkerResponse>& response);
71 void OnCacheMatchError(int request_id,
72 blink::WebServiceWorkerCacheError reason);
73 void OnCacheMatchAllError(int request_id,
74 blink::WebServiceWorkerCacheError reason);
75 void OnCacheKeysError(int request_id,
76 blink::WebServiceWorkerCacheError reason);
77 void OnCacheBatchError(int request_id,
78 blink::WebServiceWorkerCacheError reason);
80 // From WebServiceWorkerCacheStorage:
81 virtual void dispatchGet(CacheStorageWithCacheCallbacks* callbacks,
82 const blink::WebString& cacheName);
83 virtual void dispatchHas(CacheStorageCallbacks* callbacks,
84 const blink::WebString& cacheName);
85 virtual void dispatchCreate(CacheStorageWithCacheCallbacks* callbacks,
86 const blink::WebString& cacheName);
87 virtual void dispatchDelete(CacheStorageCallbacks* callbacks,
88 const blink::WebString& cacheName);
89 virtual void dispatchKeys(CacheStorageKeysCallbacks* callbacks);
91 // These methods are used by WebCache to forward events to the browser
93 void dispatchMatchForCache(
95 blink::WebServiceWorkerCache::CacheMatchCallbacks* callbacks,
96 const blink::WebServiceWorkerRequest& request,
97 const blink::WebServiceWorkerCache::QueryParams& query_params);
98 void dispatchMatchAllForCache(
100 blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks,
101 const blink::WebServiceWorkerRequest& request,
102 const blink::WebServiceWorkerCache::QueryParams& query_params);
103 void dispatchKeysForCache(
105 blink::WebServiceWorkerCache::CacheWithRequestsCallbacks* callbacks,
106 const blink::WebServiceWorkerRequest* request,
107 const blink::WebServiceWorkerCache::QueryParams& query_params);
108 void dispatchBatchForCache(
110 blink::WebServiceWorkerCache::CacheWithResponsesCallbacks* callbacks,
111 const blink::WebVector<blink::WebServiceWorkerCache::BatchOperation>&
114 void OnWebCacheDestruction(int cache_id);
119 typedef IDMap<CacheStorageCallbacks, IDMapOwnPointer> CallbacksMap;
120 typedef IDMap<CacheStorageWithCacheCallbacks, IDMapOwnPointer>
121 WithCacheCallbacksMap;
122 typedef IDMap<CacheStorageKeysCallbacks, IDMapOwnPointer>
125 typedef IDMap<blink::WebServiceWorkerCache::CacheMatchCallbacks,
126 IDMapOwnPointer> MatchCallbacksMap;
127 typedef IDMap<blink::WebServiceWorkerCache::CacheWithResponsesCallbacks,
128 IDMapOwnPointer> WithResponsesCallbacksMap;
129 typedef IDMap<blink::WebServiceWorkerCache::CacheWithRequestsCallbacks,
130 IDMapOwnPointer> WithRequestsCallbacksMap;
132 // Not owned. The script context containing this object.
133 ServiceWorkerScriptContext* script_context_;
135 WithCacheCallbacksMap get_callbacks_;
136 CallbacksMap has_callbacks_;
137 WithCacheCallbacksMap create_callbacks_;
138 CallbacksMap delete_callbacks_;
139 KeysCallbacksMap keys_callbacks_;
141 // The individual caches created under this CacheStorage object.
142 IDMap<WebCache, IDMapExternalPointer> web_caches_;
144 // These ID maps are held in the CacheStorage object rather than the Cache
145 // object to ensure that the IDs are unique.
146 MatchCallbacksMap cache_match_callbacks_;
147 WithResponsesCallbacksMap cache_match_all_callbacks_;
148 WithRequestsCallbacksMap cache_keys_callbacks_;
149 WithResponsesCallbacksMap cache_batch_callbacks_;
151 base::WeakPtrFactory<ServiceWorkerCacheStorageDispatcher> weak_factory_;
153 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerCacheStorageDispatcher);
156 } // namespace content
158 #endif // CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_CACHE_STORAGE_DISPATCHER_H_