| OLD | NEW |
| 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 "modules/cachestorage/Cache.h" | 5 #include "modules/cachestorage/Cache.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" | 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" |
| 8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
| 9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 10 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 | 42 |
| 43 // FIXME: Consider using CallbackPromiseAdapter. | 43 // FIXME: Consider using CallbackPromiseAdapter. |
| 44 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { | 44 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { |
| 45 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); | 45 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); |
| 46 public: | 46 public: |
| 47 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver) | 47 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver) |
| 48 : m_resolver(resolver) { } | 48 : m_resolver(resolver) { } |
| 49 | 49 |
| 50 void onSuccess(const WebServiceWorkerResponse& webResponse) override | 50 void onSuccess(const WebServiceWorkerResponse& webResponse) override |
| 51 { | 51 { |
| 52 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 52 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 53 return; | 53 return; |
| 54 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio
nContext(), webResponse)); | 54 m_resolver->resolve(Response::create(m_resolver->getScriptState()->getEx
ecutionContext(), webResponse)); |
| 55 m_resolver.clear(); | 55 m_resolver.clear(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 void onError(WebServiceWorkerCacheError reason) override | 58 void onError(WebServiceWorkerCacheError reason) override |
| 59 { | 59 { |
| 60 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 60 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 61 return; | 61 return; |
| 62 if (reason == WebServiceWorkerCacheErrorNotFound) | 62 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 63 m_resolver->resolve(); | 63 m_resolver->resolve(); |
| 64 else | 64 else |
| 65 m_resolver->reject(CacheStorageError::createException(reason)); | 65 m_resolver->reject(CacheStorageError::createException(reason)); |
| 66 m_resolver.clear(); | 66 m_resolver.clear(); |
| 67 } | 67 } |
| 68 | 68 |
| 69 private: | 69 private: |
| 70 Persistent<ScriptPromiseResolver> m_resolver; | 70 Persistent<ScriptPromiseResolver> m_resolver; |
| 71 }; | 71 }; |
| 72 | 72 |
| 73 // FIXME: Consider using CallbackPromiseAdapter. | 73 // FIXME: Consider using CallbackPromiseAdapter. |
| 74 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo
nsesCallbacks { | 74 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo
nsesCallbacks { |
| 75 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); | 75 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); |
| 76 public: | 76 public: |
| 77 explicit CacheWithResponsesCallbacks(ScriptPromiseResolver* resolver) | 77 explicit CacheWithResponsesCallbacks(ScriptPromiseResolver* resolver) |
| 78 : m_resolver(resolver) { } | 78 : m_resolver(resolver) { } |
| 79 | 79 |
| 80 void onSuccess(const WebVector<WebServiceWorkerResponse>& webResponses) over
ride | 80 void onSuccess(const WebVector<WebServiceWorkerResponse>& webResponses) over
ride |
| 81 { | 81 { |
| 82 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 82 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 83 return; | 83 return; |
| 84 HeapVector<Member<Response>> responses; | 84 HeapVector<Member<Response>> responses; |
| 85 for (size_t i = 0; i < webResponses.size(); ++i) | 85 for (size_t i = 0; i < webResponses.size(); ++i) |
| 86 responses.append(Response::create(m_resolver->scriptState()->executi
onContext(), webResponses[i])); | 86 responses.append(Response::create(m_resolver->getScriptState()->getE
xecutionContext(), webResponses[i])); |
| 87 m_resolver->resolve(responses); | 87 m_resolver->resolve(responses); |
| 88 m_resolver.clear(); | 88 m_resolver.clear(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 void onError(WebServiceWorkerCacheError reason) override | 91 void onError(WebServiceWorkerCacheError reason) override |
| 92 { | 92 { |
| 93 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 93 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 94 return; | 94 return; |
| 95 m_resolver->reject(CacheStorageError::createException(reason)); | 95 m_resolver->reject(CacheStorageError::createException(reason)); |
| 96 m_resolver.clear(); | 96 m_resolver.clear(); |
| 97 } | 97 } |
| 98 | 98 |
| 99 protected: | 99 protected: |
| 100 Persistent<ScriptPromiseResolver> m_resolver; | 100 Persistent<ScriptPromiseResolver> m_resolver; |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 // FIXME: Consider using CallbackPromiseAdapter. | 103 // FIXME: Consider using CallbackPromiseAdapter. |
| 104 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks { | 104 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks { |
| 105 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); | 105 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); |
| 106 public: | 106 public: |
| 107 explicit CacheDeleteCallback(ScriptPromiseResolver* resolver) | 107 explicit CacheDeleteCallback(ScriptPromiseResolver* resolver) |
| 108 : m_resolver(resolver) { } | 108 : m_resolver(resolver) { } |
| 109 | 109 |
| 110 void onSuccess() override | 110 void onSuccess() override |
| 111 { | 111 { |
| 112 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 112 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 113 return; | 113 return; |
| 114 m_resolver->resolve(true); | 114 m_resolver->resolve(true); |
| 115 m_resolver.clear(); | 115 m_resolver.clear(); |
| 116 } | 116 } |
| 117 | 117 |
| 118 void onError(WebServiceWorkerCacheError reason) override | 118 void onError(WebServiceWorkerCacheError reason) override |
| 119 { | 119 { |
| 120 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 120 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 121 return; | 121 return; |
| 122 if (reason == WebServiceWorkerCacheErrorNotFound) | 122 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 123 m_resolver->resolve(false); | 123 m_resolver->resolve(false); |
| 124 else | 124 else |
| 125 m_resolver->reject(CacheStorageError::createException(reason)); | 125 m_resolver->reject(CacheStorageError::createException(reason)); |
| 126 m_resolver.clear(); | 126 m_resolver.clear(); |
| 127 } | 127 } |
| 128 | 128 |
| 129 private: | 129 private: |
| 130 Persistent<ScriptPromiseResolver> m_resolver; | 130 Persistent<ScriptPromiseResolver> m_resolver; |
| 131 }; | 131 }; |
| 132 | 132 |
| 133 // FIXME: Consider using CallbackPromiseAdapter. | 133 // FIXME: Consider using CallbackPromiseAdapter. |
| 134 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques
tsCallbacks { | 134 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques
tsCallbacks { |
| 135 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); | 135 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); |
| 136 public: | 136 public: |
| 137 explicit CacheWithRequestsCallbacks(ScriptPromiseResolver* resolver) | 137 explicit CacheWithRequestsCallbacks(ScriptPromiseResolver* resolver) |
| 138 : m_resolver(resolver) { } | 138 : m_resolver(resolver) { } |
| 139 | 139 |
| 140 void onSuccess(const WebVector<WebServiceWorkerRequest>& webRequests) overri
de | 140 void onSuccess(const WebVector<WebServiceWorkerRequest>& webRequests) overri
de |
| 141 { | 141 { |
| 142 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 142 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 143 return; | 143 return; |
| 144 HeapVector<Member<Request>> requests; | 144 HeapVector<Member<Request>> requests; |
| 145 for (size_t i = 0; i < webRequests.size(); ++i) | 145 for (size_t i = 0; i < webRequests.size(); ++i) |
| 146 requests.append(Request::create(m_resolver->scriptState()->execution
Context(), webRequests[i])); | 146 requests.append(Request::create(m_resolver->getScriptState()->getExe
cutionContext(), webRequests[i])); |
| 147 m_resolver->resolve(requests); | 147 m_resolver->resolve(requests); |
| 148 m_resolver.clear(); | 148 m_resolver.clear(); |
| 149 } | 149 } |
| 150 | 150 |
| 151 void onError(WebServiceWorkerCacheError reason) override | 151 void onError(WebServiceWorkerCacheError reason) override |
| 152 { | 152 { |
| 153 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 153 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 154 return; | 154 return; |
| 155 m_resolver->reject(CacheStorageError::createException(reason)); | 155 m_resolver->reject(CacheStorageError::createException(reason)); |
| 156 m_resolver.clear(); | 156 m_resolver.clear(); |
| 157 } | 157 } |
| 158 | 158 |
| 159 private: | 159 private: |
| 160 Persistent<ScriptPromiseResolver> m_resolver; | 160 Persistent<ScriptPromiseResolver> m_resolver; |
| 161 }; | 161 }; |
| 162 | 162 |
| 163 // Used for UMA. Append only. | 163 // Used for UMA. Append only. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 public: | 223 public: |
| 224 static v8::Local<v8::Function> create(ScriptState* scriptState, Cache* cache
, const HeapVector<Member<Request>>& requests) | 224 static v8::Local<v8::Function> create(ScriptState* scriptState, Cache* cache
, const HeapVector<Member<Request>>& requests) |
| 225 { | 225 { |
| 226 FetchResolvedForAdd* self = new FetchResolvedForAdd(scriptState, cache,
requests); | 226 FetchResolvedForAdd* self = new FetchResolvedForAdd(scriptState, cache,
requests); |
| 227 return self->bindToV8Function(); | 227 return self->bindToV8Function(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 ScriptValue call(ScriptValue value) override | 230 ScriptValue call(ScriptValue value) override |
| 231 { | 231 { |
| 232 NonThrowableExceptionState exceptionState; | 232 NonThrowableExceptionState exceptionState; |
| 233 HeapVector<Member<Response>> responses = toMemberNativeArray<Response, V
8Response>(value.v8Value(), m_requests.size(), scriptState()->isolate(), excepti
onState); | 233 HeapVector<Member<Response>> responses = toMemberNativeArray<Response, V
8Response>(value.v8Value(), m_requests.size(), getScriptState()->isolate(), exce
ptionState); |
| 234 | 234 |
| 235 for (const auto& response : responses) { | 235 for (const auto& response : responses) { |
| 236 if (!response->ok()) { | 236 if (!response->ok()) { |
| 237 ScriptPromise rejection = ScriptPromise::reject(scriptState(), V
8ThrowException::createTypeError(scriptState()->isolate(), "Request failed")); | 237 ScriptPromise rejection = ScriptPromise::reject(getScriptState()
, V8ThrowException::createTypeError(getScriptState()->isolate(), "Request failed
")); |
| 238 return ScriptValue(scriptState(), rejection.v8Value()); | 238 return ScriptValue(getScriptState(), rejection.v8Value()); |
| 239 } | 239 } |
| 240 if (varyHeaderContainsAsterisk(response)) { | 240 if (varyHeaderContainsAsterisk(response)) { |
| 241 ScriptPromise rejection = ScriptPromise::reject(scriptState(), V
8ThrowException::createTypeError(scriptState()->isolate(), "Vary header contains
*")); | 241 ScriptPromise rejection = ScriptPromise::reject(getScriptState()
, V8ThrowException::createTypeError(getScriptState()->isolate(), "Vary header co
ntains *")); |
| 242 return ScriptValue(scriptState(), rejection.v8Value()); | 242 return ScriptValue(getScriptState(), rejection.v8Value()); |
| 243 } | 243 } |
| 244 } | 244 } |
| 245 | 245 |
| 246 for (const auto& response : responses) | 246 for (const auto& response : responses) |
| 247 RecordResponseTypeForAdd(response); | 247 RecordResponseTypeForAdd(response); |
| 248 | 248 |
| 249 ScriptPromise putPromise = m_cache->putImpl(scriptState(), m_requests, r
esponses); | 249 ScriptPromise putPromise = m_cache->putImpl(getScriptState(), m_requests
, responses); |
| 250 return ScriptValue(scriptState(), putPromise.v8Value()); | 250 return ScriptValue(getScriptState(), putPromise.v8Value()); |
| 251 } | 251 } |
| 252 | 252 |
| 253 DEFINE_INLINE_VIRTUAL_TRACE() | 253 DEFINE_INLINE_VIRTUAL_TRACE() |
| 254 { | 254 { |
| 255 visitor->trace(m_cache); | 255 visitor->trace(m_cache); |
| 256 visitor->trace(m_requests); | 256 visitor->trace(m_requests); |
| 257 ScriptFunction::trace(visitor); | 257 ScriptFunction::trace(visitor); |
| 258 } | 258 } |
| 259 | 259 |
| 260 private: | 260 private: |
| (...skipping 17 matching lines...) Expand all Loading... |
| 278 { | 278 { |
| 279 ASSERT(0 < m_numberOfRemainingOperations); | 279 ASSERT(0 < m_numberOfRemainingOperations); |
| 280 m_batchOperations.resize(numberOfOperations); | 280 m_batchOperations.resize(numberOfOperations); |
| 281 } | 281 } |
| 282 | 282 |
| 283 void onSuccess(size_t index, const WebServiceWorkerCache::BatchOperation& ba
tchOperation) | 283 void onSuccess(size_t index, const WebServiceWorkerCache::BatchOperation& ba
tchOperation) |
| 284 { | 284 { |
| 285 ASSERT(index < m_batchOperations.size()); | 285 ASSERT(index < m_batchOperations.size()); |
| 286 if (m_completed) | 286 if (m_completed) |
| 287 return; | 287 return; |
| 288 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 288 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 289 return; | 289 return; |
| 290 m_batchOperations[index] = batchOperation; | 290 m_batchOperations[index] = batchOperation; |
| 291 if (--m_numberOfRemainingOperations != 0) | 291 if (--m_numberOfRemainingOperations != 0) |
| 292 return; | 292 return; |
| 293 m_cache->webCache()->dispatchBatch(new CallbackPromiseAdapter<void, Cach
eStorageError>(m_resolver), m_batchOperations); | 293 m_cache->webCache()->dispatchBatch(new CallbackPromiseAdapter<void, Cach
eStorageError>(m_resolver), m_batchOperations); |
| 294 } | 294 } |
| 295 | 295 |
| 296 void onError(const String& errorMessage) | 296 void onError(const String& errorMessage) |
| 297 { | 297 { |
| 298 if (m_completed) | 298 if (m_completed) |
| 299 return; | 299 return; |
| 300 m_completed = true; | 300 m_completed = true; |
| 301 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 301 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 302 return; | 302 return; |
| 303 ScriptState* state = m_resolver->scriptState(); | 303 ScriptState* state = m_resolver->getScriptState(); |
| 304 ScriptState::Scope scope(state); | 304 ScriptState::Scope scope(state); |
| 305 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), e
rrorMessage)); | 305 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), e
rrorMessage)); |
| 306 } | 306 } |
| 307 | 307 |
| 308 DEFINE_INLINE_VIRTUAL_TRACE() | 308 DEFINE_INLINE_VIRTUAL_TRACE() |
| 309 { | 309 { |
| 310 visitor->trace(m_cache); | 310 visitor->trace(m_cache); |
| 311 visitor->trace(m_resolver); | 311 visitor->trace(m_resolver); |
| 312 } | 312 } |
| 313 | 313 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 | 480 |
| 481 DEFINE_TRACE(Cache) | 481 DEFINE_TRACE(Cache) |
| 482 { | 482 { |
| 483 visitor->trace(m_scopedFetcher); | 483 visitor->trace(m_scopedFetcher); |
| 484 } | 484 } |
| 485 | 485 |
| 486 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) | 486 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) |
| 487 { | 487 { |
| 488 WebServiceWorkerRequest webRequest; | 488 WebServiceWorkerRequest webRequest; |
| 489 request->populateWebServiceWorkerRequest(webRequest); | 489 request->populateWebServiceWorkerRequest(webRequest); |
| 490 checkCacheQueryOptions(options, scriptState->executionContext()); | 490 checkCacheQueryOptions(options, scriptState->getExecutionContext()); |
| 491 | 491 |
| 492 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 492 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 493 const ScriptPromise promise = resolver->promise(); | 493 const ScriptPromise promise = resolver->promise(); |
| 494 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW
ebQueryParams(options)); | 494 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW
ebQueryParams(options)); |
| 495 return promise; | 495 return promise; |
| 496 } | 496 } |
| 497 | 497 |
| 498 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState) | 498 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState) |
| 499 { | 499 { |
| 500 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 500 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 501 const ScriptPromise promise = resolver->promise(); | 501 const ScriptPromise promise = resolver->promise(); |
| 502 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), WebS
erviceWorkerRequest(), WebServiceWorkerCache::QueryParams()); | 502 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), WebS
erviceWorkerRequest(), WebServiceWorkerCache::QueryParams()); |
| 503 return promise; | 503 return promise; |
| 504 } | 504 } |
| 505 | 505 |
| 506 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque
st, const CacheQueryOptions& options) | 506 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque
st, const CacheQueryOptions& options) |
| 507 { | 507 { |
| 508 WebServiceWorkerRequest webRequest; | 508 WebServiceWorkerRequest webRequest; |
| 509 request->populateWebServiceWorkerRequest(webRequest); | 509 request->populateWebServiceWorkerRequest(webRequest); |
| 510 checkCacheQueryOptions(options, scriptState->executionContext()); | 510 checkCacheQueryOptions(options, scriptState->getExecutionContext()); |
| 511 | 511 |
| 512 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 512 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 513 const ScriptPromise promise = resolver->promise(); | 513 const ScriptPromise promise = resolver->promise(); |
| 514 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR
equest, toWebQueryParams(options)); | 514 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR
equest, toWebQueryParams(options)); |
| 515 return promise; | 515 return promise; |
| 516 } | 516 } |
| 517 | 517 |
| 518 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, const HeapVector<Membe
r<Request>>& requests, ExceptionState& exceptionState) | 518 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, const HeapVector<Membe
r<Request>>& requests, ExceptionState& exceptionState) |
| 519 { | 519 { |
| 520 if (requests.isEmpty()) | 520 if (requests.isEmpty()) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 535 } | 535 } |
| 536 | 536 |
| 537 return ScriptPromise::all(scriptState, promises).then(FetchResolvedForAdd::c
reate(scriptState, this, requests)); | 537 return ScriptPromise::all(scriptState, promises).then(FetchResolvedForAdd::c
reate(scriptState, this, requests)); |
| 538 } | 538 } |
| 539 | 539 |
| 540 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request
, const CacheQueryOptions& options) | 540 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request
, const CacheQueryOptions& options) |
| 541 { | 541 { |
| 542 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); | 542 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); |
| 543 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet
e; | 543 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet
e; |
| 544 request->populateWebServiceWorkerRequest(batchOperations[0].request); | 544 request->populateWebServiceWorkerRequest(batchOperations[0].request); |
| 545 checkCacheQueryOptions(options, scriptState->executionContext()); | 545 checkCacheQueryOptions(options, scriptState->getExecutionContext()); |
| 546 batchOperations[0].matchParams = toWebQueryParams(options); | 546 batchOperations[0].matchParams = toWebQueryParams(options); |
| 547 | 547 |
| 548 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 548 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 549 const ScriptPromise promise = resolver->promise(); | 549 const ScriptPromise promise = resolver->promise(); |
| 550 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations
); | 550 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations
); |
| 551 return promise; | 551 return promise; |
| 552 } | 552 } |
| 553 | 553 |
| 554 ScriptPromise Cache::putImpl(ScriptState* scriptState, const HeapVector<Member<R
equest>>& requests, const HeapVector<Member<Response>>& responses) | 554 ScriptPromise Cache::putImpl(ScriptState* scriptState, const HeapVector<Member<R
equest>>& requests, const HeapVector<Member<Response>>& responses) |
| 555 { | 555 { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 577 if (responses[i]->isBodyLocked() || responses[i]->bodyUsed()) { | 577 if (responses[i]->isBodyLocked() || responses[i]->bodyUsed()) { |
| 578 barrierCallback->onError("Response body is already used"); | 578 barrierCallback->onError("Response body is already used"); |
| 579 return promise; | 579 return promise; |
| 580 } | 580 } |
| 581 | 581 |
| 582 BodyStreamBuffer* buffer = responses[i]->internalBodyBuffer(); | 582 BodyStreamBuffer* buffer = responses[i]->internalBodyBuffer(); |
| 583 if (buffer) { | 583 if (buffer) { |
| 584 // If the response has body, read the all data and create | 584 // If the response has body, read the all data and create |
| 585 // the blob handle and dispatch the put batch asynchronously. | 585 // the blob handle and dispatch the put batch asynchronously. |
| 586 FetchDataLoader* loader = FetchDataLoader::createLoaderAsBlobHandle(
responses[i]->internalMIMEType()); | 586 FetchDataLoader* loader = FetchDataLoader::createLoaderAsBlobHandle(
responses[i]->internalMIMEType()); |
| 587 buffer->startLoading(scriptState->executionContext(), loader, new Bl
obHandleCallbackForPut(i, barrierCallback, requests[i], responses[i])); | 587 buffer->startLoading(scriptState->getExecutionContext(), loader, new
BlobHandleCallbackForPut(i, barrierCallback, requests[i], responses[i])); |
| 588 continue; | 588 continue; |
| 589 } | 589 } |
| 590 | 590 |
| 591 WebServiceWorkerCache::BatchOperation batchOperation; | 591 WebServiceWorkerCache::BatchOperation batchOperation; |
| 592 batchOperation.operationType = WebServiceWorkerCache::OperationTypePut; | 592 batchOperation.operationType = WebServiceWorkerCache::OperationTypePut; |
| 593 requests[i]->populateWebServiceWorkerRequest(batchOperation.request); | 593 requests[i]->populateWebServiceWorkerRequest(batchOperation.request); |
| 594 responses[i]->populateWebServiceWorkerResponse(batchOperation.response); | 594 responses[i]->populateWebServiceWorkerResponse(batchOperation.response); |
| 595 barrierCallback->onSuccess(i, batchOperation); | 595 barrierCallback->onSuccess(i, batchOperation); |
| 596 } | 596 } |
| 597 | 597 |
| 598 return promise; | 598 return promise; |
| 599 } | 599 } |
| 600 | 600 |
| 601 ScriptPromise Cache::keysImpl(ScriptState* scriptState) | 601 ScriptPromise Cache::keysImpl(ScriptState* scriptState) |
| 602 { | 602 { |
| 603 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 603 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 604 const ScriptPromise promise = resolver->promise(); | 604 const ScriptPromise promise = resolver->promise(); |
| 605 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer
viceWorkerCache::QueryParams()); | 605 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer
viceWorkerCache::QueryParams()); |
| 606 return promise; | 606 return promise; |
| 607 } | 607 } |
| 608 | 608 |
| 609 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) | 609 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) |
| 610 { | 610 { |
| 611 WebServiceWorkerRequest webRequest; | 611 WebServiceWorkerRequest webRequest; |
| 612 request->populateWebServiceWorkerRequest(webRequest); | 612 request->populateWebServiceWorkerRequest(webRequest); |
| 613 checkCacheQueryOptions(options, scriptState->executionContext()); | 613 checkCacheQueryOptions(options, scriptState->getExecutionContext()); |
| 614 | 614 |
| 615 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 615 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 616 const ScriptPromise promise = resolver->promise(); | 616 const ScriptPromise promise = resolver->promise(); |
| 617 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); | 617 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); |
| 618 return promise; | 618 return promise; |
| 619 } | 619 } |
| 620 | 620 |
| 621 WebServiceWorkerCache* Cache::webCache() const | 621 WebServiceWorkerCache* Cache::webCache() const |
| 622 { | 622 { |
| 623 return m_webCache.get(); | 623 return m_webCache.get(); |
| 624 } | 624 } |
| 625 | 625 |
| 626 } // namespace blink | 626 } // namespace blink |
| OLD | NEW |