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

Side by Side Diff: Source/modules/cachestorage/Cache.cpp

Issue 1233173002: Have ScriptPromiseResolver on the Oilpan heap always. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: smaller review updates Created 5 years, 5 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 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/cachestorage/Cache.h" 6 #include "modules/cachestorage/Cache.h"
7 7
8 #include "bindings/core/v8/CallbackPromiseAdapter.h" 8 #include "bindings/core/v8/CallbackPromiseAdapter.h"
9 #include "bindings/core/v8/ExceptionState.h" 9 #include "bindings/core/v8/ExceptionState.h"
10 #include "bindings/core/v8/ScriptPromiseResolver.h" 10 #include "bindings/core/v8/ScriptPromiseResolver.h"
(...skipping 12 matching lines...) Expand all
23 #include "public/platform/WebServiceWorkerCache.h" 23 #include "public/platform/WebServiceWorkerCache.h"
24 24
25 namespace blink { 25 namespace blink {
26 26
27 namespace { 27 namespace {
28 28
29 // FIXME: Consider using CallbackPromiseAdapter. 29 // FIXME: Consider using CallbackPromiseAdapter.
30 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { 30 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks {
31 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); 31 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks);
32 public: 32 public:
33 CacheMatchCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) 33 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver)
34 : m_resolver(resolver) { } 34 : m_resolver(resolver) { }
35 35
36 void onSuccess(WebServiceWorkerResponse* webResponse) override 36 void onSuccess(WebServiceWorkerResponse* webResponse) override
37 { 37 {
38 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio nContext(), *webResponse)); 38 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio nContext(), *webResponse));
39 m_resolver.clear(); 39 m_resolver.clear();
40 } 40 }
41 41
42 // Ownership of |rawReason| must be passed. 42 // Ownership of |rawReason| must be passed.
43 void onError(WebServiceWorkerCacheError* rawReason) override 43 void onError(WebServiceWorkerCacheError* rawReason) override
44 { 44 {
45 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason); 45 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason);
46 if (*reason == WebServiceWorkerCacheErrorNotFound) 46 if (*reason == WebServiceWorkerCacheErrorNotFound)
47 m_resolver->resolve(); 47 m_resolver->resolve();
48 else 48 else
49 m_resolver->reject(CacheStorageError::createException(*reason)); 49 m_resolver->reject(CacheStorageError::createException(*reason));
50 m_resolver.clear(); 50 m_resolver.clear();
51 } 51 }
52 52
53 private: 53 private:
54 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 54 Persistent<ScriptPromiseResolver> m_resolver;
55 }; 55 };
56 56
57 // FIXME: Consider using CallbackPromiseAdapter. 57 // FIXME: Consider using CallbackPromiseAdapter.
58 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo nsesCallbacks { 58 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo nsesCallbacks {
59 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); 59 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks);
60 public: 60 public:
61 CacheWithResponsesCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> re solver) 61 explicit CacheWithResponsesCallbacks(ScriptPromiseResolver* resolver)
62 : m_resolver(resolver) { } 62 : m_resolver(resolver) { }
63 63
64 void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) override 64 void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) override
65 { 65 {
66 HeapVector<Member<Response>> responses; 66 HeapVector<Member<Response>> responses;
67 for (size_t i = 0; i < webResponses->size(); ++i) 67 for (size_t i = 0; i < webResponses->size(); ++i)
68 responses.append(Response::create(m_resolver->scriptState()->executi onContext(), (*webResponses)[i])); 68 responses.append(Response::create(m_resolver->scriptState()->executi onContext(), (*webResponses)[i]));
69 m_resolver->resolve(responses); 69 m_resolver->resolve(responses);
70 m_resolver.clear(); 70 m_resolver.clear();
haraken 2015/07/18 08:01:24 Nit: So let's remove these .clear() in follow-up C
71 } 71 }
72 72
73 // Ownership of |rawReason| must be passed. 73 // Ownership of |rawReason| must be passed.
74 void onError(WebServiceWorkerCacheError* rawReason) override 74 void onError(WebServiceWorkerCacheError* rawReason) override
75 { 75 {
76 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason); 76 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason);
77 m_resolver->reject(CacheStorageError::createException(*reason)); 77 m_resolver->reject(CacheStorageError::createException(*reason));
78 m_resolver.clear(); 78 m_resolver.clear();
79 } 79 }
80 80
81 protected: 81 protected:
82 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 82 Persistent<ScriptPromiseResolver> m_resolver;
83 }; 83 };
84 84
85 // FIXME: Consider using CallbackPromiseAdapter. 85 // FIXME: Consider using CallbackPromiseAdapter.
86 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks { 86 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks {
87 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); 87 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback);
88 public: 88 public:
89 CacheDeleteCallback(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) 89 explicit CacheDeleteCallback(ScriptPromiseResolver* resolver)
90 : m_resolver(resolver) { } 90 : m_resolver(resolver) { }
91 91
92 void onSuccess() override 92 void onSuccess() override
93 { 93 {
94 m_resolver->resolve(true); 94 m_resolver->resolve(true);
95 m_resolver.clear(); 95 m_resolver.clear();
96 } 96 }
97 97
98 // Ownership of |rawReason| must be passed. 98 // Ownership of |rawReason| must be passed.
99 void onError(WebServiceWorkerCacheError* rawReason) override 99 void onError(WebServiceWorkerCacheError* rawReason) override
100 { 100 {
101 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason); 101 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason);
102 if (*reason == WebServiceWorkerCacheErrorNotFound) 102 if (*reason == WebServiceWorkerCacheErrorNotFound)
103 m_resolver->resolve(false); 103 m_resolver->resolve(false);
104 else 104 else
105 m_resolver->reject(CacheStorageError::createException(*reason)); 105 m_resolver->reject(CacheStorageError::createException(*reason));
106 m_resolver.clear(); 106 m_resolver.clear();
107 } 107 }
108 108
109 private: 109 private:
110 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 110 Persistent<ScriptPromiseResolver> m_resolver;
111 }; 111 };
112 112
113 // FIXME: Consider using CallbackPromiseAdapter. 113 // FIXME: Consider using CallbackPromiseAdapter.
114 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques tsCallbacks { 114 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques tsCallbacks {
115 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); 115 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks);
116 public: 116 public:
117 CacheWithRequestsCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> res olver) 117 explicit CacheWithRequestsCallbacks(ScriptPromiseResolver* resolver)
118 : m_resolver(resolver) { } 118 : m_resolver(resolver) { }
119 119
120 void onSuccess(WebVector<WebServiceWorkerRequest>* webRequests) override 120 void onSuccess(WebVector<WebServiceWorkerRequest>* webRequests) override
121 { 121 {
122 HeapVector<Member<Request>> requests; 122 HeapVector<Member<Request>> requests;
123 for (size_t i = 0; i < webRequests->size(); ++i) 123 for (size_t i = 0; i < webRequests->size(); ++i)
124 requests.append(Request::create(m_resolver->scriptState()->execution Context(), (*webRequests)[i])); 124 requests.append(Request::create(m_resolver->scriptState()->execution Context(), (*webRequests)[i]));
125 m_resolver->resolve(requests); 125 m_resolver->resolve(requests);
126 m_resolver.clear(); 126 m_resolver.clear();
127 } 127 }
128 128
129 // Ownership of |rawReason| must be passed. 129 // Ownership of |rawReason| must be passed.
130 void onError(WebServiceWorkerCacheError* rawReason) override 130 void onError(WebServiceWorkerCacheError* rawReason) override
131 { 131 {
132 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason); 132 OwnPtr<WebServiceWorkerCacheError> reason = adoptPtr(rawReason);
133 m_resolver->reject(CacheStorageError::createException(*reason)); 133 m_resolver->reject(CacheStorageError::createException(*reason));
134 m_resolver.clear(); 134 m_resolver.clear();
135 } 135 }
136 136
137 private: 137 private:
138 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 138 Persistent<ScriptPromiseResolver> m_resolver;
139 }; 139 };
140 140
141 // This class provides Promise.all() for ScriptPromise. 141 // This class provides Promise.all() for ScriptPromise.
142 // TODO(nhiroki): Move this somewhere else so that other components can reuse. 142 // TODO(nhiroki): Move this somewhere else so that other components can reuse.
143 // TODO(nhiroki): Unfortunately, we have to go through V8 to wait for the fetch 143 // TODO(nhiroki): Unfortunately, we have to go through V8 to wait for the fetch
144 // promise. It should be better to achieve this only within C++ world. 144 // promise. It should be better to achieve this only within C++ world.
145 class CacheStoragePromiseAll final : public GarbageCollectedFinalized<CacheStora gePromiseAll> { 145 class CacheStoragePromiseAll final : public GarbageCollectedFinalized<CacheStora gePromiseAll> {
146 public: 146 public:
147 CacheStoragePromiseAll(Vector<ScriptPromise> promises, PassRefPtrWillBeRawPt r<ScriptPromiseResolver> resolver) 147 CacheStoragePromiseAll(Vector<ScriptPromise> promises, ScriptPromiseResolver * resolver)
148 : m_numberOfPendingPromises(promises.size()) 148 : m_numberOfPendingPromises(promises.size())
149 , m_resolver(resolver) 149 , m_resolver(resolver)
150 { 150 {
151 m_values.resize(promises.size()); 151 m_values.resize(promises.size());
152 for (size_t i = 0; i < promises.size(); ++i) 152 for (size_t i = 0; i < promises.size(); ++i)
153 promises[i].then(createFulfillFunction(i), createRejectFunction()); 153 promises[i].then(createFulfillFunction(i), createRejectFunction());
154 } 154 }
155 155
156 void onFulfilled(size_t index, const ScriptValue& value) 156 void onFulfilled(size_t index, const ScriptValue& value)
157 { 157 {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 { 225 {
226 return AdapterFunction::create(m_resolver->scriptState(), AdapterFunctio n::Fulfilled, index, this); 226 return AdapterFunction::create(m_resolver->scriptState(), AdapterFunctio n::Fulfilled, index, this);
227 } 227 }
228 228
229 v8::Local<v8::Function> createRejectFunction() 229 v8::Local<v8::Function> createRejectFunction()
230 { 230 {
231 return AdapterFunction::create(m_resolver->scriptState(), AdapterFunctio n::Rejected, 0, this); 231 return AdapterFunction::create(m_resolver->scriptState(), AdapterFunctio n::Rejected, 0, this);
232 } 232 }
233 233
234 size_t m_numberOfPendingPromises; 234 size_t m_numberOfPendingPromises;
235 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; 235 Member<ScriptPromiseResolver> m_resolver;
236 bool m_isSettled = false; 236 bool m_isSettled = false;
237 Vector<ScriptValue> m_values; 237 Vector<ScriptValue> m_values;
238 }; 238 };
239 239
240 } // namespace 240 } // namespace
241 241
242 class Cache::FetchResolvedForAdd final : public ScriptFunction { 242 class Cache::FetchResolvedForAdd final : public ScriptFunction {
243 public: 243 public:
244 static v8::Local<v8::Function> create(ScriptState* scriptState, Cache* cache , const HeapVector<Member<Request>>& requests) 244 static v8::Local<v8::Function> create(ScriptState* scriptState, Cache* cache , const HeapVector<Member<Request>>& requests)
245 { 245 {
(...skipping 23 matching lines...) Expand all
269 , m_requests(requests) 269 , m_requests(requests)
270 { 270 {
271 } 271 }
272 272
273 Member<Cache> m_cache; 273 Member<Cache> m_cache;
274 HeapVector<Member<Request>> m_requests; 274 HeapVector<Member<Request>> m_requests;
275 }; 275 };
276 276
277 class Cache::BarrierCallbackForPut final : public GarbageCollectedFinalized<Barr ierCallbackForPut> { 277 class Cache::BarrierCallbackForPut final : public GarbageCollectedFinalized<Barr ierCallbackForPut> {
278 public: 278 public:
279 BarrierCallbackForPut(int numberOfOperations, Cache* cache, PassRefPtrWillBe RawPtr<ScriptPromiseResolver> resolver) 279 BarrierCallbackForPut(int numberOfOperations, Cache* cache, ScriptPromiseRes olver* resolver)
280 : m_numberOfRemainingOperations(numberOfOperations) 280 : m_numberOfRemainingOperations(numberOfOperations)
281 , m_cache(cache) 281 , m_cache(cache)
282 , m_resolver(resolver) 282 , m_resolver(resolver)
283 { 283 {
284 ASSERT(0 < m_numberOfRemainingOperations); 284 ASSERT(0 < m_numberOfRemainingOperations);
285 m_batchOperations.resize(numberOfOperations); 285 m_batchOperations.resize(numberOfOperations);
286 } 286 }
287 287
288 void onSuccess(size_t index, const WebServiceWorkerCache::BatchOperation& ba tchOperation) 288 void onSuccess(size_t index, const WebServiceWorkerCache::BatchOperation& ba tchOperation)
289 { 289 {
(...skipping 19 matching lines...) Expand all
309 DEFINE_INLINE_VIRTUAL_TRACE() 309 DEFINE_INLINE_VIRTUAL_TRACE()
310 { 310 {
311 visitor->trace(m_cache); 311 visitor->trace(m_cache);
312 visitor->trace(m_resolver); 312 visitor->trace(m_resolver);
313 } 313 }
314 314
315 private: 315 private:
316 bool m_completed = false; 316 bool m_completed = false;
317 int m_numberOfRemainingOperations; 317 int m_numberOfRemainingOperations;
318 Member<Cache> m_cache; 318 Member<Cache> m_cache;
319 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; 319 Member<ScriptPromiseResolver> m_resolver;
320 Vector<WebServiceWorkerCache::BatchOperation> m_batchOperations; 320 Vector<WebServiceWorkerCache::BatchOperation> m_batchOperations;
321 }; 321 };
322 322
323 class Cache::BlobHandleCallbackForPut final : public GarbageCollectedFinalized<B lobHandleCallbackForPut>, public FetchDataLoader::Client { 323 class Cache::BlobHandleCallbackForPut final : public GarbageCollectedFinalized<B lobHandleCallbackForPut>, public FetchDataLoader::Client {
324 USING_GARBAGE_COLLECTED_MIXIN(BlobHandleCallbackForPut); 324 USING_GARBAGE_COLLECTED_MIXIN(BlobHandleCallbackForPut);
325 public: 325 public:
326 BlobHandleCallbackForPut(size_t index, BarrierCallbackForPut* barrierCallbac k, Request* request, Response* response) 326 BlobHandleCallbackForPut(size_t index, BarrierCallbackForPut* barrierCallbac k, Request* request, Response* response)
327 : m_index(index) 327 : m_index(index)
328 , m_barrierCallback(barrierCallback) 328 , m_barrierCallback(barrierCallback)
329 { 329 {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 470
471 Cache::Cache(WeakPtr<GlobalFetch::ScopedFetcher> fetcher, WebServiceWorkerCache* webCache) 471 Cache::Cache(WeakPtr<GlobalFetch::ScopedFetcher> fetcher, WebServiceWorkerCache* webCache)
472 : m_scopedFetcher(fetcher) 472 : m_scopedFetcher(fetcher)
473 , m_webCache(adoptPtr(webCache)) { } 473 , m_webCache(adoptPtr(webCache)) { }
474 474
475 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options) 475 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options)
476 { 476 {
477 WebServiceWorkerRequest webRequest; 477 WebServiceWorkerRequest webRequest;
478 request->populateWebServiceWorkerRequest(webRequest); 478 request->populateWebServiceWorkerRequest(webRequest);
479 479
480 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 480 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
481 const ScriptPromise promise = resolver->promise(); 481 const ScriptPromise promise = resolver->promise();
482 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW ebQueryParams(options)); 482 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW ebQueryParams(options));
483 return promise; 483 return promise;
484 } 484 }
485 485
486 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque st, const CacheQueryOptions& options) 486 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque st, const CacheQueryOptions& options)
487 { 487 {
488 WebServiceWorkerRequest webRequest; 488 WebServiceWorkerRequest webRequest;
489 request->populateWebServiceWorkerRequest(webRequest); 489 request->populateWebServiceWorkerRequest(webRequest);
490 490
491 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 491 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
492 const ScriptPromise promise = resolver->promise(); 492 const ScriptPromise promise = resolver->promise();
493 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR equest, toWebQueryParams(options)); 493 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR equest, toWebQueryParams(options));
494 return promise; 494 return promise;
495 } 495 }
496 496
497 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, const HeapVector<Membe r<Request>>& requests, ExceptionState& exceptionState) 497 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, const HeapVector<Membe r<Request>>& requests, ExceptionState& exceptionState)
498 { 498 {
499 Vector<RequestInfo> requestInfos; 499 Vector<RequestInfo> requestInfos;
500 requestInfos.resize(requests.size()); 500 requestInfos.resize(requests.size());
501 Vector<ScriptPromise> promises; 501 Vector<ScriptPromise> promises;
502 promises.resize(requests.size()); 502 promises.resize(requests.size());
503 for (size_t i = 0; i < requests.size(); ++i) { 503 for (size_t i = 0; i < requests.size(); ++i) {
504 if (!requests[i]->url().protocolIsInHTTPFamily()) 504 if (!requests[i]->url().protocolIsInHTTPFamily())
505 return ScriptPromise::reject(scriptState, V8ThrowException::createTy peError(scriptState->isolate(), "Add/AddAll does not support schemes other than \"http\" or \"https\"")); 505 return ScriptPromise::reject(scriptState, V8ThrowException::createTy peError(scriptState->isolate(), "Add/AddAll does not support schemes other than \"http\" or \"https\""));
506 if (requests[i]->method() != "GET") 506 if (requests[i]->method() != "GET")
507 return ScriptPromise::reject(scriptState, V8ThrowException::createTy peError(scriptState->isolate(), "Add/AddAll only supports the GET request method .")); 507 return ScriptPromise::reject(scriptState, V8ThrowException::createTy peError(scriptState->isolate(), "Add/AddAll only supports the GET request method ."));
508 requestInfos[i].setRequest(requests[i]); 508 requestInfos[i].setRequest(requests[i]);
509 509
510 promises[i] = m_scopedFetcher->fetch(scriptState, requestInfos[i], Dicti onary(), exceptionState); 510 promises[i] = m_scopedFetcher->fetch(scriptState, requestInfos[i], Dicti onary(), exceptionState);
511 } 511 }
512 512
513 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 513 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
514 CacheStoragePromiseAll* promiseAll = new CacheStoragePromiseAll(promises, re solver.get()); 514 CacheStoragePromiseAll* promiseAll = new CacheStoragePromiseAll(promises, re solver);
515 return promiseAll->promise().then(FetchResolvedForAdd::create(scriptState, t his, requests)); 515 return promiseAll->promise().then(FetchResolvedForAdd::create(scriptState, t his, requests));
516 } 516 }
517 517
518 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request , const CacheQueryOptions& options) 518 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request , const CacheQueryOptions& options)
519 { 519 {
520 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); 520 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1));
521 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet e; 521 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet e;
522 request->populateWebServiceWorkerRequest(batchOperations[0].request); 522 request->populateWebServiceWorkerRequest(batchOperations[0].request);
523 batchOperations[0].matchParams = toWebQueryParams(options); 523 batchOperations[0].matchParams = toWebQueryParams(options);
524 524
525 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 525 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
526 const ScriptPromise promise = resolver->promise(); 526 const ScriptPromise promise = resolver->promise();
527 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations ); 527 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations );
528 return promise; 528 return promise;
529 } 529 }
530 530
531 ScriptPromise Cache::putImpl(ScriptState* scriptState, const HeapVector<Member<R equest>>& requests, const HeapVector<Member<Response>>& responses) 531 ScriptPromise Cache::putImpl(ScriptState* scriptState, const HeapVector<Member<R equest>>& requests, const HeapVector<Member<Response>>& responses)
532 { 532 {
533 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 533 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
534 const ScriptPromise promise = resolver->promise(); 534 const ScriptPromise promise = resolver->promise();
535 BarrierCallbackForPut* barrierCallback = new BarrierCallbackForPut(requests. size(), this, resolver.get()); 535 BarrierCallbackForPut* barrierCallback = new BarrierCallbackForPut(requests. size(), this, resolver);
536 536
537 for (size_t i = 0; i < requests.size(); ++i) { 537 for (size_t i = 0; i < requests.size(); ++i) {
538 KURL url(KURL(), requests[i]->url()); 538 KURL url(KURL(), requests[i]->url());
539 if (!url.protocolIsInHTTPFamily()) { 539 if (!url.protocolIsInHTTPFamily()) {
540 barrierCallback->onError("Request scheme '" + url.protocol() + "' is unsupported"); 540 barrierCallback->onError("Request scheme '" + url.protocol() + "' is unsupported");
541 return promise; 541 return promise;
542 } 542 }
543 if (requests[i]->method() != "GET") { 543 if (requests[i]->method() != "GET") {
544 barrierCallback->onError("Request method '" + requests[i]->method() + "' is unsupported"); 544 barrierCallback->onError("Request method '" + requests[i]->method() + "' is unsupported");
545 return promise; 545 return promise;
(...skipping 25 matching lines...) Expand all
571 requests[i]->populateWebServiceWorkerRequest(batchOperation.request); 571 requests[i]->populateWebServiceWorkerRequest(batchOperation.request);
572 responses[i]->populateWebServiceWorkerResponse(batchOperation.response); 572 responses[i]->populateWebServiceWorkerResponse(batchOperation.response);
573 barrierCallback->onSuccess(i, batchOperation); 573 barrierCallback->onSuccess(i, batchOperation);
574 } 574 }
575 575
576 return promise; 576 return promise;
577 } 577 }
578 578
579 ScriptPromise Cache::keysImpl(ScriptState* scriptState) 579 ScriptPromise Cache::keysImpl(ScriptState* scriptState)
580 { 580 {
581 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 581 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
582 const ScriptPromise promise = resolver->promise(); 582 const ScriptPromise promise = resolver->promise();
583 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer viceWorkerCache::QueryParams()); 583 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer viceWorkerCache::QueryParams());
584 return promise; 584 return promise;
585 } 585 }
586 586
587 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options) 587 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options)
588 { 588 {
589 WebServiceWorkerRequest webRequest; 589 WebServiceWorkerRequest webRequest;
590 request->populateWebServiceWorkerRequest(webRequest); 590 request->populateWebServiceWorkerRequest(webRequest);
591 591
592 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 592 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
593 const ScriptPromise promise = resolver->promise(); 593 const ScriptPromise promise = resolver->promise();
594 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ ueryParams(options)); 594 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ ueryParams(options));
595 return promise; 595 return promise;
596 } 596 }
597 597
598 WebServiceWorkerCache* Cache::webCache() const 598 WebServiceWorkerCache* Cache::webCache() const
599 { 599 {
600 return m_webCache.get(); 600 return m_webCache.get();
601 } 601 }
602 602
603 } // namespace blink 603 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698