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

Side by Side Diff: Source/modules/serviceworkers/CacheStorage.cpp

Issue 783423003: Make ScriptPromiseResolver RefCountedWillBeRefCountedGarbageCollected. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/serviceworkers/CacheStorage.h" 6 #include "modules/serviceworkers/CacheStorage.h"
7 7
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "core/dom/DOMException.h" 10 #include "core/dom/DOMException.h"
(...skipping 11 matching lines...) Expand all
22 { 22 {
23 return DOMException::create(NotSupportedError, "No CacheStorage implementati on provided."); 23 return DOMException::create(NotSupportedError, "No CacheStorage implementati on provided.");
24 } 24 }
25 25
26 } 26 }
27 27
28 // FIXME: Consider using CallbackPromiseAdapter. 28 // FIXME: Consider using CallbackPromiseAdapter.
29 class CacheStorage::Callbacks final : public WebServiceWorkerCacheStorage::Cache StorageCallbacks { 29 class CacheStorage::Callbacks final : public WebServiceWorkerCacheStorage::Cache StorageCallbacks {
30 WTF_MAKE_NONCOPYABLE(Callbacks); 30 WTF_MAKE_NONCOPYABLE(Callbacks);
31 public: 31 public:
32 explicit Callbacks(PassRefPtr<ScriptPromiseResolver> resolver) 32 explicit Callbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver)
33 : m_resolver(resolver) { } 33 : m_resolver(resolver) { }
34 virtual ~Callbacks() { } 34 virtual ~Callbacks() { }
35 35
36 virtual void onSuccess() override 36 virtual void onSuccess() override
37 { 37 {
38 m_resolver->resolve(true); 38 m_resolver->resolve(true);
39 m_resolver.clear(); 39 m_resolver.clear();
40 } 40 }
41 41
42 virtual void onError(WebServiceWorkerCacheError* reason) override 42 virtual void onError(WebServiceWorkerCacheError* reason) override
43 { 43 {
44 if (*reason == WebServiceWorkerCacheErrorNotFound) 44 if (*reason == WebServiceWorkerCacheErrorNotFound)
45 m_resolver->resolve(false); 45 m_resolver->resolve(false);
46 else 46 else
47 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 47 m_resolver->reject(Cache::domExceptionForCacheError(*reason));
48 m_resolver.clear(); 48 m_resolver.clear();
49 } 49 }
50 50
51 private: 51 private:
52 RefPtr<ScriptPromiseResolver> m_resolver; 52 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
53 }; 53 };
54 54
55 // FIXME: Consider using CallbackPromiseAdapter. 55 // FIXME: Consider using CallbackPromiseAdapter.
56 class CacheStorage::WithCacheCallbacks final : public WebServiceWorkerCacheStora ge::CacheStorageWithCacheCallbacks { 56 class CacheStorage::WithCacheCallbacks final : public WebServiceWorkerCacheStora ge::CacheStorageWithCacheCallbacks {
57 WTF_MAKE_NONCOPYABLE(WithCacheCallbacks); 57 WTF_MAKE_NONCOPYABLE(WithCacheCallbacks);
58 public: 58 public:
59 WithCacheCallbacks(const String& cacheName, CacheStorage* cacheStorage, Pass RefPtr<ScriptPromiseResolver> resolver) 59 WithCacheCallbacks(const String& cacheName, CacheStorage* cacheStorage, Pass RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver)
60 : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resol ver) { } 60 : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resol ver) { }
61 virtual ~WithCacheCallbacks() { } 61 virtual ~WithCacheCallbacks() { }
62 62
63 virtual void onSuccess(WebServiceWorkerCache* webCache) override 63 virtual void onSuccess(WebServiceWorkerCache* webCache) override
64 { 64 {
65 // FIXME: Remove this once content's WebServiceWorkerCache implementatio n has landed. 65 // FIXME: Remove this once content's WebServiceWorkerCache implementatio n has landed.
66 if (!webCache) { 66 if (!webCache) {
67 m_resolver->reject("not implemented"); 67 m_resolver->reject("not implemented");
68 return; 68 return;
69 } 69 }
70 Cache* cache = Cache::create(webCache); 70 Cache* cache = Cache::create(webCache);
71 m_cacheStorage->m_nameToCacheMap.set(m_cacheName, cache); 71 m_cacheStorage->m_nameToCacheMap.set(m_cacheName, cache);
72 m_resolver->resolve(cache); 72 m_resolver->resolve(cache);
73 m_resolver.clear(); 73 m_resolver.clear();
74 } 74 }
75 75
76 virtual void onError(WebServiceWorkerCacheError* reason) override 76 virtual void onError(WebServiceWorkerCacheError* reason) override
77 { 77 {
78 if (*reason == WebServiceWorkerCacheErrorNotFound) 78 if (*reason == WebServiceWorkerCacheErrorNotFound)
79 m_resolver->resolve(); 79 m_resolver->resolve();
80 else 80 else
81 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 81 m_resolver->reject(Cache::domExceptionForCacheError(*reason));
82 m_resolver.clear(); 82 m_resolver.clear();
83 } 83 }
84 84
85 private: 85 private:
86 String m_cacheName; 86 String m_cacheName;
87 Persistent<CacheStorage> m_cacheStorage; 87 Persistent<CacheStorage> m_cacheStorage;
88 RefPtr<ScriptPromiseResolver> m_resolver; 88 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
89 }; 89 };
90 90
91 // FIXME: Consider using CallbackPromiseAdapter. 91 // FIXME: Consider using CallbackPromiseAdapter.
92 class CacheStorage::MatchCallbacks : public WebServiceWorkerCacheStorage::CacheS torageMatchCallbacks { 92 class CacheStorage::MatchCallbacks : public WebServiceWorkerCacheStorage::CacheS torageMatchCallbacks {
93 WTF_MAKE_NONCOPYABLE(MatchCallbacks); 93 WTF_MAKE_NONCOPYABLE(MatchCallbacks);
94 public: 94 public:
95 MatchCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) 95 MatchCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver)
96 : m_resolver(resolver) { } 96 : m_resolver(resolver) { }
97 97
98 virtual void onSuccess(WebServiceWorkerResponse* webResponse) override 98 virtual void onSuccess(WebServiceWorkerResponse* webResponse) override
99 { 99 {
100 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio nContext(), *webResponse)); 100 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio nContext(), *webResponse));
101 m_resolver.clear(); 101 m_resolver.clear();
102 } 102 }
103 103
104 virtual void onError(WebServiceWorkerCacheError* reason) override 104 virtual void onError(WebServiceWorkerCacheError* reason) override
105 { 105 {
106 if (*reason == WebServiceWorkerCacheErrorNotFound) 106 if (*reason == WebServiceWorkerCacheErrorNotFound)
107 m_resolver->resolve(); 107 m_resolver->resolve();
108 else 108 else
109 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 109 m_resolver->reject(Cache::domExceptionForCacheError(*reason));
110 m_resolver.clear(); 110 m_resolver.clear();
111 } 111 }
112 112
113 private: 113 private:
114 RefPtr<ScriptPromiseResolver> m_resolver; 114 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
115 }; 115 };
116 116
117 117
118 // FIXME: Consider using CallbackPromiseAdapter. 118 // FIXME: Consider using CallbackPromiseAdapter.
119 class CacheStorage::DeleteCallbacks final : public WebServiceWorkerCacheStorage: :CacheStorageCallbacks { 119 class CacheStorage::DeleteCallbacks final : public WebServiceWorkerCacheStorage: :CacheStorageCallbacks {
120 WTF_MAKE_NONCOPYABLE(DeleteCallbacks); 120 WTF_MAKE_NONCOPYABLE(DeleteCallbacks);
121 public: 121 public:
122 DeleteCallbacks(const String& cacheName, CacheStorage* cacheStorage, PassRef Ptr<ScriptPromiseResolver> resolver) 122 DeleteCallbacks(const String& cacheName, CacheStorage* cacheStorage, PassRef PtrWillBeRawPtr<ScriptPromiseResolver> resolver)
123 : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resol ver) { } 123 : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resol ver) { }
124 virtual ~DeleteCallbacks() { } 124 virtual ~DeleteCallbacks() { }
125 125
126 virtual void onSuccess() override 126 virtual void onSuccess() override
127 { 127 {
128 m_cacheStorage->m_nameToCacheMap.remove(m_cacheName); 128 m_cacheStorage->m_nameToCacheMap.remove(m_cacheName);
129 m_resolver->resolve(true); 129 m_resolver->resolve(true);
130 m_resolver.clear(); 130 m_resolver.clear();
131 } 131 }
132 132
133 virtual void onError(WebServiceWorkerCacheError* reason) override 133 virtual void onError(WebServiceWorkerCacheError* reason) override
134 { 134 {
135 if (*reason == WebServiceWorkerCacheErrorNotFound) 135 if (*reason == WebServiceWorkerCacheErrorNotFound)
136 m_resolver->resolve(false); 136 m_resolver->resolve(false);
137 else 137 else
138 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 138 m_resolver->reject(Cache::domExceptionForCacheError(*reason));
139 m_resolver.clear(); 139 m_resolver.clear();
140 } 140 }
141 141
142 private: 142 private:
143 String m_cacheName; 143 String m_cacheName;
144 Persistent<CacheStorage> m_cacheStorage; 144 Persistent<CacheStorage> m_cacheStorage;
145 RefPtr<ScriptPromiseResolver> m_resolver; 145 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
146 }; 146 };
147 147
148 // FIXME: Consider using CallbackPromiseAdapter. 148 // FIXME: Consider using CallbackPromiseAdapter.
149 class CacheStorage::KeysCallbacks final : public WebServiceWorkerCacheStorage::C acheStorageKeysCallbacks { 149 class CacheStorage::KeysCallbacks final : public WebServiceWorkerCacheStorage::C acheStorageKeysCallbacks {
150 WTF_MAKE_NONCOPYABLE(KeysCallbacks); 150 WTF_MAKE_NONCOPYABLE(KeysCallbacks);
151 public: 151 public:
152 explicit KeysCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) 152 explicit KeysCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolve r)
153 : m_resolver(resolver) { } 153 : m_resolver(resolver) { }
154 virtual ~KeysCallbacks() { } 154 virtual ~KeysCallbacks() { }
155 155
156 virtual void onSuccess(WebVector<WebString>* keys) override 156 virtual void onSuccess(WebVector<WebString>* keys) override
157 { 157 {
158 Vector<String> wtfKeys; 158 Vector<String> wtfKeys;
159 for (size_t i = 0; i < keys->size(); ++i) 159 for (size_t i = 0; i < keys->size(); ++i)
160 wtfKeys.append((*keys)[i]); 160 wtfKeys.append((*keys)[i]);
161 m_resolver->resolve(wtfKeys); 161 m_resolver->resolve(wtfKeys);
162 m_resolver.clear(); 162 m_resolver.clear();
163 } 163 }
164 164
165 virtual void onError(WebServiceWorkerCacheError* reason) override 165 virtual void onError(WebServiceWorkerCacheError* reason) override
166 { 166 {
167 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 167 m_resolver->reject(Cache::domExceptionForCacheError(*reason));
168 m_resolver.clear(); 168 m_resolver.clear();
169 } 169 }
170 170
171 private: 171 private:
172 RefPtr<ScriptPromiseResolver> m_resolver; 172 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
173 }; 173 };
174 174
175 CacheStorage* CacheStorage::create(WebServiceWorkerCacheStorage* webCacheStorage ) 175 CacheStorage* CacheStorage::create(WebServiceWorkerCacheStorage* webCacheStorage )
176 { 176 {
177 return new CacheStorage(webCacheStorage); 177 return new CacheStorage(webCacheStorage);
178 } 178 }
179 179
180 ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheNa me) 180 ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheNa me)
181 { 181 {
182 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 182 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
183 const ScriptPromise promise = resolver->promise(); 183 const ScriptPromise promise = resolver->promise();
184 184
185 if (m_nameToCacheMap.contains(cacheName)) { 185 if (m_nameToCacheMap.contains(cacheName)) {
186 Cache* cache = m_nameToCacheMap.find(cacheName)->value; 186 Cache* cache = m_nameToCacheMap.find(cacheName)->value;
187 resolver->resolve(cache); 187 resolver->resolve(cache);
188 return promise; 188 return promise;
189 } 189 }
190 190
191 if (m_webCacheStorage) 191 if (m_webCacheStorage)
192 m_webCacheStorage->dispatchOpen(new WithCacheCallbacks(cacheName, this, resolver), cacheName); 192 m_webCacheStorage->dispatchOpen(new WithCacheCallbacks(cacheName, this, resolver), cacheName);
193 else 193 else
194 resolver->reject(createNoImplementationException()); 194 resolver->reject(createNoImplementationException());
195 195
196 return promise; 196 return promise;
197 } 197 }
198 198
199 ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheNam e) 199 ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheNam e)
200 { 200 {
201 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 201 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
202 const ScriptPromise promise = resolver->promise(); 202 const ScriptPromise promise = resolver->promise();
203 203
204 if (m_nameToCacheMap.contains(cacheName)) { 204 if (m_nameToCacheMap.contains(cacheName)) {
205 resolver->resolve(true); 205 resolver->resolve(true);
206 return promise; 206 return promise;
207 } 207 }
208 208
209 if (m_webCacheStorage) 209 if (m_webCacheStorage)
210 m_webCacheStorage->dispatchHas(new Callbacks(resolver), cacheName); 210 m_webCacheStorage->dispatchHas(new Callbacks(resolver), cacheName);
211 else 211 else
212 resolver->reject(createNoImplementationException()); 212 resolver->reject(createNoImplementationException());
213 213
214 return promise; 214 return promise;
215 } 215 }
216 216
217 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin g& cacheName) 217 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin g& cacheName)
218 { 218 {
219 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 219 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
220 const ScriptPromise promise = resolver->promise(); 220 const ScriptPromise promise = resolver->promise();
221 221
222 if (m_webCacheStorage) 222 if (m_webCacheStorage)
223 m_webCacheStorage->dispatchDelete(new DeleteCallbacks(cacheName, this, r esolver), cacheName); 223 m_webCacheStorage->dispatchDelete(new DeleteCallbacks(cacheName, this, r esolver), cacheName);
224 else 224 else
225 resolver->reject(createNoImplementationException()); 225 resolver->reject(createNoImplementationException());
226 226
227 return promise; 227 return promise;
228 } 228 }
229 229
230 ScriptPromise CacheStorage::keys(ScriptState* scriptState) 230 ScriptPromise CacheStorage::keys(ScriptState* scriptState)
231 { 231 {
232 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 232 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
233 const ScriptPromise promise = resolver->promise(); 233 const ScriptPromise promise = resolver->promise();
234 234
235 if (m_webCacheStorage) 235 if (m_webCacheStorage)
236 m_webCacheStorage->dispatchKeys(new KeysCallbacks(resolver)); 236 m_webCacheStorage->dispatchKeys(new KeysCallbacks(resolver));
237 else 237 else
238 resolver->reject(createNoImplementationException()); 238 resolver->reject(createNoImplementationException());
239 239
240 return promise; 240 return promise;
241 } 241 }
242 242
243 ScriptPromise CacheStorage::match(ScriptState* scriptState, const RequestInfo& r equest, const CacheQueryOptions& options, ExceptionState& exceptionState) 243 ScriptPromise CacheStorage::match(ScriptState* scriptState, const RequestInfo& r equest, const CacheQueryOptions& options, ExceptionState& exceptionState)
244 { 244 {
245 ASSERT(!request.isNull()); 245 ASSERT(!request.isNull());
246 246
247 if (request.isRequest()) 247 if (request.isRequest())
248 return matchImpl(scriptState, request.getAsRequest(), options); 248 return matchImpl(scriptState, request.getAsRequest(), options);
249 Request* newRequest = Request::create(scriptState->executionContext(), reque st.getAsUSVString(), exceptionState); 249 Request* newRequest = Request::create(scriptState->executionContext(), reque st.getAsUSVString(), exceptionState);
250 if (exceptionState.hadException()) 250 if (exceptionState.hadException())
251 return ScriptPromise(); 251 return ScriptPromise();
252 return matchImpl(scriptState, newRequest, options); 252 return matchImpl(scriptState, newRequest, options);
253 } 253 }
254 254
255 ScriptPromise CacheStorage::matchImpl(ScriptState* scriptState, const Request* r equest, const CacheQueryOptions& options) 255 ScriptPromise CacheStorage::matchImpl(ScriptState* scriptState, const Request* r equest, const CacheQueryOptions& options)
256 { 256 {
257 WebServiceWorkerRequest webRequest; 257 WebServiceWorkerRequest webRequest;
258 request->populateWebServiceWorkerRequest(webRequest); 258 request->populateWebServiceWorkerRequest(webRequest);
259 259
260 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 260 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
261 const ScriptPromise promise = resolver->promise(); 261 const ScriptPromise promise = resolver->promise();
262 262
263 if (m_webCacheStorage) 263 if (m_webCacheStorage)
264 m_webCacheStorage->dispatchMatch(new MatchCallbacks(resolver), webReques t, Cache::toWebQueryParams(options)); 264 m_webCacheStorage->dispatchMatch(new MatchCallbacks(resolver), webReques t, Cache::toWebQueryParams(options));
265 else 265 else
266 resolver->reject(createNoImplementationException()); 266 resolver->reject(createNoImplementationException());
267 267
268 return promise; 268 return promise;
269 } 269 }
270 270
271 void CacheStorage::trace(Visitor* visitor) 271 void CacheStorage::trace(Visitor* visitor)
272 { 272 {
273 visitor->trace(m_nameToCacheMap); 273 visitor->trace(m_nameToCacheMap);
274 } 274 }
275 275
276 CacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage) 276 CacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage)
277 : m_webCacheStorage(webCacheStorage) 277 : m_webCacheStorage(webCacheStorage)
278 { 278 {
279 } 279 }
280 280
281 } // namespace blink 281 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698